This commit is contained in:
gsinghpal
2026-03-16 08:14:56 -04:00
parent fdca9518ab
commit e56974d46f
196 changed files with 19739 additions and 3471 deletions

View File

@@ -220,8 +220,7 @@
<field name="x_fc_client_portion_total" widget="monetary" sum="Total Client" optional="show"/>
<field name="amount_total" widget="monetary" sum="Grand Total" optional="show"/>
<!-- Loaner / Status -->
<field name="x_fc_loaner_count" string="Loaners" optional="hide"/>
<!-- Status -->
<field name="x_fc_on_hold_date" optional="hide"/>
<field name="x_fc_case_locked" optional="hide"/>
<field name="state" widget="badge" decoration-success="state == 'sale'"
@@ -1733,105 +1732,73 @@ else:
parent="menu_adp_claims_root"
sequence="20"/>
<!-- Top-level quick access -->
<menuitem id="menu_adp_all_orders" name="All ADP Orders" parent="menu_fc_adp"
action="action_adp_orders_all" sequence="1"/>
<menuitem id="menu_adp_invoices" name="ADP Invoices" parent="menu_fc_adp"
action="action_adp_invoices" sequence="2"/>
<menuitem id="menu_adp_client_invoices" name="ADP Client Invoices" parent="menu_fc_adp"
action="action_adp_client_invoices" sequence="3"/>
<menuitem id="menu_adp_export_files" name="Export Files" parent="menu_fc_adp"
action="action_adp_export_records" sequence="4"/>
<menuitem id="menu_adp_quotations"
name="Quotation Stage"
<!-- Orders & Billing -->
<menuitem id="menu_adp_orders_billing"
name="Orders &amp; Billing"
parent="menu_fc_adp"
sequence="5"/>
<menuitem id="menu_adp_invoices" name="ADP Invoices" parent="menu_adp_orders_billing"
action="action_adp_invoices" sequence="1"/>
<menuitem id="menu_adp_client_invoices" name="Client Invoices" parent="menu_adp_orders_billing"
action="action_adp_client_invoices" sequence="2"/>
<menuitem id="menu_adp_ready_billing" name="Ready for Billing" parent="menu_adp_orders_billing"
action="action_adp_ready_billing" sequence="3"/>
<menuitem id="menu_adp_billed" name="Billed to ADP" parent="menu_adp_orders_billing"
action="action_adp_billed" sequence="4"/>
<menuitem id="menu_adp_export_files" name="Claim Submission Files" parent="menu_adp_orders_billing"
action="action_adp_export_records" sequence="5"/>
<!-- Pre-Submission Pipeline -->
<menuitem id="menu_adp_pre_submission"
name="Pre-Submission"
parent="menu_fc_adp"
action="action_adp_quotations"
sequence="10"/>
<menuitem id="menu_adp_quotations" name="Quotation Stage" parent="menu_adp_pre_submission"
action="action_adp_quotations" sequence="1"/>
<menuitem id="menu_adp_assessment_scheduled" name="Assessment Scheduled" parent="menu_adp_pre_submission"
action="action_adp_assessment_scheduled" sequence="2"/>
<menuitem id="menu_adp_assessment_completed" name="Waiting for Application" parent="menu_adp_pre_submission"
action="action_adp_assessment_completed" sequence="3"/>
<menuitem id="menu_adp_application_received" name="Application Received" parent="menu_adp_pre_submission"
action="action_adp_application_received" sequence="4"/>
<menuitem id="menu_adp_ready_submission" name="Ready for Submission" parent="menu_adp_pre_submission"
action="action_adp_ready_submission" sequence="5"/>
<menuitem id="menu_adp_assessment_scheduled"
name="Assessment Scheduled"
<!-- ADP Review -->
<menuitem id="menu_adp_review"
name="ADP Review"
parent="menu_fc_adp"
action="action_adp_assessment_scheduled"
sequence="12"/>
<menuitem id="menu_adp_assessment_completed"
name="Waiting for Application"
parent="menu_fc_adp"
action="action_adp_assessment_completed"
sequence="14"/>
<menuitem id="menu_adp_application_received"
name="Application Received"
parent="menu_fc_adp"
action="action_adp_application_received"
sequence="16"/>
<menuitem id="menu_adp_ready_submission"
name="Ready for Submission"
parent="menu_fc_adp"
action="action_adp_ready_submission"
sequence="18"/>
<menuitem id="menu_adp_pending_approval"
name="Application Submitted"
parent="menu_fc_adp"
action="action_adp_pending_approval"
sequence="20"/>
<menuitem id="menu_adp_pending_approval" name="Application Submitted" parent="menu_adp_review"
action="action_adp_pending_approval" sequence="1"/>
<menuitem id="menu_adp_accepted" name="Accepted by ADP" parent="menu_adp_review"
action="action_adp_accepted" sequence="2"/>
<menuitem id="menu_adp_approved" name="Application Approved" parent="menu_adp_review"
action="action_adp_approved" sequence="3"/>
<menuitem id="menu_adp_rejected" name="Rejected by ADP" parent="menu_adp_review"
action="action_adp_rejected" sequence="4"/>
<menuitem id="menu_adp_needs_correction" name="Needs Correction" parent="menu_adp_review"
action="action_adp_needs_correction" sequence="5"/>
<menuitem id="menu_adp_accepted"
name="Accepted by ADP"
<!-- Fulfillment -->
<menuitem id="menu_adp_fulfillment"
name="Fulfillment"
parent="menu_fc_adp"
action="action_adp_accepted"
sequence="21"/>
<menuitem id="menu_adp_rejected"
name="Rejected by ADP"
parent="menu_fc_adp"
action="action_adp_rejected"
sequence="22"/>
<menuitem id="menu_adp_needs_correction"
name="Needs Correction"
parent="menu_fc_adp"
action="action_adp_needs_correction"
sequence="23"/>
<menuitem id="menu_adp_approved"
name="Application Approved"
parent="menu_fc_adp"
action="action_adp_approved"
sequence="25"/>
<menuitem id="menu_adp_ready_delivery"
name="Ready for Delivery"
parent="menu_fc_adp"
action="action_adp_ready_delivery"
sequence="27"/>
<menuitem id="menu_adp_ready_billing"
name="Ready for Billing"
parent="menu_fc_adp"
action="action_adp_ready_billing"
sequence="30"/>
<menuitem id="menu_adp_ready_delivery" name="Ready for Delivery" parent="menu_adp_fulfillment"
action="action_adp_ready_delivery" sequence="1"/>
<menuitem id="menu_adp_closed" name="Case Closed" parent="menu_adp_fulfillment"
action="action_adp_closed" sequence="2"/>
<menuitem id="menu_adp_billed"
name="Billed to ADP"
parent="menu_fc_adp"
action="action_adp_billed"
sequence="35"/>
<menuitem id="menu_adp_closed"
name="Case Closed"
parent="menu_fc_adp"
action="action_adp_closed"
sequence="40"/>
<!-- ADP Special Statuses -->
<!-- Special Statuses -->
<menuitem id="menu_adp_special_statuses"
name="Special Statuses"
parent="menu_fc_adp"
sequence="50"/>
<menuitem id="menu_adp_on_hold" name="On Hold" parent="menu_adp_special_statuses"
action="action_adp_on_hold" sequence="10"/>
<menuitem id="menu_adp_withdrawn" name="Withdrawn" parent="menu_adp_special_statuses"
@@ -2037,6 +2004,8 @@ else:
action="action_device_import_wizard" sequence="20"/>
<menuitem id="menu_import_xml_files" name="Import XML Files" parent="menu_adp_config"
action="action_xml_import_wizard" sequence="30"/>
<menuitem id="menu_adp_import_files" name="Import Submission Files" parent="menu_adp_config"
action="action_adp_import_wizard" sequence="35"/>
<menuitem id="menu_fusion_claims_settings" name="Settings" parent="menu_adp_config"
action="action_fusion_claims_settings" sequence="90"/>

View File

@@ -12,10 +12,12 @@
<field name="name">fusion_claims.adp.export.record.list</field>
<field name="model">fusion_claims.adp.export.record</field>
<field name="arch" type="xml">
<list string="ADP Export Files" default_order="export_date desc">
<list string="ADP Claim Submission Files"
default_order="year desc, month asc, posting_period_date desc, export_date desc">
<field name="name"/>
<field name="export_date"/>
<field name="posting_period_label" string="Posting Period"/>
<field name="payment_date" string="Payment Date"/>
<field name="vendor_code"/>
<field name="line_count" string="Lines"/>
<field name="invoice_count" string="Invoices"/>
@@ -27,6 +29,44 @@
</field>
</record>
<!-- ===================================================================== -->
<!-- ADP EXPORT RECORD: Kanban View -->
<!-- ===================================================================== -->
<record id="view_adp_export_record_kanban" model="ir.ui.view">
<field name="name">fusion_claims.adp.export.record.kanban</field>
<field name="model">fusion_claims.adp.export.record</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile" default_order="year desc, month asc, posting_period_date desc, export_date desc">
<templates>
<t t-name="card">
<div class="d-flex justify-content-between mb-1">
<strong><field name="name"/></strong>
<field name="vendor_code" class="text-muted"/>
</div>
<div class="text-muted small mb-1">
<field name="posting_period_label"/>
</div>
<div class="d-flex justify-content-between align-items-center">
<div class="small">
<span class="me-3"><i class="fa fa-list-ol me-1"/>
<field name="line_count"/> lines</span>
<span><i class="fa fa-file-text-o me-1"/>
<field name="invoice_count"/> invoices</span>
</div>
<field name="user_id" widget="many2one_avatar_user"/>
</div>
<div class="text-muted small mt-1">
<i class="fa fa-calendar me-1"/><field name="export_date"/>
</div>
<field name="year" invisible="1"/>
<field name="month" invisible="1"/>
<field name="month_number" invisible="1"/>
</t>
</templates>
</kanban>
</field>
</record>
<!-- ===================================================================== -->
<!-- ADP EXPORT RECORD: Form View -->
<!-- ===================================================================== -->
@@ -34,20 +74,29 @@
<field name="name">fusion_claims.adp.export.record.form</field>
<field name="model">fusion_claims.adp.export.record</field>
<field name="arch" type="xml">
<form string="ADP Export File">
<form string="ADP Claim Submission File">
<header>
<button name="action_download" string="Download File"
type="object" class="btn-primary" icon="fa-download"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_view_invoices" type="object"
class="oe_stat_button" icon="fa-pencil-square-o"
invisible="invoice_count == 0">
<field name="invoice_count" widget="statinfo"
string="Invoices"/>
</button>
</div>
<div class="oe_title">
<h1><field name="name" readonly="1"/></h1>
<h1><field name="name"/></h1>
</div>
<group>
<group string="Export Details">
<field name="export_date" readonly="1"/>
<field name="posting_period_date" readonly="1"/>
<field name="posting_period_label" readonly="1"/>
<field name="payment_date" readonly="1"/>
<field name="vendor_code" readonly="1"/>
<field name="line_count" readonly="1"/>
</group>
@@ -59,13 +108,20 @@
</group>
</group>
<notebook>
<page string="File Preview" name="preview"
invisible="not file_preview">
<field name="file_preview" readonly="1" nolabel="1"
widget="text"/>
</page>
<page string="Exported Invoices" name="invoices">
<field name="invoice_ids" readonly="1" nolabel="1">
<list string="Invoices" create="0" delete="0">
<field name="name" string="Invoice"/>
<field name="partner_id" string="Customer"/>
<field name="partner_id" string="Customer"
widget="many2one"/>
<field name="invoice_date"/>
<field name="amount_total" string="Total"/>
<field name="currency_id" column_invisible="True"/>
<field name="amount_total" string="Total" sum="Grand Total"/>
<field name="state" widget="badge"
decoration-success="state == 'posted'"
decoration-info="state == 'draft'"/>
@@ -88,7 +144,7 @@
<field name="name">fusion_claims.adp.export.record.search</field>
<field name="model">fusion_claims.adp.export.record</field>
<field name="arch" type="xml">
<search string="ADP Export Files">
<search string="ADP Claim Submission Files">
<field name="name"/>
<field name="vendor_code"/>
<field name="user_id"/>
@@ -98,7 +154,7 @@
<filter string="Month" name="group_month"
context="{'group_by': 'month'}"/>
<filter string="Posting Period" name="group_posting"
context="{'group_by': 'posting_period_date'}"/>
context="{'group_by': 'posting_period_label'}"/>
<filter string="Exported By" name="group_user"
context="{'group_by': 'user_id'}"/>
</search>
@@ -109,17 +165,17 @@
<!-- ADP EXPORT RECORD: Action -->
<!-- ===================================================================== -->
<record id="action_adp_export_records" model="ir.actions.act_window">
<field name="name">Export Files</field>
<field name="name">Claim Submission Files</field>
<field name="res_model">fusion_claims.adp.export.record</field>
<field name="view_mode">list,form</field>
<field name="view_mode">list,kanban,form</field>
<field name="search_view_id" ref="view_adp_export_record_search"/>
<field name="context">{'search_default_group_year': 1, 'search_default_group_month': 1, 'search_default_group_posting': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No export files yet
No claim submission files yet
</p>
<p>
ADP export files will appear here after you export invoices using the
ADP claim submission files will appear here after you export invoices using the
<strong>Export ADP</strong> button on ADP portion invoices.
</p>
</field>

View File

@@ -1,525 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2024-2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
-->
<odoo>
<!-- ===================================================================== -->
<!-- LOANER CHECKOUT VIEWS -->
<!-- ===================================================================== -->
<!-- List View -->
<record id="view_fusion_loaner_checkout_list" model="ir.ui.view">
<field name="name">fusion.loaner.checkout.list</field>
<field name="model">fusion.loaner.checkout</field>
<field name="arch" type="xml">
<list decoration-danger="state == 'overdue'"
decoration-warning="state == 'rental_pending'"
decoration-muted="state in ('returned', 'lost')"
default_order="checkout_date desc, id desc">
<field name="name"/>
<field name="partner_id"/>
<field name="product_id"/>
<field name="lot_id" optional="show"/>
<field name="checkout_date"/>
<field name="expected_return_date"/>
<field name="actual_return_date" optional="hide"/>
<field name="days_out"/>
<field name="days_overdue" optional="hide"/>
<field name="sales_rep_id" optional="hide"/>
<field name="checkout_condition" optional="hide"/>
<field name="return_condition" optional="hide"/>
<field name="sale_order_id" optional="hide"/>
<field name="state" widget="badge"
decoration-info="state == 'draft'"
decoration-success="state == 'checked_out'"
decoration-danger="state in ('overdue', 'lost')"
decoration-warning="state == 'rental_pending'"
decoration-muted="state in ('returned', 'converted_rental')"/>
</list>
</field>
</record>
<!-- Form View -->
<record id="view_fusion_loaner_checkout_form" model="ir.ui.view">
<field name="name">fusion.loaner.checkout.form</field>
<field name="model">fusion.loaner.checkout</field>
<field name="arch" type="xml">
<form>
<header>
<button name="action_checkout" type="object" string="Confirm Checkout"
class="btn-primary" invisible="state != 'draft'"/>
<button name="action_return" type="object" string="Return Loaner"
class="btn-success" invisible="state not in ('checked_out', 'overdue', 'rental_pending')"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,checked_out,returned"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_view_sale_order" type="object"
class="oe_stat_button" icon="fa-file-text-o"
invisible="not sale_order_id">
<div class="o_field_widget o_stat_info">
<span class="o_stat_text">Sale Order</span>
</div>
</button>
<button name="action_view_partner" type="object"
class="oe_stat_button" icon="fa-user">
<div class="o_field_widget o_stat_info">
<span class="o_stat_text">Contact</span>
</div>
</button>
</div>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<group string="Client Information">
<field name="partner_id"/>
<field name="sales_rep_id"/>
<field name="sale_order_id"/>
</group>
<group string="Product">
<field name="product_id"/>
<field name="lot_id"/>
<field name="loaner_period_days"/>
</group>
</group>
<group>
<group string="Dates">
<field name="checkout_date"/>
<field name="expected_return_date"/>
<field name="actual_return_date"/>
<field name="days_out"/>
</group>
<group string="Condition">
<field name="checkout_condition"/>
<field name="checkout_notes"/>
</group>
</group>
</sheet>
<chatter/>
</form>
</field>
</record>
<!-- Search View -->
<record id="view_fusion_loaner_checkout_search" model="ir.ui.view">
<field name="name">fusion.loaner.checkout.search</field>
<field name="model">fusion.loaner.checkout</field>
<field name="arch" type="xml">
<search string="Search Loaners">
<field name="name"/>
<field name="partner_id"/>
<field name="product_id"/>
<field name="lot_id" string="Serial Number"/>
<field name="sale_order_id"/>
<field name="sales_rep_id"/>
<separator/>
<!-- Status Filters -->
<filter string="Draft" name="filter_draft"
domain="[('state', '=', 'draft')]"/>
<filter string="Checked Out" name="filter_checked_out"
domain="[('state', '=', 'checked_out')]"/>
<filter string="Overdue" name="filter_overdue"
domain="[('state', '=', 'overdue')]"/>
<filter string="Rental Pending" name="filter_rental_pending"
domain="[('state', '=', 'rental_pending')]"/>
<filter string="Returned" name="filter_returned"
domain="[('state', '=', 'returned')]"/>
<filter string="Converted to Rental" name="filter_converted"
domain="[('state', '=', 'converted_rental')]"/>
<filter string="Lost" name="filter_lost"
domain="[('state', '=', 'lost')]"/>
<separator/>
<!-- Quick Filters -->
<filter string="Active Loaners" name="filter_active"
domain="[('state', 'in', ['checked_out', 'overdue', 'rental_pending'])]"/>
<filter string="Needs Attention" name="filter_attention"
domain="[('state', 'in', ['overdue', 'rental_pending'])]"/>
<filter string="My Loaners" name="filter_my_loaners"
domain="[('sales_rep_id', '=', uid)]"/>
<separator/>
<!-- Condition Filters -->
<filter string="Needs Repair (Checkout)" name="filter_checkout_repair"
domain="[('checkout_condition', '=', 'needs_repair')]"/>
<filter string="Damaged (Return)" name="filter_return_damaged"
domain="[('return_condition', 'in', ['needs_repair', 'damaged'])]"/>
<separator/>
<!-- Group By -->
<filter string="Status" name="group_state"
context="{'group_by': 'state'}"/>
<filter string="Client" name="group_client"
context="{'group_by': 'partner_id'}"/>
<filter string="Product" name="group_product"
context="{'group_by': 'product_id'}"/>
<filter string="Sales Rep" name="group_sales_rep"
context="{'group_by': 'sales_rep_id'}"/>
<filter string="Checkout Condition" name="group_checkout_condition"
context="{'group_by': 'checkout_condition'}"/>
<filter string="Return Condition" name="group_return_condition"
context="{'group_by': 'return_condition'}"/>
<filter string="Checkout Month" name="group_checkout_month"
context="{'group_by': 'checkout_date:month'}"/>
<filter string="Return Month" name="group_return_month"
context="{'group_by': 'actual_return_date:month'}"/>
</search>
</field>
</record>
<!-- ===================================================================== -->
<!-- LOANER HISTORY VIEWS -->
<!-- ===================================================================== -->
<record id="view_fusion_loaner_history_list" model="ir.ui.view">
<field name="name">fusion.loaner.history.list</field>
<field name="model">fusion.loaner.history</field>
<field name="arch" type="xml">
<list default_order="action_date desc, id desc">
<field name="action_date"/>
<field name="checkout_id"/>
<field name="partner_id" optional="show"/>
<field name="product_id" optional="show"/>
<field name="lot_id" optional="hide"/>
<field name="action" widget="badge"
decoration-info="action in ('create', 'note')"
decoration-success="action in ('checkout', 'return')"
decoration-warning="action in ('reminder_sent', 'overdue', 'rental_pending')"
decoration-danger="action in ('lost', 'condition_update')"/>
<field name="user_id"/>
<field name="notes" optional="show"/>
</list>
</field>
</record>
<!-- History Search View -->
<record id="view_fusion_loaner_history_search" model="ir.ui.view">
<field name="name">fusion.loaner.history.search</field>
<field name="model">fusion.loaner.history</field>
<field name="arch" type="xml">
<search string="Search Loaner History">
<field name="checkout_id"/>
<field name="partner_id"/>
<field name="product_id"/>
<field name="lot_id" string="Serial Number"/>
<field name="user_id"/>
<separator/>
<!-- Action Type Filters -->
<filter string="Checkouts" name="filter_checkout"
domain="[('action', '=', 'checkout')]"/>
<filter string="Returns" name="filter_return"
domain="[('action', '=', 'return')]"/>
<filter string="Reminders" name="filter_reminders"
domain="[('action', '=', 'reminder_sent')]"/>
<filter string="Overdue" name="filter_overdue"
domain="[('action', '=', 'overdue')]"/>
<filter string="Rental Conversions" name="filter_rental"
domain="[('action', 'in', ['rental_pending', 'rental_converted'])]"/>
<filter string="Lost" name="filter_lost"
domain="[('action', '=', 'lost')]"/>
<separator/>
<!-- Group By -->
<filter string="Action Type" name="group_action"
context="{'group_by': 'action'}"/>
<filter string="Client" name="group_client"
context="{'group_by': 'partner_id'}"/>
<filter string="Product" name="group_product"
context="{'group_by': 'product_id'}"/>
<filter string="User" name="group_user"
context="{'group_by': 'user_id'}"/>
<filter string="Month" name="group_month"
context="{'group_by': 'action_date:month'}"/>
</search>
</field>
</record>
<!-- ===================================================================== -->
<!-- WIZARD VIEWS -->
<!-- ===================================================================== -->
<!-- Checkout Wizard -->
<record id="view_loaner_checkout_wizard_form" model="ir.ui.view">
<field name="name">fusion.loaner.checkout.wizard.form</field>
<field name="model">fusion.loaner.checkout.wizard</field>
<field name="arch" type="xml">
<form>
<group>
<field name="partner_id"/>
<field name="product_id"/>
<field name="lot_id"/>
<field name="checkout_date"/>
<field name="loaner_period_days"/>
<field name="checkout_condition" widget="radio"/>
<field name="checkout_notes"/>
</group>
<footer>
<button name="action_checkout" type="object" string="Checkout Loaner" class="btn-primary"/>
<button string="Cancel" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
<!-- Return Wizard -->
<record id="view_loaner_return_wizard_form" model="ir.ui.view">
<field name="name">fusion.loaner.return.wizard.form</field>
<field name="model">fusion.loaner.return.wizard</field>
<field name="arch" type="xml">
<form>
<group>
<field name="checkout_id" readonly="1"/>
<field name="return_date"/>
<field name="return_condition" widget="radio"/>
<field name="return_notes"/>
</group>
<footer>
<button name="action_return" type="object" string="Confirm Return" class="btn-primary"/>
<button string="Cancel" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
<!-- ===================================================================== -->
<!-- LOANER PRODUCTS VIEWS -->
<!-- ===================================================================== -->
<!-- Loaner Products List View -->
<record id="view_fusion_loaner_products_list" model="ir.ui.view">
<field name="name">product.template.loaner.list</field>
<field name="model">product.template</field>
<field name="arch" type="xml">
<list>
<field name="name"/>
<field name="x_fc_equipment_type" optional="show"/>
<field name="x_fc_wheelchair_category" optional="show"/>
<field name="x_fc_seat_width" optional="show"/>
<field name="x_fc_seat_depth" optional="show"/>
<field name="x_fc_seat_height" optional="hide"/>
<field name="x_fc_storage_location" optional="show"/>
<field name="x_fc_listing_type" optional="show"/>
<field name="x_fc_asset_number" optional="hide"/>
<field name="active" column_invisible="True"/>
</list>
</field>
</record>
<!-- Loaner Products Search View -->
<record id="view_fusion_loaner_products_search" model="ir.ui.view">
<field name="name">product.template.loaner.search</field>
<field name="model">product.template</field>
<field name="arch" type="xml">
<search string="Search Loaner Products">
<field name="name"/>
<field name="x_fc_equipment_type"/>
<field name="x_fc_asset_number"/>
<separator/>
<filter string="Owned" name="filter_owned"
domain="[('x_fc_listing_type', '=', 'owned')]"/>
<filter string="Borrowed" name="filter_borrowed"
domain="[('x_fc_listing_type', '=', 'borrowed')]"/>
<separator/>
<filter string="Archived" name="filter_archived"
domain="[('active', '=', False)]"/>
<separator/>
<filter string="Equipment Type" name="group_equipment_type"
context="{'group_by': 'x_fc_equipment_type'}"/>
<filter string="Wheelchair Category" name="group_wheelchair_category"
context="{'group_by': 'x_fc_wheelchair_category'}"/>
<filter string="Storage Location" name="group_storage_location"
context="{'group_by': 'x_fc_storage_location'}"/>
<filter string="Listing Type" name="group_listing_type"
context="{'group_by': 'x_fc_listing_type'}"/>
</search>
</field>
</record>
<!-- ===================================================================== -->
<!-- ACTIONS -->
<!-- ===================================================================== -->
<record id="action_fusion_loaner_checkout" model="ir.actions.act_window">
<field name="name">Loaner Equipment</field>
<field name="res_model">fusion.loaner.checkout</field>
<field name="view_mode">list,form</field>
<field name="search_view_id" ref="view_fusion_loaner_checkout_search"/>
<field name="context">{'search_default_filter_active': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">No loaner checkouts yet</p>
<p>Track loaner equipment issued to clients during assessments or trials.</p>
</field>
</record>
<record id="action_fusion_loaner_all" model="ir.actions.act_window">
<field name="name">All Loaners</field>
<field name="res_model">fusion.loaner.checkout</field>
<field name="view_mode">list,form</field>
<field name="search_view_id" ref="view_fusion_loaner_checkout_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">No loaner checkouts yet</p>
</field>
</record>
<record id="action_fusion_loaner_overdue" model="ir.actions.act_window">
<field name="name">Overdue Loaners</field>
<field name="res_model">fusion.loaner.checkout</field>
<field name="view_mode">list,form</field>
<field name="search_view_id" ref="view_fusion_loaner_checkout_search"/>
<field name="context">{'search_default_filter_attention': 1}</field>
</record>
<record id="action_fusion_loaner_returned" model="ir.actions.act_window">
<field name="name">Returned Loaners</field>
<field name="res_model">fusion.loaner.checkout</field>
<field name="view_mode">list,form</field>
<field name="search_view_id" ref="view_fusion_loaner_checkout_search"/>
<field name="context">{'search_default_filter_returned': 1}</field>
</record>
<record id="action_fusion_loaner_history" model="ir.actions.act_window">
<field name="name">Loaner History</field>
<field name="res_model">fusion.loaner.history</field>
<field name="view_mode">list</field>
<field name="search_view_id" ref="view_fusion_loaner_history_search"/>
</record>
<!-- Action: Loaner Products (products that can be loaned) -->
<record id="action_fusion_loaner_products" model="ir.actions.act_window">
<field name="name">Loaner Products</field>
<field name="res_model">product.template</field>
<field name="view_mode">list,form</field>
<field name="view_id" ref="view_fusion_loaner_products_list"/>
<field name="search_view_id" ref="view_fusion_loaner_products_search"/>
<field name="domain">[('x_fc_can_be_loaned', '=', True)]</field>
<field name="context">{'default_x_fc_can_be_loaned': True, 'default_sale_ok': False, 'default_purchase_ok': False, 'default_rent_ok': True}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No loaner products configured yet
</p>
<p>
Mark products as "Loaner" in the product form to add them here.
</p>
</field>
</record>
<!-- ===================================================================== -->
<!-- MENUS -->
<!-- ===================================================================== -->
<menuitem id="menu_loaner_root"
name="Loaners"
parent="menu_adp_claims_root"
sequence="58"/>
<menuitem id="menu_loaner_active"
name="Active Loaners"
parent="menu_loaner_root"
action="action_fusion_loaner_checkout"
sequence="10"/>
<menuitem id="menu_loaner_all"
name="All Loaners"
parent="menu_loaner_root"
action="action_fusion_loaner_all"
sequence="15"/>
<menuitem id="menu_loaner_overdue"
name="Overdue / Attention"
parent="menu_loaner_root"
action="action_fusion_loaner_overdue"
sequence="18"/>
<menuitem id="menu_loaner_returned"
name="Returned"
parent="menu_loaner_root"
action="action_fusion_loaner_returned"
sequence="19"/>
<menuitem id="menu_loaner_history"
name="Loaner History"
parent="menu_loaner_root"
action="action_fusion_loaner_history"
sequence="20"/>
<menuitem id="menu_loaner_products"
name="Loaner Products"
parent="menu_loaner_root"
action="action_fusion_loaner_products"
sequence="30"/>
<!-- ===================================================================== -->
<!-- PRODUCT TEMPLATE LOANER FIELDS -->
<!-- ===================================================================== -->
<!-- Add "Can be Loaned" checkbox next to other product type checkboxes -->
<record id="view_product_template_loaner_checkbox" model="ir.ui.view">
<field name="name">product.template.loaner.checkbox</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="priority">50</field>
<field name="arch" type="xml">
<xpath expr="//div[@name='options']" position="inside">
<span class="d-inline-flex">
<field name="x_fc_can_be_loaned"/>
<label for="x_fc_can_be_loaned" string="Loaner"/>
</span>
</xpath>
</field>
</record>
<!-- Loaner Settings tab (only visible when Can be Loaned is checked) -->
<record id="view_product_template_loaner_form" model="ir.ui.view">
<field name="name">product.template.loaner.form</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='sales']" position="after">
<page string="Loaner Settings" name="loaner_settings" invisible="not x_fc_can_be_loaned">
<group>
<group string="Loaner Period">
<field name="x_fc_loaner_period_days"/>
</group>
<group string="Rental Pricing (if not returned)">
<field name="x_fc_rental_price_weekly"/>
<field name="x_fc_rental_price_monthly"/>
</group>
</group>
<group>
<group string="Equipment Details">
<field name="x_fc_equipment_type"/>
<field name="x_fc_wheelchair_category"/>
<field name="x_fc_listing_type"/>
<field name="x_fc_asset_number"/>
</group>
<group string="Dimensions">
<field name="x_fc_seat_width"/>
<field name="x_fc_seat_depth"/>
<field name="x_fc_seat_height"/>
</group>
</group>
<group>
<group string="Location">
<field name="x_fc_storage_location"/>
</group>
</group>
<group string="Package Information">
<field name="x_fc_package_info" nolabel="1" colspan="2"/>
</group>
<group string="Security Deposit">
<group>
<field name="x_fc_security_deposit_type"/>
<field name="x_fc_security_deposit_amount"
invisible="x_fc_security_deposit_type != 'fixed'"/>
<field name="x_fc_security_deposit_percent"
invisible="x_fc_security_deposit_type != 'percentage'"/>
</group>
</group>
</page>
</xpath>
</field>
</record>
</odoo>

View File

@@ -1074,13 +1074,6 @@
invisible="not x_fc_is_mod_sale or x_fc_mod_client_invoice_count == 0">
<field name="x_fc_mod_client_invoice_count" widget="statinfo" string="Client Invoice"/>
</button>
<!-- Loaner Equipment Button -->
<button name="action_view_loaners" type="object"
class="oe_stat_button" icon="fa-wheelchair"
invisible="x_fc_loaner_count == 0">
<field name="x_fc_loaner_count" widget="statinfo" string="Loaners"/>
</button>
<!-- Technician Tasks Button -->
<button name="action_view_technician_tasks" type="object"
@@ -1186,7 +1179,6 @@
<field name="x_fc_device_verification_complete" invisible="1"/>
<field name="x_fc_submission_verified" invisible="1"/>
<field name="x_fc_adp_application_status" invisible="1"/>
<field name="x_fc_active_loaner_count" invisible="1"/>
<field name="x_fc_early_delivery" invisible="1"/>
<!-- ============================================================ -->
@@ -1340,36 +1332,6 @@
</xpath>
<!-- ============================================================ -->
<!-- LOANER BUTTONS - Positioned AFTER all standard Odoo buttons -->
<!-- (after Cancel, before the statusbar widget) -->
<!-- ============================================================ -->
<xpath expr="//header/field[@name='state']" position="before">
<field name="x_fc_is_adp_sale" invisible="1"/>
<field name="x_fc_active_loaner_count" invisible="1"/>
<field name="x_fc_has_overdue_loaner" invisible="1"/>
<!-- Checkout Loaner: only when NO active loaners -->
<button name="action_checkout_loaner" type="object"
string="Checkout Loaner" class="btn-secondary"
icon="fa-wheelchair"
invisible="not x_fc_is_adp_sale or x_fc_active_loaner_count &gt; 0 or x_fc_adp_application_status not in ('assessment_scheduled', 'assessment_completed', 'waiting_for_application', 'application_received', 'ready_submission', 'submitted', 'resubmitted', 'accepted', 'approved', 'approved_deduction', 'ready_delivery')"
help="Checkout loaner equipment for the client"/>
<!-- Checkin Loaner: GREEN when within return period -->
<button name="action_checkin_loaner" type="object"
string="Checkin Loaner" class="fc-btn-status-good"
icon="fa-clock-o"
invisible="not x_fc_is_adp_sale or x_fc_active_loaner_count == 0 or x_fc_has_overdue_loaner"
help="Loaner within return period - click to check in"/>
<!-- Checkin Loaner: RED when past return period -->
<button name="action_checkin_loaner" type="object"
string="Checkin Loaner" class="fc-btn-status-bad"
icon="fa-exclamation-circle"
invisible="not x_fc_is_adp_sale or x_fc_active_loaner_count == 0 or not x_fc_has_overdue_loaner"
help="Loaner OVERDUE - click to check in"/>
</xpath>
</field>
</record>