Files
Odoo-Modules/fusion-plating/fusion_plating_compliance/models/fp_discharge_sample_line.py
gsinghpal be611876ad changes
2026-04-12 09:09:50 -04:00

57 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2026 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
from odoo import api, fields, models
class FpDischargeSampleLine(models.Model):
_name = 'fusion.plating.discharge.sample.line'
_description = 'Fusion Plating - Discharge Sample Line'
_order = 'sample_id, id'
sample_id = fields.Many2one('fusion.plating.discharge.sample', string='Sample', required=True, ondelete='cascade')
limit_id = fields.Many2one('fusion.plating.discharge.limit', string='Limit', ondelete='restrict')
parameter = fields.Char(string='Parameter', related='limit_id.parameter', store=True, readonly=False)
value = fields.Float(string='Result', digits=(16, 4))
uom = fields.Char(string='UoM')
status = fields.Selection(
[('ok', 'OK'), ('warning', 'Warning'), ('out_of_spec', 'Out of Spec'), ('pending', 'Pending')],
string='Status', compute='_compute_status', store=True,
)
notes = fields.Char(string='Note')
@api.depends('value', 'limit_id', 'limit_id.limit_value', 'limit_id.limit_type', 'limit_id.min_value')
def _compute_status(self):
for rec in self:
if not rec.limit_id:
rec.status = 'pending'
continue
limit = rec.limit_id
lt = limit.limit_type
lv = limit.limit_value or 0.0
if lt == 'max' or lt == 'ceiling':
if lv <= 0:
rec.status = 'pending'
elif rec.value >= lv:
rec.status = 'out_of_spec'
elif rec.value >= 0.8 * lv:
rec.status = 'warning'
else:
rec.status = 'ok'
elif lt == 'min':
if rec.value < lv:
rec.status = 'out_of_spec'
elif rec.value <= 1.2 * lv:
rec.status = 'warning'
else:
rec.status = 'ok'
elif lt == 'range':
if rec.value < (limit.min_value or 0.0) or rec.value > lv:
rec.status = 'out_of_spec'
elif rec.value >= 0.8 * lv:
rec.status = 'warning'
else:
rec.status = 'ok'
else:
rec.status = 'pending'