summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/purchase_stock/models/stock_rule.py1
-rw-r--r--addons/purchase_stock/tests/test_reordering_rule.py88
2 files changed, 87 insertions, 2 deletions
diff --git a/addons/purchase_stock/models/stock_rule.py b/addons/purchase_stock/models/stock_rule.py
index 8e87481fa9e..d107a4b4a0d 100644
--- a/addons/purchase_stock/models/stock_rule.py
+++ b/addons/purchase_stock/models/stock_rule.py
@@ -49,6 +49,7 @@ class StockRule(models.Model):
schedule_date = (procurement_date_planned - relativedelta(days=procurement.company_id.po_lead))
supplier = procurement.product_id._select_seller(
+ partner_id=procurement.values.get("supplier_id"),
quantity=procurement.product_qty,
date=schedule_date.date(),
uom_id=procurement.product_uom)
diff --git a/addons/purchase_stock/tests/test_reordering_rule.py b/addons/purchase_stock/tests/test_reordering_rule.py
index d5ceda8fe47..374c58ab8f9 100644
--- a/addons/purchase_stock/tests/test_reordering_rule.py
+++ b/addons/purchase_stock/tests/test_reordering_rule.py
@@ -1,11 +1,14 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.tests.common import SavepointCase
+from datetime import datetime as dt
+from datetime import timedelta as td
+
from odoo.tests import Form
+from odoo.tests.common import SavepointCase
-class TestReorderingRule(SavepointCase):
+class TestReorderingRule(SavepointCase):
@classmethod
def setUpClass(cls):
super(TestReorderingRule, cls).setUpClass()
@@ -153,3 +156,84 @@ class TestReorderingRule(SavepointCase):
self.assertEqual(purchase_order.picking_ids.move_lines[-1].product_qty, 5)
self.assertEqual(purchase_order.picking_ids.move_lines[-1].location_dest_id, warehouse_1.lot_stock_id)
+
+ def test_procure_not_default_partner(self):
+ """Define a product with 2 vendors. First run a "standard" procurement,
+ default vendor should be used. Then, call a procurement with
+ `partner_id` specified in values, the specified vendor should be
+ used."""
+ purchase_route = self.env.ref("purchase_stock.route_warehouse0_buy")
+ uom_unit = self.env.ref("uom.product_uom_unit")
+ warehouse = self.env['stock.warehouse'].search(
+ [('company_id', '=', self.env.company.id)], limit=1)
+ product = self.env["product.product"].create({
+ "name": "product TEST",
+ "standard_price": 100.0,
+ "type": "product",
+ "uom_id": uom_unit.id,
+ "default_code": "A",
+ "route_ids": [(6, 0, purchase_route.ids)],
+ })
+ default_vendor = self.env["res.partner"].create({
+ "name": "Supplier A",
+ })
+ secondary_vendor = self.env["res.partner"].create({
+ "name": "Supplier B",
+ })
+ self.env["product.supplierinfo"].create({
+ "name": default_vendor.id,
+ "product_tmpl_id": product.product_tmpl_id.id,
+ "delay": 7,
+ })
+ self.env["product.supplierinfo"].create({
+ "name": secondary_vendor.id,
+ "product_tmpl_id": product.product_tmpl_id.id,
+ "delay": 10,
+ })
+
+ # Test standard procurement.
+ po_line = self.env["purchase.order.line"].search(
+ [("product_id", "=", product.id)])
+ self.assertFalse(po_line)
+ self.env["procurement.group"].run(
+ [self.env["procurement.group"].Procurement(
+ product, 100, uom_unit,
+ warehouse.lot_stock_id, "Test default vendor", "/",
+ self.env.company,
+ {
+ "warehouse_id": warehouse,
+ "date_planned": dt.today() + td(days=15),
+ "rule_id": warehouse.buy_pull_id,
+ "group_id": False,
+ "route_ids": [],
+ }
+ )])
+ po_line = self.env["purchase.order.line"].search(
+ [("product_id", "=", product.id)])
+ self.assertTrue(po_line)
+ self.assertEqual(po_line.partner_id, default_vendor)
+ po_line.order_id.button_cancel()
+ po_line.order_id.unlink()
+
+ # now force the vendor:
+ po_line = self.env["purchase.order.line"].search(
+ [("product_id", "=", product.id)])
+ self.assertFalse(po_line)
+ self.env["procurement.group"].run(
+ [self.env["procurement.group"].Procurement(
+ product, 100, uom_unit,
+ warehouse.lot_stock_id, "Test default vendor", "/",
+ self.env.company,
+ {
+ "warehouse_id": warehouse,
+ "date_planned": dt.today() + td(days=15),
+ "rule_id": warehouse.buy_pull_id,
+ "group_id": False,
+ "route_ids": [],
+ "supplier_id": secondary_vendor,
+ }
+ )])
+ po_line = self.env["purchase.order.line"].search(
+ [("product_id", "=", product.id)])
+ self.assertTrue(po_line)
+ self.assertEqual(po_line.partner_id, secondary_vendor)