From 4f56c72bedafb8e802abfef4a7aaf34db24f9af7 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Sat, 28 Jan 2023 17:45:08 +0530 Subject: [PATCH] refactor: `test_consider_existing_pick_list()` (cherry picked from commit 0b76a26c8a660f21f38b2511586a6ea5d816fb0e) --- .../stock/doctype/pick_list/test_pick_list.py | 101 ++++++++++-------- 1 file changed, 55 insertions(+), 46 deletions(-) diff --git a/erpnext/stock/doctype/pick_list/test_pick_list.py b/erpnext/stock/doctype/pick_list/test_pick_list.py index 9f8d2d71106..1254fe3927f 100644 --- a/erpnext/stock/doctype/pick_list/test_pick_list.py +++ b/erpnext/stock/doctype/pick_list/test_pick_list.py @@ -699,6 +699,54 @@ class TestPickList(FrappeTestCase): self.assertEqual(pl.status, "Cancelled") def test_consider_existing_pick_list(self): + def create_items(items_properties): + items = [] + + for properties in items_properties: + properties.update({"maintain_stock": 1}) + item_code = make_item(properties=properties).name + properties.update({"item_code": item_code}) + items.append(properties) + + return items + + def create_stock_entries(items): + warehouses = ["Stores - _TC", "Finished Goods - _TC"] + + for item in items: + for warehouse in warehouses: + se = make_stock_entry( + item=item.get("item_code"), + to_warehouse=warehouse, + qty=5, + ) + + def get_item_list(items, qty, warehouse="All Warehouses - _TC"): + return [ + { + "item_code": item.get("item_code"), + "qty": qty, + "warehouse": warehouse, + } + for item in items + ] + + def get_picked_items_details(pick_list_doc): + items_data = {} + + for location in pick_list_doc.locations: + key = (location.warehouse, location.batch_no) if location.batch_no else location.warehouse + serial_no = [x for x in location.serial_no.split("\n") if x] if location.serial_no else None + data = {"picked_qty": location.picked_qty} + if serial_no: + data["serial_no"] = serial_no + if location.item_code not in items_data: + items_data[location.item_code] = {key: data} + else: + items_data[location.item_code][key] = data + + return items_data + # Step - 1: Setup - Create Items and Stock Entries items_properties = [ { @@ -723,70 +771,31 @@ class TestPickList(FrappeTestCase): }, ] - items = [] - for properties in items_properties: - properties.update({"maintain_stock": 1}) - item_code = make_item(properties=properties).name - properties.update({"item_code": item_code}) - items.append(properties) - - warehouses = ["Stores - _TC", "Finished Goods - _TC"] - for item in items: - for warehouse in warehouses: - se = make_stock_entry( - item=item.get("item_code"), - to_warehouse=warehouse, - qty=5, - ) + items = create_items(items_properties) + create_stock_entries(items) # Step - 2: Create Sales Order [1] - item_list = [ - { - "item_code": item.get("item_code"), - "qty": 6, - "warehouse": "All Warehouses - _TC", - } - for item in items - ] - so1 = make_sales_order(item_list=item_list) + so1 = make_sales_order(item_list=get_item_list(items, qty=6)) # Step - 3: Create and Submit Pick List [1] for Sales Order [1] pl1 = create_pick_list(so1.name) pl1.submit() # Step - 4: Create Sales Order [2] with same Item(s) as Sales Order [1] - item_list = [ - { - "item_code": item.get("item_code"), - "qty": 4, - "warehouse": "All Warehouses - _TC", - } - for item in items - ] - so2 = make_sales_order(item_list=item_list) + so2 = make_sales_order(item_list=get_item_list(items, qty=4)) # Step - 5: Create Pick List [2] for Sales Order [2] pl2 = create_pick_list(so2.name) pl2.save() # Step - 6: Assert - items_data = {} - for location in pl1.locations: - key = (location.warehouse, location.batch_no) if location.batch_no else location.warehouse - serial_no = [x for x in location.serial_no.split("\n") if x] if location.serial_no else None - data = {"picked_qty": location.picked_qty} - if serial_no: - data["serial_no"] = serial_no - if location.item_code not in items_data: - items_data[location.item_code] = {key: data} - else: - items_data[location.item_code][key] = data + picked_items_details = get_picked_items_details(pl1) for location in pl2.locations: key = (location.warehouse, location.batch_no) if location.batch_no else location.warehouse - item_data = items_data.get(location.item_code, {}).get(key, {}) + item_data = picked_items_details.get(location.item_code, {}).get(key, {}) picked_qty = item_data.get("picked_qty", 0) - picked_serial_no = items_data.get("serial_no", []) + picked_serial_no = picked_items_details.get("serial_no", []) bin_actual_qty = frappe.db.get_value( "Bin", {"item_code": location.item_code, "warehouse": location.warehouse}, "actual_qty" )