Odoo: Como substituir a função original
No Odoo, as quantidades de um produto são calculadas sempre que o formulário é aberto. Isso acontece no modelo product.product ==> function _product_available.
Esta função retorna um dicionário chamado res.
Exemplo:
res = {8: {'qty_available': 5000.0, 'outgoing_qty': 1778.5, 'virtual_available': 3221.5, 'incoming_qty': 0.0}}
Agora eu quero modificar esses valores. Eu consegui fazer isso codificando-o diretamente na função original _product_available.
Como essa não é a maneira correta de fazer isso, quero fazer isso em um modelo herdado. Eu acho que preciso substituir a função? Ou substituir? Não sei como é chamado.
Tudo o que li sobre isso é bastante vago para mim. Não consigo encontrar muitas informações ou exemplos bons. Também estou lutando com o fato de que a função original é escrita em estilo antigo (osv) enquanto estou usando um novo estilo (modelos).
A partir de informações coletadas na internet, escrevi algo assim (o que não funciona).
class product_product_inherit(models.Model):
_inherit = 'product.product'
#api.v7 because of old style? Also tried .multi and .model...
@api.v7
def _product_available(self, cr, uid, ids, field_names=None, arg=False, context=None):
#example of modified values. To be made variable after this is working.
res = {8: {'qty_available': 200.222, 'outgoing_qty': 1778.5, 'virtual_available': 30205.263671875, 'incoming_qty': 0.0}}
result = super(C, self)._product_available(res)
return result
Alguém sabe a maneira correta de modificar o dicionário retornado da função original _product_available?
Como eu consegui funcionar:
class product_product_inherit(models.Model):
_inherit = 'product.product'
def _product_available(self, cr, uid, ids, field_names=None, arg=False, context=None):
for product in self.browse(cr, uid, ids, context=context):
id = product.id
res = {id: {'qty_available': 200.222, 'outgoing_qty': 1778.5, 'virtual_available': 30205.263671875, 'incoming_qty': 0.0}}
return res
Apenas defini exatamente o mesmo método que no modelo original.