diff --git a/website_sale_payment_terms/controllers/main.py b/website_sale_payment_terms/controllers/main.py index 1c6a371a..06da7806 100644 --- a/website_sale_payment_terms/controllers/main.py +++ b/website_sale_payment_terms/controllers/main.py @@ -14,16 +14,12 @@ class WebsiteSalePaymentTerms(WebsiteSaleDelivery): def shop_payment(self, **post): order = request.website.sale_get_order() payment_term_id = post.get('payment_term_id') - if order.amount_total > request.website.payment_deposit_threshold: + if payment_term_id: + payment_term_id = int(payment_term_id) + if order: + order._check_payment_term_quotation(payment_term_id) if payment_term_id: - payment_term_id = int(payment_term_id) - if order: - order._check_payment_term_quotation(payment_term_id) - if payment_term_id: - return request.redirect("/shop/payment") - else: - order.payment_term_id = False - + return request.redirect("/shop/payment") return super(WebsiteSalePaymentTerms, self).shop_payment(**post) # Main JS driven payment term updater. diff --git a/website_sale_payment_terms/models/sale.py b/website_sale_payment_terms/models/sale.py index b75cf245..069473fd 100644 --- a/website_sale_payment_terms/models/sale.py +++ b/website_sale_payment_terms/models/sale.py @@ -9,7 +9,7 @@ class SaleOrder(models.Model): @api.depends('amount_total', 'payment_term_id') def _compute_amount_due_today(self): - today_string = fields.Date.to_string(fields.Date.today()) + today_string = fields.Date.to_string(fields.Date.context_today(self)) for order in self: amount = order.amount_total if order.website_id and order.amount_total > order.website_id.payment_deposit_threshold and order.payment_term_id: diff --git a/website_sale_payment_terms/static/src/js/payment_terms.js b/website_sale_payment_terms/static/src/js/payment_terms.js index 47e5dfd8..fba9adab 100644 --- a/website_sale_payment_terms/static/src/js/payment_terms.js +++ b/website_sale_payment_terms/static/src/js/payment_terms.js @@ -14,7 +14,6 @@ odoo.define('website_sale_payment_terms.payment_terms', function (require) { events: { "click input[name='payment_term_id']": '_onPaymentTermClick', "click #btn_accept_payment_terms": '_acceptPaymentTerms', - "click #btn_deny_payment_terms": '_denyPaymentTerms', }, /** @@ -25,10 +24,10 @@ odoo.define('website_sale_payment_terms.payment_terms', function (require) { return this._super.apply(this, arguments).then(function () { var available_term = $('input[name="payment_term_id"]').length; if (available_term > 0) { - var $payButton = $('#o_payment_form_pay'); + var $payButton = $('button[name="o_payment_submit_button"]'); $payButton.prop('disabled', true); var disabledReasons = $payButton.data('disabled_reasons') || {}; - if ($('input[name="payment_term_id"][checked]')) { + if ($('input[name="payment_term_id"]:checked').length > 0) { disabledReasons.payment_terms_selection = false; } else { disabledReasons.payment_terms_selection = true; @@ -48,76 +47,68 @@ odoo.define('website_sale_payment_terms.payment_terms', function (require) { * @param {object} ev */ _onPaymentTermClick: function (ev) { - $('#o_payment_form_pay').prop('disabled', true); - var payment_term_id = $(ev.currentTarget).val(); - var values = {'payment_term_id': payment_term_id}; - dp.add(this._rpc({ - 'route': '/shop/update_payment_term', - 'params': values, - }).then(this._onPaymentTermUpdateAnswer.bind(this))); + ev.preventDefault(); + $('button[name="o_payment_submit_button"]').prop('disabled', true); + // Get Payment Term note/description for modal + var selected_term = $(ev.currentTarget); + var note = $.parseHTML(selected_term.attr('data-note')); + if (!$(note).text()) { + note = $.parseHTML('
' + selected_term.attr('data-name') + '
'); + } + // Open agreement modal with message + $('#payment_term_agreement_modal .success-modal-note').html(note); + $('#btn_accept_payment_terms').data('payment_term_id', selected_term.val()); + $('#payment_term_agreement_modal').modal(); }, /** - * Update the total cost according to the selected shipping method - * - * @private - * @param {float} amount : The new total amount of to be paid - */ - _updatePaymentAmount: function(amount){ - core.bus.trigger('update_shipping_cost', amount); - }, - /** - * Show amount due if operation is a success + * Set terms on the order * * @private * @param {Object} result */ - _onPaymentTermUpdateAnswer: function (result) { - if (!result.error) { - // Get Payment Term note/description for modal - var note = $.parseHTML(result.note); - if (!$(note).text()) { - note = $.parseHTML('' + result.payment_term_name + '
'); - } - + _acceptPaymentTerms: function (ev) { + var payment_term_id = $(ev.currentTarget).data('payment_term_id'); + if (payment_term_id) { + dp.add(this._rpc({ + 'route': '/shop/update_payment_term', + 'params': {'payment_term_id': payment_term_id}, + }).then(this._onPaymentTermUpdateAmount.bind(this))); + } + }, + + /** + * Update amount on the page + * + * @param {Object} result + */ + _onPaymentTermUpdateAmount: function(result) { + if (result.error) { + // Open error modal + console.error(result.error); + $('#payment_term_error_modal').modal(); + } else { // Change forms based on order payment requirement + $('input[name="payment_term_id"]').filter( + (i, e)=>e.value==result.payment_term_id + ).prop('checked', true); $('#order_due_today .monetary_field').html(result.amount_due_today_html); if(result.amount_due_today == 0.0) { $('#payment_method').hide(); $('#non_payment_method').show(); } else { - this._updatePaymentAmount(result.amount_due_today); + // Update the total cost according to the selected shipping method + core.bus.trigger('update_shipping_cost', result.amount_due_today); $('#payment_method').show(); $('#non_payment_method').hide(); } - - // Open success modal with message - $('#payment_term_success_modal .success-modal-note').html(note); - $('#payment_term_success_modal').modal(); - } else { - // Open error modal - console.error(result); - $('#payment_term_error_modal').modal(); + var $payButton = $('button[name="o_payment_submit_button"]'); + var disabledReasons = $payButton.data('disabled_reasons') || {}; + disabledReasons.payment_terms_selection = false; + $payButton.data('disabled_reasons', disabledReasons); + $payButton.prop('disabled', _.contains($payButton.data('disabled_reasons'), true)); } }, - - /* - * @private - */ - _acceptPaymentTerms: function () { - var $payButton = $('#o_payment_form_pay'); - var disabledReasons = $payButton.data('disabled_reasons') || {}; - disabledReasons.payment_terms_selection = false; - $payButton.data('disabled_reasons', disabledReasons); - $payButton.prop('disabled', _.contains($payButton.data('disabled_reasons'), true)); - }, - - /* - * @private - */ - _denyPaymentTerms: function () { - window.location = '/shop/reject_term_agreement'; - }, }); diff --git a/website_sale_payment_terms/views/website_templates.xml b/website_sale_payment_terms/views/website_templates.xml index 8863b001..70aa3583 100644 --- a/website_sale_payment_terms/views/website_templates.xml +++ b/website_sale_payment_terms/views/website_templates.xml @@ -9,6 +9,8 @@