fix: statistics chart based on frappe version
This commit is contained in:
@@ -8,6 +8,7 @@ from frappe import _
|
|||||||
from frappe.desk.doctype.dashboard_chart.dashboard_chart import get_result
|
from frappe.desk.doctype.dashboard_chart.dashboard_chart import get_result
|
||||||
from frappe.desk.doctype.notification_log.notification_log import make_notification_logs
|
from frappe.desk.doctype.notification_log.notification_log import make_notification_logs
|
||||||
from frappe.desk.notifications import extract_mentions
|
from frappe.desk.notifications import extract_mentions
|
||||||
|
from frappe.pulse.utils import get_frappe_version
|
||||||
from frappe.rate_limiter import rate_limit
|
from frappe.rate_limiter import rate_limit
|
||||||
from frappe.utils import (
|
from frappe.utils import (
|
||||||
add_months,
|
add_months,
|
||||||
@@ -526,38 +527,17 @@ def get_lesson_count(course):
|
|||||||
@rate_limit(limit=500, seconds=60 * 60)
|
@rate_limit(limit=500, seconds=60 * 60)
|
||||||
def get_chart_data(
|
def get_chart_data(
|
||||||
chart_name,
|
chart_name,
|
||||||
timespan="Select Date Range",
|
|
||||||
timegrain="Daily",
|
timegrain="Daily",
|
||||||
from_date=None,
|
from_date=None,
|
||||||
to_date=None,
|
to_date=None,
|
||||||
):
|
):
|
||||||
if not from_date:
|
from_date, to_date = get_chart_date_range(from_date, to_date)
|
||||||
from_date = add_months(getdate(), -1)
|
|
||||||
if not to_date:
|
|
||||||
to_date = getdate()
|
|
||||||
|
|
||||||
from_date = get_datetime(from_date).strftime("%Y-%m-%d")
|
|
||||||
to_date = get_datetime(to_date)
|
|
||||||
|
|
||||||
chart = frappe.get_doc("Dashboard Chart", chart_name)
|
chart = frappe.get_doc("Dashboard Chart", chart_name)
|
||||||
doctype = chart.document_type
|
doctype = chart.document_type
|
||||||
datefield = chart.based_on
|
datefield = chart.based_on
|
||||||
value_field = chart.value_based_on or "1"
|
value_field = chart.value_based_on or "1"
|
||||||
|
|
||||||
filters = [([chart.document_type, "docstatus", "<", 2])]
|
data = get_chart_details(doctype, datefield, value_field, chart, from_date, to_date)
|
||||||
filters = filters + json.loads(chart.filters_json)
|
|
||||||
filters.append([doctype, datefield, ">=", from_date])
|
|
||||||
filters.append([doctype, datefield, "<=", to_date])
|
|
||||||
|
|
||||||
data = frappe.db.get_all(
|
|
||||||
doctype,
|
|
||||||
fields=[datefield, {"SUM": value_field}, {"COUNT": "*"}],
|
|
||||||
filters=filters,
|
|
||||||
group_by=datefield,
|
|
||||||
order_by=datefield,
|
|
||||||
as_list=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
result = get_result(data, timegrain, from_date, to_date, chart.chart_type)
|
result = get_result(data, timegrain, from_date, to_date, chart.chart_type)
|
||||||
data = []
|
data = []
|
||||||
for row in result:
|
for row in result:
|
||||||
@@ -570,6 +550,56 @@ def get_chart_data(
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def get_chart_date_range(from_date, to_date):
|
||||||
|
if not from_date:
|
||||||
|
from_date = add_months(getdate(), -1)
|
||||||
|
if not to_date:
|
||||||
|
to_date = getdate()
|
||||||
|
|
||||||
|
from_date = get_datetime(from_date).strftime("%Y-%m-%d")
|
||||||
|
to_date = get_datetime(to_date)
|
||||||
|
|
||||||
|
return from_date, to_date
|
||||||
|
|
||||||
|
|
||||||
|
def get_chart_filters(doctype, chart, datefield, from_date, to_date):
|
||||||
|
version = get_frappe_version()
|
||||||
|
if version.startswith("16."):
|
||||||
|
filters = [([chart.document_type, "docstatus", "<", 2])]
|
||||||
|
filters = filters + json.loads(chart.filters_json)
|
||||||
|
filters.append([doctype, datefield, ">=", from_date])
|
||||||
|
filters.append([doctype, datefield, "<=", to_date])
|
||||||
|
else:
|
||||||
|
filters = [([chart.document_type, "docstatus", "<", 2, False])]
|
||||||
|
filters = filters + json.loads(chart.filters_json)
|
||||||
|
filters.append([doctype, datefield, ">=", from_date, False])
|
||||||
|
filters.append([doctype, datefield, "<=", to_date, False])
|
||||||
|
return filters
|
||||||
|
|
||||||
|
|
||||||
|
def get_chart_details(doctype, datefield, value_field, chart, from_date, to_date):
|
||||||
|
filters = get_chart_filters(doctype, chart, datefield, from_date, to_date)
|
||||||
|
version = get_frappe_version()
|
||||||
|
if version.startswith("16."):
|
||||||
|
return frappe.db.get_all(
|
||||||
|
doctype,
|
||||||
|
fields=[datefield, {"SUM": value_field}, {"COUNT": "*"}],
|
||||||
|
filters=filters,
|
||||||
|
group_by=datefield,
|
||||||
|
order_by=datefield,
|
||||||
|
as_list=True,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return frappe.db.get_all(
|
||||||
|
doctype,
|
||||||
|
fields=[f"{datefield} as _unit", f"SUM({value_field})", "COUNT(*)"],
|
||||||
|
filters=filters,
|
||||||
|
group_by="_unit",
|
||||||
|
order_by="_unit asc",
|
||||||
|
as_list=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
@frappe.whitelist(allow_guest=True)
|
||||||
@rate_limit(limit=500, seconds=60 * 60)
|
@rate_limit(limit=500, seconds=60 * 60)
|
||||||
def get_course_completion_data():
|
def get_course_completion_data():
|
||||||
|
|||||||
Reference in New Issue
Block a user