refactor: test_consider_existing_pick_list()

This commit is contained in:
s-aga-r 2023-01-28 17:45:08 +05:30
parent bb7fe795fe
commit 0b76a26c8a

View File

@ -699,6 +699,54 @@ class TestPickList(FrappeTestCase):
self.assertEqual(pl.status, "Cancelled") self.assertEqual(pl.status, "Cancelled")
def test_consider_existing_pick_list(self): 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 # Step - 1: Setup - Create Items and Stock Entries
items_properties = [ items_properties = [
{ {
@ -723,70 +771,31 @@ class TestPickList(FrappeTestCase):
}, },
] ]
items = [] items = create_items(items_properties)
for properties in items_properties: create_stock_entries(items)
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,
)
# Step - 2: Create Sales Order [1] # Step - 2: Create Sales Order [1]
item_list = [ so1 = make_sales_order(item_list=get_item_list(items, qty=6))
{
"item_code": item.get("item_code"),
"qty": 6,
"warehouse": "All Warehouses - _TC",
}
for item in items
]
so1 = make_sales_order(item_list=item_list)
# Step - 3: Create and Submit Pick List [1] for Sales Order [1] # Step - 3: Create and Submit Pick List [1] for Sales Order [1]
pl1 = create_pick_list(so1.name) pl1 = create_pick_list(so1.name)
pl1.submit() pl1.submit()
# Step - 4: Create Sales Order [2] with same Item(s) as Sales Order [1] # Step - 4: Create Sales Order [2] with same Item(s) as Sales Order [1]
item_list = [ so2 = make_sales_order(item_list=get_item_list(items, qty=4))
{
"item_code": item.get("item_code"),
"qty": 4,
"warehouse": "All Warehouses - _TC",
}
for item in items
]
so2 = make_sales_order(item_list=item_list)
# Step - 5: Create Pick List [2] for Sales Order [2] # Step - 5: Create Pick List [2] for Sales Order [2]
pl2 = create_pick_list(so2.name) pl2 = create_pick_list(so2.name)
pl2.save() pl2.save()
# Step - 6: Assert # Step - 6: Assert
items_data = {} picked_items_details = get_picked_items_details(pl1)
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
for location in pl2.locations: for location in pl2.locations:
key = (location.warehouse, location.batch_no) if location.batch_no else location.warehouse 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_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_actual_qty = frappe.db.get_value(
"Bin", {"item_code": location.item_code, "warehouse": location.warehouse}, "actual_qty" "Bin", {"item_code": location.item_code, "warehouse": location.warehouse}, "actual_qty"
) )