2010-12-14 74 views
2

Comment cette méthode sum_taxes obtient-elle son jeu de paramètres lot? Ceci est un exemple de code de l'addon d'enchères dans openerp.Fonction appelant dans des rapports openerp

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: 

Répondre

1

chèque fichier suivant vente/rapport/buyer_form_report.sxw
[[ repeatIn(o['lots'],'oo') ]] [[ oo.obj_num ]] Voici oo »est défini et son appelé comme [[ oo.obj_price + sum_taxes(oo) ]]

et que ce rapport est enregistré pour le modèle: auction.lots il retournera la BrowseRecord pour le active_id lorsque l'utilisateur clique sur le rapport !!!

1

Il n'appelle pas la fonction dans ce code, la fonction est probablement appelée depuis le rapport et y passe le paramètre lot. Dans l'exemple de code que vous avez posté, il s'agit simplement de placer un pointeur de fonction dans le contexte.

Pour plus d'informations sur les rapports OpenERP, consultez le reports section du livre du développeur. Je trouve également très utile d'exécuter le serveur OpenERP dans Eclipse et de parcourir le code en mode débogage. Ensuite, vous pouvez voir d'où la méthode sum_taxes() est appelée.