1 namespace('kivi.SalesPurchase', function(ns) {
 
   2   this.edit_longdescription = function(row) {
 
   3     var $element = $('#longdescription_' + row);
 
   5     if (!$element.length) {
 
   6       console.error("kivi.SalesPurchase.edit_longdescription: Element #longdescription_" + row + " not found");
 
  10     var params = { element: $element,
 
  12                    partnumber: $('#partnumber_' + row).val() || '',
 
  13                    description: $('#description_' + row).val() || '',
 
  14                    default_longdescription: $('#longdescription_' + row).val() || ''
 
  16     this.edit_longdescription_with_params(params);
 
  19   this.edit_longdescription_with_params = function(params) {
 
  20     var $container = $('#popup_edit_longdescription_input_container');
 
  21     var $edit      = $('<textarea id="popup_edit_longdescription_input" class="texteditor-in-dialog" wrap="soft" style="width: 750px; height: 220px;"></textarea>');
 
  23     $container.children().remove();
 
  24     $container.append($edit);
 
  27       $container.data('element', params.element);
 
  29     if (params.set_function) {
 
  30       $container.data('setFunction', params.set_function);
 
  33     $edit.val(params.default_longdescription);
 
  35     $('#popup_edit_longdescription_runningnumber').html(params.runningnumber);
 
  36     $('#popup_edit_longdescription_partnumber').html(params.partnumber);
 
  38     var description = params.description.replace(/[\n\r]+/, '');
 
  39     if (description.length >= 50)
 
  40       description = description.substring(0, 50) + "…";
 
  41     $('#popup_edit_longdescription_description').html(description);
 
  44       id:    'edit_longdescription_dialog',
 
  46         title: kivi.t8('Enter longdescription'),
 
  47         open:  function() { kivi.focus_ckeditor_when_ready('#popup_edit_longdescription_input'); },
 
  48         close: function() { $('#popup_edit_longdescription_input_container').children().remove(); }
 
  53   this.set_longdescription = function() {
 
  54     if ($('#popup_edit_longdescription_input_container').data('setFunction')) {
 
  55       $('#popup_edit_longdescription_input_container').data('setFunction')($('#popup_edit_longdescription_input').val());
 
  57       $('#popup_edit_longdescription_input_container')
 
  59         .val( $('#popup_edit_longdescription_input').val() );
 
  61     $('#edit_longdescription_dialog').dialog('close');
 
  64   this.delivery_order_check_transfer_qty = function() {
 
  66     var rowcount  = $('input[name=rowcount]').val();
 
  67     for (var i = 1; i < rowcount; i++)
 
  68       if ($('#stock_in_out_qty_matches_' + i).val() != 1)
 
  74     return confirm(kivi.t8('There are still transfers not matching the qty of the delivery order. Stock operations can not be changed later. Do you really want to proceed?'));
 
  77   this.oe_warn_save_active_periodic_invoice = function() {
 
  78     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?'));
 
  81   this.check_transaction_description = function() {
 
  82     if ($('#transaction_description').val() !== '')
 
  85     alert(kivi.t8('A transaction description is required.'));
 
  89   this.check_transport_cost_article_presence = function() {
 
  90     var $form          = $('#form');
 
  91     var wanted_part_id = $form.data('transport-cost-reminder-article-id');
 
  96     var rowcount = $('#rowcount').val() * 1;
 
  97     for (var row = 1; row <= rowcount; row++)
 
  98       if (   (($('#id_'         + row).val() * 1)   === wanted_part_id)
 
  99           && (($('#partnumber_' + row).val() || '') !== ''))
 
 102     var description = $form.data('transport-cost-reminder-article-description');
 
 103     return confirm(kivi.t8("The transport cost article '#1' is missing. Do you want to continue anyway?", [ description ]));
 
 106   this.on_submit_checks = function() {
 
 107     var $button = $(this);
 
 108     if (($button.data('check-transfer-qty') == 1) && !kivi.SalesPurchase.delivery_order_check_transfer_qty())
 
 111     if (($button.data('warn-save-active-periodic-invoice') == 1) && !kivi.SalesPurchase.oe_warn_save_active_periodic_invoice())
 
 114     if (($button.data('require-transaction-description') == 1) && !kivi.SalesPurchase.check_transaction_description())
 
 120   this.init_on_submit_checks = function() {
 
 121      $('input[type=submit]').click(kivi.SalesPurchase.on_submit_checks);
 
 124   this.set_duedate_on_reference_date_change = function(reference_field_id) {
 
 125     setTimeout(function() {
 
 127         action:     'set_duedate',
 
 128         invdate:    $('#' + reference_field_id).val(),
 
 129         duedate:    $('#duedate').val(),
 
 130         payment_id: $('#payment_id').val(),
 
 132       $.post('is.pl', data, kivi.eval_json_result);
 
 136   // Functions dialog with entering shipping addresses.
 
 137   this.shipto_addresses = [];
 
 139   this.copy_shipto_address = function () {
 
 140     var shipto = this.shipto_addresses[ $('#shipto_to_copy').val() ];
 
 141     for (var key in shipto)
 
 142       $('#' + key).val(shipto[key]);
 
 145   this.clear_shipto_fields = function() {
 
 146     var shipto = this.shipto_addresses[0];
 
 147     for (var key in shipto)
 
 148       $('#' + key).val('');
 
 149     $('#shiptocp_gender').val('m');
 
 152   this.clear_shipto_id_before_submit = function() {
 
 153     var shipto = this.shipto_addresses[0];
 
 154     for (var key in shipto)
 
 155       if ((key != 'shiptocp_gender') && ($('#' + key).val() !== '')) {
 
 156         $('#shipto_id').val('');
 
 161   this.setup_shipto_dialog = function() {
 
 162     var $dlg = $('#shipto_dialog');
 
 164     $('#shipto_dialog [name^="shipto"]').each(function(idx, elt) {
 
 165       $dlg.data("original-" + $(elt).prop("name"), $(elt).val());
 
 168     $dlg.data('confirmed', false);
 
 170     $('#shiptoname').focus();
 
 173   this.submit_custom_shipto = function() {
 
 174     $('#shipto_id').val('');
 
 175     $('#shipto_dialog').data('confirmed', true);
 
 176     $('#shipto_dialog').dialog('close');
 
 179   this.reset_shipto_fields = function() {
 
 180     var $dlg = $('#shipto_dialog');
 
 182     $('#shipto_dialog [name^="shipto"]').each(function(idx, elt) {
 
 183       $(elt).val($dlg.data("original-" + $(elt).prop("name")));
 
 187   this.finish_shipto_dialog = function() {
 
 188     if (!$('#shipto_dialog').data('confirmed'))
 
 189       kivi.SalesPurchase.reset_shipto_fields();
 
 191     $('#shipto_dialog').children().remove().appendTo('#shipto_inputs');
 
 196   this.edit_custom_shipto = function() {
 
 197     $('#shipto_inputs').children().remove().appendTo('#shipto_dialog');
 
 203         title:  kivi.t8('Edit custom shipto'),
 
 204         open:   kivi.SalesPurchase.setup_shipto_dialog,
 
 205         close:  kivi.SalesPurchase.finish_shipto_dialog,
 
 210   this.show_print_options_elements = function(elements, show) {
 
 211     $(elements).each(function(idx, elt) {
 
 212       var $elements = $('#print_options_header_' + elt + ',#print_options_input_' + elt);
 
 220   this.show_all_print_options_elements = function() {
 
 221     kivi.SalesPurchase.show_print_options_elements([ 'formname', 'language_id', 'format', 'sendmode', 'media', 'printer_id', 'copies', 'groupitems', 'remove_draft' ], true);
 
 224   // Sending records via email.
 
 225   this.check_required_email_fields = function() {
 
 226     var unset = $('#email_form_to,#email_form_subject,#email_form_message').filter(function(idx, elt) {
 
 227       return $(elt).val() === '';
 
 230     if (unset.length === 0)
 
 233     alert(kivi.t8("The recipient, subject or body is missing."));
 
 239   this.send_email = function() {
 
 240     if (!kivi.SalesPurchase.check_required_email_fields())
 
 243     $('#send_email_dialog').children().remove().appendTo('#email_inputs');
 
 244     $('#send_email_dialog').dialog('close');
 
 246     kivi.submit_form_with_action('#form', $('#form').data('send-email-action'));
 
 251   this.setup_send_email_dialog = function() {
 
 252     kivi.SalesPurchase.show_all_print_options_elements();
 
 253     kivi.SalesPurchase.show_print_options_elements([ 'sendmode', 'media', 'copies', 'remove_draft' ], false);
 
 255     $('#print_options').children().remove().appendTo('#email_form_print_options');
 
 257     var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
 
 258     $('#email_form_' + to_focus).focus();
 
 261   this.finish_send_email_dialog = function() {
 
 262     $('#email_form_print_options').children().remove().appendTo('#print_options');
 
 266   this.show_email_dialog = function(send_action) {
 
 267     $('#form').data('send-email-action', send_action || 'send_sales_purchase_email');
 
 269     var vc   = $('#vc').val();
 
 271       action:      'show_sales_purchase_email_dialog',
 
 272       cp_id:       $('#cp_id').val(),
 
 273       direct_debit: $('#direct_debit').prop('checked') ? 1 : 0,
 
 274       donumber:    $('#donumber').val(),
 
 275       format:      $('#format').val(),
 
 276       formname:    $('#formname').val(),
 
 278       invnumber:   $('#invnumber').val(),
 
 279       language_id: $('#language_id').val(),
 
 281       ordnumber:   $('#ordnumber').val(),
 
 282       rowcount:    $('#rowcount').val(),
 
 283       quonumber:   $('#quonumber').val(),
 
 284       type:        $('#type').val(),
 
 286       vc_id:       $('#' + vc + '_id').val(),
 
 289     $('[name^=id_],[name^=partnumber_]').each(function(idx, elt) {
 
 290       var val = $(elt).val() || '';
 
 292         data[ $(elt).attr('name') ] = val;
 
 296       id:     'send_email_dialog',
 
 298       load:   kivi.SalesPurchase.setup_send_email_dialog,
 
 302         title:       kivi.t8('Send email'),
 
 303         beforeClose: kivi.SalesPurchase.finish_send_email_dialog
 
 310   this.activate_send_email_actions_regarding_printout = function() {
 
 311     var selected = $('#email_form_attachment_policy').val();
 
 312     $('#email_form_attachment_filename').parents('tr')[selected !== 'no_file' ? 'show' : 'hide']();
 
 313     $('#email_form_print_options')[selected === 'normal' ? 'show' : 'hide']();
 
 317   this.setup_print_dialog = function() {
 
 318     kivi.SalesPurchase.show_all_print_options_elements();
 
 320     $('#print_options').children().remove().appendTo('#print_dialog_print_options');
 
 322     $('#print_dialog_print_button').focus();
 
 325   this.finish_print_dialog = function() {
 
 326     $('#print_dialog_print_options').children().remove().appendTo('#print_options');
 
 329   this.print_record = function() {
 
 330     $('#print_dialog').dialog('close');
 
 332     var action = $('#form').data('print-action');
 
 333     if (action.match("^js:"))
 
 334       return kivi.run(action.substring(3));
 
 336     kivi.submit_form_with_action('#form', action);
 
 339   this.show_print_dialog = function(print_action) {
 
 340     $('#form').data('print-action', print_action || 'print');
 
 346         title:  kivi.t8('Print record'),
 
 347         open:   kivi.SalesPurchase.setup_print_dialog,
 
 348         close:  kivi.SalesPurchase.finish_print_dialog,