Cleanup: removed all closing tags in php files.
[fa-stable.git] / purchasing / po_entry_items.php
index a394281ce16a1db6abef0adc7d1082659aa72ccc..77ace907d6a88297a3cfe93f876906086b18ae2b 100644 (file)
@@ -9,28 +9,60 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
 ***********************************************************************/
-$page_security = 4;
-$path_to_root="..";
+$path_to_root = "..";
+$page_security = 'SA_PURCHASEORDER';
 include_once($path_to_root . "/purchasing/includes/po_class.inc");
 include_once($path_to_root . "/includes/session.inc");
 include_once($path_to_root . "/purchasing/includes/purchasing_ui.inc");
+include_once($path_to_root . "/purchasing/includes/db/suppliers_db.inc");
 include_once($path_to_root . "/reporting/includes/reporting.inc");
 
+set_page_security( @$_SESSION['PO']->trans_type,
+       array(  ST_PURCHORDER => 'SA_PURCHASEORDER',
+                       ST_SUPPRECEIVE => 'SA_GRN',
+                       ST_SUPPINVOICE => 'SA_SUPPLIERINVOICE'),
+       array(  'NewOrder' => 'SA_PURCHASEORDER',
+                       'ModifyOrderNumber' => 'SA_PURCHASEORDER',
+                       'AddedID' => 'SA_PURCHASEORDER',
+                       'NewGRN' => 'SA_GRN',
+                       'AddedGRN' => 'SA_GRN',
+                       'NewInvoice' => 'SA_SUPPLIERINVOICE',
+                       'AddedPI' => 'SA_SUPPLIERINVOICE')
+);
+
 $js = '';
 if ($use_popup_windows)
        $js .= get_js_open_window(900, 500);
-if ($use_date_picker)
+if (user_use_date_picker())
        $js .= get_js_date_picker();
 
-if (isset($_GET['ModifyOrderNumber'])) 
-{
-       page(_("Modify Purchase Order #") . $_GET['ModifyOrderNumber'], false, false, "", $js);
-} 
-else 
-{
-       page(_("Purchase Order Entry"), false, false, "", $js);
+if (isset($_GET['ModifyOrderNumber']) && is_numeric($_GET['ModifyOrderNumber'])) {
+
+       $_SESSION['page_title'] = _($help_context = "Modify Purchase Order #") . $_GET['ModifyOrderNumber'];
+       create_new_po(ST_PURCHORDER, $_GET['ModifyOrderNumber']);
+       copy_from_cart();
+} elseif (isset($_GET['NewOrder'])) {
+
+       $_SESSION['page_title'] = _($help_context = "Purchase Order Entry");
+       create_new_po(ST_PURCHORDER, 0);
+       copy_from_cart();
+} elseif (isset($_GET['NewGRN'])) {
+
+       $_SESSION['page_title'] = _($help_context = "Direct GRN Entry");
+       create_new_po(ST_SUPPRECEIVE, 0);
+       copy_from_cart();
+} elseif (isset($_GET['NewInvoice'])) {
+
+       $_SESSION['page_title'] = _($help_context = "Direct Purchase Invoice Entry");
+       create_new_po(ST_SUPPINVOICE, 0);
+       copy_from_cart();
 }
 
+page($_SESSION['page_title'], false, false, "", $js);
+
+if (isset($_GET['ModifyOrderNumber']))
+       check_is_editable(ST_PURCHORDER, $_GET['ModifyOrderNumber']);
+
 //---------------------------------------------------------------------------------------------------
 
 check_db_has_suppliers(_("There are no suppliers defined in the system."));
@@ -38,39 +70,21 @@ check_db_has_suppliers(_("There are no suppliers defined in the system."));
 check_db_has_purchasable_items(_("There are no purchasable inventory items defined in the system."));
 
 //---------------------------------------------------------------------------------------------------------------
-if ($ret = context_restore()) {
- // return from supplier/items editors
-       copy_from_cart();
-       if(isset($ret['supplier_id']))
-               $_POST['supplier_id'] = $ret['supplier_id'];
-       if(isset($ret['stock_id'])) {
-               $_POST['stock_id'] = $_POST['_stock_id_edit'] = $ret['stock_id'];
-               set_focus('qty');
-       }
-}
-if (isset($_POST['_supplier_id_editor'])) {
-       copy_to_cart();
-       context_call($path_to_root.'/purchasing/manage/suppliers.php?supplier_id='.$_POST['supplier_id'], 'PO');
-}
-
-if (isset($_POST['_stock_id_editor'])) {
-       copy_to_cart();
-       context_call($path_to_root.'/inventory/manage/items.php?stock_id='.$_POST['stock_id'], 'PO');
-}
-//------------------------------------------------------------------------------
 
 if (isset($_GET['AddedID'])) 
 {
        $order_no = $_GET['AddedID'];
-       $trans_type = systypes::po();   
+       $trans_type = ST_PURCHORDER;    
 
        if (!isset($_GET['Updated']))
                display_notification_centered(_("Purchase Order has been entered"));
        else
                display_notification_centered(_("Purchase Order has been updated") . " #$order_no");
-       display_note(get_trans_view_str($trans_type, $order_no, _("&View this order")));
-       echo '<br>';
-       display_note(print_document_link($order_no, _("&Print This Order"), true, $trans_type));
+       display_note(get_trans_view_str($trans_type, $order_no, _("&View this order")), 0, 1);
+
+       display_note(print_document_link($order_no, _("&Print This Order"), true, $trans_type), 0, 1);
+
+       display_note(print_document_link($order_no, _("&Email This Order"), true, $trans_type, false, "printlink", "", 1));
 
        hyperlink_params($path_to_root . "/purchasing/po_receive_items.php", _("&Receive Items on this Purchase Order"), "PONumber=$order_no");
 
@@ -79,29 +93,52 @@ if (isset($_GET['AddedID']))
        hyperlink_no_params($path_to_root."/purchasing/inquiry/po_search.php", _("Select An &Outstanding Purchase Order"));
        
        display_footer_exit();  
-}
-//--------------------------------------------------------------------------------------------------
 
-function copy_from_cart()
-{
-       $_POST['supplier_id'] = $_SESSION['PO']->supplier_id;   
-       $_POST['OrderDate'] = $_SESSION['PO']->orig_order_date; 
-    $_POST['Requisition'] = $_SESSION['PO']->requisition_no;
-    $_POST['ref'] = $_SESSION['PO']->reference;
-       $_POST['Comments'] = $_SESSION['PO']->Comments;
-    $_POST['StkLocation'] = $_SESSION['PO']->Location;
-    $_POST['delivery_address'] = $_SESSION['PO']->delivery_address;    
-}
+} elseif (isset($_GET['AddedGRN'])) {
 
-function copy_to_cart()
-{
-       $_SESSION['PO']->supplier_id = $_POST['supplier_id'];   
-       $_SESSION['PO']->orig_order_date = $_POST['OrderDate'];
-       $_SESSION['PO']->reference = $_POST['ref'];
-       $_SESSION['PO']->requisition_no = $_POST['Requisition'];
-       $_SESSION['PO']->Comments = $_POST['Comments']; 
-       $_SESSION['PO']->Location = $_POST['StkLocation'];
-       $_SESSION['PO']->delivery_address = $_POST['delivery_address'];
+       $trans_no = $_GET['AddedGRN'];
+       $trans_type = ST_SUPPRECEIVE;
+
+       display_notification_centered(_("Direct GRN has been entered"));
+
+       display_note(get_trans_view_str($trans_type, $trans_no, _("&View this GRN")), 0);
+
+    $clearing_act = get_company_pref('grn_clearing_act');
+       if ($clearing_act)      
+               display_note(get_gl_view_str($trans_type, $trans_no, _("View the GL Journal Entries for this Delivery")), 1);
+// not yet
+//     display_note(print_document_link($trans_no, _("&Print This GRN"), true, $trans_type), 0, 1);
+
+       hyperlink_params("$path_to_root/purchasing/supplier_invoice.php",
+               _("Entry purchase &invoice for this receival"), "New=1");
+
+       hyperlink_params("$path_to_root/admin/attachments.php", _("Add an Attachment"), 
+               "filterType=$trans_type&trans_no=$trans_no");
+
+       hyperlink_params($_SERVER['PHP_SELF'], _("Enter &Another GRN"), "NewGRN=Yes");
+       
+       display_footer_exit();  
+
+} elseif (isset($_GET['AddedPI'])) {
+
+       $trans_no = $_GET['AddedPI'];
+       $trans_type = ST_SUPPINVOICE;
+
+       display_notification_centered(_("Direct Purchase Invoice has been entered"));
+
+       display_note(get_trans_view_str($trans_type, $trans_no, _("&View this Invoice")), 0);
+
+// not yet
+//     display_note(print_document_link($trans_no, _("&Print This Invoice"), true, $trans_type), 0, 1);
+
+       display_note(get_gl_view_str($trans_type, $trans_no, _("View the GL Journal Entries for this Invoice")), 1);
+
+       hyperlink_params("$path_to_root/admin/attachments.php", _("Add an Attachment"), 
+               "filterType=$trans_type&trans_no=$trans_no");
+
+       hyperlink_params($_SERVER['PHP_SELF'], _("Enter &Another Direct Invoice"), "NewInvoice=Yes");
+       
+       display_footer_exit();  
 }
 //--------------------------------------------------------------------------------------------------
 
@@ -154,12 +191,15 @@ function handle_cancel_po()
        if($_SESSION['PO']->order_no != 0)
        {
                delete_po($_SESSION['PO']->order_no);
-       }       
+       } else {
+               unset($_SESSION['PO']);
+               meta_forward($path_to_root.'/index.php','application=AP');
+       }
 
        $_SESSION['PO']->clear_items();
        $_SESSION['PO'] = new purch_order;
 
-       display_note(_("This purchase order has been cancelled."), 0, 1);
+       display_notification(_("This purchase order has been cancelled."));
 
        hyperlink_params($path_to_root . "/purchasing/po_entry_items.php", _("Enter a new purchase order"), "NewOrder=Yes");
        echo "<br>";
@@ -172,9 +212,18 @@ function handle_cancel_po()
 
 function check_data()
 {
-    if (!check_num('qty',0))
+       if(!get_post('stock_id_text', true)) {
+               display_error( _("Item description cannot be empty."));
+               set_focus('stock_id_edit');
+               return false;
+       }
+
+       $dec = get_qty_dec($_POST['stock_id']);
+       $min = 1 / pow(10, $dec);
+    if (!check_num('qty',$min))
     {
-               display_error(_("The quantity of the order item must be numeric and not less than zero."));
+       $min = number_format2($min, $dec);
+               display_error(_("The quantity of the order item must be numeric and not less than ").$min);
                set_focus('qty');
                return false;
     }
@@ -185,7 +234,7 @@ function check_data()
                set_focus('price');
                return false;      
     }
-    if (!is_date($_POST['req_del_date'])){
+    if ($_SESSION['PO']->trans_type == ST_PURCHORDER && !is_date($_POST['req_del_date'])){
                display_error(_("The date entered is in an invalid format."));
                set_focus('req_del_date');
                return false;            
@@ -200,19 +249,21 @@ function handle_update_item()
 {
        $allow_update = check_data(); 
 
-       if ($allow_update && 
-               ($_SESSION['PO']->line_items[$_POST['line_no']]->qty_inv > input_num('qty') ||
-               $_SESSION['PO']->line_items[$_POST['line_no']]->qty_received > input_num('qty')))
+       if ($allow_update)
        {
-               display_error(_("You are attempting to make the quantity ordered a quantity less than has already been invoiced or received.  This is prohibited.") .
-                       "<br>" . _("The quantity received can only be modified by entering a negative receipt and the quantity invoiced can only be reduced by entering a credit note against this item."));
-               set_focus('qty');
-               return;
-       }
+               if ($_SESSION['PO']->line_items[$_POST['line_no']]->qty_inv > input_num('qty') ||
+                       $_SESSION['PO']->line_items[$_POST['line_no']]->qty_received > input_num('qty'))
+               {
+                       display_error(_("You are attempting to make the quantity ordered a quantity less than has already been invoiced or received.  This is prohibited.") .
+                               "<br>" . _("The quantity received can only be modified by entering a negative receipt and the quantity invoiced can only be reduced by entering a credit note against this item."));
+                       set_focus('qty');
+                       return;
+               }
        
-       $_SESSION['PO']->update_order_item($_POST['line_no'], input_num('qty'), input_num('price'),
-               $_POST['req_del_date']);
-       unset_form_variables();
+               $_SESSION['PO']->update_order_item($_POST['line_no'], input_num('qty'), input_num('price'),
+                       @$_POST['req_del_date'], $_POST['item_description'] );
+               unset_form_variables();
+       }       
     line_start_focus();
 }
 
@@ -228,36 +279,31 @@ function handle_add_new_item()
                {
                    foreach ($_SESSION['PO']->line_items as $order_item) 
                    {
-
                        /* do a loop round the items on the order to see that the item
                        is not already on this order */
-                           if (($order_item->stock_id == $_POST['stock_id']) && 
-                               ($order_item->Deleted == false)) 
+                           if (($order_item->stock_id == $_POST['stock_id'])) 
                            {
-                                       $allow_update = false;
-                                       display_error(_("The selected item is already on this order."));
+                                       display_warning(_("The selected item is already on this order."));
                            }
                    } /* end of the foreach loop to look for pre-existing items of the same code */
                }
 
                if ($allow_update == true)
                {
-                       $sql = "SELECT description, units, mb_flag
-                               FROM ".TB_PREF."stock_master WHERE stock_id = '". $_POST['stock_id'] . "'";
+                       $result = get_short_info($_POST['stock_id']);
 
-                   $result = db_query($sql,"The stock details for " . $_POST['stock_id'] . " could not be retrieved");
-
-                   if (db_num_rows($result) == 0)
-                   {
+                       if (db_num_rows($result) == 0)
+                       {
                                $allow_update = false;
-                   }               
+                       }
 
                        if ($allow_update)
-                       {
+                       {
                                $myrow = db_fetch($result);
-                               $_SESSION['PO']->add_to_order ($_POST['line_no'], $_POST['stock_id'], input_num('qty'), 
-                                       $myrow["description"], input_num('price'), $myrow["units"],
-                                       $_POST['req_del_date'], 0, 0);
+                               $_SESSION['PO']->add_to_order (count($_SESSION['PO']->line_items), $_POST['stock_id'], input_num('qty'), 
+                                       get_post('stock_id_text'), //$myrow["description"], 
+                                       input_num('price'), '', // $myrow["units"], (retrived in cart)
+                                       $_SESSION['PO']->trans_type == ST_PURCHORDER ? $_POST['req_del_date'] : '', 0, 0);
 
                                unset_form_variables();
                                $_POST['stock_id']      = "";
@@ -276,84 +322,119 @@ function handle_add_new_item()
 
 function can_commit()
 {
+       global $Refs;
+
+       if (!get_post('supplier_id')) 
+       {
+               display_error(_("There is no supplier selected."));
+               set_focus('supplier_id');
+               return false;
+       } 
+
        if (!is_date($_POST['OrderDate'])) 
        {
                display_error(_("The entered order date is invalid."));
                set_focus('OrderDate');
                return false;
        } 
-       
+       if (($_SESSION['PO']->trans_type == ST_SUPPRECEIVE || $_SESSION['PO']->trans_type == ST_SUPPINVOICE) 
+               && !is_date_in_fiscalyear($_POST['OrderDate'])) {
+               display_error(_("The entered date is out of fiscal year or is closed for further data entry."));
+               set_focus('OrderDate');
+               return false;
+       }
+
+       if (($_SESSION['PO']->trans_type==ST_SUPPINVOICE) && !is_date($_POST['due_date'])) 
+       {
+               display_error(_("The entered due date is invalid."));
+               set_focus('due_date');
+               return false;
+       } 
+
        if (!$_SESSION['PO']->order_no) 
        {
-       if (!references::is_valid(get_post('ref'))) 
+       if (!$Refs->is_valid(get_post('ref'))) 
        {
                display_error(_("There is no reference entered for this purchase order."));
                        set_focus('ref');
                return false;
        } 
-       
-       if (!is_new_reference(get_post('ref'), systypes::po())) 
+
+       if (!is_new_reference(get_post('ref'), $_SESSION['PO']->trans_type)) 
        {
                display_error(_("The entered reference is already in use."));
                        set_focus('ref');
                return false;
        }
        }
-       
-       if (get_post('delivery_address') == '')
+
+       if ($_SESSION['PO']->trans_type == ST_SUPPINVOICE && !$Refs->is_valid(get_post('supp_ref'))) 
+       {
+               display_error(_("You must enter a supplier's invoice reference."));
+               set_focus('supp_ref');
+               return false;
+       }
+       if ($_SESSION['PO']->trans_type==ST_SUPPINVOICE 
+               && is_reference_already_there($_SESSION['PO']->supplier_id, get_post('supp_ref'), $_SESSION['PO']->order_no))
+       {
+               display_error(_("This invoice number has already been entered. It cannot be entered again.") . " (" . get_post('supp_ref') . ")");
+               set_focus('supp_ref');
+               return false;
+       }
+       if ($_SESSION['PO']->trans_type == ST_PURCHORDER && get_post('delivery_address') == '')
        {
                display_error(_("There is no delivery address specified."));
                set_focus('delivery_address');
                return false;
        } 
-       
        if (get_post('StkLocation') == '')
        {
                display_error(_("There is no location specified to move any items into."));
                set_focus('StkLocation');
                return false;
        } 
-       
+       if (!db_has_currency_rates($_SESSION['PO']->curr_code, $_POST['OrderDate']))
+               return false;
        if ($_SESSION['PO']->order_has_items() == false)
        {
        display_error (_("The order cannot be placed because there are no lines entered on this order."));
        return false;
        }
-               
+       if (floatcmp(input_num('prep_amount'), $_SESSION['PO']->get_trans_total()) > 0)
+       {
+               display_error(_("Required prepayment is greater than total invoice value."));
+               set_focus('prep_amount');
+               return false;
+       }
+
        return true;
 }
 
-//---------------------------------------------------------------------------------------------------
-
 function handle_commit_order()
 {
+       $cart = &$_SESSION['PO'];
 
-       if (can_commit())
-       {
-               copy_to_cart();
-
-               if ($_SESSION['PO']->order_no == 0)
-               { 
-                       
-                       /*its a new order to be inserted */
-                       $order_no = add_po($_SESSION['PO']);
-                        
-                       unset($_SESSION['PO']);
-                        
-               meta_forward($_SERVER['PHP_SELF'], "AddedID=$order_no");        
+       if (can_commit()) {
 
-               } 
-               else 
-               { 
-
-                       /*its an existing order need to update the old order info */
-                       $order_no = update_po($_SESSION['PO']);
-                       
+               copy_to_cart();
+               new_doc_date($cart->orig_order_date);
+               if ($cart->order_no == 0) { // new po/grn/invoice
+                       $trans_no = add_direct_supp_trans($cart);
+                       if ($trans_no) {
+                               unset($_SESSION['PO']);
+                               if ($cart->trans_type == ST_PURCHORDER)
+                                       meta_forward($_SERVER['PHP_SELF'], "AddedID=$trans_no");
+                               elseif ($cart->trans_type == ST_SUPPRECEIVE)
+                                       meta_forward($_SERVER['PHP_SELF'], "AddedGRN=$trans_no");
+                               else
+                                       meta_forward($_SERVER['PHP_SELF'], "AddedPI=$trans_no");
+                       }
+               } else { // order modification
+                       $order_no = update_po($cart);
                        unset($_SESSION['PO']);
-                       
                meta_forward($_SERVER['PHP_SELF'], "AddedID=$order_no&Updated=1");      
                }
-       }       
+       }
 }
 //---------------------------------------------------------------------------------------------------
 $id = find_submit('Delete');
@@ -376,25 +457,10 @@ if (isset($_POST['CancelOrder']))
 if (isset($_POST['CancelUpdate']))
        unset_form_variables();
 
-if (isset($_GET['ModifyOrderNumber']) && $_GET['ModifyOrderNumber'] != "")
-{
-       create_new_po();
-       
-       $_SESSION['PO']->order_no = $_GET['ModifyOrderNumber']; 
-
-       /*read in all the selected order into the Items cart  */
-       read_po($_SESSION['PO']->order_no, $_SESSION['PO']);
-
-       copy_from_cart();
-}
-
 if (isset($_POST['CancelUpdate']) || isset($_POST['UpdateLine'])) {
        line_start_focus();
 }
 
-if (isset($_GET['NewOrder']))
-       create_new_po();
-
 //---------------------------------------------------------------------------------------------------
 
 start_form();
@@ -404,25 +470,48 @@ echo "<br>";
 
 display_po_items($_SESSION['PO']);
 
-start_table($table_style2);
+start_table(TABLESTYLE2);
+
+if (list_updated('tax_algorithm')) {
+       $_SESSION['PO']->tax_algorithm = $_POST['tax_algorithm'];
+    $Ajax->activate('items_table');
+}
+
+if ($_SESSION['PO']->trans_type == ST_SUPPINVOICE) {
+       tax_algorithm_list_row(_("Tax algorithm:"), 'tax_algorithm', null, true);
+       cash_accounts_list_row(_("Payment:"), 'cash_account', null, false, _('Delayed'));
+}
+
 textarea_row(_("Memo:"), 'Comments', null, 70, 4);
 
 end_table(1);
 
 div_start('controls', 'items_table');
+$process_txt = _("Place Order");
+$update_txt = _("Update Order");
+$cancel_txt = _("Cancel Order");
+if ($_SESSION['PO']->trans_type == ST_SUPPRECEIVE) {
+       $process_txt = _("Process GRN");
+       $update_txt = _("Update GRN");
+       $cancel_txt = _("Cancel GRN");
+}      
+elseif ($_SESSION['PO']->trans_type == ST_SUPPINVOICE) {
+       $process_txt = _("Process Invoice");
+       $update_txt = _("Update Invoice");
+       $cancel_txt = _("Cancel Invoice");
+}      
 if ($_SESSION['PO']->order_has_items()) 
 {
        if ($_SESSION['PO']->order_no)
-               submit_center_first('Commit', _("Update Order"), '', true);
+               submit_center_first('Commit', $update_txt, '', 'default');
        else
-               submit_center_first('Commit', _("Place Order"), '', true);
-       submit_center_last('CancelOrder', _("Cancel Order"));   
+               submit_center_first('Commit', $process_txt, '', 'default');
+       submit_center_last('CancelOrder', $cancel_txt);         
 }
 else
-       submit_center('CancelOrder', _("Cancel Order"));        
+       submit_center('CancelOrder', $cancel_txt, true, false, 'cancel');
 div_end();
 //---------------------------------------------------------------------------------------------------
 
 end_form();
 end_page();
-?>