Added Purchase Delivery edition.
[fa-stable.git] / purchasing / po_receive_items.php
index fcd7348b4e9b2fd72f3fa5153db533044c48892d..2850496dca12f55cadc6c2fe25ae69ed52beeca6 100644 (file)
@@ -22,13 +22,35 @@ if ($SysPrefs->use_popup_windows)
        $js .= get_js_open_window(900, 500);
 if (user_use_date_picker())
        $js .= get_js_date_picker();
-page(_($help_context = "Receive Purchase Order Items"), false, false, "", $js);
+
+//--------------------------------------------------------------------------------------------------
+
+if (isset($_GET['PONumber']) && $_GET['PONumber'] > 0 && !isset($_POST['Update']))
+{
+       $_SESSION['page_title'] = _($help_context = "Receive Purchase Order Items");
+       create_cart(ST_PURCHORDER, $_GET['PONumber']);
+       $_SESSION['PO']->trans_type = ST_SUPPRECEIVE;
+       $_SESSION['PO']->reference = $Refs->get_next(ST_SUPPRECEIVE, 
+               array('date' => Today(), 'supplier' => $_SESSION['PO']->supplier_id));
+       foreach ($_SESSION['PO']->line_items as $line)
+               $line->quantity = $line->qty_ordered - $line->qty_received;
+       copy_from_cart();
+}
+elseif (isset($_GET['ModifyGRN']) && $_GET['ModifyGRN'] > 0 && !isset($_POST['Update']))
+{
+       $_SESSION['page_title'] = _($help_context = "Modify GRN #") . $_GET['ModifyGRN'];
+       create_cart(ST_SUPPRECEIVE, $_GET['ModifyGRN']);
+       copy_from_cart();
+}
+
+page($_SESSION['page_title'], false, false, "", $js);
 
 //---------------------------------------------------------------------------------------------------------------
 
-if (isset($_GET['AddedID']))
+if (isset($_GET['AddedID']) || isset($_GET['UpdatedID']))
 {
-       $grn = $_GET['AddedID'];
+       $new = isset($_GET['AddedID']);
+       $grn = $_GET[$new ? 'AddedID' : 'UpdatedID'];
        $trans_type = ST_SUPPRECEIVE;
 
        display_notification_centered(_("Purchase Order Delivery has been processed"));
@@ -41,16 +63,19 @@ if (isset($_GET['AddedID']))
 
        hyperlink_params("$path_to_root/purchasing/supplier_invoice.php", _("Entry purchase &invoice for this receival"), "New=1");
 
-       hyperlink_no_params("$path_to_root/purchasing/inquiry/po_search.php", _("Select a different &purchase order for receiving items against"));
+       if ($new)
+               hyperlink_no_params("$path_to_root/purchasing/inquiry/po_search.php", _("Select another &purchase order for receiving items against"));
+       else
+               hyperlink_no_params("$path_to_root/purchasing/inquiry/supplier_inquiry.php", _("Select another &document for edition"));
 
        display_footer_exit();
 }
 
 //--------------------------------------------------------------------------------------------------
 
-if ((!isset($_GET['PONumber']) || $_GET['PONumber'] == 0) && !isset($_SESSION['PO']))
+if ((!isset($_GET['PONumber']) || $_GET['PONumber'] == 0) && (!isset($_GET['ModifyGRN']) || $_GET['ModifyGRN'] == 0) && !isset($_SESSION['PO']))
 {
-       die (_("This page can only be opened if a purchase order has been selected. Please select a purchase order first."));
+       die (_("This page can only be opened with valid Purchase Order or GRN number."));
 }
 
 //--------------------------------------------------------------------------------------------------
@@ -59,47 +84,55 @@ function display_po_receive_items()
 {
        div_start('grn_items');
     start_table(TABLESTYLE, "colspan=7 width='90%'");
-    $th = array(_("Item Code"), _("Description"), _("Ordered"), _("Units"), _("Received"),
-       _("Outstanding"), _("This Delivery"), _("Price"), _("Total"));
+    $mod_grn = $_SESSION['PO']->grn_id;
+
+       if ($mod_grn) // modify GRN
+           $th = array(_("Item Code"), _("Description"), _("Ordered"), _("Units"), _("Received"), _("Invoiced"), _("This Delivery"), _("Price"), _("Total"));
+    else
+           $th = array(_("Item Code"), _("Description"), _("Ordered"), _("Units"), _("Received"), _("Outstanding"), _("This Delivery"), _("Price"), _("Total"));
     table_header($th);
 
-    /*show the line items on the order with the quantity being received for modification */
+    /* show the line items on the order with the quantity being received for modification */
 
     $total = 0;
     $k = 0; //row colour counter
 
-    if (count($_SESSION['PO']->line_items)> 0 )
+    if (count($_SESSION['PO']->line_items) > 0 )
     {
                foreach ($_SESSION['PO']->line_items as $ln_itm)
                {
 
                        alt_table_row_color($k);
 
-               $qty_outstanding = $ln_itm->quantity - $ln_itm->qty_received;
+               $qty_outstanding = $ln_itm->qty_ordered - $ln_itm->qty_received;
 
-                       if (!isset($_POST['Update']) && !isset($_POST['ProcessGoodsReceived']) && $ln_itm->receive_qty == 0)
+                       if (!isset($_POST['Update']) && !isset($_POST['ProcessGoodsReceived']) && $ln_itm->quantity == 0)
                {   //If no quantites yet input default the balance to be received
-               $ln_itm->receive_qty = $qty_outstanding;
+               $ln_itm->quantity = $qty_outstanding;
                }
 
-               $line_total = ($ln_itm->receive_qty * $ln_itm->price);
+               $line_total = ($ln_itm->quantity * $ln_itm->price);
                $total += $line_total;
 
                        label_cell($ln_itm->stock_id);
-                       if ($qty_outstanding > 0)
+                       if ($mod_grn || $qty_outstanding > 0)
                                text_cells(null, $ln_itm->stock_id . "Desc", $ln_itm->item_description, 30, 50);
                        else
                                label_cell($ln_itm->item_description);
+
                        $dec = get_qty_dec($ln_itm->stock_id);
-                       qty_cell($ln_itm->quantity, false, $dec);
+                       qty_cell($ln_itm->qty_ordered, false, $dec);
                        label_cell($ln_itm->units);
                        qty_cell($ln_itm->qty_received, false, $dec);
-                       qty_cell($qty_outstanding, false, $dec);
+                       if ($mod_grn)
+                               qty_cell($ln_itm->qty_inv, false, $dec);
+                       else
+                               qty_cell($qty_outstanding, false, $dec);
 
-                       if ($qty_outstanding > 0)
-                               qty_cells(null, $ln_itm->line_no, number_format2($ln_itm->receive_qty, $dec), "align=right", null, $dec);
+                       if ($mod_grn || $qty_outstanding > 0)
+                               qty_cells(null, $ln_itm->line_no, number_format2($ln_itm->quantity, $dec), "align=right", null, $dec);
                        else
-                               label_cell(number_format2($ln_itm->receive_qty, $dec), "align=right");
+                               label_cell(number_format2($ln_itm->quantity, $dec), "align=right");
 
                        amount_decimal_cell($ln_itm->price);
                        amount_cell($line_total);
@@ -140,13 +173,13 @@ function check_po_changed()
        {
                $ln_item = $_SESSION['PO']->line_items[$line_no];
                // only compare against items that are outstanding
-               $qty_outstanding = $ln_item->quantity - $ln_item->qty_received;
+               $qty_outstanding = $ln_item->qty_ordered - $ln_item->qty_received;
                if ($qty_outstanding > 0)
                {
                if ($ln_item->qty_inv != $myrow["qty_invoiced"] ||
                        $ln_item->stock_id != $myrow["item_code"] ||
-                       $ln_item->quantity != $myrow["quantity_ordered"] ||
-                       $ln_item->qty_received != $myrow["quantity_received"])
+                       $ln_item->qty_ordered != $myrow["quantity_ordered"] ||
+                       $ln_item->qty_received + @$ln_item->qty_old != $myrow["quantity_received"])
                {
                        return true;
                }
@@ -162,7 +195,7 @@ function check_po_changed()
 function can_process()
 {
        global $SysPrefs;
-       
+
        if (count($_SESSION['PO']->line_items) <= 0)
        {
         display_error(_("There is nothing to process. Please enter valid quantities greater than zero."));
@@ -181,7 +214,7 @@ function can_process()
                return false;
        }
 
-       if (!check_reference($_POST['ref'], ST_SUPPRECEIVE))
+       if (!check_reference($_POST['ref'], ST_SUPPRECEIVE, $_SESSION['PO']->grn_id))
        {
                set_focus('ref');
                return false;
@@ -190,7 +223,7 @@ function can_process()
        $something_received = 0;
        foreach ($_SESSION['PO']->line_items as $order_line)
        {
-               if ($order_line->receive_qty > 0)
+               if ($order_line->quantity > 0)
                {
                        $something_received = 1;
                        break;
@@ -201,8 +234,8 @@ function can_process()
     $delivery_qty_too_large = 0;
        foreach ($_SESSION['PO']->line_items as $order_line)
        {
-               if ($order_line->receive_qty+$order_line->qty_received >
-                       $order_line->quantity * (1+ ($SysPrefs->over_receive_allowance() / 100)))
+               if ($order_line->quantity+$order_line->qty_received >
+                       $order_line->qty_ordered * (1+ ($SysPrefs->over_receive_allowance() / 100)))
                {
                        $delivery_qty_too_large = 1;
                        break;
@@ -241,9 +274,14 @@ function process_receive_po()
                hyperlink_no_params("$path_to_root/purchasing/inquiry/po_search.php",
                 _("Select a different purchase order for receiving goods against"));
 
-               hyperlink_params("$path_to_root/purchasing/po_receive_items.php", 
-                        _("Re-Read the updated purchase order for receiving goods against"),
-                        "PONumber=" . $_SESSION['PO']->order_no);
+               if (!$_SESSION['PO']->grn_id)
+                       hyperlink_params("$path_to_root/purchasing/po_receive_items.php", 
+                                _("Re-Read the updated purchase order for receiving goods against"),
+                                "PONumber=" . $_SESSION['PO']->order_no);
+               else
+                       hyperlink_params("$path_to_root/purchasing/po_receive_items.php", 
+                                _("Re-Read the GRN for reedition"),
+                                "ModifyGRN=" . $_SESSION['PO']->grn_id);
 
                unset($_SESSION['PO']->line_items);
                unset($_SESSION['PO']);
@@ -258,36 +296,28 @@ function process_receive_po()
        $grn->Location = $_POST['Location'];
        $grn->ex_rate = input_num('_ex_rate', null);
 
-       $grn_no = add_grn($grn);
+       $trans_no = write_grn($grn);
+       $new = $grn->grn_id == 0;
 
        new_doc_date($_POST['DefaultReceivedDate']);
        unset($_SESSION['PO']->line_items);
        unset($_SESSION['PO']);
 
-       meta_forward($_SERVER['PHP_SELF'], "AddedID=$grn_no");
-}
-
-//--------------------------------------------------------------------------------------------------
-
-if (isset($_GET['PONumber']) && $_GET['PONumber'] > 0 && !isset($_POST['Update']))
-{
-       create_new_po(ST_PURCHORDER, $_GET['PONumber']);
-       $_SESSION['PO']->trans_type = ST_SUPPRECEIVE;
-       $_SESSION['PO']->reference = $Refs->get_next(ST_SUPPRECEIVE, 
-               array('date' => Today(), 'supplier' => $_SESSION['PO']->supplier_id));
-       copy_from_cart();
+       if ($new)
+               meta_forward($_SERVER['PHP_SELF'], "AddedID=$trans_no");
+       else
+               meta_forward($_SERVER['PHP_SELF'], "UpdatedID=$trans_no");
 }
 
 //--------------------------------------------------------------------------------------------------
 
 if (isset($_POST['Update']) || isset($_POST['ProcessGoodsReceived']))
 {
-
        /* if update quantities button is hit page has been called and ${$line->line_no} would have be
        set from the post to the quantity to be received in this receival*/
        foreach ($_SESSION['PO']->line_items as $line)
        {
-        if( ($line->quantity - $line->qty_received)>0) {
+        if( ($line->qty_ordered - $line->qty_received) > 0) {
                $_POST[$line->line_no] = max($_POST[$line->line_no], 0);
                if (!check_num($line->line_no))
                        $_POST[$line->line_no] = number_format2(0, get_qty_dec($line->stock_id));
@@ -295,7 +325,7 @@ if (isset($_POST['Update']) || isset($_POST['ProcessGoodsReceived']))
                if (!isset($_POST['DefaultReceivedDate']) || $_POST['DefaultReceivedDate'] == "")
                        $_POST['DefaultReceivedDate'] = new_doc_date();
 
-               $_SESSION['PO']->line_items[$line->line_no]->receive_qty = input_num($line->line_no);
+               $_SESSION['PO']->line_items[$line->line_no]->quantity = input_num($line->line_no);
 
                if (isset($_POST[$line->stock_id . "Desc"]) && strlen($_POST[$line->stock_id . "Desc"]) > 0)
                {