2016-01-13 215 views
0

我有兩個數據表stock_incomes,stock_outcomes和stock_outcomes_fifo(一個我插入預先計算的數據):FIFO計算

stock_incomes(存儲剩菜數據)

id| Levtv 
----------- 
7 | 100 
8 | 250 
9 | 350 

stock_outcomes(這裏是從stock_incomes點)

id| Quantity 
-------------- 
1 | 150* 

我沒有問題,當stock_outcomes.Quantity小於100(分鐘(同上),請參閱下面我的代碼),但我不知道世界衛生大會t代碼寫我可以得到計算,如果結果是> 100。在我的例子中,我用150,我想在接下來的表來獲取數據:

stock_outcomes_fifo(一個我想從以前的兩個表插入預先計算的數據)

id| IncomeId| OutcomeId| OutcomePart| Leftv 
--------------------------------------------- 
1 | 7 |  1 |  100 | 0 
2 | 8 |  1 |  50 | 200 

這裏是我的裏面的問題代碼(見代碼的最後一部分):

<?php 
include_once("config.inc.php"); 
include_once("db.class.php"); 

// stock_outcomes 
$db = new db($host, $database, $user, $passwd); 
$sql = "SELECT * FROM stock_outcomes WHERE Id = '1'"; 
$mas = $db->get_array($sql); 

if($mas) { 
    foreach ($mas as $k => $v) { 
      $OutcomeId = $mas[$k]['Id']; 
      $OutcomeQuantity = $mas[$k]['Quantity']; 
    } 
} 

// stock_incomes 
$sql = "select * from stock_incomes where Id = (select min(Id) from stock_incomes where Leftv > 0)"; 
$mas = $db->get_array($sql); 

if($mas) { 
    foreach ($mas as $k => $v) { 
     $IncomeId = $mas[$k]['Id']; 
     $IncomeLeftv = $mas[$k]['Leftv']; 
    } 
} 

// insert into stock_outcomes_fifo 

if ($OutcomeQuantity <= $IncomeLeftv) { 
    $OutcomePart = $OutcomeQuantity; 
    $FifoLeftv = $IncomeLeftv - $OutcomeQuantity; 

    mysql_query("INSERT INTO `stock_outcomes_fifo` (IncomeId,OutcomeId,OutcomePart,Leftv) VALUES ($IncomeId, $OutcomeId, $OutcomePart, $FifoLeftv)"); 
} 

if ($OutcomeQuantity > $IncomeLeftv) { 
    // I have no idea what php function to use in this case... please give me direction, thank you... 
} 
?> 
+0

我編輯了你的文章,使代碼更具可讀性,但你的問題仍然有點不清楚。你能再看看你的問題,看看你是否可以改寫它來使它更容易理解? – jbafford

回答

0

的問題已經解決了,這裏是最後的工作代碼的情況下,有人可能會需要它:

<?php 
include_once("config.inc.php"); 
include_once("db.class.php"); 

// stock_outcomes 
$db = new db($host, $database, $user, $passwd); 
$sql = "SELECT * FROM stock_outcomes WHERE Id = '1'"; 
$mas = $db->get_array($sql); 

if($mas){ 
    foreach ($mas as $k=>$v) { 
      $OutcomeId=$mas[$k]['Id']; 
      $OutcomeBarCode=$mas[$k]['BarCode']; 
      $OutcomeQuantity=$mas[$k]['Quantity']; 
    } 
} 

/* - Start code */ 
if ($OutcomeQuantity > 0) { 
$sql = "select * from stock_incomes where Leftv > 0 order by id asc"; 
$mas = $db->get_array($sql); 

if ($mas) { 
    //filing stock_outcomes_fifo 
     foreach ($mas as $k=>$v) { 
     $IncomeId = $mas[$k]['Id']; 
     $IncomeQuantity = $mas[$k]['Quantity']; 
     $IncomeUnitPrice = $mas[$k]['UnitPrice']; 
     $IncomeLeftv = $mas[$k]['Leftv']; 

     $OutcomePart = min($OutcomeQuantity, $IncomeLeftv); 
     $FifoLeftv = $IncomeLeftv - $OutcomePart; 
     $FifoCost = $IncomeUnitPrice * $OutcomePart; 

     mysql_query("INSERT INTO `stock_outcomes_fifo` (BarCode,IncomeId,OutcomeId,OutcomePart,UnitPrice,Leftv,Cost) VALUES ($OutcomeBarCode, $IncomeId, $OutcomeId, $OutcomePart, $IncomeUnitPrice, $FifoLeftv, $FifoCost)");   
     mysql_query("UPDATE `stock_incomes` SET Leftv = ".$FifoLeftv." WHERE Id = ".$IncomeId); 

     $OutcomeQuantity -= $OutcomePart; 
     if ($OutcomeQuantity <= 0) break; 
    } 

    $OutcomeCostQuery = "select sum(Cost) as summ from stock_outcomes_fifo where OutcomeId = ".$OutcomeId.""; 
    $OutcomeCost = mysql_query($OutcomeCostQuery); 
    $OutcomeCostResult = mysql_fetch_array($OutcomeCost);   
    mysql_query("UPDATE `stock_outcomes` SET Cost = ".$OutcomeCostResult["summ"]." WHERE Id = ".$OutcomeId.""); 
} 
} /* - Finish code */ 

?>