2010-12-14 6 views
2

Wie bekommt diese sum_taxes Methode seinen lot Parametersatz? Dies ist ein Codebeispiel aus dem Auktions-Addon in openerp.Funktion aufrufen in openerp meldet

import pooler 
    import time 
    from report import report_sxw 
    from osv import osv 

    class seller_form_report(report_sxw.rml_parse): 
     def __init__(self, cr, uid, name, context): 
      super(seller_form_report, self).__init__(cr, uid, name, context=context) 
      lot=self.pool.get('auction.lots').browse(cr,uid,uid) 
      #address=lot.bord_vnd_id.address_get(self.cr,self.uid,[partner.id]) 
     # partner=lot.bord_vnd_id.partner_id 
     # address=partner.address and partner.address[0] or "" 
     # street = address and address.street or "" 



      self.localcontext.update({ 
       'time': time, 
       'sum_taxes': self.sum_taxes, 
       'sellerinfo' : self.seller_info, 
       'grand_total' : self.grand_seller_total, 
     #  'street':street, 
     #  'address':address, 
    }) 


    def sum_taxes(self, lot): 
     taxes=[] 
     amount=0.0 
     if lot.bord_vnd_id.tax_id: 
      taxes.append(lot.bord_vnd_id.tax_id) 
     elif lot.auction_id and lot.auction_id.seller_costs: 
      taxes += lot.auction_id.seller_costs 
     tax=self.pool.get('account.tax').compute(self.cr,self.uid,taxes,lot.obj_price,1) 
     for t in tax: 
      amount+=t['amount'] 
     return amount 
    def seller_info(self): 
     objects = [object for object in self.localcontext.get('objects')] 
     ret_dict = {} 
     ret_list = [] 
     for object in objects: 

      partner = ret_dict.get(object.bord_vnd_id.partner_id.id,False) 
      if not partner: 
       ret_dict[object.bord_vnd_id.partner_id.id] = {'partner' : object.bord_vnd_id.partner_id or False,'lots':[object]} 
      else: 
       lots = partner.get('lots') 
       lots.append(object) 
#  buyer_ids=self.pool.get(auction.lots).read(cr,uid,lot) 
     return ret_dict.values() 
    def grand_seller_total(self,o): 
     grand_total = 0 
     for oo in o: 
      grand_total =grand_total + oo['obj_price']+ self.sum_taxes(oo) 
     return grand_total 


report_sxw.report_sxw('report.seller_form_report', 'auction.lots', 'addons/auction/report/seller_form_report.rml', parser=seller_form_report) 
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: 

Antwort

1

Prüfung folgende Datei Auktion/report/buyer_form_report.sxw
[[ repeatIn(o['lots'],'oo') ]] [[ oo.obj_num ]] Hier oo 'definiert ist und sein Name wie [[ oo.obj_price + sum_taxes(oo) ]]

und wie dieser Bericht für das Modell eingetragen ist: auction.lots es wird die Rückkehr BrowseRecord für die active_id wenn Benutzer auf Bericht klickt !!!

1

Es ruft nicht tatsächlich die Funktion in diesem Code auf, die Funktion wird wahrscheinlich aus dem Bericht aufgerufen und übergibt dort den Parameter lot. In dem von Ihnen geposteten Codebeispiel wird lediglich ein Funktionszeiger in den Kontext eingefügt.

Weitere Informationen zu OpenERP-Berichten finden Sie in der reports section des Entwicklerhandbuchs. Ich finde es auch sehr hilfreich, den OpenERP-Server in Eclipse zu betreiben und den Code im Debug-Modus zu durchlaufen. Dann können Sie sehen, wo die Methode sum_taxes() aufgerufen wird.