Bismillah,
Assalamu'alaikum Warohmatullah Wabarokatuh,
Di artikel kali ini, insyaAllah saya akan memberikan sedikit tips bagaimana cara custom qweb report untuk memunculkan page number tapi tidak dimulai dari angka 1, tapi sesuai yang kita inginkan.
Contoh kasusnya adalah jika kita ingin menggabungkan beberapa dokumen PDF menjadi 1 dokumen PDF, penomoran di masing - masing PDF-nya tidak semua-nya dimulai dari angka 1 agar ketika kita merger nomornya akan melanjutkan dari 1 PDF ke PDF yang selanjutnya.
Seperti yang kita ketahui bahwa untuk memunculkan nomor halaman, odoo sudah menyediakan class="page" yang secara otomatis ketika kita tempatkan di header ataupun footer akan muncul nomor halamannya.
Bagaimana agar bisa kita atur nomor halaman awalnya? Cara yang bisa kita lakukan adalah dengan melakukan overiding class tersebut.
Berikut langkah - langkahnya :
1. Overiding template web.minimal_layout
<template id="minimal_layout" inherit_id="web.minimal_layout" priority="100">
<script t-if="subst" position="replace">
<script t-if="subst">
function subst() {
var vars = {};
var x = document.location.search.substring(1).split('&');
for (var i in x) {
var z = x[i].split('=', 2);
vars[z[0]] = unescape(z[1]);
}
var x = ['sitepage', 'sitepages', 'section', 'subsection', 'subsubsection'];
var z = {'sitepage': 'page', 'sitepages': 'topage'};
for (var i in x) {
var y = document.getElementsByClassName(z[x[i]] || x[i])
for (var j=0; j<y.length; ++j)
y[j].textContent = vars[x[i]];
}
var index = vars['webpage'].split('.', 4)[3];
var header = document.getElementById('minimal_layout_report_headers');
if(header){
var companyHeader = header.children[index];
header.textContent = '';
header.appendChild(companyHeader);
}
var footer = document.getElementById('minimal_layout_report_footers');
if(footer){
var companyFooter = footer.children[index];
footer.textContent = '';
footer.appendChild(companyFooter);
}
var pageElements = document.getElementsByClassName('page');
var startingPage = parseInt(pageElements[0].getAttribute('data-starting-page'), 10) || 0;
for (var j = 0; j < pageElements.length; ++j) {
var pageNumber = parseInt(vars.sitepage, 10) + startingPage - 1; // Starting from 5
pageElements[j].textContent = pageNumber;
}
}
</script>
</script>
</template>
Disini saya menambahkan variable pageElements untuk mengidentifikasi tag yang terdapat class="page"
Kemudian saya definisikan variable startingPage untuk mengambil value nomor awal halaman dari atribute data-starting-page di class="page" dengan memberikan nilai default 0
Selanjutnya menambahkan nomor halaman dengan nilai dari starting page mengupdatenya di element class="page"
2. Di dalam tag yang ada class="page" kita tambahkan atribut t-att-data-starting-page="nomor_halaman_dimulai"
<div class="footer">
<br/>
<table class="table table-bordered" style="border-bottom:0px solid white; border-top:2px solid #6F2DA8;border-left:0px solid white;border-right:2px solid #6F2DA8;">
<tbody>
<tr>
<td width="95%"></td>
<td style="background-color:#6F2DA8; text-align:center;border-bottom:2px solid #6F2DA8">
<div class="page" t-att-data-starting-page="o.page_start" style="color:white"/>
</td>
</tr>
</tbody>
</table>
</d
Contohnya disini untuk nomor_halaman_dimulai saya isi dari value field tertentu (o.page_start)
Terima kasih, semoga bermanfaat.
Kahfi
Wassalamu'alaikum Warohmatullah Wabarokatuh