This commit is contained in:
gsinghpal
2026-02-24 01:18:44 -05:00
parent e8e554de95
commit f85658c03a
41 changed files with 4440 additions and 119 deletions

View File

@@ -13,17 +13,29 @@
<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'"
<list decoration-danger="state == 'overdue'"
decoration-warning="state == 'rental_pending'"
decoration-muted="state in ('returned', 'lost')">
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="state" widget="badge"/>
<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>
@@ -43,6 +55,21 @@
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"/>
@@ -83,10 +110,61 @@
<field name="name">fusion.loaner.checkout.search</field>
<field name="model">fusion.loaner.checkout</field>
<field name="arch" type="xml">
<search>
<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>
@@ -99,15 +177,63 @@
<field name="name">fusion.loaner.history.list</field>
<field name="model">fusion.loaner.history</field>
<field name="arch" type="xml">
<list>
<list default_order="action_date desc, id desc">
<field name="action_date"/>
<field name="checkout_id"/>
<field name="action" widget="badge"/>
<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"/>
<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 -->
@@ -164,12 +290,45 @@
<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) -->
@@ -203,6 +362,24 @@
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"