3

I need help about generate report from wizard in odoo 9. On internet I'm find one unfinished example. I want get all user is res.user where create_date (field in res.users) >= date_from and =< date_to from my wizzard.

My source:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <record id="view_my_wiz_form" model="ir.ui.view">
            <field name="name">print.report.form</field>
            <field name="model">my.test.report</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <form string="Print Report">
                    <group colspan="4" >
                        <field name="date_from"/>
                        <field name="date_to" />
                    </group>                            
                    <group colspan="4" col="6">                     
                        <button  name="print_report" string="Print Users" type="object"/>
                   </group>
               </form>
            </field>
        </record>

        <record id="action_my_wiz_form" model="ir.actions.act_window">
            <field name="name">Print Report</field>
            <field name="res_model">my.test.report</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
           <field name="view_id" ref="view_my_wiz_form"/>
           <field name="target">new</field>        
        </record>

        <menuitem name="REPORT" id="menu_my_test_report" action="action_my_wiz_form" sequence="19"/>    
    </data>
</openerp>

.py file

    class my_test_report(models.Model):

        _name = 'my.test.report'
        _description = 'Test Report'  


        date_from = fields.Date(string = 'From')
        date_to = fields.Date(string = 'To')



        def print_report(self, cr, uid, ids, context=None):
            datas = {}
            if context is None:
                context = {}
            data = self.read(cr, uid, ids,['date_from', 'date_to'], context=context)
            date_from = data[0]['date_from'] 
            date_to = data[0]['date_to']
            obj = self.pool.get('res.users')
            ids = obj.search(cr, uid, [('create_date','>=',date_from),('create_date','<=',date_to)])
            print(ids)
            datas = {
                     'ids': ids,
                     'model': 'res.users',
                     'form': data
                    }
            return {
                    'type': 'ir.actions.report.xml',
                    'report_name': "XXXXXXX,
                    'datas': datas,
                }

Hw create report_name in .py, I'm put XXXXXXXX with several fields from res.users?

After run code without

return {
                        'type': 'ir.actions.report.xml',
                        'report_name': "XXXXXXX,
                        'datas': datas,
                    }

in console get [3, 4]

I'm try with this xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="report_sasa_test">
    <t t-call="report.html_container">
        <t t-set="data_report_margin_top" t-value="12"/>
        <t t-set="data_report_header_spacing" t-value="9"/>
        <t t-set="data_report_dpi" t-value="110"/>
        <t t-foreach="docs" t-as="o">
                <div class="page">

                    <table class="table table-condensed">
                        <thead>
                            <tr>
                                <th>Name</th>
                                <th>Test</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td><t t-esc="o.name"/></td>
                                <td><t t-esc="o.name"/></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
        </t>
    </t>
</template>
</odoo>

But after generate pdf i get two pdf page with one row i need all data on one page ---> https://postimg.org/image/gbdadtrm5/

Any solution how define this report?

etc.

id |  login    | signature
3  |  25.01.17 | ---
4  |  25.01.17 | ---
user_odoo
  • 2,284
  • 34
  • 55

1 Answers1

1

docs variable represents a record on your model by default unless you define it otherwise. I do not see you define it somewhere else here so your problem is that you have the t-foreach="docs" and then you create a page. The t-foreach="docs" should enclose the whole report view and not the page. Take a look at addons/account/views/report_invoince.xml as to how this loops works.

<template id="report_report_sasa_test">
    <t t-call="report.html_container">
        <t t-foreach="docs" t-as="o">
            <t t-call="your_module.report_sasa_test" t-lang="o.partner_id.lang"/>
        </t>
    </t>
</template>
George Daramouskas
  • 3,720
  • 3
  • 22
  • 51
  • I'm try with this example but again on two pdf page instead one data is displayed https://postimg.org/image/rdzyxs7w7/ – user_odoo Jan 30 '17 at 08:54
  • Check on Settings -> Reports for your report, check if the use attachment variable is set to true. This causes the report to be reloaded from the database instead from it being re-rendered. – George Daramouskas Jan 30 '17 at 09:07
  • As Default is uncecked! I'm try both variant again report on 2 pdf page! – user_odoo Jan 30 '17 at 09:30