问题描述
我一直在测试和寻找解决我的问题的方法,但我找不到任何解决方案,在此先感谢任何提供帮助的人。
在 Odoo 11 中,我试图根据库存移动为供应商创建发票,因此我在笔记本工作表中添加了一个树视图到 account.invoice.supplier.form
,如下所示:
<field name="x_stock_move" widget="many2many" options="{'no_create': True}" domain="['&',('state','=','done'),('picking_partner_id',context.get('partner_id'))]"
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>
account.invoice
有 x_stock_move
,一个与通过 x_invoice_id
的发票相关的 one2many 字段,它是 stock.move
当(在 account.invoice.supplier.form 字段 x_stock_move 中)我单击“添加元素”时,我的问题出现了: 我可以看到所有状态为“完成”的 stock.moves 并且与发票中选择的合作伙伴相同,但我也可以选择分配给另一张发票的 stock.moves 和这个应该不可能。
我已经尝试将域 [('x_invoice_id','False')]
添加到字段 x_stock_move
但这会修改 account.invoice.supplier.form
内的树视图而不是“添加元素”表单,这样我就不能将库存移动添加到发票。
添加 context="{'x_invoice_id':'False'}"
或 False
似乎没有任何改变。
我该怎么做才能让用户只选择在 stock.moves
内没有关联 x_invoice_id
的 account.invoice.supplier.form
?
这里是第 2 部分:
如何将来自 x_stock_move
的每条记录添加为我正在创建的发票中的 invoice_line_id
?
(我宁愿这样做只是编辑 xml 视图 account.invoice.supplier.form
或不必开发自定义模块)
感谢您走到这一步,希望您度过愉快的一天:)
为了简化一点,我最终开发了一个模块,这是我的模型描述:
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')
如何将每个 x_stock_move.product_id
和 x_stock_move.product_qty
添加为发票行?
解决方法
您可以通过一个向导执行此操作,该向导在单击操作以打开向导时获取发票的 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>