From 12e42a67d0b46adf32a76815059d5a21355cbefb Mon Sep 17 00:00:00 2001 From: cosmos Date: Wed, 29 Jan 2025 16:21:40 -0500 Subject: [PATCH] Fix: Add field total_order --- sale_order.py | 45 +++++++++++++++++++++++++++++++---- tests/scenario_sale_order.rst | 3 +++ 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/sale_order.py b/sale_order.py index 55cb201..549ef2b 100644 --- a/sale_order.py +++ b/sale_order.py @@ -13,6 +13,9 @@ class SaleOrder(ModelView, ModelSQL): "Sale Order" __name__ = 'sale.order' + company = fields.Many2One( + 'company.company', "Company", required=True + ) party = fields.Many2One( 'party.party', "Party", required=True ) @@ -23,29 +26,63 @@ class SaleOrder(ModelView, ModelSQL): lines = fields.One2Many( 'order.line', 'order', 'Lines' ) - date = fields.Date("Date", required=True) + date = fields.Date("Date", required=True + ) + currency = fields.Many2One( + 'currency.currency', 'Currency', required=True + ) + total_order = fields.Function( + Monetary("Total", currency='currency', digits='currency'), + 'on_change_with_total_order' + ) + + @staticmethod + def default_company(): + return Transaction().context.get('company') @staticmethod def default_date(): return date.today() + @fields.depends('lines') + def on_change_with_total_order(self, name=None): + total = Decimal('0.0') + if self.lines: + for line in self.lines: + if line.total_amount: + total += Decimal(line.total_amount) + return total + + @classmethod + def default_currency(cls, **pattern): + pool = Pool() + Company = pool.get('company.company') + company = pattern.get('company') + if not company: + company = cls.default_company() + if company: + return Company(company).currency.id + class OrderLine(ModelView, ModelSQL): "Order Line" __name__ = 'order.line' company = fields.Many2One( - 'company.company', "Company", required=True) + 'company.company', "Company", required=True + ) order = fields.Many2One( 'sale.order', "Sale" ) currency = fields.Many2One( - 'currency.currency', 'Currency', required=True) + 'currency.currency', 'Currency', required=True + ) product = fields.Many2One( 'product.product', 'Product', required=True ) unit = fields.Many2One( - 'product.uom', 'Unit') + 'product.uom', 'Unit' + ) product_uom_category = fields.Function( fields.Many2One('product.uom.category', 'Product UOM Category'), 'on_change_with_product_uom_category' diff --git a/tests/scenario_sale_order.rst b/tests/scenario_sale_order.rst index be50dca..b304633 100644 --- a/tests/scenario_sale_order.rst +++ b/tests/scenario_sale_order.rst @@ -41,5 +41,8 @@ Create order:: >>> line1.quantity = 4.0 >>> line1.unitprice = Decimal('8400') >>> line1.total_amount = Decimal('33600') + >>> order.total_order = Decimal('33600') >>> order.save() + + \ No newline at end of file