61 lines
1.8 KiB
Python
61 lines
1.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 Eval
|
|
from trytond.transaction import Transaction
|
|
|
|
_ANY_DATE = object()
|
|
|
|
|
|
class Country(metaclass=PoolMeta):
|
|
__name__ = 'country.country'
|
|
|
|
def in_intrastat(self, date=_ANY_DATE):
|
|
pool = Pool()
|
|
Date = pool.get('ir.date')
|
|
ModelData = pool.get('ir.model.data')
|
|
Organization = pool.get('country.organization')
|
|
|
|
ctx = {}
|
|
if date is _ANY_DATE:
|
|
ctx['active_test'] = False
|
|
else:
|
|
ctx['active_test'] = True
|
|
if date is None:
|
|
date = Date.today()
|
|
ctx['date'] = date
|
|
|
|
with Transaction().set_context(ctx):
|
|
eu = Organization(ModelData.get_id('country', 'organization_eu'))
|
|
return self in eu.countries
|
|
|
|
|
|
class Subdivision(metaclass=PoolMeta):
|
|
__name__ = 'country.subdivision'
|
|
|
|
intrastat_code = fields.Char(
|
|
"Intrastat Code",
|
|
states={
|
|
'invisible': ~Eval('country_in_intrastat'),
|
|
})
|
|
|
|
country_in_intrastat = fields.Function(
|
|
fields.Boolean("Country in Intrastat"),
|
|
'on_change_with_country_in_intrastat')
|
|
|
|
@fields.depends('country', '_parent_country.id')
|
|
def on_change_with_country_in_intrastat(self, name=None):
|
|
if self.country:
|
|
return self.country.in_intrastat()
|
|
|
|
def get_intrastat(self):
|
|
"Return the first subdivision with intrastat code in parents"
|
|
subdivision = self
|
|
while not subdivision.intrastat_code:
|
|
subdivision = subdivision.parent
|
|
if not subdivision:
|
|
break
|
|
return subdivision
|