From 4896cbc9c810a73b8cddc82bb4d3fc4fac1861a9 Mon Sep 17 00:00:00 2001 From: Mayank Patel Date: Wed, 11 Sep 2024 05:51:31 +0000 Subject: [PATCH] [REM] website_sale_payment_terms: available in professional H14528 --- website_sale_payment_terms/__init__.py | 2 - website_sale_payment_terms/__manifest__.py | 31 ---- .../controllers/__init__.py | 1 - .../controllers/main.py | 84 --------- website_sale_payment_terms/models/__init__.py | 5 - website_sale_payment_terms/models/account.py | 7 - website_sale_payment_terms/models/payment.py | 30 ---- .../models/res_config.py | 9 - website_sale_payment_terms/models/sale.py | 29 ---- website_sale_payment_terms/models/website.py | 12 -- .../security/ir.model.access.csv | 2 - .../static/src/js/payment_terms.js | 127 -------------- website_sale_payment_terms/tests/__init__.py | 1 - .../tests/test_amount_due.py | 55 ------ .../views/account_views.xml | 15 -- .../views/res_config_views.xml | 27 --- .../views/website_templates.xml | 164 ------------------ .../views/website_views.xml | 16 -- 18 files changed, 617 deletions(-) delete mode 100644 website_sale_payment_terms/__init__.py delete mode 100644 website_sale_payment_terms/__manifest__.py delete mode 100644 website_sale_payment_terms/controllers/__init__.py delete mode 100644 website_sale_payment_terms/controllers/main.py delete mode 100644 website_sale_payment_terms/models/__init__.py delete mode 100644 website_sale_payment_terms/models/account.py delete mode 100644 website_sale_payment_terms/models/payment.py delete mode 100644 website_sale_payment_terms/models/res_config.py delete mode 100644 website_sale_payment_terms/models/sale.py delete mode 100644 website_sale_payment_terms/models/website.py delete mode 100644 website_sale_payment_terms/security/ir.model.access.csv delete mode 100644 website_sale_payment_terms/static/src/js/payment_terms.js delete mode 100644 website_sale_payment_terms/tests/__init__.py delete mode 100644 website_sale_payment_terms/tests/test_amount_due.py delete mode 100644 website_sale_payment_terms/views/account_views.xml delete mode 100644 website_sale_payment_terms/views/res_config_views.xml delete mode 100644 website_sale_payment_terms/views/website_templates.xml delete mode 100644 website_sale_payment_terms/views/website_views.xml diff --git a/website_sale_payment_terms/__init__.py b/website_sale_payment_terms/__init__.py deleted file mode 100644 index 91c5580f..00000000 --- a/website_sale_payment_terms/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import controllers -from . import models diff --git a/website_sale_payment_terms/__manifest__.py b/website_sale_payment_terms/__manifest__.py deleted file mode 100644 index 05beddc5..00000000 --- a/website_sale_payment_terms/__manifest__.py +++ /dev/null @@ -1,31 +0,0 @@ -{ - 'name': 'Website Payment Terms', - 'author': 'Hibou Corp. ', - 'category': 'Sales', - 'version': '15.0.1.0.0', - 'description': - """ -Website Payment Terms -===================== - -Allow customers to choose payment terms if order total meets a configured threshold. - """, - 'depends': [ - 'sale_payment_deposit', - # 'website_sale', - 'website_sale_delivery', - ], - 'auto_install': False, - 'data': [ - 'security/ir.model.access.csv', - 'views/account_views.xml', - 'views/res_config_views.xml', - 'views/website_templates.xml', - 'views/website_views.xml', - ], - 'assets': { - 'web.assets_frontend': [ - '/website_sale_payment_terms/static/src/js/payment_terms.js', - ], - }, -} diff --git a/website_sale_payment_terms/controllers/__init__.py b/website_sale_payment_terms/controllers/__init__.py deleted file mode 100644 index 12a7e529..00000000 --- a/website_sale_payment_terms/controllers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import main diff --git a/website_sale_payment_terms/controllers/main.py b/website_sale_payment_terms/controllers/main.py deleted file mode 100644 index 06da7806..00000000 --- a/website_sale_payment_terms/controllers/main.py +++ /dev/null @@ -1,84 +0,0 @@ -from odoo.http import request, route -from odoo.addons.website_sale_delivery.controllers.main import WebsiteSaleDelivery - - -class WebsiteSalePaymentTerms(WebsiteSaleDelivery): - - def _get_shop_payment_values(self, order, **kwargs): - values = super(WebsiteSalePaymentTerms, self)._get_shop_payment_values(order, **kwargs) - values['amount'] = order.amount_due_today - return values - - # In case payment_term_id is set by query-string in a link (from website_sale_delivery) - @route('/shop/payment', type='http', auth='public', website=True, sitemap=False) - def shop_payment(self, **post): - order = request.website.sale_get_order() - payment_term_id = post.get('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") - return super(WebsiteSalePaymentTerms, self).shop_payment(**post) - - # Main JS driven payment term updater. - @route(['/shop/update_payment_term'], type='json', auth='public', methods=['POST'], website=True, csrf=False) - def update_order_payment_term(self, **post): - order = request.website.sale_get_order() - payment_term_id = int(post['payment_term_id']) - try: - if order: - order._check_payment_term_quotation(payment_term_id) - return self._update_website_payment_term_return(order, **post) - except: - return {'error': '[101] Unable to update payment terms.'} - - # Return values after order payment_term_id is updated - def _update_website_payment_term_return(self, order, **post): - if order: - Monetary = request.env['ir.qweb.field.monetary'] - currency = order.currency_id - return { - 'payment_term_name': order.payment_term_id.name, - 'payment_term_id': order.payment_term_id.id, - 'note': order.payment_term_id.note, - 'amount_due_today': order.amount_due_today, - 'amount_due_today_html': Monetary.value_to_html(order.amount_due_today, {'display_currency': currency}), - } - return {} - - @route(['/shop/reject_term_agreement'], type='http', auth='public', website=True) - def reject_term_agreement(self, **kw): - order = request.website.sale_get_order() - if order: - order.payment_term_id = False - return request.redirect('/shop/cart') - - # Confirm order without taking payment - @route(['/shop/confirm_without_payment'], type='http', auth='public', website=True) - def confirm_without_payment(self, **post): - order = request.website.sale_get_order() - if not order: - return request.redirect('/shop') - if order.amount_due_today: - return request.redirect('/shop/payment') - - # made it this far, lets confirm - order.sudo().action_confirm() - request.session['sale_last_order_id'] = order.id - - # cleans session/context - # This should always exist, but it is possible to - if request.website and request.website.sale_reset: - request.website.sale_reset() - return request.redirect('/shop/confirmation') - - def _update_website_sale_delivery_return(self, order, **post): - res = super(WebsiteSalePaymentTerms, self)._update_website_sale_delivery_return(order, **post) - Monetary = request.env['ir.qweb.field.monetary'] - currency = order.currency_id - if order: - res['amount_due_today'] = Monetary.value_to_html(order.amount_due_today, {'display_currency': currency}) - res['amount_due_today_raw'] = order.amount_due_today - return res diff --git a/website_sale_payment_terms/models/__init__.py b/website_sale_payment_terms/models/__init__.py deleted file mode 100644 index dc24d95a..00000000 --- a/website_sale_payment_terms/models/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from . import account -from . import payment -from . import res_config -from . import sale -from . import website diff --git a/website_sale_payment_terms/models/account.py b/website_sale_payment_terms/models/account.py deleted file mode 100644 index 386c5578..00000000 --- a/website_sale_payment_terms/models/account.py +++ /dev/null @@ -1,7 +0,0 @@ -from odoo import fields, models - - -class AccountPaymentTerm(models.Model): - _inherit = 'account.payment.term' - - allow_in_website_sale = fields.Boolean('Allow in website checkout') diff --git a/website_sale_payment_terms/models/payment.py b/website_sale_payment_terms/models/payment.py deleted file mode 100644 index f9d9e1ae..00000000 --- a/website_sale_payment_terms/models/payment.py +++ /dev/null @@ -1,30 +0,0 @@ -from odoo import models, _ -import logging -_logger = logging.getLogger(__name__) - - -class PaymentTransaction(models.Model): - _inherit = 'payment.transaction' - - # Override to confirm payments totaling the amount_due_today - def _check_amount_and_confirm_order(self): - self.ensure_one() - for order in self.sale_order_ids.filtered(lambda so: so.state in ('draft', 'sent')): - amount = order.amount_due_today - if order.currency_id.compare_amounts(self.amount, amount) == 0: - order.with_context(send_email=True).action_confirm() - else: - _logger.warning( - '<%s> transaction AMOUNT MISMATCH for order %s (ID %s): expected %r, got %r', - self.acquirer_id.provider, order.name, order.id, - amount, self.amount, - ) - order.message_post( - subject=_("Amount Mismatch (%s)") % self.acquirer_id.provider, - body=_( - "The order was not confirmed despite response from the acquirer (%s): order total is %r but acquirer replied with %r.") % ( - self.acquirer_id.provider, - amount, - self.amount, - ) - ) diff --git a/website_sale_payment_terms/models/res_config.py b/website_sale_payment_terms/models/res_config.py deleted file mode 100644 index 2595876a..00000000 --- a/website_sale_payment_terms/models/res_config.py +++ /dev/null @@ -1,9 +0,0 @@ -from odoo import fields, models - - -class WebsiteConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' - - payment_deposit_threshold = fields.Monetary(string="Payment Deposit Threshold", - related="website_id.payment_deposit_threshold", - readonly=False) diff --git a/website_sale_payment_terms/models/sale.py b/website_sale_payment_terms/models/sale.py deleted file mode 100644 index 069473fd..00000000 --- a/website_sale_payment_terms/models/sale.py +++ /dev/null @@ -1,29 +0,0 @@ -from odoo import api, fields, models - - -class SaleOrder(models.Model): - _inherit = 'sale.order' - - amount_due_today = fields.Float('Due Now', compute='_compute_amount_due_today', - help='Amount due at checkout on the website.') - - @api.depends('amount_total', 'payment_term_id') - def _compute_amount_due_today(self): - 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: - term_amount = [amt for date_string, amt in order.payment_term_id.compute(order.amount_total) if date_string == today_string] - term_amount = term_amount and term_amount[0] or 0.0 - amount = term_amount if term_amount > order.amount_total_deposit else order.amount_total_deposit - order.amount_due_today = amount - - def _check_payment_term_quotation(self, payment_term_id): - self.ensure_one() - if payment_term_id and self.payment_term_id.id != payment_term_id: - # TODO how can we set a default if we can only set ones partner has assigned... - # Otherwise.. how do we prevent using any payment term by ID? - payment_term = self.env['account.payment.term'].sudo().browse(payment_term_id) - if not payment_term.exists(): - raise Exception('Could not find payment terms.') - self.payment_term_id = payment_term diff --git a/website_sale_payment_terms/models/website.py b/website_sale_payment_terms/models/website.py deleted file mode 100644 index 3388f5f1..00000000 --- a/website_sale_payment_terms/models/website.py +++ /dev/null @@ -1,12 +0,0 @@ -from odoo import fields, models - - -class Website(models.Model): - _inherit = 'website' - - payment_deposit_threshold = fields.Monetary(string='Payment Deposit Threshold', - help='Allow customers to make a deposit when their order ' - 'total is above this amount.') - - def get_payment_terms(self): - return self.env['account.payment.term'].search([('allow_in_website_sale', '=', True)]) diff --git a/website_sale_payment_terms/security/ir.model.access.csv b/website_sale_payment_terms/security/ir.model.access.csv deleted file mode 100644 index 6e51b316..00000000 --- a/website_sale_payment_terms/security/ir.model.access.csv +++ /dev/null @@ -1,2 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_account_payment_term_public,account.payment.term.public,account.model_account_payment_term,,1,0,0,0 diff --git a/website_sale_payment_terms/static/src/js/payment_terms.js b/website_sale_payment_terms/static/src/js/payment_terms.js deleted file mode 100644 index fba9adab..00000000 --- a/website_sale_payment_terms/static/src/js/payment_terms.js +++ /dev/null @@ -1,127 +0,0 @@ -odoo.define('website_sale_payment_terms.payment_terms', function (require) { - "use strict"; - - require('web.dom_ready'); - var concurrency = require('web.concurrency'); - var core = require('web.core'); - var dp = new concurrency.DropPrevious(); - var publicWidget = require('web.public.widget'); - require('website_sale_delivery.checkout'); - - - publicWidget.registry.websiteSalePaymentTerms = publicWidget.Widget.extend({ - selector: '.oe_payment_terms', - events: { - "click input[name='payment_term_id']": '_onPaymentTermClick', - "click #btn_accept_payment_terms": '_acceptPaymentTerms', - }, - - /** - * @override - */ - start: function () { - console.log('Payment Terms V10.4'); - return this._super.apply(this, arguments).then(function () { - var available_term = $('input[name="payment_term_id"]').length; - if (available_term > 0) { - 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').length > 0) { - disabledReasons.payment_terms_selection = false; - } else { - disabledReasons.payment_terms_selection = true; - } - $payButton.data('disabled_reasons', disabledReasons); - $payButton.prop('disabled', _.contains($payButton.data('disabled_reasons'), true)); - } - }); - }, - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * @private - * @param {object} ev - */ - _onPaymentTermClick: function (ev) { - 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(); - }, - - /** - * Set terms on the order - * - * @private - * @param {Object} result - */ - _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 { - // 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(); - } - 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)); - } - }, - }); - - - // update amount due after delivery options change - publicWidget.registry.websiteSaleDelivery.include({ - _handleCarrierUpdateResult: function (result) { - this._super.apply(this, arguments); - if (result.amount_due_today_raw !== undefined) { - this._updateShippingCost(result.amount_due_today_raw); - $('#order_due_today .monetary_field').html(result.amount_due_today); - } - }, - }); - - return publicWidget.registry.websiteSalePaymentTerms; -}); diff --git a/website_sale_payment_terms/tests/__init__.py b/website_sale_payment_terms/tests/__init__.py deleted file mode 100644 index a9caa7cd..00000000 --- a/website_sale_payment_terms/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import test_amount_due diff --git a/website_sale_payment_terms/tests/test_amount_due.py b/website_sale_payment_terms/tests/test_amount_due.py deleted file mode 100644 index 3c1f7677..00000000 --- a/website_sale_payment_terms/tests/test_amount_due.py +++ /dev/null @@ -1,55 +0,0 @@ -from odoo.tests import tagged, TransactionCase - - -@tagged('post_install', '-at_install') -class TestWebsiteSalePaymentTerms(TransactionCase): - def setUp(self): - super(TestWebsiteSalePaymentTerms, self).setUp() - self.env.company.currency_id = self.browse_ref('base.USD') - self.so = self.env['sale.order'].create({ - 'partner_id': self.ref('base.res_partner_12'), - 'order_line': [(0, 0, { - 'product_id': self.env['product.product'].create({'name': 'Product A', 'list_price': 100}).id, - 'product_uom_qty': 1, - 'name': 'Product A', - 'tax_id': False, - })] - }) - - def test_00_immediate(self): - # Double-check that we're asking for money if no payment terms are set - self.assertEqual(self.so.amount_due_today, self.so.amount_total) - - immediate_terms = self.browse_ref('account.account_payment_term_immediate') - self.so._check_payment_term_quotation(immediate_terms.id) - self.assertEqual(self.so.amount_due_today, self.so.amount_total) - - def test_10_thirty_percent(self): - thirty_percent_terms = self.browse_ref('account.account_payment_term_advance_60days') - self.so._check_payment_term_quotation(thirty_percent_terms.id) - self.assertEqual(self.so.amount_due_today, 30.0) - - def test_20_fifteen_days(self): - fifteen_days_terms = self.browse_ref('account.account_payment_term_15days') - self.so._check_payment_term_quotation(fifteen_days_terms.id) - self.assertEqual(self.so.amount_due_today, 0.0) - - def test_30_deposit_requested(self): - """ - Ask for deposit if deposit amount is greater - """ - thirty_percent_terms = self.browse_ref('account.account_payment_term_advance_60days') - thirty_percent_terms.deposit_percentage = 40 - thirty_percent_terms.deposit_flat = 5 - self.so._check_payment_term_quotation(thirty_percent_terms.id) - self.assertEqual(self.so.amount_due_today, 45.0) - - def test_40_low_deposit(self): - """ - Ask for terms amount if greater than requested deposit - """ - thirty_percent_terms = self.browse_ref('account.account_payment_term_advance_60days') - thirty_percent_terms.deposit_percentage = 20 - thirty_percent_terms.deposit_flat = 5 - self.so._check_payment_term_quotation(thirty_percent_terms.id) - self.assertEqual(self.so.amount_due_today, 30.0) diff --git a/website_sale_payment_terms/views/account_views.xml b/website_sale_payment_terms/views/account_views.xml deleted file mode 100644 index b480a686..00000000 --- a/website_sale_payment_terms/views/account_views.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - view.payment.term.form.inherit.website - account.payment.term - - - - - - - - - diff --git a/website_sale_payment_terms/views/res_config_views.xml b/website_sale_payment_terms/views/res_config_views.xml deleted file mode 100644 index f1cad4b4..00000000 --- a/website_sale_payment_terms/views/res_config_views.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - res.config.settings.view.form.inherit.payment.terms - res.config.settings - - - -
-
-
-
-
-
-
- -
diff --git a/website_sale_payment_terms/views/website_templates.xml b/website_sale_payment_terms/views/website_templates.xml deleted file mode 100644 index 70aa3583..00000000 --- a/website_sale_payment_terms/views/website_templates.xml +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website_sale_payment_terms/views/website_views.xml b/website_sale_payment_terms/views/website_views.xml deleted file mode 100644 index b65b4e49..00000000 --- a/website_sale_payment_terms/views/website_views.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - view.website.form.inherit.payment.terms - website - - - - - - - - - -