trans_type=='invoice')
hyperlink_params("$path_to_root/sales/sales_order_entry.php", _("Make Another Dispatch"), "NewDispatch=Yes");
else
hyperlink_params("$path_to_root/sales/inquiry/sales_orders_view.php", _("Select Another Order For Dispatch"), "OutstandingOnly=1");
display_footer_exit();
}
//---------------------------------------------------------------------------------------------------------------
if (!isset($_GET['OrderNumber']) && !isset($_SESSION['ProcessingOrder']) &&
!isset($_GET['ModifyDelivery']) && !isset($_GET['process_delivery']))
{
/* This page can only be called with an order number for invoicing*/
display_error(_("This page can only be opened if an order or delivery note has been selected. Please select it first."));
hyperlink_params("$path_to_root/sales/inquiry/sales_orders_view.php", _("Select a Sales Order to Delivery"), "OutstandingOnly=1");
end_page();
exit;
}
elseif (isset($_GET['OrderNumber']) && $_GET['OrderNumber'] > 0)
{
if (isset($_SESSION['Items']))
{
unset($_SESSION['Items']->line_items);
unset ($_SESSION['Items']);
}
$_SESSION['ProcessingOrder'] = $_GET['OrderNumber'];
$_SESSION['Items'] = new cart;
/*read in all the selected order into the Items cart */
if (read_sales_order($_SESSION['ProcessingOrder'], $_SESSION['Items']))
{
if ($_SESSION['Items']->count_items() == 0)
{
hyperlink_params($path_to_root . "/sales/inquiry/sales_orders_view.php", _("Select a different sales order to delivery"), "OutstandingOnly=1");
die ("
" . _("This order has no items. There is nothing to delivery.") . "");
}
}
else
{
hyperlink_no_params("/sales_orders_view.php", _("Select a sales order to dispatch"));
die ("
" . _("This order items could not be retrieved. Please select another order.") . "");
}
}
elseif (isset($_GET['ModifyDelivery']) && $_GET['ModifyDelivery'] > 0) {
if (isset($_SESSION['Items']))
{
unset($_SESSION['Items']->line_items);
unset ($_SESSION['Items']);
}
$_SESSION['Items'] = new cart;
if(read_sales_delivery($_GET['ModifyDelivery'],$_SESSION['Items'] ))
{
if ($_SESSION['Items']->count_items() == 0)
{
hyperlink_params($path_to_root . "/sales/inquiry/sales_orders_view.php", _("Select a different delivery"), "OutstandingOnly=1");
die ("
" . _("This delivery has all items invoiced. There is nothing to modify.") . "");
}
}
else
{
hyperlink_no_params("/sales_orders_view.php", _("Select a sales order to dispatch"));
die ("
" . _("This sales delivery item could not be retrieved. Please select another delivery.") . "");
}
$_SESSION['ProcessingOrder'] = $_SESSION['Items']->order_no;
} else
{
// Update cart delivery quantities/descriptions
foreach ($_SESSION['Items']->line_items as $line=>$itm)
{
if(isset($_POST['Line'.$line])) {
$line_qty = $_POST['Line'.$line];
if (is_numeric($line_qty) && $_POST['Line'.$line] <= ($itm->quantity - $itm->qty_done))
{
$_SESSION['Items']->line_items[$line]->qty_dispatched = $line_qty;
}
}
if(isset($_POST['Line'.$line.'Desc'])) {
$line_desc = $_POST['Line'.$line.'Desc'];
if (strlen($line_desc) > 0)
{
$_SESSION['Items']->line_items[$line]->item_description = $line_desc;
}
}
}
}
//---------------------------------------------------------------------------------------------------------------
function order_changed_error()
{
global $path_to_root;
display_note(_("This order has been changed or invoiced since this delivery was started to be confirmed. Processing halted."), 1, 0);
display_note(_("To enter and confirm this dispatch the order must be re-selected and re-read again to update the changes made by the other user."), 1, 0);
hyperlink_no_params("$path_to_root/sales/inquiry/sales_orders_view.php", _("Select a sales order for confirming deliveries"));
unset($_SESSION['ProcessingOrder']);
exit;
}
//---------------------------------------------------------------------------------------------------------------
function check_order_changed()
{
global $debug;
/*Now need to check that the order details are the same as they were when
they were read into the Items array.
If they've changed then someone else may have dispatch them */
$sql = "SELECT id, stk_code, quantity, qty_sent FROM ".TB_PREF."sales_order_details WHERE
order_no = " . $_SESSION['ProcessingOrder']. " ORDER BY id";
$result = db_query($sql,"retreive sales order details");
if (db_num_rows($result) != count($_SESSION['Items']->line_items))
{
/*there should be the same number of items returned from this query as
count of lines on the delivery notes - if not then someone has
already invoiced or credited some lines */
if ($debug == 1)
{
display_note($sql, 1, 0);
display_note("No rows returned by sql:" . db_num_rows($result), 1, 0);
display_note("Count of items in the cart " . count($_SESSION['Items']->line_items), 1, 0);
}
return false;
}
$line=0;
while ($myrow = db_fetch($result))
{
$stk_itm = $myrow["stk_code"];
if ($_SESSION['Items']->line_items[$line]->quantity != $myrow["quantity"] ||
$_SESSION['Items']->line_items[$line]->qty_done != $myrow["qty_sent"])
{
display_note(_("Original order for") . " '" . $myrow["stk_code"] . "' " .
_("has a quantity of") . " " . $myrow["quantity"] . " " .
_("and an delivered quantity of") . " " . $myrow["qty_sent"] . " " .
_("the cart shows quantity of") . " " .
$_SESSION['Items']->line_items[$line]->quantity . " " .
_("and delivered quantity of") . " " .
$_SESSION['Items']->line_items[$line]->qty_done, 1, 0);
return false;
}
$line++;
} /*loop through all line items of the order to ensure none have been invoiced */
return true;
}
//---------------------------------------------------------------------------------------------------------------
function check_data()
{
if (!isset($_POST['DispatchDate']) || !is_date($_POST['DispatchDate']))
{
display_error(_("The entered date of delivery is invalid."));
return false;
}
if (!is_date_in_fiscalyear($_POST['DispatchDate']))
{
display_error(_("The entered date of delivery is not in fiscal year."));
return false;
}
if (!isset($_POST['due_date']) || !is_date($_POST['due_date']))
{
display_error(_("The entered dead-line for invoice is invalid."));
return false;
}
if (!references::is_valid($_POST['ref']))
{
display_error(_("You must enter a reference."));
return false;
}
if (!is_new_reference($_POST['ref'], 13))
{
display_error(_("The entered reference is already in use."));
return false;
}
if ($_POST['ChargeFreightCost'] == "")
$_POST['ChargeFreightCost'] = 0;
if (!is_numeric($_POST['ChargeFreightCost']) || $_POST['ChargeFreightCost'] < 0)
{
display_error(_("The entered shipping value is not numeric."));
return false;
}
if ($_SESSION['Items']->has_items_dispatch() == 0 && $_POST['ChargeFreightCost'] == 0)
{
display_error(_("There are no item quantities on this delivery note."));
return false;
}
return true;
}
//---------------------------------------------------------------------------------------------------------------
function check_qoh()
{
if (!sys_prefs::allow_negative_stock())
{
foreach ($_SESSION['Items']->line_items as $itm)
{
if ($itm->qty_dispatched && has_stock_holding($itm->mb_flag))
{
$qoh = get_qoh_on_date($itm->stock_id, $_POST['Location'], $_POST['DispatchDate']);
if ($itm->qty_dispatched > $qoh)
{
display_error(_("The delivery cannot be processed because there is an insufficient quantity for item:") .
" " . $itm->stock_id . " - " . $itm->item_description);
return false;
}
}
}
}
return true;
}
//---------------------------------------------------------------------------------------------------------------
function process_delivery($get_from_order=false)
{
if ($get_from_order)
{ // entry point for direct delivery - cart contains completed order;
// we should have qty_dispatched and standard cost set anyway
unset($_SESSION['Items']->line_items);
read_sales_order($_SESSION['Items']->order_no, $_SESSION['Items']);
$duedate = get_invoice_duedate($_SESSION['Items']->customer_id, $_SESSION['Items']->delivery_date);
$delivery_no = add_sales_delivery($_SESSION['Items'],
$_SESSION['Items']->delivery_date, $duedate, $_SESSION['Items']->order_no,
$_SESSION['Items']->tax_group_id, $_SESSION['Items']->freight_cost,
$_SESSION['Items']->Location, $_SESSION['Items']->ship_via,
$_SESSION['Items']->default_sales_type, references::get_next(13),
$_SESSION['Items']->memo_,0);
}
else
{
if (!check_data())
return;
if (!check_order_changed())
order_changed_error();
if (!check_qoh())
return;
if ($_POST['bo_policy'])
$bo_policy = 0;
else
$bo_policy = 1;
$delivery_no = add_sales_delivery($_SESSION['Items'],
$_POST['DispatchDate'], $_POST['due_date'], $_SESSION['ProcessingOrder'],
$_SESSION['Items']->tax_group_id,$_POST['ChargeFreightCost'], $_POST['Location'],
$_POST['ship_via'], $_POST['sales_type_id'], $_POST['ref'],
$_POST['InvoiceText'], $bo_policy);
unset($_SESSION['ProcessingOrder']);
}
meta_forward($_SERVER['PHP_SELF'], "AddedID=$delivery_no");
}
//---------------------------------------------------------------------------------------------------------------
if (isset($_GET['process_delivery']))
process_delivery(true);
elseif (isset($_POST['process_delivery']))
process_delivery();
//-------------------------------------------------------------------------------------------------
start_form(false, true);
start_table("$table_style2 width=80%", 5);
echo "