1 namespace('kivi.Order', function(ns) {
2 ns.check_cv = function() {
3 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation') {
4 if ($('#order_customer_id').val() === '') {
5 alert(kivi.t8('Please select a customer.'));
9 if ($('#order_vendor_id').val() === '') {
10 alert(kivi.t8('Please select a vendor.'));
17 ns.check_duplicate_parts = function(question) {
18 var id_arr = $('[name="order.orderitems[].parts_id"]').map(function() { return this.value; }).get();
20 var i, obj = {}, pos = [];
22 for (i = 0; i < id_arr.length; i++) {
24 if (obj.hasOwnProperty(id)) {
31 question = question || kivi.t8("Do you really want to continue?");
32 return confirm(kivi.t8("There are duplicate parts at positions") + "\n"
33 + pos.join(', ') + "\n"
39 ns.check_valid_reqdate = function() {
40 if ($('#order_reqdate_as_date').val() === '') {
41 alert(kivi.t8('Please select a delivery date.'));
48 ns.save = function(action, warn_on_duplicates, warn_on_reqdate) {
49 if (!ns.check_cv()) return;
50 if (warn_on_duplicates && !ns.check_duplicate_parts()) return;
51 if (warn_on_reqdate && !ns.check_valid_reqdate()) return;
53 var data = $('#order_form').serializeArray();
54 data.push({ name: 'action', value: 'Order/' + action });
56 $.post("controller.pl", data, kivi.eval_json_result);
59 ns.delete_order = function() {
60 var data = $('#order_form').serializeArray();
61 data.push({ name: 'action', value: 'Order/delete' });
63 $.post("controller.pl", data, kivi.eval_json_result);
66 ns.show_print_options = function(warn_on_duplicates) {
67 if (!ns.check_cv()) return;
68 if (warn_on_duplicates && !ns.check_duplicate_parts(kivi.t8("Do you really want to print?"))) return;
73 title: kivi.t8('Print options'),
80 ns.print = function() {
81 $('#print_options').dialog('close');
83 var data = $('#order_form').serializeArray();
84 data = data.concat($('#print_options_form').serializeArray());
85 data.push({ name: 'action', value: 'Order/print' });
87 $.post("controller.pl", data, kivi.eval_json_result);
92 ns.setup_send_email_dialog = function() {
93 kivi.SalesPurchase.show_all_print_options_elements();
94 kivi.SalesPurchase.show_print_options_elements([ 'sendmode', 'media', 'copies', 'remove_draft' ], false);
96 $('#print_options_form table').first().remove().appendTo('#email_form_print_options');
98 var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
99 $('#email_form_' + to_focus).focus();
102 ns.finish_send_email_dialog = function() {
103 kivi.SalesPurchase.show_all_print_options_elements();
105 $('#email_form_print_options table').first().remove().prependTo('#print_options_form');
109 ns.show_email_dialog = function(html) {
110 var id = 'send_email_dialog';
111 var dialog_params = {
115 title: kivi.t8('Send email'),
117 beforeClose: kivi.Order.finish_send_email_dialog,
118 close: function(event, ui) {
119 email_dialog.remove();
123 $('#' + id).remove();
125 email_dialog = $('<div style="display:none" id="' + id + '"></div>').appendTo('body');
126 email_dialog.html(html);
127 email_dialog.dialog(dialog_params);
129 kivi.Order.setup_send_email_dialog();
131 $('.cancel').click(ns.close_email_dialog);
136 ns.send_email = function() {
137 // push button only once -> slow response from mail server
138 ns.email_dialog_disable_send();
140 var data = $('#order_form').serializeArray();
141 data = data.concat($('[name^="email_form."]').serializeArray());
142 data = data.concat($('[name^="print_options."]').serializeArray());
143 data.push({ name: 'action', value: 'Order/send_email' });
144 $.post("controller.pl", data, kivi.eval_json_result);
147 ns.close_email_dialog = function() {
148 email_dialog.dialog("close");
151 ns.set_number_in_title = function(elt) {
152 $('#nr_in_title').html($(elt).val());
155 ns.reload_cv_dependent_selections = function() {
156 $('#order_shipto_id').val('');
157 var data = $('#order_form').serializeArray();
158 data.push({ name: 'action', value: 'Order/customer_vendor_changed' });
160 $.post("controller.pl", data, kivi.eval_json_result);
163 ns.reformat_number = function(event) {
164 $(event.target).val(kivi.format_amount(kivi.parse_amount($(event.target).val()), -2));
167 ns.reformat_number_as_null_number = function(event) {
168 if ($(event.target).val() === '') {
171 ns.reformat_number(event);
174 ns.update_exchangerate = function(event) {
175 if (!ns.check_cv()) {
176 $('#order_currency_id').val($('#old_currency_id').val());
180 var rate_input = $('#order_exchangerate_as_null_number');
181 // unset exchangerate if currency changed
182 if ($('#order_currency_id').val() !== $('#old_currency_id').val()) {
186 // only set exchangerate if unset
187 if (rate_input.val() !== '') {
191 var data = $('#order_form').serializeArray();
192 data.push({ name: 'action', value: 'Order/update_exchangerate' });
195 url: 'controller.pl',
199 success: function(data){
200 if (!data.is_standard) {
201 $('#currency_name').text(data.currency_name);
202 if (data.exchangerate) {
203 rate_input.val(data.exchangerate);
207 $('#exchangerate_settings').show();
210 $('#exchangerate_settings').hide();
212 if ($('#order_currency_id').val() != $('#old_currency_id').val() ||
213 !data.is_standard && data.exchangerate != $('#old_exchangerate').val()) {
214 kivi.display_flash('warning', kivi.t8('You have changed the currency or exchange rate. Please check prices.'));
216 $('#old_currency_id').val($('#order_currency_id').val());
217 $('#old_exchangerate').val(data.exchangerate);
222 ns.exchangerate_changed = function(event) {
223 if (kivi.parse_amount($('#order_exchangerate_as_null_number').val()) != kivi.parse_amount($('#old_exchangerate').val())) {
224 kivi.display_flash('warning', kivi.t8('You have changed the currency or exchange rate. Please check prices.'));
225 $('#old_exchangerate').val($('#order_exchangerate_as_null_number').val());
229 ns.recalc_amounts_and_taxes = function() {
230 var data = $('#order_form').serializeArray();
231 data.push({ name: 'action', value: 'Order/recalc_amounts_and_taxes' });
233 $.post("controller.pl", data, kivi.eval_json_result);
236 ns.unit_change = function(event) {
237 var row = $(event.target).parents("tbody").first();
238 var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
239 var sellprice_dom = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
240 var select_elt = $(row).find('[name="order.orderitems[].unit"]');
242 var oldval = $(select_elt).data('oldval');
243 $(select_elt).data('oldval', $(select_elt).val());
245 var data = $('#order_form').serializeArray();
246 data.push({ name: 'action', value: 'Order/unit_changed' },
247 { name: 'item_id', value: item_id_dom.val() },
248 { name: 'old_unit', value: oldval },
249 { name: 'sellprice_dom_id', value: sellprice_dom.attr('id') });
251 $.post("controller.pl", data, kivi.eval_json_result);
254 ns.update_sellprice = function(item_id, price_str) {
255 var row = $('#item_' + item_id).parents("tbody").first();
256 var price_elt = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
257 var html_elt = $(row).find('[name="sellprice_text"]');
258 price_elt.val(price_str);
259 html_elt.html(price_str);
262 ns.load_second_row = function(row) {
263 var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
264 var div_elt = $(row).find('[name="second_row"]');
266 if ($(div_elt).data('loaded') == 1) {
269 var data = $('#order_form').serializeArray();
270 data.push({ name: 'action', value: 'Order/load_second_rows' },
271 { name: 'item_ids[]', value: item_id_dom.val() });
273 $.post("controller.pl", data, kivi.eval_json_result);
276 ns.load_all_second_rows = function() {
277 var rows = $('.row_entry').filter(function(idx, elt) {
278 return $(elt).find('[name="second_row"]').data('loaded') != 1;
281 var item_ids = $.map(rows, function(elt) {
282 var item_id = $(elt).find('[name="orderitem_ids[+]"]').val();
283 return { name: 'item_ids[]', value: item_id };
286 if (item_ids.length == 0) {
290 var data = $('#order_form').serializeArray();
291 data.push({ name: 'action', value: 'Order/load_second_rows' });
292 data = data.concat(item_ids);
294 $.post("controller.pl", data, kivi.eval_json_result);
297 ns.hide_second_row = function(row) {
298 $(row).children().not(':first').hide();
299 $(row).data('expanded', 0);
300 var elt = $(row).find('.expand');
301 elt.attr('src', "image/expand.svg");
302 elt.attr('alt', kivi.t8('Show details'));
303 elt.attr('title', kivi.t8('Show details'));
306 ns.show_second_row = function(row) {
307 $(row).children().not(':first').show();
308 $(row).data('expanded', 1);
309 var elt = $(row).find('.expand');
310 elt.attr('src', "image/collapse.svg");
311 elt.attr('alt', kivi.t8('Hide details'));
312 elt.attr('title', kivi.t8('Hide details'));
315 ns.toggle_second_row = function(row) {
316 if ($(row).data('expanded') == 1) {
317 ns.hide_second_row(row);
319 ns.show_second_row(row);
323 ns.init_row_handlers = function() {
324 kivi.run_once_for('.recalc', 'on_change_recalc', function(elt) {
325 $(elt).change(ns.recalc_amounts_and_taxes);
328 kivi.run_once_for('.reformat_number', 'on_change_reformat', function(elt) {
329 $(elt).change(ns.reformat_number);
332 kivi.run_once_for('.unitselect', 'on_change_unit_with_oldval', function(elt) {
333 $(elt).data('oldval', $(elt).val());
334 $(elt).change(ns.unit_change);
337 kivi.run_once_for('.row_entry', 'on_kbd_click_show_hide', function(elt) {
338 $(elt).keydown(function(event) {
340 if (event.keyCode == 40 && event.shiftKey === true) {
342 event.preventDefault();
343 row = $(event.target).parents(".row_entry").first();
344 ns.load_second_row(row);
345 ns.show_second_row(row);
348 if (event.keyCode == 38 && event.shiftKey === true) {
350 event.preventDefault();
351 row = $(event.target).parents(".row_entry").first();
352 ns.hide_second_row(row);
358 kivi.run_once_for('.expand', 'expand_second_row', function(elt) {
359 $(elt).click(function(event) {
360 event.preventDefault();
361 var row = $(event.target).parents(".row_entry").first();
362 ns.load_second_row(row);
363 ns.toggle_second_row(row);
370 ns.redisplay_line_values = function(is_sales, data) {
371 $('.row_entry').each(function(idx, elt) {
372 $(elt).find('[name="linetotal"]').html(data[idx][0]);
373 if (is_sales && $(elt).find('[name="second_row"]').data('loaded') == 1) {
374 var mt = data[idx][1];
375 var mp = data[idx][2];
377 if (mt[0] === '-') h += ' class="plus0"';
378 h += '>' + mt + ' ' + mp + '%';
380 $(elt).find('[name="linemargin"]').html(h);
385 ns.redisplay_cvpartnumbers = function(data) {
386 $('.row_entry').each(function(idx, elt) {
387 $(elt).find('[name="cvpartnumber"]').html(data[idx][0]);
391 ns.renumber_positions = function() {
392 $('.row_entry [name="position"]').each(function(idx, elt) {
395 $('.row_entry').each(function(idx, elt) {
396 $(elt).data("position", idx+1);
400 ns.reorder_items = function(order_by) {
401 var dir = $('#' + order_by + '_header_id a img').attr("data-sort-dir");
402 $('#row_table_id thead a img').remove();
407 src = "image/up.png";
410 src = "image/down.png";
413 $('#' + order_by + '_header_id a').append('<img border=0 data-sort-dir=' + dir + ' src=' + src + ' alt="' + kivi.t8('sort items') + '">');
415 var data = $('#order_form').serializeArray();
416 data.push({ name: 'action', value: 'Order/reorder_items' },
417 { name: 'order_by', value: order_by },
418 { name: 'sort_dir', value: dir });
420 $.post("controller.pl", data, kivi.eval_json_result);
423 ns.redisplay_items = function(data) {
424 var old_rows = $('.row_entry').detach();
426 $(data).each(function(idx, elt) {
427 new_rows.push(old_rows[elt.old_pos - 1]);
429 $(new_rows).appendTo($('#row_table_id'));
430 ns.renumber_positions();
433 ns.get_insert_before_item_id = function(wanted_pos) {
434 if (wanted_pos === '') return;
436 var insert_before_item_id;
437 // selection by data does not seem to work if data is changed at runtime
438 // var elt = $('.row_entry [data-position="' + wanted_pos + '"]');
439 $('.row_entry').each(function(idx, elt) {
440 if ($(elt).data("position") == wanted_pos) {
441 insert_before_item_id = $(elt).find('[name="orderitem_ids[+]"]').val();
446 return insert_before_item_id;
449 ns.add_item = function() {
450 if ($('#add_item_parts_id').val() === '') return;
451 if (!ns.check_cv()) return;
453 $('#row_table_id thead a img').remove();
455 var insert_before_item_id = ns.get_insert_before_item_id($('#add_item_position').val());
457 var data = $('#order_form').serializeArray();
458 data.push({ name: 'action', value: 'Order/add_item' },
459 { name: 'insert_before_item_id', value: insert_before_item_id });
461 $.post("controller.pl", data, kivi.eval_json_result);
464 ns.open_multi_items_dialog = function() {
465 if (!ns.check_cv()) return;
467 var pp = $("#add_item_parts_id").data("part_picker");
471 ns.email_dialog_disable_send = function() {
472 // disable mail send event to prevent
473 // impatient users to send multiple times
474 $('#send_email').prop('disabled', true);
477 ns.add_multi_items = function(data) {
478 var insert_before_item_id = ns.get_insert_before_item_id($('#multi_items_position').val());
479 data = data.concat($('#order_form').serializeArray());
480 data.push({ name: 'action', value: 'Order/add_multi_items' },
481 { name: 'insert_before_item_id', value: insert_before_item_id });
482 $.post("controller.pl", data, kivi.eval_json_result);
485 ns.delete_order_item_row = function(clicked) {
486 var row = $(clicked).parents("tbody").first();
489 ns.renumber_positions();
490 ns.recalc_amounts_and_taxes();
493 ns.row_table_scroll_down = function() {
494 $('#row_table_scroll_id').scrollTop($('#row_table_scroll_id')[0].scrollHeight);
497 ns.show_longdescription_dialog = function(clicked) {
498 var row = $(clicked).parents("tbody").first();
499 var position = $(row).find('[name="position"]').html();
500 var partnumber = $(row).find('[name="partnumber"]').html();
501 var description_elt = $(row).find('[name="order.orderitems[].description"]');
502 var longdescription_elt = $(row).find('[name="order.orderitems[].longdescription"]');
505 runningnumber: position,
506 partnumber: partnumber,
507 description: description_elt.val(),
508 default_longdescription: longdescription_elt.val(),
509 set_function: function(val) {
510 longdescription_elt.val(val);
514 kivi.SalesPurchase.edit_longdescription_with_params(params);
517 ns.price_chooser_item_row = function(clicked) {
518 if (!ns.check_cv()) return;
519 var row = $(clicked).parents("tbody").first();
520 var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
522 var data = $('#order_form').serializeArray();
523 data.push({ name: 'action', value: 'Order/price_popup' },
524 { name: 'item_id', value: item_id_dom.val() });
526 $.post("controller.pl", data, kivi.eval_json_result);
529 ns.update_price_source = function(item_id, source, descr, price_str, price_editable) {
530 var row = $('#item_' + item_id).parents("tbody").first();
531 var source_elt = $(row).find('[name="order.orderitems[].active_price_source"]');
532 var button_elt = $(row).find('[name="price_chooser_button"]');
534 button_elt.val(button_elt.val().replace(/.*\|/, descr + " |"));
535 source_elt.val(source);
537 var editable_div_elt = $(row).find('[name="editable_price"]');
538 var not_editable_div_elt = $(row).find('[name="not_editable_price"]');
539 if (price_editable == 1 && source === '') {
541 $(editable_div_elt).show();
542 $(not_editable_div_elt).hide();
543 $(editable_div_elt).find(':input').prop("disabled", false);
544 $(not_editable_div_elt).find(':input').prop("disabled", true);
547 $(editable_div_elt).hide();
548 $(not_editable_div_elt).show();
549 $(editable_div_elt).find(':input').prop("disabled", true);
550 $(not_editable_div_elt).find(':input').prop("disabled", false);
554 var price_elt = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
555 var html_elt = $(row).find('[name="sellprice_text"]');
556 price_elt.val(price_str);
557 html_elt.html(price_str);
558 ns.recalc_amounts_and_taxes();
561 kivi.io.close_dialog();
564 ns.update_discount_source = function(item_id, source, descr, discount_str, price_editable) {
565 var row = $('#item_' + item_id).parents("tbody").first();
566 var source_elt = $(row).find('[name="order.orderitems[].active_discount_source"]');
567 var button_elt = $(row).find('[name="price_chooser_button"]');
569 button_elt.val(button_elt.val().replace(/\|.*/, "| " + descr));
570 source_elt.val(source);
572 var editable_div_elt = $(row).find('[name="editable_discount"]');
573 var not_editable_div_elt = $(row).find('[name="not_editable_discount"]');
574 if (price_editable == 1 && source === '') {
576 $(editable_div_elt).show();
577 $(not_editable_div_elt).hide();
578 $(editable_div_elt).find(':input').prop("disabled", false);
579 $(not_editable_div_elt).find(':input').prop("disabled", true);
582 $(editable_div_elt).hide();
583 $(not_editable_div_elt).show();
584 $(editable_div_elt).find(':input').prop("disabled", true);
585 $(not_editable_div_elt).find(':input').prop("disabled", false);
589 var discount_elt = $(row).find('[name="order.orderitems[].discount_as_percent"]');
590 var html_elt = $(row).find('[name="discount_text"]');
591 discount_elt.val(discount_str);
592 html_elt.html(discount_str);
593 ns.recalc_amounts_and_taxes();
596 kivi.io.close_dialog();
599 ns.show_periodic_invoices_config_dialog = function() {
600 if ($('#type').val() !== 'sales_order') return;
603 url: 'controller.pl?action=Order/show_periodic_invoices_config_dialog',
604 data: { type: $('#type').val(),
606 config: $('#order_periodic_invoices_config').val(),
607 customer_id: $('#order_customer_id').val(),
608 transdate_as_date: $('#order_transdate_as_date').val(),
609 language_id: $('#language_id').val()
611 id: 'jq_periodic_invoices_config_dialog',
612 load: kivi.reinit_widgets,
614 title: kivi.t8('Edit the configuration for periodic invoices'),
622 ns.close_periodic_invoices_config_dialog = function() {
623 $('#jq_periodic_invoices_config_dialog').dialog('close');
626 ns.assign_periodic_invoices_config = function() {
627 var data = $('[name="Form"]').serializeArray();
628 data.push({ name: 'type', value: $('#type').val() },
629 { name: 'action', value: 'Order/assign_periodic_invoices_config' });
630 $.post("controller.pl", data, kivi.eval_json_result);
633 ns.check_save_active_periodic_invoices = function() {
634 var type = $('#type').val();
635 if (type !== 'sales_order') return true;
639 url: 'controller.pl',
640 data: { action: 'Order/get_has_active_periodic_invoices',
643 config: $('#order_periodic_invoices_config').val(),
648 success: function(val) {
654 return confirm(kivi.t8('This sales order has an active configuration for periodic invoices. If you save then all subsequently created invoices will contain those changes as well, but not those that have already been created. Do you want to continue?'));
660 ns.show_vc_details_dialog = function() {
661 if (!ns.check_cv()) return;
665 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation' ) {
667 vc_id = $('#order_customer_id').val();
668 title = kivi.t8('Customer details');
671 vc_id = $('#order_vendor_id').val();
672 title = kivi.t8('Vendor details');
676 url: 'controller.pl',
677 data: { action: 'Order/show_customer_vendor_details_dialog',
678 type : $('#type').val(),
682 id: 'jq_customer_vendor_details_dialog',
692 ns.update_row_from_master_data = function(clicked) {
693 var row = $(clicked).parents("tbody").first();
694 var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
696 var data = $('#order_form').serializeArray();
697 data.push({ name: 'action', value: 'Order/update_row_from_master_data' });
698 data.push({ name: 'item_ids[]', value: item_id_dom.val() });
700 $.post("controller.pl", data, kivi.eval_json_result);
703 ns.update_all_rows_from_master_data = function() {
704 var item_ids = $.map($('.row_entry'), function(elt) {
705 var item_id = $(elt).find('[name="orderitem_ids[+]"]').val();
706 return { name: 'item_ids[]', value: item_id };
709 if (item_ids.length == 0) {
713 var data = $('#order_form').serializeArray();
714 data.push({ name: 'action', value: 'Order/update_row_from_master_data' });
715 data = data.concat(item_ids);
717 $.post("controller.pl", data, kivi.eval_json_result);
720 ns.show_calculate_qty_dialog = function(clicked) {
721 var row = $(clicked).parents("tbody").first();
722 var input_id = $(row).find('[name="order.orderitems[].qty_as_number"]').attr('id');
723 var formula_id = $(row).find('[name="formula[+]"]').attr('id');
725 calculate_qty_selection_dialog("", input_id, "", formula_id);
729 ns.edit_custom_shipto = function() {
730 if (!ns.check_cv()) return;
732 kivi.SalesPurchase.edit_custom_shipto();
735 ns.purchase_order_check_for_direct_delivery = function() {
736 if ($('#type').val() != 'sales_order') {
737 kivi.submit_form_with_action($('#order_form'), 'Order/purchase_order');
742 if ($('#order_shipto_id').val() !== '') {
744 shipto = $('#order_shipto_id option:selected').text();
746 $('#shipto_inputs [id^="shipto"]').each(function(idx, elt) {
747 if (!empty) return true;
748 if (/^shipto_to_copy/.test($(elt).prop('id'))) return true;
749 if (/^shiptocp_gender/.test($(elt).prop('id'))) return true;
750 if (/^shiptocvar_/.test($(elt).prop('id'))) return true;
751 if ($(elt).val() !== '') {
756 var shipto_elements = [];
757 $([$('#shiptoname').val(), $('#shiptostreet').val(), $('#shiptozipcode').val(), $('#shiptocity').val()]).each(function(idx, elt) {
758 if (elt !== '') shipto_elements.push(elt);
760 shipto = shipto_elements.join('; ');
765 ns.direct_delivery_dialog(shipto);
767 kivi.submit_form_with_action($('#order_form'), 'Order/purchase_order');
771 ns.direct_delivery_callback = function(accepted) {
772 $('#direct-delivery-dialog').dialog('close');
775 $('<input type="hidden" name="use_shipto">').appendTo('#order_form').val('1');
778 kivi.submit_form_with_action($('#order_form'), 'Order/purchase_order');
781 ns.direct_delivery_dialog = function(shipto) {
782 $('#direct-delivery-dialog').remove();
784 var text1 = kivi.t8('You have entered or selected the following shipping address for this customer:');
785 var text2 = kivi.t8('Do you want to carry this shipping address over to the new purchase order so that the vendor can deliver the goods directly to your customer?');
786 var html = '<div id="direct-delivery-dialog"><p>' + text1 + '</p><p>' + shipto + '</p><p>' + text2 + '</p>';
787 html = html + '<hr><p>';
788 html = html + '<input type="button" value="' + kivi.t8('Yes') + '" size="30" onclick="kivi.Order.direct_delivery_callback(true)">';
789 html = html + ' ';
790 html = html + '<input type="button" value="' + kivi.t8('No') + '" size="30" onclick="kivi.Order.direct_delivery_callback(false)">';
791 html = html + '</p></div>';
792 $(html).hide().appendTo('#order_form');
794 kivi.popup_dialog({id: 'direct-delivery-dialog',
795 dialog: {title: kivi.t8('Carry over shipping address'),
800 ns.follow_up_window = function() {
801 var id = $('#id').val();
802 var type = $('#type').val();
804 var number_info = '';
805 if ($('#type').val() == 'sales_order' || $('#type').val() == 'purchase_order') {
806 number_info = $('#order_ordnumber').val();
807 } else if ($('#type').val() == 'sales_quotation' || $('#type').val() == 'request_quotation') {
808 number_info = $('#order_quonumber').val();
812 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation') {
813 name_info = $('#order_customer_id_name').val();
814 } else if ($('#type').val() == 'purchase_order' || $('#type').val() == 'request_quotation') {
815 name_info = $('#order_vendor_id_name').val();
819 if (number_info !== '') { info += ' (' + number_info + ')' }
820 if (name_info !== '') { info += ' (' + name_info + ')' }
822 if (!$('#follow_up_rowcount').lenght) {
823 $('<input type="hidden" name="follow_up_rowcount" id="follow_up_rowcount">').appendTo('#order_form');
824 $('<input type="hidden" name="follow_up_trans_id_1" id="follow_up_trans_id_1">').appendTo('#order_form');
825 $('<input type="hidden" name="follow_up_trans_type_1" id="follow_up_trans_type_1">').appendTo('#order_form');
826 $('<input type="hidden" name="follow_up_trans_info_1" id="follow_up_trans_info_1">').appendTo('#order_form');
827 $('<input type="hidden" name="follow_up_trans_subject_1" id="follow_up_trans_subject_1">').appendTo('#order_form');
829 $('#follow_up_rowcount').val(1);
830 $('#follow_up_trans_id_1').val(id);
831 $('#follow_up_trans_type_1').val(type);
832 $('#follow_up_trans_info_1').val(info);
833 $('#follow_up_trans_subject_1').val($('#order_transaction_description').val());
841 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation' ) {
842 $('#order_customer_id').change(kivi.Order.reload_cv_dependent_selections);
844 $('#order_vendor_id').change(kivi.Order.reload_cv_dependent_selections);
847 $('#order_currency_id').change(kivi.Order.update_exchangerate);
848 $('#order_transdate_as_date').change(kivi.Order.update_exchangerate);
849 $('#order_exchangerate_as_null_number').change(kivi.Order.exchangerate_changed);
851 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation' ) {
852 $('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.sellprice, -2)) });
854 $('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.lastcost, -2)) });
856 $('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_description').val(o.description) });
857 $('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_unit').val(o.unit) });
859 $('.add_item_input').keydown(function(event) {
860 if (event.keyCode == 13) {
861 event.preventDefault();
862 kivi.Order.add_item();
867 kivi.Order.init_row_handlers();
869 $('#row_table_id').on('sortstop', function(event, ui) {
870 $('#row_table_id thead a img').remove();
871 kivi.Order.renumber_positions();
874 $('#expand_all').on('click', function(event) {
875 event.preventDefault();
876 if ($('#expand_all').data('expanded') == 1) {
877 $('#expand_all').data('expanded', 0);
878 $('#expand_all').attr('src', 'image/expand.svg');
879 $('#expand_all').attr('alt', kivi.t8('Show all details'));
880 $('#expand_all').attr('title', kivi.t8('Show all details'));
881 $('.row_entry').each(function(idx, elt) {
882 kivi.Order.hide_second_row(elt);
885 $('#expand_all').data('expanded', 1);
886 $('#expand_all').attr('src', "image/collapse.svg");
887 $('#expand_all').attr('alt', kivi.t8('Hide all details'));
888 $('#expand_all').attr('title', kivi.t8('Hide all details'));
889 kivi.Order.load_all_second_rows();
890 $('.row_entry').each(function(idx, elt) {
891 kivi.Order.show_second_row(elt);
897 $('.reformat_number_as_null_number').change(kivi.Order.reformat_number_as_null_number);