2 /**********************************************************************
3 Copyright (C) FrontAccounting, LLC.
4 Released under the terms of the GNU General Public License, GPL,
5 as published by the Free Software Foundation, either version 3
6 of the License, or (at your option) any later version.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
11 ***********************************************************************/
12 $page_security = 'SA_SALESKIT';
13 $path_to_root = "../..";
14 include_once($path_to_root . "/includes/session.inc");
16 page(_($help_context = "Sales Kits & Alias Codes"));
18 include_once($path_to_root . "/includes/date_functions.inc");
19 include_once($path_to_root . "/includes/ui.inc");
20 include_once($path_to_root . "/includes/data_checks.inc");
22 include_once($path_to_root . "/includes/manufacturing.inc");
24 check_db_has_stock_items(_("There are no items defined in the system."));
26 simple_page_mode(true);
28 if (isset($_GET['item_code']))
30 $_POST['item_code'] = $_GET['item_code'];
31 $selected_kit = $_GET['item_code'];
34 //--------------------------------------------------------------------------------------------------
35 function display_kit_items($selected_kit)
39 $result = get_item_kit($selected_kit);
41 start_table("$table_style width=60%");
42 $th = array(_("Stock Item"), _("Description"), _("Quantity"), _("Units"),
47 while ($myrow = db_fetch($result))
50 alt_table_row_color($k);
52 label_cell($myrow["stock_id"]);
53 label_cell($myrow["comp_name"]);
54 qty_cell($myrow["quantity"], false,
55 $myrow["units"] == '' ? 0 : get_qty_dec($myrow["comp_name"]));
56 label_cell($myrow["units"] == '' ? _('kit') : $myrow["units"]);
57 edit_button_cell("Edit".$myrow['id'], _("Edit"));
58 delete_button_cell("Delete".$myrow['id'], _("Delete"));
61 } //END WHILE LIST LOOP
66 //--------------------------------------------------------------------------------------------------
68 function update_component($kit_code, $selected_item)
70 global $Mode, $Ajax, $selected_kit;
72 if (!check_num('quantity', 0))
74 display_error(_("The quantity entered must be numeric and greater than zero."));
75 set_focus('quantity');
78 elseif ($_POST['description'] == '')
80 display_error( _("Item code description cannot be empty."));
81 set_focus('description');
84 elseif ($selected_item == -1) // adding new item or new alias/kit
86 if (get_post('item_code') == '') { // New kit/alias definition
87 $kit = get_item_kit($_POST['kit_code']);
88 if (db_num_rows($kit)) {
90 display_error( _("This item code is already assigned to stock item or sale kit."));
91 set_focus('kit_code');
94 if (get_post('kit_code') == '') {
95 display_error( _("Kit/alias code cannot be empty."));
96 set_focus('kit_code');
102 if (check_item_in_kit($selected_item, $kit_code, $_POST['component'], true)) {
103 display_error(_("The selected component contains directly or on any lower level the kit under edition. Recursive kits are not allowed."));
104 set_focus('component');
108 /*Now check to see that the component is not already in the kit */
109 if (check_item_in_kit($selected_item, $kit_code, $_POST['component'])) {
110 display_error(_("The selected component is already in this kit. You can modify it's quantity but it cannot appear more than once in the same kit."));
111 set_focus('component');
114 if ($selected_item == -1) { // new item alias/kit
115 if ($_POST['item_code']=='') {
116 $kit_code = $_POST['kit_code'];
117 $selected_kit = $_POST['item_code'] = $kit_code;
118 $msg = _("New alias code has been created.");
121 $msg =_("New component has been added to selected kit.");
123 add_item_code( $kit_code, get_post('component'), get_post('description'),
124 get_post('category'), input_num('quantity'), 0);
125 display_notification($msg);
128 $props = get_kit_props($_POST['item_code']);
129 update_item_code($selected_item, $kit_code, get_post('component'),
130 $props['description'], $props['category_id'], input_num('quantity'), 0);
131 display_notification(_("Component of selected kit has been updated."));
134 $Ajax->activate('_page_body');
137 //--------------------------------------------------------------------------------------------------
139 if (get_post('update_name')) {
140 update_kit_props(get_post('item_code'), get_post('description'), get_post('category'));
141 display_notification(_('Kit common properties has been updated'));
142 $Ajax->activate('_page_body');
145 if ($Mode=='ADD_ITEM' || $Mode=='UPDATE_ITEM')
146 update_component($_POST['item_code'], $selected_id);
148 if ($Mode == 'Delete')
150 // Before removing last component from selected kit check
151 // if selected kit is not included in any other kit.
153 $other_kits = get_where_used($_POST['item_code']);
154 $num_kits = db_num_rows($other_kits);
156 $kit = get_item_kit($_POST['item_code']);
157 if ((db_num_rows($kit) == 1) && $num_kits) {
159 $msg = _("This item cannot be deleted because it is the last item in the kit used by following kits")
163 $kit = db_fetch($other_kits);
164 $msg .= "'".$kit[0]."'";
165 if ($num_kits) $msg .= ',';
169 delete_item_code($selected_id);
170 display_notification(_("The component item has been deleted from this bom"));
175 if ($Mode == 'RESET')
178 unset($_POST['quantity']);
179 unset($_POST['component']);
181 //--------------------------------------------------------------------------------------------------
185 echo "<center>" . _("Select a sale kit:") . " ";
186 echo sales_kits_list('item_code', null, _('New kit'), true);
187 echo "</center><br>";
188 $props = get_kit_props($_POST['item_code']);
190 if (list_updated('item_code')) {
191 if (get_post('item_code') == '')
192 $_POST['description'] = '';
193 $Ajax->activate('_page_body');
196 $selected_kit = $_POST['item_code'];
197 //----------------------------------------------------------------------------------
198 if (get_post('item_code') == '') {
199 // New sales kit entry
200 start_table($table_style2);
201 text_row(_("Alias/kit code:"), 'kit_code', null, 20, 21);
204 // Kit selected so display bom or edit component
205 $_POST['description'] = $props['description'];
206 $_POST['category'] = $props['category_id'];
207 start_table($table_style2);
208 text_row(_("Description:"), 'description', null, 50, 200);
209 stock_categories_list_row(_("Category:"), 'category', null);
210 submit_row('update_name', _("Update"), false, 'align=center colspan=2', _('Update kit/alias name'), true);
213 display_kit_items($selected_kit);
215 start_table($table_style2);
218 if ($Mode == 'Edit') {
219 $myrow = get_item_code($selected_id);
220 $_POST['component'] = $myrow["stock_id"];
221 $_POST['quantity'] = number_format2($myrow["quantity"], get_qty_dec($myrow["stock_id"]));
223 hidden("selected_id", $selected_id);
225 sales_local_items_list_row(_("Component:"),'component', null, false, true);
227 // if (get_post('description') == '')
228 // $_POST['description'] = get_kit_name($_POST['component']);
229 if (get_post('item_code') == '') { // new kit/alias
230 if ($Mode!='ADD_ITEM' && $Mode!='UPDATE_ITEM') {
231 $_POST['description'] = $props['description'];
232 $_POST['category'] = $props['category_id'];
234 text_row(_("Description:"), 'description', null, 50, 200);
235 stock_categories_list_row(_("Category:"), 'category', null);
237 $res = get_item_edit_info(get_post('component'));
238 $dec = $res["decimals"] == '' ? 0 : $res["decimals"];
239 $units = $res["units"] == '' ? _('kits') : $res["units"];
240 if (list_updated('component'))
242 $_POST['quantity'] = number_format2(1, $dec);
243 $Ajax->activate('quantity');
244 $Ajax->activate('category');
247 qty_row(_("Quantity:"), 'quantity', number_format2(1, $dec), '', $units, $dec);
250 submit_add_or_update_center($selected_id == -1, '', 'both');
252 //----------------------------------------------------------------------------------