如何解决Odoo 11 从计算字段插入 one2many
我正在开发一个自定义模块,允许用户使用库存变动信息创建发票。
在我的 .py 中,我继承了两个模型:stock.move 和 account.invoice,目标是将新的 invoice_line_ids 添加到当前发票,但我不太明白计算字段的工作原理。上面的代码是我正在使用的
# -*- coding: utf-8 -*-
from odoo import fields,models
class Move(models.Model):
_inherit = 'stock.move'
x_invoice_id = fields.Many2one('account.invoice',string="Factura de referencia",ondelete='set null')
class Invoice(models.Model):
_inherit = 'account.invoice'
x_stock_move = fields.One2many('stock.move',string="Movimiento asociado",'x_invoice_id')
invoice_line_ids = fields.One2many('account.invoice.line',string="Líneas de la factura",'invoice_id',compute='_add_lines')
## Add product_id and quantity from the selected stock moves
@api.depends('x_stock_move')
def _add_lines(self):
for move in x_stock_move:
self.env['account.invoice.line'].create({
'invoice_id': values['self.invoice_line_ids']
'product_id': values['move.product_id'],'quantity': values['move.product_uom_qty']
})
但是方法 _add_lines() 工作不正常,有什么想法吗?
这是我的自定义视图
<odoo>
<record id="invoice_stock_moves" model="ir.ui.view">
<field name="name">account.invoice.x_stock_move</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_supplier_form"/>
<field name="arch" type="xml">
<xpath expr="//page" position="after">
<page string="Movimientos asociados" attrs="{'invisible': [('partner_id','=',False)]}">
<field name="x_stock_move" widget="many2many" options="{'no_create': True}" domain="['&',('state','done'),('picking_partner_id',context.get('partner_id')),'&',('x_invoice_id',False)]" attrs="{'readonly':[('state','not in',('draft',))]}">
<tree>
<field name="state" invisible="1"/>
<field name="date" />
<field name="picking_partner_id" invisible="1"/>
<field name="reference" />
<field name="product_id" />
<field name="product_uom_qty" string="Cantidad" />
<field name="product_uom" />
</tree>
</field>
</page>
</xpath>
</field>
</record>
</odoo>
解决方法
您可以通过一个向导执行此操作,该向导在单击操作以打开向导时获取发票的 active_id。看我下面的例子(未测试但你会明白这个概念)
stock_move_invoice_wizard.xml
<record model="ir.ui.view" id="stock_move_invoice_wizard">
<field name="name">Stock Move Invoice</field>
<field name="model">stock.move.invoice.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Stock Move Invoice">
<group>
<field name="invocie_id"/>
</group>
<group>
<field name="moves_ids"/>
</group>
<footer>
<button name="action_update_moves_date" string="Link moves to invocie" type="object" class="oe_highlight"/>
<button string="Cancel" special="cancel"/>
</footer>
</form>
</field>
</record>
并在同一个文件中添加调用向导的动作
<act_window id="action_stock_move_invoice_wizard"
name="Stock Move Invoice"
res_model="stock.move.invoice.wizard"
context="{'default_invoice_id': active_id}"
view_mode="form"
target="new"/>
stock_move_invoice_wizard.py
class StockMoveInvoiceWizard(models.TransientModel):
_name = 'stock.move.invoice.wizard'
invoice_id = fields.Many2one('account.invoice',readonly=True)
moves_ids = fields.Many2many('stock.move')
def action_update_moves_invoice(self):
for rec in self:
for move in rec.moves_ids:
move.x_invoice_id = rec.invoice_id.id
account_invoice.xml
<record id="account_invoice_form_inherit" model="ir.ui.view">
<field name="name">account.invoice.form.inherit</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="put_here_the_move_view_external_id"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_cancel']" position="after">
<button name="%(your_module_external_id.action_stock_move_invoice_wizard)d" string="Link Stock Moves" type="action"/>
</xpath>
</field>
</record>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。