Use deducted and final points in frontend

This commit is contained in:
Daniel Egger 2024-05-22 15:33:39 +02:00
parent f71e2e6ff3
commit 401c44dbc7
15 changed files with 93 additions and 32 deletions

View File

@ -139,7 +139,7 @@ const userPoints = computed(() =>
{{ $t("assignment.von x Punkten", { x: maxPoints }) }}
({{
(
((props.assignmentCompletion?.evaluation_points ?? 0) /
((props.assignmentCompletion?.evaluation_points_final ?? 0) /
(props.assignmentCompletion?.evaluation_max_points ?? 1)) *
100
).toFixed(0)

View File

@ -17,8 +17,8 @@ const documents = {
"\n mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n $completionStatus: AssignmentCompletionStatus!\n $completionDataString: String!\n $evaluationPoints: Float\n $initializeCompletion: Boolean\n $evaluationUserId: ID\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_points: $evaluationPoints\n initialize_completion: $initializeCompletion\n evaluation_user_id: $evaluationUserId\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_points\n completion_data\n task_completion_data\n }\n }\n }\n": types.UpsertAssignmentCompletionDocument,
"\n fragment CoursePageFields on CoursePageInterface {\n title\n id\n slug\n content_type\n frontend_url\n }\n": types.CoursePageFieldsFragmentDoc,
"\n query attendanceCheckQuery($courseSessionId: ID!) {\n course_session_attendance_course(id: $courseSessionId) {\n id\n attendance_user_list {\n user_id\n status\n }\n }\n }\n": types.AttendanceCheckQueryDocument,
"\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument,
"\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateQueryDocument,
"\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument,
"\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateQueryDocument,
"\n query competenceCertificateForUserQuery(\n $courseSlug: String!\n $courseSessionId: ID!\n $userId: UUID!\n ) {\n competence_certificate_list_for_user(course_slug: $courseSlug, user_id: $userId) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateForUserQueryDocument,
"\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n configuration {\n id\n enable_circle_documents\n enable_learning_mentor\n enable_competence_certificates\n }\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument,
"\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n title\n slug\n category_name\n configuration {\n id\n enable_circle_documents\n enable_learning_mentor\n enable_competence_certificates\n is_uk\n }\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n assignment_type\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n assignment_type\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n": types.CourseQueryDocument,
@ -63,11 +63,11 @@ export function graphql(source: "\n query attendanceCheckQuery($courseSessionId
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n"): (typeof documents)["\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n"];
export function graphql(source: "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n"): (typeof documents)["\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n"];
export function graphql(source: "\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/

File diff suppressed because one or more lines are too long

View File

@ -560,6 +560,9 @@ type AssignmentCompletionObjectType {
submitted_at: DateTime
evaluation_submitted_at: DateTime
evaluation_user: UserObjectType
evaluation_points_deducted: Float!
evaluation_points_deducted_reason: String!
evaluation_points_deducted_user: UserObjectType
evaluation_passed: Boolean
edoniq_extended_time_flag: Boolean!
assignment_user: UserObjectType!
@ -571,6 +574,7 @@ type AssignmentCompletionObjectType {
task_completion_data: GenericScalar
learning_content_page_id: ID
evaluation_points: Float
evaluation_points_final: Float
evaluation_max_points: Float
}

View File

@ -77,6 +77,10 @@ export const ASSIGNMENT_COMPLETION_QUERY = graphql(`
}
evaluation_points
evaluation_max_points
evaluation_points_deducted
evaluation_points_deducted_reason
evaluation_points_final
evaluation_passed
edoniq_extended_time_flag
completion_data
@ -101,6 +105,8 @@ export const COMPETENCE_NAVI_CERTIFICATE_QUERY = graphql(`
completion_status
submitted_at
evaluation_points
evaluation_points_deducted
evaluation_points_final
evaluation_max_points
evaluation_passed
}

View File

@ -81,18 +81,24 @@ const getIconName = () => {
>
<div class="flex flex-col lg:items-center">
<div class="heading-2">
{{ assignment.completion?.evaluation_points }}
{{ assignment.completion?.evaluation_points_final }}
</div>
<div>
{{ $t("assignment.von x Punkten", { x: assignment.max_points }) }}
({{
(
((assignment.completion?.evaluation_points ?? 0) /
((assignment.completion?.evaluation_points_final ?? 0) /
(assignment.completion?.evaluation_max_points ?? 1)) *
100
).toFixed(0)
}}%)
</div>
<div
v-if="(assignment.completion?.evaluation_points_deducted ?? 0) > 0"
class="text-gray-900"
>
{{ $t("a.mit Abzug") }}
</div>
<div
v-if="assignment.completion && !assignment.completion.evaluation_passed"
class="my-2 rounded-md bg-error-red-200 px-2.5 py-0.5"

View File

@ -17,7 +17,7 @@ export function assignmentsUserPoints(assignments: CompetenceCertificateAssignme
return +_.sum(
assignments
.filter((a) => a.completion?.completion_status === "EVALUATION_SUBMITTED")
.map((a) => a.completion?.evaluation_points ?? 0)
.map((a) => a.completion?.evaluation_points_final ?? 0)
).toFixed(1);
}
@ -31,7 +31,7 @@ export function calcCompetenceCertificateGrade(
const adjustedResults = evaluatedAssignments.map((a) => {
return (
((a.completion?.evaluation_points ?? 0) / a.max_points) *
((a.completion?.evaluation_points_final ?? 0) / a.max_points) *
a.competence_certificate_weight
);
});

View File

@ -169,7 +169,7 @@ async function startTest() {
<div class="my-4">
{{ $t("a.Resultat") }}:
<span class="font-bold">
{{ assignmentCompletion.evaluation_points }}
{{ assignmentCompletion.evaluation_points_final }}
</span>
{{
$t("assignment.von x Punkten", {
@ -178,7 +178,7 @@ async function startTest() {
}}
({{
(
((assignmentCompletion.evaluation_points ?? 0) /
((assignmentCompletion.evaluation_points_final ?? 0) /
(assignmentCompletion.evaluation_max_points ?? 1)) *
100
).toFixed(0)
@ -191,6 +191,21 @@ async function startTest() {
</span>
</div>
<div v-if="assignmentCompletion.evaluation_points_deducted > 0" class="my-4">
<div>
{{ $t("a.Punkte aus Bewertung") }}:
{{ assignmentCompletion.evaluation_points }}
</div>
<div>
{{ $t("a.Abgezogene Punkte") }}:
{{ assignmentCompletion.evaluation_points_deducted }}
</div>
<div>
{{ $t("a.Grund") }}:
{{ assignmentCompletion.evaluation_points_deducted_reason }}
</div>
</div>
<div class="mt-4">
<button class="btn-primary inline-flex items-center" @click="startTest()">
{{ $t("edoniqTest.viewResults") }}

View File

@ -47,7 +47,7 @@ export async function loadAssignmentCompletionStatusData(
if (userAssignmentStatus?.completion_status === "EVALUATION_SUBMITTED") {
gradedUsers.push({
user: csu,
points: userAssignmentStatus.evaluation_points ?? 0,
points: userAssignmentStatus.evaluation_points_final ?? 0,
maxPoints: userAssignmentStatus.evaluation_max_points ?? 0,
passed: userAssignmentStatus.evaluation_passed ?? false,
});

View File

@ -403,6 +403,9 @@ export interface CompetenceCertificateAssignment extends BaseCourseWagtailPage {
completion_status: AssignmentCompletionStatus;
evaluation_submitted_at: string | null;
evaluation_points: number | null;
evaluation_points_final: number | null;
evaluation_points_deducted: number | null;
evaluation_points_reason: string;
evaluation_max_points: number | null;
evaluation_passed: boolean | null;
} | null;
@ -567,6 +570,8 @@ export interface UserAssignmentCompletionStatus {
assignment_user_id: string;
completion_status: AssignmentCompletionStatus;
evaluation_points: number | null;
evaluation_points_final: number | null;
evaluation_points_deducted: number | null;
evaluation_max_points: number | null;
evaluation_passed: boolean;
learning_content_page_id: string;

View File

@ -1,31 +1,38 @@
# Generated by Django 3.2.20 on 2024-05-21 14:52
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('assignment', '0013_assignment_competence_certificate_weight'),
("assignment", "0013_assignment_competence_certificate_weight"),
]
operations = [
migrations.AddField(
model_name='assignmentcompletion',
name='evaluation_points_deducted',
field=models.FloatField(default=0.0, verbose_name='Punkteabzug'),
model_name="assignmentcompletion",
name="evaluation_points_deducted",
field=models.FloatField(default=0.0, verbose_name="Punkteabzug"),
),
migrations.AddField(
model_name='assignmentcompletion',
name='evaluation_points_deducted_reason',
field=models.TextField(blank=True, default='', verbose_name='Punkteabzug Begründung'),
model_name="assignmentcompletion",
name="evaluation_points_deducted_reason",
field=models.TextField(
blank=True, default="", verbose_name="Punkteabzug Begründung"
),
),
migrations.AddField(
model_name='assignmentcompletion',
name='evaluation_points_deducted_user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL),
model_name="assignmentcompletion",
name="evaluation_points_deducted_user",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to=settings.AUTH_USER_MODEL,
),
),
]

View File

@ -384,7 +384,7 @@ class AssignmentCompletion(models.Model):
default=AssignmentCompletionStatus.IN_PROGRESS.value,
)
completion_data = models.JSONField(default=dict)
completion_data = models.JSONField(default=dict, blank=True)
additional_json_data = models.JSONField(default=dict, blank=True)
class Meta:

View File

@ -10,7 +10,8 @@ from vbv_lernwelt.assignment.models import (
AssignmentCompletionAuditLog,
AssignmentCompletionStatus,
AssignmentType,
is_valid_assignment_completion_status, recalculate_assignment_passed,
is_valid_assignment_completion_status,
recalculate_assignment_passed,
)
from vbv_lernwelt.core.models import User
from vbv_lernwelt.core.utils import find_first

View File

@ -21,6 +21,7 @@ def request_assignment_completion_status(request, assignment_id, course_session_
"assignment_user_id",
"completion_status",
"evaluation_points",
"evaluation_points_deducted",
"evaluation_max_points",
"evaluation_passed",
"learning_content_page_id",
@ -29,6 +30,10 @@ def request_assignment_completion_status(request, assignment_id, course_session_
# Convert the learning_content_page_id to a string
data = list(qs) # Evaluate the queryset
for item in data:
# only `evaluation_points_final` is relevant for the frontend
item["evaluation_points_final"] = (
item["evaluation_points"] - item["evaluation_points_deducted"]
)
item["learning_content_page_id"] = str(item["learning_content_page_id"])
return Response(status=200, data=data)

View File

@ -188,14 +188,22 @@ class DashboardQuery(graphene.ObjectType):
completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED.value,
assignment_user=user,
course_session__course=course,
).values("evaluation_max_points", "evaluation_points")
).values(
"evaluation_max_points", "evaluation_points", "evaluation_points_deducted"
)
evaluation_results = list(evaluation_results)
points_max_count = sum(
[result.get("evaluation_max_points", 0) for result in evaluation_results]
)
points_achieved_count = sum(
[result.get("evaluation_points", 0) for result in evaluation_results]
[
(
result.get("evaluation_points", 0)
- result.get("evaluation_points_deducted", 0)
)
for result in evaluation_results
]
)
return CourseProgressType(