Přejít na obsah
Menu
You need to be registered to interact with the community.
This question has been flagged
6 Odpovědi
17515 Zobrazení

I need to show footer only on the last page of a pdf report. It's possibile or I'm a dreamer?

Avatar
Zrušit

AFAIK, there's no official way to achieve that but, considering this: https://github.com/odoo/odoo/blob/8.0/addons/report/static/src/js/subst.js you can hide/show you footer by checking the page number (via custom javascript). For instance, you'll find the page number and the total number of pages here in the default report layout: https://github.com/odoo/odoo/blob/8.0/addons/report/views/layouts.xml#L107

converted my answer to comment by mistake and it deleted your comment...sorry. btw, i tested it and you're right. that doen't work :(

Nejlepší odpověď

Hello Francesco I have been wanting to submit this to odoo for quite a while and maybe I will, here is how I did it:

        <template id="report_minimal_layout" inherit_id="report.minimal_layout" >
            <xpath expr="//head" position="inside">
              <script src='/module_name/static/js/pagination_hide.js'></script> <-- Must be added in the module -->
            </xpath>

            <xpath expr="//body" position="attributes">
                <attribute t-translation="off" name="onload">subst(); pagination_hide();</attribute>
            </xpath>
        </template>

Contents of the js file:

function pagination_hide() {
    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]);
    }

    if (vars['page'] <= 1){
        hidden_nodes = document.getElementsByClassName("hide_firstpage");
        for (i = 0; i < hidden_nodes.length; i++) {
            hidden_nodes[i].style.visibility = "hidden";
        }
    }

    if (vars['page'] == vars['topage']){
        hidden_nodes = document.getElementsByClassName("show_lastpage");
        for (i = 0; i < hidden_nodes.length; i++) {
            hidden_nodes[i].style.display = "block";
        }
    }

    if (vars['page'] == 1){
        hidden_nodes = document.getElementsByClassName("show_firstpage");
        for (i = 0; i < hidden_nodes.length; i++) {
            hidden_nodes[i].style.display = "block";
        }
    }
}

Of course this will not actually remove the footer and allow for the body content to stretch to the very bottom but it show/hides depending on the page it is on using css to alter the display property

After doing this you can use these helper classes which do pretty much what they say

 

 

Avatar
Zrušit
Nejlepší odpověď

Hello Francesco,

This module from OCA can solve your problem

https://github.com/OCA/reporting-engine/tree/8.0/report_qweb_element_page_visibility

Avatar
Zrušit
Nejlepší odpověď

A module implemeting a magical `last-page` class has been developed (by me) to showcase a basic possible implementation.

    https://github.com/0k/report_extended

A stackoverflow answer explain how this works in a viable place for posting code:

    http://stackoverflow.com/questions/28172283/checking-for-last-page-in-qweb-reports-in-odoo

Nice similar solution also on this blog post:

    http://planet.agilebg.com/en/2014/05/how-to-add-html-element-at-the-bottom-of-the-last-page-of-webkit-report/ 

Avatar
Zrušit
Nejlepší odpověď

Hello ,

Here i have given answer for this question!

Click Here

Hope this will help,

Regards,

Anil.


Avatar
Zrušit