refactor(reports): move SO Acknowledgement into fusion_plating_reports with house style
D7 template was originally in fusion_plating_configurator with a Bootstrap-only look-and-feel that didn't match the other Fusion Plating reports. Re-styled and relocated: - Moved to fusion_plating_reports/report/report_fp_so_acknowledgement.xml alongside sale / work-order / job-traveller / invoice templates. - Uses fp_portrait_styles (company primary colour for headers, .bordered tables, .info-header row, .totals-table, .highlight-box, .sig-box / .sig-line / .small-muted). - Layout now mirrors report_fp_sale.xml: Billing / Shipping address pair, references row (Customer PO / Customer Job / Order Date / Salesperson), scheduling row (Planned Start / Internal / Customer Deadline / Ship Via), blanket-order callout, order line table (PART / DESCRIPTION / TREATMENT / QTY / UNIT PRICE / SUBTOTAL), totals table with subtotal / taxes / grand total, and a two-column signature block. fusion_plating_configurator no longer ships report/ files — it depends on fusion_plating_reports transitively via installed modules order. Report XML ID changed from 'fusion_plating_configurator.report_fp_so_acknowledgement_doc' to 'fusion_plating_reports.report_fp_so_acknowledgement_doc'. UAT on S00066: PDF renders cleanly with ENTECH branding, contact footer, subtotal \$3,025 / taxes \$393.25 / grand total \$3,418.25, signature lines — visually identical to the Quotation/Sales Order report. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -52,7 +52,6 @@ Provides:
|
|||||||
'wizard/fp_direct_order_wizard_views.xml',
|
'wizard/fp_direct_order_wizard_views.xml',
|
||||||
'wizard/fp_add_from_so_wizard_views.xml',
|
'wizard/fp_add_from_so_wizard_views.xml',
|
||||||
'wizard/fp_add_from_quote_wizard_views.xml',
|
'wizard/fp_add_from_quote_wizard_views.xml',
|
||||||
'report/report_so_acknowledgement.xml',
|
|
||||||
'wizard/fp_part_catalog_import_wizard_views.xml',
|
'wizard/fp_part_catalog_import_wizard_views.xml',
|
||||||
'data/fp_sale_description_template_data.xml',
|
'data/fp_sale_description_template_data.xml',
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,169 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
Copyright 2026 Nexa Systems Inc.
|
|
||||||
License OPL-1 (Odoo Proprietary License v1.0)
|
|
||||||
Part of the Fusion Plating product family.
|
|
||||||
|
|
||||||
Sales Order Acknowledgement PDF (Phase D7) — a customer-facing
|
|
||||||
confirmation sent shortly after action_confirm. Includes external
|
|
||||||
notes, deadlines, and a signature block.
|
|
||||||
-->
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<record id="action_report_fp_so_acknowledgement" model="ir.actions.report">
|
|
||||||
<field name="name">Sales Order Acknowledgement</field>
|
|
||||||
<field name="model">sale.order</field>
|
|
||||||
<field name="report_type">qweb-pdf</field>
|
|
||||||
<field name="report_name">fusion_plating_configurator.report_fp_so_acknowledgement_doc</field>
|
|
||||||
<field name="report_file">fusion_plating_configurator.report_fp_so_acknowledgement_doc</field>
|
|
||||||
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
|
||||||
<field name="binding_type">report</field>
|
|
||||||
<field name="print_report_name">'Acknowledgement - %s' % object.name</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<template id="report_fp_so_acknowledgement_doc">
|
|
||||||
<t t-call="web.html_container">
|
|
||||||
<t t-foreach="docs" t-as="doc">
|
|
||||||
<t t-call="web.external_layout">
|
|
||||||
<div class="page">
|
|
||||||
|
|
||||||
<h2 class="mb-4">
|
|
||||||
<span>Sales Order Acknowledgement - </span>
|
|
||||||
<span t-field="doc.name"/>
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<div class="row mb-4">
|
|
||||||
<div class="col-6">
|
|
||||||
<strong>Customer</strong><br/>
|
|
||||||
<span t-field="doc.partner_id"/><br/>
|
|
||||||
<span t-if="doc.x_fc_contact_phone"
|
|
||||||
t-field="doc.x_fc_contact_phone"/>
|
|
||||||
</div>
|
|
||||||
<div class="col-6">
|
|
||||||
<strong>References</strong><br/>
|
|
||||||
<span>Customer PO: </span>
|
|
||||||
<span t-field="doc.x_fc_po_number"/><br/>
|
|
||||||
<t t-if="doc.x_fc_customer_job_number">
|
|
||||||
<span>Customer Job #: </span>
|
|
||||||
<span t-field="doc.x_fc_customer_job_number"/><br/>
|
|
||||||
</t>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-4">
|
|
||||||
<div class="col-6">
|
|
||||||
<strong>Bill To</strong><br/>
|
|
||||||
<div t-field="doc.partner_invoice_id"
|
|
||||||
t-options='{"widget": "contact", "fields": ["address"], "no_marker": true}'/>
|
|
||||||
</div>
|
|
||||||
<div class="col-6">
|
|
||||||
<strong>Ship To</strong><br/>
|
|
||||||
<div t-field="doc.partner_shipping_id"
|
|
||||||
t-options='{"widget": "contact", "fields": ["address"], "no_marker": true}'/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-4">
|
|
||||||
<div class="col-4">
|
|
||||||
<strong>Planned Start:</strong>
|
|
||||||
<span t-field="doc.x_fc_planned_start_date"/>
|
|
||||||
</div>
|
|
||||||
<div class="col-4">
|
|
||||||
<strong>Customer Deadline:</strong>
|
|
||||||
<span t-field="doc.commitment_date"/>
|
|
||||||
</div>
|
|
||||||
<div class="col-4">
|
|
||||||
<strong>Ship Via:</strong>
|
|
||||||
<span t-field="doc.x_fc_ship_via"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<table class="table table-sm table-bordered">
|
|
||||||
<thead class="table-light">
|
|
||||||
<tr>
|
|
||||||
<th>Part</th>
|
|
||||||
<th>Treatment</th>
|
|
||||||
<th class="text-end">Qty</th>
|
|
||||||
<th class="text-end">Unit Price</th>
|
|
||||||
<th class="text-end">Subtotal</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr t-foreach="doc.order_line.filtered(lambda l: not l.x_fc_archived)"
|
|
||||||
t-as="line">
|
|
||||||
<td>
|
|
||||||
<span t-field="line.x_fc_part_catalog_id.part_number"/>
|
|
||||||
<br/>
|
|
||||||
<small t-field="line.name"/>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span t-field="line.x_fc_coating_config_id"/>
|
|
||||||
</td>
|
|
||||||
<td class="text-end">
|
|
||||||
<span t-field="line.product_uom_qty"/>
|
|
||||||
</td>
|
|
||||||
<td class="text-end">
|
|
||||||
<span t-field="line.price_unit"
|
|
||||||
t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
|
||||||
</td>
|
|
||||||
<td class="text-end">
|
|
||||||
<span t-field="line.price_subtotal"
|
|
||||||
t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<td colspan="4" class="text-end">
|
|
||||||
<strong>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>
|
|
||||||
</tfoot>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<div t-if="doc.x_fc_external_note" class="mt-4">
|
|
||||||
<strong>Notes</strong>
|
|
||||||
<div t-field="doc.x_fc_external_note"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div t-if="doc.x_fc_is_blanket_order" class="alert alert-info mt-3">
|
|
||||||
<strong>Blanket Order.</strong>
|
|
||||||
Parts will be released in quantities over time.
|
|
||||||
<span t-if="doc.x_fc_block_partial_shipments">
|
|
||||||
Partial shipments are blocked; the order ships
|
|
||||||
as one complete batch.
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mt-5">
|
|
||||||
<table class="table table-borderless">
|
|
||||||
<tr>
|
|
||||||
<td style="width: 50%;">
|
|
||||||
<strong>Customer Signature</strong><br/>
|
|
||||||
<div style="border-bottom: 1px solid #333; height: 40px;"/>
|
|
||||||
<small>Signed name / date</small>
|
|
||||||
</td>
|
|
||||||
<td style="width: 50%;">
|
|
||||||
<strong>Nexa Systems / EN Technologies</strong><br/>
|
|
||||||
<div style="border-bottom: 1px solid #333; height: 40px;"/>
|
|
||||||
<small>
|
|
||||||
<span t-field="doc.user_id"/>
|
|
||||||
</small>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</t>
|
|
||||||
</t>
|
|
||||||
</t>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
@@ -40,6 +40,7 @@
|
|||||||
'report/report_wo_margin.xml',
|
'report/report_wo_margin.xml',
|
||||||
# Quote-to-cash reports (portrait + landscape)
|
# Quote-to-cash reports (portrait + landscape)
|
||||||
'report/report_fp_sale.xml',
|
'report/report_fp_sale.xml',
|
||||||
|
'report/report_fp_so_acknowledgement.xml',
|
||||||
'report/report_fp_work_order.xml',
|
'report/report_fp_work_order.xml',
|
||||||
'report/report_fp_job_traveller.xml',
|
'report/report_fp_job_traveller.xml',
|
||||||
'report/report_fp_packing_slip.xml',
|
'report/report_fp_packing_slip.xml',
|
||||||
|
|||||||
@@ -0,0 +1,273 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2026 Nexa Systems Inc.
|
||||||
|
License OPL-1 (Odoo Proprietary License v1.0)
|
||||||
|
Part of the Fusion Plating product family.
|
||||||
|
|
||||||
|
Sales Order Acknowledgement (Phase D7) — customer-facing
|
||||||
|
confirmation sent shortly after action_confirm. Styled to match
|
||||||
|
the rest of the Fusion Plating report family (portrait; bordered
|
||||||
|
tables; company primary-colour header; totals-table footer;
|
||||||
|
sig-box signature pair).
|
||||||
|
-->
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="action_report_fp_so_acknowledgement" model="ir.actions.report">
|
||||||
|
<field name="name">Sales Order Acknowledgement</field>
|
||||||
|
<field name="model">sale.order</field>
|
||||||
|
<field name="report_type">qweb-pdf</field>
|
||||||
|
<field name="report_name">fusion_plating_reports.report_fp_so_acknowledgement_doc</field>
|
||||||
|
<field name="report_file">fusion_plating_reports.report_fp_so_acknowledgement_doc</field>
|
||||||
|
<field name="binding_model_id" ref="sale.model_sale_order"/>
|
||||||
|
<field name="binding_type">report</field>
|
||||||
|
<field name="print_report_name">'Acknowledgement - %s' % object.name</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<template id="report_fp_so_acknowledgement_doc">
|
||||||
|
<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-call="fusion_plating_reports.fp_portrait_styles"/>
|
||||||
|
<div class="fp-report">
|
||||||
|
<div class="page">
|
||||||
|
|
||||||
|
<!-- Title -->
|
||||||
|
<h4>
|
||||||
|
<span>Sales Order Acknowledgement </span>
|
||||||
|
<span t-field="doc.name"/>
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<!-- Billing / Shipping -->
|
||||||
|
<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;">
|
||||||
|
<div t-field="doc.partner_invoice_id"
|
||||||
|
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone', 'email'], 'no_marker': True}"/>
|
||||||
|
</td>
|
||||||
|
<td style="height: 70px;">
|
||||||
|
<div t-field="doc.partner_shipping_id"
|
||||||
|
t-options="{'widget': 'contact', 'fields': ['name', 'address', 'phone'], 'no_marker': True}"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- References -->
|
||||||
|
<table class="bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="info-header" style="width: 25%;">CUSTOMER PO #</th>
|
||||||
|
<th class="info-header" style="width: 25%;">CUSTOMER JOB #</th>
|
||||||
|
<th class="info-header" style="width: 25%;">ORDER DATE</th>
|
||||||
|
<th class="info-header" style="width: 25%;">SALESPERSON</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="text-center">
|
||||||
|
<span t-esc="doc.x_fc_po_number or '-'"/>
|
||||||
|
</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<span t-esc="doc.x_fc_customer_job_number or '-'"/>
|
||||||
|
</td>
|
||||||
|
<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>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- Scheduling -->
|
||||||
|
<table class="bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="info-header" style="width: 25%;">PLANNED START</th>
|
||||||
|
<th class="info-header" style="width: 25%;">INTERNAL DEADLINE</th>
|
||||||
|
<th class="info-header" style="width: 25%;">CUSTOMER DEADLINE</th>
|
||||||
|
<th class="info-header" style="width: 25%;">SHIP VIA</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="text-center">
|
||||||
|
<span t-field="doc.x_fc_planned_start_date"/>
|
||||||
|
</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<span t-field="doc.x_fc_internal_deadline"/>
|
||||||
|
</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<span t-field="doc.commitment_date"/>
|
||||||
|
</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<span t-esc="doc.x_fc_ship_via or '-'"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- Blanket / Block Partial callout -->
|
||||||
|
<t t-if="doc.x_fc_is_blanket_order or doc.x_fc_block_partial_shipments">
|
||||||
|
<div class="highlight-box">
|
||||||
|
<t t-if="doc.x_fc_is_blanket_order">
|
||||||
|
<strong>Blanket Order.</strong>
|
||||||
|
Parts will be released in quantities over time.
|
||||||
|
</t>
|
||||||
|
<t t-if="doc.x_fc_block_partial_shipments">
|
||||||
|
<strong>Partial shipments blocked.</strong>
|
||||||
|
The order ships as one complete batch.
|
||||||
|
</t>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<!-- Order lines -->
|
||||||
|
<table class="bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 14%;">PART</th>
|
||||||
|
<th class="text-start" style="width: 36%;">DESCRIPTION</th>
|
||||||
|
<th style="width: 18%;">TREATMENT</th>
|
||||||
|
<th style="width: 8%;">QTY</th>
|
||||||
|
<th style="width: 12%;">UNIT PRICE</th>
|
||||||
|
<th style="width: 12%;">SUBTOTAL</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<t t-foreach="doc.order_line.filtered(lambda l: not l.x_fc_archived and (not l.display_type or l.display_type in ('line_section', 'line_note', 'product')))"
|
||||||
|
t-as="line">
|
||||||
|
<t t-if="line.display_type == 'line_section'">
|
||||||
|
<tr class="section-row">
|
||||||
|
<td colspan="6"><strong 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-else="">
|
||||||
|
<tr>
|
||||||
|
<td class="text-center">
|
||||||
|
<span t-esc="line.x_fc_part_catalog_id.part_number or '-'"/>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<t t-set="clean_name" t-value="line.name"/>
|
||||||
|
<t t-if="line.name and '] ' in line.name">
|
||||||
|
<t t-set="clean_name" t-value="line.name.split('] ', 1)[1]"/>
|
||||||
|
</t>
|
||||||
|
<span t-esc="clean_name"/>
|
||||||
|
</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<span t-field="line.x_fc_coating_config_id"/>
|
||||||
|
</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"
|
||||||
|
t-options='{"widget": "monetary", "display_currency": doc.currency_id}'/>
|
||||||
|
</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>
|
||||||
|
|
||||||
|
<!-- Terms + Totals -->
|
||||||
|
<div class="row" style="margin-top: 15px;">
|
||||||
|
<div class="col-6">
|
||||||
|
<t t-if="doc.x_fc_invoice_strategy">
|
||||||
|
<strong>Invoice Strategy: </strong>
|
||||||
|
<t t-set="inv_strat" t-value="dict(doc._fields['x_fc_invoice_strategy'].selection).get(doc.x_fc_invoice_strategy, '-')"/>
|
||||||
|
<span t-esc="inv_strat"/>
|
||||||
|
<t t-if="doc.x_fc_invoice_strategy == 'deposit' and doc.x_fc_deposit_percent">
|
||||||
|
(<span t-esc="doc.x_fc_deposit_percent"/>%)
|
||||||
|
</t>
|
||||||
|
<br/>
|
||||||
|
</t>
|
||||||
|
<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;">
|
||||||
|
<table class="totals-table" style="width: auto; margin-left: auto;">
|
||||||
|
<tr>
|
||||||
|
<td style="min-width: 150px;">Subtotal</td>
|
||||||
|
<td class="text-end" style="min-width: 110px;">
|
||||||
|
<span t-field="doc.amount_untaxed"
|
||||||
|
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 style="background-color: #eaf2f8;">
|
||||||
|
<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>
|
||||||
|
|
||||||
|
<!-- External (customer-visible) notes -->
|
||||||
|
<t t-if="doc.x_fc_external_note">
|
||||||
|
<div style="margin-top: 15px;">
|
||||||
|
<strong>Notes:</strong>
|
||||||
|
<div t-field="doc.x_fc_external_note"/>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<!-- Signature block -->
|
||||||
|
<div class="row" style="margin-top: 25px;">
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="sig-box">
|
||||||
|
<div class="sig-line"/>
|
||||||
|
<div class="small-muted">Customer Acceptance (Signature / Date)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="sig-box">
|
||||||
|
<t t-if="doc.signature">
|
||||||
|
<img t-att-src="image_data_uri(doc.signature)"
|
||||||
|
style="max-height: 3cm; max-width: 8cm;"/><br/>
|
||||||
|
<span t-field="doc.signed_by"/>
|
||||||
|
</t>
|
||||||
|
<t t-else="">
|
||||||
|
<div class="sig-line"/>
|
||||||
|
</t>
|
||||||
|
<div class="small-muted">Authorized Representative</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user