trytonpsk-crm_fiduprevisora/party.py

100 lines
3.7 KiB
Python
Raw Normal View History

2020-04-16 15:28:18 +02:00
# 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, ModelSQL, ModelView
from trytond.pool import PoolMeta, Pool
from trytond.pyson import Eval, If, In, Get, Or, Bool, Not
from trytond.transaction import Transaction
2022-01-06 20:47:07 +01:00
from operator import getitem, delitem, setitem
AFILIATION_STATE = [
('', ''),
('retirado', 'Retirado'),
('activo', 'Activo'),
('proteccion_laboral', 'Protección Laboral'),
]
TYPE_DOCUMENT = {
'Cédula de Ciudadanía': '13',
'Registro Civil': '11',
'Tarjeta de Identidad': '12',
'Cédula de Extranjería': '22',
'Salvoconducto': '47',
'Certificado de Nacido Vivo': '10',
}
2020-04-16 15:28:18 +02:00
class RegionFiduprevisora(ModelSQL, ModelView):
'Region Fiduprevisora'
__name__ = 'crm.region_fiduprevisora'
_rec_name = 'name'
name = fields.Char('Name', required=True)
2022-01-05 15:17:28 +01:00
departments = fields.Function(fields.One2Many('party.department_code', None,
2020-04-16 15:28:18 +02:00
'Departments'), 'get_departments')
def get_departments(self, name):
2022-01-05 15:17:28 +01:00
Departments = Pool().get('party.department_code')
2020-04-16 15:28:18 +02:00
departments = Departments.search([
('region', '=', self.id)
])
if departments:
return [d.id for d in departments]
else:
return []
class DepartmentCode(metaclass=PoolMeta):
__name__ = "party.department_code"
region = fields.Many2One('crm.region_fiduprevisora', 'Region')
emails = fields.One2Many('crm.fiduprevisora_department.email',
'department', 'Emails')
class DepartmentEmail(ModelSQL, ModelView):
'Department - Emails'
__name__ = 'crm.fiduprevisora_department.email'
department = fields.Many2One('party.department_code', 'Department', required=True)
email = fields.Char('Email')
class Party(metaclass=PoolMeta):
__name__ = "party.party"
is_affiliate_user = fields.Boolean('Is Affiliate User')
city_attention = fields.Many2One('party.city_code', 'City Attention', states={
'invisible': (Not(Bool(Eval('is_affiliate_user')))),
})
2022-01-06 20:47:07 +01:00
affiliation_state = fields.Selection(AFILIATION_STATE ,'Affiliation State', states={
2020-04-16 15:28:18 +02:00
'invisible': (Not(Bool(Eval('is_affiliate_user')))),
})
2022-01-06 20:47:07 +01:00
@classmethod
def __setup__(cls):
super(Party, cls).__setup__()
cls.type_document.selection.extend([('10', 'Certificado de Nacido Vivo')])
@classmethod
def import_data(cls, fields_names, data):
fields_names += ['is_affiliate_user', 'name', 'type_person', 'id']
idx_fields = {e: i for i, e in enumerate(fields_names)}
dict_af_state = {v: k for k, v in AFILIATION_STATE}
for r in data:
id = ''
id_number = r[idx_fields.get('id_number')]
parties = cls.search(['id_number', '=', id_number])
if parties:
id = parties[0].id
name = r[idx_fields.get('first_name')] + ' ' + r[idx_fields.get('second_name')]\
+ ' ' + r[idx_fields.get('first_family_name')] + ' ' + r[idx_fields.get('second_family_name')]
name = name.strip()
affiliation_state = dict_af_state.get(r[idx_fields.get('affiliation_state')])
type_doc = TYPE_DOCUMENT.get(r[idx_fields.get('type_document')])
is_affiliate_user = '0'
if affiliation_state != 'retirado':
is_affiliate_user = '1'
type_person = 'persona_natural'
r[idx_fields.get('affiliation_state')] = affiliation_state
r[idx_fields.get('type_document')] = type_doc
r += [is_affiliate_user, name, type_person, id]
return super(Party, cls).import_data(fields_names, data)