Migrate views to Odoo 17/18 syntax; fix pre-existing XML blockers

- Convert all 124 attrs="{...}" across 13 view files to direct Odoo 17/18
  attributes (invisible/readonly/required with Python expressions); prefix-domain
  OR/AND/NOT and operators handled (e.g. "(is_overdue or days_until_due > 7) and completed")
- Fix pre-existing XML errors that blocked module load on any version:
  - Replace invalid   HTML entity with   in 4 files (reports + portal)
  - Merge duplicate style= attributes (3 spots in website_intake_templates)
  - Replace 3 illegal <t t-if> embedded in class="" attributes with t-attf-class
- All 44 module XML files now parse clean

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-29 14:15:25 +00:00
parent 6f6129550e
commit 983964c6d2
18 changed files with 156 additions and 156 deletions

View File

@@ -104,7 +104,7 @@
</tr> </tr>
<tr> <tr>
<td style="padding: 4px; font-weight: bold;">Role in Case:</td> <td style="padding: 4px; font-weight: bold;">Role in Case:</td>
<td colspan="3" style="padding: 4px;">[ ] Petitioner &nbsp;&nbsp; [ ] Respondent</td> <td colspan="3" style="padding: 4px;">[ ] Petitioner &#160;&#160; [ ] Respondent</td>
</tr> </tr>
</table> </table>
@@ -155,8 +155,8 @@
</div> </div>
<div style="font-size: 10pt; margin-bottom: 12px; line-height: 2.0;"> <div style="font-size: 10pt; margin-bottom: 12px; line-height: 2.0;">
Cash on hand / bank accounts: $________<br/> Cash on hand / bank accounts: $________<br/>
Real property (value): $________ &nbsp;&nbsp; Mortgage/lien: $________<br/> Real property (value): $________ &#160;&#160; Mortgage/lien: $________<br/>
Vehicles (value): $________ &nbsp;&nbsp; Loan balance: $________<br/> Vehicles (value): $________ &#160;&#160; Loan balance: $________<br/>
Other assets: $________ Other assets: $________
</div> </div>

View File

@@ -71,7 +71,7 @@
<!-- Who is Filing --> <!-- Who is Filing -->
<div style="margin-bottom: 16px; font-size: 11pt;"> <div style="margin-bottom: 16px; font-size: 11pt;">
<strong>[ ] PETITIONER — <t t-esc="o.petitioner_id.name if o.petitioner_id else '__________________'"/></strong> <strong>[ ] PETITIONER — <t t-esc="o.petitioner_id.name if o.petitioner_id else '__________________'"/></strong>
&nbsp;&nbsp;&nbsp; &#160;&#160;&#160;
<strong>[ ] RESPONDENT — <t t-esc="o.respondent_id.name if o.respondent_id else '__________________'"/></strong> <strong>[ ] RESPONDENT — <t t-esc="o.respondent_id.name if o.respondent_id else '__________________'"/></strong>
</div> </div>
@@ -244,7 +244,7 @@
The above documents were provided to The above documents were provided to
<strong><t t-esc="o.respondent_id.name if o.respondent_id else 'the opposing party'"/></strong> <strong><t t-esc="o.respondent_id.name if o.respondent_id else 'the opposing party'"/></strong>
by the following method:<br/><br/> by the following method:<br/><br/>
[ ] U.S. Mail &nbsp;&nbsp; [ ] Email &nbsp;&nbsp; [ ] Hand Delivery &nbsp;&nbsp; [ ] E-Filing Portal<br/> [ ] U.S. Mail &#160;&#160; [ ] Email &#160;&#160; [ ] Hand Delivery &#160;&#160; [ ] E-Filing Portal<br/>
On: _______________________, 20____ On: _______________________, 20____
</div> </div>

View File

@@ -151,8 +151,8 @@
to make major decisions. Reasons: ________________________________<br/><br/> to make major decisions. Reasons: ________________________________<br/><br/>
<strong>2.2 Ultimate Decision-Making Authority (if shared, for disputes):</strong><br/> <strong>2.2 Ultimate Decision-Making Authority (if shared, for disputes):</strong><br/>
[ ] Parent A (Petitioner) &nbsp;&nbsp; [ ] Parent B (Respondent) &nbsp;&nbsp; [ ] Mediator/Arbitrator<br/> [ ] Parent A (Petitioner) &#160;&#160; [ ] Parent B (Respondent) &#160;&#160; [ ] Mediator/Arbitrator<br/>
For: [ ] Education &nbsp;&nbsp; [ ] Healthcare &nbsp;&nbsp; [ ] Religion &nbsp;&nbsp; [ ] Extracurricular For: [ ] Education &#160;&#160; [ ] Healthcare &#160;&#160; [ ] Religion &#160;&#160; [ ] Extracurricular
</div> </div>
<!-- SECTION 3: TIMESHARING --> <!-- SECTION 3: TIMESHARING -->
@@ -193,29 +193,29 @@
<strong>3.2 Holiday Schedule</strong> (indicate which parent has each holiday):<br/> <strong>3.2 Holiday Schedule</strong> (indicate which parent has each holiday):<br/>
<table style="width: 100%; font-size: 10pt; border-collapse: collapse;"> <table style="width: 100%; font-size: 10pt; border-collapse: collapse;">
<tr> <tr>
<td style="padding: 3px; width: 25%;">New Year's Day:</td><td style="padding: 3px; width: 25%;">[ ] A &nbsp; [ ] B &nbsp; [ ] Alt</td> <td style="padding: 3px; width: 25%;">New Year's Day:</td><td style="padding: 3px; width: 25%;">[ ] A &#160; [ ] B &#160; [ ] Alt</td>
<td style="padding: 3px; width: 25%;">Spring Break:</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Alt</td> <td style="padding: 3px; width: 25%;">Spring Break:</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Alt</td>
</tr> </tr>
<tr> <tr>
<td style="padding: 3px;">Memorial Day:</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Alt</td> <td style="padding: 3px;">Memorial Day:</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Alt</td>
<td style="padding: 3px;">Independence Day:</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Alt</td> <td style="padding: 3px;">Independence Day:</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Alt</td>
</tr> </tr>
<tr> <tr>
<td style="padding: 3px;">Labor Day:</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Alt</td> <td style="padding: 3px;">Labor Day:</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Alt</td>
<td style="padding: 3px;">Thanksgiving:</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Alt</td> <td style="padding: 3px;">Thanksgiving:</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Alt</td>
</tr> </tr>
<tr> <tr>
<td style="padding: 3px;">Winter Break (1st half):</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Alt</td> <td style="padding: 3px;">Winter Break (1st half):</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Alt</td>
<td style="padding: 3px;">Winter Break (2nd half):</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Alt</td> <td style="padding: 3px;">Winter Break (2nd half):</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Alt</td>
</tr> </tr>
<tr> <tr>
<td style="padding: 3px;">Mother's Day:</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Mother</td> <td style="padding: 3px;">Mother's Day:</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Mother</td>
<td style="padding: 3px;">Father's Day:</td><td style="padding: 3px;">[ ] A &nbsp; [ ] B &nbsp; [ ] Father</td> <td style="padding: 3px;">Father's Day:</td><td style="padding: 3px;">[ ] A &#160; [ ] B &#160; [ ] Father</td>
</tr> </tr>
</table><br/> </table><br/>
<strong>3.3 School Year vs. Summer Schedule:</strong><br/> <strong>3.3 School Year vs. Summer Schedule:</strong><br/>
School year primary residence: [ ] Parent A &nbsp;&nbsp; [ ] Parent B &nbsp;&nbsp; [ ] Same as regular<br/> School year primary residence: [ ] Parent A &#160;&#160; [ ] Parent B &#160;&#160; [ ] Same as regular<br/>
Summer schedule: ________________________________________<br/> Summer schedule: ________________________________________<br/>
Summer vacation (each parent): ___ weeks per year, with ___ days advance notice required. Summer vacation (each parent): ___ weeks per year, with ___ days advance notice required.
</div> </div>
@@ -226,7 +226,7 @@
</div> </div>
<div style="font-size: 10pt; margin-bottom: 12px; line-height: 2.2;"> <div style="font-size: 10pt; margin-bottom: 12px; line-height: 2.2;">
Phone/video access: _____ call(s) per week, between _____ and _____ p.m.<br/> Phone/video access: _____ call(s) per week, between _____ and _____ p.m.<br/>
Method: [ ] Phone &nbsp;&nbsp; [ ] Video Call (FaceTime/Zoom) &nbsp;&nbsp; [ ] Text (with parental supervision)<br/> Method: [ ] Phone &#160;&#160; [ ] Video Call (FaceTime/Zoom) &#160;&#160; [ ] Text (with parental supervision)<br/>
Emergency contact: Each parent shall provide the other with a current phone number Emergency contact: Each parent shall provide the other with a current phone number
and emergency contact at all times. and emergency contact at all times.
</div> </div>
@@ -236,9 +236,9 @@
SECTION 5 — TRANSPORTATION / EXCHANGE SECTION 5 — TRANSPORTATION / EXCHANGE
</div> </div>
<div style="font-size: 10pt; margin-bottom: 12px; line-height: 2.2;"> <div style="font-size: 10pt; margin-bottom: 12px; line-height: 2.2;">
Exchange location: [ ] School &nbsp;&nbsp; [ ] Neutral location: ________________________<br/> Exchange location: [ ] School &#160;&#160; [ ] Neutral location: ________________________<br/>
[ ] Each parent provides transportation to their own home<br/> [ ] Each parent provides transportation to their own home<br/>
[ ] Transporting parent: [ ] Parent A &nbsp;&nbsp; [ ] Parent B &nbsp;&nbsp; [ ] Alternate<br/> [ ] Transporting parent: [ ] Parent A &#160;&#160; [ ] Parent B &#160;&#160; [ ] Alternate<br/>
Travel out of state: _____ days advance notice required, written consent or court order required for travel outside U.S. Travel out of state: _____ days advance notice required, written consent or court order required for travel outside U.S.
</div> </div>

View File

@@ -40,26 +40,26 @@
</group> </group>
</group> </group>
<div class="alert alert-danger" role="alert" <div class="alert alert-danger" role="alert"
attrs="{'invisible': [('attorney_referral_flag', '=', False)]}"> invisible="not attorney_referral_flag">
<strong>⚠️ ATTORNEY REFERRAL RECOMMENDED</strong><br/> <strong>⚠️ ATTORNEY REFERRAL RECOMMENDED</strong><br/>
<field name="attorney_referral_reason" readonly="1" nolabel="1"/> <field name="attorney_referral_reason" readonly="1" nolabel="1"/>
</div> </div>
<separator string="Strategy Memo" <separator string="Strategy Memo"
attrs="{'invisible': [('analysis_type', '!=', 'attorney')]}"/> invisible="analysis_type != 'attorney'"/>
<field name="strategy_memo" widget="html" readonly="1" nolabel="1" <field name="strategy_memo" widget="html" readonly="1" nolabel="1"
attrs="{'invisible': [('analysis_type', '!=', 'attorney')]}"/> invisible="analysis_type != 'attorney'"/>
<separator string="Risk Narrative" <separator string="Risk Narrative"
attrs="{'invisible': [('risk_narrative', '=', False)]}"/> invisible="not risk_narrative"/>
<field name="risk_narrative" readonly="1" nolabel="1" <field name="risk_narrative" readonly="1" nolabel="1"
attrs="{'invisible': [('risk_narrative', '=', False)]}"/> invisible="not risk_narrative"/>
<separator string="Plain English Summary (English)"/> <separator string="Plain English Summary (English)"/>
<field name="plain_english_summary" readonly="1" nolabel="1"/> <field name="plain_english_summary" readonly="1" nolabel="1"/>
<separator string="Plain English Summary (Español)"/> <separator string="Plain English Summary (Español)"/>
<field name="plain_english_summary_es" readonly="1" nolabel="1"/> <field name="plain_english_summary_es" readonly="1" nolabel="1"/>
<separator string="Cited Statutes" <separator string="Cited Statutes"
attrs="{'invisible': [('cited_statute_ids', '=', [])]}"/> invisible="not cited_statute_ids"/>
<field name="cited_statute_ids" widget="many2many_tags" readonly="1" nolabel="1" <field name="cited_statute_ids" widget="many2many_tags" readonly="1" nolabel="1"
attrs="{'invisible': [('cited_statute_ids', '=', [])]}"/> invisible="not cited_statute_ids"/>
<separator string="Matched Case Law"/> <separator string="Matched Case Law"/>
<field name="matched_caselaw_ids" widget="many2many_tags" readonly="1" nolabel="1"/> <field name="matched_caselaw_ids" widget="many2many_tags" readonly="1" nolabel="1"/>
</sheet> </sheet>

View File

@@ -17,7 +17,7 @@
groups="activeblue_familylaw.group_admin,activeblue_familylaw.group_paralegal"/> groups="activeblue_familylaw.group_admin,activeblue_familylaw.group_paralegal"/>
<button name="action_open_support_calculator" string="Open Calculator" <button name="action_open_support_calculator" string="Open Calculator"
type="object" type="object"
attrs="{'invisible': [('case_type', 'not in', ['modification','dissolution_children','paternity','custody_modification'])]}"/> invisible="case_type not in ['modification', 'dissolution_children', 'paternity', 'custody_modification']"/>
<button name="action_run_conflict_check" string="Run Conflict Check" <button name="action_run_conflict_check" string="Run Conflict Check"
type="object" type="object"
groups="activeblue_familylaw.group_admin,activeblue_familylaw.group_paralegal"/> groups="activeblue_familylaw.group_admin,activeblue_familylaw.group_paralegal"/>
@@ -31,7 +31,7 @@
<!-- Attorney Referral Banner --> <!-- Attorney Referral Banner -->
<div class="alert alert-danger" role="alert" <div class="alert alert-danger" role="alert"
attrs="{'invisible': [('attorney_referral_flag', '=', False)]}"> invisible="not attorney_referral_flag">
<strong>⚠️ ATTORNEY REFERRAL RECOMMENDED</strong> <strong>⚠️ ATTORNEY REFERRAL RECOMMENDED</strong>
— This case has been flagged as complex or high-risk for pro se representation. — This case has been flagged as complex or high-risk for pro se representation.
Strongly consider consulting with a family law attorney. Strongly consider consulting with a family law attorney.
@@ -40,7 +40,7 @@
<!-- Conflict of Interest Banner --> <!-- Conflict of Interest Banner -->
<div class="alert alert-danger" role="alert" <div class="alert alert-danger" role="alert"
attrs="{'invisible': ['|', ('conflict_check_passed', '=', True), ('conflict_check_id', '=', False)]}"> invisible="(conflict_check_passed or not conflict_check_id)">
<strong>🚩 CONFLICT OF INTEREST — UNRESOLVED</strong> <strong>🚩 CONFLICT OF INTEREST — UNRESOLVED</strong>
— A conflict check has flagged matching parties on other open cases. — A conflict check has flagged matching parties on other open cases.
This case cannot advance past Intake until the conflict is overridden by an administrator. This case cannot advance past Intake until the conflict is overridden by an administrator.
@@ -52,7 +52,7 @@
<!-- DV Safety Note --> <!-- DV Safety Note -->
<field name="dv_safety_note" widget="html" <field name="dv_safety_note" widget="html"
attrs="{'invisible': [('domestic_violence_flag', '=', False)]}"/> invisible="not domestic_violence_flag"/>
<sheet> <sheet>
<div class="oe_button_box" name="button_box"> <div class="oe_button_box" name="button_box">
@@ -62,7 +62,7 @@
</button> </button>
<button class="oe_stat_button" type="object" <button class="oe_stat_button" type="object"
name="action_open_support_calculator" icon="fa-calculator" name="action_open_support_calculator" icon="fa-calculator"
attrs="{'invisible': [('case_type', 'not in', ['modification','dissolution_children','paternity','custody_modification'])]}"> invisible="case_type not in ['modification', 'dissolution_children', 'paternity', 'custody_modification']">
<span class="o_stat_text">Calculator</span> <span class="o_stat_text">Calculator</span>
</button> </button>
</div> </div>
@@ -89,11 +89,11 @@
<field name="filing_date"/> <field name="filing_date"/>
<field name="service_date"/> <field name="service_date"/>
<field name="last_order_date" <field name="last_order_date"
attrs="{'invisible': [('case_type', 'not in', ['modification','alimony_modification','custody_modification'])]}"/> invisible="case_type not in ['modification', 'alimony_modification', 'custody_modification']"/>
<field name="marriage_date" <field name="marriage_date"
attrs="{'invisible': [('case_type', 'not in', ['dissolution_children','dissolution_no_children','alimony_modification'])]}"/> invisible="case_type not in ['dissolution_children', 'dissolution_no_children', 'alimony_modification']"/>
<field name="years_of_marriage" <field name="years_of_marriage"
attrs="{'invisible': [('case_type', 'not in', ['dissolution_children','dissolution_no_children','alimony_modification'])]}"/> invisible="case_type not in ['dissolution_children', 'dissolution_no_children', 'alimony_modification']"/>
<field name="retroactivity_date" readonly="1"/> <field name="retroactivity_date" readonly="1"/>
</group> </group>
</group> </group>
@@ -109,7 +109,7 @@
placeholder="Leave blank if pro se"/> placeholder="Leave blank if pro se"/>
<field name="petitioner_fl_resident_since"/> <field name="petitioner_fl_resident_since"/>
<field name="residency_warning" readonly="1" <field name="residency_warning" readonly="1"
attrs="{'invisible': [('petitioner_fl_resident_since', '=', False)]}"/> invisible="not petitioner_fl_resident_since"/>
</group> </group>
<group string="Respondent"> <group string="Respondent">
<field name="respondent_id"/> <field name="respondent_id"/>
@@ -122,7 +122,7 @@
<group string="Safety Flags"> <group string="Safety Flags">
<field name="domestic_violence_flag"/> <field name="domestic_violence_flag"/>
<field name="dv_injunction_active" <field name="dv_injunction_active"
attrs="{'invisible': [('domestic_violence_flag', '=', False)]}"/> invisible="not domestic_violence_flag"/>
</group> </group>
<group string="Conflict of Interest"> <group string="Conflict of Interest">
<field name="conflict_check_passed" readonly="1"/> <field name="conflict_check_passed" readonly="1"/>
@@ -144,27 +144,27 @@
<!-- TAB 2: Children --> <!-- TAB 2: Children -->
<page string="Children" name="children" <page string="Children" name="children"
attrs="{'invisible': [('case_type', 'in', ['dissolution_no_children','alimony_modification'])]}"> invisible="case_type in ['dissolution_no_children', 'alimony_modification']">
<group> <group>
<field name="children_count" readonly="1"/> <field name="children_count" readonly="1"/>
<field name="has_minor_children" readonly="1"/> <field name="has_minor_children" readonly="1"/>
</group> </group>
<separator string="Parenting Class (FL 61.21)" <separator string="Parenting Class (FL 61.21)"
attrs="{'invisible': [('parenting_class_required', '=', False)]}"/> invisible="not parenting_class_required"/>
<group attrs="{'invisible': [('parenting_class_required', '=', False)]}"> <group invisible="not parenting_class_required">
<group> <group>
<field name="petitioner_parenting_class_done"/> <field name="petitioner_parenting_class_done"/>
<field name="petitioner_parenting_class_date" <field name="petitioner_parenting_class_date"
attrs="{'invisible': [('petitioner_parenting_class_done', '=', False)]}"/> invisible="not petitioner_parenting_class_done"/>
</group> </group>
<group> <group>
<field name="respondent_parenting_class_done"/> <field name="respondent_parenting_class_done"/>
<field name="respondent_parenting_class_date" <field name="respondent_parenting_class_date"
attrs="{'invisible': [('respondent_parenting_class_done', '=', False)]}"/> invisible="not respondent_parenting_class_done"/>
</group> </group>
</group> </group>
<field name="parenting_class_warning" readonly="1" <field name="parenting_class_warning" readonly="1"
attrs="{'invisible': [('parenting_class_required', '=', False)]}"/> invisible="not parenting_class_required"/>
<separator string="Children on Case"/> <separator string="Children on Case"/>
<field name="child_ids"> <field name="child_ids">
<tree string="Children" editable="bottom"> <tree string="Children" editable="bottom">
@@ -181,7 +181,7 @@
<!-- TAB 3: Support & Threshold --> <!-- TAB 3: Support & Threshold -->
<page string="Support Calculation" name="support" <page string="Support Calculation" name="support"
attrs="{'invisible': [('case_type', 'not in', ['modification','dissolution_children','paternity','custody_modification'])]}"> invisible="case_type not in ['modification', 'dissolution_children', 'paternity', 'custody_modification']">
<group string="Current Order"> <group string="Current Order">
<field name="current_order_amount"/> <field name="current_order_amount"/>
<field name="current_order_per_child"/> <field name="current_order_per_child"/>
@@ -195,18 +195,18 @@
string="Difference %" widget="percentage"/> string="Difference %" widget="percentage"/>
</group> </group>
<group string="Modification Threshold Test (FL 61.30(1)(b))" <group string="Modification Threshold Test (FL 61.30(1)(b))"
attrs="{'invisible': [('case_type', '!=', 'modification')]}"> invisible="case_type != 'modification'">
<field name="threshold_met" readonly="1"/> <field name="threshold_met" readonly="1"/>
<field name="substantial_change_basis"/> <field name="substantial_change_basis"/>
<field name="substantial_change_detail"/> <field name="substantial_change_detail"/>
</group> </group>
<field name="threshold_result" widget="html" readonly="1" <field name="threshold_result" widget="html" readonly="1"
attrs="{'invisible': [('case_type', '!=', 'modification')]}"/> invisible="case_type != 'modification'"/>
</page> </page>
<!-- TAB 4: Timesharing --> <!-- TAB 4: Timesharing -->
<page string="Timesharing" name="timesharing" <page string="Timesharing" name="timesharing"
attrs="{'invisible': [('case_type', 'not in', ['modification','dissolution_children','paternity','custody_modification'])]}"> invisible="case_type not in ['modification', 'dissolution_children', 'paternity', 'custody_modification']">
<group> <group>
<group> <group>
<field name="timesharing_changed"/> <field name="timesharing_changed"/>
@@ -275,11 +275,11 @@
type="object" class="btn-primary" type="object" class="btn-primary"
groups="activeblue_familylaw.group_admin"/> groups="activeblue_familylaw.group_admin"/>
<field name="attorney_memo_id" readonly="1" <field name="attorney_memo_id" readonly="1"
attrs="{'invisible': [('attorney_memo_id', '=', False)]}"/> invisible="not attorney_memo_id"/>
<field name="attorney_memo_html" widget="html" readonly="1" nolabel="1" <field name="attorney_memo_html" widget="html" readonly="1" nolabel="1"
attrs="{'invisible': [('attorney_memo_id', '=', False)]}"/> invisible="not attorney_memo_id"/>
<field name="attorney_risk_narrative" readonly="1" <field name="attorney_risk_narrative" readonly="1"
attrs="{'invisible': [('attorney_memo_id', '=', False)]}"/> invisible="not attorney_memo_id"/>
<separator string="All Analyses"/> <separator string="All Analyses"/>
<field name="analysis_ids"> <field name="analysis_ids">
<tree string="Analyses"> <tree string="Analyses">
@@ -302,7 +302,7 @@
<button name="action_create_fee_waiver" <button name="action_create_fee_waiver"
string="Create Fee Waiver Application" string="Create Fee Waiver Application"
type="object" class="btn-secondary" type="object" class="btn-secondary"
attrs="{'invisible': [('fee_waiver_id', '!=', False)]}"/> invisible="fee_waiver_id"/>
</group> </group>
<group string="Post-Order"> <group string="Post-Order">
<field name="new_order_amount"/> <field name="new_order_amount"/>
@@ -403,7 +403,7 @@
<field name="next_deadline_label" string="Next Deadline"/> <field name="next_deadline_label" string="Next Deadline"/>
<field name="overdue_deadline_count" string="Overdue"/> <field name="overdue_deadline_count" string="Overdue"/>
<field name="threshold_met" <field name="threshold_met"
attrs="{'invisible': [('case_type', '!=', 'modification')]}"/> invisible="case_type != 'modification'"/>
<field name="attorney_referral_flag" widget="boolean_toggle"/> <field name="attorney_referral_flag" widget="boolean_toggle"/>
<field name="domestic_violence_flag" widget="boolean_toggle"/> <field name="domestic_violence_flag" widget="boolean_toggle"/>
</tree> </tree>

View File

@@ -24,7 +24,7 @@
<form string="Case Law"> <form string="Case Law">
<sheet> <sheet>
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': [('superseded_by_2023_reform', '=', False)]}"> invisible="not superseded_by_2023_reform">
<strong>⚠️ NOTE:</strong> This case involves permanent alimony <strong>⚠️ NOTE:</strong> This case involves permanent alimony
which was <strong>eliminated by HB 1409 (effective July 1, 2023)</strong>. which was <strong>eliminated by HB 1409 (effective July 1, 2023)</strong>.
Pre-2023 permanent alimony holdings may not apply to new cases. Pre-2023 permanent alimony holdings may not apply to new cases.

View File

@@ -8,7 +8,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Child"> <form string="Child">
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': [('approaching_emancipation', '=', False)]}"> invisible="not approaching_emancipation">
<strong>⚠️ APPROACHING EMANCIPATION:</strong> <strong>⚠️ APPROACHING EMANCIPATION:</strong>
<field name="name" readonly="1"/> turns 18 in <field name="name" readonly="1"/> turns 18 in
<field name="days_until_emancipation" readonly="1"/> days <field name="days_until_emancipation" readonly="1"/> days

View File

@@ -14,24 +14,24 @@
<button name="action_override" string="Override Conflict" <button name="action_override" string="Override Conflict"
type="object" class="oe_highlight" type="object" class="oe_highlight"
confirm="Override this conflict of interest? This allows the case to advance past Intake. A justification is required." confirm="Override this conflict of interest? This allows the case to advance past Intake. A justification is required."
attrs="{'invisible': [('status', '!=', 'conflict')]}" invisible="status != 'conflict'"
groups="activeblue_familylaw.group_admin"/> groups="activeblue_familylaw.group_admin"/>
<field name="status" widget="statusbar" <field name="status" widget="statusbar"
statusbar_visible="clear,conflict,override"/> statusbar_visible="clear,conflict,override"/>
</header> </header>
<sheet> <sheet>
<div class="alert alert-success" role="alert" <div class="alert alert-success" role="alert"
attrs="{'invisible': [('status', '!=', 'clear')]}"> invisible="status != 'clear'">
<strong>✅ CLEAR</strong> — No conflicting parties found on other open cases. <strong>✅ CLEAR</strong> — No conflicting parties found on other open cases.
</div> </div>
<div class="alert alert-danger" role="alert" <div class="alert alert-danger" role="alert"
attrs="{'invisible': [('status', '!=', 'conflict')]}"> invisible="status != 'conflict'">
<strong>🚩 CONFLICT DETECTED</strong> — One or more parties match <strong>🚩 CONFLICT DETECTED</strong> — One or more parties match
parties on other open cases. The case cannot advance past Intake parties on other open cases. The case cannot advance past Intake
until this is overridden by an administrator. until this is overridden by an administrator.
</div> </div>
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': [('status', '!=', 'override')]}"> invisible="status != 'override'">
<strong>⚠ OVERRIDDEN</strong> — This conflict was overridden by <strong>⚠ OVERRIDDEN</strong> — This conflict was overridden by
<field name="override_user_id" readonly="1" nolabel="1" class="oe_inline"/> <field name="override_user_id" readonly="1" nolabel="1" class="oe_inline"/>
on <field name="override_date" readonly="1" nolabel="1" class="oe_inline"/>. on <field name="override_date" readonly="1" nolabel="1" class="oe_inline"/>.
@@ -43,16 +43,16 @@
</group> </group>
<group> <group>
<field name="matched_case_ids" widget="many2many_tags" <field name="matched_case_ids" widget="many2many_tags"
attrs="{'invisible': [('matched_case_ids', '=', [])]}"/> invisible="not matched_case_ids"/>
</group> </group>
</group> </group>
<separator string="Match Detail"/> <separator string="Match Detail"/>
<field name="match_detail" nolabel="1" readonly="1"/> <field name="match_detail" nolabel="1" readonly="1"/>
<separator string="Override Justification" <separator string="Override Justification"
attrs="{'invisible': [('status', '=', 'clear')]}"/> invisible="status == 'clear'"/>
<field name="override_justification" nolabel="1" <field name="override_justification" nolabel="1"
placeholder="Required to override a conflict — explain why the firm may proceed despite the match." placeholder="Required to override a conflict — explain why the firm may proceed despite the match."
attrs="{'invisible': [('status', '=', 'clear')], 'readonly': [('status', '=', 'override')]}"/> invisible="status == 'clear'" readonly="status == 'override'"/>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids"/> <field name="message_follower_ids"/>

View File

@@ -19,14 +19,14 @@
<field name="deadline_type"/> <field name="deadline_type"/>
<field name="due_date"/> <field name="due_date"/>
<field name="days_until_due" string="Days Left" <field name="days_until_due" string="Days Left"
attrs="{'invisible': [('completed', '=', True)]}"/> invisible="completed"/>
<field name="statute_reference" optional="show"/> <field name="statute_reference" optional="show"/>
<field name="completed"/> <field name="completed"/>
<field name="waived"/> <field name="waived"/>
<field name="is_overdue" readonly="1"/> <field name="is_overdue" readonly="1"/>
<button name="action_mark_complete" string="✔ Complete" <button name="action_mark_complete" string="✔ Complete"
type="object" icon="fa-check" type="object" icon="fa-check"
attrs="{'invisible': ['|', ('completed', '=', True), ('waived', '=', True)]}"/> invisible="(completed or waived)"/>
</tree> </tree>
</field> </field>
</record> </record>
@@ -42,28 +42,28 @@
<header> <header>
<button name="action_mark_complete" string="Mark Complete" <button name="action_mark_complete" string="Mark Complete"
type="object" class="oe_highlight" type="object" class="oe_highlight"
attrs="{'invisible': ['|', ('completed', '=', True), ('waived', '=', True)]}"/> invisible="(completed or waived)"/>
<button name="action_mark_waived" string="Mark Waived / N/A" <button name="action_mark_waived" string="Mark Waived / N/A"
type="object" type="object"
attrs="{'invisible': ['|', ('completed', '=', True), ('waived', '=', True)]}"/> invisible="(completed or waived)"/>
</header> </header>
<sheet> <sheet>
<!-- Overdue alert banner --> <!-- Overdue alert banner -->
<div class="alert alert-danger" role="alert" <div class="alert alert-danger" role="alert"
attrs="{'invisible': [('is_overdue', '=', False)]}"> invisible="not is_overdue">
<strong>🔴 OVERDUE</strong> — This deadline has passed. <strong>🔴 OVERDUE</strong> — This deadline has passed.
Missed court deadlines can result in default judgment Missed court deadlines can result in default judgment
or case dismissal. Take action immediately. or case dismissal. Take action immediately.
</div> </div>
<!-- 7-day warning banner --> <!-- 7-day warning banner -->
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': ['|', ('is_overdue', '=', True), ('days_until_due', '&gt;', 7), ('completed', '=', True)]}"> invisible="(is_overdue or days_until_due &gt; 7) and completed">
<strong>⏰ Due in ${days_until_due} days</strong> <strong>⏰ Due in ${days_until_due} days</strong>
This deadline is coming up soon. This deadline is coming up soon.
</div> </div>
<!-- Completed banner --> <!-- Completed banner -->
<div class="alert alert-success" role="alert" <div class="alert alert-success" role="alert"
attrs="{'invisible': [('completed', '=', False)]}"> invisible="not completed">
<strong>✅ Completed</strong> on <strong>✅ Completed</strong> on
<field name="completed_date" readonly="1" nolabel="1"/> <field name="completed_date" readonly="1" nolabel="1"/>
</div> </div>
@@ -86,12 +86,12 @@
<group> <group>
<field name="completed"/> <field name="completed"/>
<field name="completed_date" <field name="completed_date"
attrs="{'invisible': [('completed', '=', False)], 'required': [('completed', '=', True)]}"/> invisible="not completed" required="completed"/>
</group> </group>
<group> <group>
<field name="waived"/> <field name="waived"/>
<field name="calendar_event_id" readonly="1" <field name="calendar_event_id" readonly="1"
attrs="{'invisible': [('calendar_event_id', '=', False)]}"/> invisible="not calendar_event_id"/>
</group> </group>
</group> </group>
<group string="Alerts Sent" groups="activeblue_familylaw.group_admin"> <group string="Alerts Sent" groups="activeblue_familylaw.group_admin">

View File

@@ -20,7 +20,7 @@
<field name="notice_date"/> <field name="notice_date"/>
<field name="scheduled_date"/> <field name="scheduled_date"/>
<field name="days_until_deposition" string="Days Away" <field name="days_until_deposition" string="Days Away"
attrs="{'invisible': [('state', 'in', ['completed', 'cancelled'])]}"/> invisible="state in ['completed', 'cancelled']"/>
<field name="notice_valid" string="Notice OK" optional="show"/> <field name="notice_valid" string="Notice OK" optional="show"/>
<field name="state" widget="badge" <field name="state" widget="badge"
decoration-success="state == 'completed'" decoration-success="state == 'completed'"
@@ -44,24 +44,24 @@
<header> <header>
<button name="action_mark_noticed" string="Mark Notice Served" <button name="action_mark_noticed" string="Mark Notice Served"
type="object" class="oe_highlight" type="object" class="oe_highlight"
attrs="{'invisible': [('state', '!=', 'draft')]}"/> invisible="state != 'draft'"/>
<button name="action_confirm" string="Confirm" <button name="action_confirm" string="Confirm"
type="object" type="object"
attrs="{'invisible': [('state', '!=', 'noticed')]}"/> invisible="state != 'noticed'"/>
<button name="action_mark_completed" string="Mark Completed" <button name="action_mark_completed" string="Mark Completed"
type="object" class="oe_highlight" type="object" class="oe_highlight"
attrs="{'invisible': [('state', 'not in', ['confirmed', 'noticed'])]}"/> invisible="state not in ['confirmed', 'noticed']"/>
<button name="action_no_show" string="Deponent No-Show" <button name="action_no_show" string="Deponent No-Show"
type="object" type="object"
confirm="Mark this deponent as a no-show? This will trigger the Motion to Compel workflow." confirm="Mark this deponent as a no-show? This will trigger the Motion to Compel workflow."
attrs="{'invisible': [('state', 'not in', ['confirmed', 'noticed'])]}"/> invisible="state not in ['confirmed', 'noticed']"/>
<button name="action_reschedule" string="Reschedule" <button name="action_reschedule" string="Reschedule"
type="object" type="object"
attrs="{'invisible': [('state', 'not in', ['draft', 'noticed', 'confirmed'])]}"/> invisible="state not in ['draft', 'noticed', 'confirmed']"/>
<button name="action_cancel" string="Cancel" <button name="action_cancel" string="Cancel"
type="object" type="object"
confirm="Cancel this deposition?" confirm="Cancel this deposition?"
attrs="{'invisible': [('state', 'in', ['completed', 'cancelled'])]}"/> invisible="state in ['completed', 'cancelled']"/>
<field name="state" widget="statusbar" <field name="state" widget="statusbar"
statusbar_visible="draft,noticed,confirmed,completed"/> statusbar_visible="draft,noticed,confirmed,completed"/>
</header> </header>
@@ -74,18 +74,18 @@
<!-- Notice validity warning --> <!-- Notice validity warning -->
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': ['|', ('notice_valid', '=', True), ('notice_date', '=', False), ('scheduled_date', '=', False)]}"> invisible="(notice_valid or not notice_date) and not scheduled_date">
<strong>⚠️ INSUFFICIENT NOTICE</strong> <strong>⚠️ INSUFFICIENT NOTICE</strong>
<field name="notice_warning" readonly="1" nolabel="1"/> <field name="notice_warning" readonly="1" nolabel="1"/>
</div> </div>
<div class="alert alert-success" role="alert" <div class="alert alert-success" role="alert"
attrs="{'invisible': ['|', ('notice_valid', '=', False), ('notice_date', '=', False)]}"> invisible="(not notice_valid or not notice_date)">
<field name="notice_warning" readonly="1" nolabel="1"/> <field name="notice_warning" readonly="1" nolabel="1"/>
</div> </div>
<!-- No-Show alert --> <!-- No-Show alert -->
<div class="alert alert-danger" role="alert" <div class="alert alert-danger" role="alert"
attrs="{'invisible': [('state', '!=', 'no_show')]}"> invisible="state != 'no_show'">
<strong>⚠️ DEPONENT NO-SHOW</strong> — File Motion to Compel <strong>⚠️ DEPONENT NO-SHOW</strong> — File Motion to Compel
Attendance (FL 1.380). Check the Deadlines tab for the deadline. Attendance (FL 1.380). Check the Deadlines tab for the deadline.
You may also request sanctions under FL 1.380(b)(2). You may also request sanctions under FL 1.380(b)(2).
@@ -93,9 +93,9 @@
<!-- Completed summary --> <!-- Completed summary -->
<div class="alert alert-success" role="alert" <div class="alert alert-success" role="alert"
attrs="{'invisible': [('state', '!=', 'completed')]}"> invisible="state != 'completed'">
<strong>✅ Deposition Completed</strong> <strong>✅ Deposition Completed</strong>
<span attrs="{'invisible': [('income_verified', '=', False)]}"> <span invisible="not income_verified">
— Income verified at — Income verified at
<field name="income_verified_amount" readonly="1" nolabel="1"/> /month <field name="income_verified_amount" readonly="1" nolabel="1"/> /month
</span> </span>
@@ -121,7 +121,7 @@
<field name="location"/> <field name="location"/>
<field name="court_reporter"/> <field name="court_reporter"/>
<field name="calendar_event_id" readonly="1" <field name="calendar_event_id" readonly="1"
attrs="{'invisible': [('calendar_event_id', '=', False)]}"/> invisible="not calendar_event_id"/>
</group> </group>
</group> </group>
@@ -129,29 +129,29 @@
<group string="Duces Tecum — Document Production Requirement"> <group string="Duces Tecum — Document Production Requirement">
<field name="duces_tecum"/> <field name="duces_tecum"/>
<field name="duces_tecum_items" <field name="duces_tecum_items"
attrs="{'invisible': [('duces_tecum', '=', False)], 'required': [('duces_tecum', '=', True)]}" invisible="not duces_tecum" required="duces_tecum"
placeholder="List documents deponent must bring to the deposition:&#10;- Last 3 years federal/state tax returns&#10;- Last 6 months paystubs&#10;- All bank statements last 12 months&#10;- Business financial statements&#10;- Corporate tax returns&#10;- Quickbooks / accounting records"/> placeholder="List documents deponent must bring to the deposition:&#10;- Last 3 years federal/state tax returns&#10;- Last 6 months paystubs&#10;- All bank statements last 12 months&#10;- Business financial statements&#10;- Corporate tax returns&#10;- Quickbooks / accounting records"/>
</group> </group>
<!-- Results (shown when completed) --> <!-- Results (shown when completed) -->
<group string="Results / Findings" <group string="Results / Findings"
attrs="{'invisible': [('state', 'not in', ['completed', 'no_show'])]}"> invisible="state not in ['completed', 'no_show']">
<field name="income_verified"/> <field name="income_verified"/>
<field name="income_verified_amount" <field name="income_verified_amount"
attrs="{'invisible': [('income_verified', '=', False)]}"/> invisible="not income_verified"/>
<field name="transcript_received"/> <field name="transcript_received"/>
</group> </group>
<field name="key_findings" <field name="key_findings"
attrs="{'invisible': [('state', 'not in', ['completed'])]}" invisible="state not in ['completed']"
placeholder="Summarize key testimony: income figures, contradictions, admissions, document admissions..."/> placeholder="Summarize key testimony: income figures, contradictions, admissions, document admissions..."/>
<!-- Motion to Compel (no-show only) --> <!-- Motion to Compel (no-show only) -->
<group string="Motion to Compel (FL 1.380)" <group string="Motion to Compel (FL 1.380)"
attrs="{'invisible': [('state', '!=', 'no_show')]}"> invisible="state != 'no_show'">
<field name="motion_to_compel_filed"/> <field name="motion_to_compel_filed"/>
<field name="motion_to_compel_date" <field name="motion_to_compel_date"
attrs="{'invisible': [('motion_to_compel_filed', '=', False)]}"/> invisible="not motion_to_compel_filed"/>
<field name="sanctions_requested"/> <field name="sanctions_requested"/>
</group> </group>

View File

@@ -18,12 +18,12 @@
<field name="discovery_type"/> <field name="discovery_type"/>
<field name="directed_to"/> <field name="directed_to"/>
<field name="third_party_id" <field name="third_party_id"
attrs="{'invisible': [('directed_to', '!=', 'third_party')]}"/> invisible="directed_to != 'third_party'"/>
<field name="description"/> <field name="description"/>
<field name="served_date"/> <field name="served_date"/>
<field name="response_due_date"/> <field name="response_due_date"/>
<field name="days_until_response" string="Days Left" <field name="days_until_response" string="Days Left"
attrs="{'invisible': [('state', 'in', ['draft', 'responded', 'complete'])]}"/> invisible="state in ['draft', 'responded', 'complete']"/>
<field name="is_overdue" string="Overdue"/> <field name="is_overdue" string="Overdue"/>
<field name="admissions_deemed" string="Deemed Admitted" optional="show"/> <field name="admissions_deemed" string="Deemed Admitted" optional="show"/>
<field name="state" widget="badge" <field name="state" widget="badge"
@@ -33,13 +33,13 @@
decoration-muted="state == 'draft'"/> decoration-muted="state == 'draft'"/>
<button name="action_mark_served" string="Served" type="object" <button name="action_mark_served" string="Served" type="object"
icon="fa-paper-plane" icon="fa-paper-plane"
attrs="{'invisible': [('state', '!=', 'draft')]}"/> invisible="state != 'draft'"/>
<button name="action_mark_responded" string="Responded" type="object" <button name="action_mark_responded" string="Responded" type="object"
icon="fa-check" icon="fa-check"
attrs="{'invisible': [('state', '!=', 'served')]}"/> invisible="state != 'served'"/>
<button name="action_file_motion_to_compel" string="Compel" <button name="action_file_motion_to_compel" string="Compel"
type="object" icon="fa-gavel" type="object" icon="fa-gavel"
attrs="{'invisible': [('state', 'not in', ['served', 'deficient'])]}"/> invisible="state not in ['served', 'deficient']"/>
</tree> </tree>
</field> </field>
</record> </record>
@@ -55,20 +55,20 @@
<header> <header>
<button name="action_mark_served" string="Mark Served" <button name="action_mark_served" string="Mark Served"
type="object" class="oe_highlight" type="object" class="oe_highlight"
attrs="{'invisible': [('state', '!=', 'draft')]}"/> invisible="state != 'draft'"/>
<button name="action_mark_responded" string="Response Received" <button name="action_mark_responded" string="Response Received"
type="object" type="object"
attrs="{'invisible': [('state', '!=', 'served')]}"/> invisible="state != 'served'"/>
<button name="action_flag_deficient" string="Flag Deficient" <button name="action_flag_deficient" string="Flag Deficient"
type="object" type="object"
attrs="{'invisible': [('state', '!=', 'responded')]}"/> invisible="state != 'responded'"/>
<button name="action_file_motion_to_compel" <button name="action_file_motion_to_compel"
string="File Motion to Compel (FL 1.380)" string="File Motion to Compel (FL 1.380)"
type="object" type="object"
attrs="{'invisible': [('state', 'not in', ['served', 'deficient'])]}"/> invisible="state not in ['served', 'deficient']"/>
<button name="action_mark_complete" string="Mark Complete" <button name="action_mark_complete" string="Mark Complete"
type="object" type="object"
attrs="{'invisible': [('state', 'in', ['draft', 'complete'])]}"/> invisible="state in ['draft', 'complete']"/>
<field name="state" widget="statusbar" <field name="state" widget="statusbar"
statusbar_visible="draft,served,responded,complete"/> statusbar_visible="draft,served,responded,complete"/>
</header> </header>
@@ -76,7 +76,7 @@
<!-- Deemed Admitted Alert (FL 1.370) — CRITICAL --> <!-- Deemed Admitted Alert (FL 1.370) — CRITICAL -->
<div class="alert alert-danger" role="alert" <div class="alert alert-danger" role="alert"
attrs="{'invisible': [('admissions_deemed', '=', False)]}"> invisible="not admissions_deemed">
<strong>🚨 FL 1.370 — ADMISSIONS DEEMED ADMITTED</strong><br/> <strong>🚨 FL 1.370 — ADMISSIONS DEEMED ADMITTED</strong><br/>
No response was filed within 30 days. Each matter in this No response was filed within 30 days. Each matter in this
Request for Admissions is <strong>automatically deemed admitted</strong> Request for Admissions is <strong>automatically deemed admitted</strong>
@@ -87,7 +87,7 @@
<!-- Overdue response alert --> <!-- Overdue response alert -->
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': ['|', ('is_overdue', '=', False), ('admissions_deemed', '=', True)]}"> invisible="(not is_overdue or admissions_deemed)">
<strong>⏰ Response OVERDUE</strong> — Was due <strong>⏰ Response OVERDUE</strong> — Was due
<field name="response_due_date" readonly="1" nolabel="1"/>. <field name="response_due_date" readonly="1" nolabel="1"/>.
Consider sending a deficiency notice, then filing Consider sending a deficiency notice, then filing
@@ -96,7 +96,7 @@
<!-- Complete badge --> <!-- Complete badge -->
<div class="alert alert-success" role="alert" <div class="alert alert-success" role="alert"
attrs="{'invisible': [('state', '!=', 'complete')]}"> invisible="state != 'complete'">
<strong>✅ Discovery Item Complete</strong> <strong>✅ Discovery Item Complete</strong>
</div> </div>
@@ -106,14 +106,14 @@
<field name="discovery_type"/> <field name="discovery_type"/>
<field name="directed_to"/> <field name="directed_to"/>
<field name="third_party_id" <field name="third_party_id"
attrs="{'invisible': [('directed_to', '!=', 'third_party')], 'required': [('directed_to', '=', 'third_party')]}"/> invisible="directed_to != 'third_party'" required="directed_to == 'third_party'"/>
<field name="description"/> <field name="description"/>
</group> </group>
<group string="Timeline"> <group string="Timeline">
<field name="served_date"/> <field name="served_date"/>
<field name="response_due_date" readonly="1"/> <field name="response_due_date" readonly="1"/>
<field name="days_until_response" readonly="1" <field name="days_until_response" readonly="1"
attrs="{'invisible': [('state', 'in', ['draft', 'responded', 'complete'])]}"/> invisible="state in ['draft', 'responded', 'complete']"/>
<field name="is_overdue" readonly="1"/> <field name="is_overdue" readonly="1"/>
<field name="response_received_date"/> <field name="response_received_date"/>
<field name="response_complete"/> <field name="response_complete"/>
@@ -122,7 +122,7 @@
<!-- Subpoena info (third party) --> <!-- Subpoena info (third party) -->
<group string="Subpoena Information (FL 1.351)" <group string="Subpoena Information (FL 1.351)"
attrs="{'invisible': [('discovery_type', '!=', 'subpoena')]}"> invisible="discovery_type != 'subpoena'">
<div class="alert alert-info" role="alert"> <div class="alert alert-info" role="alert">
<strong>FL 1.351 Subpoena for Production:</strong> <strong>FL 1.351 Subpoena for Production:</strong>
Third party must respond within the time stated in the subpoena Third party must respond within the time stated in the subpoena
@@ -134,7 +134,7 @@
<!-- Admissions specific note --> <!-- Admissions specific note -->
<group string="Admissions (FL 1.370) — WARNING" <group string="Admissions (FL 1.370) — WARNING"
attrs="{'invisible': [('discovery_type', '!=', 'admissions')]}"> invisible="discovery_type != 'admissions'">
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
<strong>FL 1.370 Critical Rule:</strong> <strong>FL 1.370 Critical Rule:</strong>
If the responding party <strong>fails to respond within 30 days</strong>, If the responding party <strong>fails to respond within 30 days</strong>,
@@ -149,14 +149,14 @@
<group string="Objections / Deficiencies"> <group string="Objections / Deficiencies">
<field name="objections_raised"/> <field name="objections_raised"/>
<field name="objection_detail" <field name="objection_detail"
attrs="{'invisible': [('objections_raised', '=', False)]}"/> invisible="not objections_raised"/>
<field name="deficiency_notice_sent"/> <field name="deficiency_notice_sent"/>
<field name="deficiency_notice_date" <field name="deficiency_notice_date"
attrs="{'invisible': [('deficiency_notice_sent', '=', False)]}"/> invisible="not deficiency_notice_sent"/>
</group> </group>
<group string="Motion to Compel (FL 1.380)" <group string="Motion to Compel (FL 1.380)"
attrs="{'invisible': [('state', '!=', 'compelled')]}"> invisible="state != 'compelled'">
<field name="motion_to_compel_filed" readonly="1"/> <field name="motion_to_compel_filed" readonly="1"/>
<field name="motion_to_compel_date" readonly="1"/> <field name="motion_to_compel_date" readonly="1"/>
<field name="sanctions_requested"/> <field name="sanctions_requested"/>

View File

@@ -13,34 +13,34 @@
<header> <header>
<button name="action_validate_pdfa" string="Validate PDF/A" <button name="action_validate_pdfa" string="Validate PDF/A"
type="object" class="oe_highlight" type="object" class="oe_highlight"
attrs="{'invisible': [('status', 'not in', ['draft','validated'])]}"/> invisible="status not in ['draft', 'validated']"/>
<button name="action_open_portal" string="Open e-Filing Portal" <button name="action_open_portal" string="Open e-Filing Portal"
type="object" type="object"
attrs="{'invisible': [('status', 'in', ['accepted','rejected'])]}"/> invisible="status in ['accepted', 'rejected']"/>
<button name="action_record_confirmation" string="Mark Submitted" <button name="action_record_confirmation" string="Mark Submitted"
type="object" type="object"
attrs="{'invisible': [('status', 'not in', ['pending_manual','validated','failed'])]}"/> invisible="status not in ['pending_manual', 'validated', 'failed']"/>
<button name="action_mark_accepted" string="Clerk Accepted" <button name="action_mark_accepted" string="Clerk Accepted"
type="object" class="oe_highlight" type="object" class="oe_highlight"
attrs="{'invisible': [('status', '!=', 'submitted')]}"/> invisible="status != 'submitted'"/>
<button name="action_mark_rejected" string="Clerk Rejected" <button name="action_mark_rejected" string="Clerk Rejected"
type="object" type="object"
attrs="{'invisible': [('status', '!=', 'submitted')]}"/> invisible="status != 'submitted'"/>
<button name="action_submit_api" string="Submit via API" <button name="action_submit_api" string="Submit via API"
type="object" type="object"
groups="activeblue_familylaw.group_admin" groups="activeblue_familylaw.group_admin"
attrs="{'invisible': [('status', 'in', ['accepted','rejected','submitted'])]}"/> invisible="status in ['accepted', 'rejected', 'submitted']"/>
<field name="status" widget="statusbar" <field name="status" widget="statusbar"
statusbar_visible="draft,validated,pending_manual,submitted,accepted"/> statusbar_visible="draft,validated,pending_manual,submitted,accepted"/>
</header> </header>
<sheet> <sheet>
<div class="alert alert-success" role="alert" <div class="alert alert-success" role="alert"
attrs="{'invisible': [('pdfa_valid', '=', False)]}"> invisible="not pdfa_valid">
<strong>✅ PDF/A:</strong> <strong>✅ PDF/A:</strong>
<field name="pdfa_message" readonly="1" nolabel="1" class="oe_inline"/> <field name="pdfa_message" readonly="1" nolabel="1" class="oe_inline"/>
</div> </div>
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': ['|', ('pdfa_valid', '=', True), ('pdfa_message', '=', False)]}"> invisible="(pdfa_valid or not pdfa_message)">
<strong>⚠️ PDF/A:</strong> <strong>⚠️ PDF/A:</strong>
<field name="pdfa_message" readonly="1" nolabel="1" class="oe_inline"/> <field name="pdfa_message" readonly="1" nolabel="1" class="oe_inline"/>
</div> </div>
@@ -62,7 +62,7 @@
</group> </group>
</group> </group>
<field name="error_message" readonly="1" <field name="error_message" readonly="1"
attrs="{'invisible': [('error_message', '=', False)]}"/> invisible="not error_message"/>
<separator string="Notes"/> <separator string="Notes"/>
<field name="notes" nolabel="1" <field name="notes" nolabel="1"
placeholder="Clerk rejection reasons, filing remarks, etc."/> placeholder="Clerk rejection reasons, filing remarks, etc."/>

View File

@@ -10,26 +10,26 @@
<header> <header>
<button name="action_submit" string="Submit to Clerk" <button name="action_submit" string="Submit to Clerk"
type="object" class="oe_highlight" type="object" class="oe_highlight"
attrs="{'invisible': [('state', '!=', 'draft')]}"/> invisible="state != 'draft'"/>
<button name="action_approve" string="Approved" <button name="action_approve" string="Approved"
type="object" type="object"
attrs="{'invisible': [('state', '!=', 'submitted')]}" invisible="state != 'submitted'"
groups="activeblue_familylaw.group_admin"/> groups="activeblue_familylaw.group_admin"/>
<button name="action_deny" string="Denied" <button name="action_deny" string="Denied"
type="object" type="object"
attrs="{'invisible': [('state', '!=', 'submitted')]}" invisible="state != 'submitted'"
groups="activeblue_familylaw.group_admin"/> groups="activeblue_familylaw.group_admin"/>
<field name="state" widget="statusbar"/> <field name="state" widget="statusbar"/>
</header> </header>
<sheet> <sheet>
<div class="alert alert-success" role="alert" <div class="alert alert-success" role="alert"
attrs="{'invisible': [('eligible', '=', False)]}"> invisible="not eligible">
<strong>✅ ELIGIBLE</strong><field name="eligibility_note" readonly="1" nolabel="1"/> <strong>✅ ELIGIBLE</strong><field name="eligibility_note" readonly="1" nolabel="1"/>
<br/>This applicant may also qualify for a <br/>This applicant may also qualify for a
<strong>free county mediator</strong> under FL 44.108. <strong>free county mediator</strong> under FL 44.108.
</div> </div>
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': [('eligible', '=', True)]}"> invisible="eligible">
<field name="eligibility_note" readonly="1" nolabel="1"/> <field name="eligibility_note" readonly="1" nolabel="1"/>
</div> </div>
<group> <group>
@@ -51,11 +51,11 @@
<field name="mediator_fee_waiver_eligible" readonly="1"/> <field name="mediator_fee_waiver_eligible" readonly="1"/>
</group> </group>
<group string="Outcome" <group string="Outcome"
attrs="{'invisible': [('state', 'in', ['draft', 'submitted'])]}"> invisible="state in ['draft', 'submitted']">
<field name="approval_date" <field name="approval_date"
attrs="{'invisible': [('state', '!=', 'approved')]}"/> invisible="state != 'approved'"/>
<field name="denial_reason" <field name="denial_reason"
attrs="{'invisible': [('state', '!=', 'denied')]}"/> invisible="state != 'denied'"/>
</group> </group>
<field name="notes"/> <field name="notes"/>
</sheet> </sheet>

View File

@@ -41,37 +41,37 @@
<header> <header>
<button name="action_mark_completed" string="Mark Completed" <button name="action_mark_completed" string="Mark Completed"
type="object" class="oe_highlight" type="object" class="oe_highlight"
attrs="{'invisible': [('state', '!=', 'scheduled')]}"/> invisible="state != 'scheduled'"/>
<button name="action_mark_continued" string="Mark Continued" <button name="action_mark_continued" string="Mark Continued"
type="object" type="object"
attrs="{'invisible': [('state', '!=', 'scheduled')]}"/> invisible="state != 'scheduled'"/>
<button name="action_cancel" string="Cancel Hearing" <button name="action_cancel" string="Cancel Hearing"
type="object" confirm="Cancel this hearing? This cannot be undone." type="object" confirm="Cancel this hearing? This cannot be undone."
attrs="{'invisible': [('state', 'not in', ['scheduled', 'continued'])]}"/> invisible="state not in ['scheduled', 'continued']"/>
<field name="state" widget="statusbar" <field name="state" widget="statusbar"
statusbar_visible="scheduled,completed,cancelled,continued"/> statusbar_visible="scheduled,completed,cancelled,continued"/>
</header> </header>
<sheet> <sheet>
<!-- Outcome section — shown after completion --> <!-- Outcome section — shown after completion -->
<div class="alert alert-success" role="alert" <div class="alert alert-success" role="alert"
attrs="{'invisible': [('state', '!=', 'completed')]}"> invisible="state != 'completed'">
<strong>✅ Hearing Completed</strong> <strong>✅ Hearing Completed</strong>
<span attrs="{'invisible': [('outcome', '=', False)]}"> <span invisible="not outcome">
<field name="outcome" readonly="1" nolabel="1"/> <field name="outcome" readonly="1" nolabel="1"/>
</span> </span>
<span attrs="{'invisible': [('outcome', '!=', False)]}"> <span invisible="outcome">
— Update the Outcome field below with the judge's ruling. — Update the Outcome field below with the judge's ruling.
</span> </span>
</div> </div>
<!-- Continued notice --> <!-- Continued notice -->
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': [('state', '!=', 'continued')]}"> invisible="state != 'continued'">
<strong>⏸️ Hearing Continued</strong> — Contact the court for <strong>⏸️ Hearing Continued</strong> — Contact the court for
the rescheduled date and create a new hearing record. the rescheduled date and create a new hearing record.
</div> </div>
<!-- Cancelled notice --> <!-- Cancelled notice -->
<div class="alert alert-danger" role="alert" <div class="alert alert-danger" role="alert"
attrs="{'invisible': [('state', '!=', 'cancelled')]}"> invisible="state != 'cancelled'">
<strong>❌ Hearing Cancelled</strong> <strong>❌ Hearing Cancelled</strong>
</div> </div>
@@ -88,7 +88,7 @@
<field name="courtroom"/> <field name="courtroom"/>
<field name="judge_id"/> <field name="judge_id"/>
<field name="calendar_event_id" readonly="1" <field name="calendar_event_id" readonly="1"
attrs="{'invisible': [('calendar_event_id', '=', False)]}"/> invisible="not calendar_event_id"/>
</group> </group>
</group> </group>
@@ -116,7 +116,7 @@
<!-- Outcome (visible after hearing) --> <!-- Outcome (visible after hearing) -->
<group string="Outcome" <group string="Outcome"
attrs="{'invisible': [('state', 'not in', ['completed', 'continued'])]}"> invisible="state not in ['completed', 'continued']">
<field name="order_entered"/> <field name="order_entered"/>
<field name="outcome" placeholder="Describe the judge's ruling, any orders entered, next steps..."/> <field name="outcome" placeholder="Describe the judge's ruling, any orders entered, next steps..."/>
</group> </group>

View File

@@ -58,17 +58,17 @@
<group> <group>
<field name="income_imputed"/> <field name="income_imputed"/>
<field name="imputed_amount" <field name="imputed_amount"
attrs="{'invisible': [('income_imputed', '=', False)]}"/> invisible="not income_imputed"/>
<field name="fl_minimum_wage_hourly"/> <field name="fl_minimum_wage_hourly"/>
<field name="fl_minimum_wage_monthly" readonly="1"/> <field name="fl_minimum_wage_monthly" readonly="1"/>
<field name="imputation_basis" <field name="imputation_basis"
attrs="{'invisible': [('income_imputed', '=', False)]}"/> invisible="not income_imputed"/>
</group> </group>
<separator string="Lifestyle Analysis (Barner v. Barner)"/> <separator string="Lifestyle Analysis (Barner v. Barner)"/>
<group> <group>
<field name="lifestyle_inconsistency_flag"/> <field name="lifestyle_inconsistency_flag"/>
<field name="lifestyle_notes" <field name="lifestyle_notes"
attrs="{'invisible': [('lifestyle_inconsistency_flag', '=', False)]}"/> invisible="not lifestyle_inconsistency_flag"/>
</group> </group>
</page> </page>
<page string="Service &amp; SSN"> <page string="Service &amp; SSN">
@@ -77,7 +77,7 @@
<field name="service_address"/> <field name="service_address"/>
<field name="service_method"/> <field name="service_method"/>
<field name="process_server_id" <field name="process_server_id"
attrs="{'invisible': [('service_method', '!=', 'personal')]}"/> invisible="service_method != 'personal'"/>
</group> </group>
<group string="SSN (FL-12.930(a))"> <group string="SSN (FL-12.930(a))">
<field name="ssn_last4"/> <field name="ssn_last4"/>
@@ -86,7 +86,7 @@
</group> </group>
</group> </group>
<div class="alert alert-warning" role="alert" <div class="alert alert-warning" role="alert"
attrs="{'invisible': [('service_method', '!=', 'publication')]}"> invisible="service_method != 'publication'">
<strong>⚠️ Service by Publication</strong> is the most complex <strong>⚠️ Service by Publication</strong> is the most complex
service method and requires a diligent search affidavit. service method and requires a diligent search affidavit.
Attorney representation is strongly recommended. Attorney representation is strongly recommended.

View File

@@ -87,11 +87,11 @@
<group> <group>
<field name="deviation_requested"/> <field name="deviation_requested"/>
<field name="deviation_reason" <field name="deviation_reason"
attrs="{'invisible': [('deviation_requested', '=', False)]}"/> invisible="not deviation_requested"/>
<field name="deviation_amount" <field name="deviation_amount"
attrs="{'invisible': [('deviation_requested', '=', False)]}"/> invisible="not deviation_requested"/>
<field name="final_amount_with_deviation" readonly="1" <field name="final_amount_with_deviation" readonly="1"
attrs="{'invisible': [('deviation_requested', '=', False)]}"/> invisible="not deviation_requested"/>
</group> </group>
<separator string="Summary"/> <separator string="Summary"/>

View File

@@ -49,7 +49,7 @@
</div> </div>
<div class="fl-deadline-date text-muted" style="font-size:0.85rem;"> <div class="fl-deadline-date text-muted" style="font-size:0.85rem;">
Filed: <t t-esc="case.filing_date or 'Pending'"/> Filed: <t t-esc="case.filing_date or 'Pending'"/>
&nbsp;|&nbsp; Case No.: <t t-esc="case.court_case_number or 'Pending'"/> &#160;|&#160; Case No.: <t t-esc="case.court_case_number or 'Pending'"/>
</div> </div>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
@@ -134,9 +134,9 @@
<div class="fl-case-meta"> <div class="fl-case-meta">
<t t-esc="dict([('dissolution','Dissolution of Marriage'),('paternity','Paternity'),('child_support','Child Support'),('modification','Modification'),('injunction','Injunction / DV')]).get(case.case_type, case.case_type)"/> <t t-esc="dict([('dissolution','Dissolution of Marriage'),('paternity','Paternity'),('child_support','Child Support'),('modification','Modification'),('injunction','Injunction / DV')]).get(case.case_type, case.case_type)"/>
<t t-if="case.court_case_number"> <t t-if="case.court_case_number">
&nbsp;| Case No. <t t-esc="case.court_case_number"/> &#160;| Case No. <t t-esc="case.court_case_number"/>
</t> </t>
&nbsp;| Filed <t t-esc="case.filing_date or 'Pending'"/> &#160;| Filed <t t-esc="case.filing_date or 'Pending'"/>
</div> </div>
</div> </div>
<div> <div>
@@ -148,7 +148,7 @@
<!-- Stats row --> <!-- Stats row -->
<div class="row g-3 mb-4"> <div class="row g-3 mb-4">
<div class="col-6 col-md-3"> <div class="col-6 col-md-3">
<div class="fl-stat-card <t t-if='case.overdue_deadline_count'>danger</t>"> <div t-attf-class="fl-stat-card #{'danger' if case.overdue_deadline_count else ''}">
<div class="fl-stat-number"><t t-esc="case.overdue_deadline_count or 0"/></div> <div class="fl-stat-number"><t t-esc="case.overdue_deadline_count or 0"/></div>
<div class="fl-stat-label">Overdue</div> <div class="fl-stat-label">Overdue</div>
</div> </div>
@@ -166,7 +166,7 @@
</div> </div>
</div> </div>
<div class="col-6 col-md-3"> <div class="col-6 col-md-3">
<div class="fl-stat-card <t t-if='case.threshold_met'>success</t>"> <div t-attf-class="fl-stat-card #{'success' if case.threshold_met else ''}">
<div class="fl-stat-number" style="font-size:1.2rem;"> <div class="fl-stat-number" style="font-size:1.2rem;">
<t t-if="case.threshold_met">✓ Met</t> <t t-if="case.threshold_met">✓ Met</t>
<t t-else=""></t> <t t-else=""></t>
@@ -277,7 +277,7 @@
<t t-esc="doc.document_type or 'Document'"/> <t t-esc="doc.document_type or 'Document'"/>
</div> </div>
</div> </div>
<span class="fl-doc-badge <t t-if='doc.state == \"filed\"'>filed</t><t t-elif='doc.state == \"draft\"'>draft</t>"> <span t-attf-class="fl-doc-badge #{'filed' if doc.state == 'filed' else 'draft' if doc.state == 'draft' else ''}">
<t t-esc="(doc.state or 'draft').title()"/> <t t-esc="(doc.state or 'draft').title()"/>
</span> </span>
</a> </a>
@@ -294,7 +294,7 @@
<strong><t t-esc="case.next_hearing.name"/></strong><br/> <strong><t t-esc="case.next_hearing.name"/></strong><br/>
<t t-esc="case.next_hearing.hearing_date"/> <t t-esc="case.next_hearing.hearing_date"/>
<t t-if="case.next_hearing.location"> <t t-if="case.next_hearing.location">
&nbsp;| <t t-esc="case.next_hearing.location"/> &#160;| <t t-esc="case.next_hearing.location"/>
</t> </t>
<div class="mt-2" style="font-size:0.85rem;"> <div class="mt-2" style="font-size:0.85rem;">
<t t-if="case.next_hearing.parenting_class_warning"> <t t-if="case.next_hearing.parenting_class_warning">

View File

@@ -33,7 +33,7 @@
<!-- Hero --> <!-- Hero -->
<div class="text-center mb-5"> <div class="text-center mb-5">
<h1 style="color:#003366;" data-lang="en">Florida Family Law — Self-Help Portal</h1> <h1 style="color:#003366;" data-lang="en">Florida Family Law — Self-Help Portal</h1>
<h1 style="color:#003366;" data-lang="es" style="display:none;">Portal de Autoayuda — Derecho de Familia de Florida</h1> <h1 style="color:#003366;display:none;" data-lang="es">Portal de Autoayuda — Derecho de Familia de Florida</h1>
<p class="lead text-muted" data-lang="en"> <p class="lead text-muted" data-lang="en">
Free tools for pro se litigants in Miami-Dade County (11th Circuit).<br/> Free tools for pro se litigants in Miami-Dade County (11th Circuit).<br/>
Child support modification, paternity, dissolution, and more. Child support modification, paternity, dissolution, and more.
@@ -151,7 +151,7 @@
<!-- Header --> <!-- Header -->
<h2 style="color:#003366;" class="mb-1" data-lang="en">Start Your Case</h2> <h2 style="color:#003366;" class="mb-1" data-lang="en">Start Your Case</h2>
<h2 style="color:#003366;" class="mb-1" data-lang="es" style="display:none;">Iniciar Su Caso</h2> <h2 style="color:#003366;display:none;" class="mb-1" data-lang="es">Iniciar Su Caso</h2>
<p class="text-muted mb-4" data-lang="en">Fill in the information below. We'll help you generate the right court forms and track your deadlines.</p> <p class="text-muted mb-4" data-lang="en">Fill in the information below. We'll help you generate the right court forms and track your deadlines.</p>
<p class="text-muted mb-4" data-lang="es" style="display:none;">Complete la información a continuación. Le ayudaremos a generar los formularios judiciales correctos y rastrear sus fechas límite.</p> <p class="text-muted mb-4" data-lang="es" style="display:none;">Complete la información a continuación. Le ayudaremos a generar los formularios judiciales correctos y rastrear sus fechas límite.</p>
@@ -328,7 +328,7 @@
<div class="alert alert-info" style="font-size:0.85rem;" data-lang="en"> <div class="alert alert-info" style="font-size:0.85rem;" data-lang="en">
Use <strong>monthly net income</strong> (after taxes, FICA, and required deductions per FL 61.30(3)). Use <strong>monthly net income</strong> (after taxes, FICA, and required deductions per FL 61.30(3)).
</div> </div>
<div class="alert alert-info" style="font-size:0.85rem;" data-lang="es" style="display:none;"> <div class="alert alert-info" style="font-size:0.85rem;display:none;" data-lang="es">
Use el <strong>ingreso neto mensual</strong> (después de impuestos, FICA y deducciones requeridas por FL 61.30(3)). Use el <strong>ingreso neto mensual</strong> (después de impuestos, FICA y deducciones requeridas por FL 61.30(3)).
</div> </div>
@@ -461,7 +461,7 @@
<div class="container mt-5 mb-5 text-center"> <div class="container mt-5 mb-5 text-center">
<div style="font-size:3rem;"></div> <div style="font-size:3rem;"></div>
<h2 style="color:#003366;" data-lang="en">Your Case Has Been Created!</h2> <h2 style="color:#003366;" data-lang="en">Your Case Has Been Created!</h2>
<h2 style="color:#003366;" data-lang="es" style="display:none;">¡Su Caso Ha Sido Creado!</h2> <h2 style="color:#003366;display:none;" data-lang="es">¡Su Caso Ha Sido Creado!</h2>
<p class="lead" data-lang="en"> <p class="lead" data-lang="en">
Case <strong><t t-esc="case_name"/></strong> is now open. Case <strong><t t-esc="case_name"/></strong> is now open.
An email confirmation has been sent to <strong><t t-esc="petitioner_email"/></strong>. An email confirmation has been sent to <strong><t t-esc="petitioner_email"/></strong>.