Rushabh Mehta | 621283c | 2016-04-21 19:00:34 +0530 | [diff] [blame] | 1 | from __future__ import unicode_literals |
| 2 | |
| 3 | import frappe |
Suraj Shetty | c165838 | 2019-01-24 15:45:46 +0530 | [diff] [blame] | 4 | from frappe.model.db_query import DatabaseQuery |
Marica | a7ac011 | 2021-04-09 11:55:44 +0530 | [diff] [blame] | 5 | from frappe.utils import flt, cint |
Rushabh Mehta | 621283c | 2016-04-21 19:00:34 +0530 | [diff] [blame] | 6 | |
| 7 | @frappe.whitelist() |
Rushabh Mehta | 057db06 | 2016-11-08 12:40:04 +0530 | [diff] [blame] | 8 | def 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 Shetty | c165838 | 2019-01-24 15:45:46 +0530 | [diff] [blame] | 11 | filters = [] |
Rushabh Mehta | 621283c | 2016-04-21 19:00:34 +0530 | [diff] [blame] | 12 | if item_code: |
Suraj Shetty | c165838 | 2019-01-24 15:45:46 +0530 | [diff] [blame] | 13 | filters.append(['item_code', '=', item_code]) |
Rushabh Mehta | 621283c | 2016-04-21 19:00:34 +0530 | [diff] [blame] | 14 | if warehouse: |
Suraj Shetty | c165838 | 2019-01-24 15:45:46 +0530 | [diff] [blame] | 15 | filters.append(['warehouse', '=', warehouse]) |
Rushabh Mehta | 057db06 | 2016-11-08 12:40:04 +0530 | [diff] [blame] | 16 | if item_group: |
Nabin Hait | f3f4ce9 | 2019-02-01 11:59:18 +0530 | [diff] [blame] | 17 | 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 Shetty | c165838 | 2019-01-24 15:45:46 +0530 | [diff] [blame] | 24 | 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 Shetty | 7a45887 | 2019-01-24 16:26:48 +0530 | [diff] [blame] | 29 | # user does not have access on warehouse |
Suraj Shetty | c165838 | 2019-01-24 15:45:46 +0530 | [diff] [blame] | 30 | return [] |
Rushabh Mehta | 057db06 | 2016-11-08 12:40:04 +0530 | [diff] [blame] | 31 | |
deepeshgarg007 | 942c894 | 2019-02-19 19:51:23 +0530 | [diff] [blame] | 32 | items = frappe.db.get_all('Bin', fields=['item_code', 'warehouse', 'projected_qty', |
Suraj Shetty | dd0496f | 2019-01-24 16:18:43 +0530 | [diff] [blame] | 33 | 'reserved_qty', 'reserved_qty_for_production', 'reserved_qty_for_sub_contract', 'actual_qty', 'valuation_rate'], |
Suraj Shetty | c165838 | 2019-01-24 15:45:46 +0530 | [diff] [blame] | 34 | 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 Shetty | 7a45887 | 2019-01-24 16:26:48 +0530 | [diff] [blame] | 44 | limit_page_length='21') |
deepeshgarg007 | 942c894 | 2019-02-19 19:51:23 +0530 | [diff] [blame] | 45 | |
Marica | 5467d7c | 2021-04-09 11:56:49 +0530 | [diff] [blame] | 46 | precision = cint(frappe.db.get_single_value("System Settings", "float_precision")) |
Anurag Mishra | abf974d | 2021-03-17 18:40:21 +0530 | [diff] [blame] | 47 | |
deepeshgarg007 | 942c894 | 2019-02-19 19:51:23 +0530 | [diff] [blame] | 48 | for item in items: |
| 49 | item.update({ |
Anurag Mishra | abf974d | 2021-03-17 18:40:21 +0530 | [diff] [blame] | 50 | '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), |
deepeshgarg007 | 942c894 | 2019-02-19 19:51:23 +0530 | [diff] [blame] | 61 | }) |
deepeshgarg007 | 942c894 | 2019-02-19 19:51:23 +0530 | [diff] [blame] | 62 | return items |