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.check_required_email_fields = 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)
235 alert(kivi.t8("The recipient, subject or body is missing."));
241 this.send_email = function() {
242 if (!kivi.SalesPurchase.check_required_email_fields())
245 $('#send_email_dialog').children().remove().appendTo('#email_inputs');
246 $('#send_email_dialog').dialog('close');
248 kivi.submit_form_with_action('#form', $('#form').data('send-email-action'));
253 this.setup_send_email_dialog = function() {
254 kivi.SalesPurchase.show_all_print_options_elements();
255 kivi.SalesPurchase.show_print_options_elements([ 'sendmode', 'media', 'copies', 'remove_draft' ], false);
257 $('#print_options').children().remove().appendTo('#email_form_print_options');
259 var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
260 $('#email_form_' + to_focus).focus();
263 this.finish_send_email_dialog = function() {
264 $('#email_form_print_options').children().remove().appendTo('#print_options');
268 this.show_email_dialog = function(send_action) {
269 $('#form').data('send-email-action', send_action || 'send_sales_purchase_email');
272 id: 'send_email_dialog',
274 load: kivi.SalesPurchase.setup_send_email_dialog,
276 action: 'show_sales_purchase_email_dialog',
277 type: $('#type').val(),
278 formname: $('#formname').val(),
279 format: $('#format').val(),
281 ordnumber: $('#ordnumber').val(),
282 donumber: $('#donumber').val(),
283 invnumber: $('#invnumber').val(),
284 quonumber: $('#quonumber').val(),
285 cp_id: $('#cp_id').val(),
286 language_id: $('#language_id').val(),
290 title: kivi.t8('Send email'),
291 beforeClose: kivi.SalesPurchase.finish_send_email_dialog
299 this.setup_print_dialog = function() {
300 kivi.SalesPurchase.show_all_print_options_elements();
302 $('#print_options').children().remove().appendTo('#print_dialog_print_options');
304 $('#print_dialog_print_button').focus();
307 this.finish_print_dialog = function() {
308 $('#print_dialog_print_options').children().remove().appendTo('#print_options');
311 this.print_record = function() {
312 $('#print_dialog').dialog('close');
314 kivi.submit_form_with_action('#form', $('#form').data('print-action'));
317 this.show_print_dialog = function(print_action) {
318 $('#form').data('print-action', print_action || 'print');
324 title: kivi.t8('Print record'),
325 open: kivi.SalesPurchase.setup_print_dialog,
326 close: kivi.SalesPurchase.finish_print_dialog,