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,