Fixed upgrade procedures for manufacturing transactions, additional checks for voiding.
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Sun, 14 Feb 2016 21:06:29 +0000 (22:06 +0100)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Sun, 14 Feb 2016 21:06:29 +0000 (22:06 +0100)
admin/db/voiding_db.inc
gl/view/gl_trans_view.php
manufacturing/includes/db/work_order_costing_db.inc
manufacturing/includes/db/work_order_issues_db.inc
manufacturing/includes/db/work_orders_db.inc
sql/alter2.4.sql
sql/alter2.4rc1.sql

index c87fe17fa07bc95b82de12a8d0d4d462b292c951..55ff9fb9079a587c4c9205248581fb34ad2b6d65 100644 (file)
@@ -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;
 
index 0cda61603cf25c2449207bf6ba7f342c330d845e..36f3d547a61dd68ccd663d3b5baec1c995e1187e 100644 (file)
@@ -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'");
index 8daa7a7c61f0fcce1136231c5d04351b9c4f7154..c81b3c689f45b89db2a0942c06224ec8c9351a5f 100644 (file)
@@ -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);
index 037e10cbb4fe6d5aebb170206f60be8365896b4f..422e0019beea4f0959ee1d045d89ad2ab3d16e82 100644 (file)
@@ -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
index f1f696136cf7776839d744dc864d74dfcfd515da..f6d4400d839924a703ea9f8f26049e26541d9634 100644 (file)
@@ -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();
 }
 
index 5babed89c2405d3a40586cb3a6499bff5176f9a6..5d4f649cb0d20b7e029fdf778d6ccbf6319940b0 100644 (file)
@@ -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;
index 5a1fdab8021b65fe1310d4a2c1adff170d1eaacf..4091f80ac9cd7dd79ea6ef9d661bf49d2615bc27 100644 (file)
@@ -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;