X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=manufacturing%2Fincludes%2Fdb%2Fwork_order_costing_db.inc;h=7671e7ba35ca910244d6d1403dc5f89c28f10b85;hb=ca3af895c069979d693a98c49255a48664061cd4;hp=3cb605cb5c6620fd8d3f50eaf993aae938830140;hpb=2b68593d0729223bc7bc9d9307e3d9672267ff12;p=fa-stable.git diff --git a/manufacturing/includes/db/work_order_costing_db.inc b/manufacturing/includes/db/work_order_costing_db.inc index 3cb605cb..7671e7ba 100644 --- a/manufacturing/includes/db/work_order_costing_db.inc +++ b/manufacturing/includes/db/work_order_costing_db.inc @@ -93,7 +93,7 @@ function update_material_cost($stock_id, $qty, $unit_cost, $date) if (!is_date_in_fiscalyear($cart->tran_date)) $cart->tran_date = end_fiscalyear(); - $cart->reference = $Refs->get_next(ST_COSTUPDATE, null, $cart->tran_date, $date); + $cart->reference = $Refs->get_next(ST_COSTUPDATE, null, $cart->tran_date); $cart->memo_ = sprintf(_("COGS changed from %s to %s for %d %s of '%s'"), $avg_cost, $unit_cost, $qty_delayed, $item['units'], $stock_id); @@ -103,73 +103,22 @@ function update_material_cost($stock_id, $qty, $unit_cost, $date) write_journal_entries($cart); } - if ($qty > 0 && ($qoh != -$qty)) - $avg_cost = ($avg_cost*($qoh+$qty_delayed)+$unit_cost*$qty_new)/($qoh+$qty); + if ($qty > 0 && ($qoh != -$qty)) { + if ($qoh == 0 && $avg_cost != 0) + $avg_cost = ($avg_cost + ($unit_cost*$qty_new)/($qoh+$qty))/2; + else + $avg_cost = ($avg_cost*($qoh+$qty_delayed)+$unit_cost*$qty_new)/($qoh+$qty); + } $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=".db_escape($avg_cost)." WHERE stock_id=".db_escape($stock_id); db_query($sql,"The cost details for the inventory item could not be updated"); } -function add_issue_cost($stock_id, $qty, $date_, $costs, $adj_only=false) -{ - if ($qty != 0) - $costs /= $qty; - $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); - if ($qoh < 0) - $qoh = 0; - if ($adj_only) - { - if ($qoh>0) - $material_cost = ($qoh * $material_cost + $costs) / $qoh; - else // Journal Entry if QOH is 0/negative - { - global $Refs; - - $id = get_next_trans_no(ST_JOURNAL); - $ref = $Refs->get_next(ST_JOURNAL, null, $date_); - add_journal(ST_JOURNAL, $id, $costs, $date_, get_company_currency(), $ref); - - $stock_gl_code = get_stock_gl_code($stock_id); - $memo = "WO Issue settlement JV for zero/negative respository of ".$stock_id; - //Reverse the inventory effect if $qoh <=0 - add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, - $stock_gl_code["inventory_account"], - $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo, - -$costs); - //GL Posting to inventory adjustment account - add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, - $stock_gl_code["assembly_account"], - $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo, - $costs); - - add_audit_trail(ST_JOURNAL, $id, $date_); - add_comments(ST_JOURNAL, $id, $date_, $memo); - $Refs->save(ST_JOURNAL, $id, $ref); - if ($qty != 0) - $material_cost = $costs / $qty; - } - } - else - { - if ($qoh + $qty != 0) - $material_cost = ($qoh * $material_cost + $qty * $costs) / ($qoh + $qty); - } - $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=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"); -} - /* Create journal entry for WO related costs. */ -function add_wo_costs_journal($wo_id, $amount, $cost_type, $cr_acc, $db_acc, $date, $dim1=0, $dim2=0, $memo = null, $ref= null) +function add_wo_costs_journal($wo_id, $amount, $cost_type, $cr_acc, $date, $dim1=0, $dim2=0, $memo = null, $ref= null) { //-------- this should be done by single call to write_journal_entries() using items_cart() // @@ -179,32 +128,27 @@ function add_wo_costs_journal($wo_id, $amount, $cost_type, $cr_acc, $db_acc, $da $journal_id = get_next_trans_no(ST_JOURNAL); + $wo = get_work_order($wo_id); + if (!$ref) $ref = $Refs->get_next(ST_JOURNAL, null, $date); add_gl_trans_std_cost(ST_JOURNAL, $journal_id, $date, $cr_acc, 0, 0, $wo_cost_types[$cost_type], -$amount); + $is_bank_to = is_bank_account($cr_acc); if ($is_bank_to) { add_bank_trans(ST_JOURNAL, $journal_id, $is_bank_to, "", $date, -$amount, PT_WORKORDER, $wo_id, get_company_currency(), "Cannot insert a destination bank transaction"); - } - add_journal(ST_JOURNAL, $journal_id, $amount, $date, get_company_currency(), $ref); + } + add_journal(ST_JOURNAL, $journal_id, $amount, $date, get_company_currency(), $ref, '', 1, $date, $date); - add_gl_trans_std_cost(ST_JOURNAL, $journal_id, $date, $db_acc, + add_gl_trans_std_cost(ST_JOURNAL, $journal_id, $date, $wo['wip_account'], $dim1, $dim2, $wo_cost_types[$cost_type], $amount); - $wip = get_company_pref('wip_act'); - - if ($db_acc != $wip) - { - add_gl_trans_std_cost(ST_JOURNAL, $journal_id, $date, $db_acc, - 0, 0, $wo_cost_types[$cost_type], -$amount); - - add_gl_trans_std_cost(ST_JOURNAL, $journal_id, $date, $wip, - 0, 0, $wo_cost_types[$cost_type], $amount); - } + $wo = get_work_order($wo_id); + $wip = $wo['wip_account']; $Refs->save(ST_JOURNAL, $journal_id, $ref); @@ -221,13 +165,30 @@ function add_wo_costs_journal($wo_id, $amount, $cost_type, $cr_acc, $db_acc, $da */ function work_order_production_gl($woid, $stock_id, $quantity, $date_, $rcv_no) { + global $SysPrefs, $path_to_root; + + $memo = ""; + if ($SysPrefs->loc_notification() == 1) + { + include_once($path_to_root . "/sales/includes/cart_class.inc"); + include_once($path_to_root . "/inventory/includes/inventory_db.inc"); + $st_ids = array(); + $st_names = array(); + $st_num = array(); + $st_reorder = array(); + } + $result = get_wo_requirements($woid); // credit all the components $total_cost = 0; while ($bom_item = db_fetch($result)) { - + if ($SysPrefs->loc_notification() == 1 && is_inventory_item($bom_item['stock_id'])) + { + $line = new line_details($bom_item['stock_id'], $bom_item["units_req"] * $quantity, 0, 0, 0, 0, $bom_item['description']); + $loc = calculate_reorder_level($bom_item["loc_code"], $line, $st_ids, $st_names, $st_num, $st_reorder); + } update_wo_requirement_issued($bom_item['id'], $bom_item["units_req"] * $quantity, $bom_item["ComponentCost"]); // insert a -ve stock move for each item @@ -237,7 +198,7 @@ function work_order_production_gl($woid, $stock_id, $quantity, $date_, $rcv_no) if (!is_service($bom_item["mb_flag"])) $ivaccount = $bom_item["inventory_account"]; else - $ivaccount = $bom_item["assembly_account"]; + $ivaccount = $bom_item["cogs_account"]; $memo = $date_.": ".$bom_item["units_req"] ." * ".$bom_item["description"]; @@ -245,18 +206,42 @@ function work_order_production_gl($woid, $stock_id, $quantity, $date_, $rcv_no) $memo, -$bom_item["ComponentCost"] * $bom_item["units_req"] * $quantity); } - add_gl_trans_std_cost(ST_MANURECEIVE, $rcv_no, $date_, get_company_pref('wip_act'), + $wo = get_work_order($woid); + add_gl_trans_std_cost(ST_MANURECEIVE, $rcv_no, $date_, $wo['wip_account'], 0, 0, $memo, -$total_cost); + if ($SysPrefs->loc_notification() == 1 && count($st_ids) > 0) + send_reorder_email($loc, $st_ids, $st_names, $st_num, $st_reorder); +} + +function check_wo_costing($type, $trans_no) +{ + $sql = "SELECT workorder_id FROM ".TB_PREF."wo_costing WHERE trans_type= ".db_escape($type)." AND trans_no=".db_escape($trans_no); + $costs = db_query($sql, 'cannot check WO costing'); + + if (!db_num_rows($costs)) + return 0; + + $wo = db_fetch($costs); + return $wo['workorder_id']; } function void_wo_costing($wo_id) { + global $Refs; + $res = get_wo_costing($wo_id); while($row = db_fetch($res)) { // void any related gl trans - void_gl_trans($row['trans_type'], $row['trans_no'], true); + $date = Today(); + $type = $row['trans_type']; + $trans_no = $row['trans_no']; + $memo = sprintf(_("Voided WO #%s"), $wo_id); + void_gl_trans($type, $trans_no, true); + add_audit_trail($type, $trans_no, $date, $memo); + add_voided_entry($type, $trans_no, $date, $memo); + $Refs->restore_last($type, $trans_no); } $sql = "DELETE FROM ".TB_PREF."wo_costing WHERE workorder_id=".db_escape($wo_id);