Moving 2.0 development version to main trunk.
[fa-stable.git] / manufacturing / work_order_entry.php
index a8253edcb0b2b6e2e050abacdd8820a61862738c..e6a18026d9e4907a6a2ac0cbe25f7262a325038f 100644 (file)
@@ -27,7 +27,7 @@ check_db_has_locations(("There are no inventory locations defined in the system.
 if (isset($_GET['trans_no']))
 {
        $selected_id = $_GET['trans_no'];
-} 
+}
 elseif(isset($_POST['selected_id']))
 {
        $selected_id = $_POST['selected_id'];
@@ -35,7 +35,7 @@ elseif(isset($_POST['selected_id']))
 
 //---------------------------------------------------------------------------------------
 
-if (isset($_GET['AddedID'])) 
+if (isset($_GET['AddedID']))
 {
        $id = $_GET['AddedID'];
 
@@ -46,7 +46,7 @@ if (isset($_GET['AddedID']))
 
 //---------------------------------------------------------------------------------------
 
-if (isset($_GET['UpdatedID'])) 
+if (isset($_GET['UpdatedID']))
 {
        $id = $_GET['UpdatedID'];
 
@@ -56,7 +56,7 @@ if (isset($_GET['UpdatedID']))
 
 //---------------------------------------------------------------------------------------
 
-if (isset($_GET['DeletedID'])) 
+if (isset($_GET['DeletedID']))
 {
        $id = $_GET['DeletedID'];
 
@@ -66,7 +66,7 @@ if (isset($_GET['DeletedID']))
 
 //---------------------------------------------------------------------------------------
 
-if (isset($_GET['ClosedID'])) 
+if (isset($_GET['ClosedID']))
 {
        $id = $_GET['ClosedID'];
 
@@ -94,127 +94,125 @@ if (!isset($_POST['date_']))
        $_POST['date_'] = Today();
        if (!is_date_in_fiscalyear($_POST['date_']))
                $_POST['date_'] = end_fiscalyear();
-}              
+}
 
 function can_process()
 {
        global $selected_id;
 
-       if (!isset($selected_id)) 
+       if (!isset($selected_id))
        {
-       if (!references::is_valid($_POST['wo_ref'])) 
+       if (!references::is_valid($_POST['wo_ref']))
        {
                display_error(_("You must enter a reference."));
+               set_focus('wo_ref');
                return false;
        }
 
-       if (!is_new_reference($_POST['wo_ref'], systypes::work_order())) 
+       if (!is_new_reference($_POST['wo_ref'], systypes::work_order()))
        {
                display_error(_("The entered reference is already in use."));
+               set_focus('wo_ref');
                return false;
        }
        }
 
-       if (!is_numeric($_POST['quantity']))
-       {
-               display_error( _("The quantity entered must be numeric."));
-               return false;
-       }
-
-       if ($_POST['quantity'] <= 0)
+       if (!check_num('quantity', 0))
        {
-               display_error( _("The quantity entered must be a positive number greater than zero."));
+               display_error( _("The quantity entered is invalid or less than zero."));
+               set_focus('quantity');
                return false;
        }
 
        if (!is_date($_POST['date_']))
        {
                display_error( _("The date entered is in an invalid format."));
+               set_focus('date_');
                return false;
-       } 
-       elseif (!is_date_in_fiscalyear($_POST['date_'])) 
+       }
+       elseif (!is_date_in_fiscalyear($_POST['date_']))
        {
                display_error(_("The entered date is not in fiscal year."));
+               set_focus('date_');
                return false;
        }
        // only check bom and quantites if quick assembly
-       if (!($_POST['type'] == wo_types::advanced())) 
+       if (!($_POST['type'] == wo_types::advanced()))
        {
-        if (!has_bom($_POST['stock_id'])) 
+        if (!has_bom($_POST['stock_id']))
         {
                display_error(_("The selected item to manufacture does not have a bom."));
+               set_focus('stock_id');
                return false;
         }
 
                if ($_POST['Costs'] == "")
-                       $_POST['Costs'] = 0;
-       if (!is_numeric($_POST['Costs']))
-       {
-               display_error( _("The cost entered must be numeric."));
-               return false;
-       }
-
-       if ($_POST['Costs'] < 0)
+                       $_POST['Costs'] = price_format(0);
+       if (!check_num('Costs', 0))
        {
-               display_error( _("The cost entered cannot be negative."));
+               display_error( _("The cost entered is invalid or less than zero."));
+               set_focus('Costs');
                return false;
        }
 
-        if (!sys_prefs::allow_negative_stock()) 
+        if (!sys_prefs::allow_negative_stock())
         {
-               if ($_POST['type'] == wo_types::assemble()) 
+               if ($_POST['type'] == wo_types::assemble())
                {
                        // check bom if assembling
                 $result = get_bom($_POST['stock_id']);
 
-               while ($bom_item = db_fetch($result)) 
+               while ($bom_item = db_fetch($result))
                {
 
-                       if (has_stock_holding($bom_item["ResourceType"])) 
+                       if (has_stock_holding($bom_item["ResourceType"]))
                        {
 
-                               $quantity = $bom_item["quantity"] * $_POST['quantity'];
+                               $quantity = $bom_item["quantity"] * input_num('quantity');
 
                         $qoh = get_qoh_on_date($bom_item["component"], $bom_item["loc_code"], $_POST['date_']);
-                               if (-$quantity + $qoh < 0) 
+                               if (-$quantity + $qoh < 0)
                                {
                                        display_error(_("The work order cannot be processed because there is an insufficient quantity for component:") .
                                                " " . $bom_item["component"] . " - " .  $bom_item["description"] . ".  " . _("Location:") . " " . $bom_item["location_name"]);
+                                               set_focus('quantity');
                                                return false;
                                }
                        }
                }
-               } 
-               elseif ($_POST['type'] == wo_types::unassemble()) 
+               }
+               elseif ($_POST['type'] == wo_types::unassemble())
                {
                        // if unassembling, check item to unassemble
                                $qoh = get_qoh_on_date($_POST['stock_id'], $_POST['StockLocation'], $_POST['date_']);
-                       if (-$_POST['quantity'] + $qoh < 0) 
+                       if (-input_num('quantity') + $qoh < 0)
                        {
                                display_error(_("The selected item cannot be unassembled because there is insufficient stock."));
                                        return false;
                        }
                }
        }
-     } 
-     else 
+     }
+     else
      {
        if (!is_date($_POST['RequDate']))
        {
+               set_focus('RequDate');
                display_error( _("The date entered is in an invalid format."));
                return false;
-               } 
-               //elseif (!is_date_in_fiscalyear($_POST['RequDate'])) 
+               }
+               //elseif (!is_date_in_fiscalyear($_POST['RequDate']))
                //{
                //      display_error(_("The entered date is not in fiscal year."));
                //      return false;
                //}
-       if (isset($selected_id)) 
+       if (isset($selected_id))
        {
                $myrow = get_work_order($selected_id, true);
 
-               if ($_POST['units_issued'] > $_POST['quantity']) 
+               if ($_POST['units_issued'] > input_num('quantity'))
                {
+                       set_focus('quantity');
                        display_error(_("The quantity cannot be changed to be less than the quantity already manufactured for this order."));
                        return false;
                }
@@ -226,22 +224,22 @@ function can_process()
 
 //-------------------------------------------------------------------------------------
 
-if (isset($_POST['ADD_ITEM']) && can_process()) 
+if (isset($_POST['ADD_ITEM']) && can_process())
 {
 
-       $id = add_work_order($_POST['wo_ref'], $_POST['StockLocation'], $_POST['quantity'],
+       $id = add_work_order($_POST['wo_ref'], $_POST['StockLocation'], input_num('quantity'),
                $_POST['stock_id'],  $_POST['type'], $_POST['date_'],
-               $_POST['RequDate'], $_POST['Costs'], $_POST['memo_']);
+               $_POST['RequDate'], input_num('Costs'), $_POST['memo_']);
 
        meta_forward($_SERVER['PHP_SELF'], "AddedID=$id");
 }
 
 //-------------------------------------------------------------------------------------
 
-if (isset($_POST['UPDATE_ITEM']) && can_process()) 
+if (isset($_POST['UPDATE_ITEM']) && can_process())
 {
 
-       update_work_order($selected_id, $_POST['StockLocation'], $_POST['quantity'],
+       update_work_order($selected_id, $_POST['StockLocation'], input_num('quantity'),
                $_POST['stock_id'],  $_POST['date_'], $_POST['RequDate'], $_POST['memo_']);
 
        meta_forward($_SERVER['PHP_SELF'], "UpdatedID=$selected_id");
@@ -249,22 +247,22 @@ if (isset($_POST['UPDATE_ITEM']) && can_process())
 
 //--------------------------------------------------------------------------------------
 
-if (isset($_POST['delete'])) 
+if (isset($_POST['delete']))
 {
        //the link to delete a selected record was clicked instead of the submit button
 
        $cancel_delete = false;
 
        // can't delete it there are productions or issues
-       if (work_order_has_productions($selected_id) || 
-               work_order_has_issues($selected_id)     || 
+       if (work_order_has_productions($selected_id) ||
+               work_order_has_issues($selected_id)     ||
                work_order_has_payments($selected_id))
        {
                display_error(_("This work order cannot be deleted because it has already been processed."));
                $cancel_delete = true;
        }
 
-       if ($cancel_delete == false) 
+       if ($cancel_delete == false)
        { //ie not cancelled the delete as a result of above tests
 
                // delete the actual work order
@@ -275,7 +273,7 @@ if (isset($_POST['delete']))
 
 //-------------------------------------------------------------------------------------
 
-if (isset($_POST['close'])) 
+if (isset($_POST['close']))
 {
 
        // update the closed flag in the work order
@@ -283,6 +281,11 @@ if (isset($_POST['close']))
        meta_forward($_SERVER['PHP_SELF'], "ClosedID=$selected_id");
 }
 
+//-------------------------------------------------------------------------------------
+if (get_post('_type_update')) 
+{
+  $Ajax->activate('_page_body');
+}
 //-------------------------------------------------------------------------------------
 
 start_form();
@@ -291,18 +294,19 @@ start_table($table_style2);
 
 $existing_comments = "";
 
+$dec = 0;
 if (isset($selected_id))
 {
        $myrow = get_work_order($selected_id);
 
-       if (strlen($myrow[0]) == 0) 
+       if (strlen($myrow[0]) == 0)
        {
                echo _("The order number sent is not valid.");
                safe_exit();
        }
 
        // if it's a closed work order can't edit it
-       if ($myrow["closed"] == 1) 
+       if ($myrow["closed"] == 1)
        {
                echo "<center>";
                display_error(_("This work order is closed and cannot be edited."));
@@ -310,18 +314,18 @@ if (isset($selected_id))
        }
 
        $_POST['wo_ref'] = $myrow["wo_ref"];
-       $_POST['quantity'] = $myrow["units_reqd"];
+       $_POST['stock_id'] = $myrow["stock_id"];
+       $_POST['quantity'] = qty_format($myrow["units_reqd"], $_POST['stock_id'], $dec);
        $_POST['StockLocation'] = $myrow["loc_code"];
        $_POST['released'] = $myrow["released"];
        $_POST['closed'] = $myrow["closed"];
-       $_POST['stock_id'] = $myrow["stock_id"];
        $_POST['type'] = $myrow["type"];
        $_POST['date_'] = sql2date($myrow["date_"]);
        $_POST['RequDate'] = sql2date($myrow["required_by"]);
        $_POST['released_date'] = sql2date($myrow["released_date"]);
        $_POST['memo_'] = "";
        $_POST['units_issued'] = $myrow["units_issued"];
-       $_POST['Costs'] = $myrow["Costs"];
+       $_POST['Costs'] = price_format($myrow["additional_costs"]);
 
        $_POST['memo_'] = get_comments_string(systypes::work_order(), $selected_id);
 
@@ -330,19 +334,22 @@ if (isset($selected_id))
        hidden('released', $_POST['released']);
        hidden('released_date', $_POST['released_date']);
        hidden('selected_id',  $selected_id);
+       hidden('old_qty', $myrow["units_reqd"]);
+       hidden('old_stk_id', $myrow["stock_id"]);
 
        label_row(_("Reference:"), $_POST['wo_ref']);
        label_row(_("Type:"), wo_types::name($_POST['type']));
-} 
-else 
+       hidden('type', $myrow["type"]);
+}
+else
 {
        $_POST['units_issued'] = $_POST['released'] = 0;
-       ref_row(_("Reference:"), 'wo_ref', references::get_next(systypes::work_order()));
+       ref_row(_("Reference:"), 'wo_ref', '', references::get_next(systypes::work_order()));
 
-       wo_types_list_row(_("Type:"), 'type', $_POST['type']);
+       wo_types_list_row(_("Type:"), 'type', null);
 }
 
-if ($_POST['released'] == true) 
+if ($_POST['released'] == true)
 {
        hidden('stock_id', $_POST['stock_id']);
        hidden('StockLocation', $_POST['StockLocation']);
@@ -350,8 +357,8 @@ if ($_POST['released'] == true)
 
        label_row(_("Item:"), $myrow["StockItemName"]);
        label_row(_("Destination Location:"), $myrow["location_name"]);
-} 
-else 
+}
+else
 {
        stock_manufactured_items_list_row(_("Item:"), 'stock_id', null);
 
@@ -359,24 +366,24 @@ else
 }
 
 if (!isset($_POST['quantity']))
-       $_POST['quantity'] = 1;
+       $_POST['quantity'] = qty_format(1, $_POST['stock_id'], $dec);
 
-if ($_POST['type'] == wo_types::advanced()) 
+if (get_post('type') == wo_types::advanced())
 {
-    text_row_ex(_("Quantity Required:"), 'quantity', 12);
+    qty_row(_("Quantity Required:"), 'quantity', null, null, null, $dec);
     if ($_POST['released'])
-       label_row(_("Quantity Manufactured:"), $_POST['units_issued']);
+       label_row(_("Quantity Manufactured:"), number_format($_POST['units_issued'], get_qty_dec($_POST['stock_id'])));
     date_row(_("Date") . ":", 'date_');
-       date_row(_("Date Required By") . ":", 'RequDate', null, sys_prefs::default_wo_required_by());
+       date_row(_("Date Required By") . ":", 'RequDate', '', null, sys_prefs::default_wo_required_by());
 }
-else 
+else
 {
-    text_row_ex(_("Quantity:"), 'quantity', 12);
+    qty_row(_("Quantity:"), 'quantity', null, null, null, $dec);
     date_row(_("Date") . ":", 'date_');
        hidden('RequDate', '');
 
        if (!isset($_POST['Costs']))
-               $_POST['Costs'] = 0;
+               $_POST['Costs'] = price_format(0);
 
        amount_row(_("Total Additional Costs:"), 'Costs');
 }
@@ -388,20 +395,23 @@ textarea_row(_("Memo:"), 'memo_', null, 40, 5);
 
 end_table(1);
 
-submit_add_or_update_center(!isset($selected_id));
-
-if (isset($selected_id)) 
+if (isset($selected_id))
 {
-       echo "<br><br><table align=center><tr>";
+       echo "<table align=center><tr>";
 
-       if (isset($_POST['released'])) 
+       submit_cells('UPDATE_ITEM', _("Update"), '', _('Save changes to work order'), true);
+       if (isset($_POST['released']))
        {
-               submit_cells('close', _("Close This Work Order"));
+               submit_cells('close', _("Close This Work Order"),'','',true);
        }
-       submit_cells('delete', _("Delete This Work Order"));
-       
+       submit_cells('delete', _("Delete This Work Order"),'','',true);
+
        echo "</tr></table>";
 }
+else
+{
+       submit_center('ADD_ITEM', _("Add Workorder"), true, '', true);
+}
 
 end_form();
 end_page();