diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index 1ffa778d0b8..873edfb7165 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -176,14 +176,9 @@ erpnext.buying = { callback: (r) => { if (!r.message) return; - if (!this.frm.doc.billing_address) { - this.frm.set_value("billing_address", r.message.primary_address || ""); - } + this.frm.set_value("billing_address", r.message.primary_address || ""); - if ( - frappe.meta.has_field(this.frm.doc.doctype, "shipping_address") && - !this.frm.doc.shipping_address - ) { + if (frappe.meta.has_field(this.frm.doc.doctype, "shipping_address")) { this.frm.set_value("shipping_address", r.message.shipping_address || ""); } }, diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index adbc9839512..863bb74012b 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1612,34 +1612,27 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None): target.stock_qty = flt(source.stock_qty) - flt(source.ordered_qty) target.project = source_parent.project - def update_item_for_packed_item(source, target, source_parent): + def update_item_for_packed_item(source, target, _): target.qty = flt(source.qty) - flt(source.ordered_qty) def filter_items(item, supplier): if ( item.ordered_qty < item.stock_qty - and item.item_code in item_codes and not is_product_bundle(item.item_code) + and items_to_map.get(item.item_code) == supplier ): - item_supp_comb = next(iter(d for d in items_to_map if d["item_code"] == item.item_code), None) - if item_supp_comb and item_supp_comb.get("supplier") == supplier: - items_to_map.remove(item_supp_comb) - return True + return True return False - suppliers = [item.get("supplier") for item in selected_items if item.get("supplier")] - suppliers = list(dict.fromkeys(suppliers)) # remove duplicates while preserving order - - item_codes = [item.get("item_code") for item in selected_items if item.get("item_code")] - items_to_map = [ - {"item_code": item.get("item_code"), "supplier": item.get("supplier")} - for item in selected_items - if item.get("item_code") - ] + items_to_map = { + item.get("item_code"): item.get("supplier") for item in selected_items if item.get("item_code") + } + item_codes = list(set(items_to_map.keys())) + suppliers = list(set(items_to_map.values())) if not suppliers: - frappe.throw(_("Please set a Supplier against the Items to be considered in the Purchase Order.")) + suppliers = [None] purchase_orders = [] for supplier in suppliers: @@ -1712,7 +1705,7 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None): ) set_delivery_date(doc.items, source_name) - if len(suppliers) > 1: + if doc.supplier: doc.insert() purchase_orders.append(doc) diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index a75e6eca08f..acf0a19943f 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -1038,7 +1038,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): def test_drop_shipping(self): from erpnext.buying.doctype.purchase_order.purchase_order import update_status from erpnext.selling.doctype.sales_order.sales_order import ( - make_purchase_order_for_default_supplier, + make_purchase_order, ) from erpnext.selling.doctype.sales_order.sales_order import update_status as so_update_status @@ -1071,7 +1071,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): so = make_sales_order(item_list=so_items, do_not_submit=True) so.submit() - po = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[0]])[0] + po = make_purchase_order(so.name, selected_items=[so_items[0]])[0] po.submit() dn = create_dn_against_so(so.name, delivered_qty=2) @@ -1129,7 +1129,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): def test_drop_shipping_partial_order(self): from erpnext.selling.doctype.sales_order.sales_order import ( - make_purchase_order_for_default_supplier, + make_purchase_order, ) from erpnext.selling.doctype.sales_order.sales_order import update_status as so_update_status @@ -1165,7 +1165,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): so.submit() # create po for only one item - po1 = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[0]])[0] + po1 = make_purchase_order(so.name, selected_items=[so_items[0]])[0] po1.submit() self.assertEqual(so.customer, po1.customer) @@ -1175,7 +1175,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): self.assertEqual(len(po1.items), 1) # create po for remaining item - po2 = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[1]])[0] + po2 = make_purchase_order(so.name, selected_items=[so_items[1]])[0] po2.submit() # teardown @@ -1189,7 +1189,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): 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, + make_purchase_order, ) if not frappe.db.exists("Item", "_Test Item for Drop Shipping 1"): @@ -1221,7 +1221,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): 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) + purchase_orders = make_purchase_order(so.name, selected_items=so_items) self.assertEqual(len(purchase_orders), 2) self.assertEqual(purchase_orders[0].supplier, "_Test Supplier") @@ -1253,7 +1253,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): so = make_sales_order(item_list=so_items) - purchase_order = make_purchase_order(so.name, selected_items=so_items) + purchase_order = make_purchase_order(so.name, selected_items=so_items)[0] self.assertEqual(purchase_order.items[0].item_code, "_Test Bundle Item 1") self.assertEqual(purchase_order.items[1].item_code, "_Test Bundle Item 2") @@ -1283,7 +1283,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): so = make_sales_order(item_list=so_items) - purchase_order = make_purchase_order(so.name, selected_items=so_items) + purchase_order = make_purchase_order(so.name, selected_items=so_items)[0] purchase_order.supplier = "_Test Supplier" purchase_order.set_warehouse = "_Test Warehouse - _TC" purchase_order.save() @@ -2559,7 +2559,7 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): ) so.submit() - po = make_purchase_order(so.name, selected_items=so.items) + po = make_purchase_order(so.name, selected_items=so.items)[0] po.supplier = "_Test Supplier" po.items[0].rate = 100 po.submit()