Reworks the March of Dimes workflow to match reality: the OT does their own disability assessment and provides the VOD letter; our accessibility specialist then visits to produce the proposal/drawings/quote; and the application can be submitted by us (internal), the client, or the authorizer themselves. The old workflow flattened all this into one assessment state with a dead-end funding_denied and no document tracking. Data model (13 new sale.order fields): - 5 new document binaries + filenames: VOD letter, Application Form (filled), Notice of Assessment, Property Tax, Proposal Document - x_fc_mod_submitted_by Selection (internal/client/authorizer) - x_fc_mod_handoff_date, x_fc_mod_vod_requested_date - x_fc_mod_accessibility_specialist_id (m2o res.partner — internal or external) - x_fc_mod_previous_status_before_hold (for proper resume) - x_fc_mod_funding_denial_reason (captured via wizard) Settings (4 res.company fields + res_config_settings mirrors): - x_fc_mod_application_form (blank) + filename - x_fc_mod_vod_form (blank) + filename - x_fc_mod_followup_assignee_mode (office_contact / sales_rep) - x_fc_mod_followup_office_contact_id res.partner: added 'accessibility_specialist' to x_fc_contact_type. State machine: - New state handoff_to_client between quote_submitted and awaiting_funding, used for paths B/C (client or authorizer submits themselves) - Fixed action_mod_on_hold to save x_fc_mod_previous_status_before_hold - Fixed action_mod_resume to restore previous status (was hardcoded to in_production, losing context for cases held earlier) 4 new wizards: - mod_submission_path_wizard — chooses submitted_by, auto-fires VOD request email on first switch to 'internal' - mod_funding_denied_wizard — captures denial category + reason - mod_resubmit_wizard — revises + resubmits denied cases (with optional doc clearing) - mod_submission_confirmed_wizard — records client/authorizer confirmed submission, advances to awaiting_funding 8 new action methods: - action_mod_set_submission_path, action_mod_request_vod, action_mod_handoff_to_client (validates docs, fires handoff email), action_mod_confirmed_submission, action_mod_resubmit_from_denied, action_mod_cancel_from_denied, action_mod_reopen_cancelled - action_mod_funding_denied now opens the denial wizard 3 new email methods + 2 existing fixes: - _send_mod_vod_request_email — auto-attaches blank VOD form from company settings, sent to authorizer when we are handling submission - _send_mod_handoff_email — two templates (client vs authorizer), attaches proposal + drawing + blank MOD Application Form - _mod_company_attachment helper for building attachments from company Binary - Fixed _send_mod_assessment_completed_email to include authorizer - Fixed _send_mod_pod_submitted_email to include client New cron: - _cron_mod_handoff_followup (daily 09:00) — creates mail.activity for office to confirm MOD submission. Assignee via company setting (office contact or sales rep). Uses existing rolling-window cap (2/month per order). Views: - sale_order form: new status-bar buttons (set path, request VOD, handoff, confirm, resubmit, cancel, reopen), new document section in MOD Documents tab with submission-path tracking, denial details, hold history - res_config_settings: new MOD blank forms upload + assignee config Deployed to odoo-westin (westin-v19) and odoo-mobility (mobility). Pre-deploy FK cleanup from earlier session means mobility updated cleanly without workaround. HTTP 200 on both, cron verified active, all new fields present.
2645 lines
179 KiB
XML
2645 lines
179 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
Copyright 2024-2025 Nexa Systems Inc.
|
|
License OPL-1 (Odoo Proprietary License v1.0)
|
|
Part of the Fusion Claim Assistant product family.
|
|
-->
|
|
<odoo>
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: Header Fields -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_header" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.header</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">50</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Add hidden helper fields and visible Sale Info fields after payment_term_id -->
|
|
<xpath expr="//field[@name='payment_term_id']" position="after">
|
|
<!-- Hidden helper fields -->
|
|
<field name="x_fc_is_adp_sale" invisible="1"/>
|
|
<field name="x_fc_has_unapproved_devices" invisible="1"/>
|
|
<field name="x_fc_device_verification_complete" invisible="1"/>
|
|
<field name="x_fc_adp_status" invisible="1"/>
|
|
<field name="x_fc_show_authorizer" invisible="1"/>
|
|
<field name="x_fc_show_authorizer_question" invisible="1"/>
|
|
|
|
<!-- Sale Type -->
|
|
<field name="x_fc_sale_type" string="Sale Type"/>
|
|
|
|
<!-- Authorizer Required? - only for odsp, direct_private, insurance, other (not rental) -->
|
|
<field name="x_fc_authorizer_required" string="Authorizer Required?"
|
|
invisible="not x_fc_show_authorizer_question"/>
|
|
|
|
<!-- Authorizer - shown based on sale type and authorizer_required -->
|
|
<field name="x_fc_authorizer_id" string="Authorizer"
|
|
options="{'no_create': False, 'no_quick_create': False}"
|
|
invisible="not x_fc_show_authorizer"
|
|
required="x_fc_is_adp_sale"/>
|
|
|
|
<!-- Client Type - only for ADP sales -->
|
|
<field name="x_fc_client_type" string="Client Type"
|
|
invisible="x_fc_sale_type not in ('adp', 'adp_odsp')"/>
|
|
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: Move Salesperson to header (after Quotation Template) -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_salesperson" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.salesperson</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">51</field>
|
|
<field name="arch" type="xml">
|
|
<field name="sale_order_template_id" position="after">
|
|
<field name="user_id" widget="many2one_avatar_user"/>
|
|
</field>
|
|
<xpath expr="//page[@name='other_information']//field[@name='user_id']" position="replace"/>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: March of Dimes Case Details -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_mod" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.mod</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">49</field>
|
|
<field name="arch" type="xml">
|
|
<!-- MOD Case Details after sale header -->
|
|
<xpath expr="//group[@name='sale_header']" position="after">
|
|
<field name="x_fc_show_mod_fields" invisible="1"/>
|
|
<field name="x_fc_is_mod_sale" invisible="1"/>
|
|
|
|
<group name="mod_case_details" string="March of Dimes"
|
|
invisible="not x_fc_show_mod_fields">
|
|
<group>
|
|
<field name="x_fc_mod_status" string="Status"
|
|
required="x_fc_sale_type == 'march_of_dimes'"/>
|
|
<field name="x_fc_mod_product_type" string="Product Type"/>
|
|
<field name="x_fc_case_approved" string="Funding Approved"
|
|
invisible="x_fc_mod_status not in ('funding_approved', 'contract_received', 'in_production', 'project_complete', 'pod_submitted', 'case_closed')"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_estimated_completion_date" string="Est. Completion"
|
|
invisible="x_fc_mod_status in ('need_to_schedule', 'assessment_scheduled', 'assessment_completed', 'cancelled', False)"/>
|
|
<field name="x_fc_mod_estimated_weeks" string="Est. Weeks"
|
|
invisible="x_fc_mod_status in ('need_to_schedule', 'assessment_scheduled', 'assessment_completed', 'cancelled', False)"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Case Worker and PCA (visible after approval) -->
|
|
<group name="mod_contact_pca" string="Case Worker and PCA"
|
|
invisible="not x_fc_show_mod_fields or x_fc_mod_status not in ('funding_approved', 'contract_received', 'in_production', 'project_complete', 'pod_submitted', 'case_closed')">
|
|
<group>
|
|
<field name="x_fc_case_worker" string="Case Worker"
|
|
help="Assigned by MOD after approval. Added when they contact us."/>
|
|
<field name="x_fc_case_reference" string="HVMP Ref #"
|
|
help="Starts with HVW followed by 5 digits (e.g. HVW38845)"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_mod_approval_type" string="Approval" readonly="1"/>
|
|
<field name="x_fc_mod_approved_amount" string="Approved Amount" readonly="1"
|
|
invisible="x_fc_mod_approval_type != 'partial'"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Production Stage -->
|
|
<group name="mod_production" string="Production Stage"
|
|
invisible="not x_fc_show_mod_fields or x_fc_mod_status not in ('in_production', 'project_complete', 'contract_received')">
|
|
<group>
|
|
<field name="x_fc_mod_production_status" string="Current Stage"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Follow-up (only during awaiting funding) -->
|
|
<group name="mod_followup" string="Follow-up"
|
|
invisible="not x_fc_show_mod_fields or x_fc_mod_status not in ('quote_submitted', 'awaiting_funding')">
|
|
<group>
|
|
<field name="x_fc_mod_last_followup_date" readonly="1"/>
|
|
<field name="x_fc_mod_next_followup_date" readonly="1"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_mod_followup_count" readonly="1"/>
|
|
</group>
|
|
</group>
|
|
|
|
</xpath>
|
|
|
|
<!-- ============================================= -->
|
|
<!-- MOD WORKFLOW BUTTONS (header) -->
|
|
<!-- ============================================= -->
|
|
<xpath expr="//header" position="inside">
|
|
<field name="x_fc_is_mod_sale" invisible="1"/>
|
|
|
|
<!-- Forward flow buttons -->
|
|
<button name="action_mod_schedule_assessment" type="object"
|
|
string="Book Assessment" class="btn-info" icon="fa-calendar"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'need_to_schedule'"/>
|
|
|
|
<button name="action_mod_complete_assessment" type="object"
|
|
string="Assessment Done" class="btn-info" icon="fa-check-square-o"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'assessment_scheduled'"/>
|
|
|
|
<button name="action_mod_processing_drawing" type="object"
|
|
string="Submit Drawing" class="btn-info" icon="fa-pencil-square-o"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status not in ('assessment_completed', 'processing_drawings')"
|
|
help="Attach drawing and photos, then send quotation to March of Dimes"/>
|
|
|
|
<button name="action_mod_awaiting_funding" type="object"
|
|
string="Awaiting Funding" class="btn-warning" icon="fa-clock-o"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'quote_submitted'"
|
|
help="Record application submission date and move to awaiting funding"/>
|
|
|
|
<button name="action_mod_funding_approved" type="object"
|
|
string="Approved" class="btn-success" icon="fa-check"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'awaiting_funding'"/>
|
|
|
|
<button name="action_mod_funding_denied" type="object"
|
|
string="Denied" class="btn-danger" icon="fa-times"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'awaiting_funding'"/>
|
|
|
|
<button name="action_mod_contract_received" type="object"
|
|
string="PCA Received" class="btn-success" icon="fa-file-text"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'funding_approved'"
|
|
help="Upload PCA document and record receipt"/>
|
|
|
|
<button name="action_mod_in_production" type="object"
|
|
string="Start Production" class="btn-info" icon="fa-cogs"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'contract_received'"/>
|
|
|
|
<button name="action_mod_project_complete" type="object"
|
|
string="Project Done" class="btn-success" icon="fa-check-circle"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'in_production'"/>
|
|
|
|
<button name="action_mod_pod_submitted" type="object"
|
|
string="Submit POD" class="btn-info" icon="fa-camera"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'project_complete'"
|
|
help="Attach completion photos and proof of delivery, send to case worker"/>
|
|
|
|
<button name="action_mod_close_case" type="object"
|
|
string="Close Case" class="btn-primary" icon="fa-lock"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'pod_submitted'"/>
|
|
|
|
<!-- Send to MOD -->
|
|
<button name="action_send_to_mod" type="object"
|
|
string="Send to MOD" class="btn-primary" icon="fa-paper-plane"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status in ('need_to_schedule', 'assessment_scheduled', 'cancelled', False)"/>
|
|
|
|
<!-- Exception buttons -->
|
|
<button name="action_mod_on_hold" type="object"
|
|
string="Hold" class="btn-warning" icon="fa-pause"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status in ('on_hold', 'case_closed', 'cancelled', False)"/>
|
|
|
|
<button name="action_mod_resume" type="object"
|
|
string="Resume" class="btn-success" icon="fa-play"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'on_hold'"/>
|
|
|
|
<!-- ======================================================= -->
|
|
<!-- MOD 2026-04 UPDATE — new submission-path + recovery btns -->
|
|
<!-- ======================================================= -->
|
|
|
|
<!-- Set MOD Submission Path (internal / client / authorizer) -->
|
|
<button name="action_mod_set_submission_path" type="object"
|
|
string="Set Submission Path" class="btn-info" icon="fa-sitemap"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status not in ('assessment_completed', 'processing_drawings', 'quote_submitted')"
|
|
help="Choose who is submitting the MOD application (our office, the client, or the authorizer)"/>
|
|
|
|
<!-- Request VOD from Authorizer (manual re-send) -->
|
|
<button name="action_mod_request_vod" type="object"
|
|
string="Request VOD from Authorizer" class="btn-warning" icon="fa-envelope"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_submitted_by != 'internal' or x_fc_mod_vod_letter"
|
|
help="Email the authorizer the blank Verification of Disability form to complete. Fires automatically once on first setting submitted_by=internal, this button is for manual re-sends."/>
|
|
|
|
<!-- Handoff to Client/Authorizer (paths B/C) -->
|
|
<button name="action_mod_handoff_to_client" type="object"
|
|
string="Handoff Package" class="btn-primary" icon="fa-share"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_submitted_by not in ('client', 'authorizer') or x_fc_mod_status not in ('processing_drawings', 'quote_submitted')"
|
|
confirm="This will email the full MOD application package to the client or authorizer and move the case to Handoff state. Continue?"
|
|
help="Email proposal + drawing + blank MOD application form to whoever is submitting, and move the case to handoff_to_client"/>
|
|
|
|
<!-- Confirm Submission (for handoff_to_client state) -->
|
|
<button name="action_mod_confirmed_submission" type="object"
|
|
string="Confirm Submission" class="btn-success" icon="fa-check-circle"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'handoff_to_client'"
|
|
help="Client or authorizer confirmed they submitted the application to MOD. Record the date and advance to Awaiting Funding."/>
|
|
|
|
<!-- Recovery buttons for funding_denied -->
|
|
<button name="action_mod_resubmit_from_denied" type="object"
|
|
string="Resubmit" class="btn-primary" icon="fa-undo"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'funding_denied'"
|
|
help="Revise and resubmit the case to March of Dimes after a denial"/>
|
|
|
|
<button name="action_mod_cancel_from_denied" type="object"
|
|
string="Cancel Case" class="btn-danger" icon="fa-times"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'funding_denied'"
|
|
confirm="Cancel this denied MOD case? This action can be reversed with Reopen."/>
|
|
|
|
<button name="action_mod_reopen_cancelled" type="object"
|
|
string="Reopen" class="btn-info" icon="fa-refresh"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status != 'cancelled'"
|
|
confirm="Reopen this cancelled MOD case? Status will reset to Need to Schedule."/>
|
|
|
|
</xpath>
|
|
|
|
<!-- ============================================= -->
|
|
<!-- MOD DOCUMENTS TAB (ADP-style tile design) -->
|
|
<!-- ============================================= -->
|
|
<xpath expr="//notebook" position="inside">
|
|
<page string="MOD Documents" name="mod_documents"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status in ('need_to_schedule', 'cancelled', False)">
|
|
|
|
<!-- Hidden trail fields -->
|
|
<field name="x_fc_mod_trail_has_drawing" invisible="1"/>
|
|
<field name="x_fc_mod_trail_has_initial_photos" invisible="1"/>
|
|
<field name="x_fc_mod_trail_has_pca" invisible="1"/>
|
|
<field name="x_fc_mod_trail_has_pod" invisible="1"/>
|
|
<field name="x_fc_mod_trail_has_completion_photos" invisible="1"/>
|
|
|
|
<!-- Stage-specific alerts -->
|
|
<div class="alert alert-info" role="alert"
|
|
invisible="x_fc_mod_status not in ('assessment_completed', 'processing_drawings')">
|
|
<i class="fa fa-upload"/> <strong>Action Required:</strong>
|
|
Upload the Drawing and Initial Photos before sending the quote.
|
|
</div>
|
|
|
|
<div class="alert alert-info" role="alert"
|
|
invisible="x_fc_mod_status not in ('funding_approved',)">
|
|
<i class="fa fa-upload"/> <strong>Action Required:</strong>
|
|
Upload the PCA Document received from March of Dimes.
|
|
</div>
|
|
|
|
<div class="alert alert-info" role="alert"
|
|
invisible="x_fc_mod_status not in ('project_complete',)">
|
|
<i class="fa fa-camera"/> <strong>Action Required:</strong>
|
|
Upload Completion Photos and Proof of Delivery to submit to the case worker.
|
|
</div>
|
|
|
|
<!-- ===== 2026-04 MOD Update: Submission Path + Application Package ===== -->
|
|
<separator string="MOD Submission Path"/>
|
|
<div class="alert alert-secondary" role="alert"
|
|
invisible="x_fc_mod_submitted_by">
|
|
<i class="fa fa-question-circle"/> <strong>Who is submitting this application?</strong>
|
|
Click <strong>Set Submission Path</strong> in the status bar above to choose:
|
|
internal (we submit), client, or authorizer.
|
|
</div>
|
|
<group col="4">
|
|
<field name="x_fc_mod_submitted_by" readonly="1"/>
|
|
<field name="x_fc_mod_handoff_date" readonly="1"
|
|
invisible="x_fc_mod_submitted_by == 'internal'"/>
|
|
<field name="x_fc_mod_application_submitted_date" readonly="1"/>
|
|
<field name="x_fc_mod_vod_requested_date" readonly="1"
|
|
invisible="x_fc_mod_submitted_by != 'internal'"/>
|
|
<field name="x_fc_mod_accessibility_specialist_id"
|
|
options="{'no_create': True}"/>
|
|
</group>
|
|
|
|
<separator string="MOD Application Package (when WE submit on client's behalf)"
|
|
invisible="x_fc_mod_submitted_by != 'internal'"/>
|
|
<group col="2" invisible="x_fc_mod_submitted_by != 'internal'">
|
|
<field name="x_fc_mod_vod_letter"
|
|
filename="x_fc_mod_vod_letter_filename"
|
|
widget="binary"/>
|
|
<field name="x_fc_mod_application_form_doc"
|
|
filename="x_fc_mod_application_form_doc_filename"
|
|
widget="binary"/>
|
|
<field name="x_fc_mod_notice_of_assessment"
|
|
filename="x_fc_mod_notice_of_assessment_filename"
|
|
widget="binary"/>
|
|
<field name="x_fc_mod_property_tax"
|
|
filename="x_fc_mod_property_tax_filename"
|
|
widget="binary"/>
|
|
</group>
|
|
|
|
<separator string="Proposal Document"/>
|
|
<group col="2">
|
|
<field name="x_fc_mod_proposal_doc"
|
|
filename="x_fc_mod_proposal_doc_filename"
|
|
widget="binary"/>
|
|
</group>
|
|
|
|
<separator string="Funding Denial Details" invisible="x_fc_mod_status != 'funding_denied'"/>
|
|
<group invisible="x_fc_mod_status != 'funding_denied'">
|
|
<field name="x_fc_mod_funding_denial_reason" readonly="1" nolabel="1"/>
|
|
</group>
|
|
|
|
<separator string="Hold History" invisible="not x_fc_mod_previous_status_before_hold"/>
|
|
<group invisible="not x_fc_mod_previous_status_before_hold">
|
|
<field name="x_fc_mod_previous_status_before_hold" readonly="1"/>
|
|
</group>
|
|
|
|
<!-- ===== Row 1: Assessment Documents ===== -->
|
|
<div class="row">
|
|
<!-- Column 1: Assessment and Design -->
|
|
<div class="col-md-6">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-pencil-square-o"/> Assessment & Design
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<!-- Drawing Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_mod_drawing" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_mod_drawing" title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_mod_drawing"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Drawing</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_mod_drawing">
|
|
<field name="x_fc_mod_drawing_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_mod_drawing">Required for quotation</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_mod_drawing" filename="x_fc_mod_drawing_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Initial Photos Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_mod_initial_photos" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_mod_initial_photos" title="Click to preview">
|
|
<i class="fa fa-image fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_mod_initial_photos"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Initial Photos</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_mod_initial_photos">
|
|
<field name="x_fc_mod_initial_photos_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_mod_initial_photos">Required for quotation</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_mod_initial_photos" filename="x_fc_mod_initial_photos_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 2: PCA Document -->
|
|
<div class="col-md-6"
|
|
invisible="x_fc_mod_status in ('assessment_scheduled', 'assessment_completed', 'processing_drawings', 'quote_submitted', 'awaiting_funding', False)">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-file-text"/> PCA / Contract
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<!-- PCA Document Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_mod_pca" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_mod_pca_document" title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_mod_pca_document"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">PCA Document</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_mod_pca_document">
|
|
<field name="x_fc_mod_pca_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_mod_pca_document">Upload when received</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_mod_pca_document" filename="x_fc_mod_pca_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ===== Row 2: Completion Documents (visible after production) ===== -->
|
|
<div class="row mt-3"
|
|
invisible="x_fc_mod_status not in ('in_production', 'project_complete', 'pod_submitted', 'case_closed')">
|
|
<div class="col-md-6">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-check-circle"/> Completion Documents
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<!-- Proof of Delivery Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_mod_pod" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_mod_proof_of_delivery" title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_mod_proof_of_delivery"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Proof of Delivery</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_mod_proof_of_delivery">
|
|
<field name="x_fc_mod_pod_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_mod_proof_of_delivery">Required for POD submission</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_mod_proof_of_delivery" filename="x_fc_mod_pod_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Completion Photos Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_mod_completion_photos" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_mod_completion_photos" title="Click to preview">
|
|
<i class="fa fa-image fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_mod_completion_photos"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Completion Photos</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_mod_completion_photos">
|
|
<field name="x_fc_mod_completion_photos_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_mod_completion_photos">Required for POD submission</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_mod_completion_photos" filename="x_fc_mod_completion_photos_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</page>
|
|
|
|
<!-- ============================================= -->
|
|
<!-- MOD AUDIT TRAIL TAB -->
|
|
<!-- ============================================= -->
|
|
<page string="MOD Audit Trail" name="mod_audit_trail"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_status in ('need_to_schedule', 'cancelled', False)">
|
|
|
|
<!-- Hidden trail fields -->
|
|
<field name="x_fc_mod_trail_assessment_done" invisible="1"/>
|
|
<field name="x_fc_mod_trail_drawing_done" invisible="1"/>
|
|
<field name="x_fc_mod_trail_app_submitted" invisible="1"/>
|
|
<field name="x_fc_mod_trail_funding_approved" invisible="1"/>
|
|
<field name="x_fc_mod_trail_pca_received" invisible="1"/>
|
|
<field name="x_fc_mod_trail_production_started" invisible="1"/>
|
|
<field name="x_fc_mod_trail_project_completed" invisible="1"/>
|
|
<field name="x_fc_mod_trail_pod_sent" invisible="1"/>
|
|
<field name="x_fc_mod_trail_case_closed" invisible="1"/>
|
|
|
|
<div class="row">
|
|
<!-- Workflow Checklist -->
|
|
<div class="col-md-6">
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h5 class="mb-0"><i class="fa fa-list-alt"/> Workflow Checklist</h5>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
<table class="table table-striped mb-0">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width:40px; text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_assessment_done"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_assessment_done"/>
|
|
</td>
|
|
<td>Assessment Completed</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_has_drawing"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_has_drawing"/>
|
|
</td>
|
|
<td>Drawing Uploaded</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_drawing_done"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_drawing_done"/>
|
|
</td>
|
|
<td>Quotation Sent to Client</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_app_submitted"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_app_submitted"/>
|
|
</td>
|
|
<td>Application Submitted to MOD</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_funding_approved"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_funding_approved"/>
|
|
</td>
|
|
<td>Funding Approved</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Production and Completion Checklist -->
|
|
<div class="col-md-6">
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h5 class="mb-0"><i class="fa fa-check-circle"/> Production and Completion</h5>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
<table class="table table-striped mb-0">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width:40px; text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_pca_received"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_pca_received"/>
|
|
</td>
|
|
<td>PCA Received</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_production_started"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_production_started"/>
|
|
</td>
|
|
<td>Production Started</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_project_completed"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_project_completed"/>
|
|
</td>
|
|
<td>Project Completed</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_pod_sent"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_pod_sent"/>
|
|
</td>
|
|
<td>POD Submitted to MOD</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align:center;">
|
|
<i class="fa fa-check-circle text-success" title="Done" invisible="not x_fc_mod_trail_case_closed"/>
|
|
<i class="fa fa-circle-o text-muted" title="Pending" invisible="x_fc_mod_trail_case_closed"/>
|
|
</td>
|
|
<td>Case Closed</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Key Dates -->
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h5 class="mb-0"><i class="fa fa-calendar"/> Key Dates</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<group col="4">
|
|
<field name="x_fc_mod_assessment_scheduled_date" readonly="1"/>
|
|
<field name="x_fc_mod_assessment_completed_date" readonly="1"/>
|
|
<field name="x_fc_mod_drawing_submitted_date" readonly="1"/>
|
|
<field name="x_fc_mod_application_submitted_date" readonly="1"/>
|
|
<field name="x_fc_case_approved" string="Funding Approved" readonly="1"/>
|
|
<field name="x_fc_mod_pca_received_date" readonly="1"/>
|
|
<field name="x_fc_mod_production_started_date" readonly="1"/>
|
|
<field name="x_fc_mod_project_completed_date" readonly="1"/>
|
|
<field name="x_fc_mod_pod_submitted_date" readonly="1"/>
|
|
<field name="x_fc_mod_case_closed_date" readonly="1"/>
|
|
</group>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</page>
|
|
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: ODSP Section -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_odsp" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.odsp</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">49</field>
|
|
<field name="arch" type="xml">
|
|
<!-- ODSP Case Details after sale header -->
|
|
<xpath expr="//group[@name='sale_header']" position="after">
|
|
<field name="x_fc_show_odsp_fields" invisible="1"/>
|
|
<field name="x_fc_is_odsp_sale" invisible="1"/>
|
|
|
|
<group name="odsp_case_details" string="ODSP"
|
|
invisible="not x_fc_show_odsp_fields">
|
|
<group>
|
|
<field name="x_fc_odsp_division" string="Division"
|
|
required="x_fc_is_odsp_sale"/>
|
|
<field name="x_fc_sa_status" string="Status"
|
|
invisible="x_fc_odsp_division != 'sa_mobility'"/>
|
|
<field name="x_fc_odsp_std_status" string="Status"
|
|
invisible="x_fc_odsp_division != 'standard'"/>
|
|
<field name="x_fc_ow_status" string="Status"
|
|
invisible="x_fc_odsp_division != 'ontario_works'"/>
|
|
<field name="x_fc_odsp_member_id" string="Member ID"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_odsp_office_id" string="ODSP Office"/>
|
|
<field name="x_fc_odsp_case_worker_name" string="Case Worker"/>
|
|
</group>
|
|
</group>
|
|
</xpath>
|
|
|
|
<!-- ODSP Workflow buttons in header -->
|
|
<xpath expr="//header" position="inside">
|
|
|
|
<!-- === SA Mobility workflow step buttons === -->
|
|
<button name="action_odsp_pre_approved" type="object"
|
|
string="Pre-Approved" class="btn-success" icon="fa-check"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'sa_mobility' or x_fc_sa_status != 'submitted_to_sa'"/>
|
|
|
|
<button name="action_odsp_ready_delivery" type="object"
|
|
string="Ready for Delivery" class="btn-primary" icon="fa-truck"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'sa_mobility' or x_fc_sa_status != 'pre_approved'"/>
|
|
|
|
<button name="action_odsp_delivered" type="object"
|
|
string="Delivered" class="btn-success" icon="fa-check-circle"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'sa_mobility' or x_fc_sa_status != 'ready_delivery'"/>
|
|
|
|
<button name="action_odsp_pod_submitted" type="object"
|
|
string="Submit to SA Mobility" class="btn-info" icon="fa-paper-plane"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'sa_mobility' or x_fc_sa_status != 'delivered'"
|
|
help="Submit POD, signed SA form, and invoice to SA Mobility"/>
|
|
|
|
<button name="action_odsp_payment_received" type="object"
|
|
string="Payment Received" class="btn-success" icon="fa-money"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'sa_mobility' or x_fc_sa_status != 'pod_submitted'"/>
|
|
|
|
<button name="action_odsp_close_case" type="object"
|
|
string="Close Case" class="btn-primary" icon="fa-lock"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'sa_mobility' or x_fc_sa_status != 'payment_received'"/>
|
|
|
|
<!-- === Standard ODSP workflow step buttons === -->
|
|
<button name="action_odsp_pre_approved" type="object"
|
|
string="Pre-Approved" class="btn-success" icon="fa-check"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'standard' or x_fc_odsp_std_status != 'submitted_to_odsp'"/>
|
|
|
|
<button name="action_odsp_ready_delivery" type="object"
|
|
string="Ready for Delivery" class="btn-primary" icon="fa-truck"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'standard' or x_fc_odsp_std_status != 'pre_approved'"/>
|
|
|
|
<button name="action_odsp_delivered" type="object"
|
|
string="Delivered" class="btn-success" icon="fa-check-circle"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'standard' or x_fc_odsp_std_status != 'ready_delivery'"/>
|
|
|
|
<button name="action_odsp_pod_submitted" type="object"
|
|
string="Submit to ODSP" class="btn-info" icon="fa-paper-plane"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'standard' or x_fc_odsp_std_status != 'delivered'"
|
|
help="Submit approval document, POD, and invoice to ODSP"/>
|
|
|
|
<button name="action_odsp_payment_received" type="object"
|
|
string="Payment Received" class="btn-success" icon="fa-money"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'standard' or x_fc_odsp_std_status != 'pod_submitted'"/>
|
|
|
|
<button name="action_odsp_close_case" type="object"
|
|
string="Close Case" class="btn-primary" icon="fa-lock"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'standard' or x_fc_odsp_std_status != 'payment_received'"/>
|
|
|
|
<!-- === Ontario Works workflow step buttons === -->
|
|
<button name="action_odsp_submitted_ow" type="object"
|
|
string="Submitted to Ontario Works" class="btn-info" icon="fa-paper-plane"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'ontario_works' or x_fc_ow_status != 'documents_ready'"/>
|
|
|
|
<button name="action_odsp_payment_received" type="object"
|
|
string="Payment Confirmed" class="btn-success" icon="fa-money"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'ontario_works' or x_fc_ow_status != 'submitted_to_ow'"
|
|
help="OW confirmed payment. Creates invoice and opens it."/>
|
|
|
|
<button name="action_odsp_ready_delivery" type="object"
|
|
string="Ready for Delivery" class="btn-primary" icon="fa-truck"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'ontario_works' or x_fc_ow_status != 'payment_received'"/>
|
|
|
|
<button name="action_odsp_delivered" type="object"
|
|
string="Delivered" class="btn-success" icon="fa-check-circle"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'ontario_works' or x_fc_ow_status != 'ready_delivery'"/>
|
|
|
|
<button name="action_odsp_close_case" type="object"
|
|
string="Close Case" class="btn-primary" icon="fa-lock"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'ontario_works' or x_fc_ow_status != 'delivered'"/>
|
|
|
|
<!-- === Common buttons (all divisions) === -->
|
|
<button name="action_odsp_on_hold" type="object"
|
|
string="On Hold" class="btn-warning" icon="fa-pause"
|
|
invisible="not x_fc_is_odsp_sale or (x_fc_odsp_division == 'sa_mobility' and x_fc_sa_status in ('quotation', 'case_closed', 'cancelled', 'denied', 'on_hold')) or (x_fc_odsp_division == 'standard' and x_fc_odsp_std_status in ('quotation', 'case_closed', 'cancelled', 'denied', 'on_hold')) or (x_fc_odsp_division == 'ontario_works' and x_fc_ow_status in ('quotation', 'case_closed', 'cancelled', 'denied', 'on_hold'))"/>
|
|
|
|
<button name="action_odsp_resume" type="object"
|
|
string="Resume" class="btn-success" icon="fa-play"
|
|
invisible="not x_fc_is_odsp_sale or (x_fc_odsp_division == 'sa_mobility' and x_fc_sa_status != 'on_hold') or (x_fc_odsp_division == 'standard' and x_fc_odsp_std_status != 'on_hold') or (x_fc_odsp_division == 'ontario_works' and x_fc_ow_status != 'on_hold')"/>
|
|
|
|
<button name="action_odsp_denied" type="object"
|
|
string="Denied" class="btn-danger" icon="fa-times"
|
|
invisible="not x_fc_is_odsp_sale or (x_fc_odsp_division == 'sa_mobility' and x_fc_sa_status not in ('submitted_to_sa',)) or (x_fc_odsp_division == 'standard' and x_fc_odsp_std_status not in ('submitted_to_odsp',)) or (x_fc_odsp_division == 'ontario_works' and x_fc_ow_status not in ('submitted_to_ow',))"/>
|
|
|
|
<!-- === Form filling buttons (always visible for division) === -->
|
|
<button name="action_open_sa_mobility_wizard" type="object"
|
|
string="SA Mobility Form" class="btn-info" icon="fa-file-text"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'sa_mobility'"/>
|
|
|
|
<button name="action_open_discretionary_wizard" type="object"
|
|
string="Discretionary Form" class="btn-info" icon="fa-file-text"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'ontario_works'"/>
|
|
|
|
<button name="action_open_submit_to_odsp_wizard" type="object"
|
|
string="Submit to ODSP" class="btn-info" icon="fa-paper-plane"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'standard'"/>
|
|
|
|
</xpath>
|
|
|
|
<!-- ODSP Signature tab in notebook -->
|
|
<xpath expr="//notebook" position="inside">
|
|
<page string="SA Mobility Documents" name="sa_mobility_signature"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'sa_mobility' or x_fc_sa_status not in ('pre_approved', 'ready_delivery', 'delivered', 'pod_submitted', 'payment_received', 'case_closed')">
|
|
|
|
<div class="row">
|
|
<!-- Column 1: ODSP Approval Form -->
|
|
<div class="col-md-4">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-file-text-o"/> ODSP Approval Form
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_sa_approval_form" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_sa_approval_form"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_sa_approval_form"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Approval Form</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_sa_approval_form">
|
|
<field name="x_fc_sa_approval_form_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_sa_approval_form">Upload ODSP approval PDF</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_sa_approval_form" filename="x_fc_sa_approval_form_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<group class="mt-2">
|
|
<field name="x_fc_sa_signature_page" string="Signature Page"/>
|
|
</group>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 2: Signed Form (auto-generated or physical copy) -->
|
|
<div class="col-md-4"
|
|
invisible="x_fc_sa_status not in ('ready_delivery', 'delivered', 'pod_submitted', 'payment_received', 'case_closed')">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-pencil-square-o"/> Signed Form
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<!-- Auto-generated signed form tile -->
|
|
<div class="fc-document-tile" invisible="not x_fc_sa_signed_form">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_sa_signed_form" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Signed Form (Digital)</div>
|
|
<div class="fc-tile-filename">
|
|
<field name="x_fc_sa_signed_form_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Physical signed copy tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_sa_physical_copy" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_sa_physical_signed_copy"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_sa_physical_signed_copy"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Physical Signed Copy</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_sa_physical_signed_copy">
|
|
<field name="x_fc_sa_physical_signed_copy_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_sa_physical_signed_copy">Upload scanned signed form</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_sa_physical_signed_copy" filename="x_fc_sa_physical_signed_copy_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 3: Internal POD (generated from report on-the-fly) -->
|
|
<div class="col-md-4"
|
|
invisible="x_fc_sa_status not in ('delivered', 'pod_submitted', 'payment_received', 'case_closed')">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-file-text"/> Internal POD
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<div class="fc-document-tile" invisible="not x_fc_pod_signature">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_sa_internal_pod" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
title="Click to print POD">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Proof of Delivery</div>
|
|
<div class="fc-tile-filename">
|
|
Signed by <field name="x_fc_pod_client_name" nolabel="1" class="d-inline"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="fc-document-tile" invisible="x_fc_pod_signature">
|
|
<div class="fc-tile-preview">
|
|
<i class="fa fa-clock-o fc-empty-icon"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-empty-text">Available after POD is signed</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<field name="x_fc_sa_signed_form" invisible="1"/>
|
|
<field name="x_fc_sa_signed_form_filename" invisible="1"/>
|
|
</page>
|
|
|
|
<!-- Ontario Works Documents tab -->
|
|
<page string="Ontario Works Documents" name="ow_documents"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'ontario_works' or x_fc_ow_status == 'quotation'">
|
|
|
|
<div class="row">
|
|
<!-- Column 1: Discretionary Benefits Form -->
|
|
<div class="col-md-4">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-file-text-o"/> Discretionary Benefits Form
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_ow_discretionary_form" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_ow_discretionary_form"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-clock-o fc-empty-icon" invisible="x_fc_ow_discretionary_form"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Discretionary Form</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_ow_discretionary_form">
|
|
<field name="x_fc_ow_discretionary_form_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_ow_discretionary_form">Generated when form is sent via wizard</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 2: Internal POD -->
|
|
<div class="col-md-4"
|
|
invisible="x_fc_ow_status not in ('delivered', 'case_closed')">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-file-text"/> Proof of Delivery
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<div class="fc-document-tile" invisible="not x_fc_pod_signature">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_ow_internal_pod" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
title="Click to print POD">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Proof of Delivery</div>
|
|
<div class="fc-tile-filename">
|
|
Signed by <field name="x_fc_pod_client_name" nolabel="1" class="d-inline"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="fc-document-tile" invisible="x_fc_pod_signature">
|
|
<div class="fc-tile-preview">
|
|
<i class="fa fa-clock-o fc-empty-icon"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-empty-text">Available after delivery is completed</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 3: Authorizer Letter (optional upload) -->
|
|
<div class="col-md-4">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-envelope-o"/> Authorizer Letter
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_ow_authorizer_letter" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_ow_authorizer_letter"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_ow_authorizer_letter"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Authorizer Letter</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_ow_authorizer_letter">
|
|
<field name="x_fc_ow_authorizer_letter_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_ow_authorizer_letter">Upload authorizer letter (optional)</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_ow_authorizer_letter" filename="x_fc_ow_authorizer_letter_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<field name="x_fc_ow_discretionary_form" invisible="1"/>
|
|
</page>
|
|
|
|
<!-- Standard ODSP Documents tab -->
|
|
<page string="ODSP Documents" name="odsp_std_documents"
|
|
invisible="not x_fc_is_odsp_sale or x_fc_odsp_division != 'standard' or x_fc_odsp_std_status == 'quotation'">
|
|
|
|
<div class="row">
|
|
<!-- Column 1: Authorizer Letter -->
|
|
<div class="col-md-4">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-envelope-o"/> Authorizer Letter
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_odsp_std_authorizer_letter" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_odsp_authorizer_letter"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_odsp_authorizer_letter"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Authorizer Letter</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_odsp_authorizer_letter">
|
|
<field name="x_fc_odsp_authorizer_letter_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_odsp_authorizer_letter">Uploaded via Submit to ODSP wizard</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_odsp_authorizer_letter" filename="x_fc_odsp_authorizer_letter_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 2: ODSP Approval Document -->
|
|
<div class="col-md-4"
|
|
invisible="x_fc_odsp_std_status not in ('pre_approved', 'ready_delivery', 'delivered', 'pod_submitted', 'payment_received', 'case_closed')">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-check-circle-o"/> Approval Document
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_odsp_std_approval_document" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_odsp_approval_document"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_odsp_approval_document"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Approval Document</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_odsp_approval_document">
|
|
<field name="x_fc_odsp_approval_document_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_odsp_approval_document">Uploaded during pre-approval</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_odsp_approval_document" filename="x_fc_odsp_approval_document_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 3: Internal POD -->
|
|
<div class="col-md-4"
|
|
invisible="x_fc_odsp_std_status not in ('delivered', 'pod_submitted', 'payment_received', 'case_closed')">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-file-text"/> Proof of Delivery
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<div class="fc-document-tile" invisible="not x_fc_pod_signature">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_odsp_std_internal_pod" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
title="Click to print POD">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Proof of Delivery</div>
|
|
<div class="fc-tile-filename">
|
|
Signed by <field name="x_fc_pod_client_name" nolabel="1" class="d-inline"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="fc-document-tile" invisible="x_fc_pod_signature">
|
|
<div class="fc-tile-preview">
|
|
<i class="fa fa-clock-o fc-empty-icon"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-empty-text">Available after delivery is completed</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</page>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: ADP Invoice Smart Buttons -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_invoice_buttons" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.invoice.buttons</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">48</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Add ADP and Client invoice smart buttons -->
|
|
<xpath expr="//div[@name='button_box']" position="inside">
|
|
<!-- Client Invoice Button (Blue) - only for REG clients -->
|
|
<button name="action_view_client_invoices" type="object"
|
|
class="oe_stat_button" icon="fa-file-text-o"
|
|
invisible="not x_fc_is_adp_sale or x_fc_client_invoice_count == 0">
|
|
<field name="x_fc_client_invoice_count" widget="statinfo" string="Client Invoice"/>
|
|
</button>
|
|
|
|
<!-- ADP Invoice Button (Green) -->
|
|
<button name="action_view_adp_invoices" type="object"
|
|
class="oe_stat_button" icon="fa-institution"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_invoice_count == 0">
|
|
<field name="x_fc_adp_invoice_count" widget="statinfo" string="ADP Invoice"/>
|
|
</button>
|
|
|
|
<!-- Vendor Bills Button (for audit trail) -->
|
|
<button name="action_view_vendor_bills" type="object"
|
|
class="oe_stat_button" icon="fa-truck"
|
|
invisible="not x_fc_is_adp_sale or x_fc_vendor_bill_count == 0">
|
|
<field name="x_fc_vendor_bill_count" widget="statinfo" string="Vendor Bills"/>
|
|
</button>
|
|
|
|
<!-- MOD Invoice Button (March of Dimes cases only) -->
|
|
<button name="action_view_mod_invoices" type="object"
|
|
class="oe_stat_button" icon="fa-institution"
|
|
invisible="not x_fc_is_mod_sale or x_fc_mod_invoice_count == 0">
|
|
<field name="x_fc_mod_invoice_count" widget="statinfo" string="MOD Invoice"/>
|
|
</button>
|
|
|
|
<!-- Client Invoice for MOD cases -->
|
|
<button name="action_view_mod_client_invoices" type="object"
|
|
class="oe_stat_button" icon="fa-file-text-o"
|
|
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>
|
|
|
|
<!-- Technician Tasks Button -->
|
|
<button name="action_view_technician_tasks" type="object"
|
|
class="oe_stat_button" icon="fa-wrench"
|
|
invisible="x_fc_technician_task_count == 0">
|
|
<field name="x_fc_technician_task_count" widget="statinfo" string="Tasks"/>
|
|
</button>
|
|
|
|
<!-- Page 11 Signing Requests -->
|
|
<button name="action_view_page11_requests" type="object"
|
|
class="oe_stat_button" icon="fa-pencil-square-o"
|
|
invisible="page11_sign_request_count == 0">
|
|
<field name="page11_sign_request_count" widget="statinfo" string="Page 11 Requests"/>
|
|
</button>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: Device Approval Alert Banner -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_approval_banner" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.approval.banner</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">45</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Add prominent alert banner at top of form when approval verification is needed -->
|
|
<xpath expr="//form/sheet" position="before">
|
|
<field name="x_fc_is_adp_sale" invisible="1"/>
|
|
<field name="x_fc_device_verification_complete" invisible="1"/>
|
|
<field name="x_fc_has_unapproved_devices" invisible="1"/>
|
|
<field name="x_fc_total_device_count" invisible="1"/>
|
|
|
|
<!-- Show when ADP sale has devices that need verification -->
|
|
<div class="alert alert-danger" role="alert"
|
|
invisible="not x_fc_is_adp_sale or x_fc_device_verification_complete or x_fc_total_device_count == 0 or state not in ('sale', 'done')">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fa fa-exclamation-triangle fa-2x me-3"/>
|
|
<div class="flex-grow-1">
|
|
<strong>Device Approval Verification Required</strong>
|
|
<p class="mb-0">
|
|
Please verify which devices were approved by ADP before creating invoices.
|
|
</p>
|
|
</div>
|
|
<button name="action_open_device_approval_wizard" type="object"
|
|
string="Verify Device Approval" class="btn btn-danger ms-3"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Show info if some devices were NOT approved (after verification is complete) -->
|
|
<div class="alert alert-warning" role="alert"
|
|
invisible="not x_fc_is_adp_sale or not x_fc_device_verification_complete or not x_fc_has_unapproved_devices or state not in ('sale', 'done')">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fa fa-exclamation-circle fa-2x me-3"/>
|
|
<div class="flex-grow-1">
|
|
<strong>Some Devices Were NOT Approved by ADP</strong>
|
|
<p class="mb-0">
|
|
Unapproved devices will be billed to the client at 100% and excluded from the ADP invoice.
|
|
</p>
|
|
</div>
|
|
<button name="action_open_device_approval_wizard" type="object"
|
|
string="Review Approvals" class="btn btn-warning ms-3"/>
|
|
</div>
|
|
</div>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: Split Invoice Buttons in Header -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_buttons" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.buttons</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">52</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Add split invoice buttons after the standard Create Invoice button -->
|
|
<xpath expr="//button[@name='action_quotation_send']" position="after">
|
|
<field name="x_fc_is_adp_sale" invisible="1"/>
|
|
<field name="x_fc_has_client_invoice" invisible="1"/>
|
|
<field name="x_fc_has_adp_invoice" invisible="1"/>
|
|
<field name="x_fc_client_type" invisible="1"/>
|
|
|
|
<!-- REG Client: Create Client Invoice (25%) - show if ADP sale, REG client, no client invoice yet -->
|
|
<button name="action_create_client_invoice" type="object"
|
|
string="Create Client Invoice (25%)" class="btn-primary"
|
|
invisible="not x_fc_is_adp_sale or x_fc_client_type != 'REG' or x_fc_has_client_invoice or state != 'sale'"/>
|
|
|
|
<!-- REG Client: Create ADP Invoice (75%) - show after client invoice is created -->
|
|
<button name="action_create_adp_invoice" type="object"
|
|
string="Create ADP Invoice (75%)" class="btn-warning"
|
|
invisible="not x_fc_is_adp_sale or x_fc_client_type != 'REG' or x_fc_has_adp_invoice or not x_fc_has_client_invoice or state != 'sale'"/>
|
|
|
|
<!-- Non-REG Client: Create ADP Invoice (100%) - show if ADP sale, non-REG, no ADP invoice yet -->
|
|
<button name="action_create_adp_invoice" type="object"
|
|
string="Create ADP Invoice (100%)" class="btn-warning"
|
|
invisible="not x_fc_is_adp_sale or x_fc_client_type == 'REG' or x_fc_has_adp_invoice or state != 'sale'"/>
|
|
|
|
<!-- Hidden helper fields for button visibility -->
|
|
<field name="x_fc_has_unapproved_devices" invisible="1"/>
|
|
<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_early_delivery" invisible="1"/>
|
|
|
|
<!-- ============================================================ -->
|
|
<!-- NEXT STEP WORKFLOW BUTTONS - Always show the next action -->
|
|
<!-- These appear FIRST in the header for easy access -->
|
|
<!-- ============================================================ -->
|
|
|
|
<!-- Quotation -> Schedule Assessment -->
|
|
<button name="action_schedule_assessment" type="object"
|
|
string="Schedule Assessment" class="btn-info"
|
|
icon="fa-calendar"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'quotation'"
|
|
help="Move to Assessment Scheduled status"/>
|
|
|
|
<!-- Assessment Scheduled (or Quotation override) -> Complete Assessment -->
|
|
<button name="action_complete_assessment" type="object"
|
|
string="Complete Assessment" class="btn-info"
|
|
icon="fa-check-square-o"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('quotation', 'assessment_scheduled')"
|
|
help="Mark assessment as completed (override available from Quotation stage)"/>
|
|
|
|
<!-- Request Page 11 Remote Signature (before Application Received) -->
|
|
<button name="action_request_page11_signature" type="object"
|
|
string="Request Page 11 Signature" class="btn-warning"
|
|
icon="fa-pencil-square-o"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('assessment_completed', 'waiting_for_application', 'application_received') or x_fc_signed_pages_11_12"
|
|
help="Send Page 11 to a family member or agent for remote digital signing"/>
|
|
<button name="action_request_page11_signature" type="object"
|
|
string="Re-sign Page 11" class="btn-secondary"
|
|
icon="fa-repeat"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('assessment_completed', 'waiting_for_application', 'application_received') or not x_fc_signed_pages_11_12"
|
|
help="Page 11 already signed. Click to request a new signature."/>
|
|
|
|
<!-- Waiting for Application -> Application Received -->
|
|
<button name="action_application_received" type="object"
|
|
string="Application Received" class="btn-info"
|
|
icon="fa-file-text-o"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('assessment_completed', 'waiting_for_application')"
|
|
help="Mark application as received from authorizer"/>
|
|
|
|
<!-- Application Received -> Ready for Submission -->
|
|
<button name="action_ready_for_submission" type="object"
|
|
string="Ready for Submission" class="btn-info"
|
|
icon="fa-check"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'application_received'"
|
|
help="Mark application as ready to submit to ADP"/>
|
|
|
|
<!-- Ready for Submission / Needs Correction -> Submit Application -->
|
|
<button name="action_submit_application" type="object"
|
|
string="Submit Application" class="btn-success"
|
|
icon="fa-paper-plane"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('ready_submission', 'needs_correction')"
|
|
help="Verify device types and submit application to ADP"/>
|
|
|
|
<!-- Submitted / Resubmitted / Accepted -> Mark as Approved -->
|
|
<button name="action_mark_approved" type="object"
|
|
string="Mark as Approved" class="btn-success"
|
|
icon="fa-check"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('submitted', 'resubmitted', 'accepted')"
|
|
help="Verify device approval from ADP and mark application as approved"/>
|
|
|
|
<!-- Delivery Stage -->
|
|
<button name="action_ready_for_delivery" type="object"
|
|
string="Ready for Delivery" class="btn-info"
|
|
icon="fa-truck"
|
|
invisible="not x_fc_is_adp_sale or (not x_fc_early_delivery and x_fc_adp_application_status not in ('approved', 'approved_deduction')) or (x_fc_early_delivery and x_fc_adp_application_status not in ('submitted', 'accepted', 'approved', 'approved_deduction'))"
|
|
help="Assign delivery technicians and mark as ready for delivery"/>
|
|
|
|
<!-- Approved / Ready for Delivery -> Ready to Bill -->
|
|
<button name="action_set_ready_to_bill" type="object"
|
|
string="Ready to Bill" class="btn-primary"
|
|
icon="fa-dollar"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('approved', 'approved_deduction', 'ready_delivery')"
|
|
help="Mark as ready to bill (requires POD, delivery date, device verification)"/>
|
|
|
|
<!-- Ready to Bill -> Mark as Billed -->
|
|
<button name="action_mark_as_billed" type="object"
|
|
string="Mark as Billed" class="btn-warning"
|
|
icon="fa-file-text"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'ready_bill'"
|
|
help="Mark as billed to ADP (requires posted invoices)"/>
|
|
|
|
<!-- Billed -> Close Case -->
|
|
<button name="action_close_case" type="object"
|
|
string="Close Case" class="btn-primary"
|
|
icon="fa-check-circle"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'billed'"
|
|
help="Verify audit trail and close the case"/>
|
|
|
|
<!-- Resume from On Hold -->
|
|
<button name="action_resume_from_hold" type="object"
|
|
string="Resume" class="btn-success"
|
|
icon="fa-play"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'on_hold'"
|
|
help="Resume this application from hold"/>
|
|
|
|
<!-- ============================================================ -->
|
|
<!-- RECOVERY BUTTONS - bring stuck orders back into the workflow -->
|
|
<!-- Added 2026-04 to wire up the exit paths drawn in the FigJam -->
|
|
<!-- ============================================================ -->
|
|
|
|
<button name="action_adp_reopen_cancelled" type="object"
|
|
string="Reopen" class="btn-info"
|
|
icon="fa-refresh"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'cancelled'"
|
|
confirm="Reopen this cancelled application at the Quotation stage?"
|
|
help="Return a cancelled application to Quotation"/>
|
|
|
|
<button name="action_adp_reopen_expired" type="object"
|
|
string="Reopen" class="btn-info"
|
|
icon="fa-refresh"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'expired'"
|
|
confirm="Reopen this expired application at the Quotation stage?"
|
|
help="Return an expired application to Quotation"/>
|
|
|
|
<button name="action_adp_resubmit_from_denied" type="object"
|
|
string="Resubmit" class="btn-primary"
|
|
icon="fa-repeat"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'denied'"
|
|
confirm="Send this denied application back to Ready for Submission for a fresh attempt?"
|
|
help="Send a denied application back to Ready for Submission"/>
|
|
|
|
<!-- ============================================================ -->
|
|
<!-- EXCEPTION BUTTONS - Put On Hold / Withdraw -->
|
|
<!-- ============================================================ -->
|
|
|
|
<button name="%(fusion_claims.action_set_status_on_hold)d"
|
|
type="action" string="Put On Hold" class="btn-warning"
|
|
icon="fa-pause"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('submitted', 'resubmitted', 'needs_correction', 'accepted', 'approved', 'approved_deduction', 'ready_delivery', 'ready_bill')"
|
|
help="Put this application on hold"/>
|
|
|
|
<button name="%(fusion_claims.action_set_status_withdrawn)d"
|
|
type="action" string="Withdraw" class="btn-secondary"
|
|
icon="fa-undo"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status not in ('submitted', 'resubmitted', 'needs_correction', 'accepted', 'approved', 'approved_deduction', 'ready_bill')"
|
|
help="Withdraw this application"/>
|
|
|
|
<button name="action_resubmit_from_withdrawn" type="object"
|
|
string="Resubmit Application" class="btn-primary"
|
|
icon="fa-repeat"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status != 'withdrawn'"
|
|
confirm="This will return the application to Ready for Submission status. Continue?"
|
|
help="Return this withdrawn application to Ready for Submission"/>
|
|
|
|
<!-- ============================================================ -->
|
|
<!-- REVIEW BUTTONS (color changes based on verified/approved) -->
|
|
<!-- ============================================================ -->
|
|
|
|
<!-- Review Submission: GREEN when verified -->
|
|
<button name="action_open_submission_verification_wizard" type="object"
|
|
string="Review Submission" class="fc-btn-status-good"
|
|
icon="fa-check-circle"
|
|
invisible="not x_fc_is_adp_sale or not x_fc_submission_verified or x_fc_adp_application_status in ('quotation', 'assessment_scheduled', 'assessment_completed', 'waiting_for_application', 'application_received', 'ready_submission', 'needs_correction', 'approved', 'approved_deduction', 'ready_delivery', 'ready_bill', 'billed', 'case_closed', 'on_hold', 'denied', 'withdrawn', 'cancelled', 'expired')"
|
|
help="Submission verified - click to review"/>
|
|
|
|
<!-- Review Submission: LIGHT RED when not yet verified -->
|
|
<button name="action_open_submission_verification_wizard" type="object"
|
|
string="Review Submission" class="fc-btn-status-bad"
|
|
icon="fa-exclamation-triangle"
|
|
invisible="not x_fc_is_adp_sale or x_fc_submission_verified or x_fc_adp_application_status in ('quotation', 'assessment_scheduled', 'assessment_completed', 'waiting_for_application', 'application_received', 'ready_submission', 'needs_correction', 'approved', 'approved_deduction', 'ready_delivery', 'ready_bill', 'billed', 'case_closed', 'on_hold', 'denied', 'withdrawn', 'cancelled', 'expired')"
|
|
help="Submission not yet verified - click to review"/>
|
|
|
|
<!-- Review Approval: GREEN when all devices approved -->
|
|
<button name="action_open_device_approval_wizard" type="object"
|
|
string="Review Approval" class="fc-btn-status-good"
|
|
icon="fa-check-circle"
|
|
invisible="not x_fc_is_adp_sale or not x_fc_device_verification_complete or x_fc_has_unapproved_devices or x_fc_adp_application_status in ('quotation', 'assessment_scheduled', 'assessment_completed', 'waiting_for_application', 'application_received', 'ready_submission', 'submitted', 'resubmitted', 'needs_correction', 'billed', 'case_closed')"
|
|
help="All devices approved - click to review"/>
|
|
|
|
<!-- Review Approval: LIGHT RED when has unapproved devices -->
|
|
<button name="action_open_device_approval_wizard" type="object"
|
|
string="Review Approval" class="fc-btn-status-bad"
|
|
icon="fa-exclamation-triangle"
|
|
invisible="not x_fc_is_adp_sale or not x_fc_device_verification_complete or not x_fc_has_unapproved_devices or x_fc_adp_application_status in ('quotation', 'assessment_scheduled', 'assessment_completed', 'waiting_for_application', 'application_received', 'ready_submission', 'submitted', 'resubmitted', 'needs_correction', 'billed', 'case_closed')"
|
|
help="Some devices not yet approved - click to review"/>
|
|
|
|
</xpath>
|
|
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: ADP Status Bar at Top -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_statusbar" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.statusbar</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">48</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Add ADP Status bar at top of form for ADP sales -->
|
|
<xpath expr="//form/sheet" position="before">
|
|
<field name="x_fc_is_adp_sale" invisible="1"/>
|
|
<field name="x_fc_adp_application_status" widget="statusbar"
|
|
invisible="not x_fc_is_adp_sale"
|
|
statusbar_visible="quotation,waiting_for_application,ready_submission,submitted,approved,ready_bill,billed,case_closed"
|
|
nolabel="1"/>
|
|
<!-- MOD Status bar -->
|
|
<field name="x_fc_is_mod_sale" invisible="1"/>
|
|
<field name="x_fc_mod_status" widget="statusbar"
|
|
invisible="not x_fc_is_mod_sale"
|
|
statusbar_visible="need_to_schedule,assessment_scheduled,assessment_completed,processing_drawings,quote_submitted,funding_approved,contract_received,in_production,project_complete,case_closed"
|
|
nolabel="1"/>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: ADP Case Details Tab -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_adp_tab" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.adp.tab</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">55</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Add ADP Case Details tab in notebook -->
|
|
<xpath expr="//notebook" position="inside">
|
|
<!-- Use computed x_fc_is_adp_sale which checks BOTH Studio and module fields -->
|
|
<field name="x_fc_is_adp_sale" invisible="1"/>
|
|
<page string="ADP Case Details" name="adp_case_details"
|
|
invisible="not x_fc_is_adp_sale">
|
|
|
|
<!-- Case Locked Warning Banner -->
|
|
<field name="x_fc_case_locked" invisible="1"/>
|
|
<div class="alert alert-danger mb-3" role="alert" invisible="not x_fc_case_locked">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fa fa-lock fa-2x me-3"/>
|
|
<div>
|
|
<strong>This Case is Locked</strong>
|
|
<p class="mb-0">All ADP fields are read-only. To make changes, unlock the case in the ADP Order Trail tab.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Hidden fields for logic -->
|
|
<field name="x_fc_adp_status" invisible="1"/>
|
|
<field name="x_fc_under_5_years" invisible="1"/>
|
|
<field name="x_fc_funding_warning_message" invisible="1"/>
|
|
<field name="x_fc_funding_warning_level" invisible="1"/>
|
|
<field name="x_fc_show_expiry_card" invisible="1"/>
|
|
<field name="x_fc_approval_expiry_days" invisible="1"/>
|
|
<field name="x_fc_approval_expired" invisible="1"/>
|
|
<field name="x_fc_billing_warning" invisible="1"/>
|
|
<field name="x_fc_assessment_expired" invisible="1"/>
|
|
|
|
<!-- Approval Expiry Card - Shows for Approved/Approved with Deduction/On Hold (with claim) -->
|
|
<div class="row mb-3" invisible="not x_fc_show_expiry_card">
|
|
<!-- Expiry Countdown Card -->
|
|
<div class="col-md-4" invisible="x_fc_approval_expired">
|
|
<div class="card bg-info text-white">
|
|
<div class="card-body text-center py-3">
|
|
<h5 class="card-title mb-1">
|
|
<i class="fa fa-clock-o"/> Approval Valid For
|
|
</h5>
|
|
<h2 class="mb-0">
|
|
<field name="x_fc_approval_expiry_days" readonly="1"/> days
|
|
</h2>
|
|
<small>Deliver within 6 months of approval</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Expired Warning Card -->
|
|
<div class="col-md-6" invisible="not x_fc_approval_expired">
|
|
<div class="alert alert-danger mb-0">
|
|
<h5><i class="fa fa-exclamation-circle"/> Approval Expired!</h5>
|
|
<p class="mb-0">
|
|
This approval has exceeded the 6-month validity period.
|
|
The application needs to be <strong>resubmitted</strong>.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Billing Warning Card (1 year) -->
|
|
<div class="col-md-6" invisible="not x_fc_billing_warning">
|
|
<div class="alert alert-warning mb-0">
|
|
<h5><i class="fa fa-phone"/> Verbal Permission Required</h5>
|
|
<p class="mb-0">
|
|
More than 1 year has passed since approval.
|
|
<strong>Contact ADP for verbal permission</strong> before billing.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Assessment Expired Warning (for on_hold resuming) -->
|
|
<div class="alert alert-warning mb-3" invisible="not x_fc_assessment_expired or x_fc_adp_application_status != 'on_hold'">
|
|
<i class="fa fa-exclamation-triangle"/> <strong>Assessment Expired</strong>
|
|
<p class="mb-0 mt-1">
|
|
The assessment is more than 3 months old. A new assessment must be completed
|
|
before resuming this application.
|
|
</p>
|
|
</div>
|
|
|
|
<!-- Core Details -->
|
|
<group>
|
|
<!-- Hidden stage computation fields -->
|
|
<field name="x_fc_stage_after_assessment_initiated" invisible="1"/>
|
|
<field name="x_fc_stage_after_assessment_completed" invisible="1"/>
|
|
<field name="x_fc_stage_after_application_received" invisible="1"/>
|
|
<field name="x_fc_stage_after_ready_submission" invisible="1"/>
|
|
<field name="x_fc_stage_after_submitted" invisible="1"/>
|
|
<field name="x_fc_stage_after_approved" invisible="1"/>
|
|
<field name="x_fc_stage_after_ready_bill" invisible="1"/>
|
|
<field name="x_fc_stage_after_billed" invisible="1"/>
|
|
<field name="x_fc_requires_previous_funding" invisible="1"/>
|
|
|
|
<group string="Core Details">
|
|
<field name="x_fc_adp_application_status" string="Status" required="x_fc_is_adp_sale"
|
|
widget="filtered_status_selection" readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_client_type" string="Client Type" required="x_fc_is_adp_sale"
|
|
readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_reason_for_application"
|
|
invisible="not x_fc_stage_after_ready_submission"
|
|
required="x_fc_stage_after_ready_submission"
|
|
readonly="x_fc_case_locked"/>
|
|
|
|
<!-- Recovery Action Buttons - visible only for stuck states -->
|
|
<div class="mt-2" colspan="2"
|
|
invisible="x_fc_case_locked or x_fc_adp_application_status not in ('cancelled', 'expired', 'denied')">
|
|
<button name="action_adp_reopen_cancelled" type="object"
|
|
string="Reopen" class="btn-info btn-sm me-1"
|
|
icon="fa-refresh"
|
|
invisible="x_fc_adp_application_status != 'cancelled'"
|
|
confirm="Reopen this cancelled application at the Quotation stage?"/>
|
|
<button name="action_adp_reopen_expired" type="object"
|
|
string="Reopen" class="btn-info btn-sm me-1"
|
|
icon="fa-refresh"
|
|
invisible="x_fc_adp_application_status != 'expired'"
|
|
confirm="Reopen this expired application at the Quotation stage?"/>
|
|
<button name="action_adp_resubmit_from_denied" type="object"
|
|
string="Resubmit" class="btn-primary btn-sm me-1"
|
|
icon="fa-repeat"
|
|
invisible="x_fc_adp_application_status != 'denied'"
|
|
confirm="Send this denied application back to Ready for Submission for a fresh attempt?"/>
|
|
</div>
|
|
|
|
<!-- Status Action Buttons (require reason popup) - Hidden when locked -->
|
|
<div class="mt-2" colspan="2"
|
|
invisible="x_fc_case_locked or x_fc_adp_application_status in ('quotation', 'cancelled', 'case_closed', 'expired')">
|
|
<button name="%(fusion_claims.action_set_status_on_hold)d"
|
|
type="action" string="Put On Hold"
|
|
class="btn-secondary btn-sm me-1"
|
|
icon="fa-pause"
|
|
invisible="x_fc_adp_application_status in ('on_hold', 'denied', 'withdrawn', 'cancelled', 'case_closed')"/>
|
|
<button name="action_resume_from_hold" type="object"
|
|
string="Resume"
|
|
class="btn-success btn-sm me-1"
|
|
icon="fa-play"
|
|
invisible="x_fc_adp_application_status != 'on_hold'"/>
|
|
<button name="action_resubmit_from_withdrawn" type="object"
|
|
string="Resubmit Application"
|
|
class="btn-primary btn-sm me-1"
|
|
icon="fa-repeat"
|
|
invisible="x_fc_adp_application_status != 'withdrawn'"
|
|
confirm="This will return the application to Ready for Submission status. Continue?"/>
|
|
<button name="%(fusion_claims.action_set_status_withdrawn)d"
|
|
type="action" string="Withdraw"
|
|
class="btn-secondary btn-sm me-1"
|
|
icon="fa-undo"
|
|
invisible="x_fc_adp_application_status in ('withdrawn', 'denied', 'cancelled', 'case_closed')"/>
|
|
<!-- NEW: Mark as Accepted by ADP -->
|
|
<button name="action_mark_accepted" type="object"
|
|
string="Mark Accepted"
|
|
class="btn-success btn-sm me-1"
|
|
icon="fa-check"
|
|
invisible="x_fc_adp_application_status not in ('submitted', 'resubmitted')"/>
|
|
<!-- NEW: Mark as Rejected by ADP -->
|
|
<button name="%(fusion_claims.action_set_status_rejected)d"
|
|
type="action" string="Mark Rejected"
|
|
class="btn-danger btn-sm me-1"
|
|
icon="fa-times"
|
|
invisible="x_fc_adp_application_status not in ('submitted', 'resubmitted')"/>
|
|
<button name="%(fusion_claims.action_set_status_denied)d"
|
|
type="action" string="Denied"
|
|
class="btn-secondary btn-sm me-1"
|
|
icon="fa-times-circle"
|
|
invisible="x_fc_adp_application_status not in ('accepted',)"/>
|
|
<button name="%(fusion_claims.action_set_status_needs_correction)d"
|
|
type="action" string="Needs Correction"
|
|
class="btn-warning btn-sm me-1"
|
|
icon="fa-exclamation-triangle"
|
|
invisible="x_fc_adp_application_status not in ('submitted', 'resubmitted', 'rejected')"/>
|
|
<button name="%(fusion_claims.action_set_status_cancelled)d"
|
|
type="action" string="Cancel"
|
|
class="btn-danger btn-sm"
|
|
icon="fa-ban"
|
|
invisible="x_fc_adp_application_status in ('quotation', 'cancelled', 'case_closed', 'expired')"/>
|
|
</div>
|
|
</group>
|
|
<group string="Service Period">
|
|
<field name="x_fc_has_service" string="Is this a Service?" readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_service_start_date"
|
|
invisible="not x_fc_has_service"
|
|
required="x_fc_has_service"
|
|
readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_service_end_date"
|
|
invisible="not x_fc_has_service"
|
|
required="x_fc_has_service"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Assessment Dates - Show from Assessment Initiated onwards -->
|
|
<group string="Assessment Dates" invisible="not x_fc_stage_after_assessment_initiated">
|
|
<group>
|
|
<field name="x_fc_assessment_start_date"
|
|
required="x_fc_stage_after_assessment_initiated"
|
|
readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_assessment_end_date"
|
|
invisible="not x_fc_stage_after_assessment_completed"
|
|
required="x_fc_stage_after_assessment_completed"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Application Details - Show after Ready for Submission stage -->
|
|
<group string="Application Details" invisible="not x_fc_stage_after_ready_submission">
|
|
<group>
|
|
<field name="x_fc_client_ref_1" placeholder="e.g., JODO"
|
|
required="x_fc_stage_after_ready_submission"
|
|
readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_client_ref_2" placeholder="e.g., 1234"
|
|
required="x_fc_stage_after_ready_submission"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_claim_authorization_date"
|
|
required="x_fc_stage_after_ready_submission"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Previous Funding History - Show when reason requires it -->
|
|
<group string="Previous Funding History" invisible="not x_fc_requires_previous_funding">
|
|
<group>
|
|
<field name="x_fc_previous_funding_date" required="x_fc_requires_previous_funding"
|
|
readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_years_since_funding" readonly="1"/>
|
|
</group>
|
|
<group>
|
|
<!-- Red alert for within 1 year -->
|
|
<div class="alert alert-danger" role="alert"
|
|
invisible="x_fc_funding_warning_level != 'danger'">
|
|
<i class="fa fa-exclamation-circle"/> <strong>Warning:</strong>
|
|
<field name="x_fc_funding_warning_message" nolabel="1" readonly="1"/>
|
|
<br/>
|
|
<small>Funding within 1 year - high likelihood of deductions or denial.</small>
|
|
</div>
|
|
<!-- Yellow alert for within 5 years -->
|
|
<div class="alert alert-warning" role="alert"
|
|
invisible="x_fc_funding_warning_level != 'warning'">
|
|
<i class="fa fa-exclamation-triangle"/>
|
|
<field name="x_fc_funding_warning_message" nolabel="1" readonly="1"/>
|
|
<br/>
|
|
<small>Less than 5 years since previous funding - ADP may apply deductions.</small>
|
|
</div>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Submission Details - Show after Submitted stage -->
|
|
<group string="Submission Details" invisible="not x_fc_stage_after_submitted">
|
|
<group>
|
|
<field name="x_fc_claim_submission_date"
|
|
required="x_fc_adp_application_status in ('submitted', 'resubmitted')"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Approval Details - Show after Approved stage -->
|
|
<group string="Approval Details" invisible="not x_fc_stage_after_approved">
|
|
<group>
|
|
<field name="x_fc_claim_number" placeholder="10 digits only"
|
|
required="x_fc_stage_after_approved"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_claim_approval_date"
|
|
required="x_fc_stage_after_approved"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Delivery Details - Show after application submitted -->
|
|
<group string="Delivery Details" invisible="x_fc_adp_application_status in ('quotation', 'assessment_scheduled', 'assessment_completed', 'waiting_for_application', 'application_received', 'ready_submission')">
|
|
<group>
|
|
<field name="x_fc_early_delivery" widget="boolean_toggle"
|
|
invisible="x_fc_adp_application_status in ('approved', 'approved_deduction', 'ready_delivery', 'ready_bill', 'billed', 'case_closed')"
|
|
readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_scheduled_delivery_datetime"
|
|
invisible="x_fc_adp_application_status not in ('ready_delivery', 'ready_bill', 'billed', 'case_closed')"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_delivery_technician_ids" widget="many2many_tags"
|
|
options="{'color_field': 'color'}"
|
|
invisible="x_fc_adp_application_status not in ('ready_delivery', 'ready_bill', 'billed', 'case_closed')"
|
|
readonly="x_fc_case_locked"/>
|
|
<field name="x_fc_ready_for_delivery_date"
|
|
invisible="x_fc_adp_application_status not in ('ready_delivery', 'ready_bill', 'billed', 'case_closed')"
|
|
readonly="1"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Billing Details - Show after Ready to Bill stage -->
|
|
<group string="Billing Details" invisible="not x_fc_stage_after_ready_bill">
|
|
<group>
|
|
<field name="x_fc_adp_delivery_date"
|
|
required="x_fc_stage_after_ready_bill"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_billing_date"
|
|
invisible="not x_fc_stage_after_billed"
|
|
required="x_fc_stage_after_billed"
|
|
readonly="x_fc_case_locked"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- ========================================= -->
|
|
<!-- INVOICE MAPPING SECTION -->
|
|
<!-- ========================================= -->
|
|
<group string="Invoice Mapping" name="invoice_mapping">
|
|
<group>
|
|
<field name="x_fc_adp_invoice_id"
|
|
readonly="x_fc_case_locked"
|
|
options="{'no_create': True}"/>
|
|
</group>
|
|
<group>
|
|
<field name="x_fc_client_invoice_id"
|
|
readonly="x_fc_case_locked"
|
|
options="{'no_create': True}"/>
|
|
</group>
|
|
</group>
|
|
|
|
</page>
|
|
|
|
<!-- ADP Documents Tab -->
|
|
<page string="ADP Documents" name="adp_documents"
|
|
invisible="not x_fc_is_adp_sale or x_fc_adp_application_status in ('quotation', 'assessment_scheduled', 'assessment_completed', 'waiting_for_application')">
|
|
|
|
<!-- Case Locked Warning Banner -->
|
|
<div class="alert alert-danger mb-3" role="alert" invisible="not x_fc_case_locked">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fa fa-lock fa-2x me-3"/>
|
|
<div>
|
|
<strong>This Case is Locked</strong>
|
|
<p class="mb-0">Documents cannot be modified. To make changes, unlock the case in the ADP Order Trail tab.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Dynamic info alerts based on current stage -->
|
|
<div class="alert alert-info" role="alert"
|
|
invisible="x_fc_adp_application_status != 'application_received'">
|
|
<i class="fa fa-upload"/> <strong>Action Required:</strong>
|
|
Upload the Original ADP Application and signed Pages 11 & 12 to proceed.
|
|
</div>
|
|
|
|
|
|
<div class="alert alert-info" role="alert"
|
|
invisible="x_fc_adp_application_status not in ('approved', 'approved_deduction')">
|
|
<i class="fa fa-upload"/> <strong>Action Required:</strong>
|
|
Upload Proof of Delivery before moving to "Ready to Bill" status.
|
|
</div>
|
|
|
|
<!-- ========================================================= -->
|
|
<!-- Next Step Banner - Shows what action to take -->
|
|
<!-- ========================================================= -->
|
|
<!-- Ready for Submission: Show Submit Application prompt -->
|
|
<div class="alert alert-info mb-3" role="alert"
|
|
invisible="x_fc_adp_application_status != 'ready_submission'">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fa fa-paper-plane fa-2x me-3"/>
|
|
<div class="flex-grow-1">
|
|
<strong>Ready to Submit</strong>
|
|
<p class="mb-0">
|
|
Documents are ready. Use the <strong>"Submit Application"</strong> button in the header
|
|
to verify device types and submit to ADP.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Submitted: Waiting for approval -->
|
|
<div class="alert alert-info mb-3" role="alert"
|
|
invisible="x_fc_adp_application_status not in ('submitted', 'resubmitted')">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fa fa-clock-o fa-2x me-3"/>
|
|
<div class="flex-grow-1">
|
|
<strong>Awaiting ADP Response</strong>
|
|
<p class="mb-0">
|
|
Application submitted. When the approval letter arrives, use the
|
|
<strong>"Mark as Approved"</strong> button in the header.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Approved: Show Ready to Bill prompt -->
|
|
<div class="alert alert-success mb-3" role="alert"
|
|
invisible="x_fc_adp_application_status not in ('approved', 'approved_deduction')">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fa fa-check-circle fa-2x me-3"/>
|
|
<div class="flex-grow-1">
|
|
<strong>Application Approved</strong>
|
|
<p class="mb-0">
|
|
Upload Proof of Delivery and set delivery date, then use the
|
|
<strong>"Ready to Bill"</strong> button in the header.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ========================================================= -->
|
|
<!-- Documents Grid - 3 Column Layout -->
|
|
<!-- ========================================================= -->
|
|
<div class="row">
|
|
<!-- Column 1: Application Documents -->
|
|
<div class="col-md-4">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-file-text-o"/> Application Documents
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<!-- Original ADP Application Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_original_application" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_original_application"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_original_application"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Original ADP Application</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_original_application">
|
|
<field name="x_fc_original_application_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_original_application">No file uploaded</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_original_application" filename="x_fc_original_application_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"
|
|
required="x_fc_is_adp_sale and x_fc_adp_application_status not in ('quotation', 'assessment_scheduled', 'assessment_completed', 'waiting_for_application', 'application_received')"
|
|
readonly="x_fc_case_locked"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Signed Pages 11 & 12 Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_signed_pages" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_signed_pages_11_12"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_signed_pages_11_12"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Signed Pages 11 & 12</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_signed_pages_11_12">
|
|
<field name="x_fc_signed_pages_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_signed_pages_11_12">No file uploaded</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_signed_pages_11_12" filename="x_fc_signed_pages_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"
|
|
required="x_fc_is_adp_sale and x_fc_adp_application_status not in ('quotation', 'assessment_scheduled', 'assessment_completed', 'waiting_for_application', 'application_received')"
|
|
readonly="x_fc_case_locked"/>
|
|
<button name="action_request_page11_signature" type="object"
|
|
class="btn btn-sm btn-outline-primary mt-1"
|
|
string="Request Signature"
|
|
title="Send Page 11 to a family member or agent for remote signing"
|
|
invisible="x_fc_signed_pages_11_12 or not x_fc_is_adp_sale"/>
|
|
</div>
|
|
</div>
|
|
<field name="page11_sign_status" invisible="1"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 2: Submission Documents -->
|
|
<div class="col-md-4"
|
|
invisible="x_fc_adp_application_status == 'application_received'">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-paper-plane-o"/> Submission Documents
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<!-- Final Submitted Application Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_final_application" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_final_submitted_application"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_final_submitted_application"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Final Application</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_final_submitted_application">
|
|
<field name="x_fc_final_application_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_final_submitted_application">No file uploaded</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_final_submitted_application" filename="x_fc_final_application_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"
|
|
readonly="x_fc_case_locked"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- XML File Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_xml_file" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_xml_file"
|
|
title="Click to download">
|
|
<i class="fa fa-file-code-o fc-xml-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_xml_file"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">XML File</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_xml_file">
|
|
<field name="x_fc_xml_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_xml_file">No file uploaded</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_xml_file" filename="x_fc_xml_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"
|
|
readonly="x_fc_case_locked"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Column 3: Approval Documents -->
|
|
<div class="col-md-4"
|
|
invisible="x_fc_adp_application_status not in ('approved', 'approved_deduction', 'ready_bill', 'billed', 'payment_received', 'case_closed')">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-check-circle"/> Approval Documents
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<!-- Approval Letter Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_approval_letter" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_approval_letter"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_approval_letter"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">ADP Approval Letter</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_approval_letter">
|
|
<field name="x_fc_approval_letter_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_approval_letter">No file uploaded</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_approval_letter" filename="x_fc_approval_letter_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"
|
|
readonly="x_fc_case_locked"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Approval Screenshots Gallery -->
|
|
<field name="x_fc_approval_photo_count" invisible="1"/>
|
|
<div class="fc-gallery-section">
|
|
<div class="fc-gallery-header d-flex justify-content-between align-items-center mb-2">
|
|
<span class="fc-tile-label">Approval Screenshots</span>
|
|
<div class="d-flex align-items-center gap-2">
|
|
<button name="action_view_approval_photos" type="object"
|
|
class="btn btn-sm btn-outline-success"
|
|
invisible="x_fc_approval_photo_count == 0"
|
|
title="View in Gallery">
|
|
<i class="fa fa-eye me-1"/> View
|
|
</button>
|
|
<span class="badge bg-secondary" invisible="x_fc_approval_photo_count == 0">
|
|
<field name="x_fc_approval_photo_count" nolabel="1"/> files
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="fc-gallery-content">
|
|
<field name="x_fc_approval_photo_ids"
|
|
widget="many2many_binary"
|
|
string="Add Screenshots"
|
|
nolabel="1"
|
|
readonly="x_fc_case_locked"
|
|
class="fc-gallery-upload"/>
|
|
</div>
|
|
<div class="fc-gallery-empty text-muted text-center py-3"
|
|
invisible="x_fc_approval_photo_count > 0">
|
|
<i class="fa fa-image fa-2x mb-2 d-block opacity-50"/>
|
|
<small>No screenshots uploaded</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ========================================================= -->
|
|
<!-- Row 2: Delivery Documents (separate row for clarity) -->
|
|
<!-- ========================================================= -->
|
|
<div class="row mt-3"
|
|
invisible="x_fc_adp_application_status not in ('approved', 'approved_deduction', 'ready_bill', 'billed', 'payment_received', 'case_closed')">
|
|
<!-- Column: Delivery Documents -->
|
|
<div class="col-md-4">
|
|
<div class="fc-doc-section h-100">
|
|
<div class="fc-doc-section-header">
|
|
<i class="fa fa-truck"/> Delivery Documents
|
|
</div>
|
|
<div class="fc-document-tiles">
|
|
<!-- Proof of Delivery Tile -->
|
|
<div class="fc-document-tile">
|
|
<div class="fc-tile-preview">
|
|
<button name="action_open_proof_of_delivery" type="object"
|
|
class="btn btn-link p-0 w-100 h-100 d-flex align-items-center justify-content-center border-0"
|
|
invisible="not x_fc_proof_of_delivery"
|
|
title="Click to preview">
|
|
<i class="fa fa-file-pdf-o fc-pdf-icon"/>
|
|
</button>
|
|
<i class="fa fa-plus-circle fc-empty-icon" invisible="x_fc_proof_of_delivery"/>
|
|
</div>
|
|
<div class="fc-tile-info">
|
|
<div class="fc-tile-label">Proof of Delivery</div>
|
|
<div class="fc-tile-filename" invisible="not x_fc_proof_of_delivery">
|
|
<field name="x_fc_proof_of_delivery_filename" nolabel="1" class="text-truncate"/>
|
|
</div>
|
|
<div class="fc-tile-empty-text" invisible="x_fc_proof_of_delivery">No file uploaded</div>
|
|
</div>
|
|
<div class="fc-tile-actions">
|
|
<field name="x_fc_proof_of_delivery" filename="x_fc_proof_of_delivery_filename"
|
|
widget="binary" nolabel="1" class="fc-tile-upload-field"
|
|
required="x_fc_is_adp_sale and x_fc_adp_application_status in ('ready_bill', 'billed', 'payment_received', 'case_closed')"
|
|
readonly="x_fc_case_locked"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</page>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: ADP Summary Tab -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">60</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Add ADP Summary tab in notebook -->
|
|
<xpath expr="//notebook" position="inside">
|
|
<!-- Use computed x_fc_is_adp_sale which checks BOTH Studio and module fields -->
|
|
<page string="ADP Summary" name="adp_summary"
|
|
invisible="not x_fc_is_adp_sale">
|
|
|
|
<!-- DEVICE APPROVAL STATUS - AT TOP for easy visibility -->
|
|
<field name="x_fc_has_unapproved_devices" invisible="1"/>
|
|
<field name="x_fc_device_verification_complete" invisible="1"/>
|
|
<field name="x_fc_approved_device_count" invisible="1"/>
|
|
<field name="x_fc_total_device_count" invisible="1"/>
|
|
|
|
<!-- Show when verification NOT yet complete -->
|
|
<div class="alert alert-info mb-3" role="alert" invisible="x_fc_device_verification_complete or x_fc_total_device_count == 0">
|
|
<strong><i class="fa fa-info-circle"/> Device Verification Required</strong>
|
|
<p class="mb-2">
|
|
Click the button below to verify which devices were approved by ADP.
|
|
<br/><strong>This must be completed before creating invoices.</strong>
|
|
</p>
|
|
<button name="action_open_device_approval_wizard" type="object"
|
|
string="Verify Device Approval" class="btn-info"
|
|
icon="fa-check-square-o"/>
|
|
</div>
|
|
|
|
<!-- Show when verification complete but some items NOT approved -->
|
|
<div class="alert alert-warning mb-3" role="alert" invisible="not x_fc_device_verification_complete or not x_fc_has_unapproved_devices">
|
|
<strong><i class="fa fa-exclamation-triangle"/> Some Devices NOT Approved by ADP</strong>
|
|
<p class="mb-2">
|
|
<field name="x_fc_approved_device_count" readonly="1" class="oe_inline"/> of
|
|
<field name="x_fc_total_device_count" readonly="1" class="oe_inline"/> devices approved.
|
|
<br/>Unapproved devices will be billed to the client at 100% and excluded from the ADP invoice.
|
|
</p>
|
|
<button name="action_open_device_approval_wizard" type="object"
|
|
string="Review Approvals" class="btn-warning"
|
|
icon="fa-check-square-o"/>
|
|
</div>
|
|
|
|
<!-- Show success when all verified and approved -->
|
|
<div class="alert alert-success mb-3" role="alert" invisible="not x_fc_device_verification_complete or x_fc_has_unapproved_devices or x_fc_total_device_count == 0">
|
|
<strong><i class="fa fa-check-circle"/> All Devices Approved</strong>
|
|
<p class="mb-0">
|
|
All <field name="x_fc_total_device_count" readonly="1" class="oe_inline"/> devices have been verified as approved by ADP.
|
|
</p>
|
|
</div>
|
|
|
|
<!-- SPLIT INVOICING -->
|
|
<div class="alert alert-success mb-3" role="alert">
|
|
<strong>Split Invoicing:</strong>
|
|
<p class="mb-2">Create separate invoices for client and ADP portions.</p>
|
|
|
|
<!-- Hidden fields for invoice status tracking -->
|
|
<field name="x_fc_has_client_invoice" invisible="1"/>
|
|
<field name="x_fc_has_adp_invoice" invisible="1"/>
|
|
<field name="x_fc_client_type" invisible="1"/>
|
|
|
|
<!-- Invoice status indicators -->
|
|
<div class="mb-2">
|
|
<span class="badge bg-success me-2" invisible="not x_fc_has_client_invoice">
|
|
✓ Client Invoice Created
|
|
</span>
|
|
<span class="badge bg-secondary me-2" invisible="x_fc_has_client_invoice or x_fc_client_type != 'REG'">
|
|
○ Client Invoice Pending
|
|
</span>
|
|
<span class="badge bg-success me-2" invisible="not x_fc_has_adp_invoice">
|
|
✓ ADP Invoice Created
|
|
</span>
|
|
<span class="badge bg-secondary" invisible="x_fc_has_adp_invoice">
|
|
○ ADP Invoice Pending
|
|
</span>
|
|
</div>
|
|
|
|
<div>
|
|
<!-- REG Client: Show 25% button if not created -->
|
|
<button name="action_create_client_invoice" type="object"
|
|
string="Create Client Invoice (25%)" class="btn-primary me-2"
|
|
invisible="x_fc_client_type != 'REG' or x_fc_has_client_invoice"
|
|
confirm="Create a 25% client invoice for this order?"/>
|
|
|
|
<!-- REG Client: Show 75% button if not created -->
|
|
<button name="action_create_adp_invoice" type="object"
|
|
string="Create ADP Invoice (75%)" class="btn-warning me-2"
|
|
invisible="x_fc_client_type != 'REG' or x_fc_has_adp_invoice"
|
|
confirm="Create a 75% ADP invoice for this order?"/>
|
|
|
|
<!-- Non-REG Client: Show 100% button if not created -->
|
|
<button name="action_create_adp_invoice" type="object"
|
|
string="Create ADP Invoice (100%)" class="btn-warning"
|
|
invisible="x_fc_client_type == 'REG' or x_fc_has_adp_invoice"
|
|
confirm="Create a 100% ADP invoice for this order?"/>
|
|
|
|
<!-- All done message -->
|
|
<span class="text-success fw-bold"
|
|
invisible="not x_fc_has_adp_invoice or (x_fc_client_type == 'REG' and not x_fc_has_client_invoice)">
|
|
✓ All invoices created!
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- DEDUCTION ALERT - Only show when there are deductions -->
|
|
<field name="x_fc_has_deductions" invisible="1"/>
|
|
<field name="x_fc_total_deduction_amount" invisible="1"/>
|
|
|
|
<div class="alert alert-warning mb-3" role="alert" invisible="not x_fc_has_deductions">
|
|
<strong><i class="fa fa-minus-circle"/> Deductions Applied</strong>
|
|
<p class="mb-0">
|
|
ADP deductions have been applied to this order.
|
|
Total deduction impact: <strong><field name="x_fc_total_deduction_amount" widget="monetary" class="oe_inline"/></strong>
|
|
- This amount will be the client's responsibility.
|
|
</p>
|
|
</div>
|
|
|
|
<group>
|
|
<group string="ADP Portion Breakdown">
|
|
<field name="x_fc_adp_portion_total" string="Total ADP Portion" widget="monetary"/>
|
|
<field name="x_fc_client_portion_total" string="Total Client Portion" widget="monetary"/>
|
|
</group>
|
|
<group string="Order Information">
|
|
<!-- Hidden - using Studio fields instead -->
|
|
<field name="x_fc_sale_type" invisible="1"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Product lines list - with conditional deduction columns -->
|
|
<field name="x_fc_product_lines" mode="list" readonly="1" nolabel="1" class="w-100"
|
|
context="{'show_deductions': x_fc_has_deductions}">
|
|
<list string="Line Details" create="0" delete="0" limit="50"
|
|
decoration-success="x_fc_adp_approved"
|
|
decoration-danger="not x_fc_adp_approved and x_fc_adp_device_type"
|
|
decoration-warning="x_fc_deduction_type and x_fc_deduction_type != 'none'">
|
|
<field name="x_fc_adp_approved" string="✓" widget="boolean" width="40px"
|
|
help="Device approved by ADP"/>
|
|
<field name="name" string="Description" class="text-wrap"/>
|
|
<field name="x_fc_adp_device_type" string="Device Type" optional="show" width="150px"/>
|
|
<field name="x_fc_adp_build_type" string="Build" optional="show" width="100px"/>
|
|
<field name="x_fc_serial_number" string="S/N" optional="show" width="90px"/>
|
|
<field name="product_uom_qty" string="Qty" width="60px"/>
|
|
<field name="price_unit" string="Unit $" width="100px"/>
|
|
<field name="x_fc_deduction_type" string="Ded." width="70px"
|
|
column_invisible="not parent.x_fc_has_deductions"/>
|
|
<field name="x_fc_deduction_value" string="Ded.$" width="80px"
|
|
column_invisible="not parent.x_fc_has_deductions"/>
|
|
<field name="x_fc_adp_portion" string="ADP $" width="100px"/>
|
|
<field name="x_fc_client_portion" string="Client $" width="100px"/>
|
|
<field name="price_subtotal" string="Total" width="100px"/>
|
|
<field name="x_fc_device_placement" string="Plcmt" optional="hide" width="70px"/>
|
|
</list>
|
|
</field>
|
|
<div class="alert alert-info" role="alert">
|
|
<strong>Calculation Rules:</strong>
|
|
<ul>
|
|
<li><strong>REG Client:</strong> ADP Portion = 75%, Client Portion = 25%</li>
|
|
<li><strong>ODS/OWP/ACS/LTC/SEN/CCA:</strong> ADP Portion = 100%, Client Portion = 0%</li>
|
|
<li><strong>PCT Deduction:</strong> ADP pays X% of their normal portion</li>
|
|
<li><strong>AMT Deduction:</strong> Fixed $ amount deducted from ADP portion</li>
|
|
</ul>
|
|
<div class="mt-3">
|
|
<button name="action_recalculate_adp_portions" type="object"
|
|
string="Recalculate Portions" class="btn-secondary me-2"
|
|
help="Manually recalculate ADP and Client portions"/>
|
|
</div>
|
|
</div>
|
|
</page>
|
|
|
|
<!-- ============================================================= -->
|
|
<!-- ADP ORDER TRAIL TAB - Audit Trail & Case Lock -->
|
|
<!-- ============================================================= -->
|
|
<page string="ADP Order Trail" name="adp_order_trail"
|
|
invisible="not x_fc_is_adp_sale">
|
|
|
|
<!-- Hidden fields for trail computation -->
|
|
<field name="x_fc_trail_has_assessment_dates" invisible="1"/>
|
|
<field name="x_fc_trail_has_authorization" invisible="1"/>
|
|
<field name="x_fc_trail_has_original_app" invisible="1"/>
|
|
<field name="x_fc_trail_has_signed_pages" invisible="1"/>
|
|
<field name="x_fc_trail_has_final_app" invisible="1"/>
|
|
<field name="x_fc_trail_has_xml" invisible="1"/>
|
|
<field name="x_fc_trail_has_approval_letter" invisible="1"/>
|
|
<field name="x_fc_trail_has_pod" invisible="1"/>
|
|
<field name="x_fc_trail_has_vendor_bills" invisible="1"/>
|
|
<field name="x_fc_trail_invoices_posted" invisible="1"/>
|
|
|
|
<!-- Case Lock Control -->
|
|
<div class="row mb-4">
|
|
<div class="col-12">
|
|
<div class="alert alert-danger d-flex align-items-center justify-content-between mb-0">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fa fa-lock fa-2x me-3"/>
|
|
<div>
|
|
<strong>Case Lock</strong>
|
|
<p class="mb-0 small">When locked, all ADP fields become read-only</p>
|
|
</div>
|
|
</div>
|
|
<field name="x_fc_case_locked" widget="boolean_toggle"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Order Trail Checklist -->
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h5 class="mb-0"><i class="fa fa-list-alt"/> Workflow Checklist</h5>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
<table class="table table-striped mb-0">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width: 40px; text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_assessment_dates"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_assessment_dates"/>
|
|
</td>
|
|
<td>Assessment Dates Set</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_authorization"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_authorization"/>
|
|
</td>
|
|
<td>Authorization Date Set</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_original_app"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_original_app"/>
|
|
</td>
|
|
<td>Original Application Uploaded</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_signed_pages"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_signed_pages"/>
|
|
</td>
|
|
<td>Signed Pages 11 & 12 Uploaded</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_submission_verified"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_submission_verified"/>
|
|
</td>
|
|
<td>Submission Verified</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h5 class="mb-0"><i class="fa fa-file-text-o"/> Documents Checklist</h5>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
<table class="table table-striped mb-0">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width: 40px; text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_final_app"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_final_app"/>
|
|
</td>
|
|
<td>Final Application Uploaded</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_xml"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_xml"/>
|
|
</td>
|
|
<td>XML File Uploaded</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_approval_letter"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_approval_letter"/>
|
|
</td>
|
|
<td>Approval Letter Uploaded</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_pod"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_pod"/>
|
|
</td>
|
|
<td>Proof of Delivery Uploaded</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_device_verification_complete"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_device_verification_complete"/>
|
|
</td>
|
|
<td>Device Verification Complete</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Billing & Audit Trail -->
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h5 class="mb-0"><i class="fa fa-dollar"/> Billing Status</h5>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
<table class="table table-striped mb-0">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width: 40px; text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_invoices_posted"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_invoices_posted"/>
|
|
</td>
|
|
<td>Invoices Created & Posted</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
<i class="fa fa-check-circle text-success" invisible="not x_fc_trail_has_vendor_bills"/>
|
|
<i class="fa fa-circle-o text-muted" invisible="x_fc_trail_has_vendor_bills"/>
|
|
</td>
|
|
<td>Vendor Bills Linked</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h5 class="mb-0"><i class="fa fa-truck"/> Vendor Bills (Audit Trail)</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<field name="x_fc_vendor_bill_ids"
|
|
widget="many2many_tags"
|
|
options="{'no_create': True, 'no_quick_create': True}"
|
|
domain="[('move_type', '=', 'in_invoice'), ('state', '=', 'posted')]"
|
|
placeholder="Search and link vendor bills..."
|
|
readonly="x_fc_case_locked"/>
|
|
<div class="text-muted small mt-2">
|
|
<i class="fa fa-info-circle"/> Link vendor invoices/bills to this order for audit purposes.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</page>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER LINE: Add ADP Portion and Client Portion columns -->
|
|
<!-- These columns are only visible when x_fc_is_adp_sale is True -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_order_lines" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.order.lines</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">75</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Hide Description column so Product is the only flex column -->
|
|
<xpath expr="//field[@name='order_line']/list/field[@name='name']" position="attributes">
|
|
<attribute name="optional">hide</attribute>
|
|
</xpath>
|
|
|
|
<!-- Serial Number and Build Type: after description -->
|
|
<xpath expr="//field[@name='order_line']/list/field[@name='name']" position="after">
|
|
<field name="x_fc_serial_number" string="S/N" optional="show"/>
|
|
<field name="x_fc_adp_build_type" string="Build" optional="hide"
|
|
column_invisible="not parent.x_fc_is_adp_sale"/>
|
|
</xpath>
|
|
|
|
<!-- Shorten Qty label -->
|
|
<xpath expr="//field[@name='order_line']/list/field[@name='product_uom_qty']" position="attributes">
|
|
<attribute name="string">Qty</attribute>
|
|
</xpath>
|
|
|
|
<!-- ADP/Client Portion: only visible for ADP and ADP/ODSP -->
|
|
<xpath expr="//field[@name='order_line']/list/field[@name='price_subtotal'][1]" position="after">
|
|
<field name="x_fc_adp_portion" string="ADP $" widget="monetary"
|
|
column_invisible="not parent.x_fc_is_adp_sale"/>
|
|
<field name="x_fc_client_portion" string="Client $" widget="monetary"
|
|
column_invisible="not parent.x_fc_is_adp_sale"/>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER FORM: ADP Totals in Summary Footer -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_order_form_fusion_claims_totals" model="ir.ui.view">
|
|
<field name="name">sale.order.form.fusion.central.totals</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
|
<field name="priority">70</field>
|
|
<field name="arch" type="xml">
|
|
<!-- Add ADP totals after the tax_totals field (the totals widget) -->
|
|
<xpath expr="//field[@name='tax_totals']" position="after">
|
|
<field name="x_fc_is_adp_sale" invisible="1"/>
|
|
<div id="fc_adp_totals" invisible="not x_fc_is_adp_sale" class="oe_right mt-2">
|
|
<div class="d-flex justify-content-end">
|
|
<span class="me-2 text-muted">Total ADP Portion:</span>
|
|
<field name="x_fc_adp_portion_total" widget="monetary"/>
|
|
</div>
|
|
<div class="d-flex justify-content-end">
|
|
<span class="me-2 text-muted">Total Client Portion:</span>
|
|
<field name="x_fc_client_portion_total" widget="monetary"/>
|
|
</div>
|
|
</div>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- ===================================================================== -->
|
|
<!-- SALE ORDER SEARCH: Filters -->
|
|
<!-- ===================================================================== -->
|
|
<record id="view_sales_order_filter_fusion_claims" model="ir.ui.view">
|
|
<field name="name">sale.order.search.fusion.central</field>
|
|
<field name="model">sale.order</field>
|
|
<field name="inherit_id" ref="sale.view_sales_order_filter"/>
|
|
<field name="arch" type="xml">
|
|
<xpath expr="//search" position="inside">
|
|
<separator/>
|
|
<!-- ADP Status Filters (using x_fc_adp_application_status) -->
|
|
<filter string="ADP Sales" name="adp_sales"
|
|
domain="[('x_fc_is_adp_sale', '=', True)]"/>
|
|
<filter string="Quotation Stage" name="quotation_stage"
|
|
domain="[('x_fc_adp_application_status', '=', 'quotation')]"/>
|
|
<filter string="Assessment Scheduled" name="assessment_scheduled"
|
|
domain="[('x_fc_adp_application_status', '=', 'assessment_scheduled')]"/>
|
|
<filter string="Assessment Completed" name="assessment_completed"
|
|
domain="[('x_fc_adp_application_status', '=', 'assessment_completed')]"/>
|
|
<filter string="Waiting for Application" name="waiting_for_application"
|
|
domain="[('x_fc_adp_application_status', '=', 'waiting_for_application')]"/>
|
|
<filter string="Application Received" name="application_received"
|
|
domain="[('x_fc_adp_application_status', '=', 'application_received')]"/>
|
|
<filter string="Ready for Submission" name="ready_submission"
|
|
domain="[('x_fc_adp_application_status', '=', 'ready_submission')]"/>
|
|
<filter string="Application Submitted" name="submitted"
|
|
domain="[('x_fc_adp_application_status', 'in', ['submitted', 'resubmitted'])]"/>
|
|
<filter string="Needs Correction" name="needs_correction"
|
|
domain="[('x_fc_adp_application_status', '=', 'needs_correction')]"/>
|
|
<filter string="Application Approved" name="approved"
|
|
domain="[('x_fc_adp_application_status', 'in', ['approved', 'approved_deduction'])]"/>
|
|
<filter string="Ready for Delivery" name="ready_delivery"
|
|
domain="[('x_fc_adp_application_status', '=', 'ready_delivery')]"/>
|
|
<filter string="Ready for Billing" name="ready_billing"
|
|
domain="[('x_fc_adp_application_status', '=', 'ready_bill')]"/>
|
|
<filter string="Billed to ADP" name="billed"
|
|
domain="[('x_fc_adp_application_status', '=', 'billed')]"/>
|
|
<filter string="Case Closed" name="closed"
|
|
domain="[('x_fc_adp_application_status', '=', 'case_closed')]"/>
|
|
<separator/>
|
|
<!-- Special Status Filters -->
|
|
<filter string="On Hold" name="on_hold"
|
|
domain="[('x_fc_adp_application_status', '=', 'on_hold')]"/>
|
|
<filter string="Withdrawn" name="withdrawn"
|
|
domain="[('x_fc_adp_application_status', '=', 'withdrawn')]"/>
|
|
<filter string="Denied" name="denied"
|
|
domain="[('x_fc_adp_application_status', '=', 'denied')]"/>
|
|
<filter string="Cancelled" name="cancelled"
|
|
domain="[('x_fc_adp_application_status', '=', 'cancelled')]"/>
|
|
<filter string="Expired" name="expired"
|
|
domain="[('x_fc_adp_application_status', '=', 'expired')]"/>
|
|
<separator/>
|
|
<!-- Technician Filters -->
|
|
<filter string="My Deliveries" name="my_deliveries"
|
|
domain="[('x_fc_delivery_technician_ids', 'in', uid)]"
|
|
help="Orders assigned to me for delivery"/>
|
|
<filter string="Early Delivery" name="early_delivery"
|
|
domain="[('x_fc_early_delivery', '=', True)]"/>
|
|
<separator/>
|
|
<!-- Client Type Filters (using x_fc_client_type - module field) -->
|
|
<filter string="REG Clients" name="reg_clients"
|
|
domain="[('x_fc_client_type', '=', 'REG')]"/>
|
|
<filter string="ODS/OWP/ACS" name="full_funding"
|
|
domain="[('x_fc_client_type', 'in', ['ODS', 'OWP', 'ACS'])]"/>
|
|
<separator/>
|
|
<!-- Group By -->
|
|
<filter string="ADP Application Status" name="group_adp_status"
|
|
context="{'group_by': 'x_fc_adp_application_status'}"/>
|
|
<filter string="Client Type" name="group_client_type"
|
|
context="{'group_by': 'x_fc_client_type'}"/>
|
|
<filter string="Authorizer" name="group_authorizer"
|
|
context="{'group_by': 'x_fc_authorizer_id'}"/>
|
|
</xpath>
|
|
</field>
|
|
</record>
|
|
|
|
</odoo>
|