2014-11-03 21 views
0

在stock.piking模型,我已经存储在数据库中的个性化值:sbf_releve如何添加值从插件/ stock_account/stock.py发票在Odoo

我需要发送此值帐户。发票,当它创建

发票数据在插件/ stock_account/stock.py

class stock_picking(osv.osv): 
    _inherit = 'stock.picking' 

    def _get_invoice_vals(self, cr, uid, key, inv_type, journal_id, origin, context=None): 
     if context is None: 
      context = {} 
     partner, currency_id, company_id, user_id = key 
     if inv_type in ('out_invoice', 'out_refund'): 
      account_id = partner.property_account_receivable.id 
      payment_term = partner.property_payment_term.id or False 
     else: 
      account_id = partner.property_account_payable.id 
      payment_term = partner.property_supplier_payment_term.id or False 
     return { 
      'origin': origin, 
      'date_invoice': context.get('date_inv', False), 
      'user_id': user_id, 
      'partner_id': partner.id, 
      'account_id': account_id, 
      'payment_term': payment_term, 
      'type': inv_type, 
      'fiscal_position': partner.property_account_position.id, 
      'company_id': company_id, 
      'currency_id': currency_id, 
      'journal_id': journal_id, 
     } 

准备在我自己的模块,新的发票,我试图重写此方法:

from openerp.osv import fields, osv 

class stock_picking(osv.osv): 
    _name = "stock.picking" 
    _inherit = 'stock.picking' 

    _columns = { 
     'sbf_regroupement': fields.boolean('Regroupement', copy=True), 
     'sbf_releve': fields.boolean('Relevé', copy=True), 
    } 

    def create(self, cr, user, vals, context=None): 
     context = context or {} 
     if ('name' not in vals) or (vals.get('name') in ('/', False)): 
      ptype_id = vals.get('picking_type_id', context.get('default_picking_type_id', False)) 
      sequence_id = self.pool.get('stock.picking.type').browse(cr, user, ptype_id, context=context).sequence_id.id 
      vals['name'] = self.pool.get('ir.sequence').get_id(cr, user, sequence_id, 'id', context=context) 
     opartner = self.pool.get('res.partner').browse(cr, user, vals['partner_id']) 
     if ('sbf_releve' not in vals): 
      vals['sbf_releve'] = opartner.sbf_releve 
     if ('sbf_regroupement' not in vals): 
      vals['sbf_regroupement'] = opartner.sbf_regroupement 
      # self.pool.get('product.product').browse(cr, uid, [prod_id], context=ctx)[0] 
     return super(stock_picking, self).create(cr, user, vals, context) 


    def _get_invoice_vals(self, cr, uid, key, inv_type, journal_id, origin, context=None): 



     if context is None: 
      context = {} 
     partner, currency_id, company_id, user_id = key 
     if inv_type in ('out_invoice', 'out_refund'): 
      account_id = partner.property_account_receivable.id 
      payment_term = partner.property_payment_term.id or False 
     else: 
      account_id = partner.property_account_payable.id 
      payment_term = partner.property_supplier_payment_term.id or False 

     sbf_releve = partner.sbf_releve 
     vals = super(stock_picking, self)._get_invoice_vals(cr, uid, key, inv_type, journal_id, origin, context) 

     vals['sbf_releve'] = True 

     return vals 

但它只是没有工作。为什么?它的工作原理应对来自sale.order值时stock.picking但不account.invoice

回答

0

为了重载一个成员函数,你需要创建一个子类:

class my_stock_picking(stock_picking): 

    def get_invoice_vals(<your parameters>): 
      <your function body> 

对于任何功能不在您的子类中定义,它将使用原始stock_picking函数。

0

据我所知,您想将您的一些自定义字段从stock.picking转移到account.invoice。我做了类似的事情,但对我来说,我从stock.moveaccount.invoice.line。您应该可以根据您的情况调整下面的代码。

class stock_move(osv.osv): 
_inherit = "stock.move" 

def _get_invoice_line_vals(self, cr, uid, move, partner, inv_type, context=None): 
    ret = super(stock_move, self)._get_invoice_line_vals(cr, uid, move, partner, inv_type, context=context) 

    print "blah blah blah::::",move.date_expected 

    if move.date_expected: 
     ret['x_delivery_date'] = move.date_expected 

    return ret 

这里的每个产品的date_expected应该转移到account.invoice.line。我已经在account.invoice.line中定制了一个x_delivery_date。同时更新__openerp__.py并在依赖部分包含'帐户'。我也有这个问题。希望能帮助到你。