trytondo-optical_equipment/maintenance.py
2022-08-03 16:21:55 -05:00

182 lines
6.9 KiB
Python

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"),
('failed', "Failed"),
('finished', "Finished")
], "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=[('state', '!=', 'draft')])
#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_maintenance_type(cls):
return 'preventive'
@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
@classmethod
def view_attributes(cls):
return super(Maintenance, cls).view_attributes() + [
('//page[@id="preventive"]', 'states', {
'invisible': If(Eval('maintenance_type') != 'preventive', True),
}),
('//page[@id="corrective"]', 'states',{
'invisible': If(Eval('maintenance_type') != 'corrective', True),
})
]
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')
class Calibration(ModelSQL, ModelView):
'Calibration of Maintenance'
__name__ = 'optical_equipment.maintenance.calibration'
temperature_min = fields.Float("Temp Min")
temperature_max = fields.Float("Temp Max")
temperature_uom = fields.Many2One('product.uom', 'Temperature UOM',
domain=[('category', '=', Id('optical_equipment', "uom_cat_temperature"))],
states={'invisible' : If(Eval('temperature_min') == None, True)},
depends=['itemperature_min'])
moisture_min = fields.Float("Moisture Min")
moisture_max = fields.Float("Moisture Max")
moisture_uom = fields.Many2One('product.uom', "Moisture UOM",
domain=[('category', '=', Id('optical_equipment', 'uom_cat_relative_humedity'))],
states={'invisible' : If(Eval('moisture_min') == None, True)},
depends=['moisture_min'])
average = fields.Float("Average")
class CalibrationSample(sequence_ordered(), ModelView, ModelSQL):
'Samples of Calibration'
__name__ = 'optical_equipment.maintenance.calibration_sample'
maintenance = fields.Many2One('optical_equipment.maintenance', 'Maintenance',
ondelete='CASCADE')
)
number_sample = fields.Integer("Sample #")
value_pattern = fields.Integer("Value in Pattern")
value_equipment = fields.Float("Value in Equipment")
mistake = fields.Floatr("Mistake")
mistake_rate = fields.Float("% Mistake")
expanded_uncertainty = fields.Floats("Uncertainy Expanded")