folder rename
This commit is contained in:
121
fusion_plating/fusion_plating_quality/models/fp_audit.py
Normal file
121
fusion_plating/fusion_plating_quality/models/fp_audit.py
Normal file
@@ -0,0 +1,121 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2026 Nexa Systems Inc.
|
||||
# License OPL-1 (Odoo Proprietary License v1.0)
|
||||
# Part of the Fusion Plating product family.
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class FpAudit(models.Model):
|
||||
"""Internal, customer, certification, or supplier audit.
|
||||
|
||||
Holds the planning, execution, and findings for any audit the shop
|
||||
is involved in. Findings drive CAPAs through the optional many-to-many
|
||||
relationship.
|
||||
"""
|
||||
_name = 'fusion.plating.audit'
|
||||
_description = 'Fusion Plating — Audit'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
_order = 'audit_date desc, id desc'
|
||||
|
||||
name = fields.Char(
|
||||
string='Reference',
|
||||
required=True,
|
||||
copy=False,
|
||||
readonly=True,
|
||||
default=lambda self: self._default_name(),
|
||||
tracking=True,
|
||||
)
|
||||
audit_type = fields.Selection(
|
||||
[
|
||||
('internal', 'Internal'),
|
||||
('customer', 'Customer'),
|
||||
('certification', 'Certification Body'),
|
||||
('supplier', 'Supplier'),
|
||||
],
|
||||
string='Type',
|
||||
default='internal',
|
||||
required=True,
|
||||
tracking=True,
|
||||
)
|
||||
scope = fields.Char(
|
||||
string='Scope',
|
||||
tracking=True,
|
||||
)
|
||||
facility_id = fields.Many2one(
|
||||
'fusion.plating.facility',
|
||||
string='Facility',
|
||||
tracking=True,
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
'res.company',
|
||||
related='facility_id.company_id',
|
||||
store=True,
|
||||
readonly=True,
|
||||
)
|
||||
auditor_ids = fields.Many2many(
|
||||
'res.users',
|
||||
'fp_audit_auditor_rel',
|
||||
'audit_id',
|
||||
'user_id',
|
||||
string='Auditors',
|
||||
)
|
||||
audit_date = fields.Date(
|
||||
string='Audit Date',
|
||||
tracking=True,
|
||||
)
|
||||
state = fields.Selection(
|
||||
[
|
||||
('planned', 'Planned'),
|
||||
('in_progress', 'In Progress'),
|
||||
('findings', 'Findings'),
|
||||
('closed', 'Closed'),
|
||||
],
|
||||
string='Status',
|
||||
default='planned',
|
||||
required=True,
|
||||
tracking=True,
|
||||
)
|
||||
findings_count = fields.Integer(
|
||||
string='# Findings',
|
||||
)
|
||||
findings_html = fields.Html(
|
||||
string='Findings',
|
||||
)
|
||||
capa_ids = fields.Many2many(
|
||||
'fusion.plating.capa',
|
||||
'fp_audit_capa_rel',
|
||||
'audit_id',
|
||||
'capa_id',
|
||||
string='CAPAs',
|
||||
)
|
||||
capa_count = fields.Integer(
|
||||
compute='_compute_capa_count',
|
||||
)
|
||||
active = fields.Boolean(default=True)
|
||||
|
||||
@api.model
|
||||
def _default_name(self):
|
||||
seq = self.env['ir.sequence'].next_by_code('fusion.plating.audit')
|
||||
return seq or '/'
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
for vals in vals_list:
|
||||
if not vals.get('name') or vals.get('name') == '/':
|
||||
vals['name'] = self._default_name()
|
||||
return super().create(vals_list)
|
||||
|
||||
@api.depends('capa_ids')
|
||||
def _compute_capa_count(self):
|
||||
for rec in self:
|
||||
rec.capa_count = len(rec.capa_ids)
|
||||
|
||||
def action_start(self):
|
||||
self.write({'state': 'in_progress'})
|
||||
|
||||
def action_findings(self):
|
||||
self.write({'state': 'findings'})
|
||||
|
||||
def action_close(self):
|
||||
self.write({'state': 'closed'})
|
||||
Reference in New Issue
Block a user