2010-12-14 6 views
2

sum_taxes 메서드가 lot 매개 변수를 가져 오는 방법은 무엇입니까? 이것은 openerp에있는 경매 애드온의 코드 샘플입니다.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: 

답변

1

체크 다음과 같은 파일 경매/보고서/buyer_form_report.sxw 여기
[[ repeatIn(o['lots'],'oo') ]] [[ oo.obj_num ]] 'oo의'정의와는 [[ oo.obj_price + sum_taxes(oo) ]]

처럼라는이 보고서는 모델에 대한 등록과 같이 auction.lots가가를 반환합니다 사용자가 보고서를 클릭 할 때 active_id에 대한 BrowseRecord !!!

1

실제로 해당 코드에서 함수를 호출하지는 않지만 함수는 보고서에서 호출되어 거기에 lot 매개 변수를 전달합니다. 게시 한 코드 예제에서 함수 포인터를 컨텍스트에 넣는 것입니다.

OpenERP 보고서에 대한 자세한 내용은 개발자 안내서 reports section을 확인하십시오. 또한 이클립스에서 OpenERP 서버를 실행하고 디버그 모드에서 코드를 단계별로 실행하는 것이 정말 도움이된다는 것을 알았습니다. 그러면 sum_taxes() 메서드가 호출되는 위치를 볼 수 있습니다.