|
|
@ -26,34 +26,29 @@ def execute(filters=None): |
|
|
|
iwb_map = get_item_warehouse_map(filters) |
|
|
|
|
|
|
|
data = [] |
|
|
|
for item in sorted(iwb_map): |
|
|
|
for wh in sorted(iwb_map[item]): |
|
|
|
qty_dict = iwb_map[item][wh] |
|
|
|
data.append([item, item_map[item]["item_name"], |
|
|
|
item_map[item]["description"], wh, |
|
|
|
qty_dict.opening_qty, qty_dict.in_qty, |
|
|
|
qty_dict.out_qty, qty_dict.bal_qty |
|
|
|
]) |
|
|
|
for company in sorted(iwb_map): |
|
|
|
for item in sorted(iwb_map[company]): |
|
|
|
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]["description"], wh, |
|
|
|
qty_dict.opening_qty, qty_dict.in_qty, |
|
|
|
qty_dict.out_qty, qty_dict.bal_qty, company |
|
|
|
]) |
|
|
|
|
|
|
|
return columns, data |
|
|
|
|
|
|
|
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::90"] + \ |
|
|
|
["In Qty::80"] + ["Out Qty::80"] + ["Balance Qty::90"] |
|
|
|
columns = ["Item:Link/Item:100", "Item Name::150", "Description::150", \ |
|
|
|
"Warehouse:Link/Warehouse:100", "Opening Qty::90", \ |
|
|
|
"In Qty::80", "Out Qty::80", "Balance Qty::90", "Company:Link/Company:100"] |
|
|
|
|
|
|
|
return columns |
|
|
|
|
|
|
|
def get_conditions(filters): |
|
|
|
conditions = "" |
|
|
|
if filters.get("item_code"): |
|
|
|
conditions += " and item_code='%s'" % filters["item_code"] |
|
|
|
|
|
|
|
if filters.get("warehouse"): |
|
|
|
conditions += " and warehouse='%s'" % filters["warehouse"] |
|
|
|
|
|
|
|
if not filters.get("from_date"): |
|
|
|
webnotes.msgprint("Please enter From Date", raise_exception=1) |
|
|
|
|
|
|
@ -68,7 +63,7 @@ def get_conditions(filters): |
|
|
|
def get_stock_ledger_entries(filters): |
|
|
|
conditions = get_conditions(filters) |
|
|
|
return webnotes.conn.sql("""select item_code, warehouse, |
|
|
|
posting_date, actual_qty |
|
|
|
posting_date, actual_qty, company |
|
|
|
from `tabStock Ledger Entry` |
|
|
|
where ifnull(is_cancelled, 'No') = 'No' %s order by item_code, warehouse""" % |
|
|
|
conditions, as_dict=1) |
|
|
@ -78,10 +73,11 @@ def get_item_warehouse_map(filters): |
|
|
|
iwb_map = {} |
|
|
|
|
|
|
|
for d in sle: |
|
|
|
iwb_map.setdefault(d.item_code, {}).setdefault(d.warehouse, webnotes._dict({\ |
|
|
|
iwb_map.setdefault(d.company, {}).setdefault(d.item_code, {}).\ |
|
|
|
setdefault(d.warehouse, webnotes._dict({\ |
|
|
|
"opening_qty": 0.0, "in_qty": 0.0, "out_qty": 0.0, "bal_qty": 0.0 |
|
|
|
})) |
|
|
|
qty_dict = iwb_map[d.item_code][d.warehouse] |
|
|
|
qty_dict = iwb_map[d.company][d.item_code][d.warehouse] |
|
|
|
if d.posting_date < filters["from_date"]: |
|
|
|
qty_dict.opening_qty += flt(d.actual_qty) |
|
|
|
elif d.posting_date >= filters["from_date"] and d.posting_date <= filters["to_date"]: |
|
|
@ -95,8 +91,6 @@ def get_item_warehouse_map(filters): |
|
|
|
return iwb_map |
|
|
|
|
|
|
|
def get_item_details(filters): |
|
|
|
if filters.get("item_code"): |
|
|
|
conditions = " and name = '%s'" % filters["item_code"] |
|
|
|
item_map = {} |
|
|
|
for d in webnotes.conn.sql("select name, item_name, description from tabItem", as_dict=1): |
|
|
|
item_map.setdefault(d.name, d) |
|
|
|