Prüfen der Bestandteile eines Erzeugnisses beim Hinzufügen
[kivitendo-erp.git] / js / kivi.Part.js
1 namespace('kivi.Part', function(ns) {
2
3   ns.open_history_popup = function() {
4     var id = $("#part_id").val();
5     kivi.popup_dialog({
6       url:    'controller.pl?action=Part/history&part.id=' + id,
7       dialog: { title: kivi.t8('History') },
8     });
9   }
10
11   ns.save = function() {
12     var data = $('#ic').serializeArray();
13     data.push({ name: 'action', value: 'Part/save' });
14
15     $.post("controller.pl", data, kivi.eval_json_result);
16   };
17
18   ns.use_as_new = function() {
19     var oldid = $("#part_id").val();
20     $('#ic').attr('action', 'controller.pl?action=Part/use_as_new&old_id=' + oldid);
21     $('#ic').submit();
22   };
23
24   ns.delete = function() {
25     var data = $('#ic').serializeArray();
26     data.push({ name: 'action', value: 'Part/delete' });
27
28     $.post("controller.pl", data, kivi.eval_json_result);
29   };
30
31   ns.reformat_number = function(event) {
32     $(event.target).val(kivi.format_amount(kivi.parse_amount($(event.target).val()), -2));
33   };
34
35   ns.set_tab_active_by_index = function (index) {
36     $("#ic_tabs").tabs({active: index})
37   };
38
39   ns.set_tab_active_by_name= function (name) {
40     var index = $('#ic_tabs a[href=#' + name + ']').parent().index();
41     ns.set_tab_active_by_index(index);
42   };
43
44   ns.reorder_items = function(order_by) {
45     var dir = $('#' + order_by + '_header_id a img').attr("data-sort-dir");
46     var part_type = $("#part_part_type").val();
47
48     var data;
49     if (part_type === 'assortment') {
50       $('#assortment thead a img').remove();
51       data = $('#assortment :input').serializeArray();
52     } else if ( part_type === 'assembly') {
53       $('#assembly thead a img').remove();
54       data = $('#assembly :input').serializeArray();
55     };
56
57     var src;
58     if (dir == "1") {
59       dir = "0";
60       src = "image/up.png";
61     } else {
62       dir = "1";
63       src = "image/down.png";
64     }
65
66     $('#' + order_by + '_header_id a').append('<img border=0 data-sort-dir=' + dir + ' src=' + src + ' alt="' + kivi.t8('sort items') + '">');
67
68     data.push({ name: 'action',    value: 'Part/reorder_items' },
69               { name: 'order_by',  value: order_by             },
70               { name: 'part_type', value: part_type            },
71               { name: 'sort_dir',  value: dir                  });
72
73     $.post("controller.pl", data, kivi.eval_json_result);
74   };
75
76   ns.assortment_recalc = function() {
77     var data = $('#assortment :input').serializeArray();
78     data.push({ name: 'action', value: 'Part/update_item_totals' },
79               { name: 'part_type', value: 'assortment'                   });
80
81     $.post("controller.pl", data, kivi.eval_json_result);
82   };
83
84   ns.assembly_recalc = function() {
85     var data = $('#assembly :input').serializeArray();
86     data.push( { name: 'action',    value: 'Part/update_item_totals' },
87                { name: 'part_type', value: 'assembly'                        });
88
89     $.post("controller.pl", data, kivi.eval_json_result);
90   };
91
92   ns.set_assortment_sellprice = function() {
93     $("#part_sellprice_as_number").val($("#items_sellprice_sum").html());
94     // ns.set_tab_active_by_name('basic_data');
95     // $("#part_sellprice_as_number").focus();
96   };
97
98   ns.set_assortment_lsg_sellprice = function() {
99     $("#items_lsg_sellprice_sum_basic").closest('td').find('input').val($("#items_lsg_sellprice_sum").html());
100   };
101
102   ns.set_assortment_douglas_sellprice = function() {
103     $("#items_douglas_sellprice_sum_basic").closest('td').find('input').val($("#items_douglas_sellprice_sum").html());
104   };
105
106   ns.set_assortment_lastcost = function() {
107     $("#part_lastcost_as_number").val($("#items_lastcost_sum").html());
108     // ns.set_tab_active_by_name('basic_data');
109     // $("#part_lastcost_as_number").focus();
110   };
111
112   ns.set_assembly_sellprice = function() {
113     $("#part_sellprice_as_number").val($("#items_sellprice_sum").html());
114     // ns.set_tab_active_by_name('basic_data');
115     // $("#part_sellprice_as_number").focus();
116   };
117
118   ns.renumber_positions = function() {
119     var part_type = $("#part_part_type").val();
120     var rows;
121     if (part_type === 'assortment') {
122       rows = $('.assortment_item_row [name="position"]');
123     } else if ( part_type === 'assembly') {
124       rows = $('.assembly_item_row [name="position"]');
125     };
126     $(rows).each(function(idx, elt) {
127       $(elt).html(idx+1);
128       var row = $(elt).closest('tr');
129       if ( idx % 2 === 0 ) {
130         if ( row.hasClass('listrow1') ) {
131           row.removeClass('listrow1');
132           row.addClass('listrow0');
133         };
134       } else {
135         if ( row.hasClass('listrow0') ) {
136           row.removeClass('listrow0');
137           row.addClass('listrow1');
138         };
139       };
140     });
141   };
142
143   ns.delete_item_row = function(clicked) {
144     var row = $(clicked).closest('tr');
145     $(row).remove();
146     var part_type = $("#part_part_type").val();
147     ns.renumber_positions();
148     if (part_type === 'assortment') {
149       ns.assortment_recalc();
150     } else if ( part_type === 'assembly') {
151       ns.assembly_recalc();
152     };
153   };
154
155   ns.add_assortment_item = function() {
156     if ($('#add_assortment_item_id').val() === '') return;
157
158     $('#row_table_id thead a img').remove();
159
160     var data = $('#assortment :input').serializeArray();
161     data.push({ name: 'action', value: 'Part/add_assortment_item' },
162               { name: 'part.id', value: $('#part_id').val()       },
163               { name: 'part.part_type', value: 'assortment'       });
164
165     $.post("controller.pl", data, kivi.eval_json_result);
166   };
167
168   ns.add_assembly_item = function() {
169     if ($('#add_assembly_item_id').val() === '') return;
170
171     var data = $('#assembly :input').serializeArray();
172     data.push({ name: 'action', value: 'Part/add_assembly_item' },
173               { name: 'part.id', value: $("#part_id").val()     },
174               { name: 'part.part_type', value: 'assortment'     });
175
176     $.post("controller.pl", data, kivi.eval_json_result);
177   };
178
179   ns.redisplay_items = function(data) {
180     var old_rows;
181     var part_type = $("#part_part_type").val();
182     if (part_type === 'assortment') {
183       old_rows = $('.assortment_item_row').detach();
184     } else if ( part_type === 'assembly') {
185       old_rows = $('.assembly_item_row').detach();
186     };
187     var new_rows = [];
188     $(data).each(function(idx, elt) {
189       new_rows.push(old_rows[elt.old_pos - 1]);
190     });
191     if (part_type === 'assortment') {
192       $(new_rows).appendTo($('#assortment_items'));
193     } else if ( part_type === 'assembly') {
194       $(new_rows).appendTo($('#assembly_items'));
195     };
196     ns.renumber_positions();
197   };
198
199   ns.focus_last_assortment_input = function () {
200     $("#assortment_items tr:last").find('input[type=text]').filter(':visible:first').focus();
201   };
202
203   ns.focus_last_assembly_input = function () {
204     $("#assembly_rows tr:last").find('input[type=text]').filter(':visible:first').focus();
205   };
206
207   ns.show_multi_items_dialog = function(part_type,part_id) {
208
209     $('#row_table_id thead a img').remove();
210
211     kivi.popup_dialog({
212       url: 'controller.pl?action=Part/show_multi_items_dialog',
213       data: { callback:         'Part/add_multi_' + part_type + '_items',
214               callback_data_id: 'ic',
215               'part.part_type': part_type,
216               'part.id'       : part_id,
217             },
218       id: 'jq_multi_items_dialog',
219       dialog: {
220         title: kivi.t8('Add multiple items'),
221         width:  800,
222         height: 800
223       }
224     });
225     return true;
226   };
227
228   ns.close_multi_items_dialog = function() {
229     $('#jq_multi_items_dialog').dialog('close');
230   };
231
232
233   // makemodel
234   ns.makemodel_renumber_positions = function() {
235     $('.makemodel_row [name="position"]').each(function(idx, elt) {
236       $(elt).html(idx+1);
237     });
238   };
239
240   ns.delete_makemodel_row = function(clicked) {
241     var row = $(clicked).closest('tr');
242     $(row).remove();
243
244     ns.makemodel_renumber_positions();
245   };
246
247   ns.add_makemodel_row = function() {
248     if ($('#add_makemodelid').val() === '') return;
249
250     var data = $('#makemodel_table :input').serializeArray();
251     data.push({ name: 'action', value: 'Part/add_makemodel_row' });
252
253     $.post("controller.pl", data, kivi.eval_json_result);
254   };
255
256   ns.focus_last_makemodel_input = function () {
257     $("#makemodel_rows tr:last").find('input[type=text]').filter(':visible:first').focus();
258   };
259
260
261   ns.reload_bin_selection = function() {
262     $.post("controller.pl", { action: 'Part/warehouse_changed', warehouse_id: function(){ return $('#part_warehouse_id').val() } },   kivi.eval_json_result);
263   }
264
265   $(function(){
266
267     // assortment
268     // TODO: allow units for assortment items
269     $('#add_assortment_item_id').on('set_item:PartPicker', function(e,o) { $('#add_item_unit').val(o.unit) });
270
271     $('#ic').on('focusout', '.reformat_number', function(event) {
272        ns.reformat_number(event);
273     })
274
275     $('.add_assortment_item_input').keydown(function(event) {
276       if(event.keyCode == 13) {
277         event.preventDefault();
278         if ($("input[name='add_items[+].parts_id']").val() != '' ) {
279           kivi.Part.show_multi_items_dialog("assortment");
280          // ns.add_assortment_item();
281         };
282         return false;
283       }
284     });
285
286     $('.add_assembly_item_input').keydown(function(event) {
287       if(event.keyCode == 13) {
288         event.preventDefault();
289         if ($("input[name='add_items[+].parts_id']").val() != '' ) {
290           kivi.Part.show_multi_items_dialog("assortment");
291           // ns.add_assembly_item();
292         }
293         return false;
294       }
295     });
296
297     $('.add_makemodel_input').keydown(function(event) {
298       if(event.keyCode == 13) {
299         event.preventDefault();
300         ns.add_makemodel_row();
301         return false;
302       }
303     });
304
305     $('#part_warehouse_id').change(kivi.Part.reload_bin_selection);
306
307   });
308 })