blob: 90ecd462591c3e97d771ee18114c3cce76baf13d [file] [log] [blame]
prssanna3f1444e2019-09-24 13:04:53 +05301
2from __future__ import unicode_literals, print_function
3import frappe
Suraj Shettyd23c9982019-09-30 13:09:12 +05304from frappe.utils import cint
prssanna3f1444e2019-09-24 13:04:53 +05305
6def get_leaderboards():
7 leaderboards = {
prssannad095acd2019-09-26 13:41:24 +05308 "Customer": {
prssanna8f7ed712019-09-27 15:09:40 +05309 "fields": [
10 {'fieldname': 'total_sales_amount', 'fieldtype': 'Currency'},
11 'total_qty_sold',
12 {'fieldname': 'outstanding_amount', 'fieldtype': 'Currency'}
13 ],
prssannad095acd2019-09-26 13:41:24 +053014 "method": "erpnext.startup.leaderboard.get_all_customers",
15 },
16 "Item": {
prssanna8f7ed712019-09-27 15:09:40 +053017 "fields": [
18 {'fieldname': 'total_sales_amount', 'fieldtype': 'Currency'},
prssanna119c9762019-09-27 16:28:08 +053019 'total_qty_sold',
prssanna8f7ed712019-09-27 15:09:40 +053020 {'fieldname': 'total_purchase_amount', 'fieldtype': 'Currency'},
21 'total_qty_purchased',
22 'available_stock_qty',
23 {'fieldname': 'available_stock_value', 'fieldtype': 'Currency'}
24 ],
prssannad095acd2019-09-26 13:41:24 +053025 "method": "erpnext.startup.leaderboard.get_all_items",
26 },
27 "Supplier": {
prssanna8f7ed712019-09-27 15:09:40 +053028 "fields": [
29 {'fieldname': 'total_purchase_amount', 'fieldtype': 'Currency'},
30 'total_qty_purchased',
31 {'fieldname': 'outstanding_amount', 'fieldtype': 'Currency'}
32 ],
prssannad095acd2019-09-26 13:41:24 +053033 "method": "erpnext.startup.leaderboard.get_all_suppliers",
34 },
35 "Sales Partner": {
prssanna8f7ed712019-09-27 15:09:40 +053036 "fields": [
37 {'fieldname': 'total_sales_amount', 'fieldtype': 'Currency'},
38 {'fieldname': 'total_commission', 'fieldtype': 'Currency'}
39 ],
prssannad095acd2019-09-26 13:41:24 +053040 "method": "erpnext.startup.leaderboard.get_all_sales_partner",
41 },
42 "Sales Person": {
prssanna8f7ed712019-09-27 15:09:40 +053043 "fields": [
44 {'fieldname': 'total_sales_amount', 'fieldtype': 'Currency'}
45 ],
prssannad095acd2019-09-26 13:41:24 +053046 "method": "erpnext.startup.leaderboard.get_all_sales_person",
47 }
prssanna3f1444e2019-09-24 13:04:53 +053048 }
49
50 return leaderboards
51
prssannab8749222019-09-30 11:12:10 +053052@frappe.whitelist()
prssannad095acd2019-09-26 13:41:24 +053053def get_all_customers(from_date, company, field, limit = None):
prssanna3f1444e2019-09-24 13:04:53 +053054 if field == "outstanding_amount":
prssannad095acd2019-09-26 13:41:24 +053055 filters = [['docstatus', '=', '1'], ['company', '=', company]]
56 if from_date:
57 filters.append(['posting_date', '>=', from_date])
58 return frappe.db.get_all('Sales Invoice',
59 fields = ['customer as name', 'sum(outstanding_amount) as value'],
60 filters = filters,
61 group_by = 'customer',
62 order_by = 'value desc',
63 limit = limit
64 )
prssanna3f1444e2019-09-24 13:04:53 +053065 else:
66 if field == "total_sales_amount":
67 select_field = "sum(so_item.base_net_amount)"
68 elif field == "total_qty_sold":
69 select_field = "sum(so_item.stock_qty)"
70
71 return frappe.db.sql("""
72 select so.customer as name, {0} as value
73 FROM `tabSales Order` as so JOIN `tabSales Order Item` as so_item
74 ON so.name = so_item.parent
75 where so.docstatus = 1 and so.transaction_date >= %s and so.company = %s
76 group by so.customer
77 order by value DESC
Suraj Shettyd23c9982019-09-30 13:09:12 +053078 limit %s
79 """.format(select_field), (from_date, company, cint(limit)), as_dict=1) #nosec
prssanna3f1444e2019-09-24 13:04:53 +053080
prssannab8749222019-09-30 11:12:10 +053081@frappe.whitelist()
prssannad095acd2019-09-26 13:41:24 +053082def get_all_items(from_date, company, field, limit = None):
prssanna3f1444e2019-09-24 13:04:53 +053083 if field in ("available_stock_qty", "available_stock_value"):
prssannad095acd2019-09-26 13:41:24 +053084 select_field = "sum(actual_qty)" if field=="available_stock_qty" else "sum(stock_value)"
85 return frappe.db.get_all('Bin',
86 fields = ['item_code as name', '{0} as value'.format(select_field)],
87 group_by = 'item_code',
88 order_by = 'value desc',
89 limit = limit
90 )
prssanna3f1444e2019-09-24 13:04:53 +053091 else:
92 if field == "total_sales_amount":
93 select_field = "sum(order_item.base_net_amount)"
94 select_doctype = "Sales Order"
95 elif field == "total_purchase_amount":
96 select_field = "sum(order_item.base_net_amount)"
97 select_doctype = "Purchase Order"
98 elif field == "total_qty_sold":
99 select_field = "sum(order_item.stock_qty)"
100 select_doctype = "Sales Order"
101 elif field == "total_qty_purchased":
102 select_field = "sum(order_item.stock_qty)"
103 select_doctype = "Purchase Order"
104
105 return frappe.db.sql("""
106 select order_item.item_code as name, {0} as value
107 from `tab{1}` sales_order join `tab{1} Item` as order_item
108 on sales_order.name = order_item.parent
109 where sales_order.docstatus = 1
110 and sales_order.company = %s and sales_order.transaction_date >= %s
111 group by order_item.item_code
112 order by value desc
Suraj Shettyd23c9982019-09-30 13:09:12 +0530113 limit %s
114 """.format(select_field, select_doctype), (company, from_date, cint(limit)), as_dict=1) #nosec
prssanna3f1444e2019-09-24 13:04:53 +0530115
prssannab8749222019-09-30 11:12:10 +0530116@frappe.whitelist()
prssannad095acd2019-09-26 13:41:24 +0530117def get_all_suppliers(from_date, company, field, limit = None):
prssanna3f1444e2019-09-24 13:04:53 +0530118 if field == "outstanding_amount":
prssannad095acd2019-09-26 13:41:24 +0530119 filters = [['docstatus', '=', '1'], ['company', '=', company]]
120 if from_date:
121 filters.append(['posting_date', '>=', from_date])
122 return frappe.db.get_all('Purchase Invoice',
123 fields = ['supplier as name', 'sum(outstanding_amount) as value'],
124 filters = filters,
125 group_by = 'supplier',
126 order_by = 'value desc',
127 limit = limit
128 )
prssanna3f1444e2019-09-24 13:04:53 +0530129 else:
130 if field == "total_purchase_amount":
131 select_field = "sum(purchase_order_item.base_net_amount)"
132 elif field == "total_qty_purchased":
133 select_field = "sum(purchase_order_item.stock_qty)"
134
135 return frappe.db.sql("""
136 select purchase_order.supplier as name, {0} as value
137 FROM `tabPurchase Order` as purchase_order LEFT JOIN `tabPurchase Order Item`
138 as purchase_order_item ON purchase_order.name = purchase_order_item.parent
139 where purchase_order.docstatus = 1 and purchase_order.modified >= %s
140 and purchase_order.company = %s
141 group by purchase_order.supplier
142 order by value DESC
Suraj Shettyd23c9982019-09-30 13:09:12 +0530143 limit %s""".format(select_field), (from_date, company, cint(limit)), as_dict=1) #nosec
prssanna3f1444e2019-09-24 13:04:53 +0530144
prssannab8749222019-09-30 11:12:10 +0530145@frappe.whitelist()
prssannad095acd2019-09-26 13:41:24 +0530146def get_all_sales_partner(from_date, company, field, limit = None):
prssanna3f1444e2019-09-24 13:04:53 +0530147 if field == "total_sales_amount":
Suraj Shettyd23c9982019-09-30 13:09:12 +0530148 select_field = "sum(`base_net_total`)"
prssanna3f1444e2019-09-24 13:04:53 +0530149 elif field == "total_commission":
Suraj Shettyd23c9982019-09-30 13:09:12 +0530150 select_field = "sum(`total_commission`)"
prssanna3f1444e2019-09-24 13:04:53 +0530151
Suraj Shettyd23c9982019-09-30 13:09:12 +0530152 filters = {
153 'sales_partner': ['!=', ''],
154 'docstatus': 1,
155 'company': company
156 }
157 if from_date:
158 filters['transaction_date'] = ['>=', from_date]
159
160 return frappe.get_list('Sales Order', fields=[
161 '`sales_partner` as name',
162 '{} as value'.format(select_field),
163 ], filters=filters, group_by='sales_partner', order_by='value DESC', limit=limit)
prssanna3f1444e2019-09-24 13:04:53 +0530164
prssannab8749222019-09-30 11:12:10 +0530165@frappe.whitelist()
Suraj Shettyd23c9982019-09-30 13:09:12 +0530166def get_all_sales_person(from_date, company, field = None, limit = 0):
prssanna3f1444e2019-09-24 13:04:53 +0530167 return frappe.db.sql("""
168 select sales_team.sales_person as name, sum(sales_order.base_net_total) as value
169 from `tabSales Order` as sales_order join `tabSales Team` as sales_team
170 on sales_order.name = sales_team.parent and sales_team.parenttype = 'Sales Order'
171 where sales_order.docstatus = 1
172 and sales_order.transaction_date >= %s
173 and sales_order.company = %s
174 group by sales_team.sales_person
175 order by value DESC
Suraj Shettyd23c9982019-09-30 13:09:12 +0530176 limit %s
177 """, (from_date, company, cint(limit)), as_dict=1)