Implements full Phase 1 of the activeblue_familylaw Odoo 18 module: - 17 Python models (fl.case, fl.party, fl.child, fl.support.calculation, fl.fee.waiver, fl.income.withholding, fl.deadline, fl.hearing, fl.deposition, fl.discovery, fl.document, fl.caselaw, fl.analysis, fl.ai.engine, fl.argument, fl.statute, fl.issue.tag) + hr.expense extension - 3 wizard stubs (intake, analysis, generate-packet) - Security: 4 groups (admin/paralegal/portal-petitioner/portal-respondent) + record rules scoping portal users to their own cases - Seed data: issue tags, FL statutes, FL DCF support schedule, ir.sequence - 13 backend view XML files with FL 61.30 worksheet, fee waiver eligibility banner, DV safety resources, emancipation alerts - Static CSS/JS stubs for Phase 6 portal Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
104 lines
6.1 KiB
XML
104 lines
6.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data>
|
|
|
|
<!-- ══════════════════════════════════════════════════════
|
|
SECURITY CATEGORIES
|
|
══════════════════════════════════════════════════════ -->
|
|
<record id="module_category_familylaw" model="ir.module.category">
|
|
<field name="name">Family Law</field>
|
|
<field name="description">Florida Family Law Case Management</field>
|
|
<field name="sequence">100</field>
|
|
</record>
|
|
|
|
<!-- ══════════════════════════════════════════════════════
|
|
USER GROUPS
|
|
══════════════════════════════════════════════════════ -->
|
|
|
|
<!-- Admin — Full access (Carlos / Active Blue staff) -->
|
|
<record id="group_admin" model="res.groups">
|
|
<field name="name">Family Law / Administrator</field>
|
|
<field name="category_id" ref="module_category_familylaw"/>
|
|
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
|
|
<field name="comment">Full access to all family law models. Can configure AI engine, delete records, manage security.</field>
|
|
</record>
|
|
|
|
<!-- Paralegal — Read/write, no delete, no AI config -->
|
|
<record id="group_paralegal" model="res.groups">
|
|
<field name="name">Family Law / Paralegal</field>
|
|
<field name="category_id" ref="module_category_familylaw"/>
|
|
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
|
|
<field name="comment">Can read/write cases and generate documents. Cannot delete records or access AI engine config.</field>
|
|
</record>
|
|
|
|
<!-- Portal Petitioner — Sees own cases only -->
|
|
<record id="group_portal_petitioner" model="res.groups">
|
|
<field name="name">Family Law / Portal Petitioner</field>
|
|
<field name="category_id" ref="module_category_familylaw"/>
|
|
<field name="implied_ids" eval="[(4, ref('base.group_portal'))]"/>
|
|
<field name="comment">Portal user — petitioner. Sees own cases only. Cannot see respondent financial data until mandatory disclosure complete.</field>
|
|
</record>
|
|
|
|
<!-- Portal Respondent — Sees own case info -->
|
|
<record id="group_portal_respondent" model="res.groups">
|
|
<field name="name">Family Law / Portal Respondent</field>
|
|
<field name="category_id" ref="module_category_familylaw"/>
|
|
<field name="implied_ids" eval="[(4, ref('base.group_portal'))]"/>
|
|
<field name="comment">Portal user — respondent. Sees own case info. Cannot see petitioner private notes.</field>
|
|
</record>
|
|
|
|
<!-- ══════════════════════════════════════════════════════
|
|
RECORD RULES
|
|
══════════════════════════════════════════════════════ -->
|
|
|
|
<!-- fl.case — Petitioner portal sees only their cases -->
|
|
<record id="rule_fl_case_petitioner_portal" model="ir.rule">
|
|
<field name="name">FL Case: Petitioner Portal Access</field>
|
|
<field name="model_id" ref="model_fl_case"/>
|
|
<field name="domain_force">[('petitioner_id.user_ids', 'in', [user.id])]</field>
|
|
<field name="groups" eval="[(4, ref('group_portal_petitioner'))]"/>
|
|
<field name="perm_read" eval="True"/>
|
|
<field name="perm_write" eval="True"/>
|
|
<field name="perm_create" eval="False"/>
|
|
<field name="perm_unlink" eval="False"/>
|
|
</record>
|
|
|
|
<!-- fl.case — Respondent portal sees only their cases -->
|
|
<record id="rule_fl_case_respondent_portal" model="ir.rule">
|
|
<field name="name">FL Case: Respondent Portal Access</field>
|
|
<field name="model_id" ref="model_fl_case"/>
|
|
<field name="domain_force">[('respondent_id.user_ids', 'in', [user.id])]</field>
|
|
<field name="groups" eval="[(4, ref('group_portal_respondent'))]"/>
|
|
<field name="perm_read" eval="True"/>
|
|
<field name="perm_write" eval="False"/>
|
|
<field name="perm_create" eval="False"/>
|
|
<field name="perm_unlink" eval="False"/>
|
|
</record>
|
|
|
|
<!-- fl.party — Petitioner portal sees only their party records -->
|
|
<record id="rule_fl_party_petitioner_portal" model="ir.rule">
|
|
<field name="name">FL Party: Petitioner Portal Access</field>
|
|
<field name="model_id" ref="model_fl_party"/>
|
|
<field name="domain_force">[('case_id.petitioner_id.user_ids', 'in', [user.id])]</field>
|
|
<field name="groups" eval="[(4, ref('group_portal_petitioner'))]"/>
|
|
<field name="perm_read" eval="True"/>
|
|
<field name="perm_write" eval="True"/>
|
|
<field name="perm_create" eval="False"/>
|
|
<field name="perm_unlink" eval="False"/>
|
|
</record>
|
|
|
|
<!-- fl.party — Respondent portal sees only their party record -->
|
|
<record id="rule_fl_party_respondent_portal" model="ir.rule">
|
|
<field name="name">FL Party: Respondent Portal Access</field>
|
|
<field name="model_id" ref="model_fl_party"/>
|
|
<field name="domain_force">[('case_id.respondent_id.user_ids', 'in', [user.id])]</field>
|
|
<field name="groups" eval="[(4, ref('group_portal_respondent'))]"/>
|
|
<field name="perm_read" eval="True"/>
|
|
<field name="perm_write" eval="True"/>
|
|
<field name="perm_create" eval="False"/>
|
|
<field name="perm_unlink" eval="False"/>
|
|
</record>
|
|
|
|
</data>
|
|
</odoo>
|