From 4277c7473cee8f80812b2664e0d984986bf24ece Mon Sep 17 00:00:00 2001 From: Joe Hunt Date: Wed, 1 Jul 2009 09:10:01 +0000 Subject: [PATCH] Guess what :) [0000137] Material Cost Averaging Problem (again again again) when voiding. --- CHANGELOG.txt | 4 ++++ purchasing/includes/db/invoice_db.inc | 26 +++++++++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index c9a09f9..4190086 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -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 diff --git a/purchasing/includes/db/invoice_db.inc b/purchasing/includes/db/invoice_db.inc index a7a7cba..c5c63c8 100644 --- a/purchasing/includes/db/invoice_db.inc +++ b/purchasing/includes/db/invoice_db.inc @@ -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 { -- 2.30.2