VBV-350: Refactor LearningContent to individual wagtail pages
This commit is contained in:
parent
3858cdfc79
commit
a15af2bf86
|
|
@ -12,14 +12,14 @@ import {
|
|||
import LearningContentMultiLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentMultiLayout.vue";
|
||||
import { useCircleStore } from "@/stores/circle";
|
||||
import { useCourseSessionsStore } from "@/stores/courseSessions";
|
||||
import type { LearningContent } from "@/types";
|
||||
import type { LearningContentFeedback } from "@/types";
|
||||
import { useMutation } from "@urql/vue";
|
||||
import { useRouteQuery } from "@vueuse/router";
|
||||
import log from "loglevel";
|
||||
import { computed, onMounted, reactive, ref } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const props = defineProps<{ page: LearningContent }>();
|
||||
const props = defineProps<{ page: LearningContentFeedback }>();
|
||||
const courseSessionsStore = useCourseSessionsStore();
|
||||
const circleStore = useCircleStore();
|
||||
const { t } = useI18n();
|
||||
|
|
@ -132,7 +132,7 @@ const sendFeedback = () => {
|
|||
<LearningContentMultiLayout
|
||||
:title="title"
|
||||
subtitle="Feedback"
|
||||
:learning-content-type="'feedback'"
|
||||
learning-content-type="learnpath.LearningContentFeedback"
|
||||
:show-start-button="stepNo === 0"
|
||||
:show-next-button="stepNo > 0 && stepNo + 1 < numSteps"
|
||||
:show-previous-button="stepNo > 0"
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ const props = defineProps<{
|
|||
|
||||
<template>
|
||||
<div
|
||||
v-if="props.learningContentType !== 'placeholder'"
|
||||
v-if="props.learningContentType !== 'learnpath.LearningContentPlaceholder'"
|
||||
class="flex h-min w-min items-center gap-2 rounded-full bg-gray-200 px-2.5 py-0.5"
|
||||
>
|
||||
<component
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { showIcon } from "@/pages/learningPath/circlePage/learningSequenceUtils"
|
|||
import { useCircleStore } from "@/stores/circle";
|
||||
import type {
|
||||
CourseCompletionStatus,
|
||||
LearningContent,
|
||||
LearningContentInterface,
|
||||
LearningSequence,
|
||||
} from "@/types";
|
||||
import { humanizeDuration } from "@/utils/humanizeDuration";
|
||||
|
|
@ -23,7 +23,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|||
|
||||
const circleStore = useCircleStore();
|
||||
|
||||
function toggleCompleted(learningContent: LearningContent) {
|
||||
function toggleCompleted(learningContent: LearningContentInterface) {
|
||||
let completionStatus: CourseCompletionStatus = "success";
|
||||
if (learningContent.completion_status === "success") {
|
||||
completionStatus = "fail";
|
||||
|
|
@ -173,7 +173,7 @@ const learningSequenceBorderClass = computed(() => {
|
|||
<div class="hidden sm:block"></div>
|
||||
<div class="w-full sm:w-auto">
|
||||
<LearningContentBadge
|
||||
:learning-content-type="learningContent.contents[0].type"
|
||||
:learning-content-type="learningContent.type"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
<script setup lang="ts">
|
||||
import LearningContent from "@/pages/learningPath/learningContentPage/LearningContent.vue";
|
||||
import LearningContentParent from "@/pages/learningPath/learningContentPage/LearningContentParent.vue";
|
||||
import { useCircleStore } from "@/stores/circle";
|
||||
import type { LearningContent as LearningContentType } from "@/types";
|
||||
import type { LearningContent } from "@/types";
|
||||
import * as log from "loglevel";
|
||||
import { onMounted, reactive, watch } from "vue";
|
||||
import type { Ref } from "vue";
|
||||
import { onMounted, ref, watch } from "vue";
|
||||
|
||||
log.debug("LearningContentView created");
|
||||
|
||||
|
|
@ -13,13 +14,13 @@ const props = defineProps<{
|
|||
contentSlug: string;
|
||||
}>();
|
||||
|
||||
const state: { learningContent?: LearningContentType } = reactive({});
|
||||
const learningContent: Ref<LearningContent | undefined> = ref(undefined);
|
||||
|
||||
const circleStore = useCircleStore();
|
||||
|
||||
const loadLearningContent = async () => {
|
||||
try {
|
||||
state.learningContent = await circleStore.loadLearningContent(
|
||||
learningContent.value = await circleStore.loadLearningContent(
|
||||
props.courseSlug,
|
||||
props.circleSlug,
|
||||
props.contentSlug
|
||||
|
|
@ -54,10 +55,7 @@ onMounted(async () => {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<LearningContent
|
||||
v-if="state.learningContent"
|
||||
:learning-content="state.learningContent"
|
||||
/>
|
||||
<LearningContentParent v-if="learningContent" :learning-content="learningContent" />
|
||||
</template>
|
||||
|
||||
<style lang="postcss" scoped></style>
|
||||
|
|
|
|||
|
|
@ -2,19 +2,17 @@
|
|||
import LearningContentContainer from "@/pages/learningPath/learningContentPage/LearningContentContainer.vue";
|
||||
import { useCircleStore } from "@/stores/circle";
|
||||
import type { LearningContent, LearningContentType } from "@/types";
|
||||
import eventBus from "@/utils/eventBus";
|
||||
import log from "loglevel";
|
||||
import type { Component } from "vue";
|
||||
import { computed, onUnmounted } from "vue";
|
||||
|
||||
import AssignmentBlock from "@/pages/learningPath/learningContentPage/blocks/AssignmentBlock.vue";
|
||||
import AttendanceDayBlock from "@/pages/learningPath/learningContentPage/blocks/AttendanceDayBlock.vue";
|
||||
import eventBus from "@/utils/eventBus";
|
||||
import DescriptionBlock from "./blocks/DescriptionBlock.vue";
|
||||
import DescriptionTextBlock from "./blocks/DescriptionTextBlock.vue";
|
||||
import AssignmentBlock from "./blocks/AssignmentBlock.vue";
|
||||
import AttendanceDayBlock from "./blocks/AttendanceDayBlock.vue";
|
||||
import FeedbackBlock from "./blocks/FeedbackBlock.vue";
|
||||
import IframeBlock from "./blocks/IframeBlock.vue";
|
||||
import MediaLibraryBlock from "./blocks/MediaLibraryBlock.vue";
|
||||
import PlaceholderBlock from "./blocks/PlaceholderBlock.vue";
|
||||
import DescriptionBlock from "./blocks/RichTextBlock.vue";
|
||||
import VideoBlock from "./blocks/VideoBlock.vue";
|
||||
|
||||
log.debug("LearningContent.vue setup");
|
||||
|
|
@ -25,37 +23,22 @@ const props = defineProps<{
|
|||
learningContent: LearningContent;
|
||||
}>();
|
||||
|
||||
const block = computed(() => {
|
||||
if (props.learningContent?.contents?.length) {
|
||||
return props.learningContent.contents[0];
|
||||
}
|
||||
|
||||
return undefined;
|
||||
});
|
||||
|
||||
// can't use the type as component name, as some are reserved HTML components, e.g. video
|
||||
const COMPONENTS: Record<LearningContentType, Component> = {
|
||||
placeholder: PlaceholderBlock,
|
||||
video: VideoBlock,
|
||||
assignment: AssignmentBlock,
|
||||
resource: DescriptionTextBlock,
|
||||
exercise: IframeBlock,
|
||||
test: IframeBlock,
|
||||
learningmodule: IframeBlock,
|
||||
feedback: FeedbackBlock,
|
||||
book: DescriptionBlock,
|
||||
document: DescriptionBlock,
|
||||
media_library: MediaLibraryBlock,
|
||||
online_training: DescriptionBlock,
|
||||
attendance_day: AttendanceDayBlock,
|
||||
"learnpath.LearningContentAssignment": AssignmentBlock,
|
||||
"learnpath.LearningContentAttendanceDay": AttendanceDayBlock,
|
||||
"learnpath.LearningContentFeedback": FeedbackBlock,
|
||||
"learnpath.LearningContentLearningModule": IframeBlock,
|
||||
"learnpath.LearningContentMediaLibrary": MediaLibraryBlock,
|
||||
"learnpath.LearningContentPlaceholder": PlaceholderBlock,
|
||||
"learnpath.LearningContentRichText": DescriptionBlock,
|
||||
"learnpath.LearningContentTest": IframeBlock,
|
||||
"learnpath.LearningContentVideo": VideoBlock,
|
||||
};
|
||||
const DEFAULT_BLOCK = DescriptionBlock;
|
||||
|
||||
const component = computed(() => {
|
||||
if (block.value) {
|
||||
return COMPONENTS[block.value.type] || DEFAULT_BLOCK;
|
||||
}
|
||||
return DEFAULT_BLOCK;
|
||||
return COMPONENTS[props.learningContent.type] || DEFAULT_BLOCK;
|
||||
});
|
||||
|
||||
function handleFinishedLearningContent() {
|
||||
|
|
@ -71,15 +54,10 @@ onUnmounted(() => {
|
|||
|
||||
<template>
|
||||
<LearningContentContainer
|
||||
v-if="block"
|
||||
@exit="circleStore.closeLearningContent(props.learningContent)"
|
||||
>
|
||||
<div>
|
||||
<component
|
||||
:is="component"
|
||||
:value="block.value"
|
||||
:content="learningContent"
|
||||
></component>
|
||||
<component :is="component" :content="learningContent"></component>
|
||||
</div>
|
||||
</LearningContentContainer>
|
||||
</template>
|
||||
|
|
@ -12,7 +12,7 @@ import type {
|
|||
AssignmentTask,
|
||||
CourseSessionAssignmentDetails,
|
||||
CourseSessionUser,
|
||||
LearningContent,
|
||||
LearningContentAssignment,
|
||||
} from "@/types";
|
||||
import { useRouteQuery } from "@vueuse/router";
|
||||
import dayjs from "dayjs";
|
||||
|
|
@ -36,8 +36,7 @@ const state: State = reactive({
|
|||
});
|
||||
|
||||
const props = defineProps<{
|
||||
assignmentId: number;
|
||||
learningContent: LearningContent;
|
||||
learningContent: LearningContentAssignment;
|
||||
}>();
|
||||
|
||||
// 0 = introduction, 1 - n = tasks, n+1 = submission
|
||||
|
|
@ -49,17 +48,23 @@ const completionStatus = computed(() => {
|
|||
});
|
||||
|
||||
onMounted(async () => {
|
||||
log.debug("AssignmentView mounted", props.assignmentId, props.learningContent);
|
||||
log.debug(
|
||||
"AssignmentView mounted",
|
||||
props.learningContent.content_assignment_id,
|
||||
props.learningContent
|
||||
);
|
||||
|
||||
const courseSessionsStore = useCourseSessionsStore();
|
||||
|
||||
try {
|
||||
state.assignment = await assignmentStore.loadAssignment(props.assignmentId);
|
||||
state.assignment = await assignmentStore.loadAssignment(
|
||||
props.learningContent.content_assignment_id
|
||||
);
|
||||
state.courseSessionAssignmentDetails = courseSessionsStore.findAssignmentDetails(
|
||||
props.learningContent.id
|
||||
);
|
||||
await assignmentStore.loadAssignmentCompletion(
|
||||
props.assignmentId,
|
||||
props.learningContent.content_assignment_id,
|
||||
courseSessionId.value
|
||||
);
|
||||
|
||||
|
|
@ -140,7 +145,7 @@ const assignmentUser = computed(() => {
|
|||
:current-step="stepIndex"
|
||||
:subtitle="state.assignment?.title ?? ''"
|
||||
:title="getTitle()"
|
||||
learning-content-type="assignment"
|
||||
:learning-content-type="props.learningContent.type"
|
||||
:steps-count="numPages"
|
||||
:show-next-button="showNextButton && stepIndex !== 0"
|
||||
:show-exit-button="showExitButton"
|
||||
|
|
@ -164,7 +169,7 @@ const assignmentUser = computed(() => {
|
|||
<AssignmentTaskView
|
||||
v-if="currentTask"
|
||||
:task="currentTask"
|
||||
:assignment-id="props.assignmentId"
|
||||
:assignment-id="props.learningContent.content_assignment_id"
|
||||
></AssignmentTaskView>
|
||||
<AssignmentSubmissionView
|
||||
v-if="stepIndex + 1 === numPages && state.assignment && courseSessionId"
|
||||
|
|
|
|||
|
|
@ -1,21 +1,15 @@
|
|||
<script setup lang="ts">
|
||||
import AssignmentView from "@/pages/learningPath/learningContentPage/assignment/AssignmentView.vue";
|
||||
import type { LearningContentAssignment } from "@/types";
|
||||
|
||||
const props = defineProps<{
|
||||
content: LearningContentAssignment;
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AssignmentView
|
||||
:assignment-id="props.value.assignment"
|
||||
:assignment-id="props.content.content_assignment_id"
|
||||
:learning-content="props.content"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import AssignmentView from "@/pages/learningPath/learningContentPage/assignment/AssignmentView.vue";
|
||||
import type { LearningContent } from "@/types";
|
||||
|
||||
interface Value {
|
||||
description: string;
|
||||
assignment: number;
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
}>();
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,22 +1,17 @@
|
|||
<script setup lang="ts">
|
||||
import AttendanceDay from "@/pages/learningPath/learningContentPage/attendanceDay/AttendanceDay.vue";
|
||||
import { useCourseSessionsStore } from "@/stores/courseSessions";
|
||||
import type { LearningContent } from "@/types";
|
||||
import type { LearningContentAttendanceDay } from "@/types";
|
||||
import { computed } from "vue";
|
||||
import AttendanceDay from "../attendanceDay/AttendanceDay.vue";
|
||||
import LearningContentSimpleLayout from "../layouts/LearningContentSimpleLayout.vue";
|
||||
|
||||
export interface Value {
|
||||
description: string;
|
||||
}
|
||||
|
||||
const courseSessionsStore = useCourseSessionsStore();
|
||||
|
||||
const props = defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
content: LearningContentAttendanceDay;
|
||||
}>();
|
||||
|
||||
const attendanceDay = computed(() => {
|
||||
const courseSessionAttendanceDay = computed(() => {
|
||||
return courseSessionsStore.findAttendanceDay(props.content.id);
|
||||
});
|
||||
</script>
|
||||
|
|
@ -24,13 +19,13 @@ const attendanceDay = computed(() => {
|
|||
<template>
|
||||
<LearningContentSimpleLayout
|
||||
:title="content.title"
|
||||
learning-content-type="attendance_day"
|
||||
:learning-content-type="props.content.type"
|
||||
>
|
||||
<div class="container-medium">
|
||||
<div class="lg:mt-8">
|
||||
<div class="text-large my-4">
|
||||
<div v-if="attendanceDay">
|
||||
<AttendanceDay :attendance-day="attendanceDay" />
|
||||
<div v-if="courseSessionAttendanceDay">
|
||||
<AttendanceDay :attendance-day="courseSessionAttendanceDay" />
|
||||
</div>
|
||||
<div v-else>
|
||||
Für diese Durchführung {{ content.id }} existieren noch keine Details
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
<template>
|
||||
<div class="container-medium">
|
||||
<div class="lg:mt-8">
|
||||
<p class="text-large my-4">{{ value.description }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { LearningContent } from "@/types";
|
||||
|
||||
interface Value {
|
||||
description: string;
|
||||
}
|
||||
|
||||
defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
}>();
|
||||
</script>
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
<template>
|
||||
<!-- eslint-disable vue/no-v-html -->
|
||||
<div class="container-medium">
|
||||
<div class="lg:mt-8">
|
||||
<p class="text-large my-4">{{ value.description }}</p>
|
||||
<div class="resource-text" v-html="value.text"></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { LearningContent } from "@/types";
|
||||
|
||||
interface Value {
|
||||
description: string;
|
||||
text: string;
|
||||
}
|
||||
|
||||
defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
}>();
|
||||
</script>
|
||||
|
|
@ -4,14 +4,9 @@
|
|||
|
||||
<script setup lang="ts">
|
||||
import FeedbackForm from "@/components/FeedbackForm.vue";
|
||||
import type { LearningContent } from "@/types";
|
||||
|
||||
interface Value {
|
||||
description: string;
|
||||
}
|
||||
import type { LearningContentFeedback } from "@/types";
|
||||
|
||||
defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
content: LearningContentFeedback;
|
||||
}>();
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
<script setup lang="ts">
|
||||
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
||||
import type { LearningContentInterface } from "@/types";
|
||||
|
||||
const props = defineProps<{
|
||||
content: LearningContentInterface;
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<LearningContentSimpleLayout learning-content-type="resource">
|
||||
<LearningContentSimpleLayout :learning-content-type="props.content.type">
|
||||
<div class="h-screen">
|
||||
<iframe width="100%" height="100%" scrolling="no" :src="value.url" />
|
||||
<iframe
|
||||
width="100%"
|
||||
height="100%"
|
||||
scrolling="no"
|
||||
:src="props.content.content_url"
|
||||
/>
|
||||
</div>
|
||||
</LearningContentSimpleLayout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
||||
import type { LearningContent } from "@/types";
|
||||
|
||||
export interface Value {
|
||||
url: string;
|
||||
}
|
||||
|
||||
defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
}>();
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,31 +1,28 @@
|
|||
<script setup lang="ts">
|
||||
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
||||
import type { LearningContentMediaLibrary } from "@/types";
|
||||
import { useRoute } from "vue-router";
|
||||
|
||||
const route = useRoute();
|
||||
|
||||
const props = defineProps<{
|
||||
content: LearningContentMediaLibrary;
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<LearningContentSimpleLayout
|
||||
:title="content.title"
|
||||
learning-content-type="media_library"
|
||||
:title="props.content.title"
|
||||
:learning-content-type="props.content.type"
|
||||
>
|
||||
<div class="container-medium">
|
||||
<p class="text-large my-4 lg:my-8">{{ value.description }}</p>
|
||||
<router-link :to="`${value.url}?back=${route.path}`" class="button btn-primary">
|
||||
<p class="text-large my-4 lg:my-8">{{ props.content.description }}</p>
|
||||
<router-link
|
||||
:to="`${props.content.content_url}?back=${route.path}`"
|
||||
class="button btn-primary"
|
||||
>
|
||||
Mediathek öffnen
|
||||
</router-link>
|
||||
</div>
|
||||
</LearningContentSimpleLayout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
||||
import type { LearningContent } from "@/types";
|
||||
import { useRoute } from "vue-router";
|
||||
|
||||
export interface Value {
|
||||
description: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
const route = useRoute();
|
||||
|
||||
defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
}>();
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,20 +1,15 @@
|
|||
<template>
|
||||
<LearningContentSimpleLayout
|
||||
:title="content.title"
|
||||
learning-content-type="placeholder"
|
||||
></LearningContentSimpleLayout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
||||
import type { LearningContent } from "@/types";
|
||||
import type { LearningContentInterface } from "@/types";
|
||||
|
||||
export interface Value {
|
||||
description: string;
|
||||
}
|
||||
|
||||
defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
const props = defineProps<{
|
||||
content: LearningContentInterface;
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<LearningContentSimpleLayout
|
||||
:title="props.content.title"
|
||||
:learning-content-type="props.content.type"
|
||||
></LearningContentSimpleLayout>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
<template>
|
||||
<div class="container-medium">
|
||||
<div class="lg:mt-8">
|
||||
<p class="text-large my-4">{{ props.content.description }}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { LearningContentInterface } from "@/types";
|
||||
|
||||
const props = defineProps<{
|
||||
content: LearningContentInterface;
|
||||
}>();
|
||||
</script>
|
||||
|
|
@ -1,10 +1,13 @@
|
|||
<template>
|
||||
<LearningContentSimpleLayout :title="content.title" learning-content-type="video">
|
||||
<LearningContentSimpleLayout
|
||||
:title="props.content.title"
|
||||
:learning-content-type="props.content.type"
|
||||
>
|
||||
<div class="container-medium">
|
||||
<iframe
|
||||
class="mt-8 aspect-video w-full"
|
||||
:src="value.url"
|
||||
:title="content.title"
|
||||
:src="props.content.content_url"
|
||||
:title="props.content.title"
|
||||
frameborder="0"
|
||||
allow="accelerometer; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowfullscreen
|
||||
|
|
@ -15,14 +18,9 @@
|
|||
|
||||
<script setup lang="ts">
|
||||
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
||||
import type { LearningContent } from "@/types";
|
||||
import type { LearningContentVideo } from "@/types";
|
||||
|
||||
export interface Value {
|
||||
url: string;
|
||||
}
|
||||
|
||||
defineProps<{
|
||||
value: Value;
|
||||
content: LearningContent;
|
||||
const props = defineProps<{
|
||||
content: LearningContentVideo;
|
||||
}>();
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ const emit = defineEmits(["previous", "next", "exit"]);
|
|||
<template>
|
||||
<div class="container-large">
|
||||
<div
|
||||
v-if="props.learningContentType !== 'placeholder'"
|
||||
v-if="props.learningContentType !== 'learnpath.LearningContentPlaceholder'"
|
||||
class="flex h-min items-center gap-2 rounded-full pb-10"
|
||||
>
|
||||
<component
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ const type = learningContentTypeData(props.learningContentType);
|
|||
<template>
|
||||
<div class="container-medium">
|
||||
<div
|
||||
v-if="props.learningContentType !== 'placeholder'"
|
||||
v-if="props.learningContentType !== 'learnpath.LearningContentPlaceholder'"
|
||||
class="flex h-min w-full items-center gap-2 pb-8"
|
||||
>
|
||||
<component :is="type.icon" class="h-6 w-6 text-gray-900"></component>
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ onUnmounted(() => {
|
|||
:current-step="questionIndex"
|
||||
:subtitle="$t('selfEvaluation.title')"
|
||||
:title="$t('selfEvaluation.title', { title: learningUnit.title })"
|
||||
learning-content-type="learningmodule"
|
||||
learning-content-type="learnpath.LearningContentLearningModule"
|
||||
:steps-count="questions.length"
|
||||
:show-next-button="showNextButton"
|
||||
:show-exit-button="showExitButton"
|
||||
|
|
|
|||
|
|
@ -6,10 +6,10 @@ import data from "./learning_path_json.json";
|
|||
describe("Circle.parseJson", () => {
|
||||
it("can parse circle from api response", () => {
|
||||
const cirleData = data.children.find(
|
||||
(c) => c.slug === "test-lehrgang-lp-circle-analyse"
|
||||
(c) => c.slug === "test-lehrgang-lp-circle-fahrzeug"
|
||||
) as unknown as WagtailCircle;
|
||||
const circle = Circle.fromJson(cirleData, undefined);
|
||||
expect(circle.learningSequences.length).toBe(3);
|
||||
expect(circle.flatLearningContents.length).toBe(7);
|
||||
expect(circle.flatLearningContents.length).toBe(9);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ import data from "./learning_path_json.json";
|
|||
|
||||
describe("LearningPath.parseJson", () => {
|
||||
it("can parse learning sequences from api response", () => {
|
||||
const learningPath = LearningPath.fromJson(data, []);
|
||||
const learningPath = LearningPath.fromJson(data, [], undefined);
|
||||
|
||||
expect(learningPath.circles.length).toBe(2);
|
||||
expect(learningPath.circles[0].title).toBe("Basis");
|
||||
expect(learningPath.circles[1].title).toBe("Analyse");
|
||||
expect(learningPath.circles[0].title).toBe("Fahrzeug");
|
||||
expect(learningPath.circles[1].title).toBe("Reisen");
|
||||
|
||||
expect(learningPath.topics.length).toBe(2);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,473 +1,447 @@
|
|||
{
|
||||
"id": 568,
|
||||
"title": "Test Lernpfad",
|
||||
"slug": "test-lehrgang-lp",
|
||||
"type": "learnpath.LearningPath",
|
||||
"translation_key": "25ddc136-af7d-4a74-8731-896281bfe20b",
|
||||
"frontend_url": "/course/test-lehrgang/learn",
|
||||
"children": [
|
||||
{
|
||||
"id": 569,
|
||||
"title": "Basis",
|
||||
"slug": "test-lehrgang-lp-topic-basis",
|
||||
"type": "learnpath.Topic",
|
||||
"translation_key": "8cb75aee-0349-41e2-9d2b-2938c2b04891",
|
||||
"frontend_url": "",
|
||||
"is_visible": false
|
||||
},
|
||||
{
|
||||
"id": 570,
|
||||
"title": "Basis",
|
||||
"slug": "test-lehrgang-lp-circle-basis",
|
||||
"type": "learnpath.Circle",
|
||||
"translation_key": "aaa04c2b-03bf-470e-b414-bd8203db529d",
|
||||
"frontend_url": "/course/test-lehrgang/learn/basis",
|
||||
"children": [
|
||||
"id": 960,
|
||||
"title": "Test Lernpfad",
|
||||
"slug": "test-lehrgang-lp",
|
||||
"type": "learnpath.LearningPath",
|
||||
"translation_key": "5818e5fb-5f8a-4f6f-b3a4-61651d0cd408",
|
||||
"frontend_url": "/course/test-lehrgang/learn",
|
||||
"children": [
|
||||
{
|
||||
"id": 571,
|
||||
"title": "Starten",
|
||||
"slug": "test-lehrgang-lp-circle-basis-ls-starten",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "ce16116f-f4ed-4fc0-a95a-cc75ba88958d",
|
||||
"frontend_url": "/course/test-lehrgang/learn/basis#ls-starten",
|
||||
"icon": "it-icon-ls-start"
|
||||
"id": 961,
|
||||
"title": "Circle \u00dcK",
|
||||
"slug": "test-lehrgang-lp-topic-circle-\u00fck",
|
||||
"type": "learnpath.Topic",
|
||||
"translation_key": "8b197f3d-8594-416c-9f9c-d3e929524220",
|
||||
"frontend_url": "",
|
||||
"is_visible": false
|
||||
},
|
||||
{
|
||||
"id": 572,
|
||||
"title": "Einf\u00fchrung",
|
||||
"slug": "test-lehrgang-lp-circle-basis-lu-einf\u00fchrung",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "33863daf-a503-425d-a1a2-9a711f8256a5",
|
||||
"frontend_url": "/course/test-lehrgang/learn/basis#lu-einf\u00fchrung",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/basis/evaluate/einf\u00fchrung",
|
||||
"course_category": {
|
||||
"id": 27,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 573,
|
||||
"title": "Einf\u00fchrung",
|
||||
"slug": "test-lehrgang-lp-circle-basis-lc-einf\u00fchrung",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "ae19458c-9b08-4b9c-9e7c-62c3cce4a6cc",
|
||||
"frontend_url": "/course/test-lehrgang/learn/basis/einf\u00fchrung",
|
||||
"minutes": 15,
|
||||
"contents": [
|
||||
{
|
||||
"type": "document",
|
||||
"value": {
|
||||
"description": "Beispiel Dokument",
|
||||
"url": null
|
||||
},
|
||||
"id": "601ac5e1-b268-442e-b15b-26ead06bdf77"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 574,
|
||||
"title": "Beenden",
|
||||
"slug": "test-lehrgang-lp-circle-basis-ls-beenden",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "3c167825-a358-4c62-a632-9482e9fbfe5f",
|
||||
"frontend_url": "/course/test-lehrgang/learn/basis#ls-beenden",
|
||||
"icon": "it-icon-ls-end"
|
||||
},
|
||||
{
|
||||
"id": 575,
|
||||
"title": "Beenden",
|
||||
"slug": "test-lehrgang-lp-circle-basis-lu-beenden",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "9a70a164-0468-4681-a6ed-a1b636db1ae6",
|
||||
"frontend_url": "/course/test-lehrgang/learn/basis#lu-beenden",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/basis/evaluate/beenden",
|
||||
"course_category": {
|
||||
"id": 27,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 576,
|
||||
"title": "Jetzt kann es losgehen!",
|
||||
"slug": "test-lehrgang-lp-circle-basis-lc-jetzt-kann-es-losgehen",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "f251beda-a4b8-4a49-89a6-8c52d335b140",
|
||||
"frontend_url": "/course/test-lehrgang/learn/basis/jetzt-kann-es-losgehen",
|
||||
"minutes": 30,
|
||||
"contents": [
|
||||
{
|
||||
"type": "document",
|
||||
"value": {
|
||||
"description": "Beispiel Dokument",
|
||||
"url": null
|
||||
},
|
||||
"id": "1075443f-e2e5-46eb-87c4-804f0227a858"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"description": "Basis",
|
||||
"goal_description": "('In diesem Circle baust du deine Handlungskompetenzen f\u00fcr diese Themen aus:',)",
|
||||
"goals": [
|
||||
{
|
||||
"type": "goal",
|
||||
"value": "... hier ein Beispieltext f\u00fcr ein Ziel 1",
|
||||
"id": "6c227ac1-42a7-4ca3-bde2-8531bf655481"
|
||||
},
|
||||
{
|
||||
"type": "goal",
|
||||
"value": "... hier ein Beispieltext f\u00fcr ein Ziel 2",
|
||||
"id": "7c466321-abe3-4705-bbb1-f286a8e5c800"
|
||||
},
|
||||
{
|
||||
"type": "goal",
|
||||
"value": "... hier ein Beispieltext f\u00fcr ein Ziel 3",
|
||||
"id": "1e491838-62a9-4185-b321-f64ca7c99f36"
|
||||
}
|
||||
],
|
||||
"job_situation_description": "Du triffst in diesem Circle auf die folgenden berufstypischen Handlungsfelder:",
|
||||
"job_situations": [
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Job Situation 1",
|
||||
"id": "0d4a66de-523c-4659-9b4b-bb81cef28961"
|
||||
},
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Job Situation 2",
|
||||
"id": "dc4d8157-1db4-4e64-bc0c-00a35159c32d"
|
||||
},
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Job Situation 3",
|
||||
"id": "a270baca-1077-4535-9a9f-5562af9854d8"
|
||||
},
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Job Situation 4",
|
||||
"id": "aa4b21f6-0bd3-40f3-8589-c43e4524f565"
|
||||
},
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Job Situation 5",
|
||||
"id": "8618d1e7-c628-42ef-aac3-201b2b65393f"
|
||||
},
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Job Situation 6",
|
||||
"id": "be7a2a59-2aef-4dd8-ad8d-17c4a46b064f"
|
||||
},
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Job Situation 7",
|
||||
"id": "a4b74338-abd7-4de8-82ab-d77664f6cbbf"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 577,
|
||||
"title": "Beraten der Kunden",
|
||||
"slug": "test-lehrgang-lp-topic-beraten-der-kunden",
|
||||
"type": "learnpath.Topic",
|
||||
"translation_key": "2ea6ea41-b839-4462-aea4-1796b0f9849d",
|
||||
"frontend_url": "",
|
||||
"is_visible": true
|
||||
},
|
||||
{
|
||||
"id": 578,
|
||||
"title": "Analyse",
|
||||
"slug": "test-lehrgang-lp-circle-analyse",
|
||||
"type": "learnpath.Circle",
|
||||
"translation_key": "dbc95ecd-0fdf-4b0a-ba91-7eec88a420f3",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse",
|
||||
"children": [
|
||||
{
|
||||
"id": 579,
|
||||
"title": "Starten",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-ls-starten",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "9b10c6ec-e313-49fa-b09d-9639429254f9",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse#ls-starten",
|
||||
"icon": "it-icon-ls-start"
|
||||
},
|
||||
{
|
||||
"id": 580,
|
||||
"title": "Einf\u00fchrung",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lu-einf\u00fchrung",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "f51ab860-bc23-4f59-bb88-0e8506ef42e5",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse#lu-einf\u00fchrung",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/analyse/evaluate/einf\u00fchrung",
|
||||
"course_category": {
|
||||
"id": 27,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 581,
|
||||
"title": "Einleitung Circle \"Analyse\"",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lc-einleitung-circle-analyse",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "70363615-2a53-478d-82f7-0aa02744f559",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse/einleitung-circle-analyse",
|
||||
"minutes": 15,
|
||||
"contents": [
|
||||
{
|
||||
"type": "document",
|
||||
"value": {
|
||||
"description": "Beispiel Dokument",
|
||||
"url": null
|
||||
},
|
||||
"id": "174d883b-1bd0-4bee-872d-d08c2544dc3a"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 582,
|
||||
"title": "Beobachten",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-ls-beobachten",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "0a540c5a-25c8-42ab-8661-6c08c78d91c2",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse#ls-beobachten",
|
||||
"icon": "it-icon-ls-watch"
|
||||
},
|
||||
{
|
||||
"id": 583,
|
||||
"title": "Fahrzeug",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lu-fahrzeug",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "f072e5b2-c033-4d7d-9dae-28e6b856087c",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse#lu-fahrzeug",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/analyse/evaluate/fahrzeug",
|
||||
"course_category": {
|
||||
"id": 28,
|
||||
"id": 962,
|
||||
"title": "Fahrzeug",
|
||||
"general": false
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": 597,
|
||||
"title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die Ziele und Pl\u00e4ne des Kunden zu ergr\u00fcnden (SOLL).",
|
||||
"slug": "test-lehrgang-competence-crit-y13-fahrzeug",
|
||||
"type": "competence.PerformanceCriteria",
|
||||
"translation_key": "7d76cdd3-57a0-4f82-bc33-fcc8a78b15e0",
|
||||
"frontend_url": "",
|
||||
"competence_id": "Y1.3"
|
||||
},
|
||||
{
|
||||
"id": 598,
|
||||
"title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die IST-Situation des Kunden mit der geeigneten Gespr\u00e4chs-/Fragetechnik zu erfassen.",
|
||||
"slug": "test-lehrgang-competence-crit-y21-fahrzeug",
|
||||
"type": "competence.PerformanceCriteria",
|
||||
"translation_key": "5b3e1105-a12b-4d99-984c-28f01daeef54",
|
||||
"frontend_url": "",
|
||||
"competence_id": "Y2.1"
|
||||
}
|
||||
]
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug",
|
||||
"type": "learnpath.Circle",
|
||||
"translation_key": "f8e861f5-409e-4976-a301-540e6569dbb9",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug",
|
||||
"children": [
|
||||
{
|
||||
"id": 963,
|
||||
"title": "Vorbereitung",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "a7aac91d-200f-4633-ab34-c75bda9274e6",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-vorbereitung",
|
||||
"icon": "it-icon-ls-start"
|
||||
},
|
||||
{
|
||||
"id": 964,
|
||||
"title": "Vorbereitung",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-vorbereitung",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "cfcbdd21-93f0-4c4a-a9a8-e56c9e2f8232",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-vorbereitung",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/vorbereitung",
|
||||
"course_category": {
|
||||
"id": 40,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": 968,
|
||||
"title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die Ziele und Pl\u00e4ne des Kunden zu ergr\u00fcnden (SOLL).",
|
||||
"slug": "test-lehrgang-competence-crit-x11-allgemein",
|
||||
"type": "competence.PerformanceCriteria",
|
||||
"translation_key": "6079a11f-d5bd-45ba-88f9-3482dd79ad93",
|
||||
"frontend_url": "",
|
||||
"competence_id": "X1.1"
|
||||
},
|
||||
{
|
||||
"id": 969,
|
||||
"title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die IST-Situation des Kunden mit der geeigneten Gespr\u00e4chs-/Fragetechnik zu erfassen.",
|
||||
"slug": "test-lehrgang-competence-crit-x11-allgemein-1",
|
||||
"type": "competence.PerformanceCriteria",
|
||||
"translation_key": "e8766afa-dc45-4b29-8a74-a766e45aa8c2",
|
||||
"frontend_url": "",
|
||||
"competence_id": "X1.1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 965,
|
||||
"title": "Verschaffe dir einen \u00dcberblick",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-\u00fcberblick",
|
||||
"type": "learnpath.LearningContentPlaceholder",
|
||||
"translation_key": "4c2ba4e8-ad1f-41d1-9394-7b75cd63cecb",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/verschaffe-dir-einen-\u00fcberblick",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 966,
|
||||
"title": "Mediathek Fahrzeug",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug",
|
||||
"type": "learnpath.LearningContentMediaLibrary",
|
||||
"translation_key": "ea0dd010-b436-48e1-a599-d9fd1543393e",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/mediathek-fahrzeug",
|
||||
"minutes": 15,
|
||||
"description": "",
|
||||
"content_url": "/media/\u00fcberbetriebliche-kurse-media/category/fahrzeug"
|
||||
},
|
||||
{
|
||||
"id": 967,
|
||||
"title": "Vorbereitungsauftrag",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag",
|
||||
"type": "learnpath.LearningContentPlaceholder",
|
||||
"translation_key": "5bc830fe-812c-4778-b668-807e782d1ec1",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/vorbereitungsauftrag",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 970,
|
||||
"title": "Training",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-training",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "83f1443a-d0fa-43fc-a737-8172e8ad53ce",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-training",
|
||||
"icon": "it-icon-ls-apply"
|
||||
},
|
||||
{
|
||||
"id": 971,
|
||||
"title": "Unterlagen",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-unterlagen",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "1573d0a7-3427-4beb-8c17-e60520bf9c4f",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-unterlagen",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/unterlagen",
|
||||
"course_category": {
|
||||
"id": 40,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 972,
|
||||
"title": "Unterlagen f\u00fcr den Unterricht",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-unterlagen-f\u00fcr-den-unterricht",
|
||||
"type": "learnpath.LearningContentPlaceholder",
|
||||
"translation_key": "c956b3d3-51d6-4e4d-a088-25dd48ea853c",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/unterlagen-f\u00fcr-den-unterricht",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 973,
|
||||
"title": "Pr\u00e4senztag",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-pr\u00e4senztag",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "e0db56fb-25f2-44e2-b46a-88802ca1f7d5",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-pr\u00e4senztag",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/pr\u00e4senztag",
|
||||
"course_category": {
|
||||
"id": 40,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 974,
|
||||
"title": "Pr\u00e4senztag Fahrzeug",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-pr\u00e4senztag-fahrzeug",
|
||||
"type": "learnpath.LearningContentAttendanceDay",
|
||||
"translation_key": "b72bab8f-52c2-41cf-b392-1072e1af74a5",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/pr\u00e4senztag-fahrzeug",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter Beschreibung",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 975,
|
||||
"title": "Kompetenznachweis",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-kompetenznachweis",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "92c3a43d-a7b8-46d5-9600-42a0e5bd4bb4",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-kompetenznachweis",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/kompetenznachweis",
|
||||
"course_category": {
|
||||
"id": 40,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 976,
|
||||
"title": "Wissens- und Verst\u00e4ndnisfragen",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verst\u00e4ndnisfragen",
|
||||
"type": "learnpath.LearningContentPlaceholder",
|
||||
"translation_key": "69982715-8860-474d-babd-7c626bd15f1c",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/wissens-und-verst\u00e4ndnisfragen",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 977,
|
||||
"title": "Transfer",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-transfer",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "0322717c-8f61-44fa-b5dd-d5e064733b3f",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-transfer",
|
||||
"icon": "it-icon-ls-end"
|
||||
},
|
||||
{
|
||||
"id": 978,
|
||||
"title": "Transfer",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-transfer",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "028f154d-8460-4509-839b-8bbb37460930",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-transfer",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/transfer",
|
||||
"course_category": {
|
||||
"id": 40,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 979,
|
||||
"title": "Reflexion",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-reflexion",
|
||||
"type": "learnpath.LearningContentPlaceholder",
|
||||
"translation_key": "b7a09b9b-ab08-4eec-ba16-3defb8fa965e",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/reflexion",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 980,
|
||||
"title": "\u00dcberpr\u00fcfen einer Motorfahrzeug-Versicherungspolice",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
|
||||
"type": "learnpath.LearningContentAssignment",
|
||||
"translation_key": "19ffe6d9-60ac-4e08-8f18-25dc64f906ca",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
|
||||
"minutes": 15,
|
||||
"description": "",
|
||||
"content_url": "",
|
||||
"content_assignment_id": 959
|
||||
},
|
||||
{
|
||||
"id": 981,
|
||||
"title": "Feedback",
|
||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-feedback",
|
||||
"type": "learnpath.LearningContentFeedback",
|
||||
"translation_key": "23b72e4c-aa68-4b47-9cdc-4b60b40a1e1f",
|
||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/feedback",
|
||||
"minutes": 15,
|
||||
"description": "",
|
||||
"content_url": ""
|
||||
}
|
||||
],
|
||||
"description": "In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist.\nZudem lernst du die wichtigsten Grundlagen,\ndamit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.",
|
||||
"goals": "\n <p class=\"mt-4\">In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen,\n damit du erfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.</p>\n <p class=\"mt-4\">Du baust das Grundlagenwissen f\u00fcr die folgenden Themenfelder auf:</p>\n <ul>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Aufbau von myVBV und wie du dich im Lernpfad zurechtfindest</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Worauf die Ausbildung und die Zulassungspr\u00fcfung zum/zur Versicherungsvermittler/-in VBV basieren</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Organisation deiner Lernreise und deiner Zusammenarbeit mit deiner Lernbegleitung und einem\n Lernpartner/einer Lernpartnerin</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Tipps und Tricks zur Organisation eines erfolgreichen Arbeitsalltags</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Umgang mit den sozialen Medien und Datenschutz</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Basiswissen Versicherungswirtschaft</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Basiswissen Versicherungsrecht</li>\n </ul>\n <p class=\"mt-4\">Du arbeitest an folgenden Leistungskriterien aus dem Qualifikationsprofil:</p>\n <h3>Arbeitsalltag/Lerneinheit: \u00abLucas Auftritt in den sozialen Medien und der Umgang mit sensiblen Daten\u00bb</h3>\n <p class=\"mt-4\">Ich bin f\u00e4hig, \u2026</p>\n <ul>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.1: \u2026 in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte f\u00fcr den zu\n realisierenden Medienauftritt zielgruppengerecht festzulegen</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.2: \u2026 f\u00fcr die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.3. \u2026 die Inhalte compliant zu halten</li>\n </ul>\n "
|
||||
},
|
||||
{
|
||||
"id": 584,
|
||||
"title": "Rafael Fasel wechselt sein Auto",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lc-rafael-fasel-wechselt-sein-auto",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "ff254250-d010-4f57-9e57-987c343029a6",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse/rafael-fasel-wechselt-sein-auto",
|
||||
"minutes": 30,
|
||||
"contents": [
|
||||
{
|
||||
"type": "online_training",
|
||||
"value": {
|
||||
"description": "In diesem Online-Training lernst du, wie du den Kundenbedarf ermittelst.",
|
||||
"url": ""
|
||||
},
|
||||
"id": "454fb0d8-c37d-4c8e-b15c-c50a32be9fd7"
|
||||
}
|
||||
]
|
||||
"id": 982,
|
||||
"title": "Circle VV",
|
||||
"slug": "test-lehrgang-lp-topic-circle-vv",
|
||||
"type": "learnpath.Topic",
|
||||
"translation_key": "59e57288-91fd-45fa-9109-5a8c08f2e3f1",
|
||||
"frontend_url": "",
|
||||
"is_visible": false
|
||||
},
|
||||
{
|
||||
"id": 585,
|
||||
"title": "Fachcheck Fahrzeug",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lc-fachcheck-fahrzeug",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "b0a95253-3a63-4d77-9ddc-961b711175a5",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse/fachcheck-fahrzeug",
|
||||
"minutes": 30,
|
||||
"contents": [
|
||||
{
|
||||
"type": "test",
|
||||
"value": {
|
||||
"description": "Beispiel Test",
|
||||
"url": null
|
||||
},
|
||||
"id": "4b3e40c5-f5f9-4726-bc4c-0d914a029f83"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 586,
|
||||
"title": "Reisen",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lu-reisen",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "22bcb754-d5c5-413b-b63e-76e6406afef9",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse#lu-reisen",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/analyse/evaluate/reisen",
|
||||
"course_category": {
|
||||
"id": 29,
|
||||
"id": 983,
|
||||
"title": "Reisen",
|
||||
"general": false
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": 599,
|
||||
"title": "Innerhalb des Handlungsfelds \u00abReisen\u00bb bin ich f\u00e4hig, die Ziele und Pl\u00e4ne des Kunden zu ergr\u00fcnden (SOLL).",
|
||||
"slug": "test-lehrgang-competence-crit-y13-reisen",
|
||||
"type": "competence.PerformanceCriteria",
|
||||
"translation_key": "6a3ce4ac-0d38-4a02-81fa-0979290142e1",
|
||||
"frontend_url": "",
|
||||
"competence_id": "Y1.3"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 587,
|
||||
"title": "Reiseversicherung",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lc-reiseversicherung",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "cb1c9c93-7f3b-42d6-9078-2d36655fdfd7",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse/reiseversicherung",
|
||||
"minutes": 240,
|
||||
"contents": [
|
||||
{
|
||||
"type": "exercise",
|
||||
"value": {
|
||||
"description": "Beispiel \u00dcbung",
|
||||
"url": null
|
||||
},
|
||||
"id": "b59bccb2-bcb2-48cc-8204-8df94723975b"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 588,
|
||||
"title": "Emma und Ayla campen durch Amerika",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lc-emma-und-ayla-campen-durch-amerika",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "fdf19afe-fe69-496d-a1d4-ecf18ed36b01",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse/emma-und-ayla-campen-durch-amerika",
|
||||
"minutes": 120,
|
||||
"contents": [
|
||||
{
|
||||
"type": "learningmodule",
|
||||
"value": {
|
||||
"description": "Beispiel Lernmodul",
|
||||
"url": "/static/media/web_based_trainings/story-06-a-01-emma-und-ayla-campen-durch-amerika-einstieg/scormcontent/index.html"
|
||||
},
|
||||
"id": "c3a14f9f-3491-4695-9544-a3b2a2c3a82a"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 589,
|
||||
"title": "Beenden",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-ls-beenden",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "28ffad90-9333-452f-af18-108d4aff5ee4",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse#ls-beenden",
|
||||
"icon": "it-icon-ls-end"
|
||||
},
|
||||
{
|
||||
"id": 590,
|
||||
"title": "Beenden",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lu-beenden",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "05a1cb34-e8d8-44e2-9635-5e33a852bfa2",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse#lu-beenden",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/analyse/evaluate/beenden",
|
||||
"course_category": {
|
||||
"id": 27,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 591,
|
||||
"title": "KompetenzNavi anschauen",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lc-kompetenznavi-anschauen",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "b90e7ddc-fcde-47aa-91e1-abd67ed96e66",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse/kompetenznavi-anschauen",
|
||||
"minutes": 30,
|
||||
"contents": [
|
||||
{
|
||||
"type": "document",
|
||||
"value": {
|
||||
"description": "Beispiel Dokument",
|
||||
"url": null
|
||||
},
|
||||
"id": "a7faefea-4cd1-471a-aed1-c780d8236301"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 592,
|
||||
"title": "Circle \"Analyse\" abschliessen",
|
||||
"slug": "test-lehrgang-lp-circle-analyse-lc-circle-analyse-abschliessen",
|
||||
"type": "learnpath.LearningContent",
|
||||
"translation_key": "5c17be62-2da6-413c-82a4-7754c00ef18a",
|
||||
"frontend_url": "/course/test-lehrgang/learn/analyse/circle-analyse-abschliessen",
|
||||
"minutes": 30,
|
||||
"contents": [
|
||||
{
|
||||
"type": "document",
|
||||
"value": {
|
||||
"description": "Beispiel Dokument",
|
||||
"url": null
|
||||
},
|
||||
"id": "c39488aa-2ce4-4bd7-9a39-f9ace70353bd"
|
||||
}
|
||||
]
|
||||
"slug": "test-lehrgang-lp-circle-reisen",
|
||||
"type": "learnpath.Circle",
|
||||
"translation_key": "4f549d95-e645-4114-a4e6-49d1a7d0a5ef",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen",
|
||||
"children": [
|
||||
{
|
||||
"id": 984,
|
||||
"title": "Starten",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-ls-starten",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "a5519b42-00d8-4958-ac7e-078d016a0f11",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-starten",
|
||||
"icon": "it-icon-ls-start"
|
||||
},
|
||||
{
|
||||
"id": 985,
|
||||
"title": "Einf\u00fchrung",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lu-einf\u00fchrung",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "8c6d323c-abf8-4a7b-b0d0-d64d714d41b2",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-einf\u00fchrung",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/einf\u00fchrung",
|
||||
"course_category": {
|
||||
"id": 40,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 986,
|
||||
"title": "Verschaff dir einen \u00dcberblick",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lc-verschaff-dir-einen-\u00fcberblick",
|
||||
"type": "learnpath.LearningContentVideo",
|
||||
"translation_key": "5205f4a1-3786-4f32-9bab-cfdd762d1d6e",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen/verschaff-dir-einen-\u00fcberblick",
|
||||
"minutes": 15,
|
||||
"description": "Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
"content_url": "https://player.vimeo.com/video/772512710?h=30f912f15a"
|
||||
},
|
||||
{
|
||||
"id": 987,
|
||||
"title": "Mediathek Reisen",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lc-mediathek-reisen",
|
||||
"type": "learnpath.LearningContentMediaLibrary",
|
||||
"translation_key": "37bbd90f-d6d8-4541-86f1-10a8aa20a06d",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen/mediathek-reisen",
|
||||
"minutes": 15,
|
||||
"description": "",
|
||||
"content_url": "/media/test-lehrgang-media/category/reisen"
|
||||
},
|
||||
{
|
||||
"id": 988,
|
||||
"title": "Analyse",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-ls-analyse",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "5b56ece3-ddb5-4853-8816-91e87802c5fd",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-analyse",
|
||||
"icon": "it-icon-ls-apply"
|
||||
},
|
||||
{
|
||||
"id": 989,
|
||||
"title": "Bedarfsanalyse, Ist- und Soll-Situation",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lu-reisen",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "06bd7596-aa6d-45fc-bf02-b0c4d5fd5ef8",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-reisen",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/reisen",
|
||||
"course_category": {
|
||||
"id": 42,
|
||||
"title": "Reisen",
|
||||
"general": false
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": 991,
|
||||
"title": "Ich bin f\u00e4hig zu Reisen eine Gespr\u00e4chsf\u00fchrung zu machen",
|
||||
"slug": "test-lehrgang-competence-crit-y11-reisen",
|
||||
"type": "competence.PerformanceCriteria",
|
||||
"translation_key": "3eb8ad1c-e556-415c-a329-1dae3e100982",
|
||||
"frontend_url": "",
|
||||
"competence_id": "Y1.1"
|
||||
},
|
||||
{
|
||||
"id": 992,
|
||||
"title": "Ich bin f\u00e4hig zu Reisen eine Analyse zu machen",
|
||||
"slug": "test-lehrgang-competence-crit-y21-reisen",
|
||||
"type": "competence.PerformanceCriteria",
|
||||
"translation_key": "37f58796-8586-44be-b702-6f27e2c93b10",
|
||||
"frontend_url": "",
|
||||
"competence_id": "Y2.1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 990,
|
||||
"title": "Emma und Ayla campen durch Amerika - Analyse",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lc-emma-und-ayla-campen-durch-amerika-analyse",
|
||||
"type": "learnpath.LearningContentLearningModule",
|
||||
"translation_key": "457075a2-4e89-4bd9-8e87-fbd2911355d5",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen/emma-und-ayla-campen-durch-amerika-analyse",
|
||||
"minutes": 15,
|
||||
"description": "",
|
||||
"content_url": "https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-FZoZOP9y/index.html"
|
||||
},
|
||||
{
|
||||
"id": 993,
|
||||
"title": "Transfer",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-ls-transfer",
|
||||
"type": "learnpath.LearningSequence",
|
||||
"translation_key": "aa379cfc-149c-46d0-89ac-bff930432112",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-transfer",
|
||||
"icon": "it-icon-ls-end"
|
||||
},
|
||||
{
|
||||
"id": 994,
|
||||
"title": "Transfer, Reflexion, Feedback",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lu-transfer-reflexion-feedback",
|
||||
"type": "learnpath.LearningUnit",
|
||||
"translation_key": "f168b203-79ec-4b5f-81f4-88ac5e270434",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-transfer-reflexion-feedback",
|
||||
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/transfer-reflexion-feedback",
|
||||
"course_category": {
|
||||
"id": 40,
|
||||
"title": "Allgemein",
|
||||
"general": true
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": 995,
|
||||
"title": "Auswandern: Woran muss ich denken?",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lc-auswandern-woran-muss-ich-denken",
|
||||
"type": "learnpath.LearningContentPlaceholder",
|
||||
"translation_key": "f68d9bc2-ec0f-4617-9dcc-5235a669e896",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen/auswandern-woran-muss-ich-denken",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 996,
|
||||
"title": "Fachcheck Reisen",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen",
|
||||
"type": "learnpath.LearningContentPlaceholder",
|
||||
"translation_key": "e4e2e747-d570-4af3-9846-2d91a9eee3b8",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen/fachcheck-reisen",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 997,
|
||||
"title": "Reflexion",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lc-reflexion",
|
||||
"type": "learnpath.LearningContentPlaceholder",
|
||||
"translation_key": "a1de9b94-38e2-45a5-b913-fbd030fcbdc1",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen/reflexion",
|
||||
"minutes": 15,
|
||||
"description": "Platzhalter",
|
||||
"content_url": ""
|
||||
},
|
||||
{
|
||||
"id": 998,
|
||||
"title": "Feedback",
|
||||
"slug": "test-lehrgang-lp-circle-reisen-lc-feedback",
|
||||
"type": "learnpath.LearningContentFeedback",
|
||||
"translation_key": "a21f740d-4270-42b3-b324-148188025749",
|
||||
"frontend_url": "/course/test-lehrgang/learn/reisen/feedback",
|
||||
"minutes": 15,
|
||||
"description": "",
|
||||
"content_url": ""
|
||||
}
|
||||
],
|
||||
"description": "In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen, damit du\nerfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.",
|
||||
"goals": "\n <p class=\"mt-4\">In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen,\n damit du erfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.</p>\n <p class=\"mt-4\">Du baust das Grundlagenwissen f\u00fcr die folgenden Themenfelder auf:</p>\n <ul>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Aufbau von myVBV und wie du dich im Lernpfad zurechtfindest</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Worauf die Ausbildung und die Zulassungspr\u00fcfung zum/zur Versicherungsvermittler/-in VBV basieren</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Organisation deiner Lernreise und deiner Zusammenarbeit mit deiner Lernbegleitung und einem\n Lernpartner/einer Lernpartnerin</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Tipps und Tricks zur Organisation eines erfolgreichen Arbeitsalltags</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Umgang mit den sozialen Medien und Datenschutz</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Basiswissen Versicherungswirtschaft</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Basiswissen Versicherungsrecht</li>\n </ul>\n <p class=\"mt-4\">Du arbeitest an folgenden Leistungskriterien aus dem Qualifikationsprofil:</p>\n <h3>Arbeitsalltag/Lerneinheit: \u00abLucas Auftritt in den sozialen Medien und der Umgang mit sensiblen Daten\u00bb</h3>\n <p class=\"mt-4\">Ich bin f\u00e4hig, \u2026</p>\n <ul>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.1: \u2026 in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte f\u00fcr den zu\n realisierenden Medienauftritt zielgruppengerecht festzulegen</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.2: \u2026 f\u00fcr die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.3. \u2026 die Inhalte compliant zu halten</li>\n </ul>\n "
|
||||
}
|
||||
],
|
||||
"description": "Unit-Test Circle",
|
||||
"goal_description": "('In diesem Circle baust du deine Handlungskompetenzen f\u00fcr diese Themen aus:',)",
|
||||
"goals": [
|
||||
{
|
||||
"type": "goal",
|
||||
"value": "... die heutige Versicherungssituation von Privat- oder Gesch\u00e4ftskunden einzusch\u00e4tzen.",
|
||||
"id": "c6d1b496-14e7-4570-ba05-c6f408f6ecfb"
|
||||
},
|
||||
{
|
||||
"type": "goal",
|
||||
"value": "... deinem Kunden seine optimale L\u00f6sung aufzuzeigen",
|
||||
"id": "92e3ec0d-e90e-4d8e-a81a-43f0e56c504f"
|
||||
}
|
||||
],
|
||||
"job_situation_description": "Du triffst in diesem Circle auf die folgenden berufstypischen Handlungsfelder:",
|
||||
"job_situations": [
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Autoversicherung",
|
||||
"id": "1a047ce6-8922-4bc7-b185-5b7d6d89c0f9"
|
||||
},
|
||||
{
|
||||
"type": "job_situation",
|
||||
"value": "Autokauf",
|
||||
"id": "c1b5a26b-570a-4147-9338-753d87e67cf3"
|
||||
}
|
||||
]
|
||||
],
|
||||
"course": {
|
||||
"id": -1,
|
||||
"title": "Test Lehrgang",
|
||||
"category_name": "Handlungsfeld",
|
||||
"slug": "test-lehrgang"
|
||||
}
|
||||
],
|
||||
"course": {
|
||||
"id": -1,
|
||||
"title": "Test Lehrgang",
|
||||
"category_name": "Handlungsfeld",
|
||||
"slug": "test-lehrgang"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,13 +7,14 @@ import type {
|
|||
AssignmentCompletion,
|
||||
AssignmentCompletionStatus,
|
||||
CourseSessionUser,
|
||||
LearningContent,
|
||||
LearningContentAssignment,
|
||||
LearningContentInterface,
|
||||
UserAssignmentCompletionStatus,
|
||||
} from "@/types";
|
||||
import { sum } from "d3";
|
||||
import pick from "lodash/pick";
|
||||
|
||||
export interface AssignmentLearningContent extends LearningContent {
|
||||
export interface AssignmentLearningContent extends LearningContentInterface {
|
||||
assignmentId: number;
|
||||
}
|
||||
|
||||
|
|
@ -23,13 +24,12 @@ export function calcAssignmentLearningContents(learningPath?: LearningPath) {
|
|||
|
||||
return learningPath.circles.flatMap((circle) => {
|
||||
const learningContents = circle.flatLearningContents.filter(
|
||||
(lc) => lc.contents[0].type === "assignment"
|
||||
);
|
||||
(lc) => lc.type === "learnpath.LearningContentAssignment"
|
||||
) as LearningContentAssignment[];
|
||||
return learningContents.map((lc) => {
|
||||
return {
|
||||
...lc,
|
||||
// @ts-ignore
|
||||
assignmentId: lc.contents[0].value.assignment,
|
||||
assignmentId: lc.content_assignment_id,
|
||||
};
|
||||
});
|
||||
}) as AssignmentLearningContent[];
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import type {
|
|||
CircleJobSituation,
|
||||
CourseCompletion,
|
||||
LearningContent,
|
||||
LearningContentInterface,
|
||||
LearningSequence,
|
||||
LearningUnit,
|
||||
LearningUnitPerformanceCriteria,
|
||||
|
|
@ -14,6 +15,20 @@ import groupBy from "lodash/groupBy";
|
|||
import partition from "lodash/partition";
|
||||
import values from "lodash/values";
|
||||
|
||||
function isLearningContentType(object: any): object is LearningContent {
|
||||
return (
|
||||
object?.type === "learnpath.LearningContentAssignment" ||
|
||||
object?.type === "learnpath.LearningContentAttendanceDay" ||
|
||||
object?.type === "learnpath.LearningContentFeedback" ||
|
||||
object?.type === "learnpath.LearningContentLearningModule" ||
|
||||
object?.type === "learnpath.LearningContentMediaLibrary" ||
|
||||
object?.type === "learnpath.LearningContentPlaceholder" ||
|
||||
object?.type === "learnpath.LearningContentRichText" ||
|
||||
object?.type === "learnpath.LearningContentTest" ||
|
||||
object?.type === "learnpath.LearningContentVideo"
|
||||
);
|
||||
}
|
||||
|
||||
export function parseLearningSequences(
|
||||
circle: Circle,
|
||||
children: CircleChild[]
|
||||
|
|
@ -49,7 +64,7 @@ export function parseLearningSequences(
|
|||
}),
|
||||
});
|
||||
learningSequence.learningUnits.push(learningUnit);
|
||||
} else if (child.type === "learnpath.LearningContent") {
|
||||
} else if (isLearningContentType(child)) {
|
||||
if (!learningUnit) {
|
||||
throw new Error(`LearningContent found before LearningUnit ${child.slug}`);
|
||||
}
|
||||
|
|
@ -140,8 +155,11 @@ export class Circle implements WagtailCircle {
|
|||
);
|
||||
}
|
||||
|
||||
public get flatChildren(): (LearningContent | LearningUnitPerformanceCriteria)[] {
|
||||
const result: (LearningContent | LearningUnitPerformanceCriteria)[] = [];
|
||||
public get flatChildren(): (
|
||||
| LearningContentInterface
|
||||
| LearningUnitPerformanceCriteria
|
||||
)[] {
|
||||
const result: (LearningContentInterface | LearningUnitPerformanceCriteria)[] = [];
|
||||
this.learningSequences.forEach((learningSequence) => {
|
||||
learningSequence.learningUnits.forEach((learningUnit) => {
|
||||
learningUnit.children.forEach((performanceCriteria) => {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { useLearningPathStore } from "@/stores/learningPath";
|
|||
import type {
|
||||
Course,
|
||||
CourseCompletion,
|
||||
LearningContent,
|
||||
LearningContentInterface,
|
||||
LearningPathChild,
|
||||
Topic,
|
||||
WagtailLearningPath,
|
||||
|
|
@ -27,7 +27,7 @@ function getLastCompleted(courseSlug: string, completionData: CourseCompletion[]
|
|||
return (
|
||||
c.completion_status === "success" &&
|
||||
c.course_session === courseSession?.id &&
|
||||
c.page_type === "learnpath.LearningContent"
|
||||
c.page_type.startsWith("learnpath.LearningContent")
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
@ -36,7 +36,7 @@ export class LearningPath implements WagtailLearningPath {
|
|||
readonly type = "learnpath.LearningPath";
|
||||
public topics: Topic[];
|
||||
public circles: Circle[];
|
||||
public nextLearningContent?: LearningContent;
|
||||
public nextLearningContent?: LearningContentInterface;
|
||||
|
||||
public static fromJson(
|
||||
json: WagtailLearningPath,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { useLearningPathStore } from "@/stores/learningPath";
|
|||
import { useUserStore } from "@/stores/user";
|
||||
import type {
|
||||
CourseCompletionStatus,
|
||||
LearningContent,
|
||||
LearningContentInterface,
|
||||
LearningUnit,
|
||||
LearningUnitPerformanceCriteria,
|
||||
PerformanceCriteria,
|
||||
|
|
@ -101,7 +101,7 @@ export const useCircleStore = defineStore({
|
|||
},
|
||||
async markCompletion(
|
||||
page:
|
||||
| LearningContent
|
||||
| LearningContentInterface
|
||||
| LearningUnitPerformanceCriteria
|
||||
| PerformanceCriteria
|
||||
| undefined,
|
||||
|
|
@ -122,12 +122,12 @@ export const useCircleStore = defineStore({
|
|||
return error;
|
||||
}
|
||||
},
|
||||
openLearningContent(learningContent: LearningContent) {
|
||||
openLearningContent(learningContent: LearningContentInterface) {
|
||||
this.router.push({
|
||||
path: learningContent.frontend_url,
|
||||
});
|
||||
},
|
||||
closeLearningContent(learningContent: LearningContent) {
|
||||
closeLearningContent(learningContent: LearningContentInterface) {
|
||||
this.router.push({
|
||||
path: `${this.circle?.frontend_url}`,
|
||||
hash: createLearningUnitHash(learningContent.parentLearningUnit),
|
||||
|
|
@ -159,7 +159,7 @@ export const useCircleStore = defineStore({
|
|||
}
|
||||
return "unknown";
|
||||
},
|
||||
continueFromLearningContent(currentLearningContent: LearningContent) {
|
||||
continueFromLearningContent(currentLearningContent: LearningContentInterface) {
|
||||
if (currentLearningContent) {
|
||||
this.markCompletion(currentLearningContent, "success");
|
||||
this.closeLearningContent(currentLearningContent);
|
||||
|
|
|
|||
|
|
@ -20,94 +20,24 @@ export interface CircleLight {
|
|||
readonly translation_key: string;
|
||||
}
|
||||
|
||||
export interface BaseLearningContentBlock {
|
||||
readonly type: string;
|
||||
readonly id: string;
|
||||
readonly value: {
|
||||
description: string;
|
||||
url: string;
|
||||
text?: string;
|
||||
};
|
||||
}
|
||||
export type LearningContent =
|
||||
| LearningContentAssignment
|
||||
| LearningContentAttendanceDay
|
||||
| LearningContentFeedback
|
||||
| LearningContentLearningModule
|
||||
| LearningContentMediaLibrary
|
||||
| LearningContentPlaceholder
|
||||
| LearningContentRichText
|
||||
| LearningContentTest
|
||||
| LearningContentVideo;
|
||||
|
||||
export interface AssignmentBlock extends BaseLearningContentBlock {
|
||||
readonly type: "assignment";
|
||||
readonly value: {
|
||||
description: string;
|
||||
url: string;
|
||||
assignment: number;
|
||||
};
|
||||
}
|
||||
export type LearningContentType = LearningContent["type"];
|
||||
|
||||
export interface BookBlock extends BaseLearningContentBlock {
|
||||
readonly type: "book";
|
||||
}
|
||||
|
||||
export interface DocumentBlock extends BaseLearningContentBlock {
|
||||
readonly type: "document";
|
||||
}
|
||||
|
||||
export interface ExerciseBlock extends BaseLearningContentBlock {
|
||||
readonly type: "exercise";
|
||||
}
|
||||
|
||||
export interface MediaLibraryBlock extends BaseLearningContentBlock {
|
||||
readonly type: "media_library";
|
||||
}
|
||||
|
||||
export interface OnlineTrainingBlock extends BaseLearningContentBlock {
|
||||
readonly type: "online_training";
|
||||
}
|
||||
|
||||
export interface ResourceBlock extends BaseLearningContentBlock {
|
||||
readonly type: "resource";
|
||||
}
|
||||
|
||||
export interface TestBlock extends BaseLearningContentBlock {
|
||||
readonly type: "test";
|
||||
}
|
||||
|
||||
export interface VideoBlock extends BaseLearningContentBlock {
|
||||
readonly type: "video";
|
||||
}
|
||||
|
||||
export interface LearningModuleBlock extends BaseLearningContentBlock {
|
||||
readonly type: "learningmodule";
|
||||
}
|
||||
|
||||
export interface PlaceholderBlock extends BaseLearningContentBlock {
|
||||
readonly type: "placeholder";
|
||||
}
|
||||
|
||||
export interface FeedbackBlock extends BaseLearningContentBlock {
|
||||
readonly type: "feedback";
|
||||
}
|
||||
|
||||
export interface AttendanceDayBlock extends BaseLearningContentBlock {
|
||||
readonly type: "attendance_day";
|
||||
}
|
||||
|
||||
export type LearningContentBlock =
|
||||
| AssignmentBlock
|
||||
| BookBlock
|
||||
| DocumentBlock
|
||||
| ExerciseBlock
|
||||
| MediaLibraryBlock
|
||||
| OnlineTrainingBlock
|
||||
| ResourceBlock
|
||||
| TestBlock
|
||||
| VideoBlock
|
||||
| LearningModuleBlock
|
||||
| PlaceholderBlock
|
||||
| FeedbackBlock
|
||||
| AttendanceDayBlock;
|
||||
|
||||
export type LearningContentType = LearningContentBlock["type"];
|
||||
|
||||
export interface LearningContent extends BaseCourseWagtailPage {
|
||||
readonly type: "learnpath.LearningContent";
|
||||
minutes: number;
|
||||
contents: LearningContentBlock[];
|
||||
export interface LearningContentInterface extends BaseCourseWagtailPage {
|
||||
readonly type: LearningContentType;
|
||||
readonly minutes: number;
|
||||
readonly description: string;
|
||||
readonly content_url: string;
|
||||
parentCircle: Circle;
|
||||
parentLearningSequence?: LearningSequence;
|
||||
parentLearningUnit?: LearningUnit;
|
||||
|
|
@ -115,6 +45,43 @@ export interface LearningContent extends BaseCourseWagtailPage {
|
|||
previousLearningContent?: LearningContent;
|
||||
}
|
||||
|
||||
export interface LearningContentAssignment extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentAssignment";
|
||||
readonly content_assignment_id: number;
|
||||
}
|
||||
|
||||
export interface LearningContentAttendanceDay extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentAttendanceDay";
|
||||
}
|
||||
|
||||
export interface LearningContentFeedback extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentFeedback";
|
||||
}
|
||||
|
||||
export interface LearningContentLearningModule extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentLearningModule";
|
||||
}
|
||||
|
||||
export interface LearningContentMediaLibrary extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentMediaLibrary";
|
||||
}
|
||||
|
||||
export interface LearningContentPlaceholder extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentPlaceholder";
|
||||
}
|
||||
|
||||
export interface LearningContentRichText extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentRichText";
|
||||
}
|
||||
|
||||
export interface LearningContentTest extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentTest";
|
||||
}
|
||||
|
||||
export interface LearningContentVideo extends LearningContentInterface {
|
||||
readonly type: "learnpath.LearningContentVideo";
|
||||
}
|
||||
|
||||
export interface LearningUnitPerformanceCriteria extends BaseCourseWagtailPage {
|
||||
readonly type: "competence.PerformanceCriteria";
|
||||
readonly competence_id: string;
|
||||
|
|
@ -143,7 +110,7 @@ export interface LearningSequence extends BaseCourseWagtailPage {
|
|||
minutes: number;
|
||||
}
|
||||
|
||||
export type CircleChild = LearningContent | LearningUnit | LearningSequence;
|
||||
export type CircleChild = LearningContentInterface | LearningUnit | LearningSequence;
|
||||
|
||||
export interface WagtailLearningPath extends BaseCourseWagtailPage {
|
||||
readonly type: "learnpath.LearningPath";
|
||||
|
|
|
|||
|
|
@ -10,31 +10,23 @@ export function learningContentTypeData(
|
|||
t: LearningContentType
|
||||
): LearningContentIdentifier {
|
||||
switch (t) {
|
||||
case "assignment":
|
||||
case "learnpath.LearningContentAssignment":
|
||||
return { title: "Transferauftrag", icon: "it-icon-lc-assignment" };
|
||||
case "book":
|
||||
return { title: "Buch", icon: "it-icon-lc-book" };
|
||||
case "document":
|
||||
return { title: "Dokument", icon: "it-icon-lc-document" };
|
||||
case "exercise":
|
||||
return { title: "Übung", icon: "it-icon-lc-exercise" };
|
||||
case "learningmodule":
|
||||
return { title: "Lernmodul", icon: "it-icon-lc-learning-module" };
|
||||
case "media_library":
|
||||
return { title: "Mediathek", icon: "it-icon-lc-media-library" };
|
||||
case "online_training":
|
||||
return { title: "Online-Training", icon: "it-icon-lc-online-training" };
|
||||
case "video":
|
||||
return { title: "Video", icon: "it-icon-lc-video" };
|
||||
case "test":
|
||||
return { title: "Test", icon: "it-icon-lc-test" };
|
||||
case "resource":
|
||||
return { title: "Reflexion", icon: "it-icon-lc-resource" };
|
||||
case "feedback":
|
||||
return { title: "Feedback", icon: "it-icon-lc-feedback" };
|
||||
case "attendance_day":
|
||||
case "learnpath.LearningContentAttendanceDay":
|
||||
return { title: "Präsenztag", icon: "it-icon-lc-training" };
|
||||
case "placeholder":
|
||||
case "learnpath.LearningContentLearningModule":
|
||||
return { title: "Lernmodul", icon: "it-icon-lc-learning-module" };
|
||||
case "learnpath.LearningContentMediaLibrary":
|
||||
return { title: "Mediathek", icon: "it-icon-lc-media-library" };
|
||||
case "learnpath.LearningContentVideo":
|
||||
return { title: "Video", icon: "it-icon-lc-video" };
|
||||
case "learnpath.LearningContentTest":
|
||||
return { title: "Test", icon: "it-icon-lc-test" };
|
||||
case "learnpath.LearningContentRichText":
|
||||
return { title: "Reflexion", icon: "it-icon-lc-resource" };
|
||||
case "learnpath.LearningContentFeedback":
|
||||
return { title: "Feedback", icon: "it-icon-lc-feedback" };
|
||||
case "learnpath.LearningContentPlaceholder":
|
||||
return { title: "In Umsetzung", icon: "it-icon-lc-document" };
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
# Generated by Django 3.2.13 on 2023-05-05 14:10
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
import wagtail.blocks
|
||||
import wagtail.fields
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
|
|
@ -13,8 +12,6 @@ class Migration(migrations.Migration):
|
|||
|
||||
dependencies = [
|
||||
("wagtailcore", "0083_workflowcontenttype"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
("course", "0006_alter_coursesession_attendance_days"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
@ -221,6 +218,44 @@ class Migration(migrations.Migration):
|
|||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AssignmentCompletion",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("submitted_at", models.DateTimeField(blank=True, null=True)),
|
||||
(
|
||||
"evaluation_submitted_at",
|
||||
models.DateTimeField(blank=True, null=True),
|
||||
),
|
||||
("evaluation_grade", models.FloatField(blank=True, null=True)),
|
||||
("evaluation_points", models.FloatField(blank=True, null=True)),
|
||||
(
|
||||
"completion_status",
|
||||
models.CharField(
|
||||
choices=[
|
||||
(1, "in_progress"),
|
||||
(2, "submitted"),
|
||||
(3, "evaluation_in_progress"),
|
||||
(4, "evaluation_submitted"),
|
||||
],
|
||||
default="in_progress",
|
||||
max_length=255,
|
||||
),
|
||||
),
|
||||
("completion_data", models.JSONField(default=dict)),
|
||||
("additional_json_data", models.JSONField(default=dict)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AssignmentListPage",
|
||||
fields=[
|
||||
|
|
@ -286,110 +321,6 @@ class Migration(migrations.Migration):
|
|||
to="assignment.assignment",
|
||||
),
|
||||
),
|
||||
(
|
||||
"assignment_user",
|
||||
models.ForeignKey(
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
(
|
||||
"course_session",
|
||||
models.ForeignKey(
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to="course.coursesession",
|
||||
),
|
||||
),
|
||||
(
|
||||
"evaluation_user",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AssignmentCompletion",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
("submitted_at", models.DateTimeField(blank=True, null=True)),
|
||||
(
|
||||
"evaluation_submitted_at",
|
||||
models.DateTimeField(blank=True, null=True),
|
||||
),
|
||||
("evaluation_grade", models.FloatField(blank=True, null=True)),
|
||||
("evaluation_points", models.FloatField(blank=True, null=True)),
|
||||
(
|
||||
"completion_status",
|
||||
models.CharField(
|
||||
choices=[
|
||||
(1, "in_progress"),
|
||||
(2, "submitted"),
|
||||
(3, "evaluation_in_progress"),
|
||||
(4, "evaluation_submitted"),
|
||||
],
|
||||
default="in_progress",
|
||||
max_length=255,
|
||||
),
|
||||
),
|
||||
("completion_data", models.JSONField(default=dict)),
|
||||
("additional_json_data", models.JSONField(default=dict)),
|
||||
(
|
||||
"assignment",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="assignment.assignment",
|
||||
),
|
||||
),
|
||||
(
|
||||
"assignment_user",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
(
|
||||
"course_session",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="course.coursesession",
|
||||
),
|
||||
),
|
||||
(
|
||||
"evaluation_user",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
migrations.AddConstraint(
|
||||
model_name="assignmentcompletion",
|
||||
constraint=models.UniqueConstraint(
|
||||
fields=("assignment_user", "assignment", "course_session"),
|
||||
name="assignment_completion_unique_user_assignment_course_session",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
("assignment", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="assignmentcompletionauditlog",
|
||||
name="assignment_user",
|
||||
field=models.ForeignKey(
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
("assignment", "0002_assignmentcompletionauditlog_assignment_user"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
("course", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="assignmentcompletionauditlog",
|
||||
name="course_session",
|
||||
field=models.ForeignKey(
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to="course.coursesession",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="assignmentcompletionauditlog",
|
||||
name="evaluation_user",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="assignmentcompletion",
|
||||
name="assignment",
|
||||
field=models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE, to="assignment.assignment"
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="assignmentcompletion",
|
||||
name="assignment_user",
|
||||
field=models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="assignmentcompletion",
|
||||
name="course_session",
|
||||
field=models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE, to="course.coursesession"
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="assignmentcompletion",
|
||||
name="evaluation_user",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="+",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
migrations.AddConstraint(
|
||||
model_name="assignmentcompletion",
|
||||
constraint=models.UniqueConstraint(
|
||||
fields=("assignment_user", "assignment", "course_session"),
|
||||
name="assignment_completion_unique_user_assignment_course_session",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.13 on 2023-03-31 16:22
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
import wagtail.blocks
|
||||
|
|
@ -11,7 +11,7 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
("wagtailcore", "0069_log_entry_jsonfield"),
|
||||
("wagtailcore", "0083_workflowcontenttype"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.13 on 2023-03-31 16:22
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
# Generated by Django 3.2.12 on 2022-02-03 15:46
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.contrib.auth.models
|
||||
import django.contrib.auth.validators
|
||||
import django.utils.timezone
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
|
|
@ -104,12 +104,6 @@ class Migration(migrations.Migration):
|
|||
blank=True, max_length=150, verbose_name="last name"
|
||||
),
|
||||
),
|
||||
(
|
||||
"email",
|
||||
models.EmailField(
|
||||
blank=True, max_length=254, verbose_name="email address"
|
||||
),
|
||||
),
|
||||
(
|
||||
"is_staff",
|
||||
models.BooleanField(
|
||||
|
|
@ -132,6 +126,39 @@ class Migration(migrations.Migration):
|
|||
default=django.utils.timezone.now, verbose_name="date joined"
|
||||
),
|
||||
),
|
||||
(
|
||||
"avatar_url",
|
||||
models.CharField(blank=True, default="", max_length=254),
|
||||
),
|
||||
(
|
||||
"email",
|
||||
models.EmailField(
|
||||
max_length=254, unique=True, verbose_name="email address"
|
||||
),
|
||||
),
|
||||
(
|
||||
"sso_id",
|
||||
models.UUIDField(
|
||||
blank=True,
|
||||
default=None,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="SSO subscriber ID",
|
||||
),
|
||||
),
|
||||
("additional_json_data", models.JSONField(blank=True, default=dict)),
|
||||
(
|
||||
"language",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("de", "Deutsch"),
|
||||
("fr", "Français"),
|
||||
("it", "Italiano"),
|
||||
],
|
||||
default="de",
|
||||
max_length=2,
|
||||
),
|
||||
),
|
||||
(
|
||||
"groups",
|
||||
models.ManyToManyField(
|
||||
|
|
@ -160,8 +187,5 @@ class Migration(migrations.Migration):
|
|||
"verbose_name_plural": "users",
|
||||
"abstract": False,
|
||||
},
|
||||
managers=[
|
||||
("objects", django.contrib.auth.models.UserManager()),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2022-06-28 12:06
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("core", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="user",
|
||||
name="avatar_url",
|
||||
field=models.CharField(blank=True, default="", max_length=254),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="user",
|
||||
name="email",
|
||||
field=models.EmailField(
|
||||
max_length=254, unique=True, verbose_name="email address"
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="user",
|
||||
name="language",
|
||||
field=models.CharField(
|
||||
choices=[("de", "Deutsch"), ("fr", "Français"), ("it", "Italiano")],
|
||||
default="de",
|
||||
max_length=2,
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2022-08-16 08:35
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("core", "0002_user_model"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelManagers(
|
||||
name="user",
|
||||
managers=[],
|
||||
),
|
||||
]
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2023-01-10 10:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("core", "0003_alter_user_managers"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="user",
|
||||
name="sso_id",
|
||||
field=models.UUIDField(
|
||||
blank=True,
|
||||
default=None,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="SSO subscriber ID",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
from django.conf import settings
|
||||
from django.db import migrations
|
||||
|
||||
from vbv_lernwelt.core.create_default_users import create_default_users
|
||||
|
||||
|
||||
def create_users(apps, schema_editor):
|
||||
default_password = "ACEEs0DCmNaPxdoNV8vhccuCTRl9b"
|
||||
if settings.APP_ENVIRONMENT == "development":
|
||||
default_password = None
|
||||
User = apps.get_model("core", "User")
|
||||
Group = apps.get_model("auth", "Group")
|
||||
create_default_users(
|
||||
user_model=User, group_model=Group, default_password=default_password
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("core", "0004_user_sso_id"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(create_users),
|
||||
]
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2023-01-24 09:15
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("core", "0005_create_users"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="user",
|
||||
name="additional_json_data",
|
||||
field=models.JSONField(blank=True, default=dict),
|
||||
),
|
||||
]
|
||||
|
|
@ -26,18 +26,18 @@ from vbv_lernwelt.course.models import (
|
|||
)
|
||||
from vbv_lernwelt.learnpath.models import Circle
|
||||
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||
AssignmentBlockFactory,
|
||||
AttendanceDayBlockFactory,
|
||||
CircleFactory,
|
||||
FeedbackBlockFactory,
|
||||
LearningContentFactory,
|
||||
LearningModuleBlockFactory,
|
||||
LearningContentAssignmentFactory,
|
||||
LearningContentAttendanceDayFactory,
|
||||
LearningContentFeedbackFactory,
|
||||
LearningContentLearningModuleFactory,
|
||||
LearningContentMediaLibraryFactory,
|
||||
LearningContentPlaceholderFactory,
|
||||
LearningContentVideoFactory,
|
||||
LearningPathFactory,
|
||||
LearningSequenceFactory,
|
||||
LearningUnitFactory,
|
||||
MediaLibraryBlockFactory,
|
||||
TopicFactory,
|
||||
VideoBlockFactory,
|
||||
)
|
||||
from vbv_lernwelt.media_library.tests.media_library_factories import (
|
||||
create_external_link_block,
|
||||
|
|
@ -167,23 +167,16 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
|||
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
|
||||
)
|
||||
lu = LearningUnitFactory(title="Vorbereitung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Verschaffe dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/überbetriebliche-kurse-media/category/{slugify(title)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/überbetriebliche-kurse-media/category/{slugify(title)}",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Vorbereitungsauftrag",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -203,55 +196,35 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
|||
|
||||
LearningSequenceFactory(title="Training", parent=circle)
|
||||
LearningUnitFactory(title="Unterlagen", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Unterlagen für den Unterricht",
|
||||
parent=circle,
|
||||
)
|
||||
LearningUnitFactory(title="Präsenztag", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentAttendanceDayFactory(
|
||||
title="Präsenztag Fahrzeug",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"attendance_day",
|
||||
AttendanceDayBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Wissens- und Verständnisfragen",
|
||||
parent=circle,
|
||||
)
|
||||
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Transfer", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Reflexion",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentAssignmentFactory(
|
||||
title="Überprüfen einer Motorfahrzeug-Versicherungspolice",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"assignment",
|
||||
AssignmentBlockFactory(
|
||||
assignment=Assignment.objects.get(
|
||||
slug__startswith="test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs"
|
||||
)
|
||||
),
|
||||
)
|
||||
],
|
||||
content_assignment=Assignment.objects.get(
|
||||
slug__startswith="test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs"
|
||||
),
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
LearningContentFeedbackFactory(
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -262,30 +235,16 @@ def create_test_circle_reisen(lp):
|
|||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentVideoFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek Reisen",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/test-lehrgang-media/category/reisen"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/test-lehrgang-media/category/reisen",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Analyse", parent=circle)
|
||||
|
|
@ -299,17 +258,10 @@ def create_test_circle_reisen(lp):
|
|||
),
|
||||
)
|
||||
|
||||
LearningContentFactory(
|
||||
LearningContentLearningModuleFactory(
|
||||
title="Emma und Ayla campen durch Amerika - Analyse",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"learningmodule",
|
||||
LearningModuleBlockFactory(
|
||||
url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-FZoZOP9y/index.html"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-FZoZOP9y/index.html",
|
||||
)
|
||||
|
||||
PerformanceCriteriaFactory(
|
||||
|
|
@ -329,27 +281,20 @@ def create_test_circle_reisen(lp):
|
|||
parent = circle
|
||||
LearningSequenceFactory(title="Transfer", parent=parent, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Transfer, Reflexion, Feedback", parent=parent)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Auswandern: Woran muss ich denken?",
|
||||
parent=parent,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title=f"Fachcheck Reisen",
|
||||
parent=parent,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Reflexion",
|
||||
parent=parent,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
LearningContentFeedbackFactory(
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,11 @@ from vbv_lernwelt.feedback.creators.create_demo_feedback import create_feedback
|
|||
from vbv_lernwelt.learnpath.create_vv_new_learning_path import (
|
||||
create_vv_new_learning_path,
|
||||
)
|
||||
from vbv_lernwelt.learnpath.models import Circle, LearningContent
|
||||
from vbv_lernwelt.learnpath.models import (
|
||||
Circle,
|
||||
LearningContentAssignment,
|
||||
LearningContentAttendanceDay,
|
||||
)
|
||||
from vbv_lernwelt.media_library.create_default_media_library import (
|
||||
create_default_media_library,
|
||||
)
|
||||
|
|
@ -151,7 +155,7 @@ def create_course_uk_de():
|
|||
title="Bern 2023 a",
|
||||
attendance_days=[
|
||||
{
|
||||
"learningContentId": LearningContent.objects.get(
|
||||
"learningContentId": LearningContentAttendanceDay.objects.get(
|
||||
slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-präsenztag-fahrzeug"
|
||||
).id,
|
||||
"date": "2023-09-18",
|
||||
|
|
@ -163,7 +167,7 @@ def create_course_uk_de():
|
|||
],
|
||||
assignment_details_list=[
|
||||
{
|
||||
"learningContentId": LearningContent.objects.get(
|
||||
"learningContentId": LearningContentAssignment.objects.get(
|
||||
slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice"
|
||||
).id,
|
||||
"submissionDeadlineDateTimeUtc": "2023-06-13T19:00:00Z",
|
||||
|
|
|
|||
|
|
@ -10,15 +10,15 @@ from vbv_lernwelt.core.admin import User
|
|||
from vbv_lernwelt.course.consts import COURSE_UK, COURSE_UK_FR
|
||||
from vbv_lernwelt.course.models import CoursePage
|
||||
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||
AssignmentBlockFactory,
|
||||
AttendanceDayBlockFactory,
|
||||
CircleFactory,
|
||||
FeedbackBlockFactory,
|
||||
LearningContentFactory,
|
||||
LearningContentAssignmentFactory,
|
||||
LearningContentAttendanceDayFactory,
|
||||
LearningContentFeedbackFactory,
|
||||
LearningContentMediaLibraryFactory,
|
||||
LearningContentPlaceholderFactory,
|
||||
LearningPathFactory,
|
||||
LearningSequenceFactory,
|
||||
LearningUnitFactory,
|
||||
MediaLibraryBlockFactory,
|
||||
TopicFactory,
|
||||
)
|
||||
|
||||
|
|
@ -150,7 +150,7 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
|||
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
|
||||
)
|
||||
LearningUnitFactory(title="Vorbereitung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Verschaffe dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -165,60 +165,44 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
|||
"Pensionierung",
|
||||
"Gesundheit",
|
||||
]:
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
# TODO: sollen die ÜKs auf die gleichen Mediatheken verlinken
|
||||
# wie im Verischerungsvermittler?
|
||||
url=f"/media/überbetriebliche-kurse-media/category/{slugify(first_title)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/überbetriebliche-kurse-media/category/{slugify(first_title)}",
|
||||
)
|
||||
else:
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Vorbereitungsauftrag",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Selbsteinschätzung",
|
||||
parent=circle,
|
||||
)
|
||||
LearningSequenceFactory(title="Training", parent=circle)
|
||||
LearningUnitFactory(title="Unterlagen", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Unterlagen für den Unterricht",
|
||||
parent=circle,
|
||||
)
|
||||
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Wissens- und Verständnisfragen",
|
||||
parent=circle,
|
||||
)
|
||||
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Transfer", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Reflexion",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
LearningContentFeedbackFactory(
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -236,75 +220,48 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
|||
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
|
||||
)
|
||||
LearningUnitFactory(title="Vorbereitung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Verschaffe dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/überbetriebliche-kurse-media/category/{slugify(title)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/überbetriebliche-kurse-media/category/{slugify(title)}",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Vorbereitungsauftrag",
|
||||
parent=circle,
|
||||
)
|
||||
LearningSequenceFactory(title="Training", parent=circle)
|
||||
LearningUnitFactory(title="Unterlagen", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Unterlagen für den Unterricht",
|
||||
parent=circle,
|
||||
)
|
||||
LearningUnitFactory(title="Präsenztag", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentAttendanceDayFactory(
|
||||
title="Präsenztag Fahrzeug",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"attendance_day",
|
||||
AttendanceDayBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Wissens- und Verständnisfragen",
|
||||
parent=circle,
|
||||
)
|
||||
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Transfer", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Reflexion",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentAssignmentFactory(
|
||||
title="Überprüfen einer Motorfahrzeug-Versicherungspolice",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"assignment",
|
||||
AssignmentBlockFactory(
|
||||
assignment=Assignment.objects.get(
|
||||
slug__startswith="überbetriebliche-kurse-assignment-überprüfen-einer-motorfahrzeugs"
|
||||
)
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
content_assignment=Assignment.objects.get(
|
||||
slug__startswith="überbetriebliche-kurse-assignment-überprüfen-einer-motorfahrzeugs"
|
||||
),
|
||||
),
|
||||
LearningContentFeedbackFactory(
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
# Generated by Django 3.2.13 on 2023-03-31 16:22
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
import django_jsonform.models.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
|
|
@ -9,7 +10,7 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
("wagtailcore", "0069_log_entry_jsonfield"),
|
||||
("wagtailcore", "0083_workflowcontenttype"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
@ -156,7 +157,12 @@ class Migration(migrations.Migration):
|
|||
("title", models.TextField()),
|
||||
("start_date", models.DateField(blank=True, null=True)),
|
||||
("end_date", models.DateField(blank=True, null=True)),
|
||||
("additional_json_data", models.JSONField(default=dict)),
|
||||
(
|
||||
"attendance_days",
|
||||
django_jsonform.models.fields.JSONField(blank=True, default=list),
|
||||
),
|
||||
("assignment_details_list", models.JSONField(blank=True, default=list)),
|
||||
("additional_json_data", models.JSONField(blank=True, default=dict)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.13 on 2023-03-31 16:22
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
|
|
@ -10,10 +10,10 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
("course", "0001_initial"),
|
||||
("learnpath", "0001_initial"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
("files", "0001_initial"),
|
||||
("course", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
|
|||
|
|
@ -1,23 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2023-04-04 06:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("course", "0002_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="coursesession",
|
||||
name="attendance_days",
|
||||
field=models.JSONField(blank=True, default=list),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="coursesession",
|
||||
name="additional_json_data",
|
||||
field=models.JSONField(blank=True, default=dict),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2023-04-06 09:19
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("course", "0003_auto_20230404_0837"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="coursesession",
|
||||
name="assignment_details_list",
|
||||
field=models.JSONField(blank=True, default=list),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2023-04-25 12:28
|
||||
|
||||
import django_jsonform.models.fields
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("course", "0004_coursesession_assignment_details_list"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="coursesession",
|
||||
name="attendance_days",
|
||||
field=django_jsonform.models.fields.JSONField(),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2023-04-26 16:28
|
||||
|
||||
import django_jsonform.models.fields
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("course", "0005_alter_coursesession_attendance_days"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="coursesession",
|
||||
name="attendance_days",
|
||||
field=django_jsonform.models.fields.JSONField(blank=True, default=list),
|
||||
),
|
||||
]
|
||||
|
|
@ -11,7 +11,7 @@ from vbv_lernwelt.course.models import (
|
|||
CourseSession,
|
||||
CourseSessionUser,
|
||||
)
|
||||
from vbv_lernwelt.learnpath.models import LearningContent
|
||||
from vbv_lernwelt.learnpath.models import LearningContentPlaceholder
|
||||
|
||||
|
||||
class CourseCompletionApiTestCase(APITestCase):
|
||||
|
|
@ -30,7 +30,9 @@ class CourseCompletionApiTestCase(APITestCase):
|
|||
self.client.login(username="admin", password="test")
|
||||
|
||||
def test_completeLearningContent_works(self):
|
||||
learning_content = LearningContent.objects.get(title="Fachcheck Reisen")
|
||||
learning_content = LearningContentPlaceholder.objects.get(
|
||||
title="Fachcheck Reisen"
|
||||
)
|
||||
learning_content_key = str(learning_content.translation_key)
|
||||
|
||||
mark_url = f"/api/course/completion/mark/"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.13 on 2023-03-31 16:22
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.13 on 2023-03-31 16:22
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
|
@ -9,9 +9,9 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
("feedback", "0001_initial"),
|
||||
("course", "0001_initial"),
|
||||
("learnpath", "0001_initial"),
|
||||
("feedback", "0001_initial"),
|
||||
("course", "0002_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.13 on 2022-12-22 14:14
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
|
|
@ -8,6 +8,7 @@ import vbv_lernwelt.files.utils
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
|
|
|
|||
|
|
@ -1,917 +0,0 @@
|
|||
import wagtail_factories
|
||||
from django.conf import settings
|
||||
from django.core.management import call_command
|
||||
from slugify import slugify
|
||||
from wagtail.models import Locale, Page, Site
|
||||
from wagtail.rich_text import RichText
|
||||
from wagtail_localize.models import LocaleSynchronization
|
||||
|
||||
from vbv_lernwelt.core.admin import User
|
||||
from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_OLD_ID
|
||||
from vbv_lernwelt.course.models import CourseCategory, CoursePage
|
||||
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||
AssignmentBlockFactory,
|
||||
CircleFactory,
|
||||
FeedbackBlockFactory,
|
||||
LearningContentFactory,
|
||||
LearningModuleBlockFactory,
|
||||
LearningPathFactory,
|
||||
LearningSequenceFactory,
|
||||
LearningUnitFactory,
|
||||
MediaLibraryBlockFactory,
|
||||
ResourceBlockFactory,
|
||||
TestBlockFactory,
|
||||
TopicFactory,
|
||||
VideoBlockFactory,
|
||||
)
|
||||
|
||||
# todo: remove when all Handlungsfelder are ready
|
||||
READY_HF = ["Fahrzeug", "Reisen"]
|
||||
|
||||
|
||||
def create_vv_learning_path(
|
||||
course_id=COURSE_VERSICHERUNGSVERMITTLERIN_OLD_ID, user=None, skip_locales=True
|
||||
):
|
||||
if user is None:
|
||||
user = User.objects.get(username="info@iterativ.ch")
|
||||
|
||||
site = Site.objects.filter(is_default_site=True).first()
|
||||
|
||||
if not site:
|
||||
site = wagtail_factories.SiteFactory(is_default_site=True)
|
||||
|
||||
if settings.APP_ENVIRONMENT == "development":
|
||||
site.port = 8000
|
||||
site.save()
|
||||
|
||||
course_page = CoursePage.objects.get(course_id=course_id)
|
||||
lp = LearningPathFactory(
|
||||
title="Lernpfad",
|
||||
parent=course_page,
|
||||
)
|
||||
|
||||
TopicFactory(title="Basis", is_visible=False, parent=lp)
|
||||
create_circle_basis(lp)
|
||||
|
||||
TopicFactory(title="Gewinnen von Kunden", parent=lp)
|
||||
create_circle_gewinnen(lp)
|
||||
|
||||
TopicFactory(title="Beraten der Kunden", parent=lp)
|
||||
create_circle_einstieg(lp)
|
||||
create_circle_analyse(lp)
|
||||
create_circle_loesung(lp)
|
||||
create_circle_abschluss(lp)
|
||||
|
||||
TopicFactory(title="Betreuen und Ausbauen des Kundenstamms", parent=lp)
|
||||
create_circle_betreuen(lp)
|
||||
|
||||
TopicFactory(title="Vertiefen und Festigen", parent=lp)
|
||||
create_circle_vernetzen(lp)
|
||||
|
||||
TopicFactory(title="Prüfung", parent=lp)
|
||||
create_circle_pruefung(lp)
|
||||
|
||||
# circle_analyse = create_circle("Betreuen", lp)
|
||||
# create_circle_children(circle_analyse, "Betreuen")
|
||||
#
|
||||
# TopicFactory(title="Prüfung", is_visible=True, parent=lp)
|
||||
# circle_analyse = create_circle("Prüfungsvorbereitung", lp)
|
||||
# create_circle_children(circle_analyse, "Prüfungsvorbereitung")
|
||||
|
||||
# locales
|
||||
if not skip_locales:
|
||||
locale_de = Locale.objects.get(language_code="de-CH")
|
||||
locale_fr, _ = Locale.objects.get_or_create(language_code="fr-CH")
|
||||
LocaleSynchronization.objects.get_or_create(
|
||||
locale_id=locale_fr.id, sync_from_id=locale_de.id
|
||||
)
|
||||
locale_it, _ = Locale.objects.get_or_create(language_code="it-CH")
|
||||
LocaleSynchronization.objects.get_or_create(
|
||||
locale_id=locale_it.id, sync_from_id=locale_de.id
|
||||
)
|
||||
call_command("sync_locale_trees")
|
||||
|
||||
# all pages belong to 'admin' by default
|
||||
Page.objects.update(owner=user)
|
||||
|
||||
|
||||
def create_circle_basis(lp, title="Basis"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="""
|
||||
In diesem Circle erfährst du wie der Lehrgang aufgebaut ist.
|
||||
Zudem lernst du die wichtigsten Grundlagen,
|
||||
damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||
""".strip(),
|
||||
goals=[
|
||||
("goal", "Aufbau und Umgang mit dem Lernpfad"),
|
||||
("goal", "Lerntechnik"),
|
||||
("goal", "Arbeitstechnik"),
|
||||
("goal", "Beraten und Verkaufen"),
|
||||
("goal", "Versicherungswirtschaft"),
|
||||
("goal", "Versicherungsrecht"),
|
||||
],
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
parent=circle,
|
||||
)
|
||||
LearningUnitFactory(title="Arbeits- und Lerntechnik", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Luca organisiert seinen Arbeitsalltag",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Luca legt sich seine Lernstrategie zurecht",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Fachcheck Arbeits- und Lerntechnik",
|
||||
parent=circle,
|
||||
)
|
||||
LearningSequenceFactory(title="Grundlagen", parent=circle, icon="it-icon-ls-watch")
|
||||
LearningUnitFactory(title="Versicherung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Luca startet durch",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Fachcheck Allgemeines zu Versicherungen",
|
||||
parent=circle,
|
||||
)
|
||||
LearningUnitFactory(title="Beratung und Verkauf", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Luca macht sich fit im Verkauf",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Fachcheck Beratung und Verkauf",
|
||||
parent=circle,
|
||||
)
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Jetzt kann's los gehen", parent=circle)
|
||||
create_learning_content_beenden(circle)
|
||||
|
||||
|
||||
def create_circle_gewinnen(lp, title="Gewinnen"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="""
|
||||
Neue Kunden zu gewinnen ist ein wesentlicher Bestandteil deiner beruflichen Tätigkeit.
|
||||
Dies sichert dir langfristig deine finanzielle Basis. Dieser Circle fokussiert darauf,
|
||||
wie du dein Netzwerk aufbauen und erweitern kannst, um damit neue Kunden zu gewinnen.
|
||||
""".strip(),
|
||||
goals=[
|
||||
("goal", "Weiterempfehlungen generieren"),
|
||||
("goal", "Leads generieren"),
|
||||
("goal", "Neue Kunden gewinnen"),
|
||||
("goal", "Soziale Medien pflegen"),
|
||||
],
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch")
|
||||
LearningUnitFactory(title="Kunden gewinnen", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Lerninhalt offen",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Fachcheck Kunden gewinnen",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-watch")
|
||||
LearningUnitFactory(title="Sozialer Auftritt", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Lerninhalt offen",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Fachcheck Sozialer Auftritt",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice")
|
||||
LearningUnitFactory(title="Sozialer Auftritt", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Lerninhalt offen",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Circle beenden", parent=circle)
|
||||
create_learning_content_beenden(circle)
|
||||
|
||||
|
||||
def create_circle_einstieg(lp, title="Einstieg"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="""
|
||||
Eine deiner Kernkompetenzen ist das fachgerechte, professionelle und ganzheitliche
|
||||
Beraten von Kunden. Mit dem Einstieg in das Kundengespräch legst du eine
|
||||
wichtige Grundlage für eine erfolgreiche Beziehung.
|
||||
""".strip(),
|
||||
goals=[
|
||||
("goal", "Termine vereinbaren"),
|
||||
("goal", "Gespräche vorbereiten"),
|
||||
("goal", "Gespräch eröffnen"),
|
||||
("goal", "Agenda präsentieren "),
|
||||
],
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch")
|
||||
create_standard_learning_unit(
|
||||
"Patrizia & Marco sichern sich ab",
|
||||
parent=circle,
|
||||
category_name="Einkommenssicherung",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/story-patrizia-marco-sichern-sich-ab-einstieg/index.html",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply")
|
||||
create_standard_learning_unit(
|
||||
"Rafael Fasel wechselt sein Auto",
|
||||
parent=circle,
|
||||
category_name="Fahrzeug",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rafael-fasel-wechselt-sein-auto-einstieg-xapi-yXLHE5Xo/index.html",
|
||||
check_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach-check-fahrzeug-xapi-LqpAWv1J/index.html",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Rafael Fasel zieht von zu Hause aus",
|
||||
parent=circle,
|
||||
category_name="Haushalt",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Emma und Ayla campen durch Amerika",
|
||||
parent=circle,
|
||||
category_name="Reisen",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-einstieg-xapi-_BfVBK8d/index.html",
|
||||
check_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach_check_reisen/index.html",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Herr und Frau Russo planen ihre Pensionierung",
|
||||
parent=circle,
|
||||
category_name="Pensionierung",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Familie Babic erwartet Nachwuchs",
|
||||
parent=circle,
|
||||
category_name="Gesundheit",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Anne Fleur übernimmt den Blumenladen",
|
||||
parent=circle,
|
||||
category_name="KMU",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice")
|
||||
LearningUnitFactory(title="Gesprächseinstieg", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
create_learning_content_transferauftrag("Der erste Eindruck zählt", circle)
|
||||
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Circle beenden", parent=circle)
|
||||
create_learning_content_beenden(circle)
|
||||
|
||||
|
||||
def create_circle_analyse(lp, title="Analyse"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="Wer ist dein Kunde und was ist ihm wichtig? In dieser Phase des Gesprächs geht es darum, deine Kundinnen und Kunden mit ihren Zielen, Wünschen und Bedürfnissen kennenzulernen und zu verstehen.",
|
||||
goals=[
|
||||
("goal", "Ziele und Pläne ergründen"),
|
||||
("goal", "Ist-Situation erfassen"),
|
||||
("goal", "Risiken aufzeigen "),
|
||||
],
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch")
|
||||
create_standard_learning_unit(
|
||||
"Patrizia & Marco sichern sich ab",
|
||||
parent=circle,
|
||||
category_name="Einkommenssicherung",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/patrizia-marco-sichern-sich-ab-analyse-xapi-AoI_Ssua/index.html",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply")
|
||||
create_standard_learning_unit(
|
||||
"Rafael Fasel wechselt sein Auto",
|
||||
parent=circle,
|
||||
category_name="Fahrzeug",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rafael-fasel-wechselt-sein-auto-analyse-xapi-SmrKAa0J/index.html",
|
||||
check_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach-check-fahrzeug-xapi-LqpAWv1J/index.html",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Rafael Fasel zieht von zu Hause aus",
|
||||
parent=circle,
|
||||
category_name="Haushalt",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Emma und Ayla campen durch Amerika",
|
||||
parent=circle,
|
||||
category_name="Reisen",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-mtXA4uBz/index.html",
|
||||
check_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach_check_reisen/index.html",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Herr und Frau Russo planen ihre Pensionierung",
|
||||
parent=circle,
|
||||
category_name="Pensionierung",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Familie Babic erwartet Nachwuchs",
|
||||
parent=circle,
|
||||
category_name="Gesundheit",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Anne Fleur übernimmt den Blumenladen",
|
||||
parent=circle,
|
||||
category_name="KMU",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice")
|
||||
LearningUnitFactory(title="Gesprächseinstieg", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Lerninhalt offen",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Circle beenden", parent=circle)
|
||||
create_learning_content_beenden(circle)
|
||||
|
||||
|
||||
def create_circle_loesung(lp, title="Lösung"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="Ohne Lösungsvorschlag – kein Verkauf! Auf der Basis der umfassenden Analyse erstellst du konkrete Lösungsvorschläge. Es ist ein wichtiger Erfolgsfaktor diese Lösungsvorschläge, den Kundinnen und Kunden verständlich zu erklären.",
|
||||
goals=[
|
||||
("goal", "Lösungsvorschläge entwickeln"),
|
||||
("goal", "Lösungsvorschläge erklären"),
|
||||
("goal", "Nutzen aufzeigen"),
|
||||
("goal", "Auf Vorbehalte eingehen"),
|
||||
],
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch")
|
||||
create_standard_learning_unit(
|
||||
"Patrizia & Marco sichern sich ab",
|
||||
parent=circle,
|
||||
category_name="Einkommenssicherung",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply")
|
||||
create_standard_learning_unit(
|
||||
"Rafael Fasel wechselt sein Auto",
|
||||
parent=circle,
|
||||
category_name="Fahrzeug",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rafael-fasel-wechselt-sein-auto-losung-xapi-3rzf8ySd/index.html",
|
||||
check_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach-check-fahrzeug-xapi-LqpAWv1J/index.html",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Rafael und Claudia ziehen zusammen",
|
||||
parent=circle,
|
||||
category_name="Haushalt",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Emma und Ayla campen durch Amerika",
|
||||
parent=circle,
|
||||
category_name="Reisen",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-losung-xapi-hn7GwUTn/index.html",
|
||||
check_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach_check_reisen/index.html",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Giulia und Davide planen ihre Pensionierung",
|
||||
parent=circle,
|
||||
category_name="Pensionierung",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Familie Babic erwartet Nachwuchs",
|
||||
parent=circle,
|
||||
category_name="Gesundheit",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Anne Fleur übernimmt den Blumenladen",
|
||||
parent=circle,
|
||||
category_name="KMU",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice")
|
||||
LearningUnitFactory(title="Heirat", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
create_learning_content_transferauftrag("Patrizia & Marco heiraten", circle)
|
||||
LearningContentFactory(
|
||||
title="Fachcheck Heirat",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Circle beenden", parent=circle)
|
||||
create_learning_content_beenden(circle)
|
||||
|
||||
|
||||
def create_circle_abschluss(lp, title="Abschluss"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="Ohne Lösungsvorschlag – kein Verkauf! Auf der Basis der umfassenden Analyse erstellst du konkrete Lösungsvorschläge. Es ist ein wichtiger Erfolgsfaktor diese Lösungsvorschläge, den Kundinnen und Kunden verständlich zu erklären.",
|
||||
goals=[
|
||||
("goal", "Anträge ausfüllen"),
|
||||
("goal", "Weiterempfehlungen erhalten"),
|
||||
("goal", "Gespräch abschliessen"),
|
||||
("goal", "Termin nachbearbeiten"),
|
||||
],
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch")
|
||||
create_standard_learning_unit(
|
||||
"Patrizia & Marco sichern sich ab",
|
||||
parent=circle,
|
||||
category_name="Einkommenssicherung",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply")
|
||||
create_standard_learning_unit(
|
||||
"Rafael Fasel wechselt sein Auto",
|
||||
parent=circle,
|
||||
category_name="Fahrzeug",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rafael-fasel-wechselt-sein-auto-abschluss-xapi-WbFBv-4y/index.html",
|
||||
check_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach-check-fahrzeug-xapi-LqpAWv1J/index.html",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Rafael Fasel zieht von zu Hause aus",
|
||||
parent=circle,
|
||||
category_name="Haushalt",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Emma und Ayla campen durch Amerika",
|
||||
parent=circle,
|
||||
category_name="Reisen",
|
||||
wbt_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-abschluss-xapi-Qv4X-yua/index.html",
|
||||
check_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach_check_reisen/index.html",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Herr und Frau Russo planen ihre Pensionierung",
|
||||
parent=circle,
|
||||
category_name="Pensionierung",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Familie Babic erwartet Nachwuchs",
|
||||
parent=circle,
|
||||
category_name="Gesundheit",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Anne Fleur übernimmt den Blumenladen",
|
||||
parent=circle,
|
||||
category_name="KMU",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice")
|
||||
LearningUnitFactory(title="Auswandern", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Emma und Ayla wandern nach Amerika aus",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Fachcheck Auswandern",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Circle beenden", parent=circle)
|
||||
create_learning_content_beenden(circle)
|
||||
|
||||
|
||||
def create_circle_betreuen(lp, title="Betreuen"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="Einen Kunden einmal zu beraten ist eine Sache. Einen Kunden nachhaltig zu betreuen eine andere! In diesem Circle lernst du, wie deine Kunden zufrieden bleiben und du dein Portfolio ausbauen kannst.",
|
||||
goals=[
|
||||
("goal", "Cross- und Upselling anwenden"),
|
||||
("goal", "Bestehende Verträge anpassen"),
|
||||
("goal", "Bestehende Kunden pflegen"),
|
||||
("goal", "Prozess im Schadenfall erklären"),
|
||||
],
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch")
|
||||
create_standard_learning_unit(
|
||||
"Patrizia Feller macht sich selbsständig",
|
||||
parent=circle,
|
||||
category_name="Selbstständigkeit",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Anwenden", parent=circle, icon="it-icon-ls-apply")
|
||||
create_standard_learning_unit(
|
||||
"Familie Feller Bonsera kaufen ein Haus",
|
||||
parent=circle,
|
||||
category_name="Wohneigentum",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Rafael Fasel hat Ärger mit dem Vermieter",
|
||||
parent=circle,
|
||||
category_name="Rechtsstreitigkeiten",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Familie Babic spart auf ein Ziel",
|
||||
parent=circle,
|
||||
category_name="Sparen",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Chiara übernimmt das Haus der Eltern",
|
||||
parent=circle,
|
||||
category_name="Erben / Vererben",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice")
|
||||
LearningUnitFactory(title="Bauen", parent=circle)
|
||||
create_standard_learning_unit(
|
||||
"Blumenladen Fleur expandiert",
|
||||
parent=circle,
|
||||
category_name="Wohneigentum",
|
||||
learning_unit_title="Bauen",
|
||||
)
|
||||
create_standard_learning_unit(
|
||||
"Davide & Giulia verkaufen ihr Haus an Chiara",
|
||||
parent=circle,
|
||||
category_name="Wohneigentum",
|
||||
learning_unit_title="Hausverkauf",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Circle beenden", parent=circle)
|
||||
create_learning_content_beenden(circle)
|
||||
|
||||
|
||||
def create_circle_vernetzen(lp, title="Vernetzen"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="Du suchst nach einer Möglichkeit, das Gelernte noch besser zu vernetzen? Unsere Onlinetraining und/oder Webinare können dich dabei unterstützen.",
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Lerninhalt offen",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(
|
||||
title="Online-Trainings", parent=circle, icon="it-icon-ls-watch"
|
||||
)
|
||||
LearningUnitFactory(title="Lerneinheit offen", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Lerninhalt offen",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(
|
||||
title="Präsenz-Trainings", parent=circle, icon="it-icon-ls-watch"
|
||||
)
|
||||
LearningUnitFactory(title="Lerneinheit offen", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Lerninhalt offen",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Lerneinheit offen", parent=circle)
|
||||
create_learning_content_beenden(circle)
|
||||
|
||||
|
||||
def create_circle_pruefung(lp, title="Prüfungsvorbereitung"):
|
||||
circle = CircleFactory(
|
||||
title=title,
|
||||
parent=lp,
|
||||
description="Hier erfährst du alles, was du für die Zulassungsprüfung zum/zur Versicherungsvermittler/-in VBV wissen musst. Du trainierst konkret mit zwei Nullserien, damit du dich zielgerichtet auf die Prüfung vorbereiten kannst.",
|
||||
goals=[
|
||||
("goal", "Aufbau und Struktur der Prüfung"),
|
||||
("goal", "Dauer und Ablauf"),
|
||||
("goal", "Hilfsmittel"),
|
||||
("goal", "Anmeldeprozess"),
|
||||
("goal", "Kosten"),
|
||||
],
|
||||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Prüfung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Anmeldung",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Aufbau und Ablauf der Prüfung - So geht's",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Üben", parent=circle, icon="it-icon-ls-practice")
|
||||
LearningUnitFactory(title="Mach dich fit für die Prüfung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Null-Serie 1",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Null-Serie 2",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Null-Serie 3",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Vernetzen", parent=circle, icon="it-icon-ls-network")
|
||||
LearningUnitFactory(title="Fragen zur Prüfungsvorbereitung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Online-Session",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="FAQ/Blog",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Bereit für die Prüfung", parent=circle)
|
||||
LearningContentFactory(
|
||||
title="Lerninhalt offen",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
|
||||
def create_standard_learning_unit(
|
||||
title, parent, category_name, wbt_url=None, check_url=None, learning_unit_title=None
|
||||
):
|
||||
if learning_unit_title is None:
|
||||
learning_unit_title = category_name
|
||||
|
||||
LearningUnitFactory(
|
||||
title=learning_unit_title,
|
||||
parent=parent,
|
||||
course_category=CourseCategory.objects.get(
|
||||
course_id=COURSE_VERSICHERUNGSVERMITTLERIN_OLD_ID, title=category_name
|
||||
),
|
||||
)
|
||||
|
||||
if category_name in READY_HF:
|
||||
LearningContentFactory(
|
||||
title=f"Mediathek {category_name}",
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/versicherungsvermittler-in-media/category/{slugify(category_name)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
else:
|
||||
LearningContentFactory(
|
||||
title="Mediathek",
|
||||
parent=parent,
|
||||
)
|
||||
|
||||
if wbt_url is None:
|
||||
LearningContentFactory(
|
||||
title=title,
|
||||
parent=parent,
|
||||
)
|
||||
else:
|
||||
LearningContentFactory(
|
||||
title=title,
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"learningmodule",
|
||||
LearningModuleBlockFactory(url=wbt_url),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
if check_url is None:
|
||||
LearningContentFactory(
|
||||
title=f"Fachcheck {category_name}",
|
||||
parent=parent,
|
||||
)
|
||||
else:
|
||||
LearningContentFactory(
|
||||
title=f"Fachcheck {category_name}",
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"test",
|
||||
TestBlockFactory(url=check_url),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
def create_learning_content_beenden(parent):
|
||||
LearningContentFactory(
|
||||
title="Hier entsteht die Lernsequenz «beenden»",
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"resource",
|
||||
ResourceBlockFactory(
|
||||
url="https://www.vbv.ch/",
|
||||
description="Platzhalter Text für Lernsequenz «beenden»:",
|
||||
text=RichText(
|
||||
"""
|
||||
<h2 data-block-key="pwyep">Hier entsteht die Lernsequenz \u00abbeenden\u00bb</h2><h3
|
||||
data-block-key="dppb3">Reflektiert</h3>
|
||||
<img src="/static/media/demo_oktober/beenden.jpg" style="
|
||||
float: right;
|
||||
margin-left: 32px;
|
||||
margin-bottom: 32px;
|
||||
">
|
||||
<p data-block-key="bho67">Du hast dich im
|
||||
Circle mit bestimmten Handlungskompetenzen auseinandergesetzt und dir zu verschiedenen
|
||||
Handlungsfeldern Fachkenntnisse angeeignet. Es handelt sich hier um viel Lernstoff,
|
||||
der verarbeitet werden muss.</p><p data-block-key="f547i">Deshalb hast du bereits am
|
||||
Ende jeder Lerneinheit eine Selbsteinsch\u00e4tzung der angestrebten
|
||||
Handlungskompetenzen vorgenommen. Nun ist es Zeit, nochmals auf das KompetenzNavi zu
|
||||
schauen. Wo sind noch L\u00fccken? Was braucht es noch? Reflektiere hier nochmals
|
||||
deine Erfahrungen. Dies kann in Form eines Lerntagebuchs und/oder im Austausch mit
|
||||
deiner Lernbegleitung passieren.</p><h3 data-block-key="7ljuq">Wieso ist dies
|
||||
sinnvoll?</h3><p data-block-key="7sf2">Das F\u00fchren eines Lerntagebuchs und das
|
||||
Beantworten von Reflexionsfragen helfen dir den eigenen Lern- und Denkprozess sichtbar
|
||||
und begreifbar zu machen. Es deckt deine pers\u00f6nlichen St\u00e4rken und
|
||||
Schw\u00e4chen w\u00e4hrend der Erarbeitung auf und hilft dir, dich laufend zu
|
||||
verbessern.</p><p data-block-key="ecq4l">Die folgenden Fragestellungen k\u00f6nnen dir
|
||||
dabei helfen.</p><h3 data-block-key="9mbpa">Reflexionsbeispiel zum Lerninhalt:</h3>
|
||||
<ul>
|
||||
<li data-block-key="bgr7s">Was gelingt mir bereits gut?</li>
|
||||
<li data-block-key="72mrj">Wo muss ich mich noch vertiefen oder nochmals repetieren?
|
||||
</li>
|
||||
<li data-block-key="3gq01">Blick auf das KompetenzNavi sch\u00e4rfen</li>
|
||||
<li data-block-key="8443s">Was nehme ich mit?</li>
|
||||
<li data-block-key="4nstg">Was m\u00f6chte ich nochmals mit meiner Lernbegleitung
|
||||
anschauen?
|
||||
</li>
|
||||
</ul><h3 data-block-key="6us0c">Reflexionsbeispiele zum Vorgehen/Verhalten:</h3>
|
||||
<ul>
|
||||
<li data-block-key="5ih9d">Wie habe ich mich auf den Circle vorbereitet (z.B. Lernzeit
|
||||
eingeplant)?
|
||||
</li>
|
||||
<li data-block-key="6piqr">Wie gut ist mir die Einhaltung der Lernzeiten gelungen? Was
|
||||
f\u00fchrte zum Erfolg/Misserfolg?
|
||||
</li>
|
||||
<li data-block-key="dglus">Wie bin ich beim Lernen vorgegangen (Einsatz von
|
||||
Lernmethoden)?
|
||||
</li>
|
||||
<li data-block-key="53o3r">Was will ich f\u00fcr den n\u00e4chsten Circle im
|
||||
Lernprozess \u00e4ndern/verbessern?
|
||||
</li>
|
||||
</ul><h3 data-block-key="86e5g">Tools, die du f\u00fcr deine Reflexion in Form eines
|
||||
Lerntagebuches verwenden kannst:</h3>
|
||||
<ul>
|
||||
<li data-block-key="16m0n">OneNote</li>
|
||||
<li data-block-key="disfa">Miroboard</li>
|
||||
<li data-block-key="2sr1l">Worddokument</li>
|
||||
<li data-block-key="5lfsl">Powerpointpr\u00e4sentation</li>
|
||||
<li data-block-key="fvlkb">Notizbuch</li>
|
||||
</ul><p data-block-key="fu5sc">Der Vorteil eines digitalen Lerntagebuchs besteht in
|
||||
erster Linie darin, dass sehr einfach Inhalte strukturiert, erg\u00e4nzt und
|
||||
bearbeitet werden k\u00f6nnen.</p>
|
||||
"""
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
def create_learning_content_transferauftrag(title, parent):
|
||||
LearningContentFactory(
|
||||
title=title,
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"assignment",
|
||||
AssignmentBlockFactory(
|
||||
url="https://www.vbv.ch/",
|
||||
description="Platzhalter Text für Lernsequenz «üben»:",
|
||||
text=RichText(
|
||||
"""
|
||||
<h2 data-block-key="pwyep">Hier entsteht die Lernsequenz «üben»</h2><h3
|
||||
data-block-key="dppb3">Praxisorientiert</h3>
|
||||
<p data-block-key="bho67">Die Lernsequenz «üben» fordert die Teilnehmenden auf, in der eigenen Organisation anhand eines Transferauftrages eine entsprechende Handlungssituation durchzuführen.</p>
|
||||
<p data-block-key="f547i">Der Auftrag unterstützt den Transfer in die Praxis und nimmt einzelne Themen aus dem jeweiligen Circle nochmals auf.</p>
|
||||
<p data-block-key="f547i">Der Teilnehmende wird sein Ergebnis in MyVBV hochladen.</p>
|
||||
<p data-block-key="f547i">Feedback erfolgt durch die Lernbegleitung oder durch weitere vom Teilnehmenden definierte Personen.<br>Ein Abgleich mit Musterlösungen wird wo sinnvoll angeboten</p>
|
||||
<p data-block-key="f547i">Zusätzlich zum Auftrag wird auf das relevante Fachwissen aus der Mediathek verwiesen und wo sinnvoll Hilfsmittel zur Verfügung gestellt.</p>
|
||||
<h3 data-block-key="7ljuq">Hier siehst du ein Beispiel eines Transferauftrages mit einer entsprechenden Musterlösung. </h3>
|
||||
<p data-block-key="7sf2">Schnuppere mal rein. Viel Spass!</p>
|
||||
<p>
|
||||
<img src="/static/media/demo_oktober/der_erste_eindruck.jpg">
|
||||
</p>
|
||||
<p>
|
||||
<a href="/static/media/demo_oktober/Transferauftrag_Der_erste_Eindruck_zaehlt.pdf">PDF Transferauftrag: Der erste Eindruck zählt</a><br>
|
||||
<a href="/static/media/demo_oktober/Transferauftrag_Der_erste_Eindruck_zaehlt_Musterlösung.pdf">PDF Transferauftrag: Der erste Eindruck zählt - Lösung</a>
|
||||
</p>
|
||||
"""
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
|
@ -12,19 +12,18 @@ from vbv_lernwelt.core.admin import User
|
|||
from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_ID
|
||||
from vbv_lernwelt.course.models import CourseCategory, CoursePage
|
||||
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||
AssignmentBlockFactory,
|
||||
CircleFactory,
|
||||
FeedbackBlockFactory,
|
||||
LearningContentFactory,
|
||||
LearningModuleBlockFactory,
|
||||
LearningContentFeedbackFactory,
|
||||
LearningContentLearningModuleFactory,
|
||||
LearningContentMediaLibraryFactory,
|
||||
LearningContentPlaceholderFactory,
|
||||
LearningContentRichTextFactory,
|
||||
LearningContentTestFactory,
|
||||
LearningContentVideoFactory,
|
||||
LearningPathFactory,
|
||||
LearningSequenceFactory,
|
||||
LearningUnitFactory,
|
||||
MediaLibraryBlockFactory,
|
||||
ResourceBlockFactory,
|
||||
TestBlockFactory,
|
||||
TopicFactory,
|
||||
VideoBlockFactory,
|
||||
)
|
||||
from vbv_lernwelt.learnpath.vv_circle_goals import GoalsType, VV_CIRCLE_GOALS
|
||||
|
||||
|
|
@ -146,20 +145,13 @@ def create_circle_basis(lp, title="Basis"):
|
|||
)
|
||||
LearningSequenceFactory(title="Einführung", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentVideoFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Aufbau myVBV",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -169,19 +161,19 @@ def create_circle_basis(lp, title="Basis"):
|
|||
title="Lerntechnik, Lernbegleitung, Lernpartner/-in und Einführung in MyVBV",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Qualifikationsprofil und Zulassungsprüfung",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Lege dir eine Lernstrategie zurecht",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Such dir eine/n Lernbegleiter/-in, einen Lern-Buddy und plane deine Lernzeiten",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -191,27 +183,27 @@ def create_circle_basis(lp, title="Basis"):
|
|||
title="Mein neuer Job, Arbeitstechnik, Soziale Medien, Datenschutz und Beratungspflichten",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mein neuer Job",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Organisiere deinen Arbeitsalltag",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Soziale Medien und Datenschutz",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Beraterpflichten (inkl. VBV-WBT)",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck Beraterpflichten",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -221,46 +213,39 @@ def create_circle_basis(lp, title="Basis"):
|
|||
title="Basiswissen Versicherungen, VVG",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Einstieg in die Versicherung",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Basiswissen Versicherungen (inkl. VBV-WBT)",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="VVG im Versicherungsalltag (inkl. VBV-WBT)",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck Versicherungswirtschaft",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck Versicherungsrecht",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Reflexion, Feedback", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Reflexion",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
LearningContentFeedbackFactory(
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -282,68 +267,61 @@ wie du dein Netzwerk aufbauen und erweitern kannst, um damit neue Kunden zu gewi
|
|||
)
|
||||
LearningSequenceFactory(title="Einführung", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Verkaufsgrundlagen", parent=circle)
|
||||
LearningUnitFactory(title="Verkaufsgrundlagen", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Die ersten Schritte im Verkauf",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Sich und das Unternehmen vorstellen",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck Verkaufsgrundlagen",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Selbsteinschätzung",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Kundenakquise", parent=circle)
|
||||
LearningUnitFactory(title="Kundenakquise", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Vom Lead zum Termin/Telefon auf Empfehlung/Neukundengewinnung",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mein Kundenstamm",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Selbsteinschätzung",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Reflexion, Feedback", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Reflexion",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
LearningContentFeedbackFactory(
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -354,30 +332,16 @@ def create_circle_fahrzeug(lp, title="Fahrzeug"):
|
|||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentVideoFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Einstieg", parent=circle)
|
||||
|
|
@ -422,31 +386,17 @@ def create_circle_fahrzeug(lp, title="Fahrzeug"):
|
|||
|
||||
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Reflexion, Feedback", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentTestFactory(
|
||||
title=f"Fachcheck",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"test",
|
||||
TestBlockFactory(
|
||||
url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach-check-fahrzeug-xapi-LqpAWv1J/index.html"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/fach-check-fahrzeug-xapi-LqpAWv1J/index.html",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Reflexion",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
LearningContentFeedbackFactory(
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -457,30 +407,16 @@ def create_circle_rechtsstreitigkeiten(lp, title="Rechtsstreitigkeiten"):
|
|||
)
|
||||
LearningSequenceFactory(title="Einführung", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentVideoFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Rechtsstreitigkeiten", parent=circle)
|
||||
|
|
@ -503,30 +439,16 @@ def create_circle_reisen(lp, title="Reisen"):
|
|||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentVideoFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Einstieg", parent=circle)
|
||||
|
|
@ -581,30 +503,16 @@ def create_circle_einkommenssicherung(lp, title="Einkommenssicherung"):
|
|||
)
|
||||
LearningSequenceFactory(title="Einführung", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentVideoFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Einstieg", parent=circle)
|
||||
|
|
@ -664,30 +572,16 @@ def create_circle_standard_small(
|
|||
circle = CircleFactory(**setup_circle_factory_kwargs(title, lp, goals, description))
|
||||
LearningSequenceFactory(title="Einführung", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentVideoFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/versicherungsvermittler-in-media/category/{slugify(title, allow_unicode=True)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/versicherungsvermittler-in-media/category/{slugify(title, allow_unicode=True)}",
|
||||
)
|
||||
|
||||
if lu_title is None:
|
||||
|
|
@ -708,30 +602,16 @@ def create_circle_standard(lp, title, lc_title, goals=None, description=None):
|
|||
circle = CircleFactory(**setup_circle_factory_kwargs(title, lp, goals, description))
|
||||
LearningSequenceFactory(title="Einführung", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentVideoFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"video",
|
||||
VideoBlockFactory(
|
||||
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url="https://player.vimeo.com/video/772512710?h=30f912f15a",
|
||||
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentMediaLibraryFactory(
|
||||
title=f"Mediathek {title}",
|
||||
parent=circle,
|
||||
contents=[
|
||||
(
|
||||
"media_library",
|
||||
MediaLibraryBlockFactory(
|
||||
url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}"
|
||||
),
|
||||
)
|
||||
],
|
||||
content_url=f"/media/versicherungsvermittler-in-media/category/{slugify(title)}",
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Einstieg", parent=circle)
|
||||
|
|
@ -816,82 +696,82 @@ def create_circle_betreuen(lp, title="Betreuen"):
|
|||
)
|
||||
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Verschaff dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Rechtsstreitigkeiten", parent=circle)
|
||||
LearningUnitFactory(title="Rechtsstreitigkeiten", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Rafael Fasel hat Ärger mit seinem Vermieter",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Sparen", parent=circle)
|
||||
LearningUnitFactory(title="Sparen", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Familie Babic spart auf ein Ziel",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Wohneigentum", parent=circle)
|
||||
LearningUnitFactory(title="Wohneigentum", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Familie Bonsera kauft ein Haus",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Selbstständigkeit", parent=circle)
|
||||
LearningUnitFactory(title="Selbstständigkeit", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Patrizia Feller macht sich selbstständig",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Erben/Vererben", parent=circle)
|
||||
LearningUnitFactory(title="Erben/Vererben", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Davide und Giulia vererben ihr Haus",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Fachcheck",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -909,23 +789,23 @@ def create_circle_vernetzen(lp, title="Vernetzen"):
|
|||
)
|
||||
LearningSequenceFactory(title="Einführung ", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Verschaffe dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Training", parent=circle)
|
||||
LearningUnitFactory(title="Onlinetrainings", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Unknown ???",
|
||||
parent=circle,
|
||||
)
|
||||
LearningUnitFactory(title="Webinare", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Unknown ???",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -940,42 +820,42 @@ def create_circle_pruefungsvorbereitung(lp, title="Prüfungsvorbereitung"):
|
|||
)
|
||||
LearningSequenceFactory(title="Einführung ", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Einführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Verschaffe dir einen Überblick",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Mediathek",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Aufbau", parent=circle)
|
||||
LearningUnitFactory(title="Aufbau und Struktur", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Unknown ???",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Nullserien", parent=circle)
|
||||
LearningUnitFactory(title="Schriftliche Nullserien", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Nullserie 1",
|
||||
parent=circle,
|
||||
)
|
||||
LearningUnitFactory(title="Mündliche Nullserien", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Nullserie 1 - Aufgabe",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Nullserie 1 - Lösung",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Nullserie 2 - Aufgabe",
|
||||
parent=circle,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Nullserie 2 - Lösung",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -991,7 +871,7 @@ def create_circle_pruefung(lp, title="Prüfung"):
|
|||
)
|
||||
LearningSequenceFactory(title="Anmeldung", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Anmeldung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Anmeldung",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -1000,14 +880,14 @@ def create_circle_pruefung(lp, title="Prüfung"):
|
|||
title="Durchführung", parent=circle, icon="it-icon-ls-start"
|
||||
)
|
||||
LearningUnitFactory(title="Durchführung", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Durchführung",
|
||||
parent=circle,
|
||||
)
|
||||
|
||||
LearningSequenceFactory(title="Feedback", parent=circle, icon="it-icon-ls-start")
|
||||
LearningUnitFactory(title="Feedback", parent=circle)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Feedback",
|
||||
parent=circle,
|
||||
)
|
||||
|
|
@ -1034,20 +914,15 @@ def create_standard_learning_unit(
|
|||
)
|
||||
|
||||
if wbt_url is None:
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title=title,
|
||||
parent=parent,
|
||||
)
|
||||
else:
|
||||
LearningContentFactory(
|
||||
LearningContentLearningModuleFactory(
|
||||
title=title,
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"learningmodule",
|
||||
LearningModuleBlockFactory(url=wbt_url),
|
||||
)
|
||||
],
|
||||
content_url=wbt_url,
|
||||
)
|
||||
|
||||
competence_page = CompetencePage.objects.get(competence_id=competence_id)
|
||||
|
|
@ -1063,42 +938,30 @@ def create_learning_sequence_transfer(parent, title, lc_praxis_title=None):
|
|||
LearningSequenceFactory(title="Transfer", parent=parent, icon="it-icon-ls-end")
|
||||
LearningUnitFactory(title="Transfer, Reflexion, Feedback", parent=parent)
|
||||
if lc_praxis_title:
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title=lc_praxis_title,
|
||||
parent=parent,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title=f"Fachcheck {title}",
|
||||
parent=parent,
|
||||
)
|
||||
LearningContentFactory(
|
||||
LearningContentPlaceholderFactory(
|
||||
title="Reflexion",
|
||||
parent=parent,
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
LearningContentPlaceholderFactory(
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
def create_learning_content_beenden(parent):
|
||||
LearningContentFactory(
|
||||
LearningContentRichTextFactory(
|
||||
title="Hier entsteht die Lernsequenz «beenden»",
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"resource",
|
||||
ResourceBlockFactory(
|
||||
url="https://www.vbv.ch/",
|
||||
description="Platzhalter Text für Lernsequenz «beenden»:",
|
||||
text=RichText(
|
||||
"""
|
||||
content_url="https://www.vbv.ch/",
|
||||
description=RichText(
|
||||
"""
|
||||
<h2 data-block-key="pwyep">Hier entsteht die Lernsequenz \u00abbeenden\u00bb</h2><h3
|
||||
data-block-key="dppb3">Reflektiert</h3>
|
||||
<img src="/static/media/demo_oktober/beenden.jpg" style="
|
||||
|
|
@ -1156,35 +1019,20 @@ def create_learning_content_beenden(parent):
|
|||
erster Linie darin, dass sehr einfach Inhalte strukturiert, erg\u00e4nzt und
|
||||
bearbeitet werden k\u00f6nnen.</p>
|
||||
"""
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
LearningContentFactory(
|
||||
title="Feedback",
|
||||
LearningContentPlaceholderFactory(
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"feedback",
|
||||
FeedbackBlockFactory(),
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
def create_learning_content_transferauftrag(title, parent):
|
||||
LearningContentFactory(
|
||||
LearningContentRichTextFactory(
|
||||
title=title,
|
||||
parent=parent,
|
||||
contents=[
|
||||
(
|
||||
"assignment",
|
||||
AssignmentBlockFactory(
|
||||
url="https://www.vbv.ch/",
|
||||
description="Platzhalter Text für Lernsequenz «üben»:",
|
||||
text=RichText(
|
||||
"""
|
||||
content_url="https://www.vbv.ch/",
|
||||
description=RichText(
|
||||
"""
|
||||
<h2 data-block-key="pwyep">Hier entsteht die Lernsequenz «üben»</h2><h3
|
||||
data-block-key="dppb3">Praxisorientiert</h3>
|
||||
<p data-block-key="bho67">Die Lernsequenz «üben» fordert die Teilnehmenden auf, in der eigenen Organisation anhand eines Transferauftrages eine entsprechende Handlungssituation durchzuführen.</p>
|
||||
|
|
@ -1202,8 +1050,5 @@ def create_learning_content_transferauftrag(title, parent):
|
|||
<a href="/static/media/demo_oktober/Transferauftrag_Der_erste_Eindruck_zaehlt_Musterlösung.pdf">PDF Transferauftrag: Der erste Eindruck zählt - Lösung</a>
|
||||
</p>
|
||||
"""
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
# Generated by Django 3.2.13 on 2023-03-31 16:22
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
import wagtail.blocks
|
||||
import wagtail.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
|
@ -11,8 +10,9 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
("assignment", "0003_initial"),
|
||||
("wagtailcore", "0083_workflowcontenttype"),
|
||||
("course", "0001_initial"),
|
||||
("wagtailcore", "0069_log_entry_jsonfield"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
@ -39,7 +39,7 @@ class Migration(migrations.Migration):
|
|||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContent",
|
||||
name="LearningContentAttendanceDay",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
|
|
@ -53,129 +53,172 @@ class Migration(migrations.Migration):
|
|||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
(
|
||||
"contents",
|
||||
wagtail.fields.StreamField(
|
||||
[
|
||||
(
|
||||
"video",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"resource",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
(
|
||||
"text",
|
||||
wagtail.blocks.RichTextBlock(
|
||||
required=False
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"exercise",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"learningmodule",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"online_training",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"media_library",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"document",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"test",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"book",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"assignment",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
(
|
||||
"text",
|
||||
wagtail.blocks.RichTextBlock(
|
||||
required=False
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"placeholder",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
("feedback", wagtail.blocks.StructBlock([])),
|
||||
],
|
||||
use_json_field=None,
|
||||
),
|
||||
),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Learning Content",
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContentFeedback",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="wagtailcore.page",
|
||||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContentLearningModule",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="wagtailcore.page",
|
||||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContentMediaLibrary",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="wagtailcore.page",
|
||||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContentPlaceholder",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="wagtailcore.page",
|
||||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContentRichText",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="wagtailcore.page",
|
||||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContentTest",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="wagtailcore.page",
|
||||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContentVideo",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="wagtailcore.page",
|
||||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
|
|
@ -270,4 +313,35 @@ class Migration(migrations.Migration):
|
|||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="LearningContentAssignment",
|
||||
fields=[
|
||||
(
|
||||
"page_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="wagtailcore.page",
|
||||
),
|
||||
),
|
||||
("minutes", models.PositiveIntegerField(default=15)),
|
||||
("description", wagtail.fields.RichTextField(blank=True)),
|
||||
("content_url", models.TextField(blank=True)),
|
||||
(
|
||||
"content_assignment",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
related_name="+",
|
||||
to="assignment.assignment",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"abstract": False,
|
||||
},
|
||||
bases=("wagtailcore.page",),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,137 +0,0 @@
|
|||
# Generated by Django 3.2.13 on 2023-04-04 08:28
|
||||
|
||||
import wagtail.blocks
|
||||
import wagtail.fields
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("learnpath", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="learningcontent",
|
||||
name="contents",
|
||||
field=wagtail.fields.StreamField(
|
||||
[
|
||||
(
|
||||
"video",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"resource",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
("text", wagtail.blocks.RichTextBlock(required=False)),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"exercise",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"learningmodule",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"online_training",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"media_library",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"document",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"test",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"book",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"assignment",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
(
|
||||
"assignment",
|
||||
wagtail.blocks.PageChooserBlock(
|
||||
help_text="Choose the corresponding assignment.",
|
||||
required=True,
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
(
|
||||
"placeholder",
|
||||
wagtail.blocks.StructBlock(
|
||||
[
|
||||
("description", wagtail.blocks.TextBlock()),
|
||||
("url", wagtail.blocks.TextBlock()),
|
||||
]
|
||||
),
|
||||
),
|
||||
("feedback", wagtail.blocks.StructBlock([])),
|
||||
(
|
||||
"attendance_day",
|
||||
wagtail.blocks.StructBlock(
|
||||
[("description", wagtail.blocks.TextBlock())]
|
||||
),
|
||||
),
|
||||
],
|
||||
use_json_field=None,
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
@ -2,28 +2,12 @@ import re
|
|||
|
||||
from django.db import models
|
||||
from django.utils.text import slugify
|
||||
from wagtail.admin.panels import FieldPanel, StreamFieldPanel
|
||||
from wagtail.blocks import StreamBlock
|
||||
from wagtail.fields import RichTextField, StreamField
|
||||
from wagtail.admin.panels import FieldPanel, PageChooserPanel
|
||||
from wagtail.fields import RichTextField
|
||||
from wagtail.models import Page
|
||||
|
||||
from vbv_lernwelt.core.model_utils import find_available_slug
|
||||
from vbv_lernwelt.course.models import CourseBasePage, CoursePage
|
||||
from vbv_lernwelt.learnpath.models_learning_unit_content import (
|
||||
AssignmentBlock,
|
||||
AttendanceDayBlock,
|
||||
BookBlock,
|
||||
DocumentBlock,
|
||||
ExerciseBlock,
|
||||
FeedbackBlock,
|
||||
LearningModuleBlock,
|
||||
MediaLibraryBlock,
|
||||
OnlineTrainingBlock,
|
||||
PlaceholderBlock,
|
||||
ResourceBlock,
|
||||
TestBlock,
|
||||
VideoBlock,
|
||||
)
|
||||
|
||||
|
||||
class LearningPath(CourseBasePage):
|
||||
|
|
@ -80,7 +64,15 @@ class Circle(CourseBasePage):
|
|||
subpage_types = [
|
||||
"learnpath.LearningSequence",
|
||||
"learnpath.LearningUnit",
|
||||
"learnpath.LearningContent",
|
||||
"learnpath.LearningContentAssignment",
|
||||
"learnpath.LearningContentAttendanceDay",
|
||||
"learnpath.LearningContentFeedback",
|
||||
"learnpath.LearningContentLearningModule",
|
||||
"learnpath.LearningContentMediaLibrary",
|
||||
"learnpath.LearningContentPlaceholder",
|
||||
"learnpath.LearningContentRichText",
|
||||
"learnpath.LearningContentTest",
|
||||
"learnpath.LearningContentVideo",
|
||||
]
|
||||
|
||||
serialize_field_names = [
|
||||
|
|
@ -227,47 +219,31 @@ class LearningUnit(CourseBasePage):
|
|||
|
||||
|
||||
class LearningContent(CourseBasePage):
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
serialize_field_names = [
|
||||
"minutes",
|
||||
"contents",
|
||||
"description",
|
||||
"content_url",
|
||||
]
|
||||
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
minutes = models.PositiveIntegerField(default=15)
|
||||
|
||||
content_blocks = [
|
||||
("video", VideoBlock()),
|
||||
("resource", ResourceBlock()),
|
||||
("exercise", ExerciseBlock()),
|
||||
("learningmodule", LearningModuleBlock()),
|
||||
("online_training", OnlineTrainingBlock()),
|
||||
("media_library", MediaLibraryBlock()),
|
||||
("document", DocumentBlock()),
|
||||
("test", TestBlock()),
|
||||
("book", BookBlock()),
|
||||
("assignment", AssignmentBlock()),
|
||||
("placeholder", PlaceholderBlock()),
|
||||
("feedback", FeedbackBlock()),
|
||||
("attendance_day", AttendanceDayBlock()),
|
||||
]
|
||||
|
||||
contents = StreamField(
|
||||
StreamBlock(content_blocks), blank=False, min_num=1, max_num=1
|
||||
)
|
||||
description = RichTextField(blank=True)
|
||||
content_url = models.TextField(blank=True)
|
||||
|
||||
content_panels = [
|
||||
FieldPanel("title", classname="full title"),
|
||||
FieldPanel("minutes"),
|
||||
StreamFieldPanel("contents"),
|
||||
FieldPanel("content_url"),
|
||||
FieldPanel("description"),
|
||||
]
|
||||
|
||||
def get_admin_display_title(self):
|
||||
display_title = ""
|
||||
|
||||
if len(self.contents) > 0:
|
||||
display_title += f"{self.contents[0].block_type.capitalize()}: "
|
||||
# if len(self.contents) > 0:
|
||||
# display_title += f"{self.contents[0].block_type.capitalize()}: "
|
||||
|
||||
display_title += self.draft_title
|
||||
|
||||
|
|
@ -280,9 +256,6 @@ class LearningContent(CourseBasePage):
|
|||
<span style="margin-left: 8px;">{self.get_admin_display_title()}</span>
|
||||
</span>"""
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Learning Content"
|
||||
|
||||
def get_frontend_url(self):
|
||||
r = re.compile(
|
||||
r"^(?P<coursePart>.+?)-lp-circle-(?P<circlePart>.+?)-lc-(?P<lcPart>.+)$"
|
||||
|
|
@ -297,6 +270,68 @@ class LearningContent(CourseBasePage):
|
|||
super().save(**kwargs)
|
||||
|
||||
|
||||
class LearningContentAttendanceDay(LearningContent):
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
|
||||
class LearningContentVideo(LearningContent):
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
|
||||
class LearningContentPlaceholder(LearningContent):
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
|
||||
class LearningContentFeedback(LearningContent):
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
|
||||
class LearningContentLearningModule(LearningContent):
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
|
||||
class LearningContentMediaLibrary(LearningContent):
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
|
||||
class LearningContentTest(LearningContent):
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
|
||||
class LearningContentRichText(LearningContent):
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
|
||||
class LearningContentAssignment(LearningContent):
|
||||
serialize_field_names = LearningContent.serialize_field_names + [
|
||||
"content_assignment_id",
|
||||
]
|
||||
parent_page_types = ["learnpath.Circle"]
|
||||
subpage_types = []
|
||||
|
||||
content_assignment = models.ForeignKey(
|
||||
"assignment.Assignment",
|
||||
on_delete=models.PROTECT,
|
||||
related_name="+",
|
||||
)
|
||||
|
||||
content_panels = [
|
||||
FieldPanel("title", classname="full title"),
|
||||
FieldPanel("minutes"),
|
||||
PageChooserPanel("content_assignment", "assignment.Assignment"),
|
||||
FieldPanel("content_url"),
|
||||
FieldPanel("description"),
|
||||
]
|
||||
|
||||
|
||||
def find_slug_with_parent_prefix(page, type_prefix, slug_postfix=None):
|
||||
parent_slug = page.get_ancestors().exact_type(LearningPath, Circle).last().slug
|
||||
if parent_slug:
|
||||
|
|
|
|||
|
|
@ -1,106 +0,0 @@
|
|||
from wagtail import blocks
|
||||
from wagtail.blocks import PageChooserBlock
|
||||
|
||||
|
||||
class AssignmentBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
assignment = PageChooserBlock(
|
||||
required=True, help_text="Choose the corresponding assignment."
|
||||
)
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class BookBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class DocumentBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class ExerciseBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class LearningModuleBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class MediaLibraryBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class OnlineTrainingBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class ResourceBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
text = blocks.RichTextBlock(required=False)
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class TestBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class VideoBlock(blocks.StructBlock):
|
||||
# TODO: Possible video Types for the user, upload file, add URL
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class PlaceholderBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
url = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class FeedbackBlock(blocks.StructBlock):
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
||||
|
||||
class AttendanceDayBlock(blocks.StructBlock):
|
||||
description = blocks.TextBlock()
|
||||
|
||||
class Meta:
|
||||
icon = "media"
|
||||
|
|
@ -2,27 +2,20 @@ import wagtail_factories
|
|||
|
||||
from vbv_lernwelt.learnpath.models import (
|
||||
Circle,
|
||||
LearningContent,
|
||||
LearningContentAssignment,
|
||||
LearningContentAttendanceDay,
|
||||
LearningContentFeedback,
|
||||
LearningContentLearningModule,
|
||||
LearningContentMediaLibrary,
|
||||
LearningContentPlaceholder,
|
||||
LearningContentRichText,
|
||||
LearningContentTest,
|
||||
LearningContentVideo,
|
||||
LearningPath,
|
||||
LearningSequence,
|
||||
LearningUnit,
|
||||
Topic,
|
||||
)
|
||||
from vbv_lernwelt.learnpath.models_learning_unit_content import (
|
||||
AssignmentBlock,
|
||||
AttendanceDayBlock,
|
||||
BookBlock,
|
||||
DocumentBlock,
|
||||
ExerciseBlock,
|
||||
FeedbackBlock,
|
||||
LearningModuleBlock,
|
||||
MediaLibraryBlock,
|
||||
OnlineTrainingBlock,
|
||||
PlaceholderBlock,
|
||||
ResourceBlock,
|
||||
TestBlock,
|
||||
VideoBlock,
|
||||
)
|
||||
|
||||
|
||||
class LearningPathFactory(wagtail_factories.PageFactory):
|
||||
|
|
@ -40,97 +33,6 @@ class TopicFactory(wagtail_factories.PageFactory):
|
|||
model = Topic
|
||||
|
||||
|
||||
class VideoBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
url = "https://www.youtube.com/embed/qhPIfxS2hvI"
|
||||
description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam"
|
||||
|
||||
class Meta:
|
||||
model = VideoBlock
|
||||
|
||||
|
||||
class AssignmentBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Beispiel Auftrag"
|
||||
|
||||
class Meta:
|
||||
model = AssignmentBlock
|
||||
|
||||
|
||||
class BookBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Beispiel Buch"
|
||||
|
||||
class Meta:
|
||||
model = BookBlock
|
||||
|
||||
|
||||
class DocumentBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Beispiel Dokument"
|
||||
|
||||
class Meta:
|
||||
model = DocumentBlock
|
||||
|
||||
|
||||
class PlaceholderBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Platzhalter"
|
||||
|
||||
class Meta:
|
||||
model = PlaceholderBlock
|
||||
|
||||
|
||||
class ExerciseBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Beispiel Übung"
|
||||
|
||||
class Meta:
|
||||
model = ExerciseBlock
|
||||
|
||||
|
||||
class LearningModuleBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Beispiel Lernmodul"
|
||||
|
||||
class Meta:
|
||||
model = LearningModuleBlock
|
||||
|
||||
|
||||
class ResourceBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Beispiel Hilfsmittel"
|
||||
|
||||
class Meta:
|
||||
model = ResourceBlock
|
||||
|
||||
|
||||
class OnlineTrainingBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
url = "https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/rise_cmi5_test_export/scormcontent/index.html"
|
||||
description = "Beispiel Rise Modul"
|
||||
|
||||
class Meta:
|
||||
model = OnlineTrainingBlock
|
||||
|
||||
|
||||
class TestBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Beispiel Test"
|
||||
|
||||
class Meta:
|
||||
model = TestBlock
|
||||
|
||||
|
||||
class FeedbackBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
class Meta:
|
||||
model = FeedbackBlock
|
||||
|
||||
|
||||
class MediaLibraryBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Sie erreichen die Mediathek mit einem Klick auf den unteren Link"
|
||||
|
||||
class Meta:
|
||||
model = MediaLibraryBlock
|
||||
|
||||
|
||||
class AttendanceDayBlockFactory(wagtail_factories.StructBlockFactory):
|
||||
description = "Beispiel Präsenztag"
|
||||
|
||||
class Meta:
|
||||
model = AttendanceDayBlock
|
||||
|
||||
|
||||
class CircleFactory(wagtail_factories.PageFactory):
|
||||
title = "Basis"
|
||||
description = """
|
||||
|
|
@ -181,10 +83,91 @@ class LearningUnitFactory(wagtail_factories.PageFactory):
|
|||
model = LearningUnit
|
||||
|
||||
|
||||
class LearningContentFactory(wagtail_factories.PageFactory):
|
||||
class LearningContentAttendanceDayFactory(wagtail_factories.PageFactory):
|
||||
title = "Platzhalter Inhalt"
|
||||
contents = [("placeholder", PlaceholderBlockFactory())]
|
||||
minutes = 15
|
||||
description = "Platzhalter Beschreibung"
|
||||
content_url = ""
|
||||
|
||||
class Meta:
|
||||
model = LearningContent
|
||||
model = LearningContentAttendanceDay
|
||||
|
||||
|
||||
class LearningContentVideoFactory(wagtail_factories.PageFactory):
|
||||
title = "Platzhalter Video"
|
||||
minutes = 15
|
||||
content_url = "https://www.youtube.com/embed/qhPIfxS2hvI"
|
||||
description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
|
||||
|
||||
class Meta:
|
||||
model = LearningContentVideo
|
||||
|
||||
|
||||
class LearningContentPlaceholderFactory(wagtail_factories.PageFactory):
|
||||
title = "Platzhalter Video"
|
||||
minutes = 15
|
||||
content_url = ""
|
||||
description = "Platzhalter"
|
||||
|
||||
class Meta:
|
||||
model = LearningContentPlaceholder
|
||||
|
||||
|
||||
class LearningContentFeedbackFactory(wagtail_factories.PageFactory):
|
||||
title = "Feedback"
|
||||
minutes = 15
|
||||
content_url = ""
|
||||
description = ""
|
||||
|
||||
class Meta:
|
||||
model = LearningContentFeedback
|
||||
|
||||
|
||||
class LearningContentLearningModuleFactory(wagtail_factories.PageFactory):
|
||||
title = "Beispiel Lernmodul"
|
||||
minutes = 15
|
||||
content_url = ""
|
||||
description = ""
|
||||
|
||||
class Meta:
|
||||
model = LearningContentLearningModule
|
||||
|
||||
|
||||
class LearningContentMediaLibraryFactory(wagtail_factories.PageFactory):
|
||||
title = "Mediathek"
|
||||
minutes = 15
|
||||
content_url = ""
|
||||
description = ""
|
||||
|
||||
class Meta:
|
||||
model = LearningContentMediaLibrary
|
||||
|
||||
|
||||
class LearningContentTestFactory(wagtail_factories.PageFactory):
|
||||
title = "Fachcheck"
|
||||
minutes = 15
|
||||
content_url = ""
|
||||
description = ""
|
||||
|
||||
class Meta:
|
||||
model = LearningContentTest
|
||||
|
||||
|
||||
class LearningContentRichTextFactory(wagtail_factories.PageFactory):
|
||||
title = "Rich Text"
|
||||
minutes = 15
|
||||
content_url = ""
|
||||
description = ""
|
||||
|
||||
class Meta:
|
||||
model = LearningContentRichText
|
||||
|
||||
|
||||
class LearningContentAssignmentFactory(wagtail_factories.PageFactory):
|
||||
title = "Geleitete Fallarbeit"
|
||||
minutes = 15
|
||||
content_url = ""
|
||||
description = ""
|
||||
|
||||
class Meta:
|
||||
model = LearningContentAssignment
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from django.test import TestCase
|
|||
|
||||
from vbv_lernwelt.core.create_default_users import create_default_users
|
||||
from vbv_lernwelt.course.creators.test_course import create_test_course
|
||||
from vbv_lernwelt.learnpath.models import LearningContent
|
||||
from vbv_lernwelt.learnpath.models import LearningContentPlaceholder
|
||||
|
||||
|
||||
class SaveSlugTestCase(TestCase):
|
||||
|
|
@ -11,7 +11,7 @@ class SaveSlugTestCase(TestCase):
|
|||
create_test_course(include_uk=False)
|
||||
|
||||
def test_save_willHandleSlug(self):
|
||||
lc_fachcheck = LearningContent.objects.get(title="Fachcheck Reisen")
|
||||
lc_fachcheck = LearningContentPlaceholder.objects.get(title="Fachcheck Reisen")
|
||||
self.assertEqual(
|
||||
lc_fachcheck.slug, "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen"
|
||||
)
|
||||
|
|
@ -19,7 +19,7 @@ class SaveSlugTestCase(TestCase):
|
|||
# only changing minutes should not change slug
|
||||
lc_fachcheck.minutes = 135
|
||||
lc_fachcheck.save()
|
||||
lc_fachcheck = LearningContent.objects.get(id=lc_fachcheck.id)
|
||||
lc_fachcheck = LearningContentPlaceholder.objects.get(id=lc_fachcheck.id)
|
||||
self.assertEqual(
|
||||
lc_fachcheck.slug, "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen"
|
||||
)
|
||||
|
|
@ -27,7 +27,7 @@ class SaveSlugTestCase(TestCase):
|
|||
# changing title should change slug
|
||||
lc_fachcheck.title = "Fachcheck Foobar"
|
||||
lc_fachcheck.save()
|
||||
lc_fachcheck = LearningContent.objects.get(id=lc_fachcheck.id)
|
||||
lc_fachcheck = LearningContentPlaceholder.objects.get(id=lc_fachcheck.id)
|
||||
self.assertEqual(
|
||||
lc_fachcheck.slug, "test-lehrgang-lp-circle-reisen-lc-fachcheck-foobar"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ class MediaLibraryContentBlock(blocks.StructBlock):
|
|||
link_display_text = blocks.CharBlock(max_length=255, default="Link öffnen")
|
||||
url = blocks.TextBlock(default="", required=False)
|
||||
open_window = blocks.BooleanBlock(default=False)
|
||||
page = blocks.PageChooserBlock(
|
||||
page_type=["learnpath.LearningContent"], required=False
|
||||
)
|
||||
# page = blocks.PageChooserBlock(
|
||||
# page_type=["learnpath.LearningContent"], required=False
|
||||
# )
|
||||
|
||||
|
||||
class ExternalLinkBlock(MediaLibraryContentBlock):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.13 on 2023-03-31 16:22
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
import taggit.managers
|
||||
|
|
@ -15,10 +15,10 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
("wagtailcore", "0083_workflowcontenttype"),
|
||||
("course", "0002_initial"),
|
||||
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
("wagtailcore", "0069_log_entry_jsonfield"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
@ -139,15 +139,6 @@ class Migration(migrations.Migration):
|
|||
default=False
|
||||
),
|
||||
),
|
||||
(
|
||||
"page",
|
||||
wagtail.blocks.PageChooserBlock(
|
||||
page_type=[
|
||||
"learnpath.LearningContent"
|
||||
],
|
||||
required=False,
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
|
|
@ -193,15 +184,6 @@ class Migration(migrations.Migration):
|
|||
default=False
|
||||
),
|
||||
),
|
||||
(
|
||||
"page",
|
||||
wagtail.blocks.PageChooserBlock(
|
||||
page_type=[
|
||||
"learnpath.LearningContent"
|
||||
],
|
||||
required=False,
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
|
|
@ -247,15 +229,6 @@ class Migration(migrations.Migration):
|
|||
default=False
|
||||
),
|
||||
),
|
||||
(
|
||||
"page",
|
||||
wagtail.blocks.PageChooserBlock(
|
||||
page_type=[
|
||||
"learnpath.LearningContent"
|
||||
],
|
||||
required=False,
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
|
|
@ -301,15 +274,6 @@ class Migration(migrations.Migration):
|
|||
default=False
|
||||
),
|
||||
),
|
||||
(
|
||||
"page",
|
||||
wagtail.blocks.PageChooserBlock(
|
||||
page_type=[
|
||||
"learnpath.LearningContent"
|
||||
],
|
||||
required=False,
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.13 on 2023-02-08 08:43
|
||||
# Generated by Django 3.2.13 on 2023-05-11 20:06
|
||||
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
|
@ -8,6 +8,7 @@ from django.db import migrations, models
|
|||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
|
|
|
|||
Loading…
Reference in New Issue