Switch to new access levels system
[fa-stable.git] / inventory / manage / items.php
index a88c97946f467cd149c03d86940ee4ad7dd66bb8..9d30127725d6b60ffa49b70d2af4ceaa768aca28 100644 (file)
@@ -9,11 +9,11 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
 ***********************************************************************/
-$page_security = 11;
-$path_to_root="../..";
+$page_security = 'SA_ITEM';
+$path_to_root = "../..";
 include($path_to_root . "/includes/session.inc");
 
-page(_("Items"));
+page(_("Items"), @$_REQUEST['popup']);
 
 include_once($path_to_root . "/includes/date_functions.inc");
 include_once($path_to_root . "/includes/ui.inc");
@@ -22,7 +22,7 @@ include_once($path_to_root . "/includes/data_checks.inc");
 include_once($path_to_root . "/inventory/includes/inventory_db.inc");
 
 $user_comp = user_company();
-$new_item = get_post('stock_id')=='' || get_post('cancel'); 
+$new_item = get_post('stock_id')=='' || get_post('cancel') || get_post('clone')
 //------------------------------------------------------------------------------------
 
 if (isset($_GET['stock_id']))
@@ -97,7 +97,6 @@ if (isset($_FILES['pic']) && $_FILES['pic']['name'] != '')
  /* EOF Add Image upload for New Item  - by Ori */
 }
 
-
 check_db_has_stock_categories(_("There are no item categories defined in the system. At least one item category is required to add a item."));
 
 check_db_has_item_tax_types(_("There are no item tax types defined in the system. At least one item tax type is required to add a item."));
@@ -113,6 +112,7 @@ function clear_data()
        unset($_POST['NewStockID']);
        unset($_POST['dimension_id']);
        unset($_POST['dimension2_id']);
+       unset($_POST['no_sale']);
 }
 
 //------------------------------------------------------------------------------------
@@ -162,16 +162,19 @@ if (isset($_POST['addupdate']))
                
                if (!$new_item) 
                { /*so its an existing one */
-
                        update_item($_POST['NewStockID'], $_POST['description'],
-                               $_POST['long_description'], $_POST['category_id'], $_POST['tax_type_id'],
-                               $_POST['sales_account'], $_POST['inventory_account'], $_POST['cogs_account'],
+                               $_POST['long_description'], $_POST['category_id'], 
+                               $_POST['tax_type_id'], get_post('units'),
+                               get_post('mb_flag'), $_POST['sales_account'],
+                               $_POST['inventory_account'], $_POST['cogs_account'],
                                $_POST['adjustment_account'], $_POST['assembly_account'], 
-                               $_POST['dimension_id'], $_POST['dimension2_id']);
+                               $_POST['dimension_id'], $_POST['dimension2_id'],
+                               check_value('no_sale'));
                        update_record_status($_POST['NewStockID'], $_POST['inactive'],
                                'stock_master', 'stock_id');
                        update_record_status($_POST['NewStockID'], $_POST['inactive'],
                                'item_codes', 'item_code');
+                       set_focus('stock_id');
                        $Ajax->activate('stock_id'); // in case of status change
                        display_notification(_("Item has been updated."));
                } 
@@ -183,69 +186,76 @@ if (isset($_POST['addupdate']))
                                $_POST['units'], $_POST['mb_flag'], $_POST['sales_account'],
                                $_POST['inventory_account'], $_POST['cogs_account'],
                                $_POST['adjustment_account'], $_POST['assembly_account'], 
-                               $_POST['dimension_id'], $_POST['dimension2_id']);
+                               $_POST['dimension_id'], $_POST['dimension2_id'],
+                               check_value('no_sale'));
 
                        display_notification(_("A new item has been added."));
-                       $_POST['stock_id'] = $_POST['NewStockID'] = '';
+                       $_POST['stock_id'] = $_POST['NewStockID'] = 
+                       $_POST['description'] = $_POST['long_description'] = '';
+                       $_POST['no_sale'] = 0;
+                       set_focus('NewStockID');
                }
-               set_focus('stock_id');
                $Ajax->activate('_page_body');
        }
 }
 
+if (get_post('clone')) {
+       unset($_POST['stock_id']);
+       unset($_POST['inactive']);
+       set_focus('NewStockID');
+       $Ajax->activate('_page_body');
+}
+
 //------------------------------------------------------------------------------------
 
-function can_delete($stock_id)
+function check_usage($stock_id, $dispmsg=true)
 {
-       $sql= "SELECT COUNT(*) FROM ".TB_PREF."stock_moves WHERE stock_id='$stock_id'";
-       $result = db_query($sql, "could not query stock moves");
-       $myrow = db_fetch_row($result);
-       if ($myrow[0] > 0) 
-{
-               display_error(_('Cannot delete this item because there are stock movements that refer to this item.'));
-               return false;
+       $sqls=  array(
+       "SELECT COUNT(*) FROM "
+               .TB_PREF."stock_moves WHERE stock_id='$stock_id'" =>
+        _('Cannot delete this item because there are stock movements that refer to this item.'),
+       "SELECT COUNT(*) FROM "
+               .TB_PREF."bom WHERE component='$stock_id'"=>
+        _('Cannot delete this item record because there are bills of material that require this part as a component.'),
+       "SELECT COUNT(*) FROM "
+               .TB_PREF."sales_order_details WHERE stk_code='$stock_id'" =>
+        _('Cannot delete this item because there are existing purchase order items for it.'),
+       "SELECT COUNT(*) FROM "
+               .TB_PREF."purch_order_details WHERE item_code='$stock_id'"=>
+        _('Cannot delete this item because there are existing purchase order items for it.')
+       );
+
+       $msg = '';
+
+       foreach($sqls as $sql=>$err) {
+               $result = db_query($sql, "could not query stock usage");
+               $myrow = db_fetch_row($result);
+               if ($myrow[0] > 0) 
+               {
+                       $msg = $err; break;
+               }
        }
 
-       $sql= "SELECT COUNT(*) FROM ".TB_PREF."bom WHERE component='$stock_id'";
-       $result = db_query($sql, "could not query boms");
-       $myrow = db_fetch_row($result);
-       if ($myrow[0] > 0) 
-       {
-               display_error(_('Cannot delete this item record because there are bills of material that require this part as a component.'));
-               return false;
-       }
+       if ($msg == '') {       
 
-       $sql= "SELECT COUNT(*) FROM ".TB_PREF."sales_order_details WHERE stk_code='$stock_id'";
-       $result = db_query($sql, "could not query sales orders");
-       $myrow = db_fetch_row($result);
-       if ($myrow[0] > 0) 
-       {
-               display_error(_('Cannot delete this item record because there are existing sales orders for this part.'));
-               return false;
-       }
+               $kits = get_where_used($stock_id);
+               $num_kits = db_num_rows($kits);
+               if ($num_kits) {
+                       $msg = _("This item cannot be deleted because some code aliases 
+                               or foreign codes was entered for it, or there are kits defined 
+                               using this item as component")
+                               .':<br>';
+
+                       while($num_kits--) {
+                               $kit = db_fetch($kits);
+                               $msg .= "'".$kit[0]."'";
+                               if ($num_kits) $msg .= ',';
+                       }
 
-       $sql= "SELECT COUNT(*) FROM ".TB_PREF."purch_order_details WHERE item_code='$stock_id'";
-       $result = db_query($sql, "could not query purchase orders");
-       $myrow = db_fetch_row($result);
-       if ($myrow[0] > 0) 
-       {
-               display_error(_('Cannot delete this item because there are existing purchase order items for it.'));
-               return false;
-       }
-       $kits = get_where_used($stock_id);
-       $num_kits = db_num_rows($kits);
-       if ($num_kits) {
-               $msg = _("This item cannot be deleted because some code aliases 
-                       or foreign codes was entered for it, or there are kits defined 
-                       using this item as component")
-                       .':<br>';
-
-               while($num_kits--) {
-                       $kit = db_fetch($kits);
-                       $msg .= "'".$kit[0]."'";
-                       if ($num_kits) $msg .= ',';
                }
-               display_error($msg);
+       }
+       if ($msg != '') {
+               if($dispmsg) display_error($msg);
                return false;
        }
        return true;
@@ -256,7 +266,7 @@ function can_delete($stock_id)
 if (isset($_POST['delete']) && strlen($_POST['delete']) > 1) 
 {
 
-       if (can_delete($_POST['NewStockID'])) {
+       if (check_usage($_POST['NewStockID'])) {
 
                $stock_id = $_POST['NewStockID'];
                delete_item($stock_id);
@@ -273,14 +283,6 @@ if (isset($_POST['delete']) && strlen($_POST['delete']) > 1)
 }
 //-------------------------------------------------------------------------------------------- 
 
-if (isset($_POST['select']))
-{
-       context_return(array('stock_id' => $_POST['stock_id']));
-}
-
-
-//------------------------------------------------------------------------------------
-
 start_form(true);
 
 if (db_has_stock_items()) 
@@ -289,7 +291,7 @@ if (db_has_stock_items())
        start_row();
     stock_items_list_cells(_("Select an item:"), 'stock_id', null,
          _('New item'), true, check_value('show_inactive'));
-       $new_item = get_post('stock_id')==''; 
+       $new_item = get_post('stock_id')=='';
        check_cells(_("Show inactive:"), 'show_inactive', null, true);
        end_row();
        end_table();
@@ -308,10 +310,10 @@ table_section(1);
 table_section_title(_("Item"));
 
 //------------------------------------------------------------------------------------
-
 if ($new_item) 
 {
        text_row(_("Item Code:"), 'NewStockID', null, 21, 20);
+
        $_POST['inactive'] = 0;
 } 
 else 
@@ -334,6 +336,7 @@ else
                $_POST['assembly_account']      = $myrow['assembly_account'];
                $_POST['dimension_id']  = $myrow['dimension_id'];
                $_POST['dimension2_id'] = $myrow['dimension2_id'];
+               $_POST['no_sale']       = $myrow['no_sale'];
                $_POST['del_image'] = 0;        
                $_POST['inactive'] = $myrow["inactive"];
                label_row(_("Item Code:"),$_POST['NewStockID']);
@@ -361,15 +364,16 @@ if ($new_item && (list_updated('category_id') || !isset($_POST['units']))) {
        $_POST['assembly_account'] = $category_record["dflt_assembly_act"];
        $_POST['dimension_id'] = $category_record["dflt_dim1"];
        $_POST['dimension2_id'] = $category_record["dflt_dim2"];
+       $_POST['no_sale'] = $category_record["dflt_no_sale"];
 }
+$fresh_item = !isset($_POST['NewStockID']) || $new_item 
+       || check_usage($_POST['stock_id'],false);
 
 item_tax_types_list_row(_("Item Tax Type:"), 'tax_type_id', null);
 
-stock_item_types_list_row(_("Item Type:"), 'mb_flag', null,
-       (!isset($_POST['NewStockID']) || $new_item));
+stock_item_types_list_row(_("Item Type:"), 'mb_flag', null, $fresh_item);
 
-stock_units_list_row(_('Units of Measure:'), 'units', null,
-       (!isset($_POST['NewStockID']) || $new_item));
+stock_units_list_row(_('Units of Measure:'), 'units', null, $fresh_item);
 
 $dim = get_company_pref('use_dimension');
 if ($dim >= 1)
@@ -391,15 +395,15 @@ table_section_title(_("GL Accounts"));
 
 gl_all_accounts_list_row(_("Sales Account:"), 'sales_account', $_POST['sales_account']);
 
-gl_all_accounts_list_row(_("Inventory Account:"), 'inventory_account', $_POST['inventory_account']);
-
 if (!is_service($_POST['mb_flag'])) 
 {
+       gl_all_accounts_list_row(_("Inventory Account:"), 'inventory_account', $_POST['inventory_account']);
        gl_all_accounts_list_row(_("C.O.G.S. Account:"), 'cogs_account', $_POST['cogs_account']);
        gl_all_accounts_list_row(_("Inventory Adjustments Account:"), 'adjustment_account', $_POST['adjustment_account']);
 }
 else 
 {
+       gl_all_accounts_list_row(_("C.O.G.S. Account:"), 'inventory_account', $_POST['inventory_account']);
        hidden('cogs_account', $_POST['cogs_account']);
        hidden('adjustment_account', $_POST['adjustment_account']);
 }
@@ -410,7 +414,7 @@ if (is_manufactured($_POST['mb_flag']))
 else
        hidden('assembly_account', $_POST['assembly_account']);
 
-table_section_title(_("Picture"));
+table_section_title(_("Other"));
 
 // Add image upload for New Item  - by Joe
 label_row(_("Image File (.jpg)") . ":", "<input type='file' id='pic' name='pic'>");
@@ -433,8 +437,10 @@ else
 
 label_row("&nbsp;", $stock_img_link);
 if ($check_remove_image)
-       check_row(_("Delete Image:"), 'del_image', $_POST['del_image']);
+       check_row(_("Delete Image:"), 'del_image');
        
+check_row(_("Exclude from sales:"), 'no_sale');
+
 record_status_list_row(_("Item status:"), 'inactive');
 end_outer_table(1);
 div_end();
@@ -446,13 +452,16 @@ if (!isset($_POST['NewStockID']) || $new_item)
 else 
 {
        submit_center_first('addupdate', _("Update Item"), '', 
-       count($_SESSION['Context']) ? true : 'default');
-       submit_return('select', _("Return"), _("Select this items and return to document entry."), 'default');
+               @$_REQUEST['popup'] ? true : 'default');
+       submit_return('select', get_post('stock_id'), 
+               _("Select this items and return to document entry."), 'default');
+       submit('clone', _("Clone This Item"), true, '', true);
        submit('delete', _("Delete This Item"), true, '', true);
        submit_center_last('cancel', _("Cancel"), _("Cancel Edition"), 'cancel');
 }
 
 div_end();
+hidden('popup', @$_REQUEST['popup']);
 end_form();
 
 //------------------------------------------------------------------------------------