Split 49 modules/suites into independent git repos; untrack from monorepo
Each top-level module/suite folder is now its own private repo on GitHub (gsinghpal/<name>) and gitea (admin/<name>), with a fresh single initial commit. The monorepo no longer tracks them (added to .gitignore + git rm --cached); working-tree files are retained on disk and managed in their own repos. The monorepo keeps shared root files (CLAUDE.md, docs/, scripts/, tools/, AGENTS.md, WIP/obsolete dirs) and full history. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,92 +0,0 @@
|
||||
# -*- 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 FpPpeIssuance(models.Model):
|
||||
"""Per-employee Personal Protective Equipment issuance log.
|
||||
|
||||
Each record captures one issuance of a piece of PPE - respirator,
|
||||
gloves, apron, face shield - to an employee, with the size, quantity,
|
||||
issue date and the date the equipment is next due for replacement.
|
||||
|
||||
A historical PPE log demonstrates that the employer is providing
|
||||
appropriate protective equipment, which is itself an obligation under
|
||||
most occupational health and safety regulations.
|
||||
"""
|
||||
_name = 'fusion.plating.ppe.issuance'
|
||||
_description = 'Fusion Plating - PPE Issuance'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
_order = 'issue_date desc, id desc'
|
||||
_rec_name = 'display_name'
|
||||
|
||||
employee_id = fields.Many2one(
|
||||
'hr.employee',
|
||||
string='Employee',
|
||||
required=True,
|
||||
ondelete='cascade',
|
||||
tracking=True,
|
||||
)
|
||||
issue_date = fields.Date(
|
||||
string='Issue Date',
|
||||
required=True,
|
||||
default=fields.Date.context_today,
|
||||
tracking=True,
|
||||
)
|
||||
ppe_type = fields.Selection(
|
||||
[
|
||||
('respirator', 'Respirator'),
|
||||
('gloves', 'Gloves'),
|
||||
('apron', 'Apron'),
|
||||
('face_shield', 'Face Shield'),
|
||||
('safety_glasses', 'Safety Glasses'),
|
||||
('boots', 'Boots'),
|
||||
('hearing', 'Hearing Protection'),
|
||||
('other', 'Other'),
|
||||
],
|
||||
string='PPE Type',
|
||||
required=True,
|
||||
default='gloves',
|
||||
tracking=True,
|
||||
)
|
||||
size = fields.Char(
|
||||
string='Size',
|
||||
)
|
||||
quantity = fields.Integer(
|
||||
string='Quantity',
|
||||
default=1,
|
||||
)
|
||||
next_replacement = fields.Date(
|
||||
string='Next Replacement',
|
||||
tracking=True,
|
||||
)
|
||||
notes = fields.Html(
|
||||
string='Notes',
|
||||
)
|
||||
display_name = fields.Char(
|
||||
compute='_compute_display_name',
|
||||
store=True,
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
'res.company',
|
||||
related='employee_id.company_id',
|
||||
store=True,
|
||||
readonly=True,
|
||||
)
|
||||
active = fields.Boolean(default=True)
|
||||
|
||||
@api.depends('employee_id', 'ppe_type', 'issue_date')
|
||||
def _compute_display_name(self):
|
||||
ppe_label = dict(self._fields['ppe_type'].selection)
|
||||
for rec in self:
|
||||
parts = []
|
||||
if rec.employee_id:
|
||||
parts.append(rec.employee_id.name)
|
||||
if rec.ppe_type:
|
||||
parts.append(ppe_label.get(rec.ppe_type, rec.ppe_type))
|
||||
if rec.issue_date:
|
||||
parts.append(fields.Date.to_string(rec.issue_date))
|
||||
rec.display_name = ' - '.join(parts) if parts else 'PPE Issuance'
|
||||
Reference in New Issue
Block a user