Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
6 Trả lời
17572 Lượt xem

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

Ảnh đại diện
Huỷ bỏ

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 :(

Câu trả lời hay nhất

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

 

 

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hello Francesco,

This module from OCA can solve your problem

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

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

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/ 

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hello ,

Here i have given answer for this question!

Click Here

Hope this will help,

Regards,

Anil.


Ảnh đại diện
Huỷ bỏ