blob: 45e662807a02b8ee0998cc96ba4a902777995ba6 [file] [log] [blame]
Rushabh Mehta621283c2016-04-21 19:00:34 +05301from __future__ import unicode_literals
2
3import frappe
Suraj Shettyc1658382019-01-24 15:45:46 +05304from frappe.model.db_query import DatabaseQuery
Maricaa7ac0112021-04-09 11:55:44 +05305from frappe.utils import flt, cint
Rushabh Mehta621283c2016-04-21 19:00:34 +05306
7@frappe.whitelist()
Rushabh Mehta057db062016-11-08 12:40:04 +05308def get_data(item_code=None, warehouse=None, item_group=None,
9 start=0, sort_by='actual_qty', sort_order='desc'):
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:
Suraj Shettyc1658382019-01-24 15:45:46 +053013 filters.append(['item_code', '=', item_code])
Rushabh Mehta621283c2016-04-21 19:00:34 +053014 if warehouse:
Suraj Shettyc1658382019-01-24 15:45: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"])
18 items = frappe.db.sql_list("""
19 select i.name from `tabItem` i
20 where exists(select name from `tabItem Group`
21 where name=i.item_group and lft >=%s and rgt<=%s)
22 """, (lft, rgt))
23 filters.append(['item_code', 'in', items])
Suraj Shettyc1658382019-01-24 15:45:46 +053024 try:
25 # check if user has any restrictions based on user permissions on warehouse
26 if DatabaseQuery('Warehouse', user=frappe.session.user).build_match_conditions():
27 filters.append(['warehouse', 'in', [w.name for w in frappe.get_list('Warehouse')]])
28 except frappe.PermissionError:
Suraj Shetty7a458872019-01-24 16:26:48 +053029 # user does not have access on warehouse
Suraj Shettyc1658382019-01-24 15:45:46 +053030 return []
Rushabh Mehta057db062016-11-08 12:40:04 +053031
deepeshgarg007942c8942019-02-19 19:51:23 +053032 items = frappe.db.get_all('Bin', fields=['item_code', 'warehouse', 'projected_qty',
Suraj Shettydd0496f2019-01-24 16:18:43 +053033 'reserved_qty', 'reserved_qty_for_production', 'reserved_qty_for_sub_contract', 'actual_qty', 'valuation_rate'],
Suraj Shettyc1658382019-01-24 15:45:46 +053034 or_filters={
35 'projected_qty': ['!=', 0],
36 'reserved_qty': ['!=', 0],
37 'reserved_qty_for_production': ['!=', 0],
38 'reserved_qty_for_sub_contract': ['!=', 0],
39 'actual_qty': ['!=', 0],
40 },
41 filters=filters,
42 order_by=sort_by + ' ' + sort_order,
43 limit_start=start,
Suraj Shetty7a458872019-01-24 16:26:48 +053044 limit_page_length='21')
deepeshgarg007942c8942019-02-19 19:51:23 +053045
Marica5467d7c2021-04-09 11:56:49 +053046 precision = cint(frappe.db.get_single_value("System Settings", "float_precision"))
Anurag Mishraabf974d2021-03-17 18:40:21 +053047
deepeshgarg007942c8942019-02-19 19:51:23 +053048 for item in items:
49 item.update({
Anurag Mishraabf974d2021-03-17 18:40:21 +053050 'item_name': frappe.get_cached_value(
51 "Item", item.item_code, 'item_name'),
52 'disable_quick_entry': frappe.get_cached_value(
53 "Item", item.item_code, 'has_batch_no')
54 or frappe.get_cached_value(
55 "Item", item.item_code, 'has_serial_no'),
56 'projected_qty': flt(item.projected_qty, precision),
57 'reserved_qty': flt(item.reserved_qty, precision),
58 'reserved_qty_for_production': flt(item.reserved_qty_for_production, precision),
59 'reserved_qty_for_sub_contract': flt(item.reserved_qty_for_sub_contract, precision),
60 'actual_qty': flt(item.actual_qty, precision),
deepeshgarg007942c8942019-02-19 19:51:23 +053061 })
deepeshgarg007942c8942019-02-19 19:51:23 +053062 return items