blob: 8fbb56ced0fad5af3c9a9e4a47740456940b0c3b [file] [log] [blame]
Rushabh Mehta621283c2016-04-21 19:00:34 +05301import frappe
Suraj Shettyc1658382019-01-24 15:45:46 +05302from frappe.model.db_query import DatabaseQuery
Chillar Anand915b3432021-09-02 16:44:59 +05303from frappe.utils import cint, flt
4
Rushabh Mehta621283c2016-04-21 19:00:34 +05305
6@frappe.whitelist()
Ankush Menat494bd9e2022-03-28 18:52:46 +05307def get_data(
8 item_code=None, warehouse=None, item_group=None, start=0, sort_by="actual_qty", sort_order="desc"
9):
10 """Return data to render the item dashboard"""
Suraj Shettyc1658382019-01-24 15:45:46 +053011 filters = []
Rushabh Mehta621283c2016-04-21 19:00:34 +053012 if item_code:
Ankush Menat494bd9e2022-03-28 18:52:46 +053013 filters.append(["item_code", "=", item_code])
Rushabh Mehta621283c2016-04-21 19:00:34 +053014 if warehouse:
Ankush Menat494bd9e2022-03-28 18:52:46 +053015 filters.append(["warehouse", "=", warehouse])
Rushabh Mehta057db062016-11-08 12:40:04 +053016 if item_group:
Nabin Haitf3f4ce92019-02-01 11:59:18 +053017 lft, rgt = frappe.db.get_value("Item Group", item_group, ["lft", "rgt"])
Ankush Menat494bd9e2022-03-28 18:52:46 +053018 items = frappe.db.sql_list(
19 """
Nabin Haitf3f4ce92019-02-01 11:59:18 +053020 select i.name from `tabItem` i
21 where exists(select name from `tabItem Group`
22 where name=i.item_group and lft >=%s and rgt<=%s)
Ankush Menat494bd9e2022-03-28 18:52:46 +053023 """,
24 (lft, rgt),
25 )
26 filters.append(["item_code", "in", items])
Suraj Shettyc1658382019-01-24 15:45:46 +053027 try:
28 # check if user has any restrictions based on user permissions on warehouse
Ankush Menat494bd9e2022-03-28 18:52:46 +053029 if DatabaseQuery("Warehouse", user=frappe.session.user).build_match_conditions():
30 filters.append(["warehouse", "in", [w.name for w in frappe.get_list("Warehouse")]])
Suraj Shettyc1658382019-01-24 15:45:46 +053031 except frappe.PermissionError:
Suraj Shetty7a458872019-01-24 16:26:48 +053032 # user does not have access on warehouse
Suraj Shettyc1658382019-01-24 15:45:46 +053033 return []
Rushabh Mehta057db062016-11-08 12:40:04 +053034
Ankush Menat494bd9e2022-03-28 18:52:46 +053035 items = frappe.db.get_all(
36 "Bin",
37 fields=[
38 "item_code",
39 "warehouse",
40 "projected_qty",
41 "reserved_qty",
42 "reserved_qty_for_production",
43 "reserved_qty_for_sub_contract",
44 "actual_qty",
45 "valuation_rate",
46 ],
Suraj Shettyc1658382019-01-24 15:45:46 +053047 or_filters={
Ankush Menat494bd9e2022-03-28 18:52:46 +053048 "projected_qty": ["!=", 0],
49 "reserved_qty": ["!=", 0],
50 "reserved_qty_for_production": ["!=", 0],
51 "reserved_qty_for_sub_contract": ["!=", 0],
52 "actual_qty": ["!=", 0],
Suraj Shettyc1658382019-01-24 15:45:46 +053053 },
54 filters=filters,
Ankush Menat494bd9e2022-03-28 18:52:46 +053055 order_by=sort_by + " " + sort_order,
Suraj Shettyc1658382019-01-24 15:45:46 +053056 limit_start=start,
Ankush Menat494bd9e2022-03-28 18:52:46 +053057 limit_page_length=21,
58 )
deepeshgarg007942c8942019-02-19 19:51:23 +053059
Marica5467d7c2021-04-09 11:56:49 +053060 precision = cint(frappe.db.get_single_value("System Settings", "float_precision"))
Anurag Mishraabf974d2021-03-17 18:40:21 +053061
deepeshgarg007942c8942019-02-19 19:51:23 +053062 for item in items:
Ankush Menat494bd9e2022-03-28 18:52:46 +053063 item.update(
64 {
65 "item_name": frappe.get_cached_value("Item", item.item_code, "item_name"),
66 "disable_quick_entry": frappe.get_cached_value("Item", item.item_code, "has_batch_no")
67 or frappe.get_cached_value("Item", item.item_code, "has_serial_no"),
68 "projected_qty": flt(item.projected_qty, precision),
69 "reserved_qty": flt(item.reserved_qty, precision),
70 "reserved_qty_for_production": flt(item.reserved_qty_for_production, precision),
71 "reserved_qty_for_sub_contract": flt(item.reserved_qty_for_sub_contract, precision),
72 "actual_qty": flt(item.actual_qty, precision),
73 }
74 )
deepeshgarg007942c8942019-02-19 19:51:23 +053075 return items