179 lines
7.9 KiB
Python
179 lines
7.9 KiB
Python
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
|
|
|
|
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",
|
|
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', readonly=True)
|
|
risk = fields.Char('Type risk',readonly=True)
|
|
use = fields.Char('Use', readonly=True)
|
|
biomedical_class = fields.Char('Biomedical Class', readonly=True)
|
|
main_tecnology = fields.Char('Main tecnology', readonly=True)
|
|
calibration = fields.Boolean("Apply calibration", readonly=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',},)
|
|
|
|
|
|
@classmethod
|
|
def __setup__(cls):
|
|
super(OpticalEquipment, cls).__setup__()
|
|
t = cls.__table__()
|
|
cls._sql_constraints = [
|
|
('serial_unique', Unique(t, t.serial),
|
|
'optical_equipment.msg_serial_unique'),
|
|
('code_unique', Unique(t, t.code),
|
|
'optical_equipment.msg_code_unique')
|
|
]
|
|
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('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)
|