trytondo-optical_equipment/calibration.py

114 lines
4.1 KiB
Python

# 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