填写从父销售订单到向导的项目

时间:2018-04-24 09:02:10

标签: odoo odoo-10 odoo-11

我的目标是将所有项目从父引号转到向导窗口。

我不知道我这样做是否正确,但是现在我可以从报价中获取所有产品,并且不明白如何将它们填入我的向导项目行。

Quotation example

Wizard on that quotation

我删除了无关紧要的代码片段。

    from odoo import fields, models, api
    import logging

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

        line_ids =  fields.One2many('back.to.back.order.line','back_order_id', 'Order Lines', required=True)

    def get_items_from_quotation(self, context):
            items = []
            quotation_id = context['id']
            current_quotation = self.env['sale.order'].search([('id','=',quotation_id)])
            if quotation_id == current_quotation.id:
                    for line in current_quotation.order_line:
                            item = {
                                    'product_id': line.product_id,
                                    'qty': line.product_uom_qty,
                                    'price': line.price_unit,
                                    'subtotal': line.price_unit*line.product_uom_qty
                            }
                            items.append(item)


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


        product_id = fields.Many2one('product.product', 'Product')
        back_order_id = fields.Many2one('back.to.back.order', 'Back Order')
        qty = fields.Float('Quantity')
        price = fields.Float('Unit Price')
        subtotal = fields.Float('Subtotal')

1 个答案:

答案 0 :(得分:0)

首先,如果您正在创建向导,那么您很可能应该使用models.TransientModel而非model.Model用于您的课程。

class back_to_back_order(models.TransientModel):
    ...
  

向导记录并不意味着持久;一段时间后,它们会自动从数据库中删除。这就是为什么它们被称为 transient

您提到您已经能够在向导中获得销售订单行,但您不确定如何使用数据填充背靠背订单行。

  

One2many和Many2many使用特殊的"命令"格式来操作存储在字段中/与字段相关联的记录集。

我最初在another answer上找到了这些命令,但Documentation也涵盖了这些命令。

至于您的具体应用,您应该只需create back.to.back.order.lineback_order_id记录,只要您提供@api.multi def get_items_from_quotation(self, context): self.ensure_one() b2b_line_obj = self.env['back.to.back.order.line'] quotation = self.env['sale.order'].browse(context['id']) if quotation: back_order_id = self.id for line in quotation.order_line: b2b_line_obj.create({ 'back_order_id': back_order_id, 'product_id': line.product_id.id, 'qty': line.product_uom_qty, 'price': line.price_unit, 'subtotal': line.price_unit * line.product_uom_qty, }) ,就会将其关联起来。

[
{
    "modDate": "2017-06-20"
},
{
    "modDate": "2017-10-24"
},
{
    "modDate": "2017-08-03"
}
]