【问题标题】:Fill form field with other model form value odoo 11.0用其他模型表单值 odoo 11.0 填写表单字段
【发布时间】:2018-03-08 10:45:20
【问题描述】:

在采购申请表中我添加了delivery location

class PurchaseRequisitionInherit(models.Model):
    _inherit = "purchase.requisition.line"
    _description = "Purchase Requisition Line"


    product_id = fields.Many2one('product.product', string='Product', domain=get_master_purchase_product, required=True)
    delivery_location = fields.Many2one('stock.location', 'Warehouse Location')

有了这个,我在 采购订单 表单上添加了delivery location 字段。这个delivery location 将用于在不同的有线库位置接收购买的物品。功能运行良好。

class PurchaseOrderLine(models.Model):
    _inherit = 'purchase.order.line'

    delivery_location = fields.Many2one(
        'stock.location', 'Destination', domain=[('usage', 'in',
                                                  ['internal', 'transit'])])  

问题是,当我从 Purchase Requisition 表单中点击 New Quotation 按钮时,它会以 Purchase Order[Quotation] 表单的形式到达,所有其他值都不是 delivery_location。 到目前为止,我知道,要在 odoo 表单中填充默认值,请使用 form 视图中的 context 字段。 所以,我想要 Purchase Order [Quotation] 表单中的 delivery_location 值以及其他表单值。

【问题讨论】:

    标签: python python-3.x odoo odoo-10


    【解决方案1】:

    你必须这样覆盖purchase.order模型的_onchange_requisition_id方法:

    class PurchaseOrder(models.Model):
        _inherit = 'purchase.order'
    
        @api.onchange('requisition_id')
        def _onchange_requisition_id(self):
            if not self.requisition_id:
                return
    
            requisition = self.requisition_id
            if self.partner_id:
                partner = self.partner_id
            else:
                partner = requisition.vendor_id
            payment_term = partner.property_supplier_payment_term_id
            currency = partner.property_purchase_currency_id or requisition.company_id.currency_id
    
            FiscalPosition = self.env['account.fiscal.position']
            fpos = FiscalPosition.get_fiscal_position(partner.id)
            fpos = FiscalPosition.browse(fpos)
    
            self.partner_id = partner.id
            self.fiscal_position_id = fpos.id
            self.payment_term_id = payment_term.id,
            self.company_id = requisition.company_id.id
            self.currency_id = currency.id
            self.origin = requisition.name
            self.partner_ref = requisition.name # to control vendor bill based on agreement reference
            self.notes = requisition.description
            self.date_order = requisition.date_end or fields.Datetime.now()
            self.picking_type_id = requisition.picking_type_id.id
    
            if requisition.type_id.line_copy != 'copy':
                return
    
            # Create PO lines if necessary
            order_lines = []
            for line in requisition.line_ids:
                # Compute name
                product_lang = line.product_id.with_context({
                    'lang': partner.lang,
                    'partner_id': partner.id,
                })
                name = product_lang.display_name
                if product_lang.description_purchase:
                    name += '\n' + product_lang.description_purchase
    
                # Compute taxes
                if fpos:
                    taxes_ids = fpos.map_tax(line.product_id.supplier_taxes_id.filtered(lambda tax: tax.company_id == requisition.company_id)).ids
                else:
                    taxes_ids = line.product_id.supplier_taxes_id.filtered(lambda tax: tax.company_id == requisition.company_id).ids
    
                # Compute quantity and price_unit
                if line.product_uom_id != line.product_id.uom_po_id:
                    product_qty = line.product_uom_id._compute_quantity(line.product_qty, line.product_id.uom_po_id)
                    price_unit = line.product_uom_id._compute_price(line.price_unit, line.product_id.uom_po_id)
                else:
                    product_qty = line.product_qty
                    price_unit = line.price_unit
    
                if requisition.type_id.quantity_copy != 'copy':
                    product_qty = 0
    
                # Compute price_unit in appropriate currency
                if requisition.company_id.currency_id != currency:
                    price_unit = requisition.company_id.currency_id.compute(price_unit, currency)
    
                # Create PO line
                order_lines.append((0, 0, {
                    'name': name,
                    'product_id': line.product_id.id,
                    'product_uom': line.product_id.uom_po_id.id,
                    'product_qty': product_qty,
                    'price_unit': price_unit,
                    'taxes_id': [(6, 0, taxes_ids)],
                    'date_planned': requisition.schedule_date or fields.Date.today(),
                    'procurement_ids': [(6, 0, [requisition.procurement_id.id])] if requisition.procurement_id else False,
                    'account_analytic_id': line.account_analytic_id.id,
                    'delivery_location': line.delivery_location,
                }))
            self.order_line = order_lines
    

    请注意,我只是在方法的末尾添加了'delivery_location': line.delivery_location, 行,但在这种情况下,使用super 来修改它会很麻烦。所以你最好像我在这里所做的那样覆盖整个方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 2013-07-12
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多