[0004212] Work Order Entry: fixed error when voided WO refence is reused.
[fa-stable.git] / manufacturing / search_work_orders.php
index 386ff583c13ef1e58167b101d27e8a3cd3ff08b0..1c407b6487eb81087249a0dcd10bdcd2280db564 100644 (file)
@@ -1,25 +1,57 @@
 <?php
-
-$page_security = 2;
-$path_to_root="..";
+/**********************************************************************
+    Copyright (C) FrontAccounting, LLC.
+       Released under the terms of the GNU General Public License, GPL, 
+       as published by the Free Software Foundation, either version 3 
+       of the License, or (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
+$page_security = 'SA_MANUFTRANSVIEW';
+$path_to_root = "..";
+include($path_to_root . "/includes/db_pager.inc");
 include_once($path_to_root . "/includes/session.inc");
 
 include_once($path_to_root . "/includes/date_functions.inc");
 include_once($path_to_root . "/manufacturing/includes/manufacturing_ui.inc");
 $js = "";
-if ($use_popup_windows)
+if ($SysPrefs->use_popup_windows)
        $js .= get_js_open_window(800, 500);
-if (isset($_GET['outstanding_only'])
+if (isset($_GET['outstanding_only']) && ($_GET['outstanding_only'] == true))
 {
+// curently outstanding simply means not closed
        $outstanding_only = 1;
-       page(_("Search Outstanding Work Orders"), false, false, "", $js);
-} 
-else 
+       page(_($help_context = "Search Outstanding Work Orders"), false, false, "", $js);
+}
+else
 {
        $outstanding_only = 0;
-       page(_("Search Work Orders"), false, false, "", $js);
+       page(_($help_context = "Search Work Orders"), false, false, "", $js);
 }
+//-----------------------------------------------------------------------------------
+// Ajax updates
+//
+if (get_post('SearchOrders')) 
+{
+       $Ajax->activate('orders_tbl');
+} elseif (get_post('_OrderNumber_changed')) 
+{
+       $disable = get_post('OrderNumber') !== '';
 
+       $Ajax->addDisable(true, 'StockLocation', $disable);
+       $Ajax->addDisable(true, 'OverdueOnly', $disable);
+       $Ajax->addDisable(true, 'OpenOnly', $disable);
+       $Ajax->addDisable(true, 'SelectedStockItem', $disable);
+
+       if ($disable) {
+               set_focus('OrderNumber');
+       } else
+               set_focus('StockLocation');
+
+       $Ajax->activate('orders_tbl');
+}
 
 //--------------------------------------------------------------------------------------
 
@@ -28,138 +60,122 @@ if (isset($_GET["stock_id"]))
 
 //--------------------------------------------------------------------------------------
 
-start_form(false, false, $_SERVER['PHP_SELF'] ."?outstanding_only=" . $outstanding_only .SID);
+start_form(false, false, $_SERVER['PHP_SELF'] ."?outstanding_only=$outstanding_only");
 
-start_table("class='tablestyle_noborder'");
+start_table(TABLESTYLE_NOBORDER);
 start_row();
-ref_cells(_("Reference:"), 'OrderNumber');
+ref_cells(_("#:"), 'OrderId', '',null, '', true);
+ref_cells(_("Reference:"), 'OrderNumber', '',null, '', true);
 
 locations_list_cells(_("at Location:"), 'StockLocation', null, true);
 
+end_row();
+end_table();
+start_table(TABLESTYLE_NOBORDER);
+start_row();
+
 check_cells( _("Only Overdue:"), 'OverdueOnly', null);
 
-check_cells( _("Only Open:"), 'OpenOnly', null);
+if ($outstanding_only==0)
+       check_cells( _("Only Open:"), 'OpenOnly', null);
 
 stock_manufactured_items_list_cells(_("for item:"), 'SelectedStockItem', null, true);
 
-submit_cells('SearchOrders', _("Search"));
+submit_cells('SearchOrders', _("Search"),'',_('Select documents'),  'default');
 end_row();
 end_table();
 
-end_form();
-
-$sql = "SELECT ".TB_PREF."workorders.*, ".TB_PREF."stock_master.description,".TB_PREF."locations.location_name
-       FROM ".TB_PREF."workorders,".TB_PREF."stock_master,".TB_PREF."locations
-       WHERE ".TB_PREF."stock_master.stock_id=".TB_PREF."workorders.stock_id AND
-       ".TB_PREF."locations.loc_code=".TB_PREF."workorders.loc_code ";
-
-if (check_value('OpenOnly')) 
+//-----------------------------------------------------------------------------
+function check_overdue($row)
 {
-       $sql .= " AND ".TB_PREF."workorders.closed=0 ";
+       return (!$row["closed"] 
+               && date_diff2(Today(), sql2date($row["required_by"]), "d") > 0);
 }
 
-if (isset($_POST['StockLocation']) && $_POST['StockLocation'] != $all_items) 
+function view_link($dummy, $order_no)
 {
-       $sql .= "AND ".TB_PREF."workorders.loc_code='" . $_POST['StockLocation'] . "' ";
+       return get_trans_view_str(ST_WORKORDER, $order_no);
 }
 
-if (isset($_POST['OrderNumber']) && $_POST['OrderNumber'] != "") 
+function view_stock($row)
 {
-       $sql .= "AND ".TB_PREF."workorders.wo_ref LIKE '%". $_POST['OrderNumber'] . "%'";
+       return view_stock_status($row["stock_id"], $row["description"], false);
 }
 
-if (isset($_POST['SelectedStockItem']) && $_POST['SelectedStockItem'] != $all_items) 
+function wo_type_name($dummy, $type)
 {
-       $sql .= "AND ".TB_PREF."workorders.stock_id='". $_POST['SelectedStockItem'] . "'";
+       global $wo_types_array;
+       
+       return $wo_types_array[$type];
 }
 
-if (check_value('OverdueOnly')) 
+function edit_link($row)
 {
-       $Today = date2sql(Today());
-
-       $sql .= "AND ".TB_PREF."workorders.required_by < '$Today' ";
+       return  $row['closed'] ? '<i>'._('Closed').'</i>' :
+               trans_editor_link(ST_WORKORDER, $row["id"]);
 }
-$sql .= " ORDER BY ".TB_PREF."workorders.required_by";
-
-$result = db_query($sql,"No orders were returned");
-
-start_table("$table_style width=80%");
-
-$th = array(_("#"), _("Reference"), _("Type"), _("Location"), _("Item"),
-       _("Required"), _("Manufactured"), _("Date"), _("Required By"), _("Closed"), "");
-table_header($th);
 
-$j = 1;
-$k = 0;
+function release_link($row)
+{
+       return $row["closed"] ? '' : 
+               ($row["released"]==0 ?
+               pager_link(_('Release'),
+                       "/manufacturing/work_order_release.php?trans_no=" . $row["id"])
+               : 
+               pager_link(_('Issue'),
+                       "/manufacturing/work_order_issue.php?trans_no=" .$row["id"]));
+}
 
-while ($myrow = db_fetch($result)) 
+function produce_link($row)
 {
+       return $row["closed"] || !$row["released"] ? '' :
+               pager_link(_('Produce'),
+                       "/manufacturing/work_order_add_finished.php?trans_no=" .$row["id"]);
+}
 
+function costs_link($row)
+{
+       return $row["closed"] || !$row["released"] ? '' :
+               pager_link(_('Costs'),
+                       "/manufacturing/work_order_costs.php?trans_no=" .$row["id"]);
+}
 
-       // check if it's an overdue work order
-       if (!$myrow["closed"] && date_diff(Today(), sql2date($myrow["required_by"]), "d") > 0) 
-       {
-               start_row("class='overduebg'");
-       }
-       else
-               alt_table_row_color($k);
-
-       $modify_page = $path_to_root . "/manufacturing/work_order_entry.php?" . SID . "trans_no=" . $myrow["id"];
-       $release_page = $path_to_root . "/manufacturing/work_order_release.php?" . SID . "trans_no=" . $myrow["id"];
-       if ($myrow["closed"] == 0) 
-       {
-               $issue = $path_to_root . "/manufacturing/work_order_issue.php?" . SID . "trans_no=" .$myrow["id"];
-               $add_finished = $path_to_root . "/manufacturing/work_order_add_finished.php?" . SID . "trans_no=" .$myrow["id"];
-               $costs = $path_to_root . "/gl/gl_payment.php?NewPayment=1&PayType=" . payment_person_types::WorkOrder(). "&PayPerson=" .$myrow["id"];
-               $can_issue = $myrow["released"];
-               $issue_link = $can_issue?("<a href=$issue>" . _("Issue") . "</a></td>
-                       <td><a href=$add_finished>" . _("Produce") . "</a></td>
-                       <td><a href=$costs>" . _("Costs") . "</a>"): _("Not Released");
-       } 
-       else 
-       {
-               $issue_link = "";
-       }
-
-       label_cell(get_trans_view_str(systypes::work_order(), $myrow["id"]));
-       label_cell(get_trans_view_str(systypes::work_order(), $myrow["id"], $myrow["wo_ref"]));
-       label_cell(wo_types::name($myrow["type"]));
-       label_cell($myrow["location_name"]);
-       view_stock_status_cell($myrow["stock_id"], $myrow["description"]);
-       qty_cell($myrow["units_reqd"]);
-       qty_cell($myrow["units_issued"]);
-       label_cell(sql2date($myrow["date_"]));
-       label_cell(sql2date($myrow["required_by"]));
-       label_cell(($myrow["closed"]? _("Yes"):_("No")));
-       if ($issue_link != "")
-               label_cell($issue_link);
-       if ($myrow["released"] == 0) 
-       {
-               label_cell("<a href=$release_page>" . _("Release") . "</a>");
-       }
-       if ($myrow["closed"] == 0) 
-       {
-               label_cell("<a href=$modify_page>" . _("Edit") . "</a>");
-       }
-
-       label_cell(get_gl_view_str(systypes::work_order(), $myrow["id"]));
-
-       end_row();
-
-       $j++;
-       If ($j == 12)
-       {
-               $j = 1;
-               table_header($th);
-       }
-       //end of page full new headings if
+function view_gl_link($row)
+{
+       return get_gl_view_str(ST_WORKORDER, $row['id']);
 }
-//end of while loop
 
-end_table(1);
+function dec_amount($row, $amount)
+{
+       return number_format2($amount, $row['decimals']);
+}
 
-//---------------------------------------------------------------------------------
+$sql = get_sql_for_work_orders($outstanding_only, get_post('SelectedStockItem'), get_post('StockLocation'),
+       get_post('OrderId'), get_post('OrderNumber'), check_value('OverdueOnly'));
+
+$cols = array(
+       _("#") => array('fun'=>'view_link', 'ord'=>''), 
+       _("Reference"), // viewlink 2 ?
+       _("Type") => array('fun'=>'wo_type_name'),
+       _("Location"), 
+       _("Item") => array('fun'=>'view_stock', 'ord'=>''),
+       _("Required") => array('fun'=>'dec_amount', 'align'=>'right'),
+       _("Manufactured") => array('fun'=>'dec_amount', 'align'=>'right'),
+       _("Date") => array('name'=>'date_', 'type'=>'date', 'ord'=>'desc'), 
+       _("Required By") => array('type'=>'date', 'ord'=>''),
+       array('insert'=>true, 'fun'=> 'edit_link'),
+       array('insert'=>true, 'fun'=> 'release_link'),
+       array('insert'=>true, 'fun'=> 'costs_link'),
+       array('insert'=>true, 'fun'=> 'produce_link'),
+       array('insert'=>true, 'fun'=> 'view_gl_link')
+);
+
+$table =& new_db_pager('orders_tbl', $sql, $cols);
+$table->set_marker('check_overdue', _("Marked orders are overdue."));
+
+$table->width = "90%";
+
+display_db_pager($table);
 
+end_form();
 end_page();
-
-?>