This commit is contained in:
gsinghpal
2026-03-13 12:38:28 -04:00
parent db4b9aa278
commit fc3c966484
2975 changed files with 1614 additions and 498 deletions

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ============================================================
Equipment Type — Tree View
============================================================ -->
<record id="view_equipment_type_tree" model="ir.ui.view">
<field name="name">fusion.equipment.type.tree</field>
<field name="model">fusion.equipment.type</field>
<field name="arch" type="xml">
<list string="Equipment Types" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="code"/>
<field name="icon"/>
<field name="active" column_invisible="1"/>
</list>
</field>
</record>
<!-- ============================================================
Equipment Type — Form View
============================================================ -->
<record id="view_equipment_type_form" model="ir.ui.view">
<field name="name">fusion.equipment.type.form</field>
<field name="model">fusion.equipment.type</field>
<field name="arch" type="xml">
<form string="Equipment Type">
<sheet>
<div class="oe_title">
<h1>
<field name="name" placeholder="e.g. Stair Lift"/>
</h1>
</div>
<group>
<group>
<field name="code" placeholder="e.g. stair_lift"/>
<field name="icon" placeholder="e.g. fa-arrow-up"/>
<field name="sequence"/>
</group>
<group>
<field name="active"/>
</group>
</group>
<group string="Description">
<field name="description" nolabel="1"
placeholder="Optional description of this equipment type..."/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ============================================================
Equipment Type — Action
============================================================ -->
<record id="action_equipment_type" model="ir.actions.act_window">
<field name="name">Equipment Types</field>
<field name="res_model">fusion.equipment.type</field>
<field name="view_mode">list,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create an Equipment Type
</p>
<p>
Equipment types define the categories of equipment that can be
assessed and quoted. Each type can have its own Configuration Flow
with custom form steps.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Quotation Builder under Configuration -->
<menuitem id="menu_wc_quotation_root"
name="Quotation Builder"
parent="fusion_claims.menu_adp_config"
sequence="50"/>
<!-- Assessments -->
<menuitem id="menu_wc_assessment"
name="Wheelchair Assessments"
parent="menu_wc_quotation_root"
action="action_wc_assessment"
sequence="10"/>
<!-- Configuration submenu -->
<menuitem id="menu_wc_config"
name="Configuration"
parent="menu_wc_quotation_root"
sequence="90"
groups="sales_team.group_sale_manager"/>
<menuitem id="menu_wc_sections"
name="Wheelchair Sections"
parent="menu_wc_config"
action="action_wc_section"
sequence="10"/>
<menuitem id="menu_wc_upcharge_rules"
name="Upcharge Rules"
parent="menu_wc_config"
action="action_wc_upcharge_rule"
sequence="20"/>
<menuitem id="menu_wc_config_flows"
name="Configuration Flows"
parent="menu_wc_config"
action="action_wc_config_flow"
sequence="30"/>
<menuitem id="menu_equipment_types"
name="Equipment Types"
parent="menu_wc_config"
action="action_equipment_type"
sequence="40"/>
<!-- Server action: Auto-Populate All Sections -->
<record id="action_auto_populate_all" model="ir.actions.server">
<field name="name">Auto-Populate All Sections from Inventory</field>
<field name="model_id" ref="model_fusion_wc_section"/>
<field name="state">code</field>
<field name="code">action = model.action_auto_populate_all_sections()</field>
</record>
<menuitem id="menu_wc_auto_populate"
name="Auto-Populate Products"
parent="menu_wc_config"
action="action_auto_populate_all"
sequence="5"/>
</odoo>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,496 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ============================================================ -->
<!-- ASSESSMENT TREE VIEW -->
<!-- ============================================================ -->
<record id="view_wc_assessment_tree" model="ir.ui.view">
<field name="name">fusion.wc.assessment.tree</field>
<field name="model">fusion.wc.assessment</field>
<field name="arch" type="xml">
<list decoration-info="state == 'draft'"
decoration-warning="state == 'review'"
decoration-success="state == 'quoted'"
decoration-muted="state == 'cancelled'">
<field name="reference"/>
<field name="client_name"/>
<field name="equipment_type"/>
<field name="wheelchair_type"/>
<field name="client_type"/>
<field name="build_type"/>
<field name="sales_rep_id"/>
<field name="assessment_date"/>
<field name="total_estimate" sum="Total"/>
<field name="state" widget="badge"
decoration-info="state == 'draft'"
decoration-warning="state == 'review'"
decoration-success="state == 'quoted'"
decoration-danger="state == 'cancelled'"/>
</list>
</field>
</record>
<!-- ============================================================ -->
<!-- ASSESSMENT KANBAN VIEW -->
<!-- ============================================================ -->
<record id="view_wc_assessment_kanban" model="ir.ui.view">
<field name="name">fusion.wc.assessment.kanban</field>
<field name="model">fusion.wc.assessment</field>
<field name="arch" type="xml">
<kanban default_group_by="state" class="o_kanban_small_column">
<field name="state"/>
<field name="reference"/>
<field name="client_name"/>
<field name="equipment_type"/>
<field name="sales_rep_id"/>
<field name="total_estimate"/>
<templates>
<t t-name="card">
<div class="oe_kanban_content">
<strong><field name="reference"/></strong>
<div><field name="client_name"/></div>
<div class="text-muted">
<field name="equipment_type"/>
</div>
<div>
<field name="sales_rep_id" widget="many2one_avatar_user"/>
<span class="float-end fw-bold">
$<field name="total_estimate"/>
</span>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- ============================================================ -->
<!-- ASSESSMENT SEARCH VIEW -->
<!-- ============================================================ -->
<record id="view_wc_assessment_search" model="ir.ui.view">
<field name="name">fusion.wc.assessment.search</field>
<field name="model">fusion.wc.assessment</field>
<field name="arch" type="xml">
<search string="Wheelchair Assessments">
<field name="reference"/>
<field name="client_name"/>
<field name="partner_id"/>
<field name="sales_rep_id"/>
<field name="authorizer_id"/>
<separator/>
<filter name="draft" string="In Progress"
domain="[('state', '=', 'draft')]"/>
<filter name="review" string="Ready for Review"
domain="[('state', '=', 'review')]"/>
<filter name="quoted" string="Quoted"
domain="[('state', '=', 'quoted')]"/>
<separator/>
<filter name="manual" string="Manual Wheelchair"
domain="[('equipment_type', '=', 'manual_wheelchair')]"/>
<filter name="power" string="Power Wheelchair / Scooter"
domain="[('equipment_type', '=', 'power_wheelchair')]"/>
<filter name="walker" string="Walker / Ambulation Aid"
domain="[('equipment_type', '=', 'walker')]"/>
<separator/>
<filter name="my_assessments" string="My Assessments"
domain="[('sales_rep_id', '=', uid)]"/>
<separator/>
<filter name="group_state" string="Status"
context="{'group_by': 'state'}"/>
<filter name="group_equipment" string="Equipment Type"
context="{'group_by': 'equipment_type'}"/>
<filter name="group_rep" string="Sales Rep"
context="{'group_by': 'sales_rep_id'}"/>
<filter name="group_date" string="Date"
context="{'group_by': 'assessment_date:month'}"/>
</search>
</field>
</record>
<!-- ============================================================ -->
<!-- ASSESSMENT FORM VIEW -->
<!-- ============================================================ -->
<record id="view_wc_assessment_form" model="ir.ui.view">
<field name="name">fusion.wc.assessment.form</field>
<field name="model">fusion.wc.assessment</field>
<field name="arch" type="xml">
<form string="Wheelchair Assessment">
<header>
<button name="action_generate_quotation" string="Generate Quotation"
type="object" class="btn-primary"
invisible="state not in ('draft', 'review')"
confirm="Generate a quotation from this assessment?"/>
<button name="action_mark_review" string="Mark Ready"
type="object" class="btn-secondary"
invisible="state != 'draft'"/>
<button name="action_cancel" string="Cancel"
type="object" class="btn-secondary"
invisible="state in ('quoted', 'cancelled')"/>
<button name="action_reset_draft" string="Reset to Draft"
type="object" class="btn-secondary"
invisible="state != 'cancelled'"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,review,quoted"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_view_quotation" type="object"
class="oe_stat_button" icon="fa-file-text-o"
invisible="not sale_order_id">
<span class="o_stat_text">Quotation</span>
</button>
<button name="action_open_portal_form" type="object"
class="oe_stat_button" icon="fa-external-link">
<span class="o_stat_text">Open Form</span>
</button>
<button name="action_generate_share_link" type="object"
class="oe_stat_button" icon="fa-share-alt">
<span class="o_stat_text">Share Link</span>
</button>
</div>
<div class="oe_title">
<h1>
<field name="reference" readonly="1"/>
</h1>
</div>
<notebook>
<!-- TAB 1: CLIENT & EQUIPMENT -->
<page string="Client &amp; Equipment" name="client">
<group>
<group string="Client">
<field name="partner_id"
invisible="create_new_partner"/>
<field name="create_new_partner"/>
<field name="client_first_name"
invisible="not create_new_partner"/>
<field name="client_last_name"
invisible="not create_new_partner"/>
<field name="client_phone"
invisible="not create_new_partner"/>
<field name="client_email"
invisible="not create_new_partner"/>
<field name="client_health_card"/>
<field name="client_dob"/>
</group>
<group string="Equipment">
<field name="equipment_type"/>
<field name="wheelchair_type"
invisible="equipment_type != 'manual_wheelchair'"/>
<field name="powerchair_type"
invisible="equipment_type != 'power_wheelchair'"/>
<field name="walker_type"
invisible="equipment_type != 'walker'"/>
<field name="client_type"/>
<field name="build_type"
invisible="equipment_type == 'walker'"/>
<field name="reason_for_application"/>
</group>
</group>
<group>
<group string="Assessment">
<field name="sales_rep_id"/>
<field name="authorizer_id"/>
<field name="assessment_date"/>
</group>
</group>
</page>
<!-- TAB 2: ADP MEASUREMENTS -->
<page string="Measurements" name="measurements">
<!-- MANUAL WHEELCHAIR MEASUREMENTS (Section 2b) -->
<group string="Manual Wheelchair Prescription Details"
invisible="equipment_type != 'manual_wheelchair'">
<group>
<label for="seat_width"/>
<div class="d-flex gap-2">
<field name="seat_width" class="oe_inline"/>
<field name="seat_width_unit" class="oe_inline"/>
</div>
<label for="seat_depth"/>
<div class="d-flex gap-2">
<field name="seat_depth" class="oe_inline"/>
<field name="seat_depth_unit" class="oe_inline"/>
</div>
<label for="finished_seat_to_floor_height"/>
<div class="d-flex gap-2">
<field name="finished_seat_to_floor_height" class="oe_inline"/>
<field name="seat_to_floor_unit" class="oe_inline"/>
</div>
<label for="back_cane_height"/>
<div class="d-flex gap-2">
<field name="back_cane_height" class="oe_inline"/>
<field name="cane_height_unit" class="oe_inline"/>
</div>
</group>
<group>
<label for="finished_back_height"/>
<div class="d-flex gap-2">
<field name="finished_back_height" class="oe_inline"/>
<field name="back_height_unit" class="oe_inline"/>
</div>
<label for="finished_leg_rest_length"/>
<div class="d-flex gap-2">
<field name="finished_leg_rest_length" class="oe_inline"/>
<field name="leg_rest_unit" class="oe_inline"/>
</div>
<label for="client_weight"/>
<div class="d-flex gap-2">
<field name="client_weight" class="oe_inline"/>
<field name="client_weight_unit" class="oe_inline"/>
</div>
</group>
</group>
<!-- WALKER / ROLLATOR MEASUREMENTS (Section 2a) -->
<group string="Wheeled Walker Prescription Details"
invisible="equipment_type != 'walker'">
<group>
<label for="walker_seat_height"/>
<div class="d-flex gap-2">
<field name="walker_seat_height" class="oe_inline"/>
<field name="walker_seat_height_unit" class="oe_inline"/>
</div>
<label for="push_handle_height"/>
<div class="d-flex gap-2">
<field name="push_handle_height" class="oe_inline"/>
<field name="push_handle_height_unit" class="oe_inline"/>
</div>
<field name="hand_grips"/>
<field name="forearm_attachments"/>
<label for="width_between_push_handles"/>
<div class="d-flex gap-2">
<field name="width_between_push_handles" class="oe_inline"/>
<field name="push_handle_width_unit" class="oe_inline"/>
</div>
</group>
<group>
<label for="client_weight"/>
<div class="d-flex gap-2">
<field name="client_weight" class="oe_inline"/>
<field name="client_weight_unit" class="oe_inline"/>
</div>
<field name="walker_brakes"/>
<field name="walker_brake_type"/>
<field name="walker_num_wheels"/>
<field name="walker_wheel_size"/>
<field name="walker_back_support"/>
</group>
</group>
<group string="Walker ADP Funded Options"
invisible="equipment_type != 'walker'">
<group>
<field name="walker_adolescent_wheeled_walker"/>
<field name="walker_adolescent_walking_frame"/>
<field name="walker_adolescent_standing_frame"/>
</group>
</group>
<!-- POWER BASE / SCOOTER MEASUREMENTS (Section 2c) -->
<group string="Power Device Prescription Details"
invisible="equipment_type != 'power_wheelchair'">
<group>
<label for="seat_width"/>
<div class="d-flex gap-2">
<field name="seat_width" class="oe_inline"/>
<field name="seat_width_unit" class="oe_inline"/>
</div>
<label for="finished_back_height"/>
<div class="d-flex gap-2">
<field name="finished_back_height" class="oe_inline"/>
<field name="back_height_unit" class="oe_inline"/>
</div>
<label for="finished_seat_to_floor_height"/>
<div class="d-flex gap-2">
<field name="finished_seat_to_floor_height" class="oe_inline"/>
<field name="seat_to_floor_unit" class="oe_inline"/>
</div>
</group>
<group>
<label for="finished_leg_rest_length"/>
<div class="d-flex gap-2">
<field name="finished_leg_rest_length" class="oe_inline"/>
<field name="leg_rest_unit" class="oe_inline"/>
</div>
<label for="seat_depth"/>
<div class="d-flex gap-2">
<field name="seat_depth" class="oe_inline"/>
<field name="seat_depth_unit" class="oe_inline"/>
</div>
<label for="client_weight"/>
<div class="d-flex gap-2">
<field name="client_weight" class="oe_inline"/>
<field name="client_weight_unit" class="oe_inline"/>
</div>
</group>
</group>
<group string="Power Base ADP Funded Options"
invisible="equipment_type != 'power_wheelchair'">
<group>
<field name="pw_adjustable_tension_back"/>
<field name="pw_midline_control"/>
<field name="pw_manual_recline"/>
<field name="pw_angle_adjustable_footplates"/>
<field name="pw_manual_elevating_legrests"/>
<field name="pw_swingaway_bracket"/>
</group>
<group>
<field name="pw_front_riggings"/>
<field name="pw_seat_package_1"/>
<field name="pw_seat_package_2"/>
<field name="pw_oxygen_tank"/>
<field name="pw_ventilator_tray"/>
</group>
</group>
<group string="Specialty Components (* Provide Clinical Rationale)"
invisible="equipment_type != 'power_wheelchair'">
<group>
<field name="pw_specialty_1_joystick"/>
<field name="pw_specialty_2_chin"/>
<field name="pw_specialty_3_touch"/>
<field name="pw_specialty_4_proximity"/>
</group>
<group>
<field name="pw_specialty_5_breath"/>
<field name="pw_specialty_6_scanners"/>
<field name="pw_auto_correction"/>
</group>
<group colspan="2">
<field name="pw_specialty_rationale"
placeholder="Clinical rationale for specialty components..."
invisible="not pw_specialty_1_joystick and not pw_specialty_2_chin and not pw_specialty_3_touch and not pw_specialty_4_proximity and not pw_specialty_5_breath and not pw_specialty_6_scanners and not pw_auto_correction"/>
</group>
</group>
<group string="Power Positioning Devices"
invisible="equipment_type != 'power_wheelchair'">
<group>
<field name="pw_power_tilt_only"/>
<field name="pw_power_recline_only"/>
<field name="pw_power_tilt_recline"/>
</group>
<group>
<field name="pw_power_elevating_footrests"/>
<field name="pw_multi_function_control"/>
<field name="pw_power_add_on"/>
</group>
</group>
</page>
<!-- TAB 3: FRAME -->
<page string="Frame" name="frame">
<group>
<group>
<field name="frame_product_id"/>
</group>
</group>
<field name="frame_notes" placeholder="Frame notes..."/>
</page>
<!-- TAB 4: SELECTED ITEMS -->
<page string="Selected Items" name="lines">
<field name="line_ids">
<list editable="bottom">
<field name="section_id"/>
<field name="product_id"/>
<field name="product_name"/>
<field name="build_type"/>
<field name="quantity"/>
<field name="adp_device_code"/>
<field name="adp_price"/>
<field name="unit_price"/>
<field name="subtotal" sum="Total"/>
<field name="adp_portion" sum="ADP Total"/>
<field name="client_portion" sum="Client Total"/>
<field name="is_upcharge"/>
<field name="upcharge_reason"
invisible="not is_upcharge"/>
</list>
</field>
</page>
<!-- TAB 5: UPCHARGES -->
<page string="Upcharges" name="upcharges">
<field name="upcharge_line_ids" readonly="1">
<list>
<field name="adp_device_code"/>
<field name="product_name"/>
<field name="upcharge_reason"/>
<field name="unit_price"/>
<field name="adp_portion"/>
</list>
</field>
</page>
<!-- TAB 6: QUOTATION -->
<page string="Quotation" name="quotation">
<group>
<group>
<field name="sale_order_id"/>
<field name="total_estimate"/>
<field name="total_adp_estimate"/>
<field name="total_client_estimate"/>
</group>
</group>
<field name="notes" placeholder="Additional notes..."/>
</page>
<!-- TAB 7: SHARING -->
<page string="Sharing" name="sharing">
<div class="alert alert-info" role="alert"
invisible="access_token">
<i class="fa fa-info-circle me-1"/>
Click <b>Share Link</b> above to generate a public URL
that can be opened without logging in, or embedded in
an external website via an iframe.
</div>
<group invisible="not access_token">
<group string="Public Access">
<field name="public_url" widget="CopyClipboardChar"
readonly="1" string="Public URL"/>
<field name="portal_url" widget="CopyClipboardChar"
readonly="1" string="Portal URL (login required)"/>
<field name="access_token" readonly="1"/>
</group>
<group string="Embed Code">
<div colspan="2">
<p class="text-muted mb-2">
Copy this snippet to embed the form in an external page:
</p>
<code style="display:block;white-space:pre-wrap;background:#f8f9fa;padding:12px;border-radius:6px;font-size:13px;">&lt;iframe src="<field name="public_url" readonly="1"/>/embed"
width="100%" height="900"
frameborder="0"
allow="clipboard-write"&gt;&lt;/iframe&gt;</code>
</div>
</group>
</group>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<!-- ============================================================ -->
<!-- ASSESSMENT ACTION -->
<!-- ============================================================ -->
<record id="action_wc_assessment" model="ir.actions.act_window">
<field name="name">Wheelchair Assessments</field>
<field name="res_model">fusion.wc.assessment</field>
<field name="view_mode">list,kanban,form</field>
<field name="context">{'search_default_my_assessments': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a wheelchair assessment
</p>
<p>
Start a new wheelchair assessment to configure a chair
and automatically generate a quotation.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,159 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ============================================================
Configuration Flow — Tree View
============================================================ -->
<record id="view_wc_config_flow_tree" model="ir.ui.view">
<field name="name">fusion.wc.config.flow.tree</field>
<field name="model">fusion.wc.config.flow</field>
<field name="arch" type="xml">
<list string="Configuration Flows">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="equipment_type"/>
<field name="state" widget="badge"
decoration-success="state == 'active'"
decoration-info="state == 'draft'"
decoration-muted="state == 'archived'"/>
<field name="step_count"/>
<field name="node_count"/>
<field name="connection_count"/>
</list>
</field>
</record>
<!-- ============================================================
Configuration Flow — Form View
============================================================ -->
<record id="view_wc_config_flow_form" model="ir.ui.view">
<field name="name">fusion.wc.config.flow.form</field>
<field name="model">fusion.wc.config.flow</field>
<field name="arch" type="xml">
<form string="Configuration Flow">
<header>
<button name="action_open_designer" type="object"
string="Open Visual Designer"
class="btn-primary"
icon="fa-sitemap"/>
<button name="action_new_assessment_form" type="object"
string="New Assessment"
class="btn-secondary"
icon="fa-external-link"/>
<button name="action_activate" type="object"
string="Activate"
class="btn-success"
invisible="state == 'active'"/>
<button name="action_archive" type="object"
string="Archive"
invisible="state == 'archived'"/>
<button name="action_reset_draft" type="object"
string="Reset to Draft"
invisible="state == 'draft'"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,active,archived"/>
</header>
<sheet>
<div class="oe_title">
<h1>
<field name="name" placeholder="e.g. Standard Manual Wheelchair Config"/>
</h1>
</div>
<group>
<group>
<field name="equipment_type"/>
<field name="sequence"/>
<field name="active" invisible="1"/>
</group>
<group>
<field name="step_count"/>
<field name="node_count"/>
<field name="connection_count"/>
</group>
</group>
<notebook>
<page string="Form Steps" name="form_steps">
<field name="step_ids">
<list editable="bottom">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="step_type"/>
<field name="icon"/>
<field name="section_code"/>
<field name="is_required"/>
</list>
</field>
<div class="mt-2">
<button name="action_create_default_steps" type="object"
string="Generate Default Steps"
class="btn-secondary"
icon="fa-magic"
confirm="This will replace existing steps. Continue?"/>
</div>
</page>
<page string="Description" name="description">
<field name="description" placeholder="Describe this configuration flow..."/>
</page>
<page string="Nodes" name="nodes">
<field name="node_ids">
<list editable="bottom">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="node_type"/>
<field name="section_id"/>
<field name="decision_field"
invisible="node_type != 'decision'"/>
<field name="decision_operator"
invisible="node_type != 'decision'"/>
<field name="decision_value"
invisible="node_type != 'decision'"/>
<field name="action_type"
invisible="node_type != 'action'"/>
<field name="measurement_field"
invisible="node_type != 'measurement_check'"/>
<field name="comparison"
invisible="node_type != 'measurement_check'"/>
<field name="threshold_value"
invisible="node_type != 'measurement_check'"/>
</list>
</field>
</page>
<page string="Connections" name="connections">
<field name="connection_ids">
<list editable="bottom">
<field name="sequence" widget="handle"/>
<field name="source_node_id"
domain="[('flow_id', '=', parent.id)]"/>
<field name="target_node_id"
domain="[('flow_id', '=', parent.id)]"/>
<field name="source_port"/>
<field name="label"/>
</list>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- ============================================================
Configuration Flow — Action
============================================================ -->
<record id="action_wc_config_flow" model="ir.actions.act_window">
<field name="name">Configuration Flows</field>
<field name="res_model">fusion.wc.config.flow</field>
<field name="view_mode">list,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Configuration Flow
</p>
<p>
Configuration flows define visual decision trees that control
which options are shown, hidden, or required during a wheelchair
assessment. Use the Visual Designer to build flows graphically.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ============================================================ -->
<!-- SECTION TREE VIEW -->
<!-- ============================================================ -->
<record id="view_wc_section_tree" model="ir.ui.view">
<field name="name">fusion.wc.section.tree</field>
<field name="model">fusion.wc.section</field>
<field name="arch" type="xml">
<list>
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="code"/>
<field name="parent_id"/>
<field name="equipment_type"/>
<field name="has_build_type"/>
<field name="is_adp_options_section"/>
<field name="option_count" string="Options"/>
<field name="active" column_invisible="1"/>
</list>
</field>
</record>
<!-- ============================================================ -->
<!-- SECTION OPTION ACTION (for stat button — must be before form) -->
<!-- ============================================================ -->
<record id="action_wc_section_option" model="ir.actions.act_window">
<field name="name">Section Options</field>
<field name="res_model">fusion.wc.section.option</field>
<field name="view_mode">list,form</field>
<field name="context">{'default_section_id': active_id}</field>
<field name="domain">[('section_id', '=', active_id)]</field>
</record>
<!-- ============================================================ -->
<!-- SECTION FORM VIEW -->
<!-- ============================================================ -->
<record id="view_wc_section_form" model="ir.ui.view">
<field name="name">fusion.wc.section.form</field>
<field name="model">fusion.wc.section</field>
<field name="arch" type="xml">
<form string="Wheelchair Section">
<header>
<button name="action_auto_populate_options"
string="Auto-Populate Products from Inventory"
type="object" class="btn-secondary"
icon="fa-magic"
confirm="This will scan your product inventory for ADP device codes matching this section and add them as options. Continue?"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="%(fusion_quotations.action_wc_section_option)d"
type="action" class="oe_stat_button" icon="fa-list"
context="{'default_section_id': id, 'search_default_section_id': id}">
<field name="option_count" widget="statinfo" string="Options"/>
</button>
</div>
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger"
invisible="active"/>
<div class="oe_title">
<h1>
<field name="name" placeholder="Section Name"/>
</h1>
</div>
<group>
<group>
<field name="code"/>
<field name="sequence"/>
<field name="parent_id"/>
<field name="equipment_type"/>
<field name="icon" placeholder="fa-wheelchair"/>
<field name="product_category_id"/>
</group>
<group>
<field name="required"/>
<field name="allow_multiple"/>
<field name="is_adp_options_section"/>
<field name="has_build_type"/>
<field name="active"/>
</group>
</group>
<group string="Measurement Fields" col="4">
<field name="has_width"/>
<field name="width_label" invisible="not has_width"/>
<field name="has_depth"/>
<field name="depth_label" invisible="not has_depth"/>
<field name="has_height"/>
<field name="height_label" invisible="not has_height"/>
<field name="has_length"/>
<field name="length_label" invisible="not has_length"/>
</group>
<field name="description" placeholder="Help text for sales reps..."/>
<notebook>
<page string="Product Options" name="options">
<field name="option_ids">
<list editable="bottom">
<field name="sequence" widget="handle"/>
<field name="product_tmpl_id"/>
<field name="variant_count" string="Variants"/>
<field name="is_standard"/>
<field name="adp_device_code"/>
<field name="adp_price"/>
<field name="list_price"/>
<field name="available_build_types"/>
<field name="requires_clinical_rationale"/>
</list>
</field>
</page>
<page string="Sub-Sections" name="children">
<field name="child_ids">
<list>
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="code"/>
<field name="has_build_type"/>
<field name="option_count" string="Options"/>
</list>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- ============================================================ -->
<!-- SECTION ACTION -->
<!-- ============================================================ -->
<record id="action_wc_section" model="ir.actions.act_window">
<field name="name">Wheelchair Sections</field>
<field name="res_model">fusion.wc.section</field>
<field name="view_mode">list,form</field>
<field name="context">{'search_default_active': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Configure wheelchair sections
</p>
<p>
Define sections like Frame, Cushion, Backrest, etc.
and add product options to each section.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ============================================================ -->
<!-- UPCHARGE RULE TREE VIEW -->
<!-- ============================================================ -->
<record id="view_wc_upcharge_rule_tree" model="ir.ui.view">
<field name="name">fusion.wc.upcharge.rule.tree</field>
<field name="model">fusion.wc.upcharge.rule</field>
<field name="arch" type="xml">
<list>
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="trigger_type"/>
<field name="adp_device_code"/>
<field name="equipment_type"/>
<field name="mutually_exclusive_group"/>
<field name="active"/>
</list>
</field>
</record>
<!-- ============================================================ -->
<!-- UPCHARGE RULE FORM VIEW -->
<!-- ============================================================ -->
<record id="view_wc_upcharge_rule_form" model="ir.ui.view">
<field name="name">fusion.wc.upcharge.rule.form</field>
<field name="model">fusion.wc.upcharge.rule</field>
<field name="arch" type="xml">
<form string="Upcharge Rule">
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger"
invisible="active"/>
<div class="oe_title">
<h1>
<field name="name" placeholder="Rule Name"/>
</h1>
</div>
<group>
<group string="Trigger">
<field name="trigger_type"/>
<field name="equipment_type"/>
<field name="sequence"/>
<field name="active"/>
</group>
<group string="Result">
<field name="adp_device_code"/>
<field name="adp_device_code_id" readonly="1"/>
<field name="product_id"/>
<field name="mutually_exclusive_group"/>
</group>
</group>
<!-- Measurement trigger fields -->
<group string="Measurement Condition"
invisible="trigger_type != 'measurement'">
<group>
<field name="measurement_field"/>
<field name="comparison"/>
<field name="threshold_value"/>
</group>
</group>
<!-- Weight trigger fields -->
<group string="Weight Condition"
invisible="trigger_type != 'weight'">
<group>
<field name="weight_min"/>
<field name="weight_max"/>
</group>
</group>
<!-- Dimension mismatch fields -->
<group string="Dimension Mismatch Condition"
invisible="trigger_type != 'dimension_mismatch'">
<group>
<field name="compare_field_1"/>
<field name="compare_field_2"/>
</group>
</group>
<group>
<field name="description" placeholder="Explanation shown to sales rep when rule triggers..."/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ============================================================ -->
<!-- UPCHARGE RULE ACTION -->
<!-- ============================================================ -->
<record id="action_wc_upcharge_rule" model="ir.actions.act_window">
<field name="name">Upcharge Rules</field>
<field name="res_model">fusion.wc.upcharge.rule</field>
<field name="view_mode">list,form</field>
<field name="context">{'search_default_active': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Configure upcharge rules
</p>
<p>
Define rules that auto-add ADP upcharge codes based on
wheelchair measurements (e.g. WAMA for width > 18").
</p>
</field>
</record>
</odoo>