Fixed warnings related to empty item/customer/supplier selector in search modes.
[fa-stable.git] / inventory / prices.php
index 81b2e2c7f845cc3695e248f0ba39c7738a9aa889..7132eb624c7fab66153285b2cb4e8c6fd38b9445 100644 (file)
@@ -1,24 +1,41 @@
 <?php
+/**********************************************************************
+    Copyright (C) FrontAccounting, LLC.
+       Released under the terms of the GNU General Public License, GPL, 
+       as published by the Free Software Foundation, either version 3 
+       of the License, or (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
+$page_security = 'SA_SALESPRICE';
+
+if (@$_GET['page_level'] == 1)
+       $path_to_root = "../..";
+else   
+       $path_to_root = "..";
 
-$page_security = 2;
-$path_to_root="..";
 include_once($path_to_root . "/includes/session.inc");
-
-page(_("Inventory Item Sales prices"));
-
+include_once($path_to_root . "/sales/includes/sales_db.inc");
+include_once($path_to_root . "/sales/includes/db/sales_types_db.inc");
 include_once($path_to_root . "/includes/ui.inc");
 include_once($path_to_root . "/includes/data_checks.inc");
-
 include_once($path_to_root . "/inventory/includes/inventory_db.inc");
 
+$js = "";
+if ($SysPrefs->use_popup_windows && $SysPrefs->use_popup_search)
+       $js .= get_js_open_window(900, 500);
+page(_($help_context = "Inventory Item Sales prices"), false, false, "", $js);
+
 //---------------------------------------------------------------------------------------------------
 
 check_db_has_stock_items(_("There are no items defined in the system."));
 
 check_db_has_sales_types(_("There are no sales types in the system. Please set up sales types befor entering pricing."));
 
+simple_page_mode(true);
 //---------------------------------------------------------------------------------------------------
-
 $input_error = 0;
 
 if (isset($_GET['stock_id']))
@@ -36,35 +53,27 @@ if (!isset($_POST['curr_abrev']))
 }
 
 //---------------------------------------------------------------------------------------------------
-
-start_form(false, true);
+$action = $_SERVER['PHP_SELF'];
+if ($page_nested)
+       $action .= "?stock_id=".get_post('stock_id');
+start_form(false, false, $action);
 
 if (!isset($_POST['stock_id']))
        $_POST['stock_id'] = get_global_stock_item();
 
-echo "<center>" . _("Item:"). "&nbsp;";
-stock_items_list('stock_id', $_POST['stock_id'], false, true);
-echo "<hr></center>";
-
-// if stock sel has changed, clear the form
-if ($_POST['stock_id'] != get_global_stock_item())
+if (!$page_nested)
 {
-       clear_data();
+       echo "<center>" . _("Item:"). "&nbsp;";
+       echo sales_items_list('stock_id', $_POST['stock_id'], false, true, '', array('editable' => false));
+       echo "<hr></center>";
 }
-
+else
+       br(2);
 set_global_stock_item($_POST['stock_id']);
 
 //----------------------------------------------------------------------------------------------------
 
-function clear_data()
-{
-       unset($_POST['PriceID']);
-       unset($_POST['price']);
-}
-
-//----------------------------------------------------------------------------------------------------
-
-if (isset($_POST['updatePrice']))
+if ($Mode=='ADD_ITEM' || $Mode=='UPDATE_ITEM') 
 {
 
        if (!check_num('price', 0))
@@ -73,54 +82,76 @@ if (isset($_POST['updatePrice']))
                display_error( _("The price entered must be numeric."));
                set_focus('price');
        }
+       elseif ($Mode == 'ADD_ITEM' && get_stock_price_type_currency($_POST['stock_id'], $_POST['sales_type_id'], $_POST['curr_abrev']))
+       {
+       $input_error = 1;
+       display_error( _("The sales pricing for this item, sales type and currency has already been added."));
+               set_focus('supplier_id');
+       }
 
        if ($input_error != 1)
        {
 
-               if (isset($_POST['PriceID']))
+       if ($selected_id != -1) 
                {
                        //editing an existing price
-                       update_item_price($_POST['PriceID'], $_POST['sales_type_id'],
+                       update_item_price($selected_id, $_POST['sales_type_id'],
                        $_POST['curr_abrev'], input_num('price'));
 
                        $msg = _("This price has been updated.");
                }
-               elseif ($input_error !=1)
+               else
                {
 
                        add_item_price($_POST['stock_id'], $_POST['sales_type_id'],
                            $_POST['curr_abrev'], input_num('price'));
 
-                       display_note(_("The new price has been added."));
+                       $msg = _("The new price has been added.");
                }
-               clear_data();
+               display_notification($msg);
+               $Mode = 'RESET';
        }
 
 }
 
 //------------------------------------------------------------------------------------------------------
 
-if (isset($_GET['delete']))
+if ($Mode == 'Delete')
 {
-
        //the link to delete a selected record was clicked
-       delete_item_price($_GET['PriceID']);
-       echo _("The selected price has been deleted.");
+       delete_item_price($selected_id);
+       display_notification(_("The selected price has been deleted."));
+       $Mode = 'RESET';
+}
 
+if ($Mode == 'RESET')
+{
+       $selected_id = -1;
 }
 
-//---------------------------------------------------------------------------------------------------
+if (list_updated('stock_id')) {
+       $Ajax->activate('price_table');
+       $Ajax->activate('price_details');
+}
+if (list_updated('stock_id') || isset($_POST['_curr_abrev_update']) || isset($_POST['_sales_type_id_update'])) {
+       // after change of stock, currency or salestype selector
+       // display default calculated price for new settings. 
+       // If we have this price already in db it is overwritten later.
+       unset($_POST['price']);
+       $Ajax->activate('price_details');
+}
 
-$mb_flag = get_mb_flag($_POST['stock_id']);
+//---------------------------------------------------------------------------------------------------
 
 $prices_list = get_prices($_POST['stock_id']);
 
-start_table("$table_style width=30%");
+div_start('price_table');
+start_table(TABLESTYLE, "width='30%'");
 
 $th = array(_("Currency"), _("Sales Type"), _("Price"), "", "");
 table_header($th);
 $k = 0; //row colour counter
-
+$calculated = false;
 while ($myrow = db_fetch($prices_list))
 {
 
@@ -129,44 +160,55 @@ while ($myrow = db_fetch($prices_list))
        label_cell($myrow["curr_abrev"]);
     label_cell($myrow["sales_type"]);
     amount_cell($myrow["price"]);
-    edit_link_cell("PriceID=" . $myrow["id"]. "&Edit=1");
-    delete_link_cell("PriceID=" . $myrow["id"]. "&delete=yes");
+       edit_button_cell("Edit".$myrow['id'], _("Edit"));
+       delete_button_cell("Delete".$myrow['id'], _("Delete"));
     end_row();
 
 }
 end_table();
-
-//------------------------------------------------------------------------------------------------
-
 if (db_num_rows($prices_list) == 0)
 {
-       display_note(_("There are no prices set up for this part."));
+       if (get_company_pref('add_pct') != -1)
+               $calculated = true;
+       display_note(_("There are no prices set up for this part."), 1);
 }
+div_end();
+//------------------------------------------------------------------------------------------------
 
 echo "<br>";
 
-if (isset($_GET['Edit']))
+if ($Mode == 'Edit')
 {
-       $myrow = get_stock_price($_GET['PriceID']);
-       hidden('PriceID', $_GET['PriceID']);
+       $myrow = get_stock_price($selected_id);
        $_POST['curr_abrev'] = $myrow["curr_abrev"];
        $_POST['sales_type_id'] = $myrow["sales_type_id"];
        $_POST['price'] = price_format($myrow["price"]);
 }
 
-start_table($table_style2);
+hidden('selected_id', $selected_id);
 
-currencies_list_row(_("Currency:"), 'curr_abrev', null);
+div_start('price_details');
+start_table(TABLESTYLE2);
 
-sales_types_list_row(_("Sales Type:"), 'sales_type_id', null);
+currencies_list_row(_("Currency:"), 'curr_abrev', null, true);
 
-small_amount_row(_("Price:"), 'price', null);
+sales_types_list_row(_("Sales Type:"), 'sales_type_id', null, true);
 
-end_table(1);
+if (!isset($_POST['price'])) {
+       $_POST['price'] = price_format(get_kit_price(get_post('stock_id'), 
+               get_post('curr_abrev'), get_post('sales_type_id')));
+}
 
-submit_center('updatePrice', _("Add/Update Price"));
+$kit = get_item_code_dflts($_POST['stock_id']);
+$units = $kit ? $kit["units"] : '';
+small_amount_row(_("Price:"), 'price', null, '', _('per') .' '.$units);
+
+end_table(1);
+if ($calculated)
+       display_note(_("The price is calculated."), 0, 1);
 
+submit_add_or_update_center($selected_id == -1, '', 'both');
+div_end();
 
 end_form();
 end_page();
-?>