diff --git a/addons/purchase_requisition/models/purchase_requisition.py b/addons/purchase_requisition/models/purchase_requisition.py index 1d8b9383648..b158bdcb854 100644 --- a/addons/purchase_requisition/models/purchase_requisition.py +++ b/addons/purchase_requisition/models/purchase_requisition.py @@ -168,7 +168,10 @@ class PurchaseRequisitionLine(models.Model): _rec_name = 'product_id' product_id = fields.Many2one('product.product', string='Product', domain=[('purchase_ok', '=', True)], required=True) - product_uom_id = fields.Many2one('uom.uom', string='Product Unit of Measure', domain="[('category_id', '=', product_uom_category_id)]") + product_uom_id = fields.Many2one( + 'uom.uom', 'Product Unit of Measure', + compute='_compute_product_uom_id', store=True, readonly=False, precompute=True, + domain="[('category_id', '=', product_uom_category_id)]") product_uom_category_id = fields.Many2one(related='product_id.uom_id.category_id') product_qty = fields.Float(string='Quantity', digits='Product Unit of Measure') product_description_variants = fields.Char('Custom Description') @@ -240,6 +243,11 @@ class PurchaseRequisitionLine(models.Model): else: line.qty_ordered = 0 + @api.depends('product_id') + def _compute_product_uom_id(self): + for line in self: + line.product_uom_id = line.product_id.uom_id + @api.onchange('product_id') def _onchange_product_id(self): if self.product_id: diff --git a/addons/purchase_requisition/tests/test_purchase_requisition.py b/addons/purchase_requisition/tests/test_purchase_requisition.py index 7ae68d4ade1..f6bb9354436 100644 --- a/addons/purchase_requisition/tests/test_purchase_requisition.py +++ b/addons/purchase_requisition/tests/test_purchase_requisition.py @@ -71,6 +71,30 @@ class TestPurchaseRequisition(TestPurchaseRequisitionCommon): self.assertFalse(self.env['product.supplierinfo'].search([('id', '=', supplierinfo09.id)]), 'The supplier info should be removed') self.assertFalse(self.env['product.supplierinfo'].search([('id', '=', supplierinfo13.id)]), 'The supplier info should be removed') + def test_03_blanket_order_rfq(self): + """ Create a blanket order + an RFQ for it """ + requisition_type = self.env['purchase.requisition.type'].create({ + 'name': 'Blanket test', + 'quantity_copy': 'none' + }) + + bo_form = Form(self.env['purchase.requisition']) + bo_form.vendor_id = self.res_partner_1 + bo_form.type_id = requisition_type + with bo_form.line_ids.new() as line: + line.product_id = self.product_09 + line.product_qty = 5.0 + line.price_unit = 21 + bo = bo_form.save() + bo.action_in_progress() + + # lazy reproduction of clicking on "New Quotation" act_window button + po_form = Form(self.env['purchase.order'].with_context({"default_requisition_id": bo.id, "default_user_id": False})) + po = po_form.save() + po.button_confirm() + self.assertEqual(po.order_line.price_unit, bo.line_ids.price_unit, 'The blanket order unit price should have been copied to purchase order') + self.assertEqual(po.partner_id, bo.vendor_id, 'The blanket order vendor should have been copied to purchase order') + def test_06_purchase_requisition(self): """ Create a blanket order for a product and a vendor already linked via a supplier info""" diff --git a/addons/purchase_requisition/views/purchase_requisition_views.xml b/addons/purchase_requisition/views/purchase_requisition_views.xml index 9629be5aff4..124ba3e7c78 100644 --- a/addons/purchase_requisition/views/purchase_requisition_views.xml +++ b/addons/purchase_requisition/views/purchase_requisition_views.xml @@ -174,7 +174,7 @@ - +