fix: PO not created against all selected suppliers (drop shipping)
- Return list of created POs instead of first doc - test case added
This commit is contained in:
parent
b5792872e9
commit
86725a6580
@ -778,6 +778,7 @@ def get_events(start, end, filters=None):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_purchase_order_for_default_supplier(source_name, selected_items=None, target_doc=None):
|
def make_purchase_order_for_default_supplier(source_name, selected_items=None, target_doc=None):
|
||||||
|
"""Creates Purchase Order for each Supplier. Returns a list of doc objects."""
|
||||||
if not selected_items: return
|
if not selected_items: return
|
||||||
|
|
||||||
if isinstance(selected_items, string_types):
|
if isinstance(selected_items, string_types):
|
||||||
@ -829,6 +830,7 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=None, t
|
|||||||
if not suppliers:
|
if not suppliers:
|
||||||
frappe.throw(_("Please set a Supplier against the Items to be considered in the Purchase Order."))
|
frappe.throw(_("Please set a Supplier against the Items to be considered in the Purchase Order."))
|
||||||
|
|
||||||
|
purchase_orders = []
|
||||||
for supplier in suppliers:
|
for supplier in suppliers:
|
||||||
doc = get_mapped_doc("Sales Order", source_name, {
|
doc = get_mapped_doc("Sales Order", source_name, {
|
||||||
"Sales Order": {
|
"Sales Order": {
|
||||||
@ -872,7 +874,9 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=None, t
|
|||||||
|
|
||||||
doc.insert()
|
doc.insert()
|
||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
return doc
|
purchase_orders.append(doc)
|
||||||
|
|
||||||
|
return purchase_orders
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_purchase_order(source_name, selected_items=None, target_doc=None):
|
def make_purchase_order(source_name, selected_items=None, target_doc=None):
|
||||||
|
@ -743,7 +743,7 @@ class TestSalesOrder(unittest.TestCase):
|
|||||||
so = make_sales_order(item_list=so_items, do_not_submit=True)
|
so = make_sales_order(item_list=so_items, do_not_submit=True)
|
||||||
so.submit()
|
so.submit()
|
||||||
|
|
||||||
po = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[0]])
|
po = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[0]])[0]
|
||||||
po.submit()
|
po.submit()
|
||||||
|
|
||||||
dn = create_dn_against_so(so.name, delivered_qty=2)
|
dn = create_dn_against_so(so.name, delivered_qty=2)
|
||||||
@ -825,7 +825,7 @@ class TestSalesOrder(unittest.TestCase):
|
|||||||
so.submit()
|
so.submit()
|
||||||
|
|
||||||
# create po for only one item
|
# create po for only one item
|
||||||
po1 = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[0]])
|
po1 = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[0]])[0]
|
||||||
po1.submit()
|
po1.submit()
|
||||||
|
|
||||||
self.assertEqual(so.customer, po1.customer)
|
self.assertEqual(so.customer, po1.customer)
|
||||||
@ -835,7 +835,7 @@ class TestSalesOrder(unittest.TestCase):
|
|||||||
self.assertEqual(len(po1.items), 1)
|
self.assertEqual(len(po1.items), 1)
|
||||||
|
|
||||||
# create po for remaining item
|
# create po for remaining item
|
||||||
po2 = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[1]])
|
po2 = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[1]])[0]
|
||||||
po2.submit()
|
po2.submit()
|
||||||
|
|
||||||
# teardown
|
# teardown
|
||||||
@ -846,6 +846,45 @@ class TestSalesOrder(unittest.TestCase):
|
|||||||
so.load_from_db()
|
so.load_from_db()
|
||||||
so.cancel()
|
so.cancel()
|
||||||
|
|
||||||
|
def test_drop_shipping_full_for_default_suppliers(self):
|
||||||
|
"""Test if multiple POs are generated in one go against different default suppliers."""
|
||||||
|
from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order_for_default_supplier
|
||||||
|
|
||||||
|
if not frappe.db.exists("Item", "_Test Item for Drop Shipping 1"):
|
||||||
|
po_item1 = make_item("_Test Item for Drop Shipping 1", {"is_stock_item": 1, "delivered_by_supplier": 1})
|
||||||
|
|
||||||
|
if not frappe.db.exists("Item", "_Test Item for Drop Shipping 2"):
|
||||||
|
po_item2 = make_item("_Test Item for Drop Shipping 2", {"is_stock_item": 1, "delivered_by_supplier": 1})
|
||||||
|
|
||||||
|
so_items = [
|
||||||
|
{
|
||||||
|
"item_code": "_Test Item for Drop Shipping 1",
|
||||||
|
"warehouse": "",
|
||||||
|
"qty": 2,
|
||||||
|
"rate": 400,
|
||||||
|
"delivered_by_supplier": 1,
|
||||||
|
"supplier": '_Test Supplier'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_code": "_Test Item for Drop Shipping 2",
|
||||||
|
"warehouse": "",
|
||||||
|
"qty": 2,
|
||||||
|
"rate": 400,
|
||||||
|
"delivered_by_supplier": 1,
|
||||||
|
"supplier": '_Test Supplier 1'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
# create so and po
|
||||||
|
so = make_sales_order(item_list=so_items, do_not_submit=True)
|
||||||
|
so.submit()
|
||||||
|
|
||||||
|
purchase_orders = make_purchase_order_for_default_supplier(so.name, selected_items=so_items)
|
||||||
|
|
||||||
|
self.assertEqual(len(purchase_orders), 2)
|
||||||
|
self.assertEqual(purchase_orders[0].supplier, '_Test Supplier')
|
||||||
|
self.assertEqual(purchase_orders[1].supplier, '_Test Supplier 1')
|
||||||
|
|
||||||
def test_reserved_qty_for_closing_so(self):
|
def test_reserved_qty_for_closing_so(self):
|
||||||
bin = frappe.get_all("Bin", filters={"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"},
|
bin = frappe.get_all("Bin", filters={"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"},
|
||||||
fields=["reserved_qty"])
|
fields=["reserved_qty"])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user