Get attendance day details in relevant views

This commit is contained in:
Daniel Egger 2023-04-03 18:28:50 +02:00
parent 1437bc9b53
commit 9177b9e003
4 changed files with 60 additions and 17 deletions

View File

@ -1,27 +1,31 @@
<template>
<div class="container-medium">
<div class="lg:mt-8">
<p class="text-large my-4">
<pre>
{{ content.contents }}
{{ content.translation_key }}
{{ content.title }}
{{ content.slug }}
</pre>
</p>
</div>
</div>
</template>
<script setup lang="ts"> <script setup lang="ts">
import { useCourseSessionsStore } from "@/stores/courseSessions";
import type { LearningContent } from "@/types"; import type { LearningContent } from "@/types";
import { computed } from "vue";
const courseSessionsStore = useCourseSessionsStore();
interface Value { interface Value {
description: string; description: string;
} }
defineProps<{ const props = defineProps<{
value: Value; value: Value;
content: LearningContent; content: LearningContent;
}>(); }>();
const attendanceDay = computed(() => {
return courseSessionsStore.findAttendanceDay(props.content.slug);
});
</script> </script>
<template>
<div class="container-medium">
<div class="lg:mt-8">
<div class="text-large my-4">
<div v-if="attendanceDay">{{ attendanceDay }}</div>
<div v-else>Keine Präsenztagdaten erfasst für diese Durchführung</div>
</div>
</div>
</div>
</template>

View File

@ -3,6 +3,7 @@ import { deleteCircleDocument } from "@/services/files";
import type { import type {
CircleDocument, CircleDocument,
CourseSession, CourseSession,
CourseSessionAttendanceDay,
CourseSessionUser, CourseSessionUser,
ExpertSessionUser, ExpertSessionUser,
} from "@/types"; } from "@/types";
@ -211,6 +212,19 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
courseSessionForRoute.value?.documents.filter((d) => d.id !== documentId); courseSessionForRoute.value?.documents.filter((d) => d.id !== documentId);
} }
function findAttendanceDay(
contentSlug: string
): CourseSessionAttendanceDay | undefined {
const currentCourseSession = courseSessionForRoute.value;
if (currentCourseSession) {
const attendanceDays =
currentCourseSession.additional_json_data?.attendanceDays ?? [];
return attendanceDays.find(
(attendanceDay) => attendanceDay.learningContentSlug === contentSlug
);
}
}
return { return {
currentCourseSlug, currentCourseSlug,
courseSessions, courseSessions,
@ -227,5 +241,6 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
addDocument, addDocument,
startUpload, startUpload,
removeDocument, removeDocument,
findAttendanceDay,
}; };
}); });

View File

@ -338,6 +338,16 @@ export interface CircleDocument {
learning_sequence: number; learning_sequence: number;
} }
// TODO refactor, when a user can manually create these days
export interface CourseSessionAttendanceDay {
learningContentSlug: string;
date: string;
startTime: string;
endTime: string;
location: string;
trainer: string;
}
export interface CourseSession { export interface CourseSession {
id: number; id: number;
created_at: string; created_at: string;
@ -350,7 +360,9 @@ export interface CourseSession {
competence_url: string; competence_url: string;
course_url: string; course_url: string;
media_library_url: string; media_library_url: string;
additional_json_data: unknown; additional_json_data: {
attendanceDays?: CourseSessionAttendanceDay[];
};
documents: CircleDocument[]; documents: CircleDocument[];
users: CourseSessionUser[]; users: CourseSessionUser[];
} }

View File

@ -144,6 +144,18 @@ def create_course_uk_de():
cs = CourseSession.objects.create( cs = CourseSession.objects.create(
course_id=COURSE_UK, course_id=COURSE_UK,
title="Bern 2023 a", title="Bern 2023 a",
additional_json_data={
"attendanceDays": [
{
"learningContentSlug": "überbetriebliche-kurse-lp-circle-fahrzeug-lc-präsenztag-fahrzeug",
"date": "2023-09-18",
"startTime": "08:15",
"endTime": "17:00",
"location": "Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern",
"trainer": "Roland Grossenbacher, roland.grossenbacher@helvetia.ch",
}
]
},
) )
# figma demo users and data # figma demo users and data