diff --git a/sale_calc_discount_b2c/__init__.py b/sale_calc_discount_b2c/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/sale_calc_discount_b2c/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_calc_discount_b2c/__manifest__.py b/sale_calc_discount_b2c/__manifest__.py new file mode 100644 index 0000000..c735c40 --- /dev/null +++ b/sale_calc_discount_b2c/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2021 Criptomart +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + 'name': 'Sale Calc Discount B2C', + 'summary': 'When prices are tax included, calculates the discount in price excluding tax.', + 'version': '12.0.1.0.0', + 'author': 'Criptomart', + 'depends': [ + 'sale', + ], + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/sale_calc_discount_b2c/models/__init__.py b/sale_calc_discount_b2c/models/__init__.py new file mode 100644 index 0000000..8a0dc04 --- /dev/null +++ b/sale_calc_discount_b2c/models/__init__.py @@ -0,0 +1 @@ +from . import sale diff --git a/sale_calc_discount_b2c/models/sale.py b/sale_calc_discount_b2c/models/sale.py new file mode 100644 index 0000000..4c359fb --- /dev/null +++ b/sale_calc_discount_b2c/models/sale.py @@ -0,0 +1,32 @@ +# Copyright (C) 2021: Criptomart () +# @author: Criptomart () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +#import logging + +from odoo import models, fields, api + +#_logger = logging.getLogger(__name__) + +class SaleOrderOrderLine(models.Model): + _inherit = 'sale.order.line' + + @api.depends('product_uom_qty', 'discount', 'price_unit', 'tax_id') + def _compute_amount(self): + """ + Compute the amounts of the SO line. + """ + for line in self: + + price = line.price_unit + taxes = line.tax_id.compute_all(price, line.order_id.currency_id, line.product_uom_qty, product=line.product_id, partner=line.order_id.partner_shipping_id) + if line.discount: + price_disc = taxes['total_excluded'] * (1 - (line.discount or 0.0) / 100.0) + ctx = dict(self.env.context, force_price_include=False) + taxes = line.tax_id.with_context(ctx).compute_all(price_disc, line.order_id.currency_id, line.product_uom_qty, product=line.product_id, partner=line.order_id.partner_shipping_id) + + line.update({ + 'price_tax': sum(t.get('amount', 0.0) for t in taxes.get('taxes', [])), + 'price_total': taxes['total_included'], + 'price_subtotal': taxes['total_excluded'], + })