odoo 根据库存变动撰写发票

问题描述

我一直在测试和寻找解决我的问题的方法,但我找不到任何解决方案,在此先感谢任何提供帮助的人。

在 Odoo 11 中,我试图根据库存移动为供应商创建发票,因此我在笔记本工作表中添加了一个树视图到 account.invoice.supplier.form,如下所示:

<field name="x_stock_move" widget="many2many" options="{'no_create': True}" domain="['&amp;',('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.invoicex_stock_move,一个与通过 x_invoice_id 的发票相关的 one2many 字段,它是 stock.move

中的 many2one

当(在 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_idaccount.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_idx_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>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...