Initial commit
This commit is contained in:
410
fusion_claims/report/invoice_report_landscape.xml
Normal file
410
fusion_claims/report/invoice_report_landscape.xml
Normal file
@@ -0,0 +1,410 @@
|
||||
<?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.
|
||||
Landscape Invoice Report Template
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_invoice_landscape">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<t t-set="is_adp" t-value="doc.x_fc_is_adp_invoice"/>
|
||||
|
||||
<style>
|
||||
.fc-landscape { font-family: Arial, sans-serif; font-size: 11pt; }
|
||||
.fc-landscape table { width: 100%; border-collapse: collapse; margin-bottom: 12px; }
|
||||
.fc-landscape table.bordered, .fc-landscape table.bordered th, .fc-landscape table.bordered td { border: 1px solid #000; }
|
||||
.fc-landscape th { background-color: #0066a1; color: white; padding: 8px 10px; font-weight: bold; font-size: 10pt; }
|
||||
.fc-landscape td { padding: 6px 8px; vertical-align: top; font-size: 10pt; }
|
||||
.fc-landscape .text-center { text-align: center; }
|
||||
.fc-landscape .text-end { text-align: right; }
|
||||
.fc-landscape .text-start { text-align: left; }
|
||||
.fc-landscape .adp-bg { background-color: #e3f2fd; }
|
||||
.fc-landscape .client-bg { background-color: #fff3e0; }
|
||||
.fc-landscape .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-landscape .note-row { font-style: italic; }
|
||||
.fc-landscape h2 { color: #0066a1; margin: 10px 0; font-size: 18pt; }
|
||||
.fc-landscape .info-table td { padding: 8px 12px; font-size: 11pt; }
|
||||
.fc-landscape .info-table th { background-color: #f5f5f5; color: #333; font-size: 10pt; padding: 6px 12px; }
|
||||
.fc-landscape .totals-table { border: 1px solid #000; }
|
||||
.fc-landscape .totals-table td { border: 1px solid #000; padding: 8px 12px; font-size: 11pt; }
|
||||
</style>
|
||||
|
||||
<div class="fc-landscape">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h2 style="text-align: left;">
|
||||
<span t-if="doc.move_type == 'out_invoice' and doc.state == 'posted'">Invoice </span>
|
||||
<span t-elif="doc.move_type == 'out_invoice' and doc.state == 'draft'">Draft Invoice </span>
|
||||
<span t-elif="doc.move_type == 'out_refund'">Credit Note </span>
|
||||
<span t-field="doc.name"/>
|
||||
</h2>
|
||||
|
||||
<!-- Address Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">BILLING ADDRESS</th>
|
||||
<th style="width: 50%;">DELIVERY ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 70px; font-size: 12pt;">
|
||||
<div t-field="doc.partner_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 70px; font-size: 12pt;">
|
||||
<t t-if="doc.partner_shipping_id">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<div t-field="doc.partner_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Invoice Info Table -->
|
||||
<table class="bordered info-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>INVOICE DATE</th>
|
||||
<th>DUE DATE</th>
|
||||
<th>CLIENT TYPE</th>
|
||||
<th>SOURCE</th>
|
||||
<th>SALES REP</th>
|
||||
<th>AUTHORIZER</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.invoice_date"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.invoice_date_due"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_client_type or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.invoice_origin"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.invoice_user_id"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_authorizer_id" t-field="doc.x_fc_authorizer_id"/>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- ADP Info Table (only for ADP invoices) -->
|
||||
<t t-if="is_adp">
|
||||
<table class="bordered info-table">
|
||||
<thead>
|
||||
<tr class="adp-bg">
|
||||
<th style="background-color: #e3f2fd; color: #333;">CLAIM #</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">APPLICATION TYPE</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">CLIENT REF 2</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">DELIVERY DATE</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">AUTHORIZATION</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">APPROVAL</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="adp-bg">
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_claim_number or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<!-- Get application type from linked sale order -->
|
||||
<t t-set="linked_so" t-value="doc.invoice_line_ids.mapped('sale_line_ids.order_id')[:1]"/>
|
||||
<t t-if="linked_so and linked_so.x_fc_reason_for_application">
|
||||
<t t-set="app_type" t-value="dict(linked_so._fields.get('x_fc_reason_for_application') and linked_so._fields['x_fc_reason_for_application'].selection or []).get(linked_so.x_fc_reason_for_application, '-')"/>
|
||||
<span t-esc="app_type"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_client_ref_2 or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.x_fc_adp_delivery_date">
|
||||
<span t-field="doc.x_fc_adp_delivery_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<!-- Get authorization date from linked sale order -->
|
||||
<t t-if="linked_so and linked_so.x_fc_claim_authorization_date">
|
||||
<span t-field="linked_so.x_fc_claim_authorization_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<!-- Get approval date from linked sale order -->
|
||||
<t t-if="linked_so and linked_so.x_fc_claim_approval_date">
|
||||
<span t-field="linked_so.x_fc_claim_approval_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</t>
|
||||
|
||||
<!-- Invoice Lines Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 8%;">ADP CODE</th>
|
||||
<th class="text-start" style="width: 22%;">DESCRIPTION</th>
|
||||
<th class="text-center" style="width: 8%;">SERIAL #</th>
|
||||
<th t-if="is_adp" class="text-center" style="width: 5%;">PLCMT</th>
|
||||
<th class="text-center" style="width: 5%;">QTY</th>
|
||||
<th class="text-center" style="width: 10%;">UNIT PRICE</th>
|
||||
<th class="text-center" style="width: 10%; background-color: #1976d2; color: white;">ADP PORTION</th>
|
||||
<th class="text-center" style="width: 10%; background-color: #e65100; color: white;">CLIENT PORTION</th>
|
||||
<th class="text-center" style="width: 10%;">TAX</th>
|
||||
<th class="text-center" style="width: 10%;">TOTAL</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.invoice_line_ids" t-as="line">
|
||||
<!-- Section Header -->
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td t-att-colspan="'10' if is_adp else '9'">
|
||||
<strong><span t-field="line.name"/></strong>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Note Line -->
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td t-att-colspan="'10' if is_adp else '9'">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Product Line (display_type is False/None/empty for actual products) -->
|
||||
<t t-else="">
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="line.product_id.x_fc_adp_device_code"/>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in line.name">
|
||||
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.x_fc_serial_number or ''"/>
|
||||
</td>
|
||||
<td t-if="is_adp" class="text-center">
|
||||
<span t-esc="line.x_fc_device_placement or 'N/A'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="line.quantity"/>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<!-- Show ADP price if available, otherwise unit price -->
|
||||
<t t-if="line.product_id.product_tmpl_id.x_fc_adp_price">
|
||||
<span t-esc="line.product_id.product_tmpl_id.x_fc_adp_price" t-options="{'widget': 'monetary', 'display_currency': doc.currency_id}"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span t-field="line.price_unit" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-end adp-bg">
|
||||
<span t-field="line.x_fc_adp_portion" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
<td class="text-end client-bg">
|
||||
<span t-field="line.x_fc_client_portion" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-esc="', '.join([(tax.invoice_label or tax.name) for tax in line.tax_ids]) or 'NO TAX'"/>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-field="line.price_subtotal" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Payment Terms and Totals Row -->
|
||||
<div class="row" style="margin-top: 15px;">
|
||||
<div class="col-7">
|
||||
<t t-if="doc.invoice_payment_term_id.note">
|
||||
<strong>Payment Terms:</strong><br/>
|
||||
<span t-field="doc.invoice_payment_term_id.note"/>
|
||||
</t>
|
||||
<t t-if="doc.payment_reference">
|
||||
<div style="margin-top: 10px;">
|
||||
<strong>Payment Reference:</strong>
|
||||
<span t-field="doc.payment_reference"/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<div class="col-5" style="text-align: right;">
|
||||
<!-- Totals Table with borders -->
|
||||
<table class="totals-table" style="width: auto; margin-left: auto;">
|
||||
<tr>
|
||||
<td style="min-width: 200px;">Subtotal</td>
|
||||
<td class="text-end" style="min-width: 150px;">
|
||||
<span t-field="doc.amount_untaxed" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Show actual invoice totals based on invoice portion type -->
|
||||
<t t-if="doc.x_fc_adp_invoice_portion == 'adp'">
|
||||
<tr class="adp-bg">
|
||||
<td><strong>Total ADP Portion</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.amount_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="client-bg">
|
||||
<td><strong>Total Client Portion</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.x_fc_sibling_client_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-elif="doc.x_fc_adp_invoice_portion == 'client'">
|
||||
<tr class="adp-bg">
|
||||
<td><strong>Total ADP Portion</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.x_fc_sibling_adp_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="client-bg">
|
||||
<td><strong>Total Client Portion</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.amount_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<tr class="adp-bg">
|
||||
<td><strong>Total ADP Portion</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.x_fc_adp_portion_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="client-bg">
|
||||
<td><strong>Total Client Portion</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.x_fc_client_portion_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<tr>
|
||||
<td>Taxes</td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.amount_tax" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Grand Total</strong></td>
|
||||
<td class="text-end"><strong>
|
||||
<span t-field="doc.amount_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</strong></td>
|
||||
</tr>
|
||||
<t t-if="doc.amount_residual and doc.amount_residual != doc.amount_total">
|
||||
<tr>
|
||||
<td><strong>Amount Due</strong></td>
|
||||
<td class="text-end"><strong>
|
||||
<span t-field="doc.amount_residual" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</strong></td>
|
||||
</tr>
|
||||
</t>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Payment Details Section -->
|
||||
<t t-if="doc.payment_state != 'invoicing_legacy'">
|
||||
<t t-set="payments_vals" t-value="doc.sudo().invoice_payments_widget and doc.sudo().invoice_payments_widget.get('content') or []"/>
|
||||
<t t-if="payments_vals or doc.payment_state == 'paid'">
|
||||
<table class="bordered" style="margin-top: 15px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="4" style="background-color: #28a745; color: white;">
|
||||
<t t-if="doc.payment_state == 'paid'">✓ PAYMENT DETAILS - PAID IN FULL</t>
|
||||
<t t-elif="doc.payment_state == 'partial'">PAYMENT DETAILS - PARTIALLY PAID</t>
|
||||
<t t-else="">PAYMENT DETAILS</t>
|
||||
</th>
|
||||
</tr>
|
||||
<tr style="background-color: #f5f5f5;">
|
||||
<th style="width: 25%;">Date</th>
|
||||
<th style="width: 30%;">Payment Method</th>
|
||||
<th style="width: 20%;">Card #</th>
|
||||
<th style="width: 25%;" class="text-end">Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="payments_vals" t-as="payment_vals">
|
||||
<tr t-if="not payment_vals.get('is_exchange')">
|
||||
<td>
|
||||
<t t-if="payment_vals.get('is_refund')">Reversed </t>
|
||||
<span t-out="payment_vals.get('date')" t-options='{"widget": "date"}'/>
|
||||
</td>
|
||||
<td>
|
||||
<span t-out="payment_vals.get('payment_method_name') or '-'"/>
|
||||
</td>
|
||||
<td>
|
||||
<!-- Get card info from payment record -->
|
||||
<t t-set="payment_rec" t-value="doc.env['account.payment'].sudo().browse(payment_vals.get('account_payment_id'))"/>
|
||||
<t t-if="payment_rec and payment_rec.x_fc_card_last_four">
|
||||
****<span t-esc="payment_rec.x_fc_card_last_four"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-out="payment_vals.get('amount')" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-if="doc.amount_residual and doc.amount_residual > 0 and doc.payment_state != 'paid'">
|
||||
<tr style="background-color: #fff3e0;">
|
||||
<td colspan="3"><strong>Amount Due</strong></td>
|
||||
<td class="text-end"><strong><span t-field="doc.amount_residual" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/></strong></td>
|
||||
</tr>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<!-- Notes -->
|
||||
<t t-if="doc.narration">
|
||||
<div style="margin-top: 15px;">
|
||||
<strong>Notes:</strong>
|
||||
<div t-field="doc.narration"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
377
fusion_claims/report/invoice_report_portrait.xml
Normal file
377
fusion_claims/report/invoice_report_portrait.xml
Normal file
@@ -0,0 +1,377 @@
|
||||
<?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>
|
||||
<template id="report_invoice_portrait">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<t t-set="is_adp" t-value="doc.x_fc_is_adp_invoice"/>
|
||||
|
||||
<style>
|
||||
.fc-report { font-family: Arial, sans-serif; font-size: 10pt; }
|
||||
.fc-report table { width: 100%; border-collapse: collapse; margin-bottom: 10px; }
|
||||
.fc-report table.bordered, .fc-report table.bordered th, .fc-report table.bordered td { border: 1px solid #000; }
|
||||
.fc-report th { background-color: #f0f0f0; padding: 6px 8px; font-weight: bold; text-align: center; }
|
||||
.fc-report td { padding: 6px 8px; vertical-align: top; }
|
||||
.fc-report .text-center { text-align: center; }
|
||||
.fc-report .text-end { text-align: right; }
|
||||
.fc-report .text-start { text-align: left; }
|
||||
.fc-report .adp-bg { background-color: #e3f2fd; }
|
||||
.fc-report .client-bg { background-color: #fff3e0; }
|
||||
.fc-report .section-row { background-color: #f8f8f8; font-weight: bold; }
|
||||
.fc-report .note-row { font-style: italic; }
|
||||
.fc-report h4 { color: #005a83; margin: 0 0 15px 0; }
|
||||
.fc-report .totals-table { border: 1px solid #000; border-collapse: collapse; }
|
||||
.fc-report .totals-table td { border: 1px solid #000; padding: 6px 8px; }
|
||||
</style>
|
||||
|
||||
<div class="fc-report">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h4 style="text-align: left;">
|
||||
<span t-if="doc.move_type == 'out_invoice' and doc.state == 'posted'">Invoice </span>
|
||||
<span t-elif="doc.move_type == 'out_invoice' and doc.state == 'draft'">Draft Invoice </span>
|
||||
<span t-elif="doc.move_type == 'out_refund'">Credit Note </span>
|
||||
<span t-field="doc.name"/>
|
||||
</h4>
|
||||
|
||||
<!-- Address Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">BILLING ADDRESS</th>
|
||||
<th style="width: 50%;">DELIVERY ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 70px; font-size: 11pt;">
|
||||
<div t-field="doc.partner_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 70px; font-size: 11pt;">
|
||||
<t t-if="doc.partner_shipping_id">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<div t-field="doc.partner_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Invoice Info Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 20%;">INVOICE DATE</th>
|
||||
<th style="width: 20%;">DUE DATE</th>
|
||||
<th style="width: 20%;">SOURCE</th>
|
||||
<th style="width: 20%;">SALESPERSON</th>
|
||||
<th style="width: 20%;">
|
||||
<t t-if="is_adp">APPLICATION TYPE</t>
|
||||
<t t-else="">INVOICE TYPE</t>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.invoice_date"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.invoice_date_due"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.invoice_origin"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.invoice_user_id"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="is_adp">
|
||||
<!-- Get application type from linked sale order -->
|
||||
<t t-set="linked_so" t-value="doc.invoice_line_ids.mapped('sale_line_ids.order_id')[:1]"/>
|
||||
<t t-if="linked_so and linked_so.x_fc_reason_for_application">
|
||||
<t t-set="app_type" t-value="dict(linked_so._fields.get('x_fc_reason_for_application') and linked_so._fields['x_fc_reason_for_application'].selection or []).get(linked_so.x_fc_reason_for_application, '-')"/>
|
||||
<span t-esc="app_type"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span t-esc="doc.x_fc_invoice_type or '-'"/>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- ADP Info Table (only for ADP invoices) -->
|
||||
<t t-if="is_adp">
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr class="adp-bg">
|
||||
<th style="width: 25%;">CLAIM NUMBER</th>
|
||||
<th style="width: 25%;">CLIENT TYPE</th>
|
||||
<th style="width: 25%;">DELIVERY DATE</th>
|
||||
<th style="width: 25%;">AUTHORIZER</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="adp-bg">
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_claim_number or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_client_type or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.x_fc_adp_delivery_date">
|
||||
<span t-field="doc.x_fc_adp_delivery_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_authorizer_id" t-field="doc.x_fc_authorizer_id"/>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</t>
|
||||
|
||||
<!-- Invoice Lines Table -->
|
||||
<table class="bordered" style="font-size: 9pt;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 10%;">ADP CODE</th>
|
||||
<th class="text-start" style="width: 22%;">DESCRIPTION</th>
|
||||
<th class="text-center" style="width: 10%;">SERIAL #</th>
|
||||
<th class="text-center" style="width: 6%;">QTY</th>
|
||||
<th class="text-center" style="width: 9%;">UNIT PRICE</th>
|
||||
<th class="text-center" style="width: 7%;">TAXES</th>
|
||||
<th t-if="is_adp" class="text-center" style="width: 11%; background-color: #1976d2; color: white;">ADP PORTION</th>
|
||||
<th t-if="is_adp" class="text-center" style="width: 11%; background-color: #e65100; color: white;">CLIENT PORTION</th>
|
||||
<th class="text-center" style="width: 11%;">AMOUNT</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.invoice_line_ids" t-as="line">
|
||||
<!-- Section Header -->
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td t-att-colspan="'9' if is_adp else '7'">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Note Line -->
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td t-att-colspan="'9' if is_adp else '7'">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Product Line (display_type is False/None/empty for actual products) -->
|
||||
<t t-else="">
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="line.product_id.x_fc_adp_device_code"/>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in line.name">
|
||||
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.x_fc_serial_number or ''"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="line.quantity"/>
|
||||
<span t-field="line.product_uom_id" groups="uom.group_uom"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<!-- Show ADP price if available, otherwise unit price -->
|
||||
<t t-if="line.product_id.product_tmpl_id.x_fc_adp_price">
|
||||
<span t-esc="line.product_id.product_tmpl_id.x_fc_adp_price" t-options="{'widget': 'monetary', 'display_currency': doc.currency_id}"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span t-field="line.price_unit"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-esc="', '.join([(tax.invoice_label or tax.name) for tax in line.tax_ids]) or 'NO TAX'"/>
|
||||
</td>
|
||||
<td t-if="is_adp" class="text-center adp-bg">
|
||||
<span t-field="line.x_fc_adp_portion"/>
|
||||
</td>
|
||||
<td t-if="is_adp" class="text-center client-bg">
|
||||
<span t-field="line.x_fc_client_portion"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="line.price_subtotal"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Payment Terms and Totals Row -->
|
||||
<div class="row" style="margin-top: 15px;">
|
||||
<div class="col-6">
|
||||
<t t-if="doc.invoice_payment_term_id.note">
|
||||
<strong>Payment Terms:</strong><br/>
|
||||
<span t-field="doc.invoice_payment_term_id.note"/>
|
||||
</t>
|
||||
<t t-if="doc.payment_reference">
|
||||
<div style="margin-top: 10px;">
|
||||
<strong>Payment Reference:</strong>
|
||||
<span t-field="doc.payment_reference"/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<div class="col-6" style="text-align: right;">
|
||||
<!-- Totals Table with borders -->
|
||||
<table class="totals-table" style="width: auto; margin-left: auto;">
|
||||
<tr>
|
||||
<td style="min-width: 140px;">Subtotal</td>
|
||||
<td class="text-end" style="min-width: 100px;"><span t-field="doc.amount_untaxed"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Taxes</td>
|
||||
<td class="text-end"><span t-field="doc.amount_tax"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Total</strong></td>
|
||||
<td class="text-end"><strong><span t-field="doc.amount_total"/></strong></td>
|
||||
</tr>
|
||||
<t t-if="is_adp">
|
||||
<!-- Show actual invoice totals, not calculated portions -->
|
||||
<!-- On ADP invoice (75%): this invoice = ADP portion, sibling = Client portion -->
|
||||
<!-- On Client invoice (25%): this invoice = Client portion, sibling = ADP portion -->
|
||||
<t t-if="doc.x_fc_adp_invoice_portion == 'adp'">
|
||||
<tr class="adp-bg">
|
||||
<td><strong>Total ADP Portion</strong></td>
|
||||
<td class="text-end"><span t-field="doc.amount_total"/></td>
|
||||
</tr>
|
||||
<tr class="client-bg">
|
||||
<td><strong>Total Client Portion</strong></td>
|
||||
<td class="text-end"><span t-field="doc.x_fc_sibling_client_total"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-elif="doc.x_fc_adp_invoice_portion == 'client'">
|
||||
<tr class="adp-bg">
|
||||
<td><strong>Total ADP Portion</strong></td>
|
||||
<td class="text-end"><span t-field="doc.x_fc_sibling_adp_total"/></td>
|
||||
</tr>
|
||||
<tr class="client-bg">
|
||||
<td><strong>Total Client Portion</strong></td>
|
||||
<td class="text-end"><span t-field="doc.amount_total"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<!-- Fallback for full invoices or unknown portion -->
|
||||
<tr class="adp-bg">
|
||||
<td><strong>Total ADP Portion</strong></td>
|
||||
<td class="text-end"><span t-field="doc.x_fc_adp_portion_total"/></td>
|
||||
</tr>
|
||||
<tr class="client-bg">
|
||||
<td><strong>Total Client Portion</strong></td>
|
||||
<td class="text-end"><span t-field="doc.x_fc_client_portion_total"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="doc.amount_residual and doc.amount_residual != doc.amount_total">
|
||||
<tr>
|
||||
<td><strong>Amount Due</strong></td>
|
||||
<td class="text-end"><strong><span t-field="doc.amount_residual"/></strong></td>
|
||||
</tr>
|
||||
</t>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Payment Details Section -->
|
||||
<t t-if="doc.payment_state != 'invoicing_legacy'">
|
||||
<t t-set="payments_vals" t-value="doc.sudo().invoice_payments_widget and doc.sudo().invoice_payments_widget.get('content') or []"/>
|
||||
<t t-if="payments_vals or doc.payment_state == 'paid'">
|
||||
<table class="bordered" style="margin-top: 15px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="4" style="background-color: #28a745; color: white;">
|
||||
<t t-if="doc.payment_state == 'paid'">✓ PAYMENT DETAILS - PAID IN FULL</t>
|
||||
<t t-elif="doc.payment_state == 'partial'">PAYMENT DETAILS - PARTIALLY PAID</t>
|
||||
<t t-else="">PAYMENT DETAILS</t>
|
||||
</th>
|
||||
</tr>
|
||||
<tr style="background-color: #f5f5f5;">
|
||||
<th style="width: 25%;">Date</th>
|
||||
<th style="width: 30%;">Payment Method</th>
|
||||
<th style="width: 20%;">Card #</th>
|
||||
<th style="width: 25%;" class="text-end">Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="payments_vals" t-as="payment_vals">
|
||||
<tr t-if="not payment_vals.get('is_exchange')">
|
||||
<td>
|
||||
<t t-if="payment_vals.get('is_refund')">Reversed </t>
|
||||
<span t-out="payment_vals.get('date')" t-options='{"widget": "date"}'/>
|
||||
</td>
|
||||
<td>
|
||||
<span t-out="payment_vals.get('payment_method_name') or '-'"/>
|
||||
</td>
|
||||
<td>
|
||||
<!-- Get card info from payment record -->
|
||||
<t t-set="payment_rec" t-value="doc.env['account.payment'].sudo().browse(payment_vals.get('account_payment_id'))"/>
|
||||
<t t-if="payment_rec and payment_rec.x_fc_card_last_four">
|
||||
****<span t-esc="payment_rec.x_fc_card_last_four"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-out="payment_vals.get('amount')" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-if="doc.amount_residual and doc.amount_residual > 0 and doc.payment_state != 'paid'">
|
||||
<tr style="background-color: #fff3e0;">
|
||||
<td colspan="3"><strong>Amount Due</strong></td>
|
||||
<td class="text-end"><strong><span t-field="doc.amount_residual"/></strong></td>
|
||||
</tr>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<!-- Notes -->
|
||||
<t t-if="doc.narration">
|
||||
<div style="margin-top: 15px;">
|
||||
<strong>Notes:</strong>
|
||||
<div t-field="doc.narration"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
342
fusion_claims/report/report_accessibility_contract.xml
Normal file
342
fusion_claims/report/report_accessibility_contract.xml
Normal file
@@ -0,0 +1,342 @@
|
||||
<?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.
|
||||
Accessibility Equipment Purchase and Installation Agreement - Compact Layout
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_accessibility_contract">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<t t-set="company" t-value="doc.company_id"/>
|
||||
|
||||
<style>
|
||||
.fc-contract { font-family: Arial, sans-serif; font-size: 8pt; line-height: 1.3; }
|
||||
.fc-contract h1 { color: #0066a1; font-size: 14pt; text-align: center; margin: 5px 0 10px 0; }
|
||||
.fc-contract h2 { color: #0066a1; font-size: 9pt; margin: 6px 0 3px 0; font-weight: bold; }
|
||||
.fc-contract h4 { color: #0066a1; margin: 0 0 10px 0; font-size: 13pt; }
|
||||
.fc-contract p { margin: 2px 0; text-align: justify; }
|
||||
.fc-contract .intro { margin-bottom: 8px; font-size: 8pt; }
|
||||
.fc-contract ul { margin: 2px 0 2px 15px; padding: 0; }
|
||||
.fc-contract li { margin-bottom: 1px; }
|
||||
.fc-contract table { width: 100%; border-collapse: collapse; }
|
||||
.fc-contract table.bordered, .fc-contract table.bordered th, .fc-contract table.bordered td { border: 1px solid #000; }
|
||||
.fc-contract th { background-color: #0066a1; color: white; padding: 4px 6px; font-weight: bold; text-align: center; font-size: 8pt; }
|
||||
.fc-contract td { padding: 3px 5px; vertical-align: top; font-size: 8pt; }
|
||||
.fc-contract .text-center { text-align: center; }
|
||||
.fc-contract .text-end { text-align: right; }
|
||||
.fc-contract .info-header { background-color: #f5f5f5; color: #333; }
|
||||
.fc-contract .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-contract .note-row { font-style: italic; }
|
||||
.fc-contract .totals-table { border: 1px solid #000; border-collapse: collapse; }
|
||||
.fc-contract .totals-table td { border: 1px solid #000; padding: 4px 6px; }
|
||||
|
||||
/* Two-column layout for terms */
|
||||
.fc-contract .terms-container { column-count: 2; column-gap: 20px; margin-top: 8px; }
|
||||
.fc-contract .term-section { break-inside: avoid; margin-bottom: 6px; }
|
||||
|
||||
/* Declaration */
|
||||
.fc-contract .declaration { margin-top: 12px; padding: 8px; background-color: #fff8e1; border: 2px solid #ffc107; }
|
||||
.fc-contract .declaration-title { font-weight: bold; font-size: 9pt; text-align: center; margin-bottom: 5px; }
|
||||
.fc-contract .declaration-text { font-size: 8pt; text-align: center; font-weight: bold; }
|
||||
|
||||
/* Clean signature layout */
|
||||
.fc-contract .signatures-container { margin-top: 15px; }
|
||||
.fc-contract .sig-row { display: table; width: 100%; margin-bottom: 20px; }
|
||||
.fc-contract .sig-col { display: table-cell; width: 48%; vertical-align: top; }
|
||||
.fc-contract .sig-spacer { display: table-cell; width: 4%; }
|
||||
.fc-contract .sig-title { font-weight: bold; font-size: 9pt; color: #0066a1; margin-bottom: 8px; border-bottom: 2px solid #0066a1; padding-bottom: 3px; }
|
||||
.fc-contract .sig-field { margin-bottom: 12px; }
|
||||
.fc-contract .sig-line { border-bottom: 1px solid #000; min-height: 25px; }
|
||||
.fc-contract .sig-label { font-size: 7pt; color: #666; margin-top: 2px; }
|
||||
</style>
|
||||
|
||||
<div class="fc-contract">
|
||||
<div class="page">
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- PAGE 1: CONTRACT DETAILS -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<!-- Document Title -->
|
||||
<h4>Accessibility Contract <span t-field="doc.name"/></h4>
|
||||
|
||||
<!-- Address Table -->
|
||||
<table class="bordered" style="margin-bottom: 8px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">BILLING ADDRESS</th>
|
||||
<th style="width: 50%;">INSTALLATION ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 50px;">
|
||||
<div t-field="doc.partner_invoice_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 50px;">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Info Table -->
|
||||
<table class="bordered" style="margin-bottom: 8px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="info-header" style="width: 25%;">CONTRACT DATE</th>
|
||||
<th class="info-header" style="width: 25%;">VALID UNTIL</th>
|
||||
<th class="info-header" style="width: 25%;">SALESPERSON</th>
|
||||
<th class="info-header" style="width: 25%;">PAYMENT TERMS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.validity_date"><span t-field="doc.validity_date"/></t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center"><span t-field="doc.user_id"/></td>
|
||||
<td class="text-center"><span t-esc="doc.payment_term_id.name or '-'"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Lines Table -->
|
||||
<table class="bordered" style="margin-bottom: 8px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 12%;">CODE</th>
|
||||
<th style="width: 43%;">DESCRIPTION</th>
|
||||
<th class="text-center" style="width: 8%;">QTY</th>
|
||||
<th class="text-center" style="width: 12%;">UNIT PRICE</th>
|
||||
<th class="text-center" style="width: 10%;">TAX</th>
|
||||
<th class="text-center" style="width: 15%;">AMOUNT</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td colspan="6"><span t-field="line.name"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td colspan="6"><span t-field="line.name"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-elif="not line.display_type">
|
||||
<tr>
|
||||
<td class="text-center"><span t-esc="line.product_id.default_code or ''"/></td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in line.name">
|
||||
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="int(line.product_uom_qty) if line.product_uom_qty == int(line.product_uom_qty) else line.product_uom_qty"/>
|
||||
</td>
|
||||
<td class="text-end"><span t-field="line.price_unit"/></td>
|
||||
<td class="text-center">
|
||||
<t t-esc="', '.join([(tax.invoice_label or tax.name) for tax in line.tax_ids]) or '-'"/>
|
||||
</td>
|
||||
<td class="text-end"><span t-field="line.price_subtotal"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Totals - Right Aligned -->
|
||||
<table style="width: 100%; margin-bottom: 10px;">
|
||||
<tr>
|
||||
<td style="width: 60%; vertical-align: top;">
|
||||
<t t-if="doc.payment_term_id.note">
|
||||
<strong>Payment Terms:</strong> <span t-field="doc.payment_term_id.note"/>
|
||||
</t>
|
||||
</td>
|
||||
<td style="width: 40%;">
|
||||
<table class="totals-table" style="width: 100%;">
|
||||
<tr>
|
||||
<td>Subtotal</td>
|
||||
<td class="text-end"><span t-field="doc.amount_untaxed"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Taxes</td>
|
||||
<td class="text-end"><span t-field="doc.amount_tax"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>TOTAL</strong></td>
|
||||
<td class="text-end"><strong><span t-field="doc.amount_total"/></strong></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Notes if any -->
|
||||
<t t-if="doc.note">
|
||||
<div style="margin-bottom: 8px; padding: 5px; background-color: #f9f9f9; border: 1px solid #ddd; font-size: 8pt;">
|
||||
<strong>Notes:</strong> <span t-field="doc.note"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- TERMS AND CONDITIONS - TWO COLUMN LAYOUT -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<h1 style="font-size: 11pt; margin: 10px 0 5px 0;">ACCESSIBILITY CONTRACT TERMS AND CONDITIONS</h1>
|
||||
|
||||
<div class="intro">
|
||||
<p>This Accessibility Contract ("Contract") is between <strong><t t-esc="company.name"/></strong> ("Company") and the Customer for the purchase, delivery, and installation of accessibility equipment including Stairlifts, Platform Lifts, Ceiling Lifts, Ramps, and Door Openers.</p>
|
||||
</div>
|
||||
|
||||
<div class="terms-container">
|
||||
|
||||
<div class="term-section">
|
||||
<h2>1. Scope of Contract</h2>
|
||||
<p>This Contract governs the sale, delivery, installation, and ownership of the equipment specified. By signing, the Customer agrees to all terms herein.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>2. Delivery</h2>
|
||||
<p>The Company will make reasonable efforts to deliver as agreed. Delivery dates are estimates, not guarantees. The Company is not liable for delays. The Customer cannot cancel due to delays unless agreed in writing.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>3. Deposits</h2>
|
||||
<p>A deposit of <strong>70%</strong> of total value (or as specified) is required at order. Upon receipt, equipment preparation begins. If cancelled, the Company may recover all costs incurred including materials, labor, and administrative expenses.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>4. Power Supply</h2>
|
||||
<p>The Customer must ensure a suitable power source is available at the installation site. Electrical outlet installation is not included unless stated in the order.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>5. Concrete Work (Porch Lifts)</h2>
|
||||
<p>For Porch Lifts requiring a concrete base, the Company provides specifications. Unless agreed otherwise, the Customer arranges and pays for concrete work. The Company is not liable for issues from third-party concrete work.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>6. Ownership and Title</h2>
|
||||
<p>Title remains with the Company until full payment. The Company may reclaim equipment upon non-payment or breach of this Contract.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>7. Warranty</h2>
|
||||
<p>Equipment is covered by limited warranty as specified. Warranty excludes: accidental damages, normal wear and tear, damages from misuse or lack of maintenance. Claims must be in writing.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>8. Returns and Refunds</h2>
|
||||
<p>Once submitted for production, orders are final and non-refundable. No returns permitted. Post-submission modifications incur additional charges at Company's discretion.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>9. Liability</h2>
|
||||
<p>The Company is not liable for injuries or damages from: misuse, unauthorized modifications, failure to follow instructions, lack of maintenance, or use beyond intended purpose. Customer indemnifies Company from related claims.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>10. Indemnification</h2>
|
||||
<p>Customer indemnifies Company from claims arising from installation site conditions including structural issues, electrical faults, or inadequate site preparation.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>11. Buying Back Goods</h2>
|
||||
<p>The Company does not buy back goods unless explicitly agreed in writing.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>12. Force Majeure</h2>
|
||||
<p>Company is not liable for delays from events beyond control: natural disasters, strikes, supply chain disruptions, or governmental actions.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>13. Entire Agreement</h2>
|
||||
<p>This Contract constitutes the entire understanding and supersedes all prior agreements, written or oral.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>14. Governing Law</h2>
|
||||
<p>This Contract is governed by laws of the jurisdiction where the Company operates.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>15. Acceptance</h2>
|
||||
<p>By signing, Customer acknowledges reading, understanding, and agreeing to all terms and conditions.</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Declaration -->
|
||||
<div class="declaration">
|
||||
<div class="declaration-title">CUSTOMER DECLARATION</div>
|
||||
<div class="declaration-text">
|
||||
I HAVE READ, UNDERSTOOD AND AGREE TO ALL CONDITIONS SET FORTH IN THIS ACCESSIBILITY CONTRACT AND AGREE TO PAY THE AMOUNT OWED TO <t t-esc="company.name.upper()"/> AS SPECIFIED.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Clean Signature Section - Side by Side -->
|
||||
<div class="signatures-container">
|
||||
<div class="sig-row">
|
||||
<!-- Customer Signature -->
|
||||
<div class="sig-col">
|
||||
<div class="sig-title">CUSTOMER</div>
|
||||
<div class="sig-field">
|
||||
<div class="sig-line"></div>
|
||||
<div class="sig-label">Full Name (Print)</div>
|
||||
</div>
|
||||
<div class="sig-field">
|
||||
<div class="sig-line"></div>
|
||||
<div class="sig-label">Signature</div>
|
||||
</div>
|
||||
<div class="sig-field">
|
||||
<div class="sig-line" style="width: 50%;"></div>
|
||||
<div class="sig-label">Date</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sig-spacer"></div>
|
||||
|
||||
<!-- Company Representative Signature -->
|
||||
<div class="sig-col">
|
||||
<div class="sig-title">FOR <t t-esc="company.name.upper()"/></div>
|
||||
<div class="sig-field">
|
||||
<div class="sig-line"></div>
|
||||
<div class="sig-label">Authorized Representative Name (Print)</div>
|
||||
</div>
|
||||
<div class="sig-field">
|
||||
<div class="sig-line"></div>
|
||||
<div class="sig-label">Signature</div>
|
||||
</div>
|
||||
<div class="sig-field">
|
||||
<div class="sig-line" style="width: 50%;"></div>
|
||||
<div class="sig-label">Date</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
184
fusion_claims/report/report_actions.xml
Normal file
184
fusion_claims/report/report_actions.xml
Normal file
@@ -0,0 +1,184 @@
|
||||
<?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>
|
||||
<!-- Landscape Paper Format -->
|
||||
<record id="paperformat_a4_landscape" model="report.paperformat">
|
||||
<field name="name">A4 Landscape (Fusion Central)</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="format">A4</field>
|
||||
<field name="orientation">Landscape</field>
|
||||
<field name="margin_top">20</field>
|
||||
<field name="margin_bottom">20</field>
|
||||
<field name="margin_left">7</field>
|
||||
<field name="margin_right">7</field>
|
||||
<field name="header_line" eval="False"/>
|
||||
<field name="header_spacing">20</field>
|
||||
<field name="dpi">90</field>
|
||||
</record>
|
||||
|
||||
<!-- Sale Order / Quotation Reports - Only Portrait -->
|
||||
<record id="action_report_saleorder_portrait" model="ir.actions.report">
|
||||
<field name="name">Quotation / Order (Portrait)</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_saleorder_portrait</field>
|
||||
<field name="report_file">fusion_claims.report_saleorder_portrait</field>
|
||||
<field name="print_report_name">(object.state in ('draft', 'sent') and 'Quotation - %s' % object.name) or 'Order - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- Landscape report - REMOVED FROM MENU (no binding) -->
|
||||
<record id="action_report_saleorder_landscape" model="ir.actions.report">
|
||||
<field name="name">Quotation / Order (Landscape - ADP)</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_saleorder_landscape</field>
|
||||
<field name="report_file">fusion_claims.report_saleorder_landscape</field>
|
||||
<field name="print_report_name">'%s - %s' % (object.name, object.partner_id.name)</field>
|
||||
<!-- No binding_model_id - removed from print menu -->
|
||||
<field name="binding_type">report</field>
|
||||
<field name="paperformat_id" ref="paperformat_a4_landscape"/>
|
||||
</record>
|
||||
|
||||
<!-- Invoice Reports -->
|
||||
<record id="action_report_invoice_portrait" model="ir.actions.report">
|
||||
<field name="name">Invoice (Portrait)</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_invoice_portrait</field>
|
||||
<field name="report_file">fusion_claims.report_invoice_portrait</field>
|
||||
<field name="print_report_name">'Invoice - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="account.model_account_move"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- Landscape Invoice - REMOVED FROM MENU (no binding) -->
|
||||
<record id="action_report_invoice_landscape" model="ir.actions.report">
|
||||
<field name="name">Invoice (Landscape - ADP)</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_invoice_landscape</field>
|
||||
<field name="report_file">fusion_claims.report_invoice_landscape</field>
|
||||
<field name="print_report_name">'Invoice - %s' % object.name</field>
|
||||
<!-- No binding_model_id - removed from print menu -->
|
||||
<field name="binding_type">report</field>
|
||||
<field name="paperformat_id" ref="paperformat_a4_landscape"/>
|
||||
</record>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- ADP Proof of Delivery Report -->
|
||||
<!-- =============================================================== -->
|
||||
<record id="action_report_proof_of_delivery" model="ir.actions.report">
|
||||
<field name="name">ADP Proof of Delivery</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_proof_of_delivery</field>
|
||||
<field name="report_file">fusion_claims.report_proof_of_delivery</field>
|
||||
<field name="print_report_name">'ADP Proof of Delivery - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- Standard Proof of Delivery Report -->
|
||||
<!-- =============================================================== -->
|
||||
<record id="action_report_proof_of_delivery_standard" model="ir.actions.report">
|
||||
<field name="name">Proof of Delivery</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_proof_of_delivery_standard</field>
|
||||
<field name="report_file">fusion_claims.report_proof_of_delivery_standard</field>
|
||||
<field name="print_report_name">'Proof of Delivery - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- Proof of Pickup Report (for rental returns) -->
|
||||
<!-- =============================================================== -->
|
||||
<record id="action_report_proof_of_pickup" model="ir.actions.report">
|
||||
<field name="name">Proof of Pickup</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_proof_of_pickup</field>
|
||||
<field name="report_file">fusion_claims.report_proof_of_pickup</field>
|
||||
<field name="print_report_name">'Proof of Pickup - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- Rental Agreement Report -->
|
||||
<!-- =============================================================== -->
|
||||
<record id="action_report_rental_agreement" model="ir.actions.report">
|
||||
<field name="name">Rental Agreement</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_rental_agreement</field>
|
||||
<field name="report_file">fusion_claims.report_rental_agreement</field>
|
||||
<field name="print_report_name">'Rental Agreement - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- Grab Bar Installation Waiver Report -->
|
||||
<!-- =============================================================== -->
|
||||
<record id="action_report_grab_bar_waiver" model="ir.actions.report">
|
||||
<field name="name">Grab Bar Installation Waiver</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_grab_bar_waiver</field>
|
||||
<field name="report_file">fusion_claims.report_grab_bar_waiver</field>
|
||||
<field name="print_report_name">'Grab Bar Waiver - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- Accessibility Equipment Contract Report -->
|
||||
<!-- =============================================================== -->
|
||||
<record id="action_report_accessibility_contract" model="ir.actions.report">
|
||||
<field name="name">Accessibility Equipment Contract</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_accessibility_contract</field>
|
||||
<field name="report_file">fusion_claims.report_accessibility_contract</field>
|
||||
<field name="print_report_name">'Accessibility Contract - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- March of Dimes Quotation Report -->
|
||||
<!-- =============================================================== -->
|
||||
<record id="action_report_mod_quotation" model="ir.actions.report">
|
||||
<field name="name">March of Dimes Quotation</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_mod_quotation</field>
|
||||
<field name="report_file">fusion_claims.report_mod_quotation</field>
|
||||
<field name="print_report_name">'MOD Quotation - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- March of Dimes Invoice Report -->
|
||||
<!-- =============================================================== -->
|
||||
<record id="action_report_mod_invoice" model="ir.actions.report">
|
||||
<field name="name">March of Dimes Invoice</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fusion_claims.report_mod_invoice</field>
|
||||
<field name="report_file">fusion_claims.report_mod_invoice</field>
|
||||
<field name="print_report_name">'MOD Invoice - %s' % object.name</field>
|
||||
<field name="binding_model_id" ref="account.model_account_move"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
</odoo>
|
||||
184
fusion_claims/report/report_grab_bar_waiver.xml
Normal file
184
fusion_claims/report/report_grab_bar_waiver.xml
Normal file
@@ -0,0 +1,184 @@
|
||||
<?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.
|
||||
Grab Bar Installation Waiver and Liability Release Agreement
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_grab_bar_waiver">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<t t-set="company" t-value="doc.company_id"/>
|
||||
|
||||
<style>
|
||||
.fc-waiver { font-family: Arial, sans-serif; font-size: 10pt; line-height: 1.5; }
|
||||
.fc-waiver h1 { color: #0066a1; font-size: 16pt; text-align: center; margin: 10px 0 20px 0; }
|
||||
.fc-waiver h2 { color: #333; font-size: 11pt; margin: 15px 0 8px 0; }
|
||||
.fc-waiver p { margin: 8px 0; text-align: justify; }
|
||||
.fc-waiver .intro { margin-bottom: 15px; font-style: italic; }
|
||||
.fc-waiver .section { margin-bottom: 15px; }
|
||||
.fc-waiver .section-title { font-weight: bold; font-size: 10pt; margin-bottom: 5px; }
|
||||
.fc-waiver .subsection { margin-left: 20px; margin-bottom: 8px; }
|
||||
.fc-waiver .subsection-title { font-weight: bold; }
|
||||
.fc-waiver .signature-section { margin-top: 30px; }
|
||||
.fc-waiver .signature-box { border: 1px solid #000; padding: 20px; margin-top: 15px; }
|
||||
.fc-waiver .signature-line { border-bottom: 1px solid #000; min-height: 40px; margin-bottom: 5px; }
|
||||
.fc-waiver .signature-label { font-size: 9pt; color: #666; margin-bottom: 20px; }
|
||||
.fc-waiver .acknowledgment { font-size: 9pt; margin: 20px 0; padding: 10px; background-color: #fff8e1; border-left: 3px solid #ffc107; }
|
||||
.fc-waiver table { width: 100%; border-collapse: collapse; }
|
||||
.fc-waiver .info-table td { padding: 5px 10px; }
|
||||
.fc-waiver .info-table th { background-color: #f5f5f5; color: #333; text-align: left; padding: 5px 10px; width: 30%; }
|
||||
</style>
|
||||
|
||||
<div class="fc-waiver">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h1>GRAB BAR INSTALLATION WAIVER AND LIABILITY RELEASE AGREEMENT</h1>
|
||||
|
||||
<!-- Introduction -->
|
||||
<div class="intro">
|
||||
<p>This Waiver and Release Agreement ("Agreement") is entered into by and between the undersigned customer ("Customer") and <t t-esc="company.name"/> ("Installer") as of the date of signature below. By signing this Agreement, the Customer acknowledges and agrees to the following terms and conditions:</p>
|
||||
</div>
|
||||
|
||||
<!-- Customer Information -->
|
||||
<table class="info-table" style="border: 1px solid #ccc; margin-bottom: 20px;">
|
||||
<tr>
|
||||
<th style="border: 1px solid #ccc;">Customer Name</th>
|
||||
<td style="border: 1px solid #ccc;"><t t-esc="doc.partner_id.name"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="border: 1px solid #ccc;">Address</th>
|
||||
<td style="border: 1px solid #ccc;">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="border: 1px solid #ccc;">Order Reference</th>
|
||||
<td style="border: 1px solid #ccc;"><t t-esc="doc.name"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Section 1: Scope of Work -->
|
||||
<div class="section">
|
||||
<div class="section-title">1. Scope of Work</div>
|
||||
<p>The Installer agrees to install grab bars as per the Customer's request. The Customer understands and acknowledges that the installation process may involve drilling into walls, tiles, or other surfaces, and the Installer will take reasonable care to perform the work professionally.</p>
|
||||
</div>
|
||||
|
||||
<!-- Section 2: Liability Waiver -->
|
||||
<div class="section">
|
||||
<div class="section-title">2. Liability Waiver</div>
|
||||
<p>To the fullest extent permitted by law, the Customer agrees to release, waive, and hold harmless the Installer, its employees, agents, and subcontractors from any and all liability, claims, demands, damages, or causes of action arising from or related to the installation of grab bars, including but not limited to:</p>
|
||||
|
||||
<div class="subsection">
|
||||
<p><span class="subsection-title">a. Water Leaks</span><br/>
|
||||
The Installer is not responsible for any water leaks that may occur in the wall or plumbing as a result of the installation process.</p>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<p><span class="subsection-title">b. Rust or Corrosion</span><br/>
|
||||
The Installer is not liable for any rust, corrosion, or degradation of the grab bars over time due to environmental factors or improper maintenance.</p>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<p><span class="subsection-title">c. Falls or Misuse</span><br/>
|
||||
The Installer is not responsible for any injuries, falls, or accidents resulting from the misuse or improper use of the grab bars after installation.</p>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<p><span class="subsection-title">d. Change of Mind</span><br/>
|
||||
The Customer acknowledges that once the grab bars are installed, no refunds or returns will be provided under any circumstance.</p>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<p><span class="subsection-title">e. Tile Damage</span><br/>
|
||||
The Installer is not responsible for any cracks, chips, or other damage to tiles or grout during the installation process.</p>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<p><span class="subsection-title">f. Plumbing Damage</span><br/>
|
||||
The Installer is not liable for any damage to plumbing or hidden pipes within the wall during the installation process.</p>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<p><span class="subsection-title">g. Structural Damage</span><br/>
|
||||
The Installer is not responsible for any structural damage to the house, including but not limited to damage to walls, floors, or support structures.</p>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<p><span class="subsection-title">h. Floor Damage</span><br/>
|
||||
The Installer is not liable for any damage to flooring that may occur during the installation process.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Section 3: Order Cancellation Policy -->
|
||||
<div class="section">
|
||||
<div class="section-title">3. Order Cancellation Policy</div>
|
||||
<p>The Customer may cancel the order at any time <strong>before installation begins</strong> without incurring additional charges, except for any applicable delivery fees.</p>
|
||||
<p>If the Installer has already arrived at the installation location and the Customer decides to cancel the order, the Customer agrees to pay a delivery & installation fee.</p>
|
||||
</div>
|
||||
|
||||
<!-- Section 4: No Warranties -->
|
||||
<div class="section">
|
||||
<div class="section-title">4. No Warranties</div>
|
||||
<p>The Installer provides no warranties, express or implied, regarding the quality, durability, or fitness of the grab bars or the installation process. The grab bars are installed "as is" and at the Customer's own risk.</p>
|
||||
</div>
|
||||
|
||||
<!-- Section 5: Indemnification -->
|
||||
<div class="section">
|
||||
<div class="section-title">5. Indemnification</div>
|
||||
<p>The Customer agrees to indemnify and hold harmless the Installer, its employees, agents, and subcontractors from any claims, damages, or expenses (including attorney's fees) arising from or related to the installation of grab bars.</p>
|
||||
</div>
|
||||
|
||||
<!-- Section 6: Acknowledgement -->
|
||||
<div class="section">
|
||||
<div class="section-title">6. Acknowledgement</div>
|
||||
<p>By signing this Agreement, the Customer acknowledges that they have read, understood, and agreed to all terms and conditions outlined above. The Customer further acknowledges that they have had the opportunity to ask questions regarding the installation process and the terms of this Agreement.</p>
|
||||
</div>
|
||||
|
||||
<!-- Section 7: Governing Law -->
|
||||
<div class="section">
|
||||
<div class="section-title">7. Governing Law</div>
|
||||
<p>This Agreement shall be governed by and construed in accordance with the laws of the Province of Ontario.</p>
|
||||
</div>
|
||||
|
||||
<!-- Acknowledgment Box -->
|
||||
<div class="acknowledgment">
|
||||
<p style="margin: 0;"><strong>By signing this form, I acknowledge that I have read the waiver agreement and understand the terms and conditions set forth herein.</strong></p>
|
||||
</div>
|
||||
|
||||
<!-- Signature Section -->
|
||||
<div class="signature-section">
|
||||
<div class="signature-box">
|
||||
<table style="width: 100%; border: none;">
|
||||
<tr>
|
||||
<td style="width: 60%; padding: 15px; border: none;">
|
||||
<div class="signature-label">FULL NAME (PRINT)</div>
|
||||
<div class="signature-line"></div>
|
||||
</td>
|
||||
<td style="width: 40%; padding: 15px; border: none;">
|
||||
<div class="signature-label">DATE</div>
|
||||
<div class="signature-line"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" style="padding: 15px; border: none;">
|
||||
<div class="signature-label">SIGNATURE</div>
|
||||
<div class="signature-line" style="min-height: 60px;"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
1
fusion_claims/report/report_invoice_adp.xml
Normal file
1
fusion_claims/report/report_invoice_adp.xml
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
221
fusion_claims/report/report_mod_invoice.xml
Normal file
221
fusion_claims/report/report_mod_invoice.xml
Normal file
@@ -0,0 +1,221 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Fusion Claims - March of Dimes Invoice Report
|
||||
Meets PCA invoice requirements:
|
||||
- Billed to March of Dimes Canada
|
||||
- Vendor name, address, HST Number
|
||||
- Client details (delivery address)
|
||||
- Approved devices/equipment list with sections and notes
|
||||
- HVMP contribution amount with taxes
|
||||
- HVMP Reference Number
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_mod_invoice">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<!-- Get sale order for MOD fields -->
|
||||
<t t-set="so" t-value="doc.x_fc_source_sale_order_id"/>
|
||||
|
||||
<style>
|
||||
.fc-mod-inv { font-family: Arial, sans-serif; font-size: 10pt; }
|
||||
.fc-mod-inv table { width: 100%; border-collapse: collapse; margin-bottom: 10px; }
|
||||
.fc-mod-inv table.bordered, .fc-mod-inv table.bordered th, .fc-mod-inv table.bordered td { border: 1px solid #000; }
|
||||
.fc-mod-inv th { background-color: #1a5276; color: white; padding: 6px 8px; font-weight: bold; text-align: center; }
|
||||
.fc-mod-inv td { padding: 6px 8px; vertical-align: top; }
|
||||
.fc-mod-inv .text-center { text-align: center; }
|
||||
.fc-mod-inv .text-end { text-align: right; }
|
||||
.fc-mod-inv .text-start { text-align: left; }
|
||||
.fc-mod-inv .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-mod-inv .note-row { font-style: italic; color: #555; font-size: 9pt; }
|
||||
.fc-mod-inv h4 { color: #1a5276; margin: 0 0 15px 0; font-size: 16pt; }
|
||||
.fc-mod-inv .req-box { border: 2px solid #1a5276; padding: 8px 12px; margin: 6px 0; background-color: #fafafa; }
|
||||
</style>
|
||||
|
||||
<div class="fc-mod-inv">
|
||||
<div class="page">
|
||||
|
||||
<!-- Title -->
|
||||
<h4>
|
||||
INVOICE <span t-field="doc.name"/>
|
||||
</h4>
|
||||
|
||||
<!-- Billed To / Vendor Info -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">BILLED TO</th>
|
||||
<th style="width: 50%;">VENDOR</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 80px; font-size: 11pt;">
|
||||
<div t-field="doc.partner_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 80px; font-size: 11pt;">
|
||||
<strong t-field="doc.company_id.name"/><br/>
|
||||
<span t-if="doc.company_id.street" t-field="doc.company_id.street"/><br/>
|
||||
<t t-if="doc.company_id.street2">
|
||||
<span t-field="doc.company_id.street2"/><br/>
|
||||
</t>
|
||||
<span t-if="doc.company_id.city" t-field="doc.company_id.city"/>,
|
||||
<span t-if="doc.company_id.state_id" t-field="doc.company_id.state_id.name"/>
|
||||
<span t-if="doc.company_id.zip" t-field="doc.company_id.zip"/><br/>
|
||||
<t t-if="doc.company_id.vat">
|
||||
<strong>HST #:</strong> <span t-field="doc.company_id.vat"/>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Client (Delivery Address) and HVMP Details -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">DELIVERY ADDRESS (CLIENT)</th>
|
||||
<th style="width: 50%;">HVMP REFERENCE</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-size: 11pt;">
|
||||
<div t-if="doc.partner_shipping_id" t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
<div t-elif="so" t-field="so.partner_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="font-size: 11pt;">
|
||||
<t t-if="so and so.x_fc_case_reference">
|
||||
<strong>HVMP Ref #:</strong>
|
||||
<span t-esc="so.x_fc_case_reference"/><br/>
|
||||
</t>
|
||||
<strong>Invoice Date:</strong>
|
||||
<span t-field="doc.invoice_date" t-options="{'widget': 'date'}"/><br/>
|
||||
<strong>Sale Order:</strong>
|
||||
<span t-if="so" t-esc="so.name"/>
|
||||
<span t-if="not so">-</span><br/>
|
||||
<t t-if="so and so.x_fc_case_worker">
|
||||
<strong>Case Worker:</strong>
|
||||
<span t-esc="so.x_fc_case_worker.name"/><br/>
|
||||
</t>
|
||||
<t t-if="so and so.x_fc_mod_payment_commitment">
|
||||
<strong>Payment Commitment:</strong>
|
||||
<span t-esc="'${:,.2f}'.format(so.x_fc_mod_payment_commitment)"/>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Approved Equipment / Invoice Lines (including sections and notes) -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10%;">SKU</th>
|
||||
<th style="width: 35%;">APPROVED EQUIPMENT / DESCRIPTION</th>
|
||||
<th style="width: 8%;">QTY</th>
|
||||
<th style="width: 13%;">UNIT PRICE</th>
|
||||
<th style="width: 14%;">TAXES</th>
|
||||
<th style="width: 20%;">AMOUNT</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.invoice_line_ids.sorted('sequence')" t-as="line">
|
||||
<!-- Skip payment term lines -->
|
||||
<t t-if="line.display_type == 'payment_term'"/>
|
||||
<!-- Section lines -->
|
||||
<t t-elif="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td colspan="6" style="padding: 4px 8px;">
|
||||
<strong t-esc="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Note lines -->
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td colspan="6" style="padding: 2px 8px;">
|
||||
<em t-esc="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Product lines -->
|
||||
<t t-else="">
|
||||
<tr>
|
||||
<td class="text-center" style="font-size: 9pt;">
|
||||
<t t-if="line.product_id and line.product_id.default_code"
|
||||
t-esc="line.product_id.default_code"/>
|
||||
</td>
|
||||
<td>
|
||||
<strong t-if="line.product_id" t-esc="line.product_id.name"/>
|
||||
<t t-if="line.name and (not line.product_id or line.name != line.product_id.name)">
|
||||
<br t-if="line.product_id"/>
|
||||
<span t-esc="line.name" style="font-size: 9pt; color: #555;"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="line.quantity"/>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-field="line.price_unit"/>
|
||||
</td>
|
||||
<td class="text-center" style="font-size: 9pt;">
|
||||
<t t-foreach="line.tax_ids" t-as="tax">
|
||||
<span t-esc="tax.invoice_label or tax.name"/>
|
||||
<t t-if="not tax_last">, </t>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-field="line.price_subtotal"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Totals -->
|
||||
<div class="row">
|
||||
<div class="col-6"/>
|
||||
<div class="col-6">
|
||||
<table class="bordered">
|
||||
<tr>
|
||||
<td class="text-end" style="width: 60%;"><strong>Subtotal</strong></td>
|
||||
<td class="text-end" style="width: 40%;"><span t-field="doc.amount_untaxed"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-end">Taxes</td>
|
||||
<td class="text-end"><span t-field="doc.amount_tax"/></td>
|
||||
</tr>
|
||||
<tr style="font-size: 12pt;">
|
||||
<td class="text-end" style="background-color: #eaf2f8;">
|
||||
<strong>HVMP Contribution Amount</strong>
|
||||
</td>
|
||||
<td class="text-end" style="background-color: #eaf2f8;">
|
||||
<strong><span t-field="doc.amount_total"/></strong>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Payment Note -->
|
||||
<div class="req-box mt-3">
|
||||
<strong>Payment Schedule (as per PCA):</strong>
|
||||
<ul style="margin: 4px 0 0 0;">
|
||||
<li>Initial Payment (90%): Upon receipt of this invoice</li>
|
||||
<li>Final Payment (10%): Upon receipt of signed proof of delivery and installation</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
243
fusion_claims/report/report_mod_quotation.xml
Normal file
243
fusion_claims/report/report_mod_quotation.xml
Normal file
@@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Fusion Claims - March of Dimes Quotation Report
|
||||
Portrait format with estimated completion time
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_mod_quotation">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
|
||||
<style>
|
||||
.fc-mod { font-family: Arial, sans-serif; font-size: 10pt; }
|
||||
.fc-mod table { width: 100%; border-collapse: collapse; margin-bottom: 10px; }
|
||||
.fc-mod table.bordered, .fc-mod table.bordered th, .fc-mod table.bordered td { border: 1px solid #000; }
|
||||
.fc-mod th { background-color: #1a5276; color: white; padding: 6px 8px; font-weight: bold; text-align: center; }
|
||||
.fc-mod td { padding: 6px 8px; vertical-align: top; }
|
||||
.fc-mod .text-center { text-align: center; }
|
||||
.fc-mod .text-end { text-align: right; }
|
||||
.fc-mod .text-start { text-align: left; }
|
||||
.fc-mod .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-mod h4 { color: #1a5276; margin: 0 0 15px 0; font-size: 16pt; }
|
||||
.fc-mod .info-header { background-color: #eaf2f8; color: #333; }
|
||||
.fc-mod .mod-accent { color: #1a5276; font-weight: bold; }
|
||||
.fc-mod .highlight-box { border: 2px solid #1a5276; padding: 10px; margin: 10px 0; background-color: #eaf2f8; }
|
||||
</style>
|
||||
|
||||
<div class="fc-mod">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h4>
|
||||
March of Dimes Quotation
|
||||
<span t-field="doc.name"/>
|
||||
</h4>
|
||||
|
||||
<!-- Address Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">CLIENT</th>
|
||||
<th style="width: 50%;">SERVICE ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 70px; font-size: 11pt;">
|
||||
<div t-field="doc.partner_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 70px; font-size: 11pt;">
|
||||
<div t-if="doc.partner_shipping_id"
|
||||
t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
<div t-else=""
|
||||
t-field="doc.partner_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Info -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="info-header" style="width: 20%;">DATE</th>
|
||||
<th class="info-header" style="width: 20%;">SALESPERSON</th>
|
||||
<th class="info-header" style="width: 20%;">AUTHORIZER/OT</th>
|
||||
<th class="info-header" style="width: 20%;">PRODUCT TYPE</th>
|
||||
<th class="info-header" style="width: 20%;">EXPIRATION</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.user_id"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_authorizer_id" t-field="doc.x_fc_authorizer_id"/>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-set="prod_type_label" t-value="dict(doc._fields['x_fc_mod_product_type'].selection or []).get(doc.x_fc_mod_product_type, '-')"/>
|
||||
<span t-esc="prod_type_label"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.validity_date"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Estimated Completion -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="info-header" style="width: 50%;">EST. COMPLETION TIME</th>
|
||||
<th class="info-header" style="width: 50%;">EST. COMPLETION DATE</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_mod_estimated_weeks">
|
||||
<t t-esc="doc.x_fc_mod_estimated_weeks"/> weeks
|
||||
</span>
|
||||
<span t-else="">To be confirmed</span>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_estimated_completion_date"
|
||||
t-field="doc.x_fc_estimated_completion_date"
|
||||
t-options="{'widget': 'date'}"/>
|
||||
<span t-else="">To be confirmed</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Lines -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10%;">SKU</th>
|
||||
<th style="width: 35%;">DESCRIPTION</th>
|
||||
<th style="width: 8%;">QTY</th>
|
||||
<th style="width: 15%;">UNIT PRICE</th>
|
||||
<th style="width: 12%;">TAX</th>
|
||||
<th style="width: 20%;">AMOUNT</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<t t-if="not line.display_type">
|
||||
<tr>
|
||||
<td class="text-center" style="font-size: 9pt;">
|
||||
<t t-esc="line.product_id.default_code or '-'"/>
|
||||
</td>
|
||||
<td>
|
||||
<strong t-field="line.product_id.name"/>
|
||||
<br t-if="line.name and line.name != line.product_id.name"/>
|
||||
<span t-if="line.name and line.name != line.product_id.name"
|
||||
t-esc="line.name" style="font-size: 9pt; color: #555;"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="line.product_uom_qty"/>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-field="line.price_unit"/>
|
||||
</td>
|
||||
<td class="text-center" style="font-size: 9pt;">
|
||||
<t t-if="line.tax_ids">
|
||||
<t t-esc="', '.join(t.invoice_label or t.name for t in line.tax_ids)"/>
|
||||
</t>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-field="line.price_subtotal"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td colspan="6"><span t-field="line.name"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-if="line.display_type == 'line_note'">
|
||||
<tr>
|
||||
<td colspan="6" style="font-style: italic;">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Totals -->
|
||||
<div class="row">
|
||||
<div class="col-6"/>
|
||||
<div class="col-6">
|
||||
<table class="bordered">
|
||||
<tr>
|
||||
<td class="text-end" style="width: 60%;"><strong>Subtotal</strong></td>
|
||||
<td class="text-end" style="width: 40%;"><span t-field="doc.amount_untaxed"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-end">Taxes</td>
|
||||
<td class="text-end"><span t-field="doc.amount_tax"/></td>
|
||||
</tr>
|
||||
<tr style="font-size: 12pt;">
|
||||
<td class="text-end" style="background-color: #eaf2f8;">
|
||||
<strong>Total</strong>
|
||||
</td>
|
||||
<td class="text-end" style="background-color: #eaf2f8;">
|
||||
<strong><span t-field="doc.amount_total"/></strong>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Notes -->
|
||||
<div t-if="doc.note" class="mt-3">
|
||||
<strong>Notes:</strong>
|
||||
<div t-field="doc.note"/>
|
||||
</div>
|
||||
|
||||
<!-- Terms and Conditions -->
|
||||
<div class="mt-4" style="font-size: 9pt; color: #555;">
|
||||
<strong>Terms & Conditions:</strong>
|
||||
<ul style="margin-top: 4px;">
|
||||
<li>This quotation is valid for 30 days from the date above unless otherwise specified.</li>
|
||||
<li>All drawings must be signed and accepted by the client before production begins.</li>
|
||||
<li>Estimated completion time is subject to manufacturer lead times and weather conditions.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Signature Block -->
|
||||
<div class="row mt-5">
|
||||
<div class="col-6">
|
||||
<div style="border-top: 1px solid #000; padding-top: 4px; width: 80%;">
|
||||
Client Signature / Date
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div style="border-top: 1px solid #000; padding-top: 4px; width: 80%;">
|
||||
Authorized Representative / Date
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
303
fusion_claims/report/report_proof_of_delivery.xml
Normal file
303
fusion_claims/report/report_proof_of_delivery.xml
Normal file
@@ -0,0 +1,303 @@
|
||||
<?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.
|
||||
ADP Proof of Delivery Document
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_proof_of_delivery">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<t t-set="is_adp" t-value="doc.x_fc_is_adp_sale"/>
|
||||
|
||||
<style>
|
||||
.fc-pod { font-family: Arial, sans-serif; font-size: 10pt; }
|
||||
.fc-pod table { width: 100%; border-collapse: collapse; margin-bottom: 10px; }
|
||||
.fc-pod table.bordered, .fc-pod table.bordered th, .fc-pod table.bordered td { border: 1px solid #000; }
|
||||
.fc-pod th { background-color: #0066a1; color: white; padding: 6px 8px; font-weight: bold; font-size: 9pt; }
|
||||
.fc-pod td { padding: 5px 6px; vertical-align: top; font-size: 9pt; }
|
||||
.fc-pod .text-center { text-align: center; }
|
||||
.fc-pod .text-end { text-align: right; }
|
||||
.fc-pod .text-start { text-align: left; }
|
||||
.fc-pod .adp-bg { background-color: #e3f2fd; }
|
||||
.fc-pod .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-pod .note-row { font-style: italic; }
|
||||
.fc-pod h2 { color: #0066a1; margin: 8px 0; font-size: 16pt; }
|
||||
.fc-pod .info-table td { padding: 6px 10px; font-size: 10pt; }
|
||||
.fc-pod .info-table th { background-color: #f5f5f5; color: #333; font-size: 9pt; padding: 5px 10px; }
|
||||
.fc-pod .signature-section { margin-top: 20px; border: 1px solid #000; padding: 15px; }
|
||||
.fc-pod .signature-line { border-bottom: 1px solid #000; min-height: 30px; margin-bottom: 5px; }
|
||||
.fc-pod .signature-label { font-size: 8pt; color: #666; margin-bottom: 15px; }
|
||||
.fc-pod .policy-section { font-size: 8pt; margin-top: 15px; padding: 10px; background-color: #f9f9f9; border: 1px solid #ddd; }
|
||||
.fc-pod .policy-title { font-weight: bold; font-size: 9pt; margin-bottom: 5px; }
|
||||
.fc-pod .acknowledgment { font-size: 9pt; margin: 15px 0; padding: 10px; background-color: #fff8e1; border-left: 3px solid #ffc107; }
|
||||
</style>
|
||||
|
||||
<div class="fc-pod">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h2 style="text-align: center; margin-bottom: 15px;">
|
||||
ADP PROOF OF DELIVERY
|
||||
</h2>
|
||||
|
||||
<!-- Order Reference -->
|
||||
<div style="text-align: center; margin-bottom: 15px; font-size: 11pt;">
|
||||
<strong>Order Reference:</strong> <span t-field="doc.name"/>
|
||||
<t t-if="doc.x_fc_claim_number">
|
||||
<span style="margin-left: 30px;"><strong>Claim Number:</strong> <span t-esc="doc.x_fc_claim_number"/></span>
|
||||
</t>
|
||||
</div>
|
||||
|
||||
<!-- Customer Info Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">CUSTOMER INFORMATION</th>
|
||||
<th style="width: 50%;">DELIVERY ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 60px; font-size: 10pt;">
|
||||
<div t-field="doc.partner_invoice_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 60px; font-size: 10pt;">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Info Table -->
|
||||
<table class="bordered info-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ORDER DATE</th>
|
||||
<th>DELIVERY DATE</th>
|
||||
<th>CLIENT TYPE</th>
|
||||
<th>SALES REP</th>
|
||||
<th>AUTHORIZER</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.x_fc_adp_delivery_date">
|
||||
<span t-field="doc.x_fc_adp_delivery_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_client_type or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.user_id"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_authorizer_id" t-field="doc.x_fc_authorizer_id"/>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Products Delivered Table (NO PRICES) -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 12%;">ADP CODE</th>
|
||||
<th class="text-start" style="width: 40%;">DESCRIPTION</th>
|
||||
<th class="text-center" style="width: 15%;">SERIAL #</th>
|
||||
<th t-if="is_adp" class="text-center" style="width: 8%;">PLACEMENT</th>
|
||||
<th class="text-center" style="width: 8%;">QTY</th>
|
||||
<th class="text-center" style="width: 17%;">DEVICE TYPE</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<!-- Section Header -->
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td t-att-colspan="'6' if is_adp else '5'">
|
||||
<strong><span t-field="line.name"/></strong>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Note Line -->
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td t-att-colspan="'6' if is_adp else '5'">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Product Line -->
|
||||
<t t-elif="not line.display_type">
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="line.product_id.x_fc_adp_device_code"/>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in line.name">
|
||||
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.x_fc_serial_number or ''"/>
|
||||
</td>
|
||||
<td t-if="is_adp" class="text-center">
|
||||
<span t-esc="line.x_fc_device_placement or 'N/A'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="int(line.product_uom_qty) if line.product_uom_qty == int(line.product_uom_qty) else line.product_uom_qty"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.x_fc_adp_device_type or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Acknowledgment Section -->
|
||||
<div class="acknowledgment">
|
||||
<p style="margin: 0;">
|
||||
<strong>Full Refund Policy:</strong> <span t-out="doc.company_id.website or ''"/><t t-if="doc.company_id.website">/return-policy/</t>
|
||||
</p>
|
||||
<p style="margin: 10px 0 0 0;">
|
||||
By signing below, you are acknowledging that you had the opportunity to inspect the product and found it to be free from any reasonably discoverable defects. You are also agreeing that you had the opportunity to review the entire transaction and the refund policy on the back side of the page, and it has satisfactorily addressed any questions or concerns you had, and nothing has been promised to you that has not been put into writing. This Delivery Confirmation Form is hereby incorporated into this transaction.
|
||||
</p>
|
||||
<p style="margin: 10px 0 0 0; font-weight: bold; text-transform: uppercase;">
|
||||
I HAVE RECEIVED ALL OF THE PRODUCTS AND SERVICES PROMISED TO ME IN CONNECTION WITH THIS TRANSACTION AT THE TIME OF DELIVERY.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Signature Section -->
|
||||
<div class="signature-section">
|
||||
<t t-if="doc.x_fc_pod_signature">
|
||||
<!-- Captured Digital Signature -->
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="signature-label">PRINT NAME</div>
|
||||
<div class="signature-line" style="padding: 5px 0; font-size: 12pt; font-weight: bold;">
|
||||
<t t-esc="doc.x_fc_pod_client_name or ''"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="signature-label">DATE</div>
|
||||
<div class="signature-line" style="padding: 5px 0; font-size: 12pt;">
|
||||
<t t-if="doc.x_fc_pod_signature_date">
|
||||
<span t-field="doc.x_fc_pod_signature_date"/>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 20px;">
|
||||
<div class="signature-label">SIGNATURE</div>
|
||||
<div style="min-height: 60px; padding: 5px; border-bottom: 1px solid #000;">
|
||||
<img t-att-src="'data:image/png;base64,' + doc.x_fc_pod_signature.decode('utf-8')"
|
||||
style="max-height: 80px; max-width: 300px;"
|
||||
alt="Client Signature"/>
|
||||
</div>
|
||||
<t t-if="doc.x_fc_pod_signed_by_user_id">
|
||||
<div style="font-size: 7pt; color: #666; margin-top: 5px;">
|
||||
Collected by: <t t-esc="doc.x_fc_pod_signed_by_user_id.name"/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<!-- Empty signature lines for manual signing -->
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="signature-label">PRINT NAME</div>
|
||||
<div class="signature-line"></div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="signature-label">DATE</div>
|
||||
<div class="signature-line"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 20px;">
|
||||
<div class="signature-label">SIGNATURE</div>
|
||||
<div class="signature-line" style="min-height: 50px;"></div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
|
||||
<!-- Page Break for Policy -->
|
||||
<div style="page-break-before: always;"></div>
|
||||
|
||||
<!-- Refund Policy Page -->
|
||||
<h2 style="text-align: center; margin-bottom: 15px;">
|
||||
RETURN AND REFUND POLICY
|
||||
</h2>
|
||||
|
||||
<div class="policy-section" style="font-size: 9pt;">
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
<strong><t t-esc="doc.company_id.name"/></strong> does not accept any returns or refunds for custom-built orders or any modified products.
|
||||
</p>
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
The following policy applies to all <t t-esc="doc.company_id.name"/> customers:
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Change Order and Cancellation Policy</div>
|
||||
<p style="margin: 5px 0;">
|
||||
<t t-esc="doc.company_id.name"/> sells custom Mobility products according to customer specifications. Quote, and order acknowledgments must be reviewed for accuracy.
|
||||
</p>
|
||||
<p style="margin: 5px 0;">
|
||||
Customized, specially ordered, or fabricated mobility and accessibility devices are not returnable or eligible for a refund. We also do not accept returns or exchanges for items that have come in contact with the skin. This includes, but is not limited to, lift chairs, seating, and positioning products, including wheelchair cushions and back supports, TENS units, patient lifts, blood pressure units, breast pumps, bathroom safety items, pillows, bedding, and mattresses, bracing, and continence care products.
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Restocking Fees</div>
|
||||
<p style="margin: 5px 0;">
|
||||
Product or parts returns for warranty items (i.e. product defects) are subject to <t t-esc="doc.company_id.name"/>'s evaluation but not subject to a restocking fee.
|
||||
</p>
|
||||
<p style="margin: 5px 0;">
|
||||
<strong>30% Restocking Fee:</strong> Some products require a 30% restocking fee for returns. These include: Patient lifts, Hospital Beds, Transport Wheelchairs, Standard Rollators & Walkers
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Non-Returnable Items</div>
|
||||
<p style="margin: 5px 0;">
|
||||
There are certain products that are custom-made by the manufacturer and are non-returnable. These include:
|
||||
</p>
|
||||
<ul style="margin: 5px 0 5px 20px; padding: 0;">
|
||||
<li>Built to order items / Custom wheelchairs, Rigid ultra lightweight wheelchairs</li>
|
||||
<li>Type/Category 2, 3, 4 & 5 Wheelchair</li>
|
||||
<li>Tilt & Reclining wheelchairs</li>
|
||||
<li>Sports wheelchairs</li>
|
||||
<li>Custom Power Wheelchairs</li>
|
||||
<li>All Spare Parts</li>
|
||||
<li>Adaptive Strollers</li>
|
||||
<li>Geri chairs</li>
|
||||
<li>Custom-built lift chairs/Recliners, including those with upgraded fabrics, heat and massage, Power Pillow, footrest extension or left-hand control options are non-returnable.</li>
|
||||
<li>Custom-built stairlifts, porch-lifts, vertical platform lifts, custom ceiling lifts.</li>
|
||||
<li>Open-Box Items</li>
|
||||
<li>Wheelchair scales</li>
|
||||
</ul>
|
||||
<p style="margin: 5px 0;">
|
||||
<strong>For hygienic reasons, the following products are non-returnable:</strong> Bathroom Safety products, Incontinence products, Cushions and Backs
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
289
fusion_claims/report/report_proof_of_delivery_standard.xml
Normal file
289
fusion_claims/report/report_proof_of_delivery_standard.xml
Normal file
@@ -0,0 +1,289 @@
|
||||
<?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.
|
||||
Standard Proof of Delivery Document
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_proof_of_delivery_standard">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
|
||||
<style>
|
||||
.fc-pod { font-family: Arial, sans-serif; font-size: 10pt; }
|
||||
.fc-pod table { width: 100%; border-collapse: collapse; margin-bottom: 10px; }
|
||||
.fc-pod table.bordered, .fc-pod table.bordered th, .fc-pod table.bordered td { border: 1px solid #000; }
|
||||
.fc-pod th { background-color: #0066a1; color: white; padding: 6px 8px; font-weight: bold; font-size: 9pt; }
|
||||
.fc-pod td { padding: 5px 6px; vertical-align: top; font-size: 9pt; }
|
||||
.fc-pod .text-center { text-align: center; }
|
||||
.fc-pod .text-end { text-align: right; }
|
||||
.fc-pod .text-start { text-align: left; }
|
||||
.fc-pod .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-pod .note-row { font-style: italic; }
|
||||
.fc-pod h2 { color: #0066a1; margin: 8px 0; font-size: 16pt; }
|
||||
.fc-pod .info-table td { padding: 6px 10px; font-size: 10pt; }
|
||||
.fc-pod .info-table th { background-color: #f5f5f5; color: #333; font-size: 9pt; padding: 5px 10px; }
|
||||
.fc-pod .signature-section { margin-top: 20px; border: 1px solid #000; padding: 15px; }
|
||||
.fc-pod .signature-line { border-bottom: 1px solid #000; min-height: 30px; margin-bottom: 5px; }
|
||||
.fc-pod .signature-label { font-size: 8pt; color: #666; margin-bottom: 15px; }
|
||||
.fc-pod .policy-section { font-size: 8pt; margin-top: 15px; padding: 10px; background-color: #f9f9f9; border: 1px solid #ddd; }
|
||||
.fc-pod .policy-title { font-weight: bold; font-size: 9pt; margin-bottom: 5px; }
|
||||
.fc-pod .acknowledgment { font-size: 9pt; margin: 15px 0; padding: 10px; background-color: #fff8e1; border-left: 3px solid #ffc107; }
|
||||
</style>
|
||||
|
||||
<div class="fc-pod">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h2 style="text-align: center; margin-bottom: 15px;">
|
||||
PROOF OF DELIVERY
|
||||
</h2>
|
||||
|
||||
<!-- Order Reference -->
|
||||
<div style="text-align: center; margin-bottom: 15px; font-size: 11pt;">
|
||||
<strong>Order Reference:</strong> <span t-field="doc.name"/>
|
||||
</div>
|
||||
|
||||
<!-- Customer Info Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">CUSTOMER INFORMATION</th>
|
||||
<th style="width: 50%;">DELIVERY ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 60px; font-size: 10pt;">
|
||||
<div t-field="doc.partner_invoice_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 60px; font-size: 10pt;">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Info Table -->
|
||||
<table class="bordered info-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ORDER DATE</th>
|
||||
<th>DELIVERY DATE</th>
|
||||
<th>SALES REP</th>
|
||||
<th>AUTHORIZER</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.commitment_date">
|
||||
<span t-field="doc.commitment_date" t-options="{'widget': 'date'}"/>
|
||||
</t>
|
||||
<t t-elif="doc.x_fc_adp_delivery_date">
|
||||
<span t-field="doc.x_fc_adp_delivery_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.user_id"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_authorizer_id" t-field="doc.x_fc_authorizer_id"/>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Products Delivered Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 15%;">PRODUCT CODE</th>
|
||||
<th class="text-start" style="width: 50%;">DESCRIPTION</th>
|
||||
<th class="text-center" style="width: 20%;">SERIAL #</th>
|
||||
<th class="text-center" style="width: 15%;">QTY</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<!-- Section Header -->
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td colspan="4">
|
||||
<strong><span t-field="line.name"/></strong>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Note Line -->
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td colspan="4">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Product Line -->
|
||||
<t t-elif="not line.display_type">
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.product_id.default_code or ''"/>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in line.name">
|
||||
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.x_fc_serial_number or ''"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="int(line.product_uom_qty) if line.product_uom_qty == int(line.product_uom_qty) else line.product_uom_qty"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Acknowledgment Section -->
|
||||
<div class="acknowledgment">
|
||||
<p style="margin: 0;">
|
||||
<strong>Full Refund Policy:</strong> <span t-out="doc.company_id.website or ''"/><t t-if="doc.company_id.website">/return-policy/</t>
|
||||
</p>
|
||||
<p style="margin: 10px 0 0 0;">
|
||||
By signing below, you are acknowledging that you had the opportunity to inspect the product and found it to be free from any reasonably discoverable defects. You are also agreeing that you had the opportunity to review the entire transaction and the refund policy on the back side of the page, and it has satisfactorily addressed any questions or concerns you had, and nothing has been promised to you that has not been put into writing. This Delivery Confirmation Form is hereby incorporated into this transaction.
|
||||
</p>
|
||||
<p style="margin: 10px 0 0 0; font-weight: bold; text-transform: uppercase;">
|
||||
I HAVE RECEIVED ALL OF THE PRODUCTS AND SERVICES PROMISED TO ME IN CONNECTION WITH THIS TRANSACTION AT THE TIME OF DELIVERY.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Signature Section -->
|
||||
<div class="signature-section">
|
||||
<t t-if="doc.x_fc_pod_signature">
|
||||
<!-- Captured Digital Signature -->
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="signature-label">PRINT NAME</div>
|
||||
<div class="signature-line" style="padding: 5px 0; font-size: 12pt; font-weight: bold;">
|
||||
<t t-out="doc.x_fc_pod_client_name or ''"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="signature-label">DATE</div>
|
||||
<div class="signature-line" style="padding: 5px 0; font-size: 12pt;">
|
||||
<t t-if="doc.x_fc_pod_signature_date">
|
||||
<span t-field="doc.x_fc_pod_signature_date"/>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 20px;">
|
||||
<div class="signature-label">SIGNATURE</div>
|
||||
<div style="min-height: 60px; padding: 5px; border-bottom: 1px solid #000;">
|
||||
<img t-att-src="'data:image/png;base64,' + doc.x_fc_pod_signature.decode('utf-8')"
|
||||
style="max-height: 80px; max-width: 300px;"
|
||||
alt="Client Signature"/>
|
||||
</div>
|
||||
<t t-if="doc.x_fc_pod_signed_by_user_id">
|
||||
<div style="font-size: 7pt; color: #666; margin-top: 5px;">
|
||||
Collected by: <t t-out="doc.x_fc_pod_signed_by_user_id.name"/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<!-- Empty signature lines for manual signing -->
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="signature-label">PRINT NAME</div>
|
||||
<div class="signature-line"></div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="signature-label">DATE</div>
|
||||
<div class="signature-line"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 20px;">
|
||||
<div class="signature-label">SIGNATURE</div>
|
||||
<div class="signature-line" style="min-height: 50px;"></div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
|
||||
<!-- Page Break for Policy -->
|
||||
<div style="page-break-before: always;"></div>
|
||||
|
||||
<!-- Refund Policy Page -->
|
||||
<h2 style="text-align: center; margin-bottom: 15px;">
|
||||
RETURN AND REFUND POLICY
|
||||
</h2>
|
||||
|
||||
<div class="policy-section" style="font-size: 9pt;">
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
<strong><t t-esc="doc.company_id.name"/></strong> does not accept any returns or refunds for custom-built orders or any modified products.
|
||||
</p>
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
The following policy applies to all <t t-esc="doc.company_id.name"/> customers:
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Change Order and Cancellation Policy</div>
|
||||
<p style="margin: 5px 0;">
|
||||
<t t-esc="doc.company_id.name"/> sells custom Mobility products according to customer specifications. Quote, and order acknowledgments must be reviewed for accuracy.
|
||||
</p>
|
||||
<p style="margin: 5px 0;">
|
||||
Customized, specially ordered, or fabricated mobility and accessibility devices are not returnable or eligible for a refund. We also do not accept returns or exchanges for items that have come in contact with the skin. This includes, but is not limited to, lift chairs, seating, and positioning products, including wheelchair cushions and back supports, TENS units, patient lifts, blood pressure units, breast pumps, bathroom safety items, pillows, bedding, and mattresses, bracing, and continence care products.
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Restocking Fees</div>
|
||||
<p style="margin: 5px 0;">
|
||||
Product or parts returns for warranty items (i.e. product defects) are subject to <t t-esc="doc.company_id.name"/>'s evaluation but not subject to a restocking fee.
|
||||
</p>
|
||||
<p style="margin: 5px 0;">
|
||||
<strong>30% Restocking Fee:</strong> Some products require a 30% restocking fee for returns. These include: Patient lifts, Hospital Beds, Transport Wheelchairs, Standard Rollators & Walkers
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Non-Returnable Items</div>
|
||||
<p style="margin: 5px 0;">
|
||||
There are certain products that are custom-made by the manufacturer and are non-returnable. These include:
|
||||
</p>
|
||||
<ul style="margin: 5px 0 5px 20px; padding: 0;">
|
||||
<li>Built to order items / Custom wheelchairs, Rigid ultra lightweight wheelchairs</li>
|
||||
<li>Type/Category 2, 3, 4 & 5 Wheelchair</li>
|
||||
<li>Tilt & Reclining wheelchairs</li>
|
||||
<li>Sports wheelchairs</li>
|
||||
<li>Custom Power Wheelchairs</li>
|
||||
<li>All Spare Parts</li>
|
||||
<li>Adaptive Strollers</li>
|
||||
<li>Geri chairs</li>
|
||||
<li>Custom-built lift chairs/Recliners, including those with upgraded fabrics, heat and massage, Power Pillow, footrest extension or left-hand control options are non-returnable.</li>
|
||||
<li>Custom-built stairlifts, porch-lifts, vertical platform lifts, custom ceiling lifts.</li>
|
||||
<li>Open-Box Items</li>
|
||||
<li>Wheelchair scales</li>
|
||||
</ul>
|
||||
<p style="margin: 5px 0;">
|
||||
<strong>For hygienic reasons, the following products are non-returnable:</strong> Bathroom Safety products, Incontinence products, Cushions and Backs
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
260
fusion_claims/report/report_proof_of_pickup.xml
Normal file
260
fusion_claims/report/report_proof_of_pickup.xml
Normal file
@@ -0,0 +1,260 @@
|
||||
<?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.
|
||||
Proof of Pickup Document (for rental returns)
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_proof_of_pickup">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
|
||||
<style>
|
||||
.fc-pop { font-family: Arial, sans-serif; font-size: 10pt; }
|
||||
.fc-pop table { width: 100%; border-collapse: collapse; margin-bottom: 10px; }
|
||||
.fc-pop table.bordered, .fc-pop table.bordered th, .fc-pop table.bordered td { border: 1px solid #000; }
|
||||
.fc-pop th { background-color: #2e7d32; color: white; padding: 6px 8px; font-weight: bold; font-size: 9pt; }
|
||||
.fc-pop td { padding: 5px 6px; vertical-align: top; font-size: 9pt; }
|
||||
.fc-pop .text-center { text-align: center; }
|
||||
.fc-pop .text-end { text-align: right; }
|
||||
.fc-pop .text-start { text-align: left; }
|
||||
.fc-pop .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-pop .note-row { font-style: italic; }
|
||||
.fc-pop h2 { color: #2e7d32; margin: 8px 0; font-size: 16pt; }
|
||||
.fc-pop .info-table td { padding: 6px 10px; font-size: 10pt; }
|
||||
.fc-pop .info-table th { background-color: #f5f5f5; color: #333; font-size: 9pt; padding: 5px 10px; }
|
||||
.fc-pop .signature-section { margin-top: 20px; border: 1px solid #000; padding: 15px; }
|
||||
.fc-pop .signature-line { border-bottom: 1px solid #000; min-height: 30px; margin-bottom: 5px; }
|
||||
.fc-pop .signature-label { font-size: 8pt; color: #666; margin-bottom: 15px; }
|
||||
.fc-pop .policy-section { font-size: 8pt; margin-top: 15px; padding: 10px; background-color: #f9f9f9; border: 1px solid #ddd; }
|
||||
.fc-pop .policy-title { font-weight: bold; font-size: 9pt; margin-bottom: 5px; }
|
||||
.fc-pop .acknowledgment { font-size: 9pt; margin: 15px 0; padding: 10px; background-color: #e8f5e9; border-left: 3px solid #4caf50; }
|
||||
</style>
|
||||
|
||||
<div class="fc-pop">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h2 style="text-align: center; margin-bottom: 15px;">
|
||||
PROOF OF PICKUP
|
||||
</h2>
|
||||
|
||||
<!-- Order Reference -->
|
||||
<div style="text-align: center; margin-bottom: 15px; font-size: 11pt;">
|
||||
<strong>Order Reference:</strong> <span t-field="doc.name"/>
|
||||
</div>
|
||||
|
||||
<!-- Customer Info Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">CUSTOMER INFORMATION</th>
|
||||
<th style="width: 50%;">PICKUP ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 60px; font-size: 10pt;">
|
||||
<div t-field="doc.partner_invoice_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 60px; font-size: 10pt;">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Info Table -->
|
||||
<table class="bordered info-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ORDER DATE</th>
|
||||
<th>PICKUP DATE</th>
|
||||
<th>SALES REP</th>
|
||||
<th>AUTHORIZER</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.commitment_date">
|
||||
<span t-field="doc.commitment_date" t-options="{'widget': 'date'}"/>
|
||||
</t>
|
||||
<t t-elif="doc.x_fc_adp_delivery_date">
|
||||
<span t-field="doc.x_fc_adp_delivery_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.user_id"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_authorizer_id" t-field="doc.x_fc_authorizer_id"/>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Products Picked Up Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 15%;">PRODUCT CODE</th>
|
||||
<th class="text-start" style="width: 50%;">DESCRIPTION</th>
|
||||
<th class="text-center" style="width: 20%;">SERIAL #</th>
|
||||
<th class="text-center" style="width: 15%;">QTY</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<!-- Section Header -->
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td colspan="4">
|
||||
<strong><span t-field="line.name"/></strong>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Note Line -->
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td colspan="4">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Product Line -->
|
||||
<t t-elif="not line.display_type">
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.product_id.default_code or ''"/>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in line.name">
|
||||
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.x_fc_serial_number or ''"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="int(line.product_uom_qty) if line.product_uom_qty == int(line.product_uom_qty) else line.product_uom_qty"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Acknowledgment Section -->
|
||||
<div class="acknowledgment">
|
||||
<p style="margin: 0;">
|
||||
<strong>Equipment Return Acknowledgment</strong>
|
||||
</p>
|
||||
<p style="margin: 10px 0 0 0;">
|
||||
By signing below, you are confirming that you have returned the above listed equipment to <t t-esc="doc.company_id.name"/>. You acknowledge that all items listed have been picked up by our authorized representative, and you no longer have possession of these products. You are also confirming that the equipment was returned in the same condition as when it was delivered, normal wear and tear excepted, and that you are aware of any applicable charges related to the rental period or equipment condition.
|
||||
</p>
|
||||
<p style="margin: 10px 0 0 0; font-weight: bold; text-transform: uppercase;">
|
||||
I CONFIRM THAT ALL OF THE PRODUCTS LISTED ABOVE HAVE BEEN RETURNED AND PICKED UP BY AN AUTHORIZED REPRESENTATIVE OF <t t-esc="doc.company_id.name.upper()"/>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Signature Section -->
|
||||
<div class="signature-section">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="signature-label">PRINT NAME</div>
|
||||
<div class="signature-line"></div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="signature-label">DATE</div>
|
||||
<div class="signature-line"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 20px;">
|
||||
<div class="signature-label">SIGNATURE</div>
|
||||
<div class="signature-line" style="min-height: 50px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Page Break for Policy -->
|
||||
<div style="page-break-before: always;"></div>
|
||||
|
||||
<!-- Return Policy Page -->
|
||||
<h2 style="text-align: center; margin-bottom: 15px;">
|
||||
RENTAL RETURN TERMS AND CONDITIONS
|
||||
</h2>
|
||||
|
||||
<div class="policy-section" style="font-size: 9pt;">
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
<strong><t t-esc="doc.company_id.name"/></strong> - Rental Equipment Return Policy
|
||||
</p>
|
||||
<p style="margin: 0 0 10px 0;">
|
||||
The following terms apply to all rental equipment returns:
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Equipment Condition</div>
|
||||
<p style="margin: 5px 0;">
|
||||
All rental equipment must be returned in the same condition as when delivered, allowing for normal wear and tear. The customer is responsible for any damage beyond normal use. Equipment will be inspected upon return, and any damage or missing parts will be assessed and charged accordingly.
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Rental Period</div>
|
||||
<p style="margin: 5px 0;">
|
||||
Rental charges are calculated based on the agreed rental period. Early returns may be subject to minimum rental fees as specified in the rental agreement. Late returns may incur additional daily rental charges.
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Pickup and Scheduling</div>
|
||||
<p style="margin: 5px 0;">
|
||||
Equipment pickup must be scheduled in advance. The customer is responsible for ensuring the equipment is accessible and ready for pickup at the scheduled time. Missed pickup appointments may result in continued rental charges.
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Cleaning Requirements</div>
|
||||
<p style="margin: 5px 0;">
|
||||
Equipment should be returned clean and sanitized. Additional cleaning fees may apply if equipment is returned in an unsanitary condition.
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Damage Assessment</div>
|
||||
<p style="margin: 5px 0;">
|
||||
Upon pickup, our representative will conduct an inspection of the equipment. Any damage will be documented and the customer will be notified of repair or replacement costs. The following are examples of damage that may result in charges:
|
||||
</p>
|
||||
<ul style="margin: 5px 0 5px 20px; padding: 0;">
|
||||
<li>Broken or bent frames</li>
|
||||
<li>Torn or stained upholstery</li>
|
||||
<li>Missing parts or accessories</li>
|
||||
<li>Non-functional electrical components</li>
|
||||
<li>Excessive wear on wheels or tires</li>
|
||||
<li>Water damage or rust</li>
|
||||
<li>Modifications made without authorization</li>
|
||||
</ul>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Security Deposit</div>
|
||||
<p style="margin: 5px 0;">
|
||||
If a security deposit was collected at the time of rental, it will be refunded within 14 business days after the equipment has been inspected and cleared, less any applicable charges for damage, cleaning, or extended rental periods.
|
||||
</p>
|
||||
|
||||
<div class="policy-title" style="margin-top: 15px;">Contact Information</div>
|
||||
<p style="margin: 5px 0;">
|
||||
For questions regarding your rental return or any charges, please contact <t t-esc="doc.company_id.name"/> customer service.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
340
fusion_claims/report/report_rental_agreement.xml
Normal file
340
fusion_claims/report/report_rental_agreement.xml
Normal file
@@ -0,0 +1,340 @@
|
||||
<?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.
|
||||
Rental Agreement Document - Compact 2-Page Layout
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_rental_agreement">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<t t-set="company" t-value="doc.company_id"/>
|
||||
|
||||
<style>
|
||||
.fc-rental { font-family: Arial, sans-serif; font-size: 8pt; line-height: 1.3; }
|
||||
.fc-rental h1 { color: #0066a1; font-size: 14pt; text-align: center; margin: 5px 0 10px 0; }
|
||||
.fc-rental h2 { color: #0066a1; font-size: 9pt; margin: 6px 0 3px 0; font-weight: bold; }
|
||||
.fc-rental p { margin: 2px 0; text-align: justify; }
|
||||
.fc-rental .parties { font-size: 8pt; margin-bottom: 8px; }
|
||||
.fc-rental .intro { margin-bottom: 8px; font-size: 8pt; }
|
||||
.fc-rental table { width: 100%; border-collapse: collapse; }
|
||||
.fc-rental table.bordered, .fc-rental table.bordered th, .fc-rental table.bordered td { border: 1px solid #000; }
|
||||
.fc-rental th { background-color: #0066a1; color: white; padding: 4px 6px; font-weight: bold; font-size: 8pt; }
|
||||
.fc-rental td { padding: 3px 5px; vertical-align: top; font-size: 8pt; }
|
||||
.fc-rental .text-center { text-align: center; }
|
||||
.fc-rental .info-header { background-color: #f5f5f5; color: #333; font-weight: bold; }
|
||||
|
||||
/* Two-column layout for terms */
|
||||
.fc-rental .terms-container { column-count: 2; column-gap: 20px; margin-top: 10px; }
|
||||
.fc-rental .term-section { break-inside: avoid; margin-bottom: 8px; }
|
||||
|
||||
/* Credit card section - 15% taller */
|
||||
.fc-rental .cc-section { margin-top: 12px; padding: 12px; border: 2px solid #0066a1; background-color: #f8f9fa; }
|
||||
.fc-rental .cc-title { font-size: 10pt; font-weight: bold; color: #0066a1; margin-bottom: 10px; text-align: center; }
|
||||
.fc-rental .cc-box { border: 1px solid #000; display: inline-block; width: 21px; height: 21px; text-align: center; background: white; }
|
||||
.fc-rental .authorization-text { font-size: 7pt; margin-top: 10px; font-style: italic; }
|
||||
|
||||
/* Signature - 40% taller */
|
||||
.fc-rental .signature-section { margin-top: 15px; }
|
||||
.fc-rental .signature-box { border: 1px solid #000; padding: 12px; }
|
||||
.fc-rental .signature-line { border-bottom: 1px solid #000; min-height: 35px; margin-bottom: 5px; }
|
||||
.fc-rental .signature-label { font-size: 7pt; color: #666; }
|
||||
</style>
|
||||
|
||||
<div class="fc-rental">
|
||||
<div class="page">
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- PAGE 1: TERMS AND CONDITIONS -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<h1>RENTAL AGREEMENT</h1>
|
||||
|
||||
<!-- Parties - Compact -->
|
||||
<div class="parties">
|
||||
<strong>BETWEEN:</strong> <t t-esc="company.name"/> ("Company")
|
||||
<strong style="margin-left: 20px;">AND:</strong> <t t-esc="doc.partner_id.name"/> ("Renter")
|
||||
</div>
|
||||
|
||||
<!-- Introduction -->
|
||||
<div class="intro">
|
||||
<p><t t-esc="company.name"/> rents to the Renter medical equipment (hospital beds, patient lifts, trapeze, over-bed tables, mobility scooters, electric wheelchairs, manual wheelchairs, stairlifts, ceiling lifts and lift chairs) subject to the terms and conditions set forth in this Rental Agreement.</p>
|
||||
</div>
|
||||
|
||||
<!-- Terms and Conditions in Two Columns -->
|
||||
<div class="terms-container">
|
||||
|
||||
<div class="term-section">
|
||||
<h2>1. Ownership and Condition of Equipment</h2>
|
||||
<p>The medical equipment is the property of <t t-esc="company.name"/> and is provided in good condition. The Renter shall return the equipment in the same condition as when received, subject to normal wear and tear. <t t-esc="company.name"/> reserves the right to inspect the equipment upon its return and may repossess it without prior notice if it is being used in violation of this agreement.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>2. Cancellation Policy</h2>
|
||||
<p>The Renter may cancel the order before delivery and will be charged twenty-five percent (25%) of the total rental cost. If the order is canceled during the rental period after delivery, no refund will be provided.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>3. Security Deposit</h2>
|
||||
<p>The security deposit will be returned after an inspection of the equipment. If the equipment has any damage, the cost of repairs will be deducted from the security deposit. If the security deposit is insufficient to cover the damages, the credit card on file will be charged for the remaining amount. Security deposit refunds may take 4 to 15 business days to process. <t t-esc="company.name"/> is not responsible for delays caused by the Renter's financial institution.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>4. Liability for Loss or Damage</h2>
|
||||
<p><t t-esc="company.name"/> shall not be liable for any loss of or damage to property left, lost, damaged, stolen, stored, or transported by the Renter or any other person using the medical equipment. The Renter assumes all risks associated with such loss or damage and waives any claims against <t t-esc="company.name"/>. The Renter agrees to defend, indemnify, and hold <t t-esc="company.name"/> harmless against all claims arising from such loss or damage.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>5. Risk and Liability</h2>
|
||||
<p>The Renter assumes all risk and liability for any loss, damage, injury, or death resulting from the use or operation of the medical equipment. <t t-esc="company.name"/> is not responsible for any acts or omissions of the Renter or the Renter's agents, servants, or employees.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>6. Renter Responsibilities</h2>
|
||||
<p>The Renter is responsible for the full cost of replacement for any damage, loss, theft, or destruction of the medical equipment. <t t-esc="company.name"/> may charge the Renter's credit card for repair or replacement costs as deemed necessary. The equipment must not be used by individuals under the age of 18, under the influence of intoxicants or narcotics, or in an unsafe manner.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>7. Indemnification</h2>
|
||||
<p>The Renter shall indemnify, defend, and hold harmless <t t-esc="company.name"/>, its agents, officers, and employees, from any claims, demands, actions, or causes of action arising from the use or operation of the medical equipment, except where caused by <t t-esc="company.name"/>'s gross negligence or willful misconduct.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>8. Accident Notification</h2>
|
||||
<p>The Renter must immediately notify <t t-esc="company.name"/> of any accidents, damages, or incidents involving the medical equipment.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>9. Costs and Expenses</h2>
|
||||
<p>The Renter agrees to cover all costs, expenses, and attorney's fees incurred by <t t-esc="company.name"/> in collecting overdue payments, recovering possession of the equipment, or enforcing claims for damage or loss.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>10. Independent Status</h2>
|
||||
<p>The Renter or any driver of the equipment shall not be considered an agent or employee of <t t-esc="company.name"/>.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>11. Binding Obligations</h2>
|
||||
<p>Any individual signing this agreement on behalf of a corporation or other entity shall be personally liable for all obligations under this agreement. This agreement is binding upon the heirs, executors, administrators, and assigns of the Renter.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>12. Refusal of Service</h2>
|
||||
<p><t t-esc="company.name"/> reserves the right to refuse rental to any individual or entity at its sole discretion.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>13. Governing Law</h2>
|
||||
<p>This Agreement shall be governed by and construed in accordance with the laws of the jurisdiction in which <t t-esc="company.name"/> operates.</p>
|
||||
</div>
|
||||
|
||||
<div class="term-section">
|
||||
<h2>14. Entire Agreement</h2>
|
||||
<p>This Agreement constitutes the entire understanding between the parties concerning the rental of medical equipment and supersedes all prior agreements, representations, or understandings, whether written or oral.</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- PAGE 2: RENTAL DETAILS, PAYMENT, AND SIGNATURE -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<div style="page-break-before: always;"></div>
|
||||
|
||||
<h1>RENTAL DETAILS</h1>
|
||||
|
||||
<!-- Customer Info and Rental Period Side by Side -->
|
||||
<table style="width: 100%; margin-bottom: 10px;">
|
||||
<tr>
|
||||
<td style="width: 50%; vertical-align: top; padding-right: 10px;">
|
||||
<table class="bordered" style="width: 100%;">
|
||||
<tr>
|
||||
<th colspan="2" class="info-header" style="background-color: #0066a1; color: white;">RENTER INFORMATION</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 35%; font-weight: bold; background-color: #f5f5f5;">Name</td>
|
||||
<td><t t-esc="doc.partner_id.name"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-weight: bold; background-color: #f5f5f5;">Address</td>
|
||||
<td>
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-weight: bold; background-color: #f5f5f5;">Phone</td>
|
||||
<td><t t-esc="doc.partner_id.phone or doc.partner_id.mobile or ''"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-weight: bold; background-color: #f5f5f5;">Order Ref</td>
|
||||
<td><t t-esc="doc.name"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="width: 50%; vertical-align: top; padding-left: 10px;">
|
||||
<table class="bordered" style="width: 100%;">
|
||||
<tr>
|
||||
<th colspan="2" class="info-header" style="background-color: #0066a1; color: white;">RENTAL PERIOD</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 40%; font-weight: bold; background-color: #f5f5f5;">Start Date</td>
|
||||
<td>
|
||||
<t t-if="doc.rental_start_date">
|
||||
<span t-field="doc.rental_start_date" t-options="{'widget': 'date'}"/>
|
||||
</t>
|
||||
<t t-else=""><span style="color: #999;">Not specified</span></t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-weight: bold; background-color: #f5f5f5;">Return Date</td>
|
||||
<td>
|
||||
<t t-if="doc.rental_return_date">
|
||||
<span t-field="doc.rental_return_date" t-options="{'widget': 'date'}"/>
|
||||
</t>
|
||||
<t t-else=""><span style="color: #999;">Not specified</span></t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-weight: bold; background-color: #f5f5f5;">Duration</td>
|
||||
<td>
|
||||
<t t-if="doc.duration_days">
|
||||
<span t-esc="doc.duration_days"/> Day<t t-if="doc.duration_days != 1">s</t>
|
||||
<t t-if="doc.remaining_hours and doc.remaining_hours > 0">
|
||||
, <t t-esc="doc.remaining_hours"/> Hr<t t-if="doc.remaining_hours != 1">s</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-elif="doc.rental_start_date and doc.rental_return_date"><span>Less than 1 day</span></t>
|
||||
<t t-else=""><span style="color: #999;">Not specified</span></t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-weight: bold; background-color: #f5f5f5;">Total Amount</td>
|
||||
<td><strong><span t-field="doc.amount_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/></strong></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Equipment List - Compact -->
|
||||
<table class="bordered" style="margin-bottom: 10px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 15%;">PRODUCT CODE</th>
|
||||
<th style="width: 55%;">DESCRIPTION</th>
|
||||
<th class="text-center" style="width: 15%;">SERIAL #</th>
|
||||
<th class="text-center" style="width: 15%;">QTY</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<t t-if="not line.display_type">
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.product_id.default_code or ''"/>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in clean_name">
|
||||
<t t-set="clean_name" t-value="clean_name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-if="' to ' in clean_name and '\n' in clean_name">
|
||||
<t t-set="clean_name" t-value="clean_name.split('\n')[0]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.x_fc_serial_number or ''"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="int(line.product_uom_qty) if line.product_uom_qty == int(line.product_uom_qty) else line.product_uom_qty"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Credit Card Authorization - Compact -->
|
||||
<div class="cc-section">
|
||||
<div class="cc-title">CREDIT CARD PAYMENT AUTHORIZATION</div>
|
||||
|
||||
<table style="width: 100%; border: none;">
|
||||
<tr>
|
||||
<td style="width: 20%; padding: 5px 4px; border: none;"><strong>Card #:</strong></td>
|
||||
<td style="padding: 5px 4px; border: none;">
|
||||
<span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span>
|
||||
<span style="margin: 0 3px;">-</span>
|
||||
<span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span>
|
||||
<span style="margin: 0 3px;">-</span>
|
||||
<span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span>
|
||||
<span style="margin: 0 3px;">-</span>
|
||||
<span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 4px; border: none;"><strong>Exp Date:</strong></td>
|
||||
<td style="padding: 5px 4px; border: none;">
|
||||
<span class="cc-box"></span><span class="cc-box"></span>
|
||||
<span style="margin: 0 2px;">/</span>
|
||||
<span class="cc-box"></span><span class="cc-box"></span>
|
||||
<span style="margin-left: 20px;"><strong>CVV:</strong></span>
|
||||
<span class="cc-box"></span><span class="cc-box"></span><span class="cc-box"></span>
|
||||
<span style="margin-left: 20px;"><strong>Security Deposit:</strong> $___________</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 4px; border: none;"><strong>Cardholder:</strong></td>
|
||||
<td style="padding: 5px 4px; border: none;">
|
||||
<div style="border-bottom: 1px solid #000; min-height: 18px; width: 100%;"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" style="padding: 5px 4px; border: none;">
|
||||
<strong>Billing Address (if different):</strong>
|
||||
<div style="border-bottom: 1px solid #000; min-height: 18px; width: 100%; margin-top: 4px;"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="authorization-text">
|
||||
<p>I authorize <t t-esc="company.name"/> to charge the credit card indicated in this authorization form according to the terms outlined above. I certify that I am an authorized user of this credit card and will not dispute the payment. By signing this form, I acknowledge that I have read the rental agreement and understand the terms and conditions. I understand that if the rented item is not returned on the agreed return date, additional charges will be incurred. *Payments for monthly rental items will be charged on the re-rental date until the item is returned.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Signature Section - Compact -->
|
||||
<div class="signature-section">
|
||||
<div class="signature-box">
|
||||
<table style="width: 100%; border: none;">
|
||||
<tr>
|
||||
<td style="width: 40%; padding: 5px; border: none;">
|
||||
<div class="signature-label">FULL NAME (PRINT)</div>
|
||||
<div class="signature-line"></div>
|
||||
</td>
|
||||
<td style="width: 40%; padding: 5px; border: none;">
|
||||
<div class="signature-label">SIGNATURE</div>
|
||||
<div class="signature-line"></div>
|
||||
</td>
|
||||
<td style="width: 20%; padding: 5px; border: none;">
|
||||
<div class="signature-label">DATE</div>
|
||||
<div class="signature-line"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
1
fusion_claims/report/report_saleorder_adp.xml
Normal file
1
fusion_claims/report/report_saleorder_adp.xml
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
175
fusion_claims/report/report_templates.xml
Normal file
175
fusion_claims/report/report_templates.xml
Normal file
@@ -0,0 +1,175 @@
|
||||
<?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>
|
||||
<!-- Shared Report Header Template -->
|
||||
<template id="report_header_fusion_claims">
|
||||
<div class="fc-header">
|
||||
<div class="row">
|
||||
<!-- Company Logo -->
|
||||
<div class="col-3">
|
||||
<img t-if="company.logo" t-att-src="image_data_uri(company.logo)"
|
||||
style="max-height: 80px; max-width: 200px;" alt="Company Logo"/>
|
||||
</div>
|
||||
<!-- Company Info -->
|
||||
<div class="col-9 text-end">
|
||||
<h3 class="mb-0" t-field="company.name"/>
|
||||
<div t-if="company.x_fc_store_address_1" class="small">
|
||||
<t t-esc="company.x_fc_store_address_1"/>
|
||||
</div>
|
||||
<div t-if="company.x_fc_store_address_2" class="small">
|
||||
<t t-esc="company.x_fc_store_address_2"/>
|
||||
</div>
|
||||
<div t-if="company.x_fc_company_tagline" class="small fst-italic text-muted">
|
||||
<t t-esc="company.x_fc_company_tagline"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Address Boxes Template -->
|
||||
<template id="report_address_boxes">
|
||||
<div class="row mt-4">
|
||||
<!-- Billing Address -->
|
||||
<div class="col-6">
|
||||
<div class="border p-2">
|
||||
<strong>BILLING ADDRESS</strong>
|
||||
<div t-field="doc.partner_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "address"], "no_marker": True}'/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Delivery Address -->
|
||||
<div class="col-6">
|
||||
<div class="border p-2">
|
||||
<strong>DELIVERY ADDRESS</strong>
|
||||
<div t-if="doc.partner_shipping_id"
|
||||
t-field="doc.partner_shipping_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "address"], "no_marker": True}'/>
|
||||
<div t-else="" t-field="doc.partner_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "address"], "no_marker": True}'/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Serial Numbers Section Template -->
|
||||
<template id="report_serial_numbers">
|
||||
<t t-set="serials" t-value="[]"/>
|
||||
<!-- Collect serial numbers from order lines -->
|
||||
<t t-if="doc._name == 'sale.order'">
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<t t-if="line.x_fc_serial_number">
|
||||
<t t-set="serials" t-value="serials + [{'product': line.product_id.name, 'serial': line.x_fc_serial_number}]"/>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="doc._name == 'account.move'">
|
||||
<t t-foreach="doc.invoice_line_ids" t-as="line">
|
||||
<t t-if="line.x_fc_serial_number">
|
||||
<t t-set="serials" t-value="serials + [{'product': line.product_id.name, 'serial': line.x_fc_serial_number}]"/>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
<div t-if="serials" class="mt-3 border p-2">
|
||||
<strong>SERIAL NUMBERS</strong>
|
||||
<ul class="mb-0 ps-3">
|
||||
<li t-foreach="serials" t-as="s">
|
||||
<t t-esc="s['product']"/>: <strong t-esc="s['serial']"/>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Payment Terms Template -->
|
||||
<template id="report_payment_terms">
|
||||
<div t-if="company.x_fc_payment_terms_html" class="mt-3">
|
||||
<strong>Payment Communication: </strong><span t-esc="doc.name"/>
|
||||
<div class="mt-2" t-raw="company.x_fc_payment_terms_html"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Refund Policy Page Template -->
|
||||
<template id="report_refund_policy_page">
|
||||
<div t-if="company.x_fc_include_refund_page and company.x_fc_refund_policy_html"
|
||||
class="page" style="page-break-before: always;">
|
||||
<t t-call="fusion_claims.report_header_fusion_claims"/>
|
||||
<div class="mt-4">
|
||||
<t t-raw="company.x_fc_refund_policy_html"/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Footer Template -->
|
||||
<template id="report_footer_fusion_claims">
|
||||
<div class="fc-footer border-top pt-2 mt-3">
|
||||
<div class="row small">
|
||||
<div class="col-12 text-center">
|
||||
<span t-if="company.phone">Call & Fax: <t t-esc="company.phone"/></span>
|
||||
<span t-if="company.email"> | <t t-esc="company.email"/></span>
|
||||
<span t-if="company.vat"> | HST # <t t-esc="company.vat"/></span>
|
||||
<span t-if="company.website"> | Shop online: <t t-esc="company.website"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Report Styles -->
|
||||
<template id="report_styles_fusion_claims">
|
||||
<style>
|
||||
.fc-header { margin-bottom: 20px; }
|
||||
.fc-footer { margin-top: 20px; }
|
||||
.fc-table { width: 100%; border-collapse: collapse; }
|
||||
.fc-table th { background-color: #0077b6; color: white; padding: 8px; text-align: left; }
|
||||
.fc-table td { padding: 6px; border-bottom: 1px solid #ddd; }
|
||||
.fc-table .section-header { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-table .text-end { text-align: right; }
|
||||
.fc-totals { margin-top: 20px; }
|
||||
.fc-totals table { width: 300px; float: right; }
|
||||
.fc-totals td { padding: 4px 8px; }
|
||||
.fc-totals .total-row { font-weight: bold; background-color: #0077b6; color: white; }
|
||||
</style>
|
||||
</template>
|
||||
|
||||
<!-- ================================================================= -->
|
||||
<!-- Default Invoice Report: Add SKU column, clean description -->
|
||||
<!-- ================================================================= -->
|
||||
<template id="report_invoice_sku_column"
|
||||
inherit_id="account.report_invoice_document">
|
||||
|
||||
<!-- 1. Add SKU header before Description -->
|
||||
<xpath expr="//th[@name='th_description']" position="before">
|
||||
<th name="th_sku" class="text-start" style="width: 12%;"><span>SKU</span></th>
|
||||
</xpath>
|
||||
|
||||
<!-- 2. Add SKU cell before description for product lines -->
|
||||
<xpath expr="//td[@name='account_invoice_line_name']" position="before">
|
||||
<td name="td_sku" class="text-start">
|
||||
<span t-esc="line.product_id.default_code or ''"/>
|
||||
</td>
|
||||
</xpath>
|
||||
|
||||
<!-- 3. Replace description to strip [internal_ref] prefix -->
|
||||
<xpath expr="//td[@name='account_invoice_line_name']" position="replace">
|
||||
<td name="account_invoice_line_name" t-att-class="padding_class">
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_desc" t-value="line.name"/>
|
||||
<t t-if="'] ' in (line.name or '')">
|
||||
<t t-set="clean_desc" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<span t-out="clean_desc" t-options="{'widget': 'text'}"/>
|
||||
</t>
|
||||
</td>
|
||||
</xpath>
|
||||
|
||||
<!-- 4. Fix section/subsection colspan: add 1 for the new SKU column -->
|
||||
<xpath expr="//td[@name='line_name_td']" position="attributes">
|
||||
<attribute name="t-att-colspan">(1 if is_product else line_colspan + 1)</attribute>
|
||||
</xpath>
|
||||
|
||||
</template>
|
||||
</odoo>
|
||||
|
||||
303
fusion_claims/report/sale_report_landscape.xml
Normal file
303
fusion_claims/report/sale_report_landscape.xml
Normal file
@@ -0,0 +1,303 @@
|
||||
<?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.
|
||||
Landscape ADP Report Template
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_saleorder_landscape">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<t t-set="is_adp" t-value="doc.x_fc_is_adp_sale"/>
|
||||
|
||||
<style>
|
||||
.fc-landscape { font-family: Arial, sans-serif; font-size: 11pt; }
|
||||
.fc-landscape table { width: 100%; border-collapse: collapse; margin-bottom: 12px; }
|
||||
.fc-landscape table.bordered, .fc-landscape table.bordered th, .fc-landscape table.bordered td { border: 1px solid #000; }
|
||||
.fc-landscape th { background-color: #0066a1; color: white; padding: 8px 10px; font-weight: bold; font-size: 10pt; }
|
||||
.fc-landscape td { padding: 6px 8px; vertical-align: top; font-size: 10pt; }
|
||||
.fc-landscape .text-center { text-align: center; }
|
||||
.fc-landscape .text-end { text-align: right; }
|
||||
.fc-landscape .text-start { text-align: left; }
|
||||
.fc-landscape .adp-bg { background-color: #e3f2fd; }
|
||||
.fc-landscape .client-bg { background-color: #fff3e0; }
|
||||
.fc-landscape .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-landscape .note-row { font-style: italic; }
|
||||
.fc-landscape h2 { color: #0066a1; margin: 10px 0; font-size: 18pt; }
|
||||
.fc-landscape .info-table td { padding: 8px 12px; font-size: 11pt; }
|
||||
.fc-landscape .info-table th { background-color: #f5f5f5; color: #333; font-size: 10pt; padding: 6px 12px; }
|
||||
.fc-landscape .totals-table { border: 1px solid #000; }
|
||||
.fc-landscape .totals-table td { border: 1px solid #000; padding: 8px 12px; font-size: 11pt; }
|
||||
</style>
|
||||
|
||||
<div class="fc-landscape">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h2 style="text-align: left;">
|
||||
<span t-if="doc.state in ['draft','sent']">Quotation </span>
|
||||
<span t-else="">Sales Order </span>
|
||||
<span t-field="doc.name"/>
|
||||
</h2>
|
||||
|
||||
<!-- Address Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">BILLING ADDRESS</th>
|
||||
<th style="width: 50%;">DELIVERY ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 70px; font-size: 12pt;">
|
||||
<div t-field="doc.partner_invoice_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 70px; font-size: 12pt;">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Info Table -->
|
||||
<table class="bordered info-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ORDER DATE</th>
|
||||
<th>VALIDITY</th>
|
||||
<th>CLIENT TYPE</th>
|
||||
<th>SALES REP</th>
|
||||
<th>AUTHORIZER</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.validity_date"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_client_type or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.user_id"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_authorizer_id" t-field="doc.x_fc_authorizer_id"/>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- ADP Info Table (only for ADP orders) -->
|
||||
<t t-if="is_adp">
|
||||
<table class="bordered info-table">
|
||||
<thead>
|
||||
<tr class="adp-bg">
|
||||
<th style="background-color: #e3f2fd; color: #333;">CLAIM NUMBER</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">APPLICATION TYPE</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">CLIENT REF 2</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">DELIVERY DATE</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">AUTHORIZATION</th>
|
||||
<th style="background-color: #e3f2fd; color: #333;">APPROVAL</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="adp-bg">
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_claim_number or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<!-- Show Application Type (Reason for Application) -->
|
||||
<t t-set="app_type" t-value="dict(doc._fields.get('x_fc_reason_for_application') and doc._fields['x_fc_reason_for_application'].selection or []).get(doc.x_fc_reason_for_application, '-')"/>
|
||||
<span t-esc="app_type"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_client_ref_2 or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.x_fc_adp_delivery_date">
|
||||
<span t-field="doc.x_fc_adp_delivery_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.x_fc_claim_authorization_date">
|
||||
<span t-field="doc.x_fc_claim_authorization_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.x_fc_claim_approval_date">
|
||||
<span t-field="doc.x_fc_claim_approval_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</t>
|
||||
|
||||
<!-- Order Lines Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 8%;">ADP CODE</th>
|
||||
<th class="text-start" style="width: 22%;">DESCRIPTION</th>
|
||||
<th class="text-center" style="width: 8%;">SERIAL #</th>
|
||||
<th t-if="is_adp" class="text-center" style="width: 5%;">PLCMT</th>
|
||||
<th class="text-center" style="width: 5%;">QTY</th>
|
||||
<th class="text-center" style="width: 10%;">UNIT PRICE</th>
|
||||
<th class="text-center" style="width: 10%; background-color: #1976d2; color: white;">ADP PORTION</th>
|
||||
<th class="text-center" style="width: 10%; background-color: #e65100; color: white;">CLIENT PORTION</th>
|
||||
<th class="text-center" style="width: 10%;">TAX</th>
|
||||
<th class="text-center" style="width: 10%;">TOTAL</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<!-- Section Header -->
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td t-att-colspan="'10' if is_adp else '9'">
|
||||
<strong><span t-field="line.name"/></strong>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Note Line -->
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td t-att-colspan="'10' if is_adp else '9'">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Product Line -->
|
||||
<t t-elif="not line.display_type">
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="line.product_id.x_fc_adp_device_code"/>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in line.name">
|
||||
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="line.x_fc_serial_number or ''"/>
|
||||
</td>
|
||||
<td t-if="is_adp" class="text-center">
|
||||
<span t-esc="line.x_fc_device_placement or 'N/A'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="int(line.product_uom_qty) if line.product_uom_qty == int(line.product_uom_qty) else line.product_uom_qty"/>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<!-- Show ADP price if available, otherwise unit price -->
|
||||
<t t-if="line.product_id.product_tmpl_id.x_fc_adp_price">
|
||||
<span t-esc="line.product_id.product_tmpl_id.x_fc_adp_price" t-options="{'widget': 'monetary', 'display_currency': doc.currency_id}"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span t-field="line.price_unit" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-end adp-bg">
|
||||
<span t-field="line.x_fc_adp_portion" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
<td class="text-end client-bg">
|
||||
<span t-field="line.x_fc_client_portion" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-esc="', '.join([(tax.invoice_label or tax.name) for tax in line.tax_ids]) or 'NO TAX SALE'"/>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-field="line.price_subtotal" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Payment Terms and Totals Row -->
|
||||
<div class="row" style="margin-top: 15px;">
|
||||
<div class="col-7">
|
||||
<t t-if="doc.payment_term_id.note">
|
||||
<strong>Payment Terms:</strong><br/>
|
||||
<span t-field="doc.payment_term_id.note"/>
|
||||
</t>
|
||||
</div>
|
||||
<div class="col-5" style="text-align: right;">
|
||||
<!-- Totals Table with borders -->
|
||||
<table class="totals-table" style="width: auto; margin-left: auto;">
|
||||
<tr>
|
||||
<td style="min-width: 200px;">Subtotal</td>
|
||||
<td class="text-end" style="min-width: 150px;">
|
||||
<span t-field="doc.amount_untaxed" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="adp-bg">
|
||||
<td><strong>Total ADP Portion</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.x_fc_adp_portion_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="client-bg">
|
||||
<td><strong>Total Client Portion</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.x_fc_client_portion_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Taxes</td>
|
||||
<td class="text-end">
|
||||
<span t-field="doc.amount_tax" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Grand Total</strong></td>
|
||||
<td class="text-end"><strong>
|
||||
<span t-field="doc.amount_total" t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||
</strong></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Terms and Conditions -->
|
||||
<t t-if="doc.note">
|
||||
<div style="margin-top: 15px;">
|
||||
<strong>Terms and Conditions:</strong>
|
||||
<div t-field="doc.note"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<!-- Signature -->
|
||||
<t t-if="doc.signature">
|
||||
<div style="margin-top: 20px; text-align: right;">
|
||||
<strong>Signature</strong><br/>
|
||||
<img t-att-src="image_data_uri(doc.signature)" style="max-height: 4cm; max-width: 8cm;"/><br/>
|
||||
<span t-field="doc.signed_by"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
281
fusion_claims/report/sale_report_portrait.xml
Normal file
281
fusion_claims/report/sale_report_portrait.xml
Normal file
@@ -0,0 +1,281 @@
|
||||
<?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>
|
||||
<template id="report_saleorder_portrait">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="doc" t-value="doc.with_context(lang=doc.partner_id.lang)"/>
|
||||
<t t-set="is_adp" t-value="doc.x_fc_is_adp_sale"/>
|
||||
|
||||
<style>
|
||||
.fc-report { font-family: Arial, sans-serif; font-size: 10pt; }
|
||||
.fc-report table { width: 100%; border-collapse: collapse; margin-bottom: 10px; }
|
||||
.fc-report table.bordered, .fc-report table.bordered th, .fc-report table.bordered td { border: 1px solid #000; }
|
||||
.fc-report th { background-color: #0066a1; color: white; padding: 6px 8px; font-weight: bold; text-align: center; }
|
||||
.fc-report td { padding: 6px 8px; vertical-align: top; }
|
||||
.fc-report .text-center { text-align: center; }
|
||||
.fc-report .text-end { text-align: right; }
|
||||
.fc-report .text-start { text-align: left; }
|
||||
.fc-report .adp-bg { background-color: #e3f2fd; }
|
||||
.fc-report .client-bg { background-color: #fff3e0; }
|
||||
.fc-report .section-row { background-color: #f0f0f0; font-weight: bold; }
|
||||
.fc-report .note-row { font-style: italic; }
|
||||
.fc-report h4 { color: #0066a1; margin: 0 0 15px 0; font-size: 16pt; }
|
||||
.fc-report .totals-table { border: 1px solid #000; border-collapse: collapse; }
|
||||
.fc-report .totals-table td { border: 1px solid #000; padding: 6px 8px; }
|
||||
.fc-report .info-header { background-color: #f5f5f5; color: #333; }
|
||||
.fc-report .adp-header { background-color: #e3f2fd; color: #333; }
|
||||
</style>
|
||||
|
||||
<div class="fc-report">
|
||||
<div class="page">
|
||||
|
||||
<!-- Document Title -->
|
||||
<h4>
|
||||
<span t-if="doc.state in ['draft','sent']">Quotation </span>
|
||||
<span t-else="">Sales Order </span>
|
||||
<span t-field="doc.name"/>
|
||||
</h4>
|
||||
|
||||
<!-- Address Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 50%;">BILLING ADDRESS</th>
|
||||
<th style="width: 50%;">SHIPPING ADDRESS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="height: 70px; font-size: 12pt;">
|
||||
<div t-field="doc.partner_invoice_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
<td style="height: 70px; font-size: 12pt;">
|
||||
<div t-field="doc.partner_shipping_id"
|
||||
t-options="{'widget': 'contact', 'fields': ['name', 'address'], 'no_marker': True}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Order Info Table -->
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="info-header" style="width: 25%;">ORDER DATE</th>
|
||||
<th class="info-header" style="width: 25%;">EXPIRATION</th>
|
||||
<th class="info-header" style="width: 25%;">SALESPERSON</th>
|
||||
<th class="info-header" style="width: 25%;">
|
||||
<t t-if="is_adp">APPLICATION TYPE</t>
|
||||
<t t-else="">SALE TYPE</t>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.validity_date"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-field="doc.user_id"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="is_adp">
|
||||
<!-- Show Application Type (Reason for Application) for ADP sales -->
|
||||
<t t-set="app_type" t-value="dict(doc._fields.get('x_fc_reason_for_application') and doc._fields['x_fc_reason_for_application'].selection or []).get(doc.x_fc_reason_for_application, '-')"/>
|
||||
<span t-esc="app_type"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span t-esc="doc.x_fc_sale_type or '-'"/>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- ADP Info Table (only for ADP orders) -->
|
||||
<t t-if="is_adp">
|
||||
<table class="bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="adp-header" style="width: 25%;">CLAIM NUMBER</th>
|
||||
<th class="adp-header" style="width: 25%;">CLIENT TYPE</th>
|
||||
<th class="adp-header" style="width: 25%;">DELIVERY DATE</th>
|
||||
<th class="adp-header" style="width: 25%;">AUTHORIZER</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="adp-bg">
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_claim_number or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="doc.x_fc_client_type or '-'"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-if="doc.x_fc_adp_delivery_date">
|
||||
<span t-field="doc.x_fc_adp_delivery_date"/>
|
||||
</t>
|
||||
<t t-else="">-</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-if="doc.x_fc_authorizer_id" t-field="doc.x_fc_authorizer_id"/>
|
||||
<span t-else="">-</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</t>
|
||||
|
||||
<!-- Order Lines Table -->
|
||||
<table class="bordered" style="font-size: 9pt;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center" style="width: 10%;">ADP CODE</th>
|
||||
<th class="text-start" style="width: 25%;">DESCRIPTION</th>
|
||||
<th t-if="is_adp" class="text-center" style="width: 10%;">SERIAL #</th>
|
||||
<th class="text-center" style="width: 7%;">QTY</th>
|
||||
<th class="text-center" style="width: 10%;">UNIT PRICE</th>
|
||||
<th class="text-center" style="width: 8%;">TAXES</th>
|
||||
<th t-if="is_adp" class="text-center" style="width: 10%; background-color: #1976d2; color: white;">ADP PORTION</th>
|
||||
<th t-if="is_adp" class="text-center" style="width: 10%; background-color: #e65100; color: white;">CLIENT PORTION</th>
|
||||
<th class="text-center" style="width: 10%;">AMOUNT</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="doc.order_line" t-as="line">
|
||||
<!-- Section Header -->
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<tr class="section-row">
|
||||
<td t-att-colspan="'9' if is_adp else '6'">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Note Line -->
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<tr class="note-row">
|
||||
<td t-att-colspan="'9' if is_adp else '6'">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<!-- Product Line -->
|
||||
<t t-elif="not line.display_type">
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<span t-field="line.product_id.x_fc_adp_device_code"/>
|
||||
</td>
|
||||
<td>
|
||||
<t t-if="line.name">
|
||||
<t t-set="clean_name" t-value="line.name"/>
|
||||
<t t-if="'] ' in line.name">
|
||||
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||
</t>
|
||||
<t t-esc="clean_name"/>
|
||||
</t>
|
||||
</td>
|
||||
<td t-if="is_adp" class="text-center">
|
||||
<span t-esc="line.x_fc_serial_number or ''"/>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span t-esc="int(line.product_uom_qty) if line.product_uom_qty == int(line.product_uom_qty) else line.product_uom_qty"/>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<!-- Show ADP price if available, otherwise unit price -->
|
||||
<t t-if="line.product_id.product_tmpl_id.x_fc_adp_price">
|
||||
<span t-esc="line.product_id.product_tmpl_id.x_fc_adp_price" t-options="{'widget': 'monetary', 'display_currency': doc.currency_id}"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span t-field="line.price_unit"/>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<t t-esc="', '.join([(tax.invoice_label or tax.name) for tax in line.tax_ids]) or 'NO TAX'"/>
|
||||
</td>
|
||||
<td t-if="is_adp" class="text-end adp-bg">
|
||||
<span t-field="line.x_fc_adp_portion"/>
|
||||
</td>
|
||||
<td t-if="is_adp" class="text-end client-bg">
|
||||
<span t-field="line.x_fc_client_portion"/>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-field="line.price_subtotal"/>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Payment Terms and Totals Row -->
|
||||
<div class="row" style="margin-top: 15px;">
|
||||
<div class="col-6">
|
||||
<t t-if="doc.payment_term_id.note">
|
||||
<strong>Payment Terms:</strong><br/>
|
||||
<span t-field="doc.payment_term_id.note"/>
|
||||
</t>
|
||||
</div>
|
||||
<div class="col-6" style="text-align: right;">
|
||||
<!-- Totals Table with borders - aligned right, auto width -->
|
||||
<table class="totals-table" style="width: auto; margin-left: auto;">
|
||||
<tr>
|
||||
<td style="min-width: 140px;">Subtotal</td>
|
||||
<td class="text-end" style="min-width: 100px;"><span t-field="doc.amount_untaxed"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Taxes</td>
|
||||
<td class="text-end"><span t-field="doc.amount_tax"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Total</strong></td>
|
||||
<td class="text-end"><strong><span t-field="doc.amount_total"/></strong></td>
|
||||
</tr>
|
||||
<t t-if="is_adp">
|
||||
<tr class="adp-bg">
|
||||
<td><strong>Total ADP Portion</strong></td>
|
||||
<td class="text-end"><span t-field="doc.x_fc_adp_portion_total"/></td>
|
||||
</tr>
|
||||
<tr class="client-bg">
|
||||
<td><strong>Total Client Portion</strong></td>
|
||||
<td class="text-end"><span t-field="doc.x_fc_client_portion_total"/></td>
|
||||
</tr>
|
||||
</t>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Terms and Conditions -->
|
||||
<t t-if="doc.note">
|
||||
<div style="margin-top: 15px;">
|
||||
<strong>Terms and Conditions:</strong>
|
||||
<div t-field="doc.note"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<!-- Signature -->
|
||||
<t t-if="doc.signature">
|
||||
<div style="margin-top: 20px; text-align: right;">
|
||||
<strong>Signature</strong><br/>
|
||||
<img t-att-src="image_data_uri(doc.signature)" style="max-height: 4cm; max-width: 8cm;"/><br/>
|
||||
<span t-field="doc.signed_by"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user