Bug [0000074] Marked items are overdue. For Filled (fully delivered) Sales Order
[fa-stable.git] / sales / inquiry / sales_orders_view.php
1 <?php
2
3 $page_security = 2;
4 $path_to_root="../..";
5 include($path_to_root . "/includes/session.inc");
6
7 include($path_to_root . "/sales/includes/sales_ui.inc");
8 include_once($path_to_root . "/reporting/includes/reporting.inc");
9
10 $js = "";
11 if ($use_popup_windows)
12         $js .= get_js_open_window(900, 600);
13 if ($use_date_picker)
14         $js .= get_js_date_picker();
15
16 if (isset($_GET['OutstandingOnly']) && ($_GET['OutstandingOnly'] == true))
17 {
18         $_POST['order_view_mode'] = 'OutstandingOnly';
19         $_SESSION['page_title'] = _("Search Outstanding Sales Orders");
20 }
21 elseif (isset($_GET['InvoiceTemplates']) && ($_GET['InvoiceTemplates'] == true))
22 {
23         $_POST['order_view_mode'] = 'InvoiceTemplates';
24         $_SESSION['page_title'] = _("Search Template for Invoicing");
25 }
26 elseif (isset($_GET['DeliveryTemplates']) && ($_GET['DeliveryTemplates'] == true))
27 {
28         $_POST['order_view_mode'] = 'DeliveryTemplates';
29         $_SESSION['page_title'] = _("Select Template for Delivery");
30 }
31 elseif (!isset($_POST['order_view_mode']))
32 {
33         $_POST['order_view_mode'] = false;
34         $_SESSION['page_title'] = _("Search All Sales Orders");
35 }
36
37 page($_SESSION['page_title'], false, false, "", $js);
38
39 if (isset($_GET['selected_customer']))
40 {
41         $selected_customer = $_GET['selected_customer'];
42 }
43 elseif (isset($_POST['selected_customer']))
44 {
45         $selected_customer = $_POST['selected_customer'];
46 }
47 else
48         $selected_customer = -1;
49
50 //-----------------------------------------------------------------------------------
51 // Ajax updates
52 //
53 if (get_post('SearchOrders')) 
54 {
55         $Ajax->activate('orders_tbl');
56 } elseif (get_post('_OrderNumber_changed')) 
57 {
58         $disable = get_post('OrderNumber') !== '';
59
60         if ($_POST['order_view_mode']!='DeliveryTemplates' 
61                 && $_POST['order_view_mode']!='InvoiceTemplates') {
62                         $Ajax->addDisable(true, 'OrdersAfterDate', $disable);
63                         $Ajax->addDisable(true, 'OrdersToDate', $disable);
64         }
65         $Ajax->addDisable(true, 'StockLocation', $disable);
66         $Ajax->addDisable(true, '_SelectStockFromList_edit', $disable);
67         $Ajax->addDisable(true, 'SelectStockFromList', $disable);
68
69         if ($disable) {
70                 $Ajax->addFocus(true, 'OrderNumber');
71         } else
72                 $Ajax->addFocus(true, 'OrdersAfterDate');
73
74         $Ajax->activate('orders_tbl');
75 }
76
77 start_form(false, false, $_SERVER['PHP_SELF'] .SID);
78
79 start_table("class='tablestyle_noborder'");
80 start_row();
81 ref_cells(_("#:"), 'OrderNumber', '',null, '', true);
82 if ($_POST['order_view_mode'] != 'DeliveryTemplates' && $_POST['order_view_mode'] != 'InvoiceTemplates')
83 {
84         date_cells(_("from:"), 'OrdersAfterDate', '', null, -30);
85         date_cells(_("to:"), 'OrdersToDate', '', null, 1);
86 }
87 locations_list_cells(_("Location:"), 'StockLocation', null, true);
88
89 stock_items_list_cells(_("Item:"), 'SelectStockFromList', null, true);
90
91 submit_cells('SearchOrders', _("Search"),'',_('Select documents'), true);
92
93 hidden('order_view_mode', $_POST['order_view_mode']);
94
95 end_row();
96
97 end_table();
98 end_form();
99
100 //---------------------------------------------------------------------------------------------
101
102 if (isset($_POST['SelectStockFromList']) && ($_POST['SelectStockFromList'] != "") &&
103         ($_POST['SelectStockFromList'] != reserved_words::get_all()))
104 {
105         $selected_stock_item = $_POST['SelectStockFromList'];
106 }
107 else
108 {
109         unset($selected_stock_item);
110 }
111
112 function change_tpl_flag($id)
113 {
114         global  $Ajax;
115         
116         $sql = "UPDATE ".TB_PREF."sales_orders SET type = !type WHERE order_no=$id";
117
118         db_query($sql, "Can't change sales order type");
119         $Ajax->activate('orders_tbl');
120 }
121 //---------------------------------------------------------------------------------------------
122 $id = find_submit('_chgtpl');
123 if ($id != -1)
124         change_tpl_flag($id);
125
126 //---------------------------------------------------------------------------------------------
127
128 $sql = "SELECT ".TB_PREF."sales_orders.order_no, ".TB_PREF."debtors_master.curr_code, ".TB_PREF."debtors_master.name, ".TB_PREF."cust_branch.br_name,
129         ".TB_PREF."sales_orders.ord_date, ".TB_PREF."sales_orders.deliver_to, ".TB_PREF."sales_orders.delivery_date,
130         ".TB_PREF."sales_orders.type, ";
131 $sql .= " Sum(".TB_PREF."sales_order_details.qty_sent) AS TotDelivered, ";
132 $sql .= " Sum(".TB_PREF."sales_order_details.quantity) AS TotQuantity, ";
133 $sql .= " Sum(".TB_PREF."sales_order_details.unit_price*".TB_PREF."sales_order_details.quantity*(1-".TB_PREF."sales_order_details.discount_percent)) AS OrderValue, ";
134
135 //if ($_POST['order_view_mode']=='InvoiceTemplates' || $_POST['order_view_mode']=='DeliveryTemplates')
136   $sql .= TB_PREF."sales_orders.comments, ";
137 //else
138   $sql .= TB_PREF."sales_orders.customer_ref";
139
140 $sql .= " FROM ".TB_PREF."sales_orders, ".TB_PREF."sales_order_details, ".TB_PREF."debtors_master, ".TB_PREF."cust_branch
141                 WHERE ".TB_PREF."sales_orders.order_no = ".TB_PREF."sales_order_details.order_no
142                         AND ".TB_PREF."sales_orders.debtor_no = ".TB_PREF."debtors_master.debtor_no
143                         AND ".TB_PREF."sales_orders.branch_code = ".TB_PREF."cust_branch.branch_code
144                         AND ".TB_PREF."debtors_master.debtor_no = ".TB_PREF."cust_branch.debtor_no ";
145
146 //figure out the sql required from the inputs available
147 if (isset($_POST['OrderNumber']) && $_POST['OrderNumber'] != "")
148 {
149 // if ($_POST['OrderNumber'] != '*')  // TODO paged table
150         $sql .= " AND ".TB_PREF."sales_orders.order_no LIKE '%". $_POST['OrderNumber'] ."'";
151  $sql .= " GROUP BY ".TB_PREF."sales_orders.order_no";
152 }
153 else
154 {
155         if ($_POST['order_view_mode']!='DeliveryTemplates' && $_POST['order_view_mode']!='InvoiceTemplates')
156         {
157                 $date_after = date2sql($_POST['OrdersAfterDate']);
158                 $date_before = date2sql($_POST['OrdersToDate']);
159
160                 $sql .= " AND ".TB_PREF."sales_orders.ord_date >= '$date_after'";
161                 $sql .= " AND ".TB_PREF."sales_orders.ord_date <= '$date_before'";
162         }
163         if ($selected_customer != -1)
164                 $sql .= " AND ".TB_PREF."sales_orders.debtor_no='" . $selected_customer . "'";
165
166         if (isset($selected_stock_item))
167                 $sql .= " AND ".TB_PREF."sales_order_details.stk_code='". $selected_stock_item ."'";
168
169         if (isset($_POST['StockLocation']) && $_POST['StockLocation'] != reserved_words::get_all())
170                 $sql .= " AND ".TB_PREF."sales_orders.from_stk_loc = '". $_POST['StockLocation'] . "' ";
171
172         if ($_POST['order_view_mode']=='OutstandingOnly')
173                 $sql .= " AND ".TB_PREF."sales_order_details.qty_sent < ".TB_PREF."sales_order_details.quantity";
174         elseif ($_POST['order_view_mode']=='InvoiceTemplates' || $_POST['order_view_mode']=='DeliveryTemplates')
175                 $sql .= " AND ".TB_PREF."sales_orders.type=1";
176
177         $sql .= " GROUP BY ".TB_PREF."sales_orders.order_no, ".TB_PREF."sales_orders.debtor_no, ".TB_PREF."sales_orders.branch_code,
178                 ".TB_PREF."sales_orders.customer_ref, ".TB_PREF."sales_orders.ord_date, ".TB_PREF."sales_orders.deliver_to";
179
180 } //end not order number selected
181 $result = db_query($sql,"No orders were returned");
182 //-----------------------------------------------------------------------------------
183 if ($result)
184 {
185         print_hidden_script(30);
186
187         start_form();
188         /*show a table of the orders returned by the sql */
189         div_start('orders_tbl');
190
191         start_table("$table_style colspan=6 width=95%");
192         $th = array(_("Order #"), _("Customer"), _("Branch"), _("Cust Order #"), _("Order Date"),
193                 _("Required By"), _("Delivery To"), _("Order Total"), _("Currency"), "");
194
195         if($_POST['order_view_mode']=='InvoiceTemplates' || $_POST['order_view_mode']=='DeliveryTemplates')
196         {
197                 $th[3] = _('Description');
198         } elseif ($_POST['order_view_mode'] != 'OutstandingOnly') {
199                 $th[9] = _('Tmpl');
200          $th[] =''; $th[] ='';
201         } 
202
203         table_header($th);
204
205         $j = 1;
206         $k = 0; //row colour counter
207         $overdue_items = false;
208         while ($myrow = db_fetch($result))
209         {
210                 $view_page = get_customer_trans_view_str(systypes::sales_order(), $myrow["order_no"]);
211                 $formated_del_date = sql2date($myrow["delivery_date"]);
212                 $formated_order_date = sql2date($myrow["ord_date"]);
213                 if (isset($_POST['Update']) && 
214                                 check_value( "chgtpl".$myrow["order_no"]) != $myrow["type"]) {
215                                 change_tpl_flag($myrow["order_no"]);
216                                 $myrow['type'] = !$myrow['type'];
217                 }
218 //          $not_closed =  $myrow['type'] && ($myrow["TotDelivered"] < $myrow["TotQuantity"]);
219
220         // if overdue orders, then highlight as so. 2008-10-15 added totdelivered < totquantity as well for qualifying overdue
221         if ($myrow['type'] == 0 && date1_greater_date2(Today(), $formated_del_date) && ($myrow["TotDelivered"] < $myrow["TotQuantity"]))
222         {
223                  start_row("class='overduebg'");
224                  $overdue_items = true;
225         }
226         else
227         {
228                         alt_table_row_color($k);
229         }
230
231                 label_cell($view_page);
232                 label_cell($myrow["name"]);
233                 label_cell($myrow["br_name"]);
234                 if($_POST['order_view_mode']=='InvoiceTemplates' || $_POST['order_view_mode']=='DeliveryTemplates')
235                         label_cell($myrow["comments"]);
236                 else
237                         label_cell($myrow["customer_ref"]);
238                 label_cell($formated_order_date);
239                 label_cell($formated_del_date);
240                 label_cell($myrow["deliver_to"]);
241                 amount_cell($myrow["OrderValue"]);
242                 label_cell($myrow["curr_code"]);
243                 if ($_POST['order_view_mode']=='OutstandingOnly'/* || $not_closed*/)
244                 {
245                 $delivery_note = $path_to_root . "/sales/customer_delivery.php?" . SID . "OrderNumber=" .$myrow["order_no"];
246                 label_cell("<a href='$delivery_note'>" . _("Dispatch") . "</a>");
247                 }
248                 elseif ($_POST['order_view_mode']=='InvoiceTemplates')
249                 {
250                 $select_order= $path_to_root . "/sales/sales_order_entry.php?" . SID . "NewInvoice=" .$myrow["order_no"];
251                 label_cell("<a href='$select_order'>" . _("Invoice") . "</a>");
252                 }
253                 elseif ($_POST['order_view_mode']=='DeliveryTemplates')
254                 {
255                         $select_order= $path_to_root . "/sales/sales_order_entry.php?" . SID . "NewDelivery=" .$myrow["order_no"];
256                 label_cell("<a href='$select_order'>" . _("Delivery") . "</a>");
257                 }
258                 else
259                 {
260                         check_cells( null, "chgtpl" .$myrow["order_no"], $myrow["type"], true, 
261                                 _('Set this order as a template for direct deliveries/invoices'));
262
263                         $modify_page = $path_to_root . "/sales/sales_order_entry.php?" . SID . "ModifyOrderNumber=" . $myrow["order_no"];
264                         label_cell("<a href='$modify_page'>" . _("Edit") . "</a>");
265                         label_cell(print_document_link($myrow['order_no'], _("Print")));
266                 }
267                 end_row();;
268
269                 $j++;
270                 if ($j == 12)
271                 {
272                         $j = 1;
273                         table_header($th);
274                 }
275                 //end of page full new headings if
276         }
277         //end of while loop
278         end_table();
279
280    if ($overdue_items)
281                 display_note(_("Marked items are overdue."), 0, 1, "class='overduefg'");
282         else
283                 echo '<br>';
284         div_end();
285         submit_center('Update', _("Update"), true, '', null);
286         end_form();
287 }
288
289 echo "<br>";
290 end_page();
291 ?>