В модели stock.piking у меня есть персонализированное значение, хранящееся в базе данных: sbf_releve
Мне нужно отправить это значение в account.invoice, когда он создает новый счет
Данные счета-фактуры готовятся по адресу addons/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.