5 include_once($path_to_root . "/sales/includes/cart_class.inc");
6 include_once($path_to_root . "/includes/session.inc");
7 include_once($path_to_root . "/includes/data_checks.inc");
8 include_once($path_to_root . "/sales/includes/sales_ui.inc");
9 include_once($path_to_root . "/sales/includes/ui/sales_order_ui.inc");
10 include_once($path_to_root . "/sales/includes/sales_db.inc");
12 $js = get_js_form_entry("StockID2", "stock_id", "qty");
13 if ($use_popup_windows)
14 $js .= get_js_open_window(900, 500);
16 $js .= get_js_date_picker();
18 if(isset($_GET['NewDelivery'])) {
19 $_SESSION['page_title'] = _("Sales Delivery");
20 create_cart('delivery',0);
22 elseif(isset($_GET['NewOrder'])) {
23 $_SESSION['page_title'] = _("Sales Order Entry");
24 create_cart('order',0);
26 elseif(isset($_GET['ModifyOrderNumber'])) {
27 $_SESSION['page_title'] = _("Modifying Sales Order") . " #".$_GET['ModifyOrderNumber'];
28 create_cart('order', $_GET['ModifyOrderNumber']);
31 page($_SESSION['page_title'], false, false, "", $js);
33 //--------------------------------------------------------------------------------
34 if (isset($_GET['AddedID']))
36 $order_no = $_GET['AddedID'];
37 $trans_type = systypes::sales_order();
39 display_notification_centered(_("Order has been entered.") . " #$order_no");
41 display_note(get_trans_view_str($trans_type, $order_no, _("View this order")));
43 hyperlink_params($path_to_root . "/sales/customer_delivery.php", _("Make Delivery Against This Order"), "OrderNumber=$order_no");
45 hyperlink_params($_SERVER['PHP_SELF'], _("Enter a New Order"), "NewOrder=Yes");
47 display_footer_exit();
49 //--------------------------------------------------------------------------------
51 if (isset($_GET['UpdatedID']))
53 $order_no = $_GET['UpdatedID'];
54 $trans_type = systypes::sales_order();
56 display_notification_centered(_('Order # ').$order_no. _( ' has been updated.'));
58 display_note(get_trans_view_str($trans_type, $order_no, _("View this order")));
60 hyperlink_params($path_to_root . "/sales/customer_delivery.php", _("Confirm Order Quantities and Make Delivery"), "OrderNumber=$order_no");
62 hyperlink_params($path_to_root . "/sales/inquiry/sales_orders_view.php", _("Select A Different Order"), "OutstandingOnly=1");
64 display_footer_exit();
67 //--------------------------------------------------------------------------------------------------
69 function copy_to_cart()
71 if ($_SESSION['Items']->trans_type=='delivery')
72 $_SESSION['Items']->memo_ = $_POST['InvoiceText'];
74 $_SESSION['Items']->orig_order_date = $_POST['OrderDate'];
75 $_SESSION['Items']->delivery_date = $_POST['delivery_date'];
76 $_SESSION['Items']->cust_ref = $_POST['cust_ref'];
77 $_SESSION['Items']->freight_cost = $_POST['freight_cost'];
78 $_SESSION['Items']->Comments = $_POST['Comments'];
80 $_SESSION['Items']->deliver_to = $_POST['deliver_to'];
81 $_SESSION['Items']->delivery_address = $_POST['delivery_address'];
82 $_SESSION['Items']->phone = $_POST['phone'];
83 $_SESSION['Items']->Location = $_POST['Location'];
84 $_SESSION['Items']->ship_via = $_POST['ship_via'];
86 if (isset($_POST['email']))
87 $_SESSION['Items']->email =$_POST['email'];
89 $_SESSION['Items']->email = '';
91 $_SESSION['Items']->customer_id = $_POST['customer_id'];
92 $_SESSION['Items']->Branch = $_POST['branch_id'];
95 //--------------------------------------------------------------------------------------------------
97 function copy_from_cart()
99 if ($_SESSION['Items']->trans_type=='delivery')
100 $_POST['InvoiceText'] = $_SESSION['Items']->memo_;
102 $_POST['OrderDate'] = $_SESSION['Items']->orig_order_date;
103 $_POST['delivery_date'] = $_SESSION['Items']->delivery_date;
104 $_POST['cust_ref'] = $_SESSION['Items']->cust_ref;
105 $_POST['freight_cost'] = $_SESSION['Items']->freight_cost;
106 $_POST['Comments'] = $_SESSION['Items']->Comments;
108 $_POST['deliver_to'] = $_SESSION['Items']->deliver_to;
109 $_POST['delivery_address'] = $_SESSION['Items']->delivery_address;
110 $_POST['phone'] = $_SESSION['Items']->phone;
111 $_POST['Location'] = $_SESSION['Items']->Location;
112 $_POST['ship_via'] = $_SESSION['Items']->ship_via;
114 $_POST['customer_id'] = $_SESSION['Items']->customer_id;
115 $_POST['branch_id'] = $_SESSION['Items']->Branch;
120 function can_process()
122 if ($_SESSION['Items']->trans_type=='delivery')
124 $edate = _("The entered delivery date is invalid.");
128 $edate = _("The entered order date is invalid.");
130 if (!is_date($_POST['OrderDate']))
132 display_error($edate);
135 if (($_SESSION['Items']->trans_type=='delivery') && !is_date_in_fiscalyear($_POST['OrderDate']))
137 display_error(_("The entered date is not in fiscal year"));
142 $_SESSION['Items']->orig_order_date = $_POST['OrderDate'];
144 if (count($_SESSION['Items']->line_items) == 0)
146 display_error(_("You must enter at least one line entry."));
149 if (strlen($_POST['deliver_to']) <= 1)
151 display_error(_("You must enter the person or company to whom delivery should be made to."));
155 if (strlen($_POST['delivery_address']) <= 1)
157 display_error( _("You should enter the street address in the box provided. Orders cannot be accepted without a valid street address."));
161 if ($_POST['freight_cost'] == "")
162 $_POST['freight_cost'] = 0;
164 if (!is_numeric($_POST['freight_cost']))
166 display_error(_("The shipping cost entered is expected to be numeric."));
170 if (!is_date($_POST['delivery_date']))
172 display_error(_("The delivery date is invalid."));
176 if (date1_greater_date2($_SESSION['Items']->orig_order_date, $_POST['delivery_date']))
178 display_error(_("The requested delivery date is before the date of the order."));
185 //-----------------------------------------------------------------------------------------------------------
187 if (isset($_POST['ProcessOrder']) && can_process())
191 if($_SESSION['Items']->order_no == 0) {
192 $order_no = add_sales_order($_SESSION['Items']);
193 if ($_SESSION['Items']->trans_type=='delivery')
195 $_SESSION['Items']->memo_ = $_POST['InvoiceText'];
196 $_SESSION['Items']->memo_ = str_replace("'", "\\'", $_SESSION['Items']->memo_);
197 $_SESSION['Items']->order_no = $order_no;
199 meta_forward("$path_to_root/sales/customer_delivery.php", "process_delivery=Yes");
203 meta_forward($_SERVER['PHP_SELF'], "AddedID=$order_no");
205 } else { // store modified sales order
206 update_sales_order($_SESSION['Items']->order_no, $_SESSION['Items']);
207 $order_no = $_SESSION['Items']->order_no;
208 meta_forward($_SERVER['PHP_SELF'], "UpdatedID=$order_no");
212 //--------------------------------------------------------------------------------
214 function check_item_data()
216 if (!is_numeric($_POST['qty']) || $_POST['qty'] < 0 || $_POST['Disc'] > 100 ||
219 display_error( _("The item could not be updated because you are attempting to set the quantity ordered to less than 0, or the discount percent to more than 100."));
223 if (!is_numeric($_POST['price']) || $_POST['price']<0)
225 display_error( _("Price for item must be entered and can not be less then 0"));
229 // should this be checked for delivery ?
230 // if($_SESSION['Items']->some_already_delivered($_POST['stock_id']) != 0 &&
231 // $_SESSION['Items']->line_items[$_POST['stock_id']]->price != $_POST['price'])
233 // display_error(_("The item you attempting to modify the price for has already had some quantity invoiced at the old price. The item unit price cannot be modified retrospectively."));
237 // if($_SESSION['Items']->some_already_delivered($_POST['stock_id']) != 0 &&
238 // $_SESSION['Items']->line_items[$_POST['stock_id']]->discount_percent != ($_POST['Disc']/100))
240 // display_error(_("The item you attempting to modify has had some quantity invoiced at the old discount percent. The items discount cannot be modified retrospectively."));
244 if (isset($_POST['LineNo']) && isset($_SESSION['Items']->line_items[$_POST['LineNo']]) && $_SESSION['Items']->line_items[$_POST['LineNo']]->qty_done > $_POST['qty'])
246 display_error(_("You attempting to make the quantity ordered a quantity less than has already been delivered. The quantity delivered cannot be modified retrospectively."));
252 function handle_update_item()
254 if($_POST['UpdateItem'] != '' && check_item_data())
256 $_SESSION['Items']->update_cart_item($_POST['LineNo'], $_POST['qty'],
257 $_POST['price'], ($_POST['Disc'] / 100));
261 //--------------------------------------------------------------------------------
263 function handle_delete_item()
265 if($_GET['Delete'] != "")
267 $line_no = $_GET['Delete'];
268 if($_SESSION['Items']->some_already_delivered($line_no) == 0)
270 $_SESSION['Items']->remove_from_cart($line_no);
274 display_error(_("This item cannot be deleted because some of it has already been delivered."));
279 //--------------------------------------------------------------------------------
281 function handle_new_item()
283 if (!check_item_data())
285 add_to_order($_SESSION['Items'], $_POST['stock_id'], $_POST['qty'],
286 $_POST['price'], $_POST['Disc']/100);
288 $_POST['StockID2'] = $_POST['stock_id'] = "";
291 //--------------------------------------------------------------------------------
293 function handle_cancel_order()
295 global $path_to_root;
297 if ($_POST['CancelOrder'] != "")
299 $ok_to_delete = 1; //assume this in the first instance
301 if (($_SESSION['Items']->order_no != 0) && sales_order_has_deliveries($_SESSION['Items']->order_no))
304 display_error(_("This order cannot be cancelled because some of it has already been invoiced or dispatched. However, the line item quantities may be modified."));
307 if ($ok_to_delete == 1)
309 if($_SESSION['Items']->order_no != 0)
311 delete_sales_order($_SESSION['Items']->order_no);
314 if ($_SESSION['Items']->trans_type=='delivery')
316 display_note(_("This sales delivery has been cancelled as requested."), 1);
317 hyperlink_params($path_to_root . "/sales/sales_order_entry.php", _("Enter a New Sales Delivery"), SID . "&NewDelivery=Yes");
321 display_note(_("This sales order has been cancelled as requested."), 1);
322 hyperlink_params($path_to_root . "/sales/sales_order_entry.php", _("Enter a New Sales Order"), SID . "&NewOrder=Yes");
331 //--------------------------------------------------------------------------------
333 function create_cart($type, $trans_num)
335 /*New order entry - clear any existing order details from the Items object and initiate a newy*/
336 if (isset($_SESSION['Items']))
338 unset ($_SESSION['Items']->line_items);
339 unset ($_SESSION['Items']);
342 $_SESSION['Items'] = new cart($type);
344 if( $trans_num==0 ) { // new transaction
345 $_SESSION['Items']->customer_id = "";
346 $_POST['OrderDate'] = Today();
347 $_SESSION['Items']->order_no = 0;
348 if (!is_date_in_fiscalyear($_POST['OrderDate']))
349 $_POST['OrderDate'] = end_fiscalyear();
350 $_SESSION['Items']->orig_order_date = $_POST['OrderDate'];
351 } else { // read sales order to modify
352 $_SESSION['Items']->order_no = $trans_num;
353 /*read in all the selected order into the Items cart */
354 read_sales_order($_SESSION['Items']->order_no, $_SESSION['Items']);
355 copy_from_cart(); // load POST variables
359 //--------------------------------------------------------------------------------
361 if (isset($_POST['CancelOrder']))
362 handle_cancel_order();
364 if (isset($_GET['Delete']) || isset($_GET['Edit']))
367 if (isset($_GET['Delete']))
368 handle_delete_item();
370 if (isset($_POST['UpdateItem']))
371 handle_update_item();
373 if (isset($_POST['AddItem']))
376 //--------------------------------------------------------------------------------
378 check_db_has_stock_items(_("There are no inventory items defined in the system."));
380 check_db_has_customer_branches(_("There are no customers, or there are no customers with branches. Please define customers and customer branches."));
382 if ($_SESSION['Items']->trans_type=='delivery')
384 $idate = _("Delivery Date:");
385 $orderitems = _("Delivery Note Items");
386 $deliverydetails = _("Enter Delivery Details and Confirm Dispatch");
387 $cancelorder = _("Cancel Delivery");
391 $idate = _("Order Date:");
392 $orderitems = _("Sales Order Items");
393 $deliverydetails = _("Enter Delivery Details and Confirm Order");
394 $cancelorder = _("Cancel Order");
396 start_form(false, true);
398 $customer_error = display_order_header($_SESSION['Items'],
399 ($_SESSION['Items']->any_already_delivered() == 0), $idate);
401 if ($customer_error == "")
403 start_table("$table_style width=80%", 10);
405 display_order_summary($orderitems, $_SESSION['Items'], true);
408 display_delivery_details($_SESSION['Items']);
414 display_error($customer_error);
417 if ($_SESSION['Items']->trans_type=='delivery')
419 $porder = _("Place Delivery");
420 $corder = _("Commit Delivery Changes");
421 $eorder = _("Edit Delivery Items");
425 $porder = _("Place Order");
426 $corder = _("Commit Order Changes");
427 $eorder = _("Edit Order Items");
430 if ($_SESSION['Items']->order_no == 0)
432 submit_center_first('ProcessOrder', $porder);
436 submit_center_first('ProcessOrder', $corder);
439 submit_center_last('CancelOrder', $cancelorder);
443 //--------------------------------------------------------------------------------