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 donumber: $('#donumber').val(),
274 format: $('#format').val(),
275 formname: $('#formname').val(),
277 invnumber: $('#invnumber').val(),
278 language_id: $('#language_id').val(),
280 ordnumber: $('#ordnumber').val(),
281 rowcount: $('#rowcount').val(),
282 quonumber: $('#quonumber').val(),
283 type: $('#type').val(),
285 vc_id: $('#' + vc + '_id').val(),
288 $('[name^=id_],[name^=partnumber_]').each(function(idx, elt) {
289 var val = $(elt).val() || '';
291 data[ $(elt).attr('name') ] = val;
295 id: 'send_email_dialog',
297 load: kivi.SalesPurchase.setup_send_email_dialog,
301 title: kivi.t8('Send email'),
302 beforeClose: kivi.SalesPurchase.finish_send_email_dialog
309 this.activate_send_email_actions_regarding_printout = function() {
310 var selected = $('#email_form_attachment_policy').val();
311 $('#email_form_attachment_filename').parents('tr')[selected !== 'no_file' ? 'show' : 'hide']();
312 $('#email_form_print_options')[selected === 'normal' ? 'show' : 'hide']();
316 this.setup_print_dialog = function() {
317 kivi.SalesPurchase.show_all_print_options_elements();
319 $('#print_options').children().remove().appendTo('#print_dialog_print_options');
321 $('#print_dialog_print_button').focus();
324 this.finish_print_dialog = function() {
325 $('#print_dialog_print_options').children().remove().appendTo('#print_options');
328 this.print_record = function() {
329 $('#print_dialog').dialog('close');
331 var action = $('#form').data('print-action');
332 if (action.match("^js:"))
333 return kivi.run(action.substring(3));
335 kivi.submit_form_with_action('#form', action);
338 this.show_print_dialog = function(print_action) {
339 $('#form').data('print-action', print_action || 'print');
345 title: kivi.t8('Print record'),
346 open: kivi.SalesPurchase.setup_print_dialog,
347 close: kivi.SalesPurchase.finish_print_dialog,