From f9b12891bbdaa95e412e2df90f64a92fe62e5b8a Mon Sep 17 00:00:00 2001 From: Janusz Dobrowolski Date: Sun, 14 Feb 2016 22:06:29 +0100 Subject: [PATCH] Fixed upgrade procedures for manufacturing transactions, additional checks for voiding. --- admin/db/voiding_db.inc | 2 ++ gl/view/gl_trans_view.php | 4 +-- .../includes/db/work_order_costing_db.inc | 25 +++++++++++++++++-- .../includes/db/work_order_issues_db.inc | 5 ++-- manufacturing/includes/db/work_orders_db.inc | 11 ++++---- sql/alter2.4.sql | 10 ++++++++ sql/alter2.4rc1.sql | 10 ++++++++ 7 files changed, 55 insertions(+), 12 deletions(-) diff --git a/admin/db/voiding_db.inc b/admin/db/voiding_db.inc index c87fe17f..55ff9fb9 100644 --- a/admin/db/voiding_db.inc +++ b/admin/db/voiding_db.inc @@ -26,6 +26,8 @@ function void_transaction($type, $type_no, $date_, $memo_) case ST_JOURNAL : // it's a journal entry if (!exists_gl_trans($type, $type_no)) return _('Selected transaction does not exists.'); + if ($wo = check_wo_costing($type, $type_no)) + return sprintf(_('This transaction cannot be voided because it is part of Work Order %s costs.'), $wo); void_journal_trans($type, $type_no); break; diff --git a/gl/view/gl_trans_view.php b/gl/view/gl_trans_view.php index 0cda6160..36f3d547 100644 --- a/gl/view/gl_trans_view.php +++ b/gl/view/gl_trans_view.php @@ -59,8 +59,8 @@ function display_gl_heading($myrow) if ($journal) { $header = get_journal($myrow['type'], $_GET['trans_no']); - label_cell(sql2date($header["doc_date"]), "align='center'"); - label_cell(sql2date($header["event_date"]), "align='center'"); + label_cell($header["doc_date"] == '0000-00-00' ? '-' : sql2date($header["doc_date"]), "align='center'"); + label_cell($header["event_date"] == '0000-00-00' ? '-' : sql2date($header["event_date"]), "align='center'"); } else label_cell(get_counterparty_name($_GET['type_id'],$_GET['trans_no'])); label_cell( get_journal_number($myrow['type'], $_GET['trans_no']), "align='center'"); diff --git a/manufacturing/includes/db/work_order_costing_db.inc b/manufacturing/includes/db/work_order_costing_db.inc index 8daa7a7c..c81b3c68 100644 --- a/manufacturing/includes/db/work_order_costing_db.inc +++ b/manufacturing/includes/db/work_order_costing_db.inc @@ -138,7 +138,7 @@ function add_wo_costs_journal($wo_id, $amount, $cost_type, $cr_acc, $date, $dim1 $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, $wo['wip_account'], $dim1, $dim2, $wo_cost_types[$cost_type], $amount); @@ -190,14 +190,35 @@ function work_order_production_gl($woid, $stock_id, $quantity, $date_, $rcv_no) 0, 0, $memo, -$total_cost); } +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); diff --git a/manufacturing/includes/db/work_order_issues_db.inc b/manufacturing/includes/db/work_order_issues_db.inc index 037e10cb..422e0019 100644 --- a/manufacturing/includes/db/work_order_issues_db.inc +++ b/manufacturing/includes/db/work_order_issues_db.inc @@ -154,6 +154,7 @@ function exists_work_order_issue($issue_no) function check_void_wo_issue($issue_no) { $issue = get_work_order_issue($issue_no); + return $issue['closed'] ? $issue['workorder_id'] : 0; } @@ -168,9 +169,7 @@ function void_work_order_issue($type_no) if ($void_entry) return; - $issue = get_work_order_issue($type_no); - - if (work_order_is_closed($issue['workorder_id'])) + if (check_void_wo_issue($type_no)) return; // FIXME update issued material cost diff --git a/manufacturing/includes/db/work_orders_db.inc b/manufacturing/includes/db/work_orders_db.inc index f1f69613..f6d4400d 100644 --- a/manufacturing/includes/db/work_orders_db.inc +++ b/manufacturing/includes/db/work_orders_db.inc @@ -247,6 +247,7 @@ function reopen_work_order($woid) $sql = "UPDATE ".TB_PREF."workorders SET closed=0 WHERE id = " .db_escape($woid); + db_query($sql, "The work order couldn't be reopened"); } @@ -271,11 +272,6 @@ function void_work_order($woid) void_work_order_produce($prod['id']); } - // close workorder - $sql = "UPDATE ".TB_PREF."workorders SET closed=1,units_reqd=0,units_issued=0 WHERE id = " - .db_escape($woid); - db_query($sql, "The work order couldn't be voided"); - // void addtional material issues $issues = get_work_order_issues($woid); while($issue = db_fetch($issues)) @@ -290,6 +286,11 @@ function void_work_order($woid) // clear the requirements units received void_wo_requirements($woid); + // close workorder + $sql = "UPDATE ".TB_PREF."workorders SET closed=1,units_reqd=0,units_issued=0 WHERE id = " + .db_escape($woid); + db_query($sql, "The work order couldn't be voided"); + commit_transaction(); } diff --git a/sql/alter2.4.sql b/sql/alter2.4.sql index 5babed89..5d4f649c 100644 --- a/sql/alter2.4.sql +++ b/sql/alter2.4.sql @@ -294,3 +294,13 @@ UPDATE `0_stock_master` SET `material_cost`=`material_cost`+`labour_cost`+`overh ALTER TABLE `0_stock_master` CHANGE COLUMN `assembly_account` `wip_account` VARCHAR(15) NOT NULL default ''; ALTER TABLE `0_stock_category` CHANGE COLUMN `dflt_assembly_act` `dflt_wip_act` VARCHAR(15) NOT NULL default ''; UPDATE `0_sys_prefs` SET `name`='default_wip_act' WHERE `name`='default_assembly_act'; + +UPDATE `0_wo_issue_items` i, `0_stock_moves` m + SET i.unit_cost=m.standard_cost + WHERE i.unit_cost=0 AND i.stock_id=m.stock_id AND m.trans_no=i.issue_id AND m.`type`=28 AND m.qty=-i.qty_issued + +UPDATE `0_wo_requirements` r, `0_stock_moves` m + SET r.unit_cost=m.standard_cost + WHERE r.unit_cost=0 AND r.stock_id=m.stock_id AND m.trans_no=r.workorder_id AND m.`type`=26 AND m.qty=-r.units_issued + +UPDATE `0_bank_trans` SET person_id=trans_no WHERE person_type_id=26; diff --git a/sql/alter2.4rc1.sql b/sql/alter2.4rc1.sql index 5a1fdab8..4091f80a 100644 --- a/sql/alter2.4rc1.sql +++ b/sql/alter2.4rc1.sql @@ -36,3 +36,13 @@ UPDATE `0_stock_master` SET `material_cost`=`material_cost`+`labour_cost`+`overh ALTER TABLE `0_stock_master` CHANGE COLUMN `assembly_account` `wip_account` VARCHAR(15) NOT NULL default ''; ALTER TABLE `0_stock_category` CHANGE COLUMN `dflt_assembly_act` `dflt_wip_act` VARCHAR(15) NOT NULL default ''; UPDATE `0_sys_prefs` SET `name`='default_wip_act' WHERE `name`='default_assembly_act'; + +UPDATE `0_wo_issue_items` i, `0_stock_moves` m + SET i.unit_cost=m.standard_cost + WHERE i.unit_cost=0 AND i.stock_id=m.stock_id AND m.trans_no=i.issue_id AND m.`type`=28 AND m.qty=-i.qty_issued + +UPDATE `0_wo_requirements` r, `0_stock_moves` m + SET r.unit_cost=m.standard_cost + WHERE r.unit_cost=0 AND r.stock_id=m.stock_id AND m.trans_no=r.workorder_id AND m.`type`=26 AND m.qty=-r.units_issued + +UPDATE `0_bank_trans` SET person_id=trans_no WHERE person_type_id=26; -- 2.30.2