2017-06-30 4 views
-2
for($i=0; $i<count($_POST['order_item']); $i++) 
{ 

$order_date=$_POST['order_date']; 
$customer_name=$_POST['customer_name']; 
$salesman_name=$_POST['salesman_name']; 
$area_code=$_POST['area_code']; 
$product_name=$_POST['product_name'][$i]; 
$item_qty=$_POST['item_qty'][$i];//product actual quality 
$order_item=$_POST['order_item'][$i]; //order item number 
$billed_qty=$_POST['itqty'][$i]; // product billed quantity editable 
$prod_mrps=$_POST['mrps'][$i]; 
$prices=$_POST['price'][$i]; 
$discount=$_POST['qty'][$i]; 
$amount=$_POST['total'][$i];  
$prod_qty = $_POST['prod_qty'][$i];//available quantity 
$batch_no = $_POST['batch_no'][$i];//batch number 
$qtyout = 0; 
$result = $dbo->query("SELECT `batch_no`, `prod_id`, `prod_name`, `total_qty` FROM `sm_product_batch` where `prod_name` = '$product_name' and `batch_status` = 'Active_batch' order by batch_no asc"); 
     while ($row = $result->fetch(PDO::FETCH_ASSOC)) 
     { 
      if($billed_qty > 0) 
      { 
       $batchout = 0; 
       $rem = max($row['total_qty']-$billed_qty,0); 
       if($rem == 0) 
        $batchout = $row['total_qty']; //This means there are no items of this cost remaining 
       else 
        $batchout = $billed_qty; //This means there are items remaining and therefore our next loop (within the while) will check for the next expensive item 

       $billed_qty -= $batchout; 
       $qtyout += $batchout; 
       $sql = "Update sm_product_batch set total_qty = (total_qty - $batchout) where prod_name='".$product_name."' AND batch_no = ".$row["batch_no"]; 
       $dbo->query($sql); 
       $sql1 = "Update sm_product_batch SET batch_status=CASE WHEN total_qty='0' THEN 'Inactive_batch' ELSE 'Active_batch' END where prod_name='".$product_name."'"; 
       $dbo->query($sql1); 
      } 
     } 
     $sql = "INSERT INTO sm_invoice (order_id,invoice_id,product_name,customer_name,salesman_name,order_item,area_code,order_date,invoice_date,item_qty,billed_qty,batch_no,prod_mrp,price,spl_dis,total) VALUES ('".$order_id."','".$order_id."','".$product_name."','".$customer_name."','".$salesman_name."','".$order_item."','".$area_code."','".$order_date."','".$invoice_date."','".$item_qty."','".$_POST['itqty'][$i]."','".$batch_no."','".$prod_mrps."','".$prices."','".$discount."','".$amount."')"; 
     $dbo->query($sql); 
} 

Dies ist mein Code Inventar mit Chargen- und Rechnungstabelle zu aktualisieren. Dieser Code funktioniert nur für mein erstes Produkt. Müssen Sie dies für alle Produkte eines Auftrags tun. Jede Hilfe wird geschätzt.php Inventar und Auftragsmanagementsystem

+1

Sie sollten wirklich zu vorbereiteten Anweisungen wechseln. – jeroen

+0

Probieren Sie in jeder Schleife "$ billed_qty" aus, um zu sehen, ob das so eingestellt wird, wie Sie denken. –

+1

Sie müssen Ihr Programm debuggen. –

Antwort

0
for($i=0; $i<count($_POST['order_item']); $i++) 
{ 
$order_date=$_POST['order_date']; 
$customer_name=$_POST['customer_name']; 
$salesman_name=$_POST['salesman_name']; 
$area_code=$_POST['area_code']; 
$product_name=$_POST['product_name'][$i]; 
$item_qty=$_POST['item_qty'][$i];//product actual quality 
$order_item=$_POST['order_item'][$i]; //order item number 
$billed_qty=$_POST['itqty'][$i]; // product billed quantity editable 
$prod_mrps=$_POST['mrps'][$i]; 
$prices=$_POST['price'][$i]; 
$discount=$_POST['qty'][$i]; 
$amount=$_POST['total'][$i];  
$prod_qty = $_POST['prod_qty'][$i];//available quantity 
$batch_no = $_POST['batch_no'][$i];//batch number 
$qtyout = 0; 
$result = $dbo->query("SELECT `batch_no`, `prod_id`, `prod_name`, `total_qty` FROM `sm_product_batch` where `prod_name` = '$product_name' and `batch_status` = 'Active_batch' order by batch_no asc"); 
     while ($row = $result->fetch(PDO::FETCH_ASSOC)) 
     { 
      if($billed_qty > 0) 
      { 
       $batchout = 0; 
       $rem = max($row['total_qty']-$billed_qty,0); 
       if($rem == 0) 
        $batchout = $row['total_qty']; //This means there are no items of this cost remaining 
       else 
        $batchout = $billed_qty; //This means there are items remaining and therefore our next loop (within the while) will check for the next expensive item 
       $billed_qty -= $batchout; 
       $qtyout += $batchout; 
       $sql = "Update sm_product_batch set total_qty = (total_qty - $batchout) where prod_name='".$product_name."' AND batch_no = ".$row["batch_no"]; 
       $dbo->query($sql); 
       $sql1 = "Update sm_product_batch SET batch_status=CASE WHEN total_qty='0' THEN 'Inactive_batch' ELSE 'Active_batch' END where prod_name='".$product_name."'"; 
       $dbo->query($sql1); 
     $sql = "INSERT INTO sm_invoice (order_id,invoice_id,product_name,customer_name,salesman_name,order_item,area_code,order_date,invoice_date,item_qty,billed_qty,batch_no,prod_mrp,price,spl_dis,total) VALUES ('".$order_id."','".$order_id."','".$_POST['product_name'][$i]."','".$customer_name."','".$salesman_name."','".$_POST['order_item'][$i]."','".$area_code."','".$order_date."','".$invoice_date."','".$item_qty."','".$batchout."','".$row["batch_no"]."','".$_POST['mrps'][$i]."','".$_POST['price'][$i]."','".$_POST['qty'][$i]."','".$_POST['total'][$i]."')"; 
     $dbo->query($sql); 
      } 
     } 
} 

die Antwort nach vielen Debugging gefunden. Vielen Dank für Ihre Antwort.