From 2e07305616aae8702bad27655d64c87bef980de5 Mon Sep 17 00:00:00 2001 From: ankitjavalkarwork Date: Thu, 11 Sep 2014 16:47:19 +0530 Subject: [PATCH] Update report with Valuation rate, stock values, move to Main report --- erpnext/config/stock.py | 12 +++--- .../warehouse_wise_stock_balance.py | 39 ++++++++++++++----- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/erpnext/config/stock.py b/erpnext/config/stock.py index bfb4b7fd94..957abecdce 100644 --- a/erpnext/config/stock.py +++ b/erpnext/config/stock.py @@ -171,6 +171,12 @@ def get_data(): "label": _("Stock Analytics"), "icon": "icon-bar-chart" }, + { + "type": "report", + "is_query_report": True, + "name": "Warehouse-Wise Stock Balance", + "doctype": "Warehouse" + }, ] }, { @@ -222,12 +228,6 @@ def get_data(): "name": "Batch-Wise Balance History", "doctype": "Batch" }, - { - "type": "report", - "is_query_report": True, - "name": "Warehouse-Wise Stock Balance", - "doctype": "Warehouse" - }, { "type": "report", "is_query_report": True, diff --git a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py b/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py index 16fe3be472..775f6f11bb 100644 --- a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py +++ b/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py @@ -19,9 +19,15 @@ def execute(filters=None): for wh in sorted(iwb_map[company][item]): qty_dict = iwb_map[company][item][wh] data.append([item, item_map[item]["item_name"], + item_map[item]["item_group"], + item_map[item]["brand"], item_map[item]["description"], wh, - qty_dict.opening_qty, qty_dict.in_qty, - qty_dict.out_qty, qty_dict.bal_qty, company + qty_dict.uom, qty_dict.opening_qty, + qty_dict.opening_val, qty_dict.in_qty, + qty_dict.in_val, qty_dict.out_qty, + qty_dict.out_val, qty_dict.bal_qty, + qty_dict.bal_val, qty_dict.val_rate, + company ]) return columns, data @@ -29,9 +35,11 @@ def execute(filters=None): def get_columns(filters): """return columns based on filters""" - columns = ["Item:Link/Item:100", "Item Name::150", "Description::150", \ - "Warehouse:Link/Warehouse:100", "Opening Qty:Float:90", \ - "In Qty:Float:80", "Out Qty:Float:80", "Balance Qty:Float:90", "Company:Link/Company:100"] + columns = ["Item:Link/Item:100", "Item Name::150", "Item Group::100", "Brand::90", \ + "Description::140", "Warehouse:Link/Warehouse:100", "Stock UOM::90", "Opening Qty:Float:100", \ + "Opening Value:Float:110", "In Qty:Float:80", "In Value:Float:80", "Out Qty:Float:80", \ + "Out Value:Float:80", "Balance Qty:Float:100", "Balance Value:Float:100", \ + "Valuation Rate:Float:90", "Company:Link/Company:100"] return columns @@ -50,8 +58,8 @@ def get_conditions(filters): #get all details def get_stock_ledger_entries(filters): conditions = get_conditions(filters) - return frappe.db.sql("""select item_code, warehouse, - posting_date, actual_qty, company + return frappe.db.sql("""select item_code, warehouse, posting_date, + actual_qty, valuation_rate, stock_uom, company from `tabStock Ledger Entry` where docstatus < 2 %s order by item_code, warehouse""" % conditions, as_dict=1) @@ -63,24 +71,37 @@ def get_item_warehouse_map(filters): for d in sle: iwb_map.setdefault(d.company, {}).setdefault(d.item_code, {}).\ setdefault(d.warehouse, frappe._dict({\ - "opening_qty": 0.0, "in_qty": 0.0, "out_qty": 0.0, "bal_qty": 0.0 + "opening_qty": 0.0, "opening_val": 0.0, + "in_qty": 0.0, "in_val": 0.0, + "out_qty": 0.0, "out_val": 0.0, + "bal_qty": 0.0, "bal_val": 0.0, + "val_rate": 0.0, "uom": None })) qty_dict = iwb_map[d.company][d.item_code][d.warehouse] + qty_dict.uom = d.stock_uom + if d.posting_date < filters["from_date"]: qty_dict.opening_qty += flt(d.actual_qty) + qty_dict.opening_val += flt(d.actual_qty * d.valuation_rate) elif d.posting_date >= filters["from_date"] and d.posting_date <= filters["to_date"]: + qty_dict.val_rate = d.valuation_rate + if flt(d.actual_qty) > 0: qty_dict.in_qty += flt(d.actual_qty) + qty_dict.in_val += flt(d.actual_qty * d.valuation_rate) else: qty_dict.out_qty += abs(flt(d.actual_qty)) + qty_dict.out_val += flt(abs(flt(d.actual_qty)) * d.valuation_rate) qty_dict.bal_qty += flt(d.actual_qty) + qty_dict.bal_val += flt(d.actual_qty * d.valuation_rate) return iwb_map def get_item_details(filters): item_map = {} - for d in frappe.db.sql("select name, item_name, description from tabItem", as_dict=1): + for d in frappe.db.sql("select name, item_name, item_group, brand, \ + description from tabItem", as_dict=1): item_map.setdefault(d.name, d) return item_map