Merge pull request #2194 from ankitjavalkarwork/stockbalreport

Update report with Valuation rate, stock values, move to Main report
This commit is contained in:
Anand Doshi 2014-09-16 15:22:25 +05:30
commit 11b75759d2
2 changed files with 36 additions and 15 deletions

View File

@ -171,6 +171,12 @@ def get_data():
"label": _("Stock Analytics"), "label": _("Stock Analytics"),
"icon": "icon-bar-chart" "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", "name": "Batch-Wise Balance History",
"doctype": "Batch" "doctype": "Batch"
}, },
{
"type": "report",
"is_query_report": True,
"name": "Warehouse-Wise Stock Balance",
"doctype": "Warehouse"
},
{ {
"type": "report", "type": "report",
"is_query_report": True, "is_query_report": True,

View File

@ -19,9 +19,15 @@ def execute(filters=None):
for wh in sorted(iwb_map[company][item]): for wh in sorted(iwb_map[company][item]):
qty_dict = iwb_map[company][item][wh] qty_dict = iwb_map[company][item][wh]
data.append([item, item_map[item]["item_name"], data.append([item, item_map[item]["item_name"],
item_map[item]["item_group"],
item_map[item]["brand"],
item_map[item]["description"], wh, item_map[item]["description"], wh,
qty_dict.opening_qty, qty_dict.in_qty, qty_dict.uom, qty_dict.opening_qty,
qty_dict.out_qty, qty_dict.bal_qty, company 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 return columns, data
@ -29,9 +35,11 @@ def execute(filters=None):
def get_columns(filters): def get_columns(filters):
"""return columns based on filters""" """return columns based on filters"""
columns = ["Item:Link/Item:100", "Item Name::150", "Description::150", \ columns = ["Item:Link/Item:100", "Item Name::150", "Item Group::100", "Brand::90", \
"Warehouse:Link/Warehouse:100", "Opening Qty:Float:90", \ "Description::140", "Warehouse:Link/Warehouse:100", "Stock UOM::90", "Opening Qty:Float:100", \
"In Qty:Float:80", "Out Qty:Float:80", "Balance Qty:Float:90", "Company:Link/Company: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 return columns
@ -50,8 +58,8 @@ def get_conditions(filters):
#get all details #get all details
def get_stock_ledger_entries(filters): def get_stock_ledger_entries(filters):
conditions = get_conditions(filters) conditions = get_conditions(filters)
return frappe.db.sql("""select item_code, warehouse, return frappe.db.sql("""select item_code, warehouse, posting_date,
posting_date, actual_qty, company actual_qty, valuation_rate, stock_uom, company
from `tabStock Ledger Entry` from `tabStock Ledger Entry`
where docstatus < 2 %s order by item_code, warehouse""" % where docstatus < 2 %s order by item_code, warehouse""" %
conditions, as_dict=1) conditions, as_dict=1)
@ -63,24 +71,37 @@ def get_item_warehouse_map(filters):
for d in sle: for d in sle:
iwb_map.setdefault(d.company, {}).setdefault(d.item_code, {}).\ iwb_map.setdefault(d.company, {}).setdefault(d.item_code, {}).\
setdefault(d.warehouse, frappe._dict({\ 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 = iwb_map[d.company][d.item_code][d.warehouse]
qty_dict.uom = d.stock_uom
if d.posting_date < filters["from_date"]: if d.posting_date < filters["from_date"]:
qty_dict.opening_qty += flt(d.actual_qty) 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"]: 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: if flt(d.actual_qty) > 0:
qty_dict.in_qty += flt(d.actual_qty) qty_dict.in_qty += flt(d.actual_qty)
qty_dict.in_val += flt(d.actual_qty * d.valuation_rate)
else: else:
qty_dict.out_qty += abs(flt(d.actual_qty)) 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_qty += flt(d.actual_qty)
qty_dict.bal_val += flt(d.actual_qty * d.valuation_rate)
return iwb_map return iwb_map
def get_item_details(filters): def get_item_details(filters):
item_map = {} 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) item_map.setdefault(d.name, d)
return item_map return item_map