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,95 +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 fields, models
|
||||
|
||||
|
||||
class FpJhscMeeting(models.Model):
|
||||
"""A scheduled or held JHSC meeting.
|
||||
|
||||
Captures the meeting's date, attendees, agenda, minutes, action items
|
||||
and supporting attachments. The state field walks the meeting through
|
||||
its lifecycle from planned through closed so the JHSC can audit which
|
||||
meetings still need minutes posted.
|
||||
"""
|
||||
_name = 'fusion.plating.jhsc.meeting'
|
||||
_description = 'Fusion Plating - JHSC Meeting'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
_order = 'meeting_date desc, id desc'
|
||||
_rec_name = 'name'
|
||||
|
||||
name = fields.Char(
|
||||
string='Subject',
|
||||
required=True,
|
||||
tracking=True,
|
||||
)
|
||||
jhsc_id = fields.Many2one(
|
||||
'fusion.plating.jhsc',
|
||||
string='Committee',
|
||||
required=True,
|
||||
ondelete='cascade',
|
||||
tracking=True,
|
||||
)
|
||||
facility_id = fields.Many2one(
|
||||
'fusion.plating.facility',
|
||||
related='jhsc_id.facility_id',
|
||||
store=True,
|
||||
readonly=True,
|
||||
)
|
||||
meeting_date = fields.Date(
|
||||
string='Meeting Date',
|
||||
required=True,
|
||||
default=fields.Date.context_today,
|
||||
tracking=True,
|
||||
)
|
||||
attendee_ids = fields.Many2many(
|
||||
'hr.employee',
|
||||
'fp_jhsc_meeting_attendee_rel',
|
||||
'meeting_id',
|
||||
'employee_id',
|
||||
string='Attendees',
|
||||
)
|
||||
agenda = fields.Html(
|
||||
string='Agenda',
|
||||
)
|
||||
minutes = fields.Html(
|
||||
string='Minutes',
|
||||
)
|
||||
action_items = fields.Html(
|
||||
string='Action Items',
|
||||
)
|
||||
state = fields.Selection(
|
||||
[
|
||||
('planned', 'Planned'),
|
||||
('held', 'Held'),
|
||||
('minutes_ready', 'Minutes Ready'),
|
||||
('closed', 'Closed'),
|
||||
],
|
||||
string='Status',
|
||||
default='planned',
|
||||
tracking=True,
|
||||
required=True,
|
||||
)
|
||||
attachment_ids = fields.Many2many(
|
||||
'ir.attachment',
|
||||
'fp_jhsc_meeting_attachment_rel',
|
||||
'meeting_id',
|
||||
'attachment_id',
|
||||
string='Attachments',
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
'res.company',
|
||||
string='Company',
|
||||
default=lambda self: self.env.company,
|
||||
)
|
||||
|
||||
def action_mark_held(self):
|
||||
self.write({'state': 'held'})
|
||||
|
||||
def action_post_minutes(self):
|
||||
self.write({'state': 'minutes_ready'})
|
||||
|
||||
def action_close(self):
|
||||
self.write({'state': 'closed'})
|
||||
Reference in New Issue
Block a user