Skip to content

Commit

Permalink
[IMP] sale_discount_display_amount: Add untaxed no discount
Browse files Browse the repository at this point in the history
  • Loading branch information
paradoxxxzero committed Jul 4, 2023
1 parent e172c6e commit 372e8a4
Show file tree
Hide file tree
Showing 17 changed files with 172 additions and 25 deletions.
2 changes: 1 addition & 1 deletion sale_discount_display_amount/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"summary": """
This addon intends to display the amount of the discount computed on
sale_order_line and sale_order level""",
"version": "14.0.1.1.0",
"version": "14.0.1.2.0",
"license": "AGPL-3",
"author": "ACSONE SA/NV,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/sale-workflow",
Expand Down
14 changes: 10 additions & 4 deletions sale_discount_display_amount/hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
_logger = logging.getLogger(__name__)

COLUMNS = (
("sale_order", "price_subtotal_no_discount"),
("sale_order", "price_total_no_discount"),
("sale_order", "discount_total"),
("sale_order_line", "price_subtotal_no_discount"),
("sale_order_line", "price_total_no_discount"),
("sale_order_line", "discount_total"),
)
Expand All @@ -29,15 +31,19 @@ def post_init_hook(cr, registry):

query = """
update sale_order_line
set price_total_no_discount = price_total
set
price_subtotal_no_discount = price_subtotal,
price_total_no_discount = price_total
where discount = 0.0
"""
cr.execute(query)

query = """
update sale_order
set price_total_no_discount = amount_total
"""
update sale_order
set
price_subtotal_no_discount = amount_untaxed,
price_total_no_discount = amount_total
"""
cr.execute(query)

query = """
Expand Down
10 changes: 8 additions & 2 deletions sale_discount_display_amount/i18n/ca.po
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,13 @@ msgid "Sales Order Line"
msgstr "Línia de comandes de vendes"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr "Subtotal sense descompte"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Total Without Discount"
msgstr "Total sense descompte"
8 changes: 7 additions & 1 deletion sale_discount_display_amount/i18n/de.po
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,14 @@ msgstr "Verkaufsauftrag"
msgid "Sales Order Line"
msgstr "Auftragsposition"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr "Zwischensumme ohne Rabatt"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Subtotal Without Discount"
msgid "Total Without Discount"
msgstr "Bruttobetrag ohne Rabatt"
8 changes: 7 additions & 1 deletion sale_discount_display_amount/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,14 @@ msgstr "Órdenes de venta"
msgid "Sales Order Line"
msgstr "Línea pedido de venta"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr "Subtotal Sin Descuento"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Subtotal Without Discount"
msgid "Total Without Discount"
msgstr "Total Sin Descuento"
8 changes: 7 additions & 1 deletion sale_discount_display_amount/i18n/es_ES.po
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,14 @@ msgstr ""
msgid "Sales Order Line"
msgstr ""

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr ""

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Subtotal Without Discount"
msgid "Total Without Discount"
msgstr ""
10 changes: 8 additions & 2 deletions sale_discount_display_amount/i18n/fr.po
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,13 @@ msgid "Sales Order Line"
msgstr "Lignes de bon de commande"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr "Sous-total sans la remise"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Total Without Discount"
msgstr "Total sans la remise"
10 changes: 8 additions & 2 deletions sale_discount_display_amount/i18n/it.po
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,13 @@ msgid "Sales Order Line"
msgstr "Riga ordine di vendita"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr "Subtotale senza sconto"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Total Without Discount"
msgstr "Totale senza sconto"
10 changes: 8 additions & 2 deletions sale_discount_display_amount/i18n/nl.po
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,13 @@ msgid "Sales Order Line"
msgstr "Verkooporder regel"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr "Subtotaal zonder korting"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Total Without Discount"
msgstr "Totaal zonder korting"
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,14 @@ msgstr ""
msgid "Sales Order Line"
msgstr ""

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr ""

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Subtotal Without Discount"
msgid "Total Without Discount"
msgstr ""
10 changes: 8 additions & 2 deletions sale_discount_display_amount/i18n/zh_CN.po
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,13 @@ msgid "Sales Order Line"
msgstr "销售订单行"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_subtotal_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_subtotal_no_discount
msgid "Subtotal Without Discount"
msgstr "没有折扣的小计"

#. module: sale_discount_display_amount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order__price_total_no_discount
#: model:ir.model.fields,field_description:sale_discount_display_amount.field_sale_order_line__price_total_no_discount
msgid "Total Without Discount"
msgstr "没有折扣的共计"
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import logging

from odoo import SUPERUSER_ID
from odoo.api import Environment

_logger = logging.getLogger(__name__)


def migrate(cr, version):
_logger.info("Compute discount columns")
env = Environment(cr, SUPERUSER_ID, {})

query = """
update sale_order_line
set
price_subtotal_no_discount = price_subtotal
where discount = 0.0
"""
cr.execute(query)

query = """
update sale_order
set
price_subtotal_no_discount = amount_untaxed
"""
cr.execute(query)

query = """
select distinct order_id from sale_order_line where discount > 0.0;
"""

cr.execute(query)
order_ids = cr.fetchall()

orders = env["sale.order"].search([("id", "in", order_ids)])
orders.mapped("order_line")._update_discount_display_fields()
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import logging

from odoo.tools.sql import column_exists, create_column

_logger = logging.getLogger(__name__)

COLUMNS = (
("sale_order", "price_subtotal_no_discount"),
("sale_order_line", "price_subtotal_no_discount"),
)


def migrate(cr, version):
for table, column in COLUMNS:
if not column_exists(cr, table, column):
_logger.info("Create discount column %s in database", column)
create_column(cr, table, column, "numeric")
19 changes: 16 additions & 3 deletions sale_discount_display_amount/models/sale_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@


class SaleOrder(models.Model):

_inherit = "sale.order"

discount_total = fields.Monetary(
Expand All @@ -14,27 +13,41 @@ class SaleOrder(models.Model):
currency_field="currency_id",
store=True,
)
price_total_no_discount = fields.Monetary(
price_subtotal_no_discount = fields.Monetary(
compute="_compute_discount_total",
string="Subtotal Without Discount",
currency_field="currency_id",
store=True,
)
price_total_no_discount = fields.Monetary(
compute="_compute_discount_total",
string="Total Without Discount",
currency_field="currency_id",
store=True,
)

@api.model
def _get_compute_discount_total_depends(self):
return ["order_line.discount_total", "order_line.price_total_no_discount"]
return [
"order_line.discount_total",
"order_line.price_subtotal_no_discount",
"order_line.price_total_no_discount",
]

@api.depends(lambda self: self._get_compute_discount_total_depends())
def _compute_discount_total(self):
for order in self:
discount_total = sum(order.order_line.mapped("discount_total"))
price_subtotal_no_discount = sum(
order.order_line.mapped("price_subtotal_no_discount")
)
price_total_no_discount = sum(
order.order_line.mapped("price_total_no_discount")
)
order.update(
{
"discount_total": discount_total,
"price_subtotal_no_discount": price_subtotal_no_discount,
"price_total_no_discount": price_total_no_discount,
}
)
10 changes: 8 additions & 2 deletions sale_discount_display_amount/models/sale_order_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,26 @@


class SaleOrderLine(models.Model):

_inherit = "sale.order.line"

discount_total = fields.Monetary(
compute="_compute_amount", string="Discount Subtotal", store=True
)
price_total_no_discount = fields.Monetary(
price_subtotal_no_discount = fields.Monetary(
compute="_compute_amount", string="Subtotal Without Discount", store=True
)
price_total_no_discount = fields.Monetary(
compute="_compute_amount", string="Total Without Discount", store=True
)

def _update_discount_display_fields(self):
for line in self:
line.price_subtotal_no_discount = 0
line.price_total_no_discount = 0
line.discount_total = 0
if not line.discount:
line.price_total_no_discount = line.price_total
line.price_subtotal_no_discount = line.price_subtotal
continue
price = line.price_unit
taxes = line.tax_id.compute_all(
Expand All @@ -31,12 +35,14 @@ def _update_discount_display_fields(self):
partner=line.order_id.partner_shipping_id,
)

price_subtotal_no_discount = taxes["total_excluded"]
price_total_no_discount = taxes["total_included"]
discount_total = price_total_no_discount - line.price_total

line.update(
{
"discount_total": discount_total,
"price_subtotal_no_discount": price_subtotal_no_discount,
"price_total_no_discount": price_total_no_discount,
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ def test_sale_discount_value(self):
first_line = so.order_line[0]
first_line.discount = 10

self.assertAlmostEqual(first_line.price_subtotal_no_discount, 30.75)
self.assertAlmostEqual(first_line.price_total_no_discount, 35.36)
self.assertAlmostEqual(first_line.discount_total, 3.53)
self.assertAlmostEqual(so.discount_total, 3.53)
self.assertAlmostEqual(so.price_subtotal_no_discount, 30.75)
self.assertAlmostEqual(so.price_total_no_discount, 35.36)
self.assertAlmostEqual(so.discount_total, 3.53)
13 changes: 13 additions & 0 deletions sale_discount_display_amount/views/sale_view.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
<?xml version="1.0" ?>
<odoo>
<record id="view_order_form" model="ir.ui.view">
<field name="inherit_id" ref="sale.view_order_form" />
<field name="model">sale.order</field>
<field name="arch" type="xml">
<xpath
expr="//field[@name='order_line']//tree//field[@name='discount']"
position="after"
>
<field name="price_subtotal_no_discount" optional="hide" />
<field name="price_total_no_discount" optional="hide" />
</xpath>
</field>
</record>
<record id="sale_order_view_form_display_discount" model="ir.ui.view">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
Expand Down

0 comments on commit 372e8a4

Please sign in to comment.