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

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