Se añade redondeo al descuento total

This commit is contained in:
sinergia 2023-09-03 19:15:20 -05:00
parent 2c9bcc82ce
commit 3b46ae9c78

34
sale.py
View File

@ -14,9 +14,10 @@ class Sale(metaclass=PoolMeta):
pizza_number = fields.Integer("Number pizza") pizza_number = fields.Integer("Number pizza")
total_discount = fields.Function( total_discount = fields.Function(
Monetary("Total Discount", digits='currency', currency='currency'), 'get_amount') Monetary(
total_discount_cache = Monetary( "Total Discount", digits='currency', currency='currency'),
"Total Discount cache", digits='currency', currency='currency') 'get_amount')
total_discount_cache = fields.Numeric("Total Discount cache", digits='currency')
@classmethod @classmethod
def __setup__(cls): def __setup__(cls):
@ -33,6 +34,25 @@ class Sale(metaclass=PoolMeta):
def default_pizza_number(cls): def default_pizza_number(cls):
return 0 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 @classmethod
def store_cache(cls, sales): def store_cache(cls, sales):
for sale in sales: for sale in sales:
@ -68,12 +88,12 @@ class Sale(metaclass=PoolMeta):
tax_amount[sale.id] = sale.tax_amount_cache tax_amount[sale.id] = sale.tax_amount_cache
total_amount[sale.id] = sale.total_amount_cache total_amount[sale.id] = sale.total_amount_cache
else: else:
untaxed_amount[sale.id] = sum( untaxed_amount[sale.id] = round(sum(
(line.amount for line in sale.lines (line.amount for line in sale.lines
if line.type == 'line'), Decimal(0)) if line.type == 'line'), Decimal(0)),2)
total_discount[sale.id] = sum( total_discount[sale.id] = round(sum(
(line.discount_amount for line in sale.lines (line.discount_amount for line in sale.lines
if line.type == 'line'), Decimal(0)) if line.type == 'line'), Decimal(0)), 2)
if compute_taxes: if compute_taxes:
tax_amount[sale.id] = sale.get_tax_amount() tax_amount[sale.id] = sale.get_tax_amount()
total_amount[sale.id] = ( total_amount[sale.id] = (