[IMP] purchase_stock: enhance extensibility of _run_buy method by
allowing to force the vendor to be used in the procurement batch. This does not change any default behavior. closes odoo/odoo#46678 X-original-commit: 8bff35182c38522bbd6fc218956fe0f8fe99eca4 Signed-off-by: Simon Lejeune (sle) <sle@openerp.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@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)
|
||||
|
||||
Reference in New Issue
Block a user