216 lines
12 KiB
XML
Executable File
216 lines
12 KiB
XML
Executable File
<odoo>
|
|
<record id="action_report_labels" model="ir.actions.report">
|
|
<field name="name">Labels</field>
|
|
<field name="model">sos_deliverables_boq</field>
|
|
<field name="report_type">qweb-pdf</field>
|
|
<field name="report_name">sos_inventory.labels_print</field>
|
|
<field name="report_file">sos_inventory.labels_print</field>
|
|
<field name="binding_model_id" eval="False"/>
|
|
<field name="binding_type">report</field>
|
|
</record>
|
|
|
|
<template id="labels_print">
|
|
<t t-call="web.html_container">
|
|
<t t-foreach="docs" t-as="o">
|
|
<t t-call="web.basic_layout">
|
|
<!-- Include Bootstrap CSS -->
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"/>
|
|
|
|
<style>
|
|
/* Reset default margins and ensure full-page layout */
|
|
.page {
|
|
margin: 3mm; /* Reduced margins */
|
|
padding: 0;
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
overflow: hidden; /* Prevent content from overflowing */
|
|
}
|
|
|
|
/* Container for each set of tables (FG, SFG, Materials) */
|
|
.label-set {
|
|
page-break-inside: avoid; /* Try to keep the entire set on one page */
|
|
page-break-after: always; /* Force a page break after each set */
|
|
}
|
|
|
|
/* Ensure tables stay within their column */
|
|
.table-container {
|
|
width: 100%; /* Full width of the column */
|
|
page-break-inside: avoid; /* Prevent table from splitting across pages */
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
/* Clearfix for the last table if odd number of tables */
|
|
.label-set::after {
|
|
content: "";
|
|
display: block;
|
|
clear: both;
|
|
}
|
|
|
|
/* Compact table styling */
|
|
.label-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
}
|
|
|
|
.label-table td {
|
|
font-size: 15px; /* Smaller font size for compactness */
|
|
padding: 2mm; /* Reduced padding */
|
|
border: 1px solid #000;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.label-table .column {
|
|
font-weight: bold;
|
|
font-size: 14px;
|
|
width:20%
|
|
}
|
|
|
|
/* Adjust Bootstrap row margins for PDF */
|
|
.row {
|
|
margin-left: 0;
|
|
margin-right: 0;
|
|
margin-bottom:40px;
|
|
}
|
|
|
|
/* Adjust Bootstrap column padding for PDF */
|
|
[class*="col-"] {
|
|
padding-left: 5px;
|
|
padding-right: 5px;
|
|
}
|
|
|
|
/* Style for empty column placeholder */
|
|
.empty-col {
|
|
font-size: 10px;
|
|
text-align: center;
|
|
padding: 2mm;
|
|
}
|
|
</style>
|
|
|
|
<div class="page">
|
|
|
|
|
|
<t t-set="counter" t-value="0"/>
|
|
<t t-foreach="range(o.master_quantity)" t-as="line_items">
|
|
<t t-set="counter" t-value="counter + 1"/>
|
|
<div class="label-set">
|
|
<!-- Combine all tables into a single list -->
|
|
<t t-set="all_tables" t-value="[]"/>
|
|
<!-- Add FG tables -->
|
|
<t t-foreach="o.line_ids_fg or []" t-as="fg_item">
|
|
<t t-set="fg_index_safe" t-value="fg_index if fg_index is not None else 0"/>
|
|
<t t-set="all_tables" t-value="all_tables + [(1, fg_item, fg_index_safe + 1)]"/>
|
|
</t>
|
|
<!-- Add SFG tables -->
|
|
<t t-foreach="o.line_ids_sfg or []" t-as="sfg_item">
|
|
<t t-set="sfg_index_safe" t-value="sfg_index if sfg_index is not None else 0"/>
|
|
<t t-set="all_tables" t-value="all_tables + [(2, sfg_item, sfg_index_safe + 1)]"/>
|
|
</t>
|
|
<!-- Add Materials tables -->
|
|
<t t-foreach="o.line_ids_material or []" t-as="material_item">
|
|
<t t-set="material_index_safe" t-value="material_index if material_index is not None else 0"/>
|
|
<t t-set="all_tables" t-value="all_tables + [(3, material_item, material_index_safe + 1)]"/>
|
|
</t>
|
|
|
|
|
|
|
|
<!-- Process all tables in pairs -->
|
|
<t t-foreach="range(0, len(all_tables), 2)" t-as="pair_index">
|
|
<div class="row">
|
|
<!-- First table in the pair -->
|
|
<div class="col-6">
|
|
<t t-set="table_info" t-value="all_tables[pair_index]"/>
|
|
<t t-set="category" t-value="table_info[0]"/>
|
|
<t t-set="item" t-value="table_info[1]"/>
|
|
<t t-set="index" t-value="table_info[2]"/>
|
|
<div class="table-container">
|
|
<table class="label-table">
|
|
<tbody>
|
|
<tr>
|
|
<td class="column">Set No</td>
|
|
<td>#<t t-esc="counter"/>/<t t-esc="o.master_quantity"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">Battery</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">No</td>
|
|
<td><t t-esc="category"/>.<t t-esc="index"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">Name</td>
|
|
<td><t t-esc="item.component_id.name or 'N/A'"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">UOM</td>
|
|
<td><t t-esc="item.uom or 'N/A'"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">Qty</td>
|
|
<td><t t-esc="item.singet_set_qty or 'N/A'"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">S.No</td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Second table in the pair (if exists) -->
|
|
<div class="col-6">
|
|
<t t-if="pair_index + 1 < len(all_tables)">
|
|
<t t-set="table_info" t-value="all_tables[pair_index + 1]"/>
|
|
<t t-set="category" t-value="table_info[0]"/>
|
|
<t t-set="item" t-value="table_info[1]"/>
|
|
<t t-set="index" t-value="table_info[2]"/>
|
|
<div class="table-container">
|
|
<table class="label-table">
|
|
<tbody>
|
|
<tr>
|
|
<td class="column">Set No</td>
|
|
<td>#<t t-esc="counter"/>/<t t-esc="o.master_quantity"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">Battery</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">No</td>
|
|
<td><t t-esc="category"/>.<t t-esc="index"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">Name</td>
|
|
<td><t t-esc="item.component_id.name or 'N/A'"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">UOM</td>
|
|
<td><t t-esc="item.uom or 'N/A'"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">Qty</td>
|
|
<td><t t-esc="item.singet_set_qty or 'N/A'"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="column">S.No</td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</t>
|
|
<t t-else="">
|
|
<div class="empty-col"></div>
|
|
</t>
|
|
</div>
|
|
</div> <!-- Close row -->
|
|
</t>
|
|
</div>
|
|
</t>
|
|
</div>
|
|
</t>
|
|
</t>
|
|
</t>
|
|
</template>
|
|
</odoo> |