Inherit or Override QWEB report header and footer
To customize report header and footer we need inherit/override these two report templates.
1- report.external_layout_header
2- report.external_layout_footer
You just need to inherit or override above templates and simply apply bootstrap or CSS classes for your header and footer on your custom template according to your need and requirement.
Follow these steps to override report layouts.
- Create a new XML file and name it (custom_header.xml)
- Create a new XML file and name it (custom_footer.xml)
- Add this file into __manifest__.py or (__openerp__.py) file
custom_header.xml
In below code we have inherited or override "external_layout_header" template. And customize that template according to our need using Bootstrap and CSS.
<?xml version='1.0' encoding='utf-8'?>
<openerp>
<data>
<template id="monthly_report_header" inherit_id="report.external_layout_header">
<xpath expr="//div[@class='header']" position="replace">
<div class="header">
<div class="row">
<div class="col-xs-3">
</div>
<div class="col-xs-9 text-right" style="margin-top:20px;">
<h5>Custom Header</h5>
</div>
</div>
<div class="row zero_min_height">
<div class="col-xs-12">
<div style="border-bottom: 1px solid black;"/>
</div>
</div>
</div>
</xpath>
</template>
</data>
</openerp>
custom_footer.xml
In below code we have inherited or override "external_layout_footer" template. And customize that template according to our need using Bootstrap and CSS.
<?xml version='1.0' encoding='utf-8'?>
<openerp>
<data>
<template id="monthly_report_footer" inherit_id="report.external_layout_footer">
<xpath expr="//div[@class='footer']" position="replace">
<div class="footer">
<div class="text-center" style="border-top: 1px solid black;">
<ul class="list-inline">
<li>Developed By: Hassan Enterprises</li>
<li>&bull;</li>
<li>Phone: +92 321 1234567</li>
<li>&bull;</li>
<li>Email: abc@gmail.com</li>
</ul>
<ul class="list-inline">
<li>Page:</li>
<li><span class="page"/></li>
<li>/</li>
<li><span class="topage"/></li>
</ul>
</div>
</div>
</xpath>
</template>
</data>
</openerp>
Now we can use that template in our Odoo QWEB reports to display our customize header and footer.
<?xml version='1.0' encoding='utf-8'?>
<openerp>
<data>
<report
id="report_monthly_pensioners"
model="dgmsw.employee.salary"
string="Monthly Report"
name="dgmsw.monthly_report"
file="dgmsw.report_monthly_pensioners"
report_type="qweb-pdf" />
<template id="monthly_report">
<!--Calling our customize report header template-->
<t t-call="report.external_layout_header"/>
</t>
<t t-call="report.html_container">
<div class="page">
<div class="row">
<!--Your report logic goes here-->
</div>
</div>
</t>
<!--Calling our customize report footer template-->
<t t-call="report.external_layout_footer"/>
</t>
</template>
</data>
</openerp>
In above code we have used "report.html_container" that's why we explicitly use "report.external_layout_header" and "report.external_layout_footer". If we will use "report.external_layout" than there is no need to call header and footer template.