Files
2026-03-14 09:42:12 +00:00

82 lines
2.8 KiB
Python

# 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 fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Equal, Eval, Not, Or
class Sale(metaclass=PoolMeta):
__name__ = 'sale.sale'
price_list = fields.Many2One('product.price_list', 'Price List',
help="Use to compute the unit price of lines.",
domain=[('company', '=', Eval('company', -1))],
states={
'readonly': Or(Not(Equal(Eval('state'), 'draft')),
Bool(Eval('lines', [0]))),
})
@classmethod
def __setup__(cls):
super().__setup__()
cls.party.states['readonly'] = (cls.party.states['readonly']
| Eval('lines', [0]))
cls.lines.states['readonly'] = (cls.lines.states['readonly']
| ~Eval('party') | ~Eval('company'))
@fields.depends('company')
def on_change_party(self):
pool = Pool()
Configuration = pool.get('sale.configuration')
super().on_change_party()
if self.party and self.party.sale_price_list:
self.price_list = self.party.sale_price_list
else:
config = Configuration(1)
self.price_list = config.get_multivalue(
'sale_price_list',
company=self.company.id if self.company else None)
@fields.depends('party')
def on_change_company(self):
pool = Pool()
Configuration = pool.get('sale.configuration')
super().on_change_company()
if self.party and self.party.sale_price_list:
self.price_list = self.party.sale_price_list
else:
config = Configuration(1)
self.price_list = config.get_multivalue(
'sale_price_list',
company=self.company.id if self.company else None)
class Line(metaclass=PoolMeta):
__name__ = 'sale.line'
@classmethod
def __setup__(cls):
super().__setup__()
cls.product.context['price_list'] = Eval(
'_parent_sale', {}).get('price_list')
@fields.depends('sale', '_parent_sale.price_list')
def _get_context_sale_price(self):
context = super()._get_context_sale_price()
if self.sale:
if getattr(self.sale, 'price_list', None):
context['price_list'] = self.sale.price_list.id
return context
class OpenProduct(metaclass=PoolMeta):
__name__ = 'sale.open_product'
def _context(self):
context = super()._context()
price_lists = {r.price_list for r in self.records}
if len(price_lists) == 1:
price_list, = price_lists
if price_list:
context['price_list'] = price_list.id
return context