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 kivi.init_text_editor($edit);
37 $('#popup_edit_longdescription_runningnumber').html(params.runningnumber);
38 $('#popup_edit_longdescription_partnumber').html(params.partnumber);
40 var description = params.description.replace(/[\n\r]+/, '');
41 if (description.length >= 50)
42 description = description.substring(0, 50) + "…";
43 $('#popup_edit_longdescription_description').html(description);
46 id: 'edit_longdescription_dialog',
48 title: kivi.t8('Enter longdescription'),
49 open: function() { kivi.focus_ckeditor_when_ready('#popup_edit_longdescription_input'); },
50 close: function() { $('#popup_edit_longdescription_input_container').children().remove(); }
55 this.set_longdescription = function() {
56 if ($('#popup_edit_longdescription_input_container').data('setFunction')) {
57 $('#popup_edit_longdescription_input_container').data('setFunction')($('#popup_edit_longdescription_input').val());
59 $('#popup_edit_longdescription_input_container')
61 .val( $('#popup_edit_longdescription_input').val() );
63 $('#edit_longdescription_dialog').dialog('close');
66 this.delivery_order_check_transfer_qty = function() {
68 var rowcount = $('input[name=rowcount]').val();
69 for (var i = 1; i < rowcount; i++)
70 if ($('#stock_in_out_qty_matches_' + i).val() != 1)
76 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?'));
79 this.oe_warn_save_active_periodic_invoice = function() {
80 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?'));
83 this.check_transaction_description = function() {
84 if ($('#transaction_description').val() !== '')
87 alert(kivi.t8('A transaction description is required.'));
91 this.check_transport_cost_article_presence = function() {
92 var $form = $('#form');
93 var wanted_part_id = $form.data('transport-cost-reminder-article-id');
98 var rowcount = $('#rowcount').val() * 1;
99 for (var row = 1; row <= rowcount; row++)
100 if ( (($('#id_' + row).val() * 1) === wanted_part_id)
101 && (($('#partnumber_' + row).val() || '') !== ''))
104 var description = $form.data('transport-cost-reminder-article-description');
105 return confirm(kivi.t8("The transport cost article '#1' is missing. Do you want to continue anyway?", [ description ]));
108 this.on_submit_checks = function() {
109 var $button = $(this);
110 if (($button.data('check-transfer-qty') == 1) && !kivi.SalesPurchase.delivery_order_check_transfer_qty())
113 if (($button.data('warn-save-active-periodic-invoice') == 1) && !kivi.SalesPurchase.oe_warn_save_active_periodic_invoice())
116 if (($button.data('require-transaction-description') == 1) && !kivi.SalesPurchase.check_transaction_description())
122 this.init_on_submit_checks = function() {
123 $('input[type=submit]').click(kivi.SalesPurchase.on_submit_checks);
126 this.set_duedate_on_reference_date_change = function(reference_field_id) {
127 setTimeout(function() {
129 action: 'set_duedate',
130 invdate: $('#' + reference_field_id).val(),
131 duedate: $('#duedate').val(),
132 payment_id: $('#payment_id').val(),
134 $.post('is.pl', data, kivi.eval_json_result);
138 // Functions dialog with entering shipping addresses.
139 this.shipto_addresses = [];
141 this.copy_shipto_address = function () {
142 var shipto = this.shipto_addresses[ $('#shipto_to_copy').val() ];
143 for (var key in shipto)
144 $('#' + key).val(shipto[key]);
147 this.clear_shipto_fields = function() {
148 var shipto = this.shipto_addresses[0];
149 for (var key in shipto)
150 $('#' + key).val('');
151 $('#shiptocp_gender').val('m');
154 this.clear_shipto_id_before_submit = function() {
155 var shipto = this.shipto_addresses[0];
156 for (var key in shipto)
157 if ((key != 'shiptocp_gender') && ($('#' + key).val() !== '')) {
158 $('#shipto_id').val('');
163 this.setup_shipto_dialog = function() {
164 var $dlg = $('#shipto_dialog');
166 $('#shipto_dialog [name^="shipto"]').each(function(idx, elt) {
167 $dlg.data("original-" + $(elt).prop("name"), $(elt).val());
170 $dlg.data('confirmed', false);
172 $('#shiptoname').focus();
175 this.submit_custom_shipto = function() {
176 $('#shipto_id').val('');
177 $('#shipto_dialog').data('confirmed', true);
178 $('#shipto_dialog').dialog('close');
181 this.reset_shipto_fields = function() {
182 var $dlg = $('#shipto_dialog');
184 $('#shipto_dialog [name^="shipto"]').each(function(idx, elt) {
185 $(elt).val($dlg.data("original-" + $(elt).prop("name")));
189 this.finish_shipto_dialog = function() {
190 if (!$('#shipto_dialog').data('confirmed'))
191 kivi.SalesPurchase.reset_shipto_fields();
193 $('#shipto_dialog').children().remove().appendTo('#shipto_inputs');
198 this.edit_custom_shipto = function() {
199 $('#shipto_inputs').children().remove().appendTo('#shipto_dialog');
205 title: kivi.t8('Edit custom shipto'),
206 open: kivi.SalesPurchase.setup_shipto_dialog,
207 close: kivi.SalesPurchase.finish_shipto_dialog,
212 this.show_print_options_elements = function(elements, show) {
213 $(elements).each(function(idx, elt) {
214 var $elements = $('#print_options_header_' + elt + ',#print_options_input_' + elt);
222 this.show_all_print_options_elements = function() {
223 kivi.SalesPurchase.show_print_options_elements([ 'formname', 'language_id', 'format', 'sendmode', 'media', 'printer_id', 'copies', 'groupitems', 'remove_draft' ], true);
226 // Sending records via email.
227 this.send_email = function() {
228 var unset = $('#email_form_to,#email_form_subject,#email_form_message').filter(function(idx, elt) {
229 return $(elt).val() === '';
232 if (unset.length > 0) {
233 alert(kivi.t8("The recipient, subject or body is missing."));
239 $('#send_email_dialog').children().remove().appendTo('#email_inputs');
240 $('#send_email_dialog').dialog('close');
242 kivi.submit_form_with_action('#form', 'send_sales_purchase_email');
247 this.setup_send_email_dialog = function() {
248 kivi.SalesPurchase.show_all_print_options_elements();
249 kivi.SalesPurchase.show_print_options_elements([ 'sendmode', 'media', 'copies', 'remove_draft' ], false);
251 $('#print_options').children().remove().appendTo('#email_form_print_options');
253 var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
254 $('#email_form_' + to_focus).focus();
257 this.finish_send_email_dialog = function() {
258 $('#email_form_print_options').children().remove().appendTo('#print_options');
262 this.show_email_dialog = function() {
264 id: 'send_email_dialog',
266 load: kivi.SalesPurchase.setup_send_email_dialog,
268 action: 'show_sales_purchase_email_dialog',
269 type: $('#type').val(),
270 formname: $('#formname').val(),
271 format: $('#format').val(),
273 ordnumber: $('#ordnumber').val(),
274 donumber: $('#donumber').val(),
275 invnumber: $('#invnumber').val(),
276 quonumber: $('#quonumber').val(),
277 cp_id: $('#cp_id').val(),
278 language_id: $('#language_id').val(),
282 title: kivi.t8('Send email'),
283 beforeClose: kivi.SalesPurchase.finish_send_email_dialog
291 this.setup_print_dialog = function() {
292 kivi.SalesPurchase.show_all_print_options_elements();
294 $('#print_options').children().remove().appendTo('#print_dialog_print_options');
296 $('#print_dialog_print_button').focus();
299 this.finish_print_dialog = function() {
300 $('#print_dialog_print_options').children().remove().appendTo('#print_options');
303 this.print_record = function() {
304 $('#print_dialog').dialog('close');
306 kivi.submit_form_with_action('#form', 'print');
309 this.show_print_dialog = function() {
314 title: kivi.t8('Print record'),
315 open: kivi.SalesPurchase.setup_print_dialog,
316 close: kivi.SalesPurchase.finish_print_dialog,