From: Joe Hunt Date: Wed, 10 Feb 2010 13:27:58 +0000 (+0000) Subject: Changed so 'Allow Negative Stock' will update the GL cogs/inventory when X-Git-Tag: 2.3-final~977 X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=commitdiff_plain;h=41aca3e0d2835b49b26656cdf64d8817a288092a;p=fa-stable.git Changed so 'Allow Negative Stock' will update the GL cogs/inventory when the correct values later are obtained. --- diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 10e302ea..026cd2cc 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -19,8 +19,17 @@ Legend: ! -> Note $ -> Affected files +10-Feb-2010 Joe Hunt +! Changed so 'Allow Negative Stock' will update the GL cogs/inventory when + the correct values later are obtained. +$ /admin/gl_setup.php + /includes/db/inventory_db.inc + /manufacturing/includes/db/work_orders_db.inc + /purchasing/includes/db/grn_db.inc + /purchasing/includes/db/invoice_db.inc + 09-Feb-2010 Joe Hunt/Chaitanya -# 0000202: Global $path_to_root is missing in function handle_submit() in file admin/create_coy.php +# [0000202] Global $path_to_root is missing in function handle_submit() in file admin/create_coy.php $ /admin/create_coy.php 06-Feb-2010 Janusz Dobrowolski diff --git a/admin/gl_setup.php b/admin/gl_setup.php index fd54bd8d..5208ab10 100644 --- a/admin/gl_setup.php +++ b/admin/gl_setup.php @@ -194,7 +194,7 @@ gl_all_accounts_list_row(_("Purchase Discount Account:"), 'pyt_discount_act', $_ table_section_title(_("Inventory")); check_row(_("Allow Negative Inventory:"), 'allow_negative_stock', null); -label_row(null, _("Warning: Checking this will result in incorrect values in General Ledger"), "", "class='stockmankofg' colspan=2"); +label_row(null, _("Warning: Checking this will result in adjusted values in General Ledger"), "", "class='stockmankofg' colspan=2"); table_section_title(_("Items Defaults")); gl_all_accounts_list_row(_("Sales Account:"), 'default_inv_sales_act', $_POST['default_inv_sales_act']); diff --git a/includes/db/inventory_db.inc b/includes/db/inventory_db.inc index 9adb1621..a5caab96 100644 --- a/includes/db/inventory_db.inc +++ b/includes/db/inventory_db.inc @@ -81,7 +81,73 @@ function is_inventory_item($stock_id) //------------------------------------------------------------------- -Function get_stock_gl_code($stock_id) +function last_negative_stock_begin_date($stock_id, $to) +{ + $to = date2sql($to); + $sql ="SET @q = 0"; + db_query($sql); + $sql = "SET @flag = 0"; + db_query($sql); + $sql = "SELECT SUM(qty), @q:= @q + qty, IF(@q < 0 AND @flag=0, @flag:=1,@flag:=0), IF(@q < 0 AND @flag=1, tran_date,'') AS begin_date + FROM ".TB_PREF."stock_moves + WHERE stock_id=".db_escape($stock_id)." AND tran_date<='$to' + AND qty <> 0 + GROUP BY stock_id ORDER BY tran_date"; + + $result = db_query($sql, "The dstock moves could not be retrieved"); + $row = db_fetch_row($result); + return $row[3]; +} + +//------------------------------------------------------------------- + +function get_deliveries_between($stock_id, $from, $to) +{ + $from = date2sql($from); + $to = date2sql($to); + $sql = "SELECT SUM(-qty), SUM(-qty*standard_cost) FROM ".TB_PREF."stock_moves + WHERE type=".ST_CUSTDELIVERY." AND stock_id=".db_escape($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 adjust_deliveries($stock_id, $material_cost, $to) +{ + if (!is_inventory_item($stock_id)) + return; + $from = last_negative_stock_begin_date($stock_id, $to); + if ($from == false || $from == "") + return; + $from = sql2date($from); + $row = get_deliveries_between($stock_id, $from, $to); + if ($row == false) + return; + $old_cost = $row[1]; + $new_cost = $row[0] * $material_cost; + $diff = $new_cost - $old_cost; + if ($diff != 0) + { + $update_no = get_next_trans_no(ST_COSTUPDATE); + if (!is_date_in_fiscalyear($to)) + $to = end_fiscalyear(); + + $stock_gl_code = get_stock_gl_code($stock_id); + + $memo_ = _("Cost was ") . $old_cost . _(" changed to ") . $new_cost . _(" for item ")."'$stock_id'"; + add_gl_trans_std_cost(ST_COSTUPDATE, $update_no, $to, $stock_gl_code["cogs_account"], + $stock_gl_code["dimension_id"], $stock_gl_code["dimension2_id"], $memo_, $diff); + + add_gl_trans_std_cost(ST_COSTUPDATE, $update_no, $to, $stock_gl_code["inventory_account"], 0, 0, $memo_, + -$diff); + add_audit_trail(ST_COSTUPDATE, $update_no, $to); + } +} + +function get_stock_gl_code($stock_id) { /*Gets the GL Codes relevant to the item account */ diff --git a/manufacturing/includes/db/work_orders_db.inc b/manufacturing/includes/db/work_orders_db.inc index a88f96d9..24754e4b 100644 --- a/manufacturing/includes/db/work_orders_db.inc +++ b/manufacturing/includes/db/work_orders_db.inc @@ -21,17 +21,21 @@ function add_material_cost($stock_id, $qty, $date_) $m_cost += ($bom_item['quantity'] * $standard_cost); } $dec = user_price_dec(); - $m_cost = price_decimal_format($m_cost, $dec); + price_decimal_format($m_cost, $dec); $sql = "SELECT material_cost FROM ".TB_PREF."stock_master WHERE stock_id = " .db_escape($stock_id); $result = db_query($sql); $myrow = db_fetch($result); $material_cost = $myrow['material_cost']; $qoh = get_qoh_on_date($stock_id, null, $date_); + /* if ($qoh + $qty <= 0) $material_cost = 0; else - $material_cost = ($qoh * $material_cost + $qty * $m_cost) / ($qoh + $qty); + */ + if ($qoh < 0) + $qoh = 0; + $material_cost = ($qoh * $material_cost + $qty * $m_cost) / ($qoh + $qty); $material_cost = round2($material_cost, $dec); $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=$material_cost WHERE stock_id=".db_escape($stock_id); @@ -41,7 +45,7 @@ function add_material_cost($stock_id, $qty, $date_) function add_overhead_cost($stock_id, $qty, $date_, $costs) { $dec = user_price_dec(); - $costs = price_decimal_format($costs, $dec); + price_decimal_format($costs, $dec); if ($qty != 0) $costs /= $qty; $sql = "SELECT overhead_cost FROM ".TB_PREF."stock_master WHERE stock_id = " @@ -50,10 +54,14 @@ function add_overhead_cost($stock_id, $qty, $date_, $costs) $myrow = db_fetch($result); $overhead_cost = $myrow['overhead_cost']; $qoh = get_qoh_on_date($stock_id, null, $date_); + /* if ($qoh + $qty <= 0) $overhead_cost = 0; else - $overhead_cost = ($qoh * $overhead_cost + $qty * $costs) / ($qoh + $qty); + */ + if ($qoh < 0) + $qoh = 0; + $overhead_cost = ($qoh * $overhead_cost + $qty * $costs) / ($qoh + $qty); $overhead_cost = round2($overhead_cost, $dec); $sql = "UPDATE ".TB_PREF."stock_master SET overhead_cost=".db_escape($overhead_cost)." WHERE stock_id=".db_escape($stock_id); @@ -63,7 +71,7 @@ function add_overhead_cost($stock_id, $qty, $date_, $costs) function add_labour_cost($stock_id, $qty, $date_, $costs) { $dec = user_price_dec(); - $costs = price_decimal_format($costs, $dec); + price_decimal_format($costs, $dec); if ($qty != 0) $costs /= $qty; $sql = "SELECT labour_cost FROM ".TB_PREF."stock_master WHERE stock_id = " @@ -72,10 +80,14 @@ function add_labour_cost($stock_id, $qty, $date_, $costs) $myrow = db_fetch($result); $labour_cost = $myrow['labour_cost']; $qoh = get_qoh_on_date($stock_id, null, $date_); + /* if ($qoh + $qty <= 0) $labour_cost = 0; else - $labour_cost = ($qoh * $labour_cost + $qty * $costs) / ($qoh + $qty); + */ + if ($qoh < 0) + $qoh = 0; + $labour_cost = ($qoh * $labour_cost + $qty * $costs) / ($qoh + $qty); $labour_cost = round2($labour_cost, $dec); $sql = "UPDATE ".TB_PREF."stock_master SET labour_cost=".db_escape($labour_cost)." WHERE stock_id=".db_escape($stock_id); @@ -94,10 +106,14 @@ function add_issue_cost($stock_id, $qty, $date_, $costs) $dec = user_price_dec(); $material_cost = price_decimal_format($material_cost, $dec); $qoh = get_qoh_on_date($stock_id, null, $date_); + /* if ($qoh + $qty <= 0) $material_cost = 0; else - $material_cost = ($qty * $costs) / ($qoh + $qty); + */ + if ($qoh < 0) + $qoh = 0; + $material_cost = ($qty * $costs) / ($qoh + $qty); $material_cost = round2($material_cost, $dec); $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=material_cost+" .db_escape($material_cost) diff --git a/purchasing/includes/db/grn_db.inc b/purchasing/includes/db/grn_db.inc index 0a491a6f..59973aac 100644 --- a/purchasing/includes/db/grn_db.inc +++ b/purchasing/includes/db/grn_db.inc @@ -38,24 +38,35 @@ function update_average_material_cost($supplier, $stock_id, $price, $qty, $date, $exclude = ST_CUSTDELIVERY; else $exclude = 0; + $cost_adjust = false; $qoh = get_qoh_on_date($stock_id, null, $date, $exclude); if ($adj_only) { + if ($qoh > 0) + /* if ($qoh <= 0) $material_cost = 0; else + */ $material_cost = ($qoh * $material_cost + $qty * $price_in_home_currency) / $qoh; } + /* elseif ($qoh + $qty <= 0) $material_cost = 0; + */ else { if ($qoh < 0) + { + if ($qoh + $qty > 0) + $cost_adjust = true; $qoh = 0; + } $material_cost = ($qoh * $material_cost + $qty * $price_in_home_currency) / ($qoh + $qty); } $material_cost = round2($material_cost, $dec); - + if ($cost_adjust) // new 2010-02-10 + adjust_deliveries($stock_id, $material_cost, $date); $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=".db_escape($material_cost)." WHERE stock_id=".db_escape($stock_id); db_query($sql,"The cost details for the inventory item could not be updated"); diff --git a/purchasing/includes/db/invoice_db.inc b/purchasing/includes/db/invoice_db.inc index a3a110db..de1e3532 100644 --- a/purchasing/includes/db/invoice_db.inc +++ b/purchasing/includes/db/invoice_db.inc @@ -98,18 +98,6 @@ function update_supp_received_items_for_invoice($id, $po_detail_item, $qty_invoi return array($ret, $date, $unit_price); } -function get_deliveries_between($stock_id, $from, $to) -{ - $from = date2sql($from); - $to = date2sql($to); - $sql = "SELECT SUM(-qty), SUM(-qty*standard_cost) FROM ".TB_PREF."stock_moves - WHERE type=".ST_CUSTDELIVERY." AND stock_id=".db_escape($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) { $dec = user_price_dec();