summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/purchase_requisition/models/product.py1
-rw-r--r--addons/purchase_requisition/models/purchase_requisition.py1
-rw-r--r--addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py36
3 files changed, 29 insertions, 9 deletions
diff --git a/addons/purchase_requisition/models/product.py b/addons/purchase_requisition/models/product.py
index 71beec3781f..d88587bd261 100644
--- a/addons/purchase_requisition/models/product.py
+++ b/addons/purchase_requisition/models/product.py
@@ -6,7 +6,6 @@ from odoo import fields, models
class SupplierInfo(models.Model):
_inherit = 'product.supplierinfo'
- _order = 'sequence, min_qty desc, price'
purchase_requisition_id = fields.Many2one('purchase.requisition', related='purchase_requisition_line_id.requisition_id', string='Agreement', readonly=False)
purchase_requisition_line_id = fields.Many2one('purchase.requisition.line')
diff --git a/addons/purchase_requisition/models/purchase_requisition.py b/addons/purchase_requisition/models/purchase_requisition.py
index dccdfb2e60f..6d962b391d5 100644
--- a/addons/purchase_requisition/models/purchase_requisition.py
+++ b/addons/purchase_requisition/models/purchase_requisition.py
@@ -222,7 +222,6 @@ class PurchaseRequisitionLine(models.Model):
'product_tmpl_id': self.product_id.product_tmpl_id.id,
'price': self.price_unit,
'currency_id': self.requisition_id.currency_id.id,
- 'purchase_requisition_id': purchase_requisition.id,
'purchase_requisition_line_id': self.id,
})
diff --git a/addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py b/addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py
index 9a1dd0f89d2..b9d76e1bc01 100644
--- a/addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py
+++ b/addons/purchase_requisition_stock/tests/test_purchase_requisition_stock.py
@@ -46,15 +46,14 @@ class TestPurchaseRequisitionStock(TestPurchaseRequisitionCommon):
self.assertEqual(len(self.po_requisition.order_line), 1, 'Purchase order should have one line')
def test_02_purchase_requisition_stock(self):
- """ Set a static supplier info and make a delivery order for a "to buy" product, check that the purchase order created is consistent. Create a blanket order for this product, create a new delivery order for this product and check that the create purchase order set its values according to the blanket order.
- """
-
+ """Plays with the sequence of regular supplier infos and one created by blanket orders."""
# Product creation
unit = self.ref("uom.product_uom_unit")
warehouse1 = self.env.ref('stock.warehouse0')
route_buy = self.ref('purchase_stock.route_warehouse0_buy')
route_mto = warehouse1.mto_pull_id.route_id.id
vendor1 = self.env['res.partner'].create({'name': 'AAA', 'email': 'from.test@example.com'})
+ vendor2 = self.env['res.partner'].create({'name': 'BBB', 'email': 'from.test2@example.com'})
supplier_info1 = self.env['product.supplierinfo'].create({
'name': vendor1.id,
'price': 50,
@@ -88,7 +87,7 @@ class TestPurchaseRequisitionStock(TestPurchaseRequisitionCommon):
self.assertEqual(purchase1.order_line.price_unit, 50, 'The price on the purchase order is not the supplierinfo one')
# Blanket order creation
- line1 = (0, 0, {'product_id': product_test.id, 'product_qty': 18, 'product_uom_id': product_test.uom_po_id.id, 'price_unit': 42})
+ line1 = (0, 0, {'product_id': product_test.id, 'product_qty': 18, 'product_uom_id': product_test.uom_po_id.id, 'price_unit': 50})
requisition_type = self.env['purchase.requisition.type'].create({
'name': 'Blanket test',
'quantity_copy': 'none',
@@ -96,7 +95,7 @@ class TestPurchaseRequisitionStock(TestPurchaseRequisitionCommon):
requisition_blanket = self.env['purchase.requisition'].create({
'line_ids': [line1],
'type_id': requisition_type.id,
- 'vendor_id': vendor1.id,
+ 'vendor_id': vendor2.id,
'currency_id': self.env.ref("base.USD").id,
})
requisition_blanket.action_in_progress()
@@ -114,9 +113,32 @@ class TestPurchaseRequisitionStock(TestPurchaseRequisitionCommon):
})
move2._action_confirm()
+ # As the supplier.info linked to the blanket order has the same price, the first one is stille used.
+ self.assertEqual(purchase1.order_line.product_qty, 20)
+
+ # Update the sequence of the blanket order's supplier info.
+ supplier_info1.sequence = 2
+ requisition_blanket.line_ids.supplier_info_ids.sequence = 1
+ # In [13]: [(x.sequence, x.min_qty, x.price, x.name.name) for x in supplier_info1 + requisition_blanket.line_ids.supplier_info_ids]
+ # Out[13]: [(2, 0.0, 50.0, 'AAA'), (1, 0.0, 50.0, 'BBB')]
+
+ # Second stock move
+ move3 = self.env['stock.move'].create({
+ 'name': '10 in',
+ 'procure_method': 'make_to_order',
+ 'location_id': stock_location.id,
+ 'location_dest_id': customer_location.id,
+ 'product_id': product_test.id,
+ 'product_uom': unit,
+ 'product_uom_qty': 10.0,
+ 'price_unit': 10
+ })
+ move3._action_confirm()
+
# Verifications
- purchase2 = self.env['purchase.order'].search([('partner_id', '=', vendor1.id), ('requisition_id', '=', requisition_blanket.id)])
- self.assertEqual(purchase2.order_line.price_unit, 42, 'The price on the purchase order is not the blanquet order one')
+ purchase2 = self.env['purchase.order'].search([('partner_id', '=', vendor2.id), ('requisition_id', '=', requisition_blanket.id)])
+ self.assertEqual(len(purchase2), 1)
+ self.assertEqual(purchase2.order_line.price_unit, 50, 'The price on the purchase order is not the blanquet order one')
def test_03_purchase_requisition_stock(self):
""" Two blanket orders on different 'make to order' products must generate