SID & start_form() cleanup.
[fa-stable.git] / inventory / manage / sales_kits.php
1 <?php
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 = 11;
13 $path_to_root="../..";
14 include_once($path_to_root . "/includes/session.inc");
15
16 page(_("Sales Kits & Alias Codes"));
17
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");
21
22 include_once($path_to_root . "/includes/manufacturing.inc");
23
24 check_db_has_stock_items(_("There are no items defined in the system."));
25
26 simple_page_mode(true);
27 /*
28 if (isset($_GET['item_code']))
29 {
30         $_POST['item_code'] = $_GET['item_code'];
31         $selected_kit =  $_GET['item_code'];
32 }
33 */
34 //--------------------------------------------------------------------------------------------------
35 function display_kit_items($selected_kit)
36 {
37         global $table_style;
38
39         $result = get_item_kit($selected_kit);
40 div_start('bom');
41         start_table("$table_style width=60%");
42         $th = array(_("Stock Item"), _("Description"), _("Quantity"), _("Units"),
43                 '','');
44         table_header($th);
45
46         $k = 0;
47         while ($myrow = db_fetch($result))
48         {
49
50                 alt_table_row_color($k);
51
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"));
59         end_row();
60
61         } //END WHILE LIST LOOP
62         end_table();
63 div_end();
64 }
65
66 //--------------------------------------------------------------------------------------------------
67
68 function update_component($kit_code, $selected_item)
69 {
70         global $Mode, $Ajax, $selected_kit;
71         
72         if (!check_num('quantity', 0))
73         {
74                 display_error(_("The quantity entered must be numeric and greater than zero."));
75                 set_focus('quantity');
76                 return;
77         }
78         elseif ($_POST['description'] == '')
79         {
80         display_error( _("Item code description cannot be empty."));
81                 set_focus('description');
82                 return;
83         }
84         elseif ($selected_item == -1)   // adding new item or new alias/kit
85         {
86                 if (get_post('item_code') == '') { // New kit/alias definition
87                         $kit = get_item_kit($_POST['item_code']);
88                 if (db_num_rows($kit)) {
89                                 $input_error = 1;
90                         display_error( _("This item code is already assigned to stock item or sale kit."));
91                                 set_focus('kit_code');
92                                 return;
93                         }
94                         if (get_post('kit_code') == '') {
95                         display_error( _("Kit/alias code cannot be empty."));
96                                 set_focus('kit_code');
97                                 return;
98                         }
99                 }
100         }
101
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');
105                 return;
106         }
107
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');
112                 return;
113         }
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.");
119                 } 
120                  else
121                         $msg =_("New component has been added to selected kit.");
122
123                 add_item_code( $kit_code, get_post('component'), get_post('description'),
124                          get_post('category'), input_num('quantity'), 0);
125                 display_notification($msg);
126
127         } else {
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."));
132         }
133         $Mode = 'RESET';
134         $Ajax->activate('_page_body');
135 }
136
137 //--------------------------------------------------------------------------------------------------
138
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');
143 }
144
145 if ($Mode=='ADD_ITEM' || $Mode=='UPDATE_ITEM')
146         update_component($_POST['item_code'], $selected_id);
147
148 if ($Mode == 'Delete')
149 {
150         // Before removing last component from selected kit check 
151         // if selected kit is not included in any other kit. 
152         // 
153         $other_kits = get_where_used($_POST['item_code']);
154         $num_kits = db_num_rows($other_kits);
155
156         $kit = get_item_kit($_POST['item_code']);
157         if ((db_num_rows($kit) == 1) && $num_kits) {
158
159                 $msg = _("This item cannot be deleted because it is the last item in the kit used by following kits")
160                         .':<br>';
161
162                 while($num_kits--) {
163                         $kit = db_fetch($other_kits);
164                         $msg .= "'".$kit[0]."'";
165                         if ($num_kits) $msg .= ',';
166                 }
167                 display_error($msg);
168         } else {
169                 delete_item_code($selected_id);
170                 display_notification(_("The component item has been deleted from this bom"));
171                 $Mode = 'RESET';
172         }
173 }
174
175 if ($Mode == 'RESET')
176 {
177         $selected_id = -1;
178         unset($_POST['quantity']);
179         unset($_POST['component']);
180 }
181
182 //--------------------------------------------------------------------------------------------------
183
184 start_form();
185
186 echo "<center>" . _("Select a sale kit:") . "&nbsp;";
187 sales_kits_list('item_code', null, _('New kit'), true);
188 echo "</center><br>";
189 $props = get_kit_props($_POST['item_code']);
190
191 if (isset($_POST['_item_code_update'])) {
192         if (get_post('item_code') == '')
193                 $_POST['description'] = '';
194         $Ajax->activate('_page_body');
195 }
196
197 $selected_kit = $_POST['item_code'];
198 //----------------------------------------------------------------------------------
199 if (get_post('item_code') == '') {
200 // New sales kit entry
201         start_table($table_style2);
202         text_row(_("Alias/kit code:"), 'kit_code', null, 20, 21);
203 } else
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);
211         end_row();
212         end_table(1);
213         display_kit_items($selected_kit);
214         echo '<br>';
215         start_table($table_style2);
216 }
217
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"]));
222         }
223         hidden("selected_id", $selected_id);
224         
225         sales_local_items_list_row(_("Component:"),'component', null, false, true);
226
227 //      if (get_post('description') == '')
228 //              $_POST['description'] = get_kit_name($_POST['component']);
229         if (get_post('item_code') == '') { // new kit/alias
230                 $_POST['description'] = $props['description'];
231                 $_POST['category'] = $props['category_id'];
232                 text_row(_("Description:"), 'description', null, 50, 200);
233                 stock_categories_list_row(_("Category:"), 'category', null);
234         }
235         $res = get_item_edit_info(get_post('component'));
236         $dec =  $res["decimals"] == '' ? 0 : $res["decimals"];
237         $units = $res["units"] == '' ? _('kits') : $res["units"];
238         if (list_updated('component')) 
239         {
240                 $_POST['quantity'] = number_format2(1, $dec);
241                 $Ajax->activate('quantity');
242                 $Ajax->activate('category');
243         }
244         
245         qty_row(_("Quantity:"), 'quantity', number_format2(1, $dec), '', $units, $dec);
246
247         end_table(1);
248         submit_add_or_update_center($selected_id == -1, '', true);
249         end_form();
250 //----------------------------------------------------------------------------------
251
252 end_page();
253
254 ?>