first commit
This commit is contained in:
77
modules/incoterm/incoterm.py
Normal file
77
modules/incoterm/incoterm.py
Normal file
@@ -0,0 +1,77 @@
|
||||
# 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()
|
||||
Reference in New Issue
Block a user