From bb8d49a64a894178e1feeba2224833210ec3d6d7 Mon Sep 17 00:00:00 2001 From: Joe Hunt Date: Fri, 28 Nov 2008 11:24:13 +0000 Subject: [PATCH] [0000093] Voiding Supplier Invoices Causes some lines cost update to go to 0 and exchange rate change --- CHANGELOG.txt | 4 +++ purchasing/includes/db/invoice_db.inc | 37 +++++++++++++++++++-------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 62eb694..7ab6280 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -19,6 +19,10 @@ Legend: ! -> Note $ -> Affected files +28-Nov-2008 Joe Hunt +# [0000093] Voiding Supplier Invoices Causes some lines cost update to go to 0 and exchange rate change +$ /purchasing/includes/db/invoice_db.inc + 27_Nov-2008 Joe Hunt # [0000092] Stock Sheet Report. Bad Page break. $ /reporting/includes/pdf_report.inc diff --git a/purchasing/includes/db/invoice_db.inc b/purchasing/includes/db/invoice_db.inc index ec22b1c..54d5caf 100644 --- a/purchasing/includes/db/invoice_db.inc +++ b/purchasing/includes/db/invoice_db.inc @@ -91,12 +91,26 @@ function get_deliveries_between($stock_id, $from, $to) { $from = date2sql($from); $to = date2sql($to); - $sql = "SELECT SUM(-qty), AVG(standard_cost) FROM ".TB_PREF."stock_moves + $sql = "SELECT SUM(-qty), SUM(-qty*standard_cost) FROM ".TB_PREF."stock_moves WHERE type=13 AND stock_id='$stock_id' AND tran_date>='$from' AND tran_date<='$to' GROUP BY stock_id"; $result = db_query($sql, "The deliveries could not be updated"); return db_fetch_row($result); } + +function get_diff_in_home_currency($supplier, $old_date, $date, $amount1, $amount2) +{ + if ($supplier != null) + $currency = get_supplier_currency($supplier); + else + $currency = null; + if ($currency != null) + { + $amount1 = to_home_currency($amount1, $currency, $old_date); + $amount2 = to_home_currency($amount2, $currency, $date); + } + return $amount2 - $amount1; +} //---------------------------------------------------------------------------------------- function add_supp_invoice($supp_trans) // do not receive as ref because we change locally @@ -204,16 +218,17 @@ function add_supp_invoice($supp_trans) // do not receive as ref because we chang */ //if ($old_price != $entered_grn->chg_price) // price-change, so update //{ - $diff = $entered_grn->chg_price - $old_price; + //$diff = $entered_grn->chg_price - $old_price; $old_date = sql2date($old[1]); - // only update the diff (last parameter, adj_only is set to true). - $mat_cost = update_average_material_cost($supp_trans->supplier_id, $entered_grn->item_code, + $diff = get_diff_in_home_currency($supp_trans->supplier_id, $old_date, $date_, $old_price, + $entered_grn->chg_price); + // always return due to change in currency. + $mat_cost = update_average_material_cost(null, $entered_grn->item_code, $diff, $entered_grn->this_quantity_inv, $old_date, true); - // function just above this $deliveries = get_deliveries_between($entered_grn->item_code, $old_date, $date_); if ($deliveries[0] != 0) // have deliveries been done during the period? { - + $deliveries[1] /= $deliveries[0]; $amt = ($mat_cost - $deliveries[1]) * $deliveries[0]; // $amt in home currency if ($amt != 0.0) { @@ -368,20 +383,22 @@ function void_supp_invoice($type, $type_no) $old = update_supp_received_items_for_invoice($details_row["grn_item_id"], $details_row["po_detail_item_id"], -$details_row["quantity"], $details_row["FullUnitPrice"]); - $diff = $details_row["FullUnitPrice"] - $old[2]; + //$diff = $details_row["FullUnitPrice"] - $old[2]; $old_date = sql2date($old[1]); $batch = get_grn_batch_from_item($details_row["grn_item_id"]); $grn = get_grn_batch($batch); + $diff = get_diff_in_home_currency($grn["supplier_id"], $old_date, $date_, $old[2], + $details_row["FullUnitPrice"]); // Only adjust the avg for the diff - $mat_cost = update_average_material_cost($grn["supplier_id"], $details_row["stock_id"], - $diff, -$details_row["quantity"], $date_, true); + $mat_cost = update_average_material_cost(null, $details_row["stock_id"], + -$diff, $details_row["quantity"], $old_date, true); $deliveries = get_deliveries_between($details_row["stock_id"], $old_date, $date_); if ($deliveries[0] != 0) // have deliveries been done during the period? { - + $deliveries[1] /= $deliveries[0]; $amt = ($mat_cost - $deliveries[1]) * $deliveries[0]; // $amt in home currency if ($amt != 0.0) { -- 2.30.2