Merge pull request #1961 from pateljannat/issues-165

fix: misc issues
This commit is contained in:
Jannat Patel
2026-01-01 14:51:58 +05:30
committed by GitHub
2 changed files with 62 additions and 27 deletions
@@ -25,7 +25,7 @@
:required="true"
/>
<ChildTable
v-model="exercise.test_cases"
v-model="testCases.data"
:label="__('Test Cases')"
:columns="testCaseColumns"
:required="true"
@@ -179,9 +179,7 @@ const testCases = createListResource({
fields: ['input', 'expected_output', 'name'],
cache: ['testCases', props.exerciseID],
parent: 'LMS Programming Exercise',
onSuccess(data: TestCase[]) {
exercise.value.test_cases = data
},
orderBy: 'idx',
})
const fetchTestCases = () => {
@@ -200,6 +198,13 @@ const validateTitle = () => {
}
const saveExercise = (close: () => void) => {
exercise.value.test_cases = testCases.data.map(
(tc: TestCase, index: number) => ({
input: tc.input,
expected_output: tc.expected_output,
idx: index + 1,
})
)
validateTitle()
if (props.exerciseID == 'new') createNewExercise(close)
else updateExercise(close)
+53 -23
View File
@@ -8,6 +8,7 @@ from frappe import _
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.notifications import extract_mentions
from frappe.pulse.utils import get_frappe_version
from frappe.rate_limiter import rate_limit
from frappe.utils import (
add_months,
@@ -526,38 +527,17 @@ def get_lesson_count(course):
@rate_limit(limit=500, seconds=60 * 60)
def get_chart_data(
chart_name,
timespan="Select Date Range",
timegrain="Daily",
from_date=None,
to_date=None,
):
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)
from_date, to_date = get_chart_date_range(from_date, to_date)
chart = frappe.get_doc("Dashboard Chart", chart_name)
doctype = chart.document_type
datefield = chart.based_on
value_field = chart.value_based_on or "1"
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])
data = frappe.db.get_all(
doctype,
fields=[datefield, {"SUM": value_field}, {"COUNT": "*"}],
filters=filters,
group_by=datefield,
order_by=datefield,
as_list=True,
)
data = get_chart_details(doctype, datefield, value_field, chart, from_date, to_date)
result = get_result(data, timegrain, from_date, to_date, chart.chart_type)
data = []
for row in result:
@@ -570,6 +550,56 @@ def get_chart_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)
@rate_limit(limit=500, seconds=60 * 60)
def get_course_completion_data():