# 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 ModelSQL, ModelView, fields, sequence_ordered from trytond.pyson import Eval, If 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 self.value_patterns: pattern = self.value_patterns.pattern if float(pattern) < 0: self.mistake = pattern - self.value_equipment else: if pattern > self.value_equipment: self.mistake = pattern - self.value_equipment else: self.mistake = -pattern + self.value_equipment if pattern == self.value_equipment: self.mistake_rate = 0 else: self.mistake_rate = abs( self.mistake / 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