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 texteditor-space-for-toolbar" 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(id_selector) {
 
 174     id_selector = id_selector || '#shipto_id';
 
 175     $(id_selector).val('');
 
 176     $('#shipto_dialog').data('confirmed', true);
 
 177     $('#shipto_dialog').dialog('close');
 
 180   this.reset_shipto_fields = function() {
 
 181     var $dlg = $('#shipto_dialog');
 
 183     $('#shipto_dialog [name^="shipto"]').each(function(idx, elt) {
 
 184       $(elt).val($dlg.data("original-" + $(elt).prop("name")));
 
 188   this.finish_shipto_dialog = function() {
 
 189     if (!$('#shipto_dialog').data('confirmed'))
 
 190       kivi.SalesPurchase.reset_shipto_fields();
 
 192     $('#shipto_dialog').children().remove().appendTo('#shipto_inputs');
 
 197   this.edit_custom_shipto = function() {
 
 198     $('#shipto_inputs').children().remove().appendTo('#shipto_dialog');
 
 204         title:  kivi.t8('Edit custom shipto'),
 
 205         open:   kivi.SalesPurchase.setup_shipto_dialog,
 
 206         close:  kivi.SalesPurchase.finish_shipto_dialog,
 
 211   this.show_print_options_elements = function(elements, show) {
 
 212     $(elements).each(function(idx, elt) {
 
 213       var $elements = $('#print_options_header_' + elt + ',#print_options_input_' + elt);
 
 221   this.show_all_print_options_elements = function() {
 
 222     kivi.SalesPurchase.show_print_options_elements([ 'formname', 'language_id', 'format', 'sendmode', 'media', 'printer_id', 'copies', 'groupitems', 'remove_draft' ], true);
 
 225   // Sending records via email.
 
 226   this.check_required_email_fields = function() {
 
 227     var unset = $('#email_form_to,#email_form_subject,#email_form_message').filter(function(idx, elt) {
 
 228       return $(elt).val() === '';
 
 231     if (unset.length === 0)
 
 234     alert(kivi.t8("The recipient, subject or body is missing."));
 
 240   this.send_email = function() {
 
 241     if (!kivi.SalesPurchase.check_required_email_fields())
 
 244     // ckeditor gets de-initialized when removing the children from
 
 245     // the DOM. Therefore we have to manually preserve its content
 
 246     // over the children's relocation.
 
 248     var message = $('#email_form_message').val();
 
 250     $('#send_email_dialog').children().remove().appendTo('#email_inputs');
 
 251     $('#send_email_dialog').dialog('close');
 
 253     $('#email_form_message').val(message);
 
 255     kivi.submit_form_with_action('#form', $('#form').data('send-email-action'));
 
 260   this.setup_send_email_dialog = function() {
 
 261     kivi.SalesPurchase.show_all_print_options_elements();
 
 262     kivi.SalesPurchase.show_print_options_elements([ 'sendmode', 'media', 'copies', 'remove_draft' ], false);
 
 264     $('#print_options').children().remove().appendTo('#email_form_print_options');
 
 266     kivi.reinit_widgets();
 
 268     var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
 
 269     $('#email_form_' + to_focus).focus();
 
 272   this.finish_send_email_dialog = function() {
 
 273     $('#email_form_print_options').children().remove().appendTo('#print_options');
 
 277   this.show_email_dialog = function(send_action, vc, vc_id_selector) {
 
 278     $('#form').data('send-email-action', send_action || 'send_sales_purchase_email');
 
 280     vc             = vc             || $('#vc').val();
 
 281     vc_id_selector = vc_id_selector || '#' + vc + '_id';
 
 282     var vc_id = $(vc_id_selector).val();
 
 285       action:       'show_sales_purchase_email_dialog',
 
 286       cp_id:        $('#cp_id').val(),
 
 287       direct_debit: $('#direct_debit').prop('checked') ? 1 : 0,
 
 288       donumber:     $('#donumber').val(),
 
 289       format:       $('#format').val(),
 
 290       formname:     $('#formname').val(),
 
 292       invnumber:    $('#invnumber').val(),
 
 293       language_id:  $('#language_id').val(),
 
 295       ordnumber:    $('#ordnumber').val(),
 
 296       cusordnumber: $('#cusordnumber').val(),
 
 297       rowcount:     $('#rowcount').val(),
 
 298       quonumber:    $('#quonumber').val(),
 
 299       type:         $('#type').val(),
 
 302       project_id:  $('#globalproject_id').val(),
 
 305     $('[name^=id_],[name^=partnumber_]').each(function(idx, elt) {
 
 306       var val = $(elt).val() || '';
 
 308         data[ $(elt).attr('name') ] = val;
 
 312       id:     'send_email_dialog',
 
 314       load:   kivi.SalesPurchase.setup_send_email_dialog,
 
 318         title:       kivi.t8('Send email'),
 
 319         beforeClose: kivi.SalesPurchase.finish_send_email_dialog
 
 326   this.activate_send_email_actions_regarding_printout = function() {
 
 327     var selected = $('#email_form_attachment_policy').val();
 
 328     $('#email_form_attachment_filename').parents('tr')[selected !== 'no_file' ? 'show' : 'hide']();
 
 329     $('#email_form_print_options')[selected !== 'no_file' ? 'show' : 'hide']();
 
 333   this.setup_print_dialog = function() {
 
 334     kivi.SalesPurchase.show_all_print_options_elements();
 
 336     $('#print_options').children().remove().appendTo('#print_dialog_print_options');
 
 338     $('#print_dialog_print_button').focus();
 
 341   this.finish_print_dialog = function() {
 
 342     $('#print_dialog_print_options').children().remove().appendTo('#print_options');
 
 345   this.print_record = function() {
 
 346     $('#print_dialog').dialog('close');
 
 348     var action = $('#form').data('print-action');
 
 349     if (action.match("^js:"))
 
 350       return kivi.run(action.substring(3));
 
 352     kivi.submit_form_with_action('#form', action);
 
 355   this.show_print_dialog = function(print_action) {
 
 356     $('#form').data('print-action', print_action || 'print');
 
 362         title:  kivi.t8('Print record'),
 
 363         open:   kivi.SalesPurchase.setup_print_dialog,
 
 364         close:  kivi.SalesPurchase.finish_print_dialog,