# 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 ( Workflow, ModelSQL, ModelView, fields, sequence_ordered) from trytond.pyson import Bool, Eval, If, Id, Equal from trytond.pool import Pool from trytond.modules.company import CompanyReport from trytond.transaction import Transaction _digits = (16, 2) _states = {'readonly': If(Eval('state') != 'draft', True)} class Calibration(ModelSQL, ModelView): 'Calibration of Maintenance' __name__ = 'optical_equipment.maintenance.calibration' _states = {'readonly': True} maintenance = fields.Many2One('optical_equipment.maintenance', "Maintenance", ondelete="CASCADE", required=True) graph_dates = fields.Char("Graph Dates", readonly=True) diopter = fields.Float("Diopter", states=_states) mean = fields.Float("Mean", states=_states) dev_std = fields.Float("Standart Desviation", states=_states) uncertain_type_A = fields.Float("Uncertain Type A", states=_states) uncertain_pattern = fields.Float("Uncertain Pattern", states=_states) k_c_calibration = fields.Float("K Crt Calibration", states=_states) uncertain_U_b1 = fields.Float("U_b1", states=_states) d_resolution = fields.Float("d_resolution", states=_states) uncertain_U_b2_dig = fields.Float("U_b2", states=_states) uncertain_U_b2_ana = fields.Float("U_b2", states=_states) uncertain_combinated = fields.Float("U_combinated", states=_states) uncertain_eff = fields.Float("U eff", states=_states) t_student = fields.Float("T Student", states=_states) uncertain_expanded = fields.Float("Uexpand", _digits, states=_states) state = fields.Char('State') class CalibrationSample(sequence_ordered(), ModelView, ModelSQL): 'Samples of Calibration' __name__ = 'optical_equipment.maintenance.calibration_sample' maintenance = fields.Many2One('optical_equipment.maintenance', 'Maintenance') product = fields.Function(fields.Integer("Product ID"), 'on_change_with_product') number_sample = fields.Float("Sample #", _digits) value_patterns = fields.Many2One('optical_equipment.product_pattern', "Value Pattern", ondelete='RESTRICT', required=True, domain=[('product', '=', Eval('product'))], depends=['product']) value_equipment = fields.Float("Value in Equipment", _digits, required=True, states={'readonly': Eval('value_patterns') is None}) mistake = fields.Float("Mistake", _digits) mistake_rate = fields.Float("% Mistake", _digits, states={'readonly': True}, depends=['mistake']) @fields.depends('maintenance', '_parent_maintenance.equipment') def on_change_with_product(self, name=None): if self.maintenance: return self.maintenance.equipment.product.template.id @fields.depends('value_patterns', 'value_equipment', 'mistake', 'mistake_rate') def on_change_value_equipment(self): if float(self.value_patterns.pattern) < 0: self.mistake = self.value_patterns.pattern - self.value_equipment else: if self.value_patterns.pattern > self.value_equipment: self.mistake = self.value_patterns.pattern - self.value_equipment else: self.mistake = -self.value_patterns.pattern + self.value_equipment if self.value_patterns.pattern == self.value_equipment: self.mistake_rate = 0 else: self.mistake_rate = abs(self.mistake / self.value_patterns.pattern) * 100 class CalibrationReport(CompanyReport): __name__ = 'optical_equipment.maintenance' @classmethod def execute(cls, ids, data): with Transaction().set_context(address_with_party=True): return super(CalibrationReport, cls).execute(ids, data) @classmethod def get_context(cls, records, header, data): pool = Pool() Date = pool.get('ir.date') context = super().get_context(records, header, data) context['today'] = Date.today() return context