from collections import defaultdict from trytond.pool import Pool from trytond.model import ( Workflow, ModelSQL, ModelView, Unique, fields) from trytond.pyson import Eval, If from trytond.transaction import Transaction from trytond.i18n import gettext #from .exceptions import NotSequenceEquipment from trytond.exceptions import UserError _MAINTENANCE_FREQUENCY = [(6, 'Seis Meses'), (12, 'Doce Meses')] class OpticalEquipment(Workflow, ModelSQL, ModelView): 'Optical Equipment' __name__ = 'optical_equipment.equipment' code = fields.Char( "Code", select=True,states={'readonly': True }) state = fields.Selection([ ('draft', "Draft"), ('registred', "Registred"), ('contrated', "Contrated") ], "State", required=True, readonly=True, sort=False) company = fields.Many2One('company.company', "Company", readonly=True) location = fields.Many2One('stock.location', "Location", states={'readonly': Eval('state') != 'draft',},) propietary = fields.Many2One('party.party',"Propietary",'party', states={'readonly': Eval('state') != 'draft',},) propietary_address = fields.Many2One('party.address', "Propietary Address", required=True, domain=[('party', '=', Eval('propietary'))], states={'readonly': Eval('state') != 'draft',} ) product = fields.Many2One('product.product', "Product", domain=[('equipment', '=', True)], states={'readonly': Eval('state') != 'draft',}, depends=['equipment'] ) refurbish = fields.Boolean("Refurbish", states={'readonly': Eval('state') != 'draft',},) equipment_type = fields.Char('type', states={'readonly': If('product', True)}) risk = fields.Char('Type risk',states={'readonly': If('product', True)}) use = fields.Char('Use', states={'readonly': If('product', True)}) biomedical_class = fields.Char('Biomedical Class', states={'readonly': If('product', True)}) main_tecnology = fields.Char('Main tecnology', states={'readonly': If('product', True)}) calibration = fields.Boolean("Apply calibration", states={'readonly': If('product', True)}) mark_category = fields.Many2One('product.category', 'Mark', required=True, domain=[('parent', '=', None), ('accounting', '=', False)], states={'readonly': Eval('state') != 'draft',} ) model_category = fields.Many2One('product.category', "Model", required=True, domain=[('parent', '=', Eval('mark_category')), ('accounting', '=', False)], states={'readonly': Eval('state') != 'draft',},) reference_category = fields.Many2One('product.category', "Reference", domain=[('parent', '=', Eval('model_category'))], states={'readonly': Eval('state') != 'draft',}, depends=['model_category'] ) origin_country = fields.Many2One('country.country',"Origin Country", states={'readonly': Eval('state') != 'draft',},) software_version = fields.Char("Software version", size=None, states={'readonly': Eval('state') != 'draft',},) useful_life = fields.Integer("Useful life", states={'readonly': Eval('state') != 'draft',},) warranty = fields.Integer("Warranty", states={'readonly': Eval('state') != 'draft',},) serial = fields.Char("Serial", size=None, states={'readonly': Eval('state') != 'draft',},) health_register = fields.Char("Health Register", size=None, states={'readonly': Eval('state') != 'draft',},) subscription_history = fields.Many2Many('sale.subscription-optical_equipment.equipment', 'equipment','subscription', "Subscriptions", states={'readonly': True} ) software_version = fields.Char("Software version", size=None, states={'readonly': Eval('state') != 'draft',},) maintenance_frequency = fields.Selection(_MAINTENANCE_FREQUENCY, "Maintenance Frequency", depends=['propietary']) @classmethod def __setup__(cls): super(OpticalEquipment, cls).__setup__() cls._transitions = ({ ('draft', 'registred'), ('registred', 'contrated'), }) cls._buttons.update({ 'draft': { 'invisible': Eval('state') == 'draft'}, 'registred': { 'invisible': Eval('state').in_(['registred', 'contrated'])}} ) @classmethod def set_code(cls, equipments): pool = Pool() Config = pool.get('optical_equipment.configuration') config = Config(1) for equipment in equipments: if config.equipment_sequence != None and not equipment.code: #if not equipment.code: try: equipment.code = config.equipment_sequence.get() equipment.state = 'registred' cls.save(equipments) #Revisar except UserError: raise UserError(str('Validation Error')) else: raise UserError(gettext('optical_equipment.msg_not_sequence_equipment')) @classmethod def default_state(cls): return 'draft' @staticmethod def default_company(): return Transaction().context.get('company') @fields.depends('propietary', 'maintenance_frequency') def on_change_propietary(self): if self.propietary.client_type == 'ips': self.maintenance_frequency = 'Sies Meses' else: self.maintenance_frequency = 'Doce Meses' @fields.depends('product', 'equipment_type','use', 'biomedical_class', 'calibration', 'mark_category', 'model_category') def on_change_product(self): if self.product: self.equipment_type=self.product.equipment_type self.use=self.product.use self.biomedical_class=self.product.biomedical_class self.calibration=self.product.calibration self.mark_category=self.product.mark_category self.model_category=self.product.model_category self.reference_category=self.product.reference_category self.useful_life=self.product.useful_life if self.product.useful_life else int(0) self.calibration=True if self.product.calibration else False self.warranty=self.product.warranty if self.product.warranty else int(0) self.risk=self.product.risk self.origin_country=self.product.origin_country self.use=self.product.use self.biomedical_class=self.product.biomedical_class else: self.equipment_type=None self.use=None self.biomedical_class=None self.calibration=None self.mark_category=None self.model_category=None self.reference_category=None self.useful_life=None self.calibration=False self.warranty=None self.risk=None self.origin_country=None self.use=None self.biomedical_class=None self.refurbish=None self.serial=None self.health_register=None self.software_version=None @classmethod @ModelView.button @Workflow.transition('draft') def draft(cls, equipments): pass @classmethod @ModelView.button @Workflow.transition('registred') def registred(cls, equipments): cls.set_code(equipments)