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 $('#send_email_dialog').children().remove().appendTo('#email_inputs');
245 $('#send_email_dialog').dialog('close');
247 kivi.submit_form_with_action('#form', $('#form').data('send-email-action'));
252 this.setup_send_email_dialog = function() {
253 kivi.SalesPurchase.show_all_print_options_elements();
254 kivi.SalesPurchase.show_print_options_elements([ 'sendmode', 'media', 'copies', 'remove_draft' ], false);
256 $('#print_options').children().remove().appendTo('#email_form_print_options');
258 var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
259 $('#email_form_' + to_focus).focus();
262 this.finish_send_email_dialog = function() {
263 $('#email_form_print_options').children().remove().appendTo('#print_options');
267 this.show_email_dialog = function(send_action) {
268 $('#form').data('send-email-action', send_action || 'send_sales_purchase_email');
270 var vc = $('#vc').val();
272 action: 'show_sales_purchase_email_dialog',
273 cp_id: $('#cp_id').val(),
274 direct_debit: $('#direct_debit').prop('checked') ? 1 : 0,
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 cusordnumber: $('#cusordnumber').val(),
284 rowcount: $('#rowcount').val(),
285 quonumber: $('#quonumber').val(),
286 type: $('#type').val(),
288 vc_id: $('#' + vc + '_id').val(),
289 project_id: $('#globalproject_id').val(),
292 $('[name^=id_],[name^=partnumber_]').each(function(idx, elt) {
293 var val = $(elt).val() || '';
295 data[ $(elt).attr('name') ] = val;
299 id: 'send_email_dialog',
301 load: kivi.SalesPurchase.setup_send_email_dialog,
305 title: kivi.t8('Send email'),
306 beforeClose: kivi.SalesPurchase.finish_send_email_dialog
313 this.activate_send_email_actions_regarding_printout = function() {
314 var selected = $('#email_form_attachment_policy').val();
315 $('#email_form_attachment_filename').parents('tr')[selected !== 'no_file' ? 'show' : 'hide']();
316 $('#email_form_print_options')[selected === 'normal' ? 'show' : 'hide']();
320 this.setup_print_dialog = function() {
321 kivi.SalesPurchase.show_all_print_options_elements();
323 $('#print_options').children().remove().appendTo('#print_dialog_print_options');
325 $('#print_dialog_print_button').focus();
328 this.finish_print_dialog = function() {
329 $('#print_dialog_print_options').children().remove().appendTo('#print_options');
332 this.print_record = function() {
333 $('#print_dialog').dialog('close');
335 var action = $('#form').data('print-action');
336 if (action.match("^js:"))
337 return kivi.run(action.substring(3));
339 kivi.submit_form_with_action('#form', action);
342 this.show_print_dialog = function(print_action) {
343 $('#form').data('print-action', print_action || 'print');
349 title: kivi.t8('Print record'),
350 open: kivi.SalesPurchase.setup_print_dialog,
351 close: kivi.SalesPurchase.finish_print_dialog,