Preparing for Graphic Links final.Optimized.
[fa-stable.git] / manufacturing / search_work_orders.php
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU Affero General Public License,
5         AGPL, as published by the Free Software Foundation, either version 
6         3 of the License, or (at your option) any later version.
7     This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
10     See the License here <http://www.gnu.org/licenses/agpl-3.0.html>.
11 ***********************************************************************/
12 $page_security = 2;
13 $path_to_root="..";
14 include($path_to_root . "/includes/db_pager.inc");
15 include_once($path_to_root . "/includes/session.inc");
16
17 include_once($path_to_root . "/includes/date_functions.inc");
18 include_once($path_to_root . "/manufacturing/includes/manufacturing_ui.inc");
19 $js = "";
20 if ($use_popup_windows)
21         $js .= get_js_open_window(800, 500);
22 if (isset($_GET['outstanding_only']) && ($_GET['outstanding_only'] == true))
23 {
24 // curently outstanding simply means not closed
25         $outstanding_only = 1;
26         page(_("Search Outstanding Work Orders"), false, false, "", $js);
27 }
28 else
29 {
30         $outstanding_only = 0;
31         page(_("Search Work Orders"), false, false, "", $js);
32 }
33 //-----------------------------------------------------------------------------------
34 // Ajax updates
35 //
36 if (get_post('SearchOrders')) 
37 {
38         $Ajax->activate('orders_tbl');
39 } elseif (get_post('_OrderNumber_changed')) 
40 {
41         $disable = get_post('OrderNumber') !== '';
42
43         $Ajax->addDisable(true, 'StockLocation', $disable);
44         $Ajax->addDisable(true, 'OverdueOnly', $disable);
45         $Ajax->addDisable(true, 'OpenOnly', $disable);
46         $Ajax->addDisable(true, 'SelectedStockItem', $disable);
47
48         if ($disable) {
49                 set_focus('OrderNumber');
50         } else
51                 set_focus('StockLocation');
52
53         $Ajax->activate('orders_tbl');
54 }
55
56 //--------------------------------------------------------------------------------------
57
58 if (isset($_GET["stock_id"]))
59         $_POST['SelectedStockItem'] = $_GET["stock_id"];
60
61 //--------------------------------------------------------------------------------------
62
63 start_form(false, false, $_SERVER['PHP_SELF'] ."?outstanding_only=" . $outstanding_only .SID);
64
65 start_table("class='tablestyle_noborder'");
66 start_row();
67 ref_cells(_("Reference:"), 'OrderNumber', '',null, '', true);
68
69 locations_list_cells(_("at Location:"), 'StockLocation', null, true);
70
71 check_cells( _("Only Overdue:"), 'OverdueOnly', null);
72
73 if ($outstanding_only==0)
74         check_cells( _("Only Open:"), 'OpenOnly', null);
75
76 stock_manufactured_items_list_cells(_("for item:"), 'SelectedStockItem', null, true);
77
78 submit_cells('SearchOrders', _("Search"),'',_('Select documents'), true);
79 end_row();
80 end_table();
81
82 end_form();
83
84 //-----------------------------------------------------------------------------
85 function check_overdue($row)
86 {
87         return (!$row["closed"] 
88                 && date_diff(Today(), sql2date($row["required_by"]), "d") > 0);
89 }
90
91 function view_link($dummy, $order_no)
92 {
93         return get_trans_view_str(systypes::work_order(), $order_no);
94 }
95
96 function view_stock($row)
97 {
98         return view_stock_status($row["stock_id"], $row["description"], false);
99 }
100
101 function wo_type_name($dummy, $type)
102 {
103         return wo_types::name($type);
104 }
105
106 function edit_link($row)
107 {
108         return  $row['closed'] ? '<i>'._('Closed').'</i>' :
109                 pager_link(_("Edit"),
110                         "/manufacturing/work_order_entry.php?trans_no=" . $row["id"], ICON_EDIT);
111 }
112
113 function release_link($row)
114 {
115         return $row["closed"] ? '' : 
116                 ($row["released"]==0 ?
117                 pager_link(_('Release'),
118                         "/manufacturing/work_order_release.php?trans_no=" . $row["id"])
119                 : 
120                 pager_link(_('Issue'),
121                         "/manufacturing/work_order_issue.php?trans_no=" .$row["id"]));
122 }
123
124 function produce_link($row)
125 {
126         return $row["closed"] || !$row["released"] ? '' :
127                 pager_link(_('Produce'),
128                         "/manufacturing/work_order_add_finished.php?trans_no=" .$row["id"]);
129 }
130
131 function costs_link($row)
132 {
133         return $row["closed"] || !$row["released"] ? '' :
134                 pager_link(_('Costs'),
135                         "/gl/gl_bank.php?NewPayment=1&PayType=" 
136                         .payment_person_types::WorkOrder(). "&PayPerson=" .$row["id"]);
137 }
138
139 function dec_amount($row, $amount)
140 {
141         return number_format2($amount, $row['decimals']);
142 }
143
144 $sql = "SELECT
145         workorder.id,
146         workorder.wo_ref,
147         workorder.type,
148         location.location_name,
149         item.description,
150         workorder.units_reqd,
151         workorder.units_issued,
152         workorder.date_,
153         workorder.required_by,
154         workorder.released_date,
155         workorder.closed,
156         workorder.released,
157         workorder.stock_id,
158         unit.decimals
159         FROM ".TB_PREF."workorders as workorder,"
160                 .TB_PREF."stock_master as item,"
161                 .TB_PREF."item_units as unit,"
162                 .TB_PREF."locations as location
163         WHERE workorder.stock_id=item.stock_id 
164                 AND workorder.loc_code=location.loc_code
165                 AND item.units=unit.abbr";
166
167 if (check_value('OpenOnly') || $outstanding_only != 0)
168 {
169         $sql .= " AND workorder.closed=0";
170 }
171
172 if (isset($_POST['StockLocation']) && $_POST['StockLocation'] != $all_items)
173 {
174         $sql .= " AND workorder.loc_code='" . $_POST['StockLocation'] . "' ";
175 }
176
177 if (isset($_POST['OrderNumber']) && $_POST['OrderNumber'] != "")
178 {
179         $sql .= " AND workorder.wo_ref LIKE '%". $_POST['OrderNumber'] . "%'";
180 }
181
182 if (isset($_POST['SelectedStockItem']) && $_POST['SelectedStockItem'] != $all_items)
183 {
184         $sql .= " AND workorder.stock_id='". $_POST['SelectedStockItem'] . "'";
185 }
186
187 if (check_value('OverdueOnly'))
188 {
189         $Today = date2sql(Today());
190
191         $sql .= " AND workorder.required_by < '$Today' ";
192 }
193
194 $cols = array(
195         _("#") => array('fun'=>'view_link'), 
196         _("Reference"), // viewlink 2 ?
197         _("Type") => array('fun'=>'wo_type_name'),
198         _("Location"), 
199         _("Item") => array('fun'=>'view_stock'),
200         _("Required") => array('fun'=>'dec_amount', 'align'=>'right'),
201         _("Manufactured") => array('fun'=>'dec_amount', 'align'=>'right'),
202         _("Date") => 'date', 
203         _("Required By") => array('type'=>'date', 'ord'=>''),
204         array('insert'=>true, 'fun'=> 'edit_link'),
205         array('insert'=>true, 'fun'=> 'release_link'),
206         array('insert'=>true, 'fun'=> 'produce_link'),
207         array('insert'=>true, 'fun'=> 'costs_link')
208 );
209
210 $table =& new_db_pager('orders_tbl', $sql, $cols);
211 $table->set_marker('check_overdue', _("Marked orders are overdue."));
212
213 if (get_post('SearchOrders')) {
214         $table->set_sql($sql);
215         $table->set_columns($cols);
216 }
217 start_form();
218
219 display_db_pager($table);
220
221 end_form();
222 end_page();
223 ?>