# -*- 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