Files
famlaw/activeblue_familylaw/views/fl_discovery_views.xml
tocmo0nlord c1b5947b7c Make module installable on stock Odoo 18 (verified via test DB install)
Caught and fixed by running an actual install on a throwaway DB:

- Strip 29 # comment lines from ir.model.access.csv (Odoo CSV loader treats
  them as malformed rows → IndexError); 79 data rows preserved
- Remove obsolete ir.cron.numbercall field (removed in Odoo 17+) from 4 cron
  records in fl_deadline_rules.xml
- Rename <tree>→<list> across 26 sites; inside x2many inline views Odoo 18 no
  longer recognizes <tree>, which made it fall back to the outer model and
  reject inner fields ("Field 'partner_id' does not exist in model 'fl.case'")
- Add store=True to non-stored computed fields referenced by search filters,
  which Odoo 18 now rejects as unsearchable:
  - fl.case: overdue_deadline_count, next_deadline_label
  - fl.deposition: notice_valid

Module loads cleanly: 31 fl.* models registered, no errors.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 03:28:55 +00:00

245 lines
14 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- ══════════════════════════════════════════════════════
TREE VIEW
══════════════════════════════════════════════════════ -->
<record id="view_fl_discovery_tree" model="ir.ui.view">
<field name="name">fl.discovery.tree</field>
<field name="model">fl.discovery</field>
<field name="arch" type="xml">
<list string="Discovery"
decoration-danger="is_overdue == True or admissions_deemed == True"
decoration-warning="state == 'deficient'"
decoration-success="state == 'complete'"
decoration-muted="state == 'compelled'">
<field name="case_id"/>
<field name="discovery_type"/>
<field name="directed_to"/>
<field name="third_party_id"
invisible="directed_to != 'third_party'"/>
<field name="description"/>
<field name="served_date"/>
<field name="response_due_date"/>
<field name="days_until_response" string="Days Left"
invisible="state in ['draft', 'responded', 'complete']"/>
<field name="is_overdue" string="Overdue"/>
<field name="admissions_deemed" string="Deemed Admitted" optional="show"/>
<field name="state" widget="badge"
decoration-danger="state in ('deficient', 'compelled')"
decoration-warning="state == 'served'"
decoration-success="state == 'complete'"
decoration-muted="state == 'draft'"/>
<button name="action_mark_served" string="Served" type="object"
icon="fa-paper-plane"
invisible="state != 'draft'"/>
<button name="action_mark_responded" string="Responded" type="object"
icon="fa-check"
invisible="state != 'served'"/>
<button name="action_file_motion_to_compel" string="Compel"
type="object" icon="fa-gavel"
invisible="state not in ['served', 'deficient']"/>
</list>
</field>
</record>
<!-- ══════════════════════════════════════════════════════
FORM VIEW
══════════════════════════════════════════════════════ -->
<record id="view_fl_discovery_form" model="ir.ui.view">
<field name="name">fl.discovery.form</field>
<field name="model">fl.discovery</field>
<field name="arch" type="xml">
<form string="Discovery Item">
<header>
<button name="action_mark_served" string="Mark Served"
type="object" class="oe_highlight"
invisible="state != 'draft'"/>
<button name="action_mark_responded" string="Response Received"
type="object"
invisible="state != 'served'"/>
<button name="action_flag_deficient" string="Flag Deficient"
type="object"
invisible="state != 'responded'"/>
<button name="action_file_motion_to_compel"
string="File Motion to Compel (FL 1.380)"
type="object"
invisible="state not in ['served', 'deficient']"/>
<button name="action_mark_complete" string="Mark Complete"
type="object"
invisible="state in ['draft', 'complete']"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,served,responded,complete"/>
</header>
<sheet>
<!-- Deemed Admitted Alert (FL 1.370) — CRITICAL -->
<div class="alert alert-danger" role="alert"
invisible="not admissions_deemed">
<strong>🚨 FL 1.370 — ADMISSIONS DEEMED ADMITTED</strong><br/>
No response was filed within 30 days. Each matter in this
Request for Admissions is <strong>automatically deemed admitted</strong>
and may be used as established facts at hearing.
If you are the responding party, immediately file a
<strong>Motion to Withdraw or Amend Admissions</strong>.
</div>
<!-- Overdue response alert -->
<div class="alert alert-warning" role="alert"
invisible="(not is_overdue or admissions_deemed)">
<strong>⏰ Response OVERDUE</strong> — Was due
<field name="response_due_date" readonly="1" nolabel="1"/>.
Consider sending a deficiency notice, then filing
Motion to Compel (FL 1.380).
</div>
<!-- Complete badge -->
<div class="alert alert-success" role="alert"
invisible="state != 'complete'">
<strong>✅ Discovery Item Complete</strong>
</div>
<group>
<group string="Discovery Details">
<field name="case_id"/>
<field name="discovery_type"/>
<field name="directed_to"/>
<field name="third_party_id"
invisible="directed_to != 'third_party'" required="directed_to == 'third_party'"/>
<field name="description"/>
</group>
<group string="Timeline">
<field name="served_date"/>
<field name="response_due_date" readonly="1"/>
<field name="days_until_response" readonly="1"
invisible="state in ['draft', 'responded', 'complete']"/>
<field name="is_overdue" readonly="1"/>
<field name="response_received_date"/>
<field name="response_complete"/>
</group>
</group>
<!-- Subpoena info (third party) -->
<group string="Subpoena Information (FL 1.351)"
invisible="discovery_type != 'subpoena'">
<div class="alert alert-info" role="alert">
<strong>FL 1.351 Subpoena for Production:</strong>
Third party must respond within the time stated in the subpoena
(typically 15-30 days). Third party may object within 14 days.
If opposing party's employer: excellent tool to verify income
when self-employment or cash income is suspected.
</div>
</group>
<!-- Admissions specific note -->
<group string="Admissions (FL 1.370) — WARNING"
invisible="discovery_type != 'admissions'">
<div class="alert alert-warning" role="alert">
<strong>FL 1.370 Critical Rule:</strong>
If the responding party <strong>fails to respond within 30 days</strong>,
each matter is <strong>automatically deemed admitted</strong> without
any court order. This is one of the most powerful discovery tools
in Florida family law — it can establish income, assets, and conduct
as admitted facts.
</div>
<field name="admissions_deemed" readonly="1"/>
</group>
<group string="Objections / Deficiencies">
<field name="objections_raised"/>
<field name="objection_detail"
invisible="not objections_raised"/>
<field name="deficiency_notice_sent"/>
<field name="deficiency_notice_date"
invisible="not deficiency_notice_sent"/>
</group>
<group string="Motion to Compel (FL 1.380)"
invisible="state != 'compelled'">
<field name="motion_to_compel_filed" readonly="1"/>
<field name="motion_to_compel_date" readonly="1"/>
<field name="sanctions_requested"/>
</group>
<field name="notes"
placeholder="Notes on what was requested, what was received, gaps, strategy..."/>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<!-- ══════════════════════════════════════════════════════
SEARCH VIEW
══════════════════════════════════════════════════════ -->
<record id="view_fl_discovery_search" model="ir.ui.view">
<field name="name">fl.discovery.search</field>
<field name="model">fl.discovery</field>
<field name="arch" type="xml">
<search string="Search Discovery">
<field name="case_id"/>
<field name="discovery_type"/>
<field name="directed_to"/>
<field name="description"/>
<filter string="Overdue Responses" name="filter_overdue"
domain="[('is_overdue', '=', True)]"/>
<filter string="Deemed Admitted" name="filter_deemed"
domain="[('admissions_deemed', '=', True)]"/>
<filter string="Deficient" name="filter_deficient"
domain="[('state', '=', 'deficient')]"/>
<filter string="Motion to Compel Filed" name="filter_compelled"
domain="[('state', '=', 'compelled')]"/>
<filter string="Pending Response" name="filter_pending"
domain="[('state', 'in', ['served'])]"/>
<filter string="Complete" name="filter_complete"
domain="[('state', '=', 'complete')]"/>
<separator/>
<filter string="Interrogatories" name="type_interrog"
domain="[('discovery_type', '=', 'interrogatories')]"/>
<filter string="Production Requests" name="type_production"
domain="[('discovery_type', '=', 'production')]"/>
<filter string="Admissions" name="type_admissions"
domain="[('discovery_type', '=', 'admissions')]"/>
<filter string="Subpoenas" name="type_subpoena"
domain="[('discovery_type', '=', 'subpoena')]"/>
<group string="Group By">
<filter string="Case" name="group_case"
context="{'group_by': 'case_id'}"/>
<filter string="Type" name="group_type"
context="{'group_by': 'discovery_type'}"/>
<filter string="Directed To" name="group_directed"
context="{'group_by': 'directed_to'}"/>
<filter string="Status" name="group_state"
context="{'group_by': 'state'}"/>
</group>
</search>
</field>
</record>
<!-- ══════════════════════════════════════════════════════
ACTIONS
══════════════════════════════════════════════════════ -->
<record id="action_fl_discovery_list" model="ir.actions.act_window">
<field name="name">Discovery</field>
<field name="res_model">fl.discovery</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_fl_discovery_search"/>
<field name="domain">[('state', 'not in', ['complete'])]</field>
<field name="context">{'search_default_group_case': 1}</field>
</record>
<!-- All discovery (admin view) -->
<record id="action_fl_discovery_all" model="ir.actions.act_window">
<field name="name">All Discovery</field>
<field name="res_model">fl.discovery</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_fl_discovery_search"/>
</record>
</data>
</odoo>