from trytond.model import ( Workflow, ModelSQL, ModelView, Unique, fields) from trytond.transaction import Transaction from trytond.pyson import Eval, If class Maintenance(Workflow, ModelSQL, ModelView): 'Equipment Maintenance' __name__ = 'optical_equipment.maintenance' code = fields.Char( "Code", select=True,states={'readonly': True }) maintenance_type = fields.Selection([('preventive', 'Preventive'), ('corrective', 'Corrective') ], "Maintenance Type") state = fields.Selection([ ('draft', "Draft"), ('agended', "Agended"), ('in_progress', "In Progress") ], "State",required=True, readonly=True, sort=False) company = fields.Many2One('company.company', "Company", readonly=True) propietary = fields.Many2One('party.party', "Propietary", required=True) propietary_address = fields.Many2One('party.address', "Propietary Address", required=True, domain=[('party', '=', Eval('propietary'))] ) equipment = fields.Many2One('optical_equipment.equipment', "Equipment", domain=[]) #when the maintenance is in agended status diary = fields.One2Many('optical_equipment.maintenance.diary', 'diary') estimated_agended = fields.DateTime("Date Maintenance") state_agended = fields.Selection([('no_agenda', "No agenda"), ('agended', "Agended"), ('in_progress', "In progress"), ('finish', "Finish"), ('failed', "Failed")], "State Agenda") technical = fields.Many2One('company.employee', "Technical") #Preventive maintenance initial_operation = fields.Boolean("Verificiación inicial de funcionamiento") check_equipment = fields.Boolean("Revisión del Equipo") check_eletric_system = fields.Boolean("Revisión del sistema electríco") clean_int_ext = fields.Boolean("Limpieza interior y exterior") clean_eyes = fields.Boolean("Limpieza de lentes y espejos") optical = fields.Boolean("Optical") check_calibration = fields.Boolean("Verificar Calibración") # maintenance_activity = fields.Many2Many('optical_equipment.maintenance-product.product', 'activity', 'maintenance', "Maintenance Activitys") maintenance_lines = fields.One2Many('optical_equipment.maintenance.line', 'maintenance', 'Lines') @classmethod def __setup__(cls): super(Maintenance, cls).__setup__() cls._transitions.update({ ('draft', 'agended'), ('agended', 'in_progress'), ('in_progress', 'finished') }) cls._buttons.update({ 'draft': {}, 'agended': {}, 'in_progress': {}, 'finished': {}, }) @staticmethod def default_company(): return Transaction().context.get('company') @classmethod def default_state(cls): return 'draft' @classmethod def default_state_agended(cls): return 'no_agenda' @classmethod @ModelView.button @Workflow.transition('draft') def draft(cls, maintenances): pass @classmethod @ModelView.button @Workflow.transition('agended') def agended(cls, maintenances): pass @classmethod @ModelView.button @Workflow.transition('in_progress') def inProgress(cls, maintenances): pass @classmethod @ModelView.button @Workflow.transition('finished') def finished(cls, maintenances): pass class MaintenanceActivity(ModelSQL): 'Maintenance - Products' __name__ = 'optical_equipment.maintenance-product.product' activity = fields.Many2One('product.product', "Activity", select=True) maintenance = fields.Many2One('optical_equipment.maintenance', "Maintenance", select=True) class MaintenanceLine(ModelSQL, ModelView): 'Maintenance Line' __name__ = 'optical_equipment.maintenance.line' product = fields.Many2One('product.product', 'Product', ondelete='RESTRICT',domain=[ If(Eval('sale_state').in_(['draft']), ('maintenance_activity', '=', True), ()), ],) maintenance = fields.Many2One('optical_equipment.maintenance', 'Maintenance', ondelete='CASCADE', select=True) maintenance_activity = fields.Many2One('product.product', 'Maintenance activity')