52 lines
2.5 KiB
Python
52 lines
2.5 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 FpPollutantInventory(models.Model):
|
|
_name = 'fusion.plating.pollutant.inventory'
|
|
_description = 'Fusion Plating - Pollutant Inventory Entry'
|
|
_order = 'year desc, facility_id, substance'
|
|
|
|
name = fields.Char(string='Reference', compute='_compute_name', store=True)
|
|
year = fields.Integer(string='Year', required=True, default=lambda s: fields.Date.context_today(s).year)
|
|
facility_id = fields.Many2one('fusion.plating.facility', string='Facility', required=True, ondelete='cascade')
|
|
company_id = fields.Many2one('res.company', related='facility_id.company_id', store=True, readonly=True)
|
|
substance = fields.Char(string='Substance', required=True)
|
|
cas_number = fields.Char(string='CAS #')
|
|
manufactured_kg = fields.Float(string='Manufactured (kg)', digits=(16, 3))
|
|
processed_kg = fields.Float(string='Processed (kg)', digits=(16, 3))
|
|
used_kg = fields.Float(string='Used (kg)', digits=(16, 3))
|
|
released_kg = fields.Float(string='Released (kg)', digits=(16, 3))
|
|
transferred_kg = fields.Float(string='Transferred (kg)', digits=(16, 3))
|
|
threshold_kg = fields.Float(string='Threshold (kg)')
|
|
threshold_exceeded = fields.Boolean(string='Threshold Exceeded', compute='_compute_threshold_exceeded', store=True)
|
|
notes = fields.Text(string='Notes')
|
|
|
|
_sql_constraints = [
|
|
('fp_pollutant_inv_uniq', 'unique(facility_id, year, substance)',
|
|
'Pollutant inventory must be unique per facility / year / substance.'),
|
|
]
|
|
|
|
@api.depends('year', 'substance', 'facility_id')
|
|
def _compute_name(self):
|
|
for rec in self:
|
|
parts = []
|
|
if rec.year:
|
|
parts.append(str(rec.year))
|
|
if rec.substance:
|
|
parts.append(rec.substance)
|
|
if rec.facility_id:
|
|
parts.append(rec.facility_id.code or rec.facility_id.name or '')
|
|
rec.name = ' / '.join(p for p in parts if p) or '/'
|
|
|
|
@api.depends('manufactured_kg', 'processed_kg', 'used_kg', 'threshold_kg')
|
|
def _compute_threshold_exceeded(self):
|
|
for rec in self:
|
|
if rec.threshold_kg and rec.threshold_kg > 0:
|
|
total = (rec.manufactured_kg or 0.0) + (rec.processed_kg or 0.0) + (rec.used_kg or 0.0)
|
|
rec.threshold_exceeded = total >= rec.threshold_kg
|
|
else:
|
|
rec.threshold_exceeded = False
|