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(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) {
278 $('#form').data('send-email-action', send_action || 'send_sales_purchase_email');
280 var vc = $('#vc').val();
282 action: 'show_sales_purchase_email_dialog',
283 cp_id: $('#cp_id').val(),
284 direct_debit: $('#direct_debit').prop('checked') ? 1 : 0,
285 donumber: $('#donumber').val(),
286 format: $('#format').val(),
287 formname: $('#formname').val(),
289 invnumber: $('#invnumber').val(),
290 language_id: $('#language_id').val(),
292 ordnumber: $('#ordnumber').val(),
293 cusordnumber: $('#cusordnumber').val(),
294 rowcount: $('#rowcount').val(),
295 quonumber: $('#quonumber').val(),
296 type: $('#type').val(),
298 vc_id: $('#' + vc + '_id').val(),
299 project_id: $('#globalproject_id').val(),
302 $('[name^=id_],[name^=partnumber_]').each(function(idx, elt) {
303 var val = $(elt).val() || '';
305 data[ $(elt).attr('name') ] = val;
309 id: 'send_email_dialog',
311 load: kivi.SalesPurchase.setup_send_email_dialog,
315 title: kivi.t8('Send email'),
316 beforeClose: kivi.SalesPurchase.finish_send_email_dialog
323 this.activate_send_email_actions_regarding_printout = function() {
324 var selected = $('#email_form_attachment_policy').val();
325 $('#email_form_attachment_filename').parents('tr')[selected !== 'no_file' ? 'show' : 'hide']();
326 $('#email_form_print_options')[selected !== 'no_file' ? 'show' : 'hide']();
330 this.setup_print_dialog = function() {
331 kivi.SalesPurchase.show_all_print_options_elements();
333 $('#print_options').children().remove().appendTo('#print_dialog_print_options');
335 $('#print_dialog_print_button').focus();
338 this.finish_print_dialog = function() {
339 $('#print_dialog_print_options').children().remove().appendTo('#print_options');
342 this.print_record = function() {
343 $('#print_dialog').dialog('close');
345 var action = $('#form').data('print-action');
346 if (action.match("^js:"))
347 return kivi.run(action.substring(3));
349 kivi.submit_form_with_action('#form', action);
352 this.show_print_dialog = function(print_action) {
353 $('#form').data('print-action', print_action || 'print');
359 title: kivi.t8('Print record'),
360 open: kivi.SalesPurchase.setup_print_dialog,
361 close: kivi.SalesPurchase.finish_print_dialog,