diff --git a/client/src/components/assignment/evaluation/EvaluationContainer.vue b/client/src/components/assignment/evaluation/EvaluationContainer.vue index 32ddcc08..e4849394 100644 --- a/client/src/components/assignment/evaluation/EvaluationContainer.vue +++ b/client/src/components/assignment/evaluation/EvaluationContainer.vue @@ -2,13 +2,15 @@ import EvaluationIntro from "@/components/assignment/evaluation/EvaluationIntro.vue"; import EvaluationSummary from "@/components/assignment/evaluation/EvaluationSummary.vue"; import EvaluationTask from "@/components/assignment/evaluation/EvaluationTask.vue"; -import { useCourseSessionDetailQuery } from "@/composables"; +import { useCourseSessionDetailQuery, useCurrentCourseSession } from "@/composables"; +import { UPSERT_ASSIGNMENT_COMPLETION_MUTATION } from "@/graphql/mutations"; import type { Assignment, AssignmentCompletion, AssignmentEvaluationTask, CourseSessionUser, } from "@/types"; +import { useMutation } from "@urql/vue"; import { useRouteQuery } from "@vueuse/router"; import dayjs from "dayjs"; import { findIndex } from "lodash"; @@ -21,10 +23,12 @@ const props = defineProps<{ assignment: Assignment; }>(); -const emit = defineEmits(["close"]); +const emit = defineEmits(["close", "reopen"]); log.debug("UserEvaluation setup"); +const courseSession = useCurrentCourseSession(); + // 0 = introduction, 1 - n = tasks, n+1 = submission const stepIndex = useRouteQuery("step", "0", { transform: Number, mode: "push" }); @@ -58,6 +62,34 @@ function editTask(task: AssignmentEvaluationTask) { stepIndex.value = taskIndex + 1; } +function canReopen() { + return ( + evaluationSubmitted.value && + (props.assignment.assignment_type === "CASEWORK" || + props.assignment.assignment_type === "PRAXIS_ASSIGNMENT") + ); +} + +const upsertAssignmentCompletionMutation = useMutation( + UPSERT_ASSIGNMENT_COMPLETION_MUTATION +); + +async function reopen() { + log.debug("reopen"); + + await upsertAssignmentCompletionMutation.executeMutation({ + assignmentId: props.assignment.id, + courseSessionId: courseSession.value.id, + assignmentUserId: props.assignmentUser.id, + completionStatus: "EVALUATION_IN_PROGRESS", + completionDataString: JSON.stringify({}), + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + id: props.assignmentCompletion?.id, + }); + stepIndex.value = 1; +} + const courseSessionDetailResult = useCourseSessionDetailQuery(); const assignmentDetail = computed(() => { @@ -86,22 +118,6 @@ const taskExpertDataText = computed(() => { return result; }); -const text = computed(() => { - if (props.assignment.assignment_type === "CASEWORK") { - return { - evaluationFinish: "a.Bewertung abschliessen", - }; - } else if (props.assignment.assignment_type === "PRAXIS_ASSIGNMENT") { - return { - evaluationFinish: "a.Feedback abschliessen", - }; - } else { - return { - evaluationFinish: "UNKNOWN ASSIGNMENT TYPE", - }; - } -}); - function nextButtonEnabled() { if (inEvaluationTask.value) { return taskExpertDataText.value ?? false; @@ -109,6 +125,15 @@ function nextButtonEnabled() { return true; } +function previousButtonVisible() { + // Bei einer "bewerteten" Arbeit, kann man im letzten Schritt nicht mehr "zurück" + // man kann aber die Bewertung wieder "bearbeiten" + return !( + stepIndex.value > numTasks.value && + props.assignmentCompletion.completion_status === "EVALUATION_SUBMITTED" + ); +} + function finishButtonEnabled() { return props.assignmentCompletion.completion_status === "EVALUATION_SUBMITTED"; } @@ -150,18 +175,19 @@ function finishButtonEnabled() {