feat: separate fusion field service and LTC into standalone modules, update core modules
- fusion_claims: separated field service logic, updated controllers/views - fusion_tasks: updated task views and map integration - fusion_authorizer_portal: added page 11 signing, schedule booking, migrations - fusion_shipping: new standalone shipping module (Canada Post, FedEx, DHL, Purolator) - fusion_ltc_management: new standalone LTC management module
This commit is contained in:
@@ -26,7 +26,7 @@ ai['result'] = record._fc_tool_search_clients(search_term, city_filter, conditio
|
||||
<field name="code">
|
||||
ai['result'] = record._fc_tool_client_details(profile_id)
|
||||
</field>
|
||||
<field name="ai_tool_description">Get detailed information about a specific client profile including personal info, medical status, benefits, claims history, ADP application history, funding history with invoice status, and previously funded devices. Requires profile_id from a previous search.</field>
|
||||
<field name="ai_tool_description">Get detailed information about a specific client profile including personal info, medical status, benefits, claims history, and ADP application history. Requires profile_id from a previous search.</field>
|
||||
<field name="ai_tool_schema">{"type": "object", "properties": {"profile_id": {"type": "number", "description": "ID of the client profile to get details for"}}, "required": ["profile_id"]}</field>
|
||||
</record>
|
||||
|
||||
@@ -39,75 +39,21 @@ ai['result'] = record._fc_tool_client_details(profile_id)
|
||||
<field name="code">
|
||||
ai['result'] = record._fc_tool_claims_stats()
|
||||
</field>
|
||||
<field name="ai_tool_description">Get aggregated statistics about Fusion Claims data: total profiles, total orders, breakdown by sale type with amounts, breakdown by ADP workflow status, and top cities by client count. No parameters needed.</field>
|
||||
<field name="ai_tool_description">Get aggregated statistics about Fusion Claims data: total profiles, total orders, breakdown by sale type, breakdown by workflow status, and top cities by client count. No parameters needed.</field>
|
||||
<field name="ai_tool_schema">{"type": "object", "properties": {}, "required": []}</field>
|
||||
</record>
|
||||
|
||||
<!-- Tool 4: Client Status Lookup (by name) -->
|
||||
<record id="ai_tool_client_status" model="ir.actions.server">
|
||||
<field name="name">Fusion: Client Status Lookup</field>
|
||||
<field name="state">code</field>
|
||||
<field name="use_in_ai" eval="True"/>
|
||||
<field name="model_id" ref="ai.model_ai_agent"/>
|
||||
<field name="code">
|
||||
ai['result'] = record._fc_tool_client_status(client_name)
|
||||
</field>
|
||||
<field name="ai_tool_description">Look up a client's complete status by name. Returns all their orders with current ADP status, invoice details (ADP and client portions, paid/unpaid), document checklist, funding warnings, and recommended next steps for each order. Use this when someone asks "what's the status of [name]" or "how is [name]'s case going".</field>
|
||||
<field name="ai_tool_schema">{"type": "object", "properties": {"client_name": {"type": "string", "description": "The client's name (first name, last name, or full name) to look up"}}, "required": ["client_name"]}</field>
|
||||
</record>
|
||||
|
||||
<!-- Tool 5: ADP Billing Period Summary -->
|
||||
<record id="ai_tool_adp_billing" model="ir.actions.server">
|
||||
<field name="name">Fusion: ADP Billing Period</field>
|
||||
<field name="state">code</field>
|
||||
<field name="use_in_ai" eval="True"/>
|
||||
<field name="model_id" ref="ai.model_ai_agent"/>
|
||||
<field name="code">
|
||||
ai['result'] = record._fc_tool_adp_billing_period(period)
|
||||
</field>
|
||||
<field name="ai_tool_description">Get ADP billing summary for a posting period. Shows total invoiced amount to ADP, paid vs unpaid amounts, number of orders billed, submission deadline, and expected payment date. Use when asked about ADP billing, posting, or invoicing for a period.</field>
|
||||
<field name="ai_tool_schema">{"type": "object", "properties": {"period": {"type": "string", "description": "Which period to query: 'current' (default), 'previous', 'next', or a specific date in YYYY-MM-DD format"}}, "required": []}</field>
|
||||
</record>
|
||||
|
||||
<!-- Tool 6: Demographics & Analytics -->
|
||||
<record id="ai_tool_demographics" model="ir.actions.server">
|
||||
<field name="name">Fusion: Demographics & Analytics</field>
|
||||
<field name="state">code</field>
|
||||
<field name="use_in_ai" eval="True"/>
|
||||
<field name="model_id" ref="ai.model_ai_agent"/>
|
||||
<field name="code">
|
||||
ai['result'] = record._fc_tool_demographics(analysis_type, city_filter, sale_type_filter)
|
||||
</field>
|
||||
<field name="ai_tool_description">Run demographic and analytical queries on client data. Returns age group breakdowns, device popularity by age, city demographics with average age and funding, benefit type analysis, top devices with average client age, and overall funding summaries. Use for questions like "average applications by age group", "what devices do clients over 75 use", "demographics by city", "how old are our clients on average".</field>
|
||||
<field name="ai_tool_schema">{"type": "object", "properties": {"analysis_type": {"type": "string", "description": "Type of analysis: 'full' (all reports), 'age_groups' (clients/apps by age), 'devices_by_age' (device popularity per age bracket), 'city_demographics' (per-city stats with avg age), 'benefits' (benefit type breakdown), 'top_devices' (most popular devices with avg client age), 'funding_summary' (overall totals and averages)"}, "city_filter": {"type": "string", "description": "Optional: filter city demographics to a specific city"}, "sale_type_filter": {"type": "string", "description": "Optional: filter by sale type (adp, odsp, wsib, etc.)"}}, "required": []}</field>
|
||||
</record>
|
||||
|
||||
<!-- ================================================================= -->
|
||||
<!-- AI TOPIC (references all tools) -->
|
||||
<!-- AI TOPIC (references tools above) -->
|
||||
<!-- ================================================================= -->
|
||||
<record id="ai_topic_client_intelligence" model="ai.topic">
|
||||
<field name="name">Fusion Claims Client Intelligence</field>
|
||||
<field name="description">Query client profiles, ADP claims, funding history, billing periods, demographics, and device information.</field>
|
||||
<field name="instructions">You help users find information about ADP clients, claims, medical conditions, devices, funding history, billing periods, and demographics. Use the Fusion tools to query data.
|
||||
|
||||
Common questions and which tool to use:
|
||||
- "What is the status of [name]?" -> Use Client Status Lookup (Tool 4)
|
||||
- "What is the ADP billing for this period?" -> Use ADP Billing Period (Tool 5)
|
||||
- "Tell me about [name]'s funding history" -> Use Client Status Lookup first, then Client Details for more depth
|
||||
- "How many claims do we have?" -> Use Claims Statistics (Tool 3)
|
||||
- "Find clients in [city]" -> Use Search Client Profiles (Tool 1)
|
||||
- "Average applications by age group" -> Use Demographics (Tool 6) with analysis_type="age_groups"
|
||||
- "What devices do seniors use?" -> Use Demographics (Tool 6) with analysis_type="devices_by_age"
|
||||
- "What is the average age of our clients?" -> Use Demographics (Tool 6) with analysis_type="funding_summary"
|
||||
- "Show demographics for Brampton" -> Use Demographics (Tool 6) with analysis_type="city_demographics" and city_filter="Brampton"
|
||||
- "How many ODSP clients do we have?" -> Use Demographics (Tool 6) with analysis_type="benefits"</field>
|
||||
<field name="description">Query client profiles, ADP claims, funding history, medical conditions, and device information.</field>
|
||||
<field name="instructions">You help users find information about ADP clients, claims, medical conditions, devices, and funding history. Use the Fusion search/details/stats tools to query data.</field>
|
||||
<field name="tool_ids" eval="[(6, 0, [
|
||||
ref('fusion_claims.ai_tool_search_clients'),
|
||||
ref('fusion_claims.ai_tool_client_details'),
|
||||
ref('fusion_claims.ai_tool_client_stats'),
|
||||
ref('fusion_claims.ai_tool_client_status'),
|
||||
ref('fusion_claims.ai_tool_adp_billing'),
|
||||
ref('fusion_claims.ai_tool_demographics'),
|
||||
])]"/>
|
||||
</record>
|
||||
|
||||
@@ -116,108 +62,32 @@ Common questions and which tool to use:
|
||||
<!-- ================================================================= -->
|
||||
<record id="ai_agent_fusion_claims" model="ai.agent">
|
||||
<field name="name">Fusion Claims Intelligence</field>
|
||||
<field name="subtitle">Ask about clients, ADP claims, funding history, billing periods, and devices.</field>
|
||||
<field name="subtitle">Ask about clients, ADP claims, funding history, medical conditions, and devices.</field>
|
||||
<field name="llm_model">gpt-4.1</field>
|
||||
<field name="response_style">analytical</field>
|
||||
<field name="restrict_to_sources" eval="False"/>
|
||||
<field name="system_prompt">You are Fusion Claims Intelligence, an AI assistant for ADP claims management at a mobility equipment company.
|
||||
<field name="system_prompt">You are Fusion Claims Intelligence, an AI assistant for ADP claims management.
|
||||
|
||||
You help staff find information about clients, their order status, medical conditions, mobility devices, funding history, billing periods, and claim status.
|
||||
|
||||
CRITICAL - Response Formatting Rules:
|
||||
You are displayed inside a narrow chat panel. Follow these rules strictly:
|
||||
|
||||
1. TABLES: Maximum 3 columns. Never create tables with 4+ columns -- the panel is too narrow.
|
||||
- For data with many fields, use TWO-COLUMN key-value tables (Label | Value)
|
||||
- Split wide data across multiple small tables with headings between them
|
||||
|
||||
2. Use ### headings to separate sections
|
||||
3. Use **bold** for labels and important values
|
||||
4. Use `code` for order numbers and IDs (e.g., `S30168`)
|
||||
5. Never output plain unformatted text walls
|
||||
|
||||
CORRECT FORMAT - Client status (multiple small tables, not one wide table):
|
||||
|
||||
### Gurpreet Singh
|
||||
**City:** Brampton | **Health Card:** 1234-567-890
|
||||
|
||||
#### Order `S30168` -- ADP
|
||||
| Detail | Value |
|
||||
|--------|-------|
|
||||
| **Status** | Assessment Completed |
|
||||
| **Total** | $5,624.00 |
|
||||
| **ADP Portion** | $4,218.00 |
|
||||
| **Client Portion** | $1,406.00 |
|
||||
| **Next Step** | Send ADP application |
|
||||
|
||||
CORRECT FORMAT - Demographics (3-column max):
|
||||
|
||||
### Applications by Age Group
|
||||
| Age Group | Clients | Avg Apps |
|
||||
|-----------|---------|----------|
|
||||
| Under 18 | 2 | 2.00 |
|
||||
| 18-30 | 8 | 1.00 |
|
||||
| 75+ | 596 | 1.08 |
|
||||
|
||||
For extra columns, add a second table:
|
||||
|
||||
### Funding by Age Group
|
||||
| Age Group | Avg ADP | Avg Total |
|
||||
|-----------|---------|-----------|
|
||||
| Under 18 | $82.00 | $82.00 |
|
||||
| 75+ | $473.15 | $1,216.15 |
|
||||
|
||||
CORRECT FORMAT - Billing period:
|
||||
|
||||
### ADP Billing: Feb 20 - Mar 5, 2026
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| **Total Invoiced** | $29,447.35 |
|
||||
| **Paid** | $25,000.00 |
|
||||
| **Unpaid** | $4,447.35 |
|
||||
| **Invoices** | 20 |
|
||||
| **Deadline** | Wed, Mar 4 at 6 PM |
|
||||
|
||||
WRONG (too many columns, will look cramped):
|
||||
| Age | Clients | Apps | Avg Apps | Avg ADP | Avg Total |
|
||||
You help staff find information about clients, medical conditions, mobility devices, funding history, and claim status.
|
||||
|
||||
Capabilities:
|
||||
1. Search client profiles by name, health card number, city, or medical condition
|
||||
2. Get detailed client information including funding history, invoice status, and previously funded devices
|
||||
2. Get detailed client information including claims history and ADP applications
|
||||
3. Provide aggregated statistics about claims, funding types, and demographics
|
||||
4. Look up a client's complete status by name -- including all orders, invoices, documents, and next steps
|
||||
5. Query ADP billing period summaries -- total invoiced to ADP, paid vs unpaid, submission deadlines
|
||||
6. Run demographic analytics -- age group breakdowns, device popularity by age, city demographics, benefit analysis, funding summaries
|
||||
|
||||
How to handle common requests:
|
||||
- "What is the status of [name]?" -> Use the Client Status Lookup tool with the client's name
|
||||
- "What is the ADP billing this period?" -> Use the ADP Billing Period tool with period="current"
|
||||
- "What was the ADP billing last period?" -> Use the ADP Billing Period tool with period="previous"
|
||||
- "Show me [name]'s funding history" -> Use Client Status Lookup, then Client Details for full history
|
||||
- "Average applications by age group" -> Use Demographics tool with analysis_type="age_groups"
|
||||
- "What devices do clients over 75 use?" -> Use Demographics tool with analysis_type="devices_by_age"
|
||||
- "What is the average age of our clients?" -> Use Demographics tool with analysis_type="funding_summary"
|
||||
- "Demographics for [city]" -> Use Demographics tool with city_filter
|
||||
- If a client is not found by profile, the system also searches by contact/partner name
|
||||
|
||||
Response guidelines:
|
||||
- ALWAYS keep tables to 3 columns maximum. Use key-value (2-column) tables for summaries.
|
||||
- Split wide data into multiple narrow tables with headings between them
|
||||
- Be concise and data-driven
|
||||
- Format monetary values with $ and commas (e.g., $1,250.00)
|
||||
- When listing orders, show each order as its own key-value table section
|
||||
- When showing billing summaries, use a key-value table
|
||||
- Format monetary values with $ and commas
|
||||
- Include key identifiers (name, health card, city) when listing clients
|
||||
- If asked about a specific client, use Client Status Lookup first (it searches by name)
|
||||
- Always indicate if invoices are paid or unpaid
|
||||
- Include order number, status, and amounts when discussing claims
|
||||
- If asked about a specific client, search first, then get details
|
||||
- Always provide the profile ID for record lookup
|
||||
|
||||
Key terminology:
|
||||
- ADP = Assistive Devices Program (Ontario government funding)
|
||||
- Client Type REG = Regular (75% ADP / 25% Client split), ODS/OWP/ACS = 100% ADP funded
|
||||
- Posting Period = 14-day ADP billing cycle; submission deadline is Wednesday 6 PM before posting day
|
||||
- ADP = Assistive Devices Program (Ontario government)
|
||||
- Client Type REG = Regular (75% ADP / 25% Client), ODS/OWP/ACS = 100% ADP
|
||||
- Sale Types: ADP, ODSP, WSIB, Insurance, March of Dimes, Muscular Dystrophy, Hardship Funding
|
||||
- Sections: 2a = Walkers, 2b = Manual Wheelchairs, 2c = Power Bases/Scooters, 2d = Seating
|
||||
- Previously Funded = devices the client has received ADP funding for before (affects eligibility)</field>
|
||||
- Sections: 2a = Walkers, 2b = Manual Wheelchairs, 2c = Power Bases/Scooters, 2d = Seating</field>
|
||||
<field name="topic_ids" eval="[(6, 0, [ref('ai_topic_client_intelligence')])]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,30 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- Server Action: Sync ADP Fields to Invoices -->
|
||||
<!-- This appears in the Action menu on Sale Orders -->
|
||||
<record id="action_sync_adp_fields_server" model="ir.actions.server">
|
||||
<field name="name">Sync to Invoices</field>
|
||||
<field name="model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_view_types">form,list</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
if records:
|
||||
# Filter to only ADP sales
|
||||
adp_records = records.filtered(lambda r: r.x_fc_is_adp_sale and r.state == 'sale')
|
||||
if adp_records:
|
||||
action = adp_records.action_sync_adp_fields()
|
||||
else:
|
||||
action = {
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'display_notification',
|
||||
'params': {
|
||||
'title': 'No ADP Sales',
|
||||
'message': 'Selected orders are not confirmed ADP sales.',
|
||||
'type': 'warning',
|
||||
'sticky': False,
|
||||
}
|
||||
}
|
||||
</field>
|
||||
</record>
|
||||
<data/>
|
||||
</odoo>
|
||||
|
||||
@@ -45,26 +45,6 @@
|
||||
<field name="value">True</field>
|
||||
</record>
|
||||
|
||||
<!-- Technician / Field Service -->
|
||||
<record id="config_store_open_hour" model="ir.config_parameter">
|
||||
<field name="key">fusion_claims.store_open_hour</field>
|
||||
<field name="value">9.0</field>
|
||||
</record>
|
||||
<record id="config_store_close_hour" model="ir.config_parameter">
|
||||
<field name="key">fusion_claims.store_close_hour</field>
|
||||
<field name="value">18.0</field>
|
||||
</record>
|
||||
|
||||
<!-- Push Notifications -->
|
||||
<record id="config_push_enabled" model="ir.config_parameter">
|
||||
<field name="key">fusion_claims.push_enabled</field>
|
||||
<field name="value">False</field>
|
||||
</record>
|
||||
<record id="config_push_advance_minutes" model="ir.config_parameter">
|
||||
<field name="key">fusion_claims.push_advance_minutes</field>
|
||||
<field name="value">30</field>
|
||||
</record>
|
||||
|
||||
<!-- Field Mappings (defaults for fresh installs) -->
|
||||
<record id="config_field_sale_type" model="ir.config_parameter">
|
||||
<field name="key">fusion_claims.field_sale_type</field>
|
||||
@@ -147,17 +127,5 @@
|
||||
<field name="value">1-888-222-5099</field>
|
||||
</record>
|
||||
|
||||
<!-- Cross-instance task sync: unique ID for this Odoo instance -->
|
||||
<record id="config_sync_instance_id" model="ir.config_parameter">
|
||||
<field name="key">fusion_claims.sync_instance_id</field>
|
||||
<field name="value"></field>
|
||||
</record>
|
||||
|
||||
<!-- LTC Portal Form Password -->
|
||||
<record id="config_ltc_form_password" model="ir.config_parameter">
|
||||
<field name="key">fusion_claims.ltc_form_password</field>
|
||||
<field name="value"></field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -6,16 +6,6 @@
|
||||
-->
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- Cron Job: Sync ADP Fields from Sale Orders to Invoices -->
|
||||
<record id="ir_cron_sync_adp_fields" model="ir.cron">
|
||||
<field name="name">Fusion Claims: Sync ADP Fields</field>
|
||||
<field name="model_id" ref="sale.model_sale_order"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._cron_sync_adp_fields()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">hours</field>
|
||||
</record>
|
||||
|
||||
<!-- Cron Job: Renew ADP Delivery Reminders -->
|
||||
<record id="ir_cron_renew_delivery_reminders" model="ir.cron">
|
||||
<field name="name">Fusion Claims: Renew Delivery Reminders</field>
|
||||
@@ -134,50 +124,17 @@
|
||||
<field name="nextcall" eval="DateTime.now().replace(hour=10, minute=0, second=0)"/>
|
||||
</record>
|
||||
|
||||
<!-- Cron Job: Calculate Travel Times for Technician Tasks -->
|
||||
<record id="ir_cron_technician_travel_times" model="ir.cron">
|
||||
<field name="name">Fusion Claims: Calculate Technician Travel Times</field>
|
||||
<field name="model_id" ref="model_fusion_technician_task"/>
|
||||
<!-- Cron Job: Expire Old Page 11 Signing Requests -->
|
||||
<record id="ir_cron_expire_page11_requests" model="ir.cron">
|
||||
<field name="name">Fusion Claims: Expire Page 11 Signing Requests</field>
|
||||
<field name="model_id" ref="model_fusion_page11_sign_request"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._cron_calculate_travel_times()</field>
|
||||
<field name="code">model._cron_expire_requests()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="active">True</field>
|
||||
<field name="nextcall" eval="DateTime.now().replace(hour=5, minute=0, second=0)"/>
|
||||
<field name="nextcall" eval="DateTime.now().replace(hour=2, minute=0, second=0)"/>
|
||||
</record>
|
||||
|
||||
<!-- Cron Job: Send Push Notifications for Upcoming Tasks -->
|
||||
<record id="ir_cron_technician_push_notifications" model="ir.cron">
|
||||
<field name="name">Fusion Claims: Technician Push Notifications</field>
|
||||
<field name="model_id" ref="model_fusion_technician_task"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._cron_send_push_notifications()</field>
|
||||
<field name="interval_number">15</field>
|
||||
<field name="interval_type">minutes</field>
|
||||
<field name="active">True</field>
|
||||
</record>
|
||||
|
||||
<!-- Cron Job: Pull Remote Technician Tasks (cross-instance sync) -->
|
||||
<record id="ir_cron_task_sync_pull" model="ir.cron">
|
||||
<field name="name">Fusion Claims: Sync Remote Tasks (Pull)</field>
|
||||
<field name="model_id" ref="model_fusion_task_sync_config"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._cron_pull_remote_tasks()</field>
|
||||
<field name="interval_number">5</field>
|
||||
<field name="interval_type">minutes</field>
|
||||
<field name="active">True</field>
|
||||
</record>
|
||||
|
||||
<!-- Cron Job: Cleanup Old Shadow Tasks (30+ days) -->
|
||||
<record id="ir_cron_task_sync_cleanup" model="ir.cron">
|
||||
<field name="name">Fusion Claims: Cleanup Old Shadow Tasks</field>
|
||||
<field name="model_id" ref="model_fusion_task_sync_config"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._cron_cleanup_old_shadows()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="active">True</field>
|
||||
<field name="nextcall" eval="DateTime.now().replace(hour=3, minute=0, second=0)"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<!-- ================================================================== -->
|
||||
<!-- SEQUENCES -->
|
||||
<!-- ================================================================== -->
|
||||
<record id="seq_ltc_facility" model="ir.sequence">
|
||||
<field name="name">LTC Facility</field>
|
||||
<field name="code">fusion.ltc.facility</field>
|
||||
<field name="prefix">LTC-</field>
|
||||
<field name="padding">4</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="seq_ltc_repair" model="ir.sequence">
|
||||
<field name="name">LTC Repair</field>
|
||||
<field name="code">fusion.ltc.repair</field>
|
||||
<field name="prefix">LTC-RPR-</field>
|
||||
<field name="padding">5</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="seq_ltc_cleanup" model="ir.sequence">
|
||||
<field name="name">LTC Cleanup</field>
|
||||
<field name="code">fusion.ltc.cleanup</field>
|
||||
<field name="prefix">LTC-CLN-</field>
|
||||
<field name="padding">5</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- ================================================================== -->
|
||||
<!-- DEFAULT LTC REPAIR SERVICE PRODUCT -->
|
||||
<!-- ================================================================== -->
|
||||
<record id="product_ltc_repair_service" model="product.template">
|
||||
<field name="name">REPAIRS AT LTC HOME</field>
|
||||
<field name="default_code">LTC-REPAIR</field>
|
||||
<field name="type">service</field>
|
||||
<field name="list_price">0.00</field>
|
||||
<field name="sale_ok" eval="True"/>
|
||||
<field name="purchase_ok" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- ================================================================== -->
|
||||
<!-- DEFAULT REPAIR STAGES -->
|
||||
<!-- ================================================================== -->
|
||||
<record id="ltc_repair_stage_new" model="fusion.ltc.repair.stage">
|
||||
<field name="name">New</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="fold">False</field>
|
||||
<field name="description">Newly submitted repair requests awaiting review.</field>
|
||||
</record>
|
||||
|
||||
<record id="ltc_repair_stage_in_review" model="fusion.ltc.repair.stage">
|
||||
<field name="name">In Review</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="fold">False</field>
|
||||
<field name="description">Under review by office staff before assignment.</field>
|
||||
</record>
|
||||
|
||||
<record id="ltc_repair_stage_in_progress" model="fusion.ltc.repair.stage">
|
||||
<field name="name">In Progress</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="fold">False</field>
|
||||
<field name="description">Technician has been assigned and repair is underway.</field>
|
||||
</record>
|
||||
|
||||
<record id="ltc_repair_stage_completed" model="fusion.ltc.repair.stage">
|
||||
<field name="name">Completed</field>
|
||||
<field name="sequence">4</field>
|
||||
<field name="fold">True</field>
|
||||
<field name="description">Repair has been completed by the technician.</field>
|
||||
</record>
|
||||
|
||||
<record id="ltc_repair_stage_invoiced" model="fusion.ltc.repair.stage">
|
||||
<field name="name">Invoiced</field>
|
||||
<field name="sequence">5</field>
|
||||
<field name="fold">True</field>
|
||||
<field name="description">Sale order created and invoiced for this repair.</field>
|
||||
</record>
|
||||
|
||||
<record id="ltc_repair_stage_declined" model="fusion.ltc.repair.stage">
|
||||
<field name="name">Declined/No Response</field>
|
||||
<field name="sequence">6</field>
|
||||
<field name="fold">True</field>
|
||||
<field name="description">Repair was declined or no response was received.</field>
|
||||
</record>
|
||||
|
||||
<!-- ================================================================== -->
|
||||
<!-- CRON: Cleanup scheduling -->
|
||||
<!-- ================================================================== -->
|
||||
<record id="ir_cron_ltc_cleanup_schedule" model="ir.cron">
|
||||
<field name="name">LTC: Auto-Schedule Cleanups</field>
|
||||
<field name="model_id" ref="model_fusion_ltc_cleanup"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._cron_schedule_cleanups()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="active">True</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- Landscape paper format for nursing station report -->
|
||||
<record id="paperformat_ltc_nursing_station" model="report.paperformat">
|
||||
<field name="name">LTC Nursing Station (Landscape)</field>
|
||||
<field name="default">False</field>
|
||||
<field name="format">Letter</field>
|
||||
<field name="orientation">Landscape</field>
|
||||
<field name="margin_top">20</field>
|
||||
<field name="margin_bottom">15</field>
|
||||
<field name="margin_left">10</field>
|
||||
<field name="margin_right">10</field>
|
||||
<field name="header_line">False</field>
|
||||
<field name="header_spacing">10</field>
|
||||
<field name="dpi">90</field>
|
||||
</record>
|
||||
|
||||
<!-- Nursing Station Report action -->
|
||||
<record id="action_report_ltc_nursing_station" model="ir.actions.report">
|
||||
<field name="name">Nursing Station Repair Log</field>
|
||||
<field name="model">fusion.ltc.facility</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_ltc_nursing_station_document</field>
|
||||
<field name="report_file">fusion_claims.report_ltc_nursing_station_document</field>
|
||||
<field name="binding_model_id" ref="model_fusion_ltc_facility"/>
|
||||
<field name="binding_type">report</field>
|
||||
<field name="paperformat_id" ref="paperformat_ltc_nursing_station"/>
|
||||
</record>
|
||||
|
||||
<!-- Repair Summary Report action -->
|
||||
<record id="action_report_ltc_repairs_summary" model="ir.actions.report">
|
||||
<field name="name">Repair Summary</field>
|
||||
<field name="model">fusion.ltc.facility</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_ltc_repairs_summary_document</field>
|
||||
<field name="report_file">fusion_claims.report_ltc_repairs_summary_document</field>
|
||||
<field name="binding_model_id" ref="model_fusion_ltc_facility"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
@@ -20,34 +20,34 @@
|
||||
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
|
||||
<field name="partner_to">{{ object.partner_id.id }}</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;max-width:600px;margin:0 auto;color:#2d3748;">
|
||||
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;max-width:600px;margin:0 auto;">
|
||||
<div style="height:4px;background-color:#2B6CB0;"></div>
|
||||
<div style="background:#ffffff;padding:32px 28px;border:1px solid #e2e8f0;border-top:none;">
|
||||
<div style="padding:32px 28px;">
|
||||
<p style="color:#2B6CB0;font-size:13px;font-weight:600;letter-spacing:0.5px;text-transform:uppercase;margin:0 0 24px 0;">
|
||||
<t t-out="object.company_id.name"/>
|
||||
</p>
|
||||
<h2 style="color:#1a202c;font-size:22px;font-weight:700;margin:0 0 6px 0;line-height:1.3;">ADP Quotation</h2>
|
||||
<p style="color:#718096;font-size:15px;line-height:1.5;margin:0 0 24px 0;">
|
||||
Please find attached your quotation <strong style="color:#2d3748;"><t t-out="object.name"/></strong>.
|
||||
<h2 style="font-size:22px;font-weight:700;margin:0 0 6px 0;line-height:1.3;">ADP Quotation</h2>
|
||||
<p style="opacity:0.65;font-size:15px;line-height:1.5;margin:0 0 24px 0;">
|
||||
Please find attached your quotation <strong><t t-out="object.name"/></strong>.
|
||||
</p>
|
||||
<table style="width:100%;border-collapse:collapse;margin:0 0 24px 0;">
|
||||
<tr><td colspan="2" style="padding:10px 14px;font-size:12px;font-weight:600;color:#718096;text-transform:uppercase;letter-spacing:0.5px;border-bottom:2px solid #e2e8f0;">Quotation Details</td></tr>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;width:35%;">Reference</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.name"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Date</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.date_order" t-options="{'widget': 'date'}"/></td></tr>
|
||||
<tr><td colspan="2" style="padding:10px 14px;font-size:12px;font-weight:600;opacity:0.55;text-transform:uppercase;letter-spacing:0.5px;border-bottom:2px solid rgba(128,128,128,0.25);">Quotation Details</td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);width:35%;">Reference</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.name"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Date</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.date_order" t-options="{'widget': 'date'}"/></td></tr>
|
||||
<t t-if="object.x_fc_authorizer_id">
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Authorizer</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.x_fc_authorizer_id.name"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Authorizer</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.x_fc_authorizer_id.name"/></td></tr>
|
||||
</t>
|
||||
<t t-if="object.x_fc_client_type == 'REG'">
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Client Portion (25%)</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.x_fc_client_portion_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">ADP Portion (75%)</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.x_fc_adp_portion_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Client Portion (25%)</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.x_fc_client_portion_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">ADP Portion (75%)</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.x_fc_adp_portion_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
</t>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;font-weight:600;border-top:2px solid #e2e8f0;">Total</td><td style="padding:10px 14px;color:#2B6CB0;font-size:14px;font-weight:700;border-top:2px solid #e2e8f0;"><t t-out="object.amount_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;font-weight:600;border-top:2px solid rgba(128,128,128,0.25);">Total</td><td style="padding:10px 14px;color:#2B6CB0;font-size:14px;font-weight:700;border-top:2px solid rgba(128,128,128,0.25);"><t t-out="object.amount_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
</table>
|
||||
<div style="padding:10px 14px;border:1px dashed #e2e8f0;border-radius:6px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:13px;color:#718096;"><strong style="color:#2d3748;">Attached:</strong> ADP Quotation (PDF)</p>
|
||||
<div style="padding:10px 14px;border:1px dashed rgba(128,128,128,0.35);border-radius:6px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:13px;opacity:0.65;"><strong style="opacity:1;">Attached:</strong> ADP Quotation (PDF)</p>
|
||||
</div>
|
||||
<div style="border-left:3px solid #2B6CB0;padding:12px 16px;margin:0 0 24px 0;background:#f7fafc;">
|
||||
<p style="margin:0;font-size:14px;line-height:1.5;color:#2d3748;">Please review the attached quotation. If you have any questions or need assistance, do not hesitate to contact us.</p>
|
||||
<div style="border-left:3px solid #2B6CB0;padding:12px 16px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:14px;line-height:1.5;">Please review the attached quotation. If you have any questions or need assistance, do not hesitate to contact us.</p>
|
||||
</div>
|
||||
<t t-if="not is_html_empty(object.user_id.signature)" data-o-mail-quote-container="1">
|
||||
<div data-o-mail-quote="1">--<br data-o-mail-quote="1"/><t t-out="object.user_id.signature or ''" data-o-mail-quote="1"/></div>
|
||||
@@ -70,34 +70,34 @@
|
||||
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
|
||||
<field name="partner_to">{{ object.partner_id.id }}</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;max-width:600px;margin:0 auto;color:#2d3748;">
|
||||
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;max-width:600px;margin:0 auto;">
|
||||
<div style="height:4px;background-color:#38a169;"></div>
|
||||
<div style="background:#ffffff;padding:32px 28px;border:1px solid #e2e8f0;border-top:none;">
|
||||
<div style="padding:32px 28px;">
|
||||
<p style="color:#38a169;font-size:13px;font-weight:600;letter-spacing:0.5px;text-transform:uppercase;margin:0 0 24px 0;">
|
||||
<t t-out="object.company_id.name"/>
|
||||
</p>
|
||||
<h2 style="color:#1a202c;font-size:22px;font-weight:700;margin:0 0 6px 0;line-height:1.3;">Order Confirmed</h2>
|
||||
<p style="color:#718096;font-size:15px;line-height:1.5;margin:0 0 24px 0;">
|
||||
Your ADP sales order <strong style="color:#2d3748;"><t t-out="object.name"/></strong> has been confirmed.
|
||||
<h2 style="font-size:22px;font-weight:700;margin:0 0 6px 0;line-height:1.3;">Order Confirmed</h2>
|
||||
<p style="opacity:0.65;font-size:15px;line-height:1.5;margin:0 0 24px 0;">
|
||||
Your ADP sales order <strong><t t-out="object.name"/></strong> has been confirmed.
|
||||
</p>
|
||||
<table style="width:100%;border-collapse:collapse;margin:0 0 24px 0;">
|
||||
<tr><td colspan="2" style="padding:10px 14px;font-size:12px;font-weight:600;color:#718096;text-transform:uppercase;letter-spacing:0.5px;border-bottom:2px solid #e2e8f0;">Order Details</td></tr>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;width:35%;">Reference</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.name"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Date</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.date_order" t-options="{'widget': 'date'}"/></td></tr>
|
||||
<tr><td colspan="2" style="padding:10px 14px;font-size:12px;font-weight:600;opacity:0.55;text-transform:uppercase;letter-spacing:0.5px;border-bottom:2px solid rgba(128,128,128,0.25);">Order Details</td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);width:35%;">Reference</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.name"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Date</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.date_order" t-options="{'widget': 'date'}"/></td></tr>
|
||||
<t t-if="object.x_fc_authorizer_id">
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Authorizer</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.x_fc_authorizer_id.name"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Authorizer</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.x_fc_authorizer_id.name"/></td></tr>
|
||||
</t>
|
||||
<t t-if="object.x_fc_client_type == 'REG'">
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Client Portion (25%)</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.x_fc_client_portion_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">ADP Portion (75%)</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.x_fc_adp_portion_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Client Portion (25%)</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.x_fc_client_portion_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">ADP Portion (75%)</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.x_fc_adp_portion_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
</t>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;font-weight:600;border-top:2px solid #e2e8f0;">Total</td><td style="padding:10px 14px;color:#38a169;font-size:14px;font-weight:700;border-top:2px solid #e2e8f0;"><t t-out="object.amount_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;font-weight:600;border-top:2px solid rgba(128,128,128,0.25);">Total</td><td style="padding:10px 14px;color:#38a169;font-size:14px;font-weight:700;border-top:2px solid rgba(128,128,128,0.25);"><t t-out="object.amount_total" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
</table>
|
||||
<div style="padding:10px 14px;border:1px dashed #e2e8f0;border-radius:6px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:13px;color:#718096;"><strong style="color:#2d3748;">Attached:</strong> Sales Order Confirmation (PDF)</p>
|
||||
<div style="padding:10px 14px;border:1px dashed rgba(128,128,128,0.35);border-radius:6px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:13px;opacity:0.65;"><strong style="opacity:1;">Attached:</strong> Sales Order Confirmation (PDF)</p>
|
||||
</div>
|
||||
<div style="border-left:3px solid #38a169;padding:12px 16px;margin:0 0 24px 0;background:#f7fafc;">
|
||||
<p style="margin:0;font-size:14px;line-height:1.5;color:#2d3748;">Your order is being processed. We will keep you updated on the delivery status and any updates from the Assistive Devices Program.</p>
|
||||
<div style="border-left:3px solid #38a169;padding:12px 16px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:14px;line-height:1.5;">Your order is being processed. We will keep you updated on the delivery status and any updates from the Assistive Devices Program.</p>
|
||||
</div>
|
||||
<t t-if="not is_html_empty(object.user_id.signature)" data-o-mail-quote-container="1">
|
||||
<div data-o-mail-quote="1">--<br data-o-mail-quote="1"/><t t-out="object.user_id.signature or ''" data-o-mail-quote="1"/></div>
|
||||
@@ -120,42 +120,42 @@
|
||||
<field name="email_from">{{ (object.invoice_user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
|
||||
<field name="partner_to">{{ object.partner_id.id }}</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;max-width:600px;margin:0 auto;color:#2d3748;">
|
||||
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;max-width:600px;margin:0 auto;">
|
||||
<div style="height:4px;background-color:#2B6CB0;"></div>
|
||||
<div style="background:#ffffff;padding:32px 28px;border:1px solid #e2e8f0;border-top:none;">
|
||||
<div style="padding:32px 28px;">
|
||||
<p style="color:#2B6CB0;font-size:13px;font-weight:600;letter-spacing:0.5px;text-transform:uppercase;margin:0 0 24px 0;">
|
||||
<t t-out="object.company_id.name"/>
|
||||
</p>
|
||||
<h2 style="color:#1a202c;font-size:22px;font-weight:700;margin:0 0 6px 0;line-height:1.3;">Invoice</h2>
|
||||
<p style="color:#718096;font-size:15px;line-height:1.5;margin:0 0 24px 0;">
|
||||
Please find attached your invoice <strong style="color:#2d3748;"><t t-out="object.name or 'Draft'"/></strong>.
|
||||
<h2 style="font-size:22px;font-weight:700;margin:0 0 6px 0;line-height:1.3;">Invoice</h2>
|
||||
<p style="opacity:0.65;font-size:15px;line-height:1.5;margin:0 0 24px 0;">
|
||||
Please find attached your invoice <strong><t t-out="object.name or 'Draft'"/></strong>.
|
||||
</p>
|
||||
<table style="width:100%;border-collapse:collapse;margin:0 0 24px 0;">
|
||||
<tr><td colspan="2" style="padding:10px 14px;font-size:12px;font-weight:600;color:#718096;text-transform:uppercase;letter-spacing:0.5px;border-bottom:2px solid #e2e8f0;">Invoice Details</td></tr>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;width:35%;">Invoice</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.name or 'Draft'"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Date</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.invoice_date" t-options="{'widget': 'date'}"/></td></tr>
|
||||
<tr><td colspan="2" style="padding:10px 14px;font-size:12px;font-weight:600;opacity:0.55;text-transform:uppercase;letter-spacing:0.5px;border-bottom:2px solid rgba(128,128,128,0.25);">Invoice Details</td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);width:35%;">Invoice</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.name or 'Draft'"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Date</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.invoice_date" t-options="{'widget': 'date'}"/></td></tr>
|
||||
<t t-if="object.invoice_date_due">
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Due Date</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;"><t t-out="object.invoice_date_due" t-options="{'widget': 'date'}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Due Date</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);"><t t-out="object.invoice_date_due" t-options="{'widget': 'date'}"/></td></tr>
|
||||
</t>
|
||||
<t t-if="object.x_fc_adp_invoice_portion">
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;border-bottom:1px solid #f0f0f0;">Type</td><td style="padding:10px 14px;color:#2d3748;font-size:14px;border-bottom:1px solid #f0f0f0;">
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">Type</td><td style="padding:10px 14px;font-size:14px;border-bottom:1px solid rgba(128,128,128,0.15);">
|
||||
<t t-if="object.x_fc_adp_invoice_portion == 'client'">Client Portion</t>
|
||||
<t t-if="object.x_fc_adp_invoice_portion == 'adp'">ADP Portion</t>
|
||||
</td></tr>
|
||||
</t>
|
||||
<tr><td style="padding:10px 14px;color:#718096;font-size:14px;font-weight:600;border-top:2px solid #e2e8f0;">Amount Due</td><td style="padding:10px 14px;color:#2B6CB0;font-size:14px;font-weight:700;border-top:2px solid #e2e8f0;"><t t-out="object.amount_residual" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
<tr><td style="padding:10px 14px;opacity:0.6;font-size:14px;font-weight:600;border-top:2px solid rgba(128,128,128,0.25);">Amount Due</td><td style="padding:10px 14px;color:#2B6CB0;font-size:14px;font-weight:700;border-top:2px solid rgba(128,128,128,0.25);"><t t-out="object.amount_residual" t-options="{'widget': 'monetary', 'display_currency': object.currency_id}"/></td></tr>
|
||||
</table>
|
||||
<div style="padding:10px 14px;border:1px dashed #e2e8f0;border-radius:6px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:13px;color:#718096;"><strong style="color:#2d3748;">Attached:</strong> Invoice (PDF)</p>
|
||||
<div style="padding:10px 14px;border:1px dashed rgba(128,128,128,0.35);border-radius:6px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:13px;opacity:0.65;"><strong style="opacity:1;">Attached:</strong> Invoice (PDF)</p>
|
||||
</div>
|
||||
<t t-if="object.x_fc_adp_invoice_portion == 'client'">
|
||||
<div style="border-left:3px solid #2B6CB0;padding:12px 16px;margin:0 0 24px 0;background:#f7fafc;">
|
||||
<p style="margin:0;font-size:14px;line-height:1.5;color:#2d3748;">This invoice represents your client portion for the ADP-funded equipment. The remaining amount will be billed directly to the Assistive Devices Program.</p>
|
||||
<div style="border-left:3px solid #2B6CB0;padding:12px 16px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:14px;line-height:1.5;">This invoice represents your client portion for the ADP-funded equipment. The remaining amount will be billed directly to the Assistive Devices Program.</p>
|
||||
</div>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<div style="border-left:3px solid #2B6CB0;padding:12px 16px;margin:0 0 24px 0;background:#f7fafc;">
|
||||
<p style="margin:0;font-size:14px;line-height:1.5;color:#2d3748;">Please review the attached invoice and process payment at your earliest convenience. Contact us if you have any questions.</p>
|
||||
<div style="border-left:3px solid #2B6CB0;padding:12px 16px;margin:0 0 24px 0;">
|
||||
<p style="margin:0;font-size:14px;line-height:1.5;">Please review the attached invoice and process payment at your earliest convenience. Contact us if you have any questions.</p>
|
||||
</div>
|
||||
</t>
|
||||
<t t-set="sig" t-value="object.invoice_user_id.signature or object.user_id.signature"/>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<field name="uom_id" ref="uom.product_uom_hour"/>
|
||||
<field name="sale_ok" eval="True"/>
|
||||
<field name="purchase_ok" eval="False"/>
|
||||
<field name="taxes_id" eval="[(6, 0, [ref('account.1_hst_sale_tax_13')])]"/>
|
||||
<!-- taxes_id set via post_init_hook or manually per database -->
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user