Guess what :) [0000137] Material Cost Averaging Problem (again again again) when...
authorJoe Hunt <joe.hunt.consulting@gmail.com>
Wed, 1 Jul 2009 09:10:01 +0000 (09:10 +0000)
committerJoe Hunt <joe.hunt.consulting@gmail.com>
Wed, 1 Jul 2009 09:10:01 +0000 (09:10 +0000)
CHANGELOG.txt
purchasing/includes/db/invoice_db.inc

index c9a09f967cba2833c8795ad92fb61008e05e1674..41900863d0ae8edbe180caf019981763e6f71759 100644 (file)
@@ -19,6 +19,10 @@ Legend:
 ! -> Note
 $ -> Affected files
 
+01-Jul-2009 Joe Hunt
+# Guess what :) [0000137] Material Cost Averaging Problem (again again again) when voiding.
+$ /purchasing/includes/db/invoice_db.inc
+
 26-Jun-2009 Joe Hunt
 # [0000137] Material Cost Averaging Problem (again again) when voiding.
 $ /purchasing/includes/db/invoice_db.inc
index a7a7cba45e0cb210d0ef7a648cc5a90061b4b708..c5c63c8efd66f7813d160e437f625649dc330b9b 100644 (file)
@@ -401,6 +401,15 @@ function read_supp_invoice($trans_no, $trans_type, &$supp_trans)
 
 //----------------------------------------------------------------------------------------
 
+function get_matching_invoice_item($stock_id, $po_item_id)
+{
+       $sql = "SELECT *, tran_date FROM ".TB_PREF."supp_invoice_items, ".TB_PREF."supp_trans
+               WHERE supp_trans_type = 20 AND stock_id = '$stock_id' AND po_detail_item_id = $po_item_id
+               AND supp_trans_no = trans_no";
+       $result = db_query($sql, "Cannot retreive supplier transaction detail records");
+       return db_fetch($result);  
+}
+
 function void_supp_invoice($type, $type_no)
 {
        begin_transaction();
@@ -435,17 +444,24 @@ function void_supp_invoice($type, $type_no)
                                $batch = get_grn_batch_from_item($details_row["grn_item_id"]);  
                                $grn = get_grn_batch($batch);
                        if ($type == 21) // credit note 2009-06-14 Joe Hunt Must restore the po and grn
-                       {
+                       {       // We must get the corresponding invoice item to check for price chg.
+                                       $match = get_matching_invoice_item($details_row["stock_id"], $details_row["po_detail_item_id"]);
+                                       if ($match !== false)
+                                               $mat_cost = update_average_material_cost($grn["supplier_id"], $details_row["stock_id"],  
+                                                       $match["unit_price"], -$details_row["quantity"], sql2date($match['tran_date']), $match['tran_date'] !== $trans['tran_date']);
+                                       else            
+                                               $mat_cost = update_average_material_cost($grn["supplier_id"], $details_row["stock_id"],  
+                                                       $details_row["FullUnitPrice"], -$details_row["quantity"], $old_date, $old[1] !== $trans['tran_date']);
                                        $sql = "UPDATE ".TB_PREF."purch_order_details
-                                       SET quantity_ordered = quantity_ordered + ".-$details_row["quantity"].",
-                                   quantity_received = quantity_received + ".-$details_row["quantity"]."
+                                       SET quantity_ordered = quantity_ordered + ".-$details_row["quantity"].", ";
+                               if ($match !== false)
+                                       $sql .= "act_price=".$match['unit_price'].", ";
+                               $sql .= "quantity_received = quantity_received + ".-$details_row["quantity"]."
                                    WHERE po_detail_item = ".$details_row["po_detail_item_id"];
                                        db_query($sql, "a purchase order details record could not be updated. This receipt of goods has not been processed ");
                                        $sql = "UPDATE ".TB_PREF."grn_items SET qty_recd=qty_recd+".-$details_row["quantity"]."
                                                WHERE id=".$details_row["grn_item_id"];
                                        db_query($sql);
-                                       $mat_cost = update_average_material_cost($grn["supplier_id"], $details_row["stock_id"],  
-                                               $details_row["FullUnitPrice"], -$details_row["quantity"], $date_);
                        }
                        else
                        {