diff --git a/sale.py b/sale.py index a2db878..213c657 100644 --- a/sale.py +++ b/sale.py @@ -14,9 +14,10 @@ class Sale(metaclass=PoolMeta): pizza_number = fields.Integer("Number pizza") total_discount = fields.Function( - Monetary("Total Discount", digits='currency', currency='currency'), 'get_amount') - total_discount_cache = Monetary( - "Total Discount cache", digits='currency', currency='currency') + Monetary( + "Total Discount", digits='currency', currency='currency'), + 'get_amount') + total_discount_cache = fields.Numeric("Total Discount cache", digits='currency') @classmethod def __setup__(cls): @@ -33,6 +34,25 @@ class Sale(metaclass=PoolMeta): def default_pizza_number(cls): return 0 + @fields.depends('lines', 'currency', methods=['get_tax_amount']) + def on_change_lines(self): + self.untaxed_amount = Decimal('0.0') + self.tax_amount = Decimal('0.0') + self.total_amount = Decimal('0.0') + self.total_discount = Decimal('0.0') + + if self.lines: + for line in self.lines: + self.untaxed_amount += getattr(line, 'amount', None) or 0 + self.tax_amount = self.get_tax_amount() + if self.currency: + self.untaxed_amount = self.currency.round(self.untaxed_amount) + self.tax_amount = self.currency.round(self.tax_amount) + self.total_amount = self.untaxed_amount + self.tax_amount + if self.currency: + self.total_discount = self.currency.round(self.total_discount) + self.total_amount = self.currency.round(self.total_amount) + @classmethod def store_cache(cls, sales): for sale in sales: @@ -68,12 +88,12 @@ class Sale(metaclass=PoolMeta): tax_amount[sale.id] = sale.tax_amount_cache total_amount[sale.id] = sale.total_amount_cache else: - untaxed_amount[sale.id] = sum( + untaxed_amount[sale.id] = round(sum( (line.amount for line in sale.lines - if line.type == 'line'), Decimal(0)) - total_discount[sale.id] = sum( + if line.type == 'line'), Decimal(0)),2) + total_discount[sale.id] = round(sum( (line.discount_amount for line in sale.lines - if line.type == 'line'), Decimal(0)) + if line.type == 'line'), Decimal(0)), 2) if compute_taxes: tax_amount[sale.id] = sale.get_tax_amount() total_amount[sale.id] = (