You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何将父报价单的所有商品填充至Odoo向导的商品行?

解决方案:将父报价单商品填充到向导窗口的商品行

我来帮你搞定这个问题!在Odoo中把父报价单的商品导入向导的商品行,核心思路是遍历获取到的报价单行,逐个创建向导对应的行记录,下面结合你的代码片段一步步实现:

1. 完善向导的行模型与主模型定义

首先确保你的向导有对应的商品行模型,并且字段和报价单行的字段对应匹配:

from odoo import fields, models, api
import logging

# 先定义向导的商品行模型
class BackToBackOrderLine(models.Model):
    _name = "back.to.back.order.line"
    _description = "Back to Back Order Line"

    order_id = fields.Many2one('back.to.back.order', string="Wizard Reference")
    product_id = fields.Many2one('product.product', string="Product")
    product_uom_qty = fields.Float(string="Quantity")
    price_unit = fields.Float(string="Unit Price")
    # 可按需添加其他字段,比如商品描述、税率等,和报价单行字段对齐

然后更新你的主向导模型,补全核心字段和导入方法:

class BackToBackOrder(models.Model):
    _name = "back.to.back.order"
    _description = "Back to Back Order"

    # 假设你有字段关联父报价单,用于指定要导入的来源
    parent_quotation_id = fields.Many2one('sale.order', string="Parent Quotation")
    line_ids = fields.One2many('back.to.back.order.line', 'order_id', string="Products")

    @api.multi
    def action_load_quotation_lines(self):
        """从父报价单加载商品行到向导"""
        # 先清空现有行,避免重复导入(不需要保留旧数据的话加这一步)
        self.line_ids.unlink()
        
        # 遍历父报价单的所有商品行,逐个创建向导行
        for quotation_line in self.parent_quotation_id.order_line:
            self.env['back.to.back.order.line'].create({
                'order_id': self.id,
                'product_id': quotation_line.product_id.id,
                'product_uom_qty': quotation_line.product_uom_qty,
                'price_unit': quotation_line.price_unit,
                # 其他字段按需映射,比如name=quotation_line.name,tax_id=quotation_line.tax_id.ids等
            })
        
        # 刷新向导界面,让新导入的商品行立即显示
        return {
            'type': 'ir.actions.act_window',
            'res_model': self._name,
            'res_id': self.id,
            'view_mode': 'form',
            'target': 'new',
        }

2. 关键逻辑说明

  • 清空旧行self.line_ids.unlink()可以避免重复导入同一报价单的商品,若需要保留原有行可跳过此步骤。
  • 字段映射:根据你实际的报价单行(sale.order.line)和向导行字段,调整create()内的参数,确保所有必要信息都能正确同步。
  • 触发方式:在向导的form视图里添加一个按钮,绑定上述action_load_quotation_lines方法,用户点击即可完成导入。

3. 视图按钮配置示例(可选)

如果要在向导界面添加加载按钮,在对应的form视图XML中加入:

<button name="action_load_quotation_lines" string="Load Quotation Products" type="object" class="oe_highlight"/>

这样用户打开向导、选择父报价单后,点击按钮就能自动把所有商品填充到向导的商品行里啦!

内容的提问来源于stack exchange,提问作者KushiNii

火山引擎 最新活动