trytond-sale_discount_visible/sale.py

52 lines
1.9 KiB
Python
Raw Normal View History

2014-01-08 14:34:23 +01:00
# This file is part of the sale_discount_visible module for Tryton.
# The COPYRIGHT file at the top level of this repository contains the full
# copyright notices and license terms.
from decimal import Decimal
from trytond.pool import Pool, PoolMeta
2015-08-24 22:24:59 +02:00
from trytond.model import fields
2014-01-08 14:34:23 +01:00
__all__ = ['SaleLine']
2018-09-15 18:12:39 +02:00
class SaleLine(metaclass=PoolMeta):
2014-01-08 14:34:23 +01:00
__name__ = 'sale.line'
def update_prices_visible_discount(self):
Product = Pool().get('product.product')
2015-08-24 22:24:59 +02:00
unit_price = self.gross_unit_price
2015-09-16 13:20:33 +02:00
unit_price_wo_round = self.gross_unit_price_wo_round
discount = Decimal(0)
2015-08-24 22:24:59 +02:00
prices = Product.get_sale_price([self.product], self.quantity or 0)
gross_unit_price = prices[self.product.id]
2015-09-16 13:20:33 +02:00
if gross_unit_price:
unit_price_digits = self.__class__.gross_unit_price.digits[1]
discount_digits = self.__class__.discount.digits[1]
2015-09-16 13:20:33 +02:00
discount = 1 - (unit_price_wo_round / gross_unit_price)
discount = discount.quantize(
Decimal(str(10.0 ** -discount_digits)))
2015-09-16 13:20:33 +02:00
gross_unit_price = gross_unit_price.quantize(
Decimal(str(10.0 ** -unit_price_digits)))
2015-08-24 22:24:59 +02:00
self.gross_unit_price = gross_unit_price
self.discount = discount
self.unit_price = unit_price
@fields.depends('gross_unit_price', 'gross_unit_price_wo_round')
def on_change_product(self):
2015-08-24 22:24:59 +02:00
super(SaleLine, self).on_change_product()
if not self.product:
return
if self.gross_unit_price:
self.gross_unit_price_wo_round = self.gross_unit_price_wo_round
self.update_prices_visible_discount()
2015-08-24 22:24:59 +02:00
@fields.depends('gross_unit_price', 'gross_unit_price_wo_round')
def on_change_quantity(self):
2015-08-24 22:24:59 +02:00
super(SaleLine, self).on_change_quantity()
if self.gross_unit_price:
self.gross_unit_price_wo_round = self.gross_unit_price_wo_round
self.update_prices_visible_discount()