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,