Files
Odoo-Modules/fusion_claims/__manifest__.py
gsinghpal 80d06ff77f feat(fusion_claims): service-booking wizard live client search + address autocomplete
The wizard's dynamic fields were non-functional: the "Existing customer" box had
no search (no endpoint, no handler — the typed string was only sent on submit),
and address autocomplete never attached (google_address_autocomplete.js patches
FormController, which a client action is not).

Live client search:
- new jsonrpc endpoint /fusion_claims/service_booking/search_customers — searches
  res.partner (name/phone/email) and resolves a typed SO number to its partner.
- JS: debounced (250ms) onCustSearch -> .sb-cust-results dropdown; pickCustomer()
  sets state.partnerId + fills the contact, which action_book_from_wizard already
  consumes for cust_mode='existing'.
- FIELD-SAFE domain: res.partner has NO `mobile` field in Odoo 19 — referencing it
  raises ValueError and the swallowed exception made the search silently return
  nothing. Build the OR domain only over fields in Partner._fields. Smoke-tested on
  prod data ('25450'->1, '1 905-'->8).

Address autocomplete (wizard-local):
- component loads Google Places (key = ICP fusion_claims.google_maps_api_key, which
  IS configured on westin), attaches via useRef('root')+onMounted/onPatched to every
  input.sb-addr-input, writes street/city/lat/lng into reactive state. Fully guarded
  (per-input _sbAc, _addrStarted/_addrNoKey gate, .catch on both hooks) so a missing
  key degrades to manual entry and can never break render.

Verified: pyflakes clean, JS node --check, SCSS compiles, XML well-formed, dropdown
UI rendered against Bootstrap+compiled CSS. Documented in fusion_claims/CLAUDE.md §48.
Bump fusion_claims 19.0.9.6.0 -> 19.0.9.7.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:07:47 -04:00

210 lines
9.2 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2024-2025 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
# Part of the Fusion Claim Assistant product family.
{
'name': 'Fusion Claims',
'version': '19.0.9.7.0',
'category': 'Sales',
'summary': 'Complete ADP Claims Management with Dashboard, Sales Integration, Billing Automation, and Two-Stage Verification.',
'description': """
Fusion Claims
=============
Part of the Fusion Claim Assistant product family by Nexa Systems Inc.
Fusion Claims is a comprehensive standalone application for managing ADP (Assistive Devices Program)
claims in Odoo. It provides its own sales management views, dashboard, claim workflow management,
automatic calculation of ADP and client portions, and professional PDF reports.
Key Features:
-------------
• Standalone application with its own menu and views
• Dashboard for claims overview and KPIs
• Integrated sales management (custom views separate from standard Sales app)
• Complete ADP claim workflow (Quotation → Ready for Submission → Application Submitted →
Application Approved → Ready to Bill → Billed to ADP → Case Closed)
• Automatic ADP/Client portion calculations with deductions (PCT/AMT)
• Support for multiple client types (REG=75%/25%, ODS/OWP/ACS=100%/0%)
• Split invoicing (Client Invoice + ADP Invoice)
• ADP Device Codes reference from Mobility Manual (JSON/CSV import)
• Device Approval Verification wizard - confirm which devices were approved by ADP
• Approval status tracking on order lines and invoices with visual indicators
• Professional PDF reports in Portrait and Landscape orientations
• ADP claim export to TXT format for billing
• Kanban board for ADP claim status tracking
• Field mapping for existing Odoo Studio fields
• Data persistence - fields survive module uninstall
Sales Management:
-----------------
• Custom quotation and order views with ADP fields
• ADP portion and client portion columns
• Serial number tracking per line item
• Device placement (Left/Right/N/A)
• Client type selection and automatic calculations
Claim Fields:
-------------
• Claim Number, Client Reference 1 & 2
• ADP Delivery Date, Service Start/End Dates
• Authorizer tracking
• Deduction Type (Percentage or Amount)
Report Features:
----------------
• Company logo and multi-store addresses
• Billing and delivery address boxes
• Authorizer and sales rep information
• Per-line ADP portion, client portion, taxes, and totals
• ADP device codes from products
• Serial numbers section
• Customizable payment terms
• Optional refund policy page
Copyright © 2024-2025 Nexa Systems Inc. All rights reserved.
""",
'author': 'Nexa Systems Inc.',
'website': 'https://www.nexasystems.ca',
'maintainer': 'Nexa Systems Inc.',
'support': 'support@nexasystems.ca',
'license': 'OPL-1',
'price': 0.00,
'currency': 'CAD',
'depends': [
'base',
'sale',
'sale_management',
'sale_margin',
'purchase',
'account',
'sales_team',
'stock',
'calendar',
'ai',
'fusion_ringcentral',
'fusion_tasks',
],
'external_dependencies': {
'python': ['pdf2image', 'PIL'],
},
'data': [
'security/security.xml',
'security/ir.model.access.csv',
'data/ir_config_parameter_data.xml',
'data/pdf_template_data.xml',
'data/mail_activity_type_data.xml',
'data/ir_cron_data.xml',
'data/ir_actions_server_data.xml',
'data/product_labor_data.xml',
'data/service_rate_products.xml',
'data/service_rate_data.xml',
'wizard/status_change_reason_wizard_views.xml',
'views/res_company_views.xml',
'views/res_config_settings_views.xml',
'views/service_rate_views.xml',
'views/service_booking_action.xml',
'views/sale_order_views.xml',
'views/account_move_views.xml',
'views/account_journal_views.xml',
'wizard/adp_export_wizard_views.xml',
'wizard/device_import_wizard_views.xml',
'wizard/device_approval_wizard_views.xml',
'wizard/submission_verification_wizard_views.xml',
'wizard/account_payment_register_views.xml',
'wizard/case_close_verification_wizard_views.xml',
'wizard/schedule_assessment_wizard_views.xml',
'wizard/assessment_completed_wizard_views.xml',
'wizard/application_received_wizard_views.xml',
'wizard/ready_for_submission_wizard_views.xml',
'wizard/ready_to_bill_wizard_views.xml',
'wizard/field_mapping_config_wizard_views.xml',
'wizard/ready_for_delivery_wizard_views.xml',
'wizard/send_to_mod_wizard_views.xml',
'wizard/mod_awaiting_funding_wizard_views.xml',
'wizard/mod_funding_approved_wizard_views.xml',
'wizard/mod_pca_received_wizard_views.xml',
'wizard/mod_submission_path_wizard_views.xml',
'wizard/mod_funding_denied_wizard_views.xml',
'wizard/mod_resubmit_wizard_views.xml',
'wizard/mod_submission_confirmed_wizard_views.xml',
'wizard/odsp_sa_mobility_wizard_views.xml',
'wizard/odsp_discretionary_wizard_views.xml',
'wizard/odsp_submit_to_odsp_wizard_views.xml',
'wizard/odsp_pre_approved_wizard_views.xml',
'wizard/odsp_ready_delivery_wizard_views.xml',
'wizard/send_page11_wizard_views.xml',
'wizard/adp_import_wizard_views.xml',
'views/res_partner_views.xml',
'views/pdf_template_inherit_views.xml',
'views/dashboard_views.xml',
'views/client_profile_views.xml',
'wizard/xml_import_wizard_views.xml',
'views/adp_export_record_views.xml',
'views/adp_claims_views.xml',
'views/submission_history_views.xml',
'views/product_template_adp_views.xml',
'views/page11_sign_request_views.xml',
'views/technician_task_views.xml',
'report/report_actions.xml',
'report/report_templates.xml',
'report/sale_report_portrait.xml',
'report/sale_report_landscape.xml',
'report/invoice_report_portrait.xml',
'report/invoice_report_landscape.xml',
'report/report_proof_of_delivery.xml',
'report/report_proof_of_delivery_standard.xml',
'report/report_proof_of_pickup.xml',
'report/report_approved_items.xml',
'report/report_grab_bar_waiver.xml',
'report/report_accessibility_contract.xml',
'report/report_mod_quotation.xml',
'report/report_mod_invoice.xml',
'data/mail_template_data.xml',
'data/ai_agent_data.xml',
],
'assets': {
'web.assets_backend': [
'fusion_claims/static/src/scss/fusion_claims.scss',
'fusion_claims/static/src/js/document_preview.js',
'fusion_claims/static/src/js/preview_button_widget.js',
'fusion_claims/static/src/js/status_selection_filter.js',
'fusion_claims/static/src/js/gallery_preview.js',
'fusion_claims/static/src/js/tax_totals_patch.js',
'fusion_claims/static/src/js/google_address_autocomplete.js',
'fusion_claims/static/src/js/calendar_store_hours.js',
'fusion_claims/static/src/js/attachment_image_compress.js',
'fusion_claims/static/src/js/debug_required_fields.js',
'fusion_claims/static/src/xml/document_preview.xml',
# Dashboard: tokens MUST load before dashboard layout
'fusion_claims/static/src/scss/_fc_dashboard_tokens.scss',
'fusion_claims/static/src/scss/fc_dashboard.scss',
# Dashboard OWL countdown widget
'fusion_claims/static/src/js/fc_posting_countdown.js',
'fusion_claims/static/src/xml/fc_posting_countdown.xml',
# Service Booking wizard (client action): tokens MUST load before
# the component scss so the --sb-* vars resolve.
'fusion_claims/static/src/scss/_service_booking_tokens.scss',
'fusion_claims/static/src/scss/service_booking.scss',
'fusion_claims/static/src/js/service_booking/service_booking.js',
'fusion_claims/static/src/xml/service_booking.xml',
],
'web.assets_web_dark': [
# Dark bundle recompiles the same SCSS with the dark
# $o-webclient-color-scheme default so tokens branch correctly.
'fusion_claims/static/src/scss/_fc_dashboard_tokens.scss',
'fusion_claims/static/src/scss/fc_dashboard.scss',
'fusion_claims/static/src/scss/_service_booking_tokens.scss',
'fusion_claims/static/src/scss/service_booking.scss',
],
},
'images': ['static/description/icon.png'],
'installable': True,
'auto_install': False,
'application': True,
'post_init_hook': '_load_adp_device_codes',
}