From 5e2d8225099e812a06bf5fbf85dce104185f69b8 Mon Sep 17 00:00:00 2001 From: NahuelOperto Date: Fri, 10 May 2019 09:00:46 -0300 Subject: [PATCH 1/3] fix error when the product bundle does not have the original item name --- .../available_stock_for_packing_items.py | 82 ++++++++----------- 1 file changed, 33 insertions(+), 49 deletions(-) diff --git a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py index 48494247595..273e3807115 100644 --- a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py +++ b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py @@ -11,73 +11,57 @@ def execute(filters=None): columns = get_columns() iwq_map = get_item_warehouse_quantity_map() item_map = get_item_details() - data = [] for sbom, warehouse in iwq_map.items(): - total = 0 - total_qty = 0 - - for wh, item_qty in warehouse.items(): - total += 1 - row = [sbom, item_map.get(sbom).item_name, item_map.get(sbom).description, - item_map.get(sbom).stock_uom, wh] - available_qty = item_qty - total_qty += flt(available_qty) - row += [available_qty] + total = 0 + total_qty = 0 - if available_qty: - data.append(row) - if (total == len(warehouse)): - row = ["", "", "Total", "", "", total_qty] - data.append(row) + for wh, item_qty in warehouse.items(): + total += 1 + row = [sbom, item_map.get(sbom).item_name, item_map.get(sbom).description, + item_map.get(sbom).stock_uom, wh] + available_qty = item_qty + total_qty += flt(available_qty) + row += [available_qty] + + if available_qty: + data.append(row) + if (total == len(warehouse)): + row = ["", "", "Total", "", "", total_qty] + data.append(row) return columns, data - + def get_columns(): columns = ["Item Code:Link/Item:100", "Item Name::100", "Description::120", \ - "UOM:Link/UOM:80", "Warehouse:Link/Warehouse:100", "Quantity::100"] + "UOM:Link/UOM:80", "Warehouse:Link/Warehouse:100", "Quantity::100"] return columns -def get_product_bundle_items(): - sbom_item_map = {} - for sbom in frappe.db.sql("""select pb.new_item_code as parent, pbi.item_code, pbi.qty - from `tabProduct Bundle Item` as pbi, `tabProduct Bundle` as pb - where pb.docstatus < 2 and pb.name = pbi.parent""", as_dict=1): - sbom_item_map.setdefault(sbom.parent, {}).setdefault(sbom.item_code, sbom.qty) - - return sbom_item_map - def get_item_details(): item_map = {} - for item in frappe.db.sql("""select name, item_name, description, stock_uom - from `tabItem`""", as_dict=1): - item_map.setdefault(item.name, item) - + for item in frappe.db.sql("""SELECT name, item_name, description, stock_uom + from `tabItem`""", as_dict=1): + item_map.setdefault(item.name, item) return item_map -def get_item_warehouse_quantity(): - iwq_map = {} - bin = frappe.db.sql("""select item_code, warehouse, actual_qty from `tabBin` - where actual_qty > 0""") - for item, wh, qty in bin: - iwq_map.setdefault(item, {}).setdefault(wh, qty) - - return iwq_map - def get_item_warehouse_quantity_map(): query = """SELECT parent, warehouse, MIN(qty) AS qty FROM (SELECT b.parent, bi.item_code, bi.warehouse, sum(bi.projected_qty) / b.qty AS qty - FROM tabBin AS bi, (SELECT b.parent, b.item_code, b.qty, w.name - FROM `tabProduct Bundle Item` b, `tabWarehouse` w) AS b + FROM tabBin AS bi, (SELECT pb.new_item_code as parent, b.item_code, b.qty, w.name + FROM `tabProduct Bundle Item` b, `tabWarehouse` w, + `tabProduct Bundle` pb + where b.parent = pb.name) AS b WHERE bi.item_code = b.item_code AND bi.warehouse = b.name GROUP BY b.parent, b.item_code, bi.warehouse UNION ALL SELECT b.parent, b.item_code, b.name, 0 AS qty - FROM (SELECT b.parent, b.item_code, b.qty, w.name - FROM `tabProduct Bundle Item` b, `tabWarehouse` w) AS b + FROM (SELECT pb.new_item_code as parent, b.item_code, b.qty, w.name + FROM `tabProduct Bundle Item` b, `tabWarehouse` w, + `tabProduct Bundle` pb + where b.parent = pb.name) AS b WHERE NOT EXISTS(SELECT * FROM `tabBin` AS bi WHERE bi.item_code = b.item_code @@ -88,8 +72,8 @@ def get_item_warehouse_quantity_map(): last_sbom = "" sbom_map = {} for line in result: - if line.get("parent") != last_sbom: - last_sbom = line.get("parent") - actual_dict = sbom_map.setdefault(last_sbom, {}) - actual_dict.setdefault(line.get("warehouse"), line.get("qty")) - return sbom_map + if line.get("parent") != last_sbom: + last_sbom = line.get("parent") + actual_dict = sbom_map.setdefault(last_sbom, {}) + actual_dict.setdefault(line.get("warehouse"), line.get("qty")) + return sbom_map \ No newline at end of file From a970bcc56d8acc06c74d144bd42e2ccc86c97aec Mon Sep 17 00:00:00 2001 From: NahuelOperto Date: Fri, 10 May 2019 09:17:52 -0300 Subject: [PATCH 2/3] fix identation --- .../available_stock_for_packing_items.py | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py index 273e3807115..50f07e53ee2 100644 --- a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py +++ b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py @@ -13,28 +13,27 @@ def execute(filters=None): item_map = get_item_details() data = [] for sbom, warehouse in iwq_map.items(): - total = 0 - total_qty = 0 + total = 0 + total_qty = 0 + + for wh, item_qty in warehouse.items(): + total += 1 + row = [sbom, item_map.get(sbom).item_name, item_map.get(sbom).description, + item_map.get(sbom).stock_uom, wh] + available_qty = item_qty + total_qty += flt(available_qty) + row += [available_qty] - for wh, item_qty in warehouse.items(): - total += 1 - row = [sbom, item_map.get(sbom).item_name, item_map.get(sbom).description, - item_map.get(sbom).stock_uom, wh] - available_qty = item_qty - total_qty += flt(available_qty) - row += [available_qty] - - if available_qty: - data.append(row) - if (total == len(warehouse)): - row = ["", "", "Total", "", "", total_qty] - data.append(row) - + if available_qty: + data.append(row) + if (total == len(warehouse)): + row = ["", "", "Total", "", "", total_qty] + data.append(row) return columns, data def get_columns(): columns = ["Item Code:Link/Item:100", "Item Name::100", "Description::120", \ - "UOM:Link/UOM:80", "Warehouse:Link/Warehouse:100", "Quantity::100"] + "UOM:Link/UOM:80", "Warehouse:Link/Warehouse:100", "Quantity::100"] return columns @@ -42,7 +41,7 @@ def get_item_details(): item_map = {} for item in frappe.db.sql("""SELECT name, item_name, description, stock_uom from `tabItem`""", as_dict=1): - item_map.setdefault(item.name, item) + item_map.setdefault(item.name, item) return item_map def get_item_warehouse_quantity_map(): @@ -72,8 +71,8 @@ def get_item_warehouse_quantity_map(): last_sbom = "" sbom_map = {} for line in result: - if line.get("parent") != last_sbom: - last_sbom = line.get("parent") - actual_dict = sbom_map.setdefault(last_sbom, {}) - actual_dict.setdefault(line.get("warehouse"), line.get("qty")) + if line.get("parent") != last_sbom: + last_sbom = line.get("parent") + actual_dict = sbom_map.setdefault(last_sbom, {}) + actual_dict.setdefault(line.get("warehouse"), line.get("qty")) return sbom_map \ No newline at end of file From c87f8c6f00c08d4b99a5063f6ff632fb4831fe1d Mon Sep 17 00:00:00 2001 From: NahuelOperto Date: Fri, 10 May 2019 10:46:41 -0300 Subject: [PATCH 3/3] fix codecay --- .../available_stock_for_packing_items.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py index 50f07e53ee2..32711b2fce0 100644 --- a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py +++ b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py @@ -39,7 +39,7 @@ def get_columns(): def get_item_details(): item_map = {} - for item in frappe.db.sql("""SELECT name, item_name, description, stock_uom + for item in frappe.db.sql("""SELECT name, item_name, description, stock_uom from `tabItem`""", as_dict=1): item_map.setdefault(item.name, item) return item_map