first commit
This commit is contained in:
116
modules/sale_point/product.py
Normal file
116
modules/sale_point/product.py
Normal file
@@ -0,0 +1,116 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from trytond.model import ModelSQL, fields
|
||||
from trytond.modules.company.model import CompanyValueMixin
|
||||
from trytond.modules.product import price_digits, round_price
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
|
||||
|
||||
class _GrossPriceMixin:
|
||||
__slots__ = ()
|
||||
|
||||
@fields.depends(
|
||||
'gross_price', 'account_category', '_parent_account_category.id',
|
||||
methods=['customer_taxes_used'])
|
||||
def on_change_gross_price(self):
|
||||
pool = Pool()
|
||||
Date = pool.get('ir.date')
|
||||
Tax = pool.get('account.tax')
|
||||
if self.gross_price is None or not self.account_category:
|
||||
return
|
||||
today = Date.today()
|
||||
self.list_price = round_price(Tax.reverse_compute(
|
||||
self.gross_price,
|
||||
self.customer_taxes_used,
|
||||
today))
|
||||
|
||||
|
||||
class Template(_GrossPriceMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.template'
|
||||
|
||||
gross_price = fields.MultiValue(fields.Numeric(
|
||||
"Gross Price", digits=price_digits,
|
||||
states={
|
||||
'invisible': ~Eval('salable', False),
|
||||
},
|
||||
help="The price with default taxes included."))
|
||||
gross_prices = fields.One2Many(
|
||||
'product.gross_price', 'template', "Gross Prices")
|
||||
|
||||
@classmethod
|
||||
def multivalue_model(cls, field):
|
||||
pool = Pool()
|
||||
if field == 'gross_price':
|
||||
return pool.get('product.gross_price')
|
||||
return super().multivalue_model(field)
|
||||
|
||||
|
||||
class Product(_GrossPriceMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.product'
|
||||
|
||||
gross_price = fields.MultiValue(fields.Numeric(
|
||||
"Gross Price", digits=price_digits,
|
||||
states={
|
||||
'invisible': ~Eval('salable', False),
|
||||
},
|
||||
help="The price with default taxes included.\n"
|
||||
"Leave empty to use the gross price of the product."))
|
||||
gross_prices = fields.One2Many(
|
||||
'product.gross_price', 'product', "Gross Prices")
|
||||
gross_price_used = fields.Function(fields.Numeric(
|
||||
"Gross Price", digits=price_digits,
|
||||
help="The price with default taxes included."),
|
||||
'get_gross_price_used')
|
||||
|
||||
@classmethod
|
||||
def multivalue_model(cls, field):
|
||||
pool = Pool()
|
||||
if field == 'gross_price':
|
||||
return pool.get('product.gross_price')
|
||||
return super().multivalue_model(field)
|
||||
|
||||
def set_multivalue(self, name, value, save=True, **pattern):
|
||||
if name == 'gross_price':
|
||||
pattern.setdefault('template', self.template.id)
|
||||
return super().set_multivalue(name, value, save=save, **pattern)
|
||||
|
||||
def get_multivalue(self, name, **pattern):
|
||||
if name == 'gross_price':
|
||||
pattern.setdefault('template', self.template.id)
|
||||
return super().get_multivalue(name, **pattern)
|
||||
|
||||
@fields.depends('_parent_template.id')
|
||||
def on_change_gross_price(self):
|
||||
return super().on_change_gross_price()
|
||||
|
||||
def get_gross_price_used(self, name):
|
||||
gross_price = self.get_multivalue('gross_price')
|
||||
if gross_price is None:
|
||||
gross_price = self.template.get_multivalue('gross_price')
|
||||
return gross_price
|
||||
|
||||
|
||||
class GrossPrice(ModelSQL, CompanyValueMixin):
|
||||
__name__ = 'product.gross_price'
|
||||
template = fields.Many2One(
|
||||
'product.template', "Template", ondelete='CASCADE', required=True,
|
||||
context={
|
||||
'company': Eval('company', -1),
|
||||
},
|
||||
depends=['company'])
|
||||
product = fields.Many2One(
|
||||
'product.product', "Product", ondelete='CASCADE',
|
||||
domain=[
|
||||
('template', '=', Eval('template', -1)),
|
||||
],
|
||||
context={
|
||||
'company': Eval('company', -1),
|
||||
},
|
||||
depends=['company'])
|
||||
gross_price = fields.Numeric("Gross Price", digits=price_digits)
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls.company.required = True
|
||||
Reference in New Issue
Block a user