78 lines
2.7 KiB
Python
78 lines
2.7 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.cache import Cache
|
|
from trytond.model import MatchMixin, ModelSQL, ModelView, fields
|
|
from trytond.pool import Pool
|
|
|
|
|
|
class Incoterm(MatchMixin, ModelSQL, ModelView):
|
|
__name__ = 'incoterm.incoterm'
|
|
_rec_name = 'code'
|
|
|
|
name = fields.Char("Name", required=True)
|
|
code = fields.Char("Code", required=True)
|
|
version = fields.Char("Version", required=True)
|
|
|
|
mode = fields.Selection([
|
|
(None, "Any"),
|
|
('waterway', "Sea and Inland Waterway"),
|
|
], "Mode",
|
|
help="The transport mode for which the term is available.")
|
|
carrier = fields.Selection([
|
|
('buyer', "Buyer"),
|
|
('seller', "Seller"),
|
|
], "Carrier", required=True,
|
|
help="Who contracts the main carriage.")
|
|
risk = fields.Selection([
|
|
('before', "Before"),
|
|
('after', "After"),
|
|
], "Risk", required=True,
|
|
help="When the risk is transferred relative to the main carriage.")
|
|
location = fields.Boolean(
|
|
"Location",
|
|
help="If checked then a location is required.")
|
|
|
|
companies = fields.Many2Many(
|
|
'incoterm.incoterm-company.company', 'incoterm', 'company',
|
|
"Companies",
|
|
help="The companies that can use the incoterm.")
|
|
|
|
_get_incoterms_cache = Cache(
|
|
'incoterm.incoterm.get_incoterms', context=False)
|
|
|
|
@classmethod
|
|
def get_incoterms(cls, company, pattern):
|
|
company_id = company.id if company else -1
|
|
key = (company_id,) + tuple(sorted(pattern.items()))
|
|
incoterms = cls._get_incoterms_cache.get(key)
|
|
if incoterms is not None:
|
|
return cls.browse(incoterms)
|
|
|
|
incoterms = []
|
|
for incoterm in cls.search([
|
|
('companies', '=', company_id),
|
|
]):
|
|
if incoterm.match(pattern):
|
|
incoterms.append(incoterm)
|
|
|
|
cls._get_incoterms_cache.set(key, list(map(int, incoterms)))
|
|
return incoterms
|
|
|
|
def get_rec_name(self, name):
|
|
return '%s (%s)' % (self.code, self.version)
|
|
|
|
|
|
class Incoterm_Company(ModelSQL):
|
|
__name__ = 'incoterm.incoterm-company.company'
|
|
|
|
incoterm = fields.Many2One('incoterm.incoterm', "Incoterm", required=True)
|
|
company = fields.Many2One('company.company', "Company", required=True)
|
|
|
|
@classmethod
|
|
def on_modification(cls, mode, records, field_names=None):
|
|
pool = Pool()
|
|
Incoterm = pool.get('incoterm.incoterm')
|
|
super().on_modification(mode, records, field_names=field_names)
|
|
Incoterm._get_incoterms_cache.clear()
|