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 var data = $('#order_form').serializeArray();
138 data = data.concat($('[name^="email_form."]').serializeArray());
139 data = data.concat($('[name^="print_options."]').serializeArray());
140 data.push({ name: 'action', value: 'Order/send_email' });
141 $.post("controller.pl", data, kivi.eval_json_result);
144 ns.close_email_dialog = function() {
145 email_dialog.dialog("close");
148 ns.set_number_in_title = function(elt) {
149 $('#nr_in_title').html($(elt).val());
152 ns.reload_cv_dependent_selections = function() {
153 $('#order_shipto_id').val('');
154 var data = $('#order_form').serializeArray();
155 data.push({ name: 'action', value: 'Order/customer_vendor_changed' });
157 $.post("controller.pl", data, kivi.eval_json_result);
160 ns.reformat_number = function(event) {
161 $(event.target).val(kivi.format_amount(kivi.parse_amount($(event.target).val()), -2));
164 ns.reformat_number_as_null_number = function(event) {
165 if ($(event.target).val() === '') {
168 ns.reformat_number(event);
171 ns.update_exchangerate = function(event) {
172 if (!ns.check_cv()) {
173 $('#order_currency_id').val($('#old_currency_id').val());
177 var rate_input = $('#order_exchangerate_as_null_number');
178 // unset exchangerate if currency changed
179 if ($('#order_currency_id').val() !== $('#old_currency_id').val()) {
183 // only set exchangerate if unset
184 if (rate_input.val() !== '') {
188 var data = $('#order_form').serializeArray();
189 data.push({ name: 'action', value: 'Order/update_exchangerate' });
192 url: 'controller.pl',
196 success: function(data){
197 if (!data.is_standard) {
198 $('#currency_name').text(data.currency_name);
199 if (data.exchangerate) {
200 rate_input.val(data.exchangerate);
204 $('#exchangerate_settings').show();
207 $('#exchangerate_settings').hide();
209 if ($('#order_currency_id').val() != $('#old_currency_id').val() ||
210 !data.is_standard && data.exchangerate != $('#old_exchangerate').val()) {
211 kivi.display_flash('warning', kivi.t8('You have changed the currency or exchange rate. Please check prices.'));
213 $('#old_currency_id').val($('#order_currency_id').val());
214 $('#old_exchangerate').val(data.exchangerate);
219 ns.exchangerate_changed = function(event) {
220 if (kivi.parse_amount($('#order_exchangerate_as_null_number').val()) != kivi.parse_amount($('#old_exchangerate').val())) {
221 kivi.display_flash('warning', kivi.t8('You have changed the currency or exchange rate. Please check prices.'));
222 $('#old_exchangerate').val($('#order_exchangerate_as_null_number').val());
226 ns.recalc_amounts_and_taxes = function() {
227 var data = $('#order_form').serializeArray();
228 data.push({ name: 'action', value: 'Order/recalc_amounts_and_taxes' });
230 $.post("controller.pl", data, kivi.eval_json_result);
233 ns.unit_change = function(event) {
234 var row = $(event.target).parents("tbody").first();
235 var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
236 var sellprice_dom = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
237 var select_elt = $(row).find('[name="order.orderitems[].unit"]');
239 var oldval = $(select_elt).data('oldval');
240 $(select_elt).data('oldval', $(select_elt).val());
242 var data = $('#order_form').serializeArray();
243 data.push({ name: 'action', value: 'Order/unit_changed' },
244 { name: 'item_id', value: item_id_dom.val() },
245 { name: 'old_unit', value: oldval },
246 { name: 'sellprice_dom_id', value: sellprice_dom.attr('id') });
248 $.post("controller.pl", data, kivi.eval_json_result);
251 ns.update_sellprice = function(item_id, price_str) {
252 var row = $('#item_' + item_id).parents("tbody").first();
253 var price_elt = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
254 var html_elt = $(row).find('[name="sellprice_text"]');
255 price_elt.val(price_str);
256 html_elt.html(price_str);
259 ns.load_second_row = function(row) {
260 var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
261 var div_elt = $(row).find('[name="second_row"]');
263 if ($(div_elt).data('loaded') == 1) {
266 var data = $('#order_form').serializeArray();
267 data.push({ name: 'action', value: 'Order/load_second_rows' },
268 { name: 'item_ids[]', value: item_id_dom.val() });
270 $.post("controller.pl", data, kivi.eval_json_result);
273 ns.load_all_second_rows = function() {
274 var rows = $('.row_entry').filter(function(idx, elt) {
275 return $(elt).find('[name="second_row"]').data('loaded') != 1;
278 var item_ids = $.map(rows, function(elt) {
279 var item_id = $(elt).find('[name="orderitem_ids[+]"]').val();
280 return { name: 'item_ids[]', value: item_id };
283 if (item_ids.length == 0) {
287 var data = $('#order_form').serializeArray();
288 data.push({ name: 'action', value: 'Order/load_second_rows' });
289 data = data.concat(item_ids);
291 $.post("controller.pl", data, kivi.eval_json_result);
294 ns.hide_second_row = function(row) {
295 $(row).children().not(':first').hide();
296 $(row).data('expanded', 0);
297 var elt = $(row).find('.expand');
298 elt.attr('src', "image/expand.svg");
299 elt.attr('alt', kivi.t8('Show details'));
300 elt.attr('title', kivi.t8('Show details'));
303 ns.show_second_row = function(row) {
304 $(row).children().not(':first').show();
305 $(row).data('expanded', 1);
306 var elt = $(row).find('.expand');
307 elt.attr('src', "image/collapse.svg");
308 elt.attr('alt', kivi.t8('Hide details'));
309 elt.attr('title', kivi.t8('Hide details'));
312 ns.toggle_second_row = function(row) {
313 if ($(row).data('expanded') == 1) {
314 ns.hide_second_row(row);
316 ns.show_second_row(row);
320 ns.init_row_handlers = function() {
321 kivi.run_once_for('.recalc', 'on_change_recalc', function(elt) {
322 $(elt).change(ns.recalc_amounts_and_taxes);
325 kivi.run_once_for('.reformat_number', 'on_change_reformat', function(elt) {
326 $(elt).change(ns.reformat_number);
329 kivi.run_once_for('.unitselect', 'on_change_unit_with_oldval', function(elt) {
330 $(elt).data('oldval', $(elt).val());
331 $(elt).change(ns.unit_change);
334 kivi.run_once_for('.row_entry', 'on_kbd_click_show_hide', function(elt) {
335 $(elt).keydown(function(event) {
337 if (event.keyCode == 40 && event.shiftKey === true) {
339 event.preventDefault();
340 row = $(event.target).parents(".row_entry").first();
341 ns.load_second_row(row);
342 ns.show_second_row(row);
345 if (event.keyCode == 38 && event.shiftKey === true) {
347 event.preventDefault();
348 row = $(event.target).parents(".row_entry").first();
349 ns.hide_second_row(row);
355 kivi.run_once_for('.expand', 'expand_second_row', function(elt) {
356 $(elt).click(function(event) {
357 event.preventDefault();
358 var row = $(event.target).parents(".row_entry").first();
359 ns.load_second_row(row);
360 ns.toggle_second_row(row);
367 ns.redisplay_line_values = function(is_sales, data) {
368 $('.row_entry').each(function(idx, elt) {
369 $(elt).find('[name="linetotal"]').html(data[idx][0]);
370 if (is_sales && $(elt).find('[name="second_row"]').data('loaded') == 1) {
371 var mt = data[idx][1];
372 var mp = data[idx][2];
374 if (mt[0] === '-') h += ' class="plus0"';
375 h += '>' + mt + ' ' + mp + '%';
377 $(elt).find('[name="linemargin"]').html(h);
382 ns.redisplay_cvpartnumbers = function(data) {
383 $('.row_entry').each(function(idx, elt) {
384 $(elt).find('[name="cvpartnumber"]').html(data[idx][0]);
388 ns.renumber_positions = function() {
389 $('.row_entry [name="position"]').each(function(idx, elt) {
392 $('.row_entry').each(function(idx, elt) {
393 $(elt).data("position", idx+1);
397 ns.reorder_items = function(order_by) {
398 var dir = $('#' + order_by + '_header_id a img').attr("data-sort-dir");
399 $('#row_table_id thead a img').remove();
404 src = "image/up.png";
407 src = "image/down.png";
410 $('#' + order_by + '_header_id a').append('<img border=0 data-sort-dir=' + dir + ' src=' + src + ' alt="' + kivi.t8('sort items') + '">');
412 var data = $('#order_form').serializeArray();
413 data.push({ name: 'action', value: 'Order/reorder_items' },
414 { name: 'order_by', value: order_by },
415 { name: 'sort_dir', value: dir });
417 $.post("controller.pl", data, kivi.eval_json_result);
420 ns.redisplay_items = function(data) {
421 var old_rows = $('.row_entry').detach();
423 $(data).each(function(idx, elt) {
424 new_rows.push(old_rows[elt.old_pos - 1]);
426 $(new_rows).appendTo($('#row_table_id'));
427 ns.renumber_positions();
430 ns.get_insert_before_item_id = function(wanted_pos) {
431 if (wanted_pos === '') return;
433 var insert_before_item_id;
434 // selection by data does not seem to work if data is changed at runtime
435 // var elt = $('.row_entry [data-position="' + wanted_pos + '"]');
436 $('.row_entry').each(function(idx, elt) {
437 if ($(elt).data("position") == wanted_pos) {
438 insert_before_item_id = $(elt).find('[name="orderitem_ids[+]"]').val();
443 return insert_before_item_id;
446 ns.add_item = function() {
447 if ($('#add_item_parts_id').val() === '') return;
448 if (!ns.check_cv()) return;
450 $('#row_table_id thead a img').remove();
452 var insert_before_item_id = ns.get_insert_before_item_id($('#add_item_position').val());
454 var data = $('#order_form').serializeArray();
455 data.push({ name: 'action', value: 'Order/add_item' },
456 { name: 'insert_before_item_id', value: insert_before_item_id });
458 $.post("controller.pl", data, kivi.eval_json_result);
461 ns.open_multi_items_dialog = function() {
462 if (!ns.check_cv()) return;
464 var pp = $("#add_item_parts_id").data("part_picker");
469 ns.add_multi_items = function(data) {
470 var insert_before_item_id = ns.get_insert_before_item_id($('#multi_items_position').val());
471 data = data.concat($('#order_form').serializeArray());
472 data.push({ name: 'action', value: 'Order/add_multi_items' },
473 { name: 'insert_before_item_id', value: insert_before_item_id });
474 $.post("controller.pl", data, kivi.eval_json_result);
477 ns.delete_order_item_row = function(clicked) {
478 var row = $(clicked).parents("tbody").first();
481 ns.renumber_positions();
482 ns.recalc_amounts_and_taxes();
485 ns.row_table_scroll_down = function() {
486 $('#row_table_scroll_id').scrollTop($('#row_table_scroll_id')[0].scrollHeight);
489 ns.show_longdescription_dialog = function(clicked) {
490 var row = $(clicked).parents("tbody").first();
491 var position = $(row).find('[name="position"]').html();
492 var partnumber = $(row).find('[name="partnumber"]').html();
493 var description_elt = $(row).find('[name="order.orderitems[].description"]');
494 var longdescription_elt = $(row).find('[name="order.orderitems[].longdescription"]');
497 runningnumber: position,
498 partnumber: partnumber,
499 description: description_elt.val(),
500 default_longdescription: longdescription_elt.val(),
501 set_function: function(val) {
502 longdescription_elt.val(val);
506 kivi.SalesPurchase.edit_longdescription_with_params(params);
509 ns.price_chooser_item_row = function(clicked) {
510 if (!ns.check_cv()) return;
511 var row = $(clicked).parents("tbody").first();
512 var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
514 var data = $('#order_form').serializeArray();
515 data.push({ name: 'action', value: 'Order/price_popup' },
516 { name: 'item_id', value: item_id_dom.val() });
518 $.post("controller.pl", data, kivi.eval_json_result);
521 ns.update_price_source = function(item_id, source, descr, price_str, price_editable) {
522 var row = $('#item_' + item_id).parents("tbody").first();
523 var source_elt = $(row).find('[name="order.orderitems[].active_price_source"]');
524 var button_elt = $(row).find('[name="price_chooser_button"]');
526 button_elt.val(button_elt.val().replace(/.*\|/, descr + " |"));
527 source_elt.val(source);
529 var editable_div_elt = $(row).find('[name="editable_price"]');
530 var not_editable_div_elt = $(row).find('[name="not_editable_price"]');
531 if (price_editable == 1 && source === '') {
533 $(editable_div_elt).show();
534 $(not_editable_div_elt).hide();
535 $(editable_div_elt).find(':input').prop("disabled", false);
536 $(not_editable_div_elt).find(':input').prop("disabled", true);
539 $(editable_div_elt).hide();
540 $(not_editable_div_elt).show();
541 $(editable_div_elt).find(':input').prop("disabled", true);
542 $(not_editable_div_elt).find(':input').prop("disabled", false);
546 var price_elt = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
547 var html_elt = $(row).find('[name="sellprice_text"]');
548 price_elt.val(price_str);
549 html_elt.html(price_str);
550 ns.recalc_amounts_and_taxes();
553 kivi.io.close_dialog();
556 ns.update_discount_source = function(item_id, source, descr, discount_str, price_editable) {
557 var row = $('#item_' + item_id).parents("tbody").first();
558 var source_elt = $(row).find('[name="order.orderitems[].active_discount_source"]');
559 var button_elt = $(row).find('[name="price_chooser_button"]');
561 button_elt.val(button_elt.val().replace(/\|.*/, "| " + descr));
562 source_elt.val(source);
564 var editable_div_elt = $(row).find('[name="editable_discount"]');
565 var not_editable_div_elt = $(row).find('[name="not_editable_discount"]');
566 if (price_editable == 1 && source === '') {
568 $(editable_div_elt).show();
569 $(not_editable_div_elt).hide();
570 $(editable_div_elt).find(':input').prop("disabled", false);
571 $(not_editable_div_elt).find(':input').prop("disabled", true);
574 $(editable_div_elt).hide();
575 $(not_editable_div_elt).show();
576 $(editable_div_elt).find(':input').prop("disabled", true);
577 $(not_editable_div_elt).find(':input').prop("disabled", false);
581 var discount_elt = $(row).find('[name="order.orderitems[].discount_as_percent"]');
582 var html_elt = $(row).find('[name="discount_text"]');
583 discount_elt.val(discount_str);
584 html_elt.html(discount_str);
585 ns.recalc_amounts_and_taxes();
588 kivi.io.close_dialog();
591 ns.show_periodic_invoices_config_dialog = function() {
592 if ($('#type').val() !== 'sales_order') return;
595 url: 'controller.pl?action=Order/show_periodic_invoices_config_dialog',
596 data: { type: $('#type').val(),
598 config: $('#order_periodic_invoices_config').val(),
599 customer_id: $('#order_customer_id').val(),
600 transdate_as_date: $('#order_transdate_as_date').val(),
601 language_id: $('#language_id').val()
603 id: 'jq_periodic_invoices_config_dialog',
604 load: kivi.reinit_widgets,
606 title: kivi.t8('Edit the configuration for periodic invoices'),
614 ns.close_periodic_invoices_config_dialog = function() {
615 $('#jq_periodic_invoices_config_dialog').dialog('close');
618 ns.assign_periodic_invoices_config = function() {
619 var data = $('[name="Form"]').serializeArray();
620 data.push({ name: 'type', value: $('#type').val() },
621 { name: 'action', value: 'Order/assign_periodic_invoices_config' });
622 $.post("controller.pl", data, kivi.eval_json_result);
625 ns.check_save_active_periodic_invoices = function() {
626 var type = $('#type').val();
627 if (type !== 'sales_order') return true;
631 url: 'controller.pl',
632 data: { action: 'Order/get_has_active_periodic_invoices',
635 config: $('#order_periodic_invoices_config').val(),
640 success: function(val) {
646 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?'));
652 ns.show_vc_details_dialog = function() {
653 if (!ns.check_cv()) return;
657 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation' ) {
659 vc_id = $('#order_customer_id').val();
660 title = kivi.t8('Customer details');
663 vc_id = $('#order_vendor_id').val();
664 title = kivi.t8('Vendor details');
668 url: 'controller.pl',
669 data: { action: 'Order/show_customer_vendor_details_dialog',
670 type : $('#type').val(),
674 id: 'jq_customer_vendor_details_dialog',
684 ns.update_row_from_master_data = function(clicked) {
685 var row = $(clicked).parents("tbody").first();
686 var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
688 var data = $('#order_form').serializeArray();
689 data.push({ name: 'action', value: 'Order/update_row_from_master_data' });
690 data.push({ name: 'item_ids[]', value: item_id_dom.val() });
692 $.post("controller.pl", data, kivi.eval_json_result);
695 ns.update_all_rows_from_master_data = function() {
696 var item_ids = $.map($('.row_entry'), function(elt) {
697 var item_id = $(elt).find('[name="orderitem_ids[+]"]').val();
698 return { name: 'item_ids[]', value: item_id };
701 if (item_ids.length == 0) {
705 var data = $('#order_form').serializeArray();
706 data.push({ name: 'action', value: 'Order/update_row_from_master_data' });
707 data = data.concat(item_ids);
709 $.post("controller.pl", data, kivi.eval_json_result);
712 ns.show_calculate_qty_dialog = function(clicked) {
713 var row = $(clicked).parents("tbody").first();
714 var input_id = $(row).find('[name="order.orderitems[].qty_as_number"]').attr('id');
715 var formula_id = $(row).find('[name="formula[+]"]').attr('id');
717 calculate_qty_selection_dialog("", input_id, "", formula_id);
721 ns.edit_custom_shipto = function() {
722 if (!ns.check_cv()) return;
724 kivi.SalesPurchase.edit_custom_shipto();
727 ns.purchase_order_check_for_direct_delivery = function() {
728 if ($('#type').val() != 'sales_order') {
729 kivi.submit_form_with_action($('#order_form'), 'Order/purchase_order');
734 if ($('#order_shipto_id').val() !== '') {
736 shipto = $('#order_shipto_id option:selected').text();
738 $('#shipto_inputs [id^="shipto"]').each(function(idx, elt) {
739 if (!empty) return true;
740 if (/^shipto_to_copy/.test($(elt).prop('id'))) return true;
741 if (/^shiptocp_gender/.test($(elt).prop('id'))) return true;
742 if (/^shiptocvar_/.test($(elt).prop('id'))) return true;
743 if ($(elt).val() !== '') {
748 var shipto_elements = [];
749 $([$('#shiptoname').val(), $('#shiptostreet').val(), $('#shiptozipcode').val(), $('#shiptocity').val()]).each(function(idx, elt) {
750 if (elt !== '') shipto_elements.push(elt);
752 shipto = shipto_elements.join('; ');
757 ns.direct_delivery_dialog(shipto);
759 kivi.submit_form_with_action($('#order_form'), 'Order/purchase_order');
763 ns.direct_delivery_callback = function(accepted) {
764 $('#direct-delivery-dialog').dialog('close');
767 $('<input type="hidden" name="use_shipto">').appendTo('#order_form').val('1');
770 kivi.submit_form_with_action($('#order_form'), 'Order/purchase_order');
773 ns.direct_delivery_dialog = function(shipto) {
774 $('#direct-delivery-dialog').remove();
776 var text1 = kivi.t8('You have entered or selected the following shipping address for this customer:');
777 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?');
778 var html = '<div id="direct-delivery-dialog"><p>' + text1 + '</p><p>' + shipto + '</p><p>' + text2 + '</p>';
779 html = html + '<hr><p>';
780 html = html + '<input type="button" value="' + kivi.t8('Yes') + '" size="30" onclick="kivi.Order.direct_delivery_callback(true)">';
781 html = html + ' ';
782 html = html + '<input type="button" value="' + kivi.t8('No') + '" size="30" onclick="kivi.Order.direct_delivery_callback(false)">';
783 html = html + '</p></div>';
784 $(html).hide().appendTo('#order_form');
786 kivi.popup_dialog({id: 'direct-delivery-dialog',
787 dialog: {title: kivi.t8('Carry over shipping address'),
792 ns.follow_up_window = function() {
793 var id = $('#id').val();
794 var type = $('#type').val();
796 var number_info = '';
797 if ($('#type').val() == 'sales_order' || $('#type').val() == 'purchase_order') {
798 number_info = $('#order_ordnumber').val();
799 } else if ($('#type').val() == 'sales_quotation' || $('#type').val() == 'request_quotation') {
800 number_info = $('#order_quonumber').val();
804 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation') {
805 name_info = $('#order_customer_id_name').val();
806 } else if ($('#type').val() == 'purchase_order' || $('#type').val() == 'request_quotation') {
807 name_info = $('#order_vendor_id_name').val();
811 if (number_info !== '') { info += ' (' + number_info + ')' }
812 if (name_info !== '') { info += ' (' + name_info + ')' }
814 if (!$('#follow_up_rowcount').lenght) {
815 $('<input type="hidden" name="follow_up_rowcount" id="follow_up_rowcount">').appendTo('#order_form');
816 $('<input type="hidden" name="follow_up_trans_id_1" id="follow_up_trans_id_1">').appendTo('#order_form');
817 $('<input type="hidden" name="follow_up_trans_type_1" id="follow_up_trans_type_1">').appendTo('#order_form');
818 $('<input type="hidden" name="follow_up_trans_info_1" id="follow_up_trans_info_1">').appendTo('#order_form');
819 $('<input type="hidden" name="follow_up_trans_subject_1" id="follow_up_trans_subject_1">').appendTo('#order_form');
821 $('#follow_up_rowcount').val(1);
822 $('#follow_up_trans_id_1').val(id);
823 $('#follow_up_trans_type_1').val(type);
824 $('#follow_up_trans_info_1').val(info);
825 $('#follow_up_trans_subject_1').val($('#order_transaction_description').val());
833 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation' ) {
834 $('#order_customer_id').change(kivi.Order.reload_cv_dependent_selections);
836 $('#order_vendor_id').change(kivi.Order.reload_cv_dependent_selections);
839 $('#order_currency_id').change(kivi.Order.update_exchangerate);
840 $('#order_transdate_as_date').change(kivi.Order.update_exchangerate);
841 $('#order_exchangerate_as_null_number').change(kivi.Order.exchangerate_changed);
843 if ($('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation' ) {
844 $('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.sellprice, -2)) });
846 $('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.lastcost, -2)) });
848 $('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_description').val(o.description) });
849 $('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_unit').val(o.unit) });
851 $('.add_item_input').keydown(function(event) {
852 if (event.keyCode == 13) {
853 event.preventDefault();
854 kivi.Order.add_item();
859 kivi.Order.init_row_handlers();
861 $('#row_table_id').on('sortstop', function(event, ui) {
862 $('#row_table_id thead a img').remove();
863 kivi.Order.renumber_positions();
866 $('#expand_all').on('click', function(event) {
867 event.preventDefault();
868 if ($('#expand_all').data('expanded') == 1) {
869 $('#expand_all').data('expanded', 0);
870 $('#expand_all').attr('src', 'image/expand.svg');
871 $('#expand_all').attr('alt', kivi.t8('Show all details'));
872 $('#expand_all').attr('title', kivi.t8('Show all details'));
873 $('.row_entry').each(function(idx, elt) {
874 kivi.Order.hide_second_row(elt);
877 $('#expand_all').data('expanded', 1);
878 $('#expand_all').attr('src', "image/collapse.svg");
879 $('#expand_all').attr('alt', kivi.t8('Hide all details'));
880 $('#expand_all').attr('title', kivi.t8('Hide all details'));
881 kivi.Order.load_all_second_rows();
882 $('.row_entry').each(function(idx, elt) {
883 kivi.Order.show_second_row(elt);
889 $('.reformat_number_as_null_number').change(kivi.Order.reformat_number_as_null_number);