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_add_from_so_wizard_views.xml',
|
||||
'wizard/fp_add_from_quote_wizard_views.xml',
|
||||
'report/report_so_acknowledgement.xml',
|
||||
'wizard/fp_part_catalog_import_wizard_views.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>
|
||||
Reference in New Issue
Block a user