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     kivi.init_text_editor($edit);
 
  37     $('#popup_edit_longdescription_runningnumber').html(params.runningnumber);
 
  38     $('#popup_edit_longdescription_partnumber').html(params.partnumber);
 
  40     var description = params.description.replace(/[\n\r]+/, '');
 
  41     if (description.length >= 50)
 
  42       description = description.substring(0, 50) + "…";
 
  43     $('#popup_edit_longdescription_description').html(description);
 
  46       id:    'edit_longdescription_dialog',
 
  48         title: kivi.t8('Enter longdescription'),
 
  49         open:  function() { kivi.focus_ckeditor_when_ready('#popup_edit_longdescription_input'); },
 
  50         close: function() { $('#popup_edit_longdescription_input_container').children().remove(); }
 
  55   this.set_longdescription = function() {
 
  56     if ($('#popup_edit_longdescription_input_container').data('setFunction')) {
 
  57       $('#popup_edit_longdescription_input_container').data('setFunction')($('#popup_edit_longdescription_input').val());
 
  59       $('#popup_edit_longdescription_input_container')
 
  61         .val( $('#popup_edit_longdescription_input').val() );
 
  63     $('#edit_longdescription_dialog').dialog('close');
 
  66   this.delivery_order_check_transfer_qty = function() {
 
  68     var rowcount  = $('input[name=rowcount]').val();
 
  69     for (var i = 1; i < rowcount; i++)
 
  70       if ($('#stock_in_out_qty_matches_' + i).val() != 1)
 
  76     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?'));
 
  79   this.oe_warn_save_active_periodic_invoice = function() {
 
  80     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?'));
 
  83   this.check_transaction_description = function() {
 
  84     if ($('#transaction_description').val() !== '')
 
  87     alert(kivi.t8('A transaction description is required.'));
 
  91   this.check_transport_cost_article_presence = function() {
 
  92     var $form          = $('#form');
 
  93     var wanted_part_id = $form.data('transport-cost-reminder-article-id');
 
  98     var rowcount = $('#rowcount').val() * 1;
 
  99     for (var row = 1; row <= rowcount; row++)
 
 100       if (   (($('#id_'         + row).val() * 1)   === wanted_part_id)
 
 101           && (($('#partnumber_' + row).val() || '') !== ''))
 
 104     var description = $form.data('transport-cost-reminder-article-description');
 
 105     return confirm(kivi.t8("The transport cost article '#1' is missing. Do you want to continue anyway?", [ description ]));
 
 108   this.on_submit_checks = function() {
 
 109     var $button = $(this);
 
 110     if (($button.data('check-transfer-qty') == 1) && !kivi.SalesPurchase.delivery_order_check_transfer_qty())
 
 113     if (($button.data('warn-save-active-periodic-invoice') == 1) && !kivi.SalesPurchase.oe_warn_save_active_periodic_invoice())
 
 116     if (($button.data('require-transaction-description') == 1) && !kivi.SalesPurchase.check_transaction_description())
 
 122   this.init_on_submit_checks = function() {
 
 123      $('input[type=submit]').click(kivi.SalesPurchase.on_submit_checks);
 
 126   this.set_duedate_on_reference_date_change = function(reference_field_id) {
 
 127     setTimeout(function() {
 
 129         action:     'set_duedate',
 
 130         invdate:    $('#' + reference_field_id).val(),
 
 131         duedate:    $('#duedate').val(),
 
 132         payment_id: $('#payment_id').val(),
 
 134       $.post('is.pl', data, kivi.eval_json_result);
 
 138   // Functions dialog with entering shipping addresses.
 
 139   this.shipto_addresses = [];
 
 141   this.copy_shipto_address = function () {
 
 142     var shipto = this.shipto_addresses[ $('#shipto_to_copy').val() ];
 
 143     for (var key in shipto)
 
 144       $('#' + key).val(shipto[key]);
 
 147   this.clear_shipto_fields = function() {
 
 148     var shipto = this.shipto_addresses[0];
 
 149     for (var key in shipto)
 
 150       $('#' + key).val('');
 
 151     $('#shiptocp_gender').val('m');
 
 154   this.clear_shipto_id_before_submit = function() {
 
 155     var shipto = this.shipto_addresses[0];
 
 156     for (var key in shipto)
 
 157       if ((key != 'shiptocp_gender') && ($('#' + key).val() !== '')) {
 
 158         $('#shipto_id').val('');
 
 163   this.setup_shipto_dialog = function() {
 
 164     var $dlg = $('#shipto_dialog');
 
 166     $('#shipto_dialog [name^="shipto"]').each(function(idx, elt) {
 
 167       $dlg.data("original-" + $(elt).prop("name"), $(elt).val());
 
 170     $dlg.data('confirmed', false);
 
 172     $('#shiptoname').focus();
 
 175   this.submit_custom_shipto = function() {
 
 176     $('#shipto_id').val('');
 
 177     $('#shipto_dialog').data('confirmed', true);
 
 178     $('#shipto_dialog').dialog('close');
 
 181   this.reset_shipto_fields = function() {
 
 182     var $dlg = $('#shipto_dialog');
 
 184     $('#shipto_dialog [name^="shipto"]').each(function(idx, elt) {
 
 185       $(elt).val($dlg.data("original-" + $(elt).prop("name")));
 
 189   this.finish_shipto_dialog = function() {
 
 190     if (!$('#shipto_dialog').data('confirmed'))
 
 191       kivi.SalesPurchase.reset_shipto_fields();
 
 193     $('#shipto_dialog').children().remove().appendTo('#shipto_inputs');
 
 198   this.edit_custom_shipto = function() {
 
 199     $('#shipto_inputs').children().remove().appendTo('#shipto_dialog');
 
 205         title:  kivi.t8('Edit custom shipto'),
 
 206         open:   kivi.SalesPurchase.setup_shipto_dialog,
 
 207         close:  kivi.SalesPurchase.finish_shipto_dialog,
 
 212   this.show_print_options_elements = function(elements, show) {
 
 213     $(elements).each(function(idx, elt) {
 
 214       var $elements = $('#print_options_header_' + elt + ',#print_options_input_' + elt);
 
 222   this.show_all_print_options_elements = function() {
 
 223     kivi.SalesPurchase.show_print_options_elements([ 'formname', 'language_id', 'format', 'sendmode', 'media', 'printer_id', 'copies', 'groupitems', 'remove_draft' ], true);
 
 226   // Sending records via email.
 
 227   this.check_required_email_fields = function() {
 
 228     var unset = $('#email_form_to,#email_form_subject,#email_form_message').filter(function(idx, elt) {
 
 229       return $(elt).val() === '';
 
 232     if (unset.length === 0)
 
 235     alert(kivi.t8("The recipient, subject or body is missing."));
 
 241   this.send_email = function() {
 
 242     if (!kivi.SalesPurchase.check_required_email_fields())
 
 245     $('#send_email_dialog').children().remove().appendTo('#email_inputs');
 
 246     $('#send_email_dialog').dialog('close');
 
 248     kivi.submit_form_with_action('#form', $('#form').data('send-email-action'));
 
 253   this.setup_send_email_dialog = function() {
 
 254     kivi.SalesPurchase.show_all_print_options_elements();
 
 255     kivi.SalesPurchase.show_print_options_elements([ 'sendmode', 'media', 'copies', 'remove_draft' ], false);
 
 257     $('#print_options').children().remove().appendTo('#email_form_print_options');
 
 259     var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
 
 260     $('#email_form_' + to_focus).focus();
 
 263   this.finish_send_email_dialog = function() {
 
 264     $('#email_form_print_options').children().remove().appendTo('#print_options');
 
 268   this.show_email_dialog = function(send_action) {
 
 269     $('#form').data('send-email-action', send_action || 'send_sales_purchase_email');
 
 271     var vc   = $('#vc').val();
 
 273       action:      'show_sales_purchase_email_dialog',
 
 274       cp_id:       $('#cp_id').val(),
 
 275       donumber:    $('#donumber').val(),
 
 276       format:      $('#format').val(),
 
 277       formname:    $('#formname').val(),
 
 279       invnumber:   $('#invnumber').val(),
 
 280       language_id: $('#language_id').val(),
 
 282       ordnumber:   $('#ordnumber').val(),
 
 283       rowcount:    $('#rowcount').val(),
 
 284       quonumber:   $('#quonumber').val(),
 
 285       type:        $('#type').val(),
 
 287       vc_id:       $('#' + vc + '_id').val(),
 
 290     $('[name^=id_],[name^=partnumber_]').each(function(idx, elt) {
 
 291       var val = $(elt).val() || '';
 
 293         data[ $(elt).attr('name') ] = val;
 
 297       id:     'send_email_dialog',
 
 299       load:   kivi.SalesPurchase.setup_send_email_dialog,
 
 303         title:       kivi.t8('Send email'),
 
 304         beforeClose: kivi.SalesPurchase.finish_send_email_dialog
 
 311   this.activate_send_email_actions_regarding_printout = function() {
 
 312     var selected = $('#email_form_attachment_policy').val();
 
 313     $('#email_form_attachment_filename').parents('tr')[selected !== 'no_file' ? 'show' : 'hide']();
 
 314     $('#email_form_print_options')[selected === 'normal' ? 'show' : 'hide']();
 
 318   this.setup_print_dialog = function() {
 
 319     kivi.SalesPurchase.show_all_print_options_elements();
 
 321     $('#print_options').children().remove().appendTo('#print_dialog_print_options');
 
 323     $('#print_dialog_print_button').focus();
 
 326   this.finish_print_dialog = function() {
 
 327     $('#print_dialog_print_options').children().remove().appendTo('#print_options');
 
 330   this.print_record = function() {
 
 331     $('#print_dialog').dialog('close');
 
 333     var action = $('#form').data('print-action');
 
 334     if (action.match("^js:"))
 
 335       return kivi.run(action.substring(3));
 
 337     kivi.submit_form_with_action('#form', action);
 
 340   this.show_print_dialog = function(print_action) {
 
 341     $('#form').data('print-action', print_action || 'print');
 
 347         title:  kivi.t8('Print record'),
 
 348         open:   kivi.SalesPurchase.setup_print_dialog,
 
 349         close:  kivi.SalesPurchase.finish_print_dialog,