Contributors mailing list archives

contributors@odoo-community.org

Re: Needs a tuto on V9 and Qweb

by
MISYL SERVICES., Michael Delvoye
- 30/07/2016 18:18:42
Hi Houssine, 
thanks for your answer.
It works when i put my method on account.invoice (inherit) :-)

This way to do is simple and logical but i tought (reading some tuto on the V8 that the right way was to use 

class invoice_parser(report_sxw.rml_parse):
and 
class report_invoice(models.AbstractModel):


2016-07-29 20:22 GMT+02:00 Houssine BAKKALI <houssine.bakkali@gmail.com>:
Hi Michael,

In your qeb if the "o" of the "o.getmessage()" reference your invoice objet instance the function should be in the account.invoice model instead of bet set in the parser. move your function, restart the server, update your module and try again.

2016-07-29 20:08 GMT+02:00 Michael Delvoye <mdelvoye@misyl-services.com>:
Hello Houssine


2016-07-29 16:37 GMT+02:00 Houssine BAKKALI <houssine.bakkali@gmail.com>:
Hi Michael,

It seems that you added the leading underscore in the py file while Daniel told you that it was missing in the qweb file so not in your python code.

So undone your change in the python code and put the leading underscore in the qweb.

It should work then

by the way, adding a leading underscore means that your variable or function is marked as private (it's a naming convention) so I'm not sure that you should call you function from outside of your class...


 
From my point of view you should remove the leading underscore from your python code and in the qweb... at least for the get_message function


yes in fact you're right in fact. I modify my code in this way but doesn't work :-(

This the code of my parser

import time
from openerp.report import report_sxw
from openerp import api, models

class invoice_parser(report_sxw.rml_parse):
    
    def __init__(self, cr, uid, name, context):
        super(invoice_parser, self).__init__(cr, uid, name, context=context)
        self.localcontext.update({
            'time': time,                      
            'getmessage': self.getmessage(),
        })
        self.context = context
    
    @api.model
    def getmessage(self):
        #code = self.pool.get('ir.sequence').next_by_code(self.cr, self.uid, seq_code)
        message = "Hello world"
        return message
    
class report_invoice(models.AbstractModel):
    _name = 'report.custom_reports.x_invoice_report'
    _inherit = 'report.abstract_report'
    _template = 'custom_reports.x_invoice_report'
    _wrapped_report_class = invoice_parser


This is the code of my XML qweb
......
<div><span t-esc="o.getmessage()"/></div>
.......

Very sorry to annoy the community with this problem but I search lots of time with no success.
I think it's a detail somewhere but impossible to see it.

May be on the class 
class report_invoice(models.AbstractModel):
i think ?









 
2016-07-29 16:23 GMT+02:00 Michael Delvoye <mdelvoye@misyl-services.com>:
Hi Daniel,
Same error :-(

This is my parser

import time
from openerp.report import report_sxw
from openerp import api, models

class invoice_parser(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(invoice_parser, self).__init__(cr, uid, name, context=context)
        self.localcontext.update({
            'time': time,                      
            'getmessage': self.__getmessage,
        })
        self.context = context
    
    @api.model
    def __getmessage(self):
        message = "Hello world"
        return message
    

class report_invoice(models.AbstractModel):
    _name = 'report.custom_reports.x_invoice_report'
    _inherit = 'report.abstract_report'
    _template = 'custom_reports.x_invoice_report'
    _wrapped_report_class = invoice_parser



QWebException: "'account.invoice' object has no attribute 'get_message'" while evaluating
'o.getmessage()'

2016-07-28 20:08 GMT+02:00 Daniel Reis <dgreis@sapo.pt>:
I think you're missing a leading underscore in the method name used in the QWeb.

--
Daniel

No dia 28/07/2016, às 18:08, Michael Delvoye <mdelvoye@misyl-services.com> escreveu:

Hi Daniel
thanks for your help
When i see your answer i believed it was the solution but 
I have the same error :-( 

QWebException: "'account.invoice' object has no attribute 'get_message'" while evaluating
'o.get_message()'



2016-07-27 0:08 GMT+02:00 Daniel Reis <dgreis@sapo.pt>:

Hi Michael,

You might need to add @api.model to the "def _get_message(self)"

Since it is a object method, instead of

  <div><span t-esc="get_message()"/></div>

try

  <div><span t-esc="o.get_message()"/></div>


Both the "Odoo Development Essentials" and the "Odoo Development Cookbook" cover QWeb and the other Odoo development topics.
You might find them useful.

Regards
Daniel Reis


Citando Michael Delvoye <mdelvoye@misyl-services.com>:

Hi,
i'm new on OCA and i need help so as to understand qweb.
I used to work with mako on V7 where i could write python function very simply.
 
I search to do the same thing with qweb. I see in forum and other sites that it is possible but i don't succeed in implementing the method for my database test.
 
If someone could give me some help, it would be great because i've turned around this problem since 2 weeks with no solution.
when i 'll find the solution i'll give the code of my module on my github for people like me who wants to learn about qweb (TutoQweb light)
 
This is my code :
 
 
 
Odoo Version = V9
Module's name = custom_report
Parser Class = report/ invoice_parser.py
Template = views/report_invoice.xml
 
 
Invoice_parser.py
------------------------
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
 
import time
from openerp.report import report_sxw
from openerp import api, models
 
class invoice_parser(report_sxw.rml_parse):
  
    def __init__(self, cr, uid, name, context):
        super(invoice_parser, self).__init__(cr, uid, name, context=context)
        self.localcontext.update({
            'time': time,                      
            'get_message': self._get_message,
        })
        self.context = context
    
    def _get_message(self):
        #code = self.pool.get('ir.sequence').next_by_code(self.cr, self.uid, seq_code)
        message = "Hello world"
        return message
    

 
 
 
class report_invoice(models.AbstractModel):
    _name = 'report.custom_reports.x_invoice_report'
    _inherit = 'report.abstract_report'
    _template = 'custom_reports.x_invoice_report'
    _wrapped_report_class = invoice_parser
 
 
 
 
report_invoice.xml
------------------------
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
       <template id="x_invoice_report" inherit_id="account.report_invoice_document">
     <xpath expr="//div[@class='page']" position="replace">
          <div class="page">
           <style type="text/css">
                    h1   {font-size: 16; font-weight:bold;text-decoration:underline;}
                        table#t01 {text-align: center;width: 75%; border-left: 1px solid black; border-right: 1px solid black;}
                    .table1{border-collapse: collapse;width:100%;}
                    .th1{padding:5px;vertical-align:top;border:1px solid black;text-align:center;}
                    .td1{padding:5px;vertical-align:top;border-left:1px solid black;border-right:1px solid black;}
.td2{padding:5px;vertical-align:top;border-left:1px solid black;border-right:1px solid black;border-bottom:1px solid black;}
.td3{padding:5px;vertical-align:top;border:1px solid black;}
.td4{padding:5px;vertical-align:top;border:none;}
                        .mdel{color:purple;}                         
                  </style>
 
           <div class="row">
               <div class="col-xs-6">
                <div style="font-size: 20px;"><span>A l'attention de  : </span> <span t-field="o.partner_id.name"/></div>
                <div><span>document d'origine  : </span> <span t-field="o.origin"/></div>
               </div>
               <div class="col-xs-6">
                <div style="font-size: 20px;">
                <span t-if="o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')">Facture N° </span>
                <span t-if="o.type == 'out_invoice' and o.state == 'proforma2'">PRO-FORMA N°</span>
                <span t-if="o.type == 'out_invoice' and o.state == 'draft'">Facture Brouillon</span>
                <span t-if="o.type == 'out_invoice' and o.state == 'cancel'">Facture Annulée</span>
                <span t-if="o.type == 'out_refund'">Avoir</span>
                <span t-if="o.type == 'in_refund'">Remboursement N°</span>
                <span t-if="o.type == 'in_invoice'">Facture N°</span>
                <span t-field="o.number"/>
                </div>
                <div><span>du : </span> <span t-field="o.date_invoice"/></div>
                <br/>
                <div style="font-size: 20px;"><strong><span t-field="o.partner_id.parent_id.name"/></strong></div>
                <div style="font-size: 18px;">
                <div><span t-field="o.partner_id.parent_id.street"/></div>
                <div><span t-field="o.partner_id.parent_id.street2"/></div>
                <div><span t-field="o.partner_id.parent_id.zip"/> <span t-field="o.partner_id.parent_id.city"/></div>
                <div><span t-field="o.partner_id.parent_id.country_id.name"/></div>
    </div>
               </div>
           </div>
            <br/>
 
  <div><span t-esc="get_message()"/></div>
 
 
    <table class="table1">
            <thead>
                   <tr>
                       <th class="th1" style="width:100px;">Référence</th>
                       <th class="th1">Désignation</th>
                       <th class="th1" style="width:30px;">Qté</th>
                       <th class="th1" style="width:20px;">UV</th>
                       <th class="th1" style="width:70px;">P.U (€)</th>
                       <th class="th1" style="width:80px;">MT.HT (€)</th>
                       <th class="th1" style="width:30px;">TVA</th>
                       <!--  
                       <th t-if="display_discount" class="text-right" groups="sale.group_discount_per_so_line">Disc.(%)</th>
                       <th class="text-right">Taxes</th>
                       <th class="text-right">Price</th>
                       -->
                   </tr>
               </thead>
               <tbody class="invoice_tbody">
                   <tr t-foreach="o.invoice_line_ids" t-as="l">
                    <td class="td1"><span t-field="l.product_id.name_template"/></td>    
                       <td class="td1"><span t-field="l.name"/></td>
                                               
                       <td class="td1">xxx</td>
                       <td class="td1">xxx</td>
                       <td class="td1">xxx</td>
                       <td class="td1">xxx</td>
                       <td class="td1">xxx</td>
                   </tr>
                </tbody>
               </table>
          </div> <!-- Fin page -->
      </xpath>
      
       </template>
 
 
 
 
 
--
Michael Delvoye
Directeur Technique
MISYL SERVICES
 

_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe


 

_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe





--
Michael Delvoye
Directeur Technique
MISYL SERVICES

_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe




--
Michael Delvoye
Directeur Technique
MISYL SERVICES

_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe


_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe




--
Michael Delvoye
Directeur Technique
MISYL SERVICES

_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe


_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe




--
Michael Delvoye
Directeur Technique
MISYL SERVICES