Add CourseSessionUsers to context
This commit is contained in:
parent
8e7f805067
commit
dbcae57091
|
|
@ -17,8 +17,12 @@ def query_competence_course_session_assignments(course_session_ids, circle_ids=N
|
||||||
AssignmentType.CASEWORK.value,
|
AssignmentType.CASEWORK.value,
|
||||||
],
|
],
|
||||||
learning_content__content_assignment__competence_certificate__isnull=False,
|
learning_content__content_assignment__competence_certificate__isnull=False,
|
||||||
).select_related("submission_deadline", "learning_content", "course_session",
|
).select_related(
|
||||||
"learning_content__content_assignment"):
|
"submission_deadline",
|
||||||
|
"learning_content",
|
||||||
|
"course_session",
|
||||||
|
"learning_content__content_assignment",
|
||||||
|
):
|
||||||
if circle_ids and csa.learning_content.get_circle().id not in circle_ids:
|
if circle_ids and csa.learning_content.get_circle().id not in circle_ids:
|
||||||
continue
|
continue
|
||||||
result.append(csa)
|
result.append(csa)
|
||||||
|
|
@ -35,7 +39,12 @@ def query_competence_course_session_edoniq_tests(course_session_ids, circle_ids=
|
||||||
for cset in CourseSessionEdoniqTest.objects.filter(
|
for cset in CourseSessionEdoniqTest.objects.filter(
|
||||||
course_session_id__in=course_session_ids,
|
course_session_id__in=course_session_ids,
|
||||||
learning_content__content_assignment__competence_certificate__isnull=False,
|
learning_content__content_assignment__competence_certificate__isnull=False,
|
||||||
).select_related("deadline", "learning_content", "course_session", "learning_content__content_assignment"):
|
).select_related(
|
||||||
|
"deadline",
|
||||||
|
"learning_content",
|
||||||
|
"course_session",
|
||||||
|
"learning_content__content_assignment",
|
||||||
|
):
|
||||||
if circle_ids and cset.learning_content.get_circle().id not in circle_ids:
|
if circle_ids and cset.learning_content.get_circle().id not in circle_ids:
|
||||||
continue
|
continue
|
||||||
result.append(cset)
|
result.append(cset)
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
import math
|
import math
|
||||||
from typing import List, Dict, Tuple
|
from typing import List
|
||||||
|
|
||||||
import graphene
|
import graphene
|
||||||
import structlog
|
|
||||||
from django.db import connections, reset_queries
|
|
||||||
|
|
||||||
import vbv_lernwelt.assignment.models
|
import vbv_lernwelt.assignment.models
|
||||||
from vbv_lernwelt.assignment.models import (
|
from vbv_lernwelt.assignment.models import (
|
||||||
|
|
@ -20,8 +18,6 @@ from vbv_lernwelt.course_session.models import (
|
||||||
CourseSessionEdoniqTest,
|
CourseSessionEdoniqTest,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = structlog.get_logger()
|
|
||||||
|
|
||||||
|
|
||||||
class AssignmentCompletionMetricsType(graphene.ObjectType):
|
class AssignmentCompletionMetricsType(graphene.ObjectType):
|
||||||
_id = graphene.ID(required=True)
|
_id = graphene.ID(required=True)
|
||||||
|
|
@ -101,14 +97,23 @@ def get_assignment_completion_metrics(
|
||||||
assignment: vbv_lernwelt.assignment.models.Assignment,
|
assignment: vbv_lernwelt.assignment.models.Assignment,
|
||||||
user_selection_ids: List[str] | None,
|
user_selection_ids: List[str] | None,
|
||||||
urql_id_postfix: str = "",
|
urql_id_postfix: str = "",
|
||||||
|
context=None,
|
||||||
) -> AssignmentCompletionMetricsType:
|
) -> AssignmentCompletionMetricsType:
|
||||||
|
if not context:
|
||||||
|
context = {}
|
||||||
|
|
||||||
if user_selection_ids:
|
if user_selection_ids:
|
||||||
course_session_users = user_selection_ids
|
course_session_users = user_selection_ids
|
||||||
else:
|
else:
|
||||||
course_session_users = CourseSessionUser.objects.filter(
|
key = f"CourseSessionUser_{course_session.id}"
|
||||||
course_session=course_session,
|
if not key in context:
|
||||||
role=CourseSessionUser.Role.MEMBER,
|
course_session_users = CourseSessionUser.objects.filter(
|
||||||
).values_list("user", flat=True)
|
course_session=course_session,
|
||||||
|
role=CourseSessionUser.Role.MEMBER,
|
||||||
|
).values_list("user", flat=True)
|
||||||
|
context[key] = course_session_users
|
||||||
|
else:
|
||||||
|
course_session_users = context[key]
|
||||||
|
|
||||||
evaluation_results = AssignmentCompletion.objects.filter(
|
evaluation_results = AssignmentCompletion.objects.filter(
|
||||||
completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED.value,
|
completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED.value,
|
||||||
|
|
@ -143,13 +148,20 @@ def create_record(
|
||||||
user_selection_ids: List[str] | None,
|
user_selection_ids: List[str] | None,
|
||||||
urql_id_postfix: str = "",
|
urql_id_postfix: str = "",
|
||||||
context=None,
|
context=None,
|
||||||
) -> Tuple[AssignmentStatisticsRecordType, Dict]:
|
) -> AssignmentStatisticsRecordType:
|
||||||
if not context:
|
if not context:
|
||||||
context = {}
|
context = {}
|
||||||
|
|
||||||
assignment_type = "CourseSessionAssignment" if isinstance(course_session_assignment,
|
assignment_type = (
|
||||||
CourseSessionAssignment) else "CourseSessionEdoniqTest"
|
"CourseSessionAssignment"
|
||||||
due_date = course_session_assignment.submission_deadline if assignment_type == "CourseSessionAssignment" else course_session_assignment.deadline
|
if isinstance(course_session_assignment, CourseSessionAssignment)
|
||||||
|
else "CourseSessionEdoniqTest"
|
||||||
|
)
|
||||||
|
due_date = (
|
||||||
|
course_session_assignment.submission_deadline
|
||||||
|
if assignment_type == "CourseSessionAssignment"
|
||||||
|
else course_session_assignment.deadline
|
||||||
|
)
|
||||||
|
|
||||||
key = f"{assignment_type}_{course_session_assignment.learning_content.id}"
|
key = f"{assignment_type}_{course_session_assignment.learning_content.id}"
|
||||||
|
|
||||||
|
|
@ -176,10 +188,11 @@ def create_record(
|
||||||
assignment=learning_content.content_assignment, # noqa
|
assignment=learning_content.content_assignment, # noqa
|
||||||
user_selection_ids=user_selection_ids, # noqa
|
user_selection_ids=user_selection_ids, # noqa
|
||||||
urql_id_postfix=urql_id_postfix, # noqa
|
urql_id_postfix=urql_id_postfix, # noqa
|
||||||
|
context=context, # noqa
|
||||||
),
|
),
|
||||||
details_url=due_date.url_expert, # noqa
|
details_url=due_date.url_expert, # noqa
|
||||||
deadline=due_date.start, # noqa
|
deadline=due_date.start, # noqa
|
||||||
), context
|
)
|
||||||
|
|
||||||
|
|
||||||
def assignments(
|
def assignments(
|
||||||
|
|
@ -197,19 +210,22 @@ def assignments(
|
||||||
)
|
)
|
||||||
records: List[AssignmentStatisticsRecordType] = []
|
records: List[AssignmentStatisticsRecordType] = []
|
||||||
context = {}
|
context = {}
|
||||||
reset_queries()
|
|
||||||
csas = query_competence_course_session_assignments(course_sessions, circle_ids)
|
csas = query_competence_course_session_assignments(course_sessions, circle_ids)
|
||||||
csets = query_competence_course_session_edoniq_tests(course_sessions, circle_ids)
|
csets = query_competence_course_session_edoniq_tests(course_sessions, circle_ids)
|
||||||
|
|
||||||
for csa in csas:
|
for csa in csas:
|
||||||
record, context = create_record(csa, user_selection_ids, urql_id_postfix=urql_id, context=context)
|
record = create_record(
|
||||||
|
csa, user_selection_ids, urql_id_postfix=urql_id, context=context
|
||||||
|
)
|
||||||
records.append(record)
|
records.append(record)
|
||||||
|
|
||||||
for cset in csets:
|
for cset in csets:
|
||||||
record, context = create_record(cset, user_selection_ids, urql_id_postfix=urql_id, context=context)
|
record = create_record(
|
||||||
|
cset, user_selection_ids, urql_id_postfix=urql_id, context=context
|
||||||
|
)
|
||||||
records.append(record)
|
records.append(record)
|
||||||
num_queries = len(connections["default"].queries)
|
|
||||||
logger.info(num_queries)
|
|
||||||
return AssignmentsStatisticsType(
|
return AssignmentsStatisticsType(
|
||||||
_id=urql_id, # noqa
|
_id=urql_id, # noqa
|
||||||
records=sorted(records, key=lambda r: r.deadline), # noqa
|
records=sorted(records, key=lambda r: r.deadline), # noqa
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue