Merge pull request #2194 from ankitjavalkarwork/stockbalreport
Update report with Valuation rate, stock values, move to Main report
This commit is contained in:
commit
11b75759d2
@ -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,
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user