Merge branch 'develop' into feature/VBV-297-trainer-landet-direkt-in-cockpit
This commit is contained in:
commit
f33433b77d
|
|
@ -115,16 +115,16 @@ pipelines:
|
||||||
name: deploy prod
|
name: deploy prod
|
||||||
deployment: prod
|
deployment: prod
|
||||||
trigger: manual
|
trigger: manual
|
||||||
|
branches:
|
||||||
|
develop:
|
||||||
|
- step:
|
||||||
|
<<: *deploy
|
||||||
|
deployment: dev
|
||||||
custom:
|
custom:
|
||||||
deploy-stage:
|
deploy-stage:
|
||||||
- step:
|
- step:
|
||||||
<<: *deploy
|
<<: *deploy
|
||||||
deployment: stage
|
deployment: stage
|
||||||
deploy-dev:
|
|
||||||
- step:
|
|
||||||
<<: *deploy
|
|
||||||
deployment: dev
|
|
||||||
|
|
||||||
|
|
||||||
definitions:
|
definitions:
|
||||||
caches:
|
caches:
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import * as log from "loglevel";
|
||||||
log.debug("AppFooter created");
|
log.debug("AppFooter created");
|
||||||
|
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
const hideVersion = import.meta.env.VITE_SENTRY_ENV === "production";
|
||||||
|
|
||||||
async function changeLocale(language: AvailableLanguages) {
|
async function changeLocale(language: AvailableLanguages) {
|
||||||
userStore.setUserLanguages(language);
|
userStore.setUserLanguages(language);
|
||||||
|
|
@ -16,12 +17,19 @@ async function changeLocale(language: AvailableLanguages) {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<footer class="flex flex-col border-t bg-gray-200 px-8 py-4 lg:flex-row">
|
<footer class="flex flex-col border-t bg-gray-200 px-8 py-4 lg:flex-row">
|
||||||
<div>@ 2022 VBV</div>
|
<div>{{ $t("footer.copyright") }}</div>
|
||||||
<div class="lg:ml-8">{{ $t("footer.faq") }}</div>
|
<div class="lg:ml-8">
|
||||||
<div class="lg:ml-8">{{ $t("footer.dataProtection") }}</div>
|
<a :href="$t('footer.dataProtectionLink')">
|
||||||
<div class="lg:ml-8">{{ $t("footer.imprint") }}</div>
|
{{ $t("footer.dataProtectionText") }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="lg:ml-8">
|
||||||
|
<a :href="$t('footer.imprintLink')">
|
||||||
|
{{ $t("footer.imprintText") }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
<div class="flex-grow"></div>
|
<div class="flex-grow"></div>
|
||||||
<div>VBV_VERSION_BUILD_NUMBER_VBV</div>
|
<div :class="{ hidden: hideVersion }">VBV_VERSION_BUILD_NUMBER_VBV</div>
|
||||||
<Menu>
|
<Menu>
|
||||||
<MenuButton class="lg:ml-8" data-cy="language-switch-button">
|
<MenuButton class="lg:ml-8" data-cy="language-switch-button">
|
||||||
<it-icon-globe class="relative top-[2px] h-4 w-4" />
|
<it-icon-globe class="relative top-[2px] h-4 w-4" />
|
||||||
|
|
@ -43,7 +51,9 @@ async function changeLocale(language: AvailableLanguages) {
|
||||||
</MenuItems>
|
</MenuItems>
|
||||||
</div>
|
</div>
|
||||||
</Menu>
|
</Menu>
|
||||||
<div class="lg:ml-8">{{ $t("footer.contact") }}</div>
|
<div class="lg:ml-8">
|
||||||
|
<a :href="$t('footer.contactLink')">{{ $t("footer.contactText") }}</a>
|
||||||
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -131,8 +131,8 @@ const sendFeedback = () => {
|
||||||
<template>
|
<template>
|
||||||
<LearningContentMultiLayout
|
<LearningContentMultiLayout
|
||||||
:title="title"
|
:title="title"
|
||||||
subtitle="Feedback"
|
sub-title="Feedback"
|
||||||
learning-content-type="learnpath.LearningContentFeedback"
|
:learning-content="page"
|
||||||
:show-start-button="stepNo === 0"
|
:show-start-button="stepNo === 0"
|
||||||
:show-next-button="stepNo > 0 && stepNo + 1 < numSteps"
|
:show-next-button="stepNo > 0 && stepNo + 1 < numSteps"
|
||||||
:show-previous-button="stepNo > 0"
|
:show-previous-button="stepNo > 0"
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,6 @@ const emit = defineEmits(["selectCourseSession", "logout"]);
|
||||||
<div class="ml-6">
|
<div class="ml-6">
|
||||||
<h3>{{ user.first_name }} {{ user.last_name }}</h3>
|
<h3>{{ user.first_name }} {{ user.last_name }}</h3>
|
||||||
<div class="text-sm text-gray-800">{{ user.email }}</div>
|
<div class="text-sm text-gray-800">{{ user.email }}</div>
|
||||||
<div class="text-sm text-gray-800">
|
|
||||||
<router-link class="link" to="/profile">Profil anzeigen</router-link>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ const router = useRouter();
|
||||||
defineProps<{
|
defineProps<{
|
||||||
show: boolean;
|
show: boolean;
|
||||||
courseSession: CourseSession | undefined;
|
courseSession: CourseSession | undefined;
|
||||||
mediaUrl: string | undefined;
|
mediaUrl?: string;
|
||||||
user: UserState | undefined;
|
user: UserState | undefined;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import { PopoverButton } from "@headlessui/vue";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="pb-2 text-lg text-black">{{ $t("general.notification") }}</div>
|
<div class="pb-2 text-lg text-black">{{ $t("general.notification", 2) }}</div>
|
||||||
<div class="border-t bg-white">
|
<div class="border-t bg-white">
|
||||||
<NotificationList :num-notifications-to-show="4" />
|
<NotificationList :num-notifications-to-show="4" />
|
||||||
<router-link to="/notifications">
|
<router-link to="/notifications">
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<div v-if="label" class="mb-2 block">{{ label }}</div>
|
<div v-if="label" class="mb-2 block">{{ label }}</div>
|
||||||
<textarea
|
<textarea
|
||||||
:value="modelValue"
|
:value="modelValue"
|
||||||
class="h-40 w-full border-gray-500"
|
class="h-40 w-full border-gray-500 placeholder-gray-800 placeholder-opacity-100"
|
||||||
:data-cy="`it-textarea-${cyKey}`"
|
:data-cy="`it-textarea-${cyKey}`"
|
||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
:placeholder="placeholder"
|
:placeholder="placeholder"
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-
|
||||||
const documents = {
|
const documents = {
|
||||||
"\n mutation SendFeedbackMutation($input: SendFeedbackInput!) {\n send_feedback(input: $input) {\n feedback_response {\n id\n }\n errors {\n field\n messages\n }\n }\n }\n": types.SendFeedbackMutationDocument,
|
"\n mutation SendFeedbackMutation($input: SendFeedbackInput!) {\n send_feedback(input: $input) {\n feedback_response {\n id\n }\n errors {\n field\n messages\n }\n }\n }\n": types.SendFeedbackMutationDocument,
|
||||||
"\n mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $assignmentUserId: ID\n $completionStatus: String!\n $completionDataString: String!\n $evaluationGrade: Float\n $evaluationPoints: Float\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_grade: $evaluationGrade\n evaluation_points: $evaluationPoints\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_grade\n evaluation_points\n completion_data\n }\n }\n }\n": types.UpsertAssignmentCompletionDocument,
|
"\n mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $assignmentUserId: ID\n $completionStatus: String!\n $completionDataString: String!\n $evaluationGrade: Float\n $evaluationPoints: Float\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_grade: $evaluationGrade\n evaluation_points: $evaluationPoints\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_grade\n evaluation_points\n completion_data\n }\n }\n }\n": types.UpsertAssignmentCompletionDocument,
|
||||||
"\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $assignmentUserId: ID\n ) {\n assignment(id: $assignmentId) {\n id\n content_type\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n performance_objectives\n starting_position\n tasks\n title\n translation_key\n slug\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n }\n assignment_user {\n id\n }\n evaluation_grade\n evaluation_points\n completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument,
|
"\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $assignmentUserId: ID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n }\n assignment_user {\n id\n }\n evaluation_grade\n evaluation_points\n completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument,
|
||||||
"\n query courseQuery($courseId: Int!) {\n course(id: $courseId) {\n id\n slug\n title\n category_name\n learning_path {\n id\n }\n }\n }\n": types.CourseQueryDocument,
|
"\n query courseQuery($courseId: Int!) {\n course(id: $courseId) {\n id\n slug\n title\n category_name\n learning_path {\n id\n }\n }\n }\n": types.CourseQueryDocument,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -44,7 +44,7 @@ export function graphql(source: "\n mutation UpsertAssignmentCompletion(\n $
|
||||||
/**
|
/**
|
||||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||||
*/
|
*/
|
||||||
export function graphql(source: "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $assignmentUserId: ID\n ) {\n assignment(id: $assignmentId) {\n id\n content_type\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n performance_objectives\n starting_position\n tasks\n title\n translation_key\n slug\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n }\n assignment_user {\n id\n }\n evaluation_grade\n evaluation_points\n completion_data\n }\n }\n"): (typeof documents)["\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $assignmentUserId: ID\n ) {\n assignment(id: $assignmentId) {\n id\n content_type\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n performance_objectives\n starting_position\n tasks\n title\n translation_key\n slug\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n }\n assignment_user {\n id\n }\n evaluation_grade\n evaluation_points\n completion_data\n }\n }\n"];
|
export function graphql(source: "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $assignmentUserId: ID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n }\n assignment_user {\n id\n }\n evaluation_grade\n evaluation_points\n completion_data\n }\n }\n"): (typeof documents)["\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $assignmentUserId: ID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n }\n assignment_user {\n id\n }\n evaluation_grade\n evaluation_points\n completion_data\n }\n }\n"];
|
||||||
/**
|
/**
|
||||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,16 @@ export type Scalars = {
|
||||||
JSONString: any;
|
JSONString: any;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** An enumeration. */
|
||||||
|
export enum AssignmentAssignmentAssignmentTypeChoices {
|
||||||
|
/** CASEWORK */
|
||||||
|
Casework = 'CASEWORK',
|
||||||
|
/** PREP_ASSIGNMENT */
|
||||||
|
PrepAssignment = 'PREP_ASSIGNMENT',
|
||||||
|
/** REFLECTION */
|
||||||
|
Reflection = 'REFLECTION'
|
||||||
|
}
|
||||||
|
|
||||||
/** An enumeration. */
|
/** An enumeration. */
|
||||||
export enum AssignmentAssignmentCompletionCompletionStatusChoices {
|
export enum AssignmentAssignmentCompletionCompletionStatusChoices {
|
||||||
/** EVALUATION_IN_PROGRESS */
|
/** EVALUATION_IN_PROGRESS */
|
||||||
|
|
@ -70,6 +80,7 @@ export type AssignmentCompletionType = {
|
||||||
|
|
||||||
export type AssignmentType = CoursePageInterface & {
|
export type AssignmentType = CoursePageInterface & {
|
||||||
__typename?: 'AssignmentType';
|
__typename?: 'AssignmentType';
|
||||||
|
assignment_type: AssignmentAssignmentAssignmentTypeChoices;
|
||||||
content_type?: Maybe<Scalars['String']>;
|
content_type?: Maybe<Scalars['String']>;
|
||||||
/** Zeitaufwand als Text */
|
/** Zeitaufwand als Text */
|
||||||
effort_required: Scalars['String'];
|
effort_required: Scalars['String'];
|
||||||
|
|
@ -80,11 +91,11 @@ export type AssignmentType = CoursePageInterface & {
|
||||||
evaluation_tasks?: Maybe<Scalars['JSONStreamField']>;
|
evaluation_tasks?: Maybe<Scalars['JSONStreamField']>;
|
||||||
frontend_url?: Maybe<Scalars['String']>;
|
frontend_url?: Maybe<Scalars['String']>;
|
||||||
id?: Maybe<Scalars['ID']>;
|
id?: Maybe<Scalars['ID']>;
|
||||||
|
/** Erläuterung der Ausgangslage */
|
||||||
|
intro_text: Scalars['String'];
|
||||||
live?: Maybe<Scalars['Boolean']>;
|
live?: Maybe<Scalars['Boolean']>;
|
||||||
performance_objectives?: Maybe<Scalars['JSONStreamField']>;
|
performance_objectives?: Maybe<Scalars['JSONStreamField']>;
|
||||||
slug?: Maybe<Scalars['String']>;
|
slug?: Maybe<Scalars['String']>;
|
||||||
/** Erläuterung der Ausgangslage */
|
|
||||||
starting_position: Scalars['String'];
|
|
||||||
tasks?: Maybe<Scalars['JSONStreamField']>;
|
tasks?: Maybe<Scalars['JSONStreamField']>;
|
||||||
title?: Maybe<Scalars['String']>;
|
title?: Maybe<Scalars['String']>;
|
||||||
translation_key?: Maybe<Scalars['String']>;
|
translation_key?: Maybe<Scalars['String']>;
|
||||||
|
|
@ -273,7 +284,7 @@ export type AssignmentCompletionQueryQueryVariables = Exact<{
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
|
|
||||||
export type AssignmentCompletionQueryQuery = { __typename?: 'Query', assignment?: { __typename?: 'AssignmentType', id?: string | null, content_type?: string | null, evaluation_description: string, evaluation_document_url: string, evaluation_tasks?: any | null, performance_objectives?: any | null, starting_position: string, tasks?: any | null, title?: string | null, translation_key?: string | null, slug?: string | null } | null, assignment_completion?: { __typename?: 'AssignmentCompletionType', id: string, completion_status: AssignmentAssignmentCompletionCompletionStatusChoices, submitted_at?: any | null, evaluation_submitted_at?: any | null, evaluation_grade?: number | null, evaluation_points?: number | null, completion_data?: any | null, evaluation_user?: { __typename?: 'UserType', id: string } | null, assignment_user: { __typename?: 'UserType', id: string } } | null };
|
export type AssignmentCompletionQueryQuery = { __typename?: 'Query', assignment?: { __typename?: 'AssignmentType', assignment_type: AssignmentAssignmentAssignmentTypeChoices, content_type?: string | null, effort_required: string, evaluation_description: string, evaluation_document_url: string, evaluation_tasks?: any | null, id?: string | null, intro_text: string, performance_objectives?: any | null, slug?: string | null, tasks?: any | null, title?: string | null, translation_key?: string | null } | null, assignment_completion?: { __typename?: 'AssignmentCompletionType', id: string, completion_status: AssignmentAssignmentCompletionCompletionStatusChoices, submitted_at?: any | null, evaluation_submitted_at?: any | null, evaluation_grade?: number | null, evaluation_points?: number | null, completion_data?: any | null, evaluation_user?: { __typename?: 'UserType', id: string } | null, assignment_user: { __typename?: 'UserType', id: string } } | null };
|
||||||
|
|
||||||
export type CourseQueryQueryVariables = Exact<{
|
export type CourseQueryQueryVariables = Exact<{
|
||||||
courseId: Scalars['Int'];
|
courseId: Scalars['Int'];
|
||||||
|
|
@ -285,5 +296,5 @@ export type CourseQueryQuery = { __typename?: 'Query', course?: { __typename?: '
|
||||||
|
|
||||||
export const SendFeedbackMutationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SendFeedbackMutation"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SendFeedbackInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"send_feedback"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"feedback_response"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"field"}},{"kind":"Field","name":{"kind":"Name","value":"messages"}}]}}]}}]}}]} as unknown as DocumentNode<SendFeedbackMutationMutation, SendFeedbackMutationMutationVariables>;
|
export const SendFeedbackMutationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SendFeedbackMutation"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SendFeedbackInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"send_feedback"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"feedback_response"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"errors"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"field"}},{"kind":"Field","name":{"kind":"Name","value":"messages"}}]}}]}}]}}]} as unknown as DocumentNode<SendFeedbackMutationMutation, SendFeedbackMutationMutationVariables>;
|
||||||
export const UpsertAssignmentCompletionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpsertAssignmentCompletion"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"courseSessionId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"assignmentUserId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"completionStatus"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"completionDataString"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"evaluationGrade"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Float"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"evaluationPoints"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Float"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"upsert_assignment_completion"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"assignment_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}}},{"kind":"Argument","name":{"kind":"Name","value":"course_session_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"courseSessionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"assignment_user_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentUserId"}}},{"kind":"Argument","name":{"kind":"Name","value":"completion_status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"completionStatus"}}},{"kind":"Argument","name":{"kind":"Name","value":"completion_data_string"},"value":{"kind":"Variable","name":{"kind":"Name","value":"completionDataString"}}},{"kind":"Argument","name":{"kind":"Name","value":"evaluation_grade"},"value":{"kind":"Variable","name":{"kind":"Name","value":"evaluationGrade"}}},{"kind":"Argument","name":{"kind":"Name","value":"evaluation_points"},"value":{"kind":"Variable","name":{"kind":"Name","value":"evaluationPoints"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"assignment_completion"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"completion_status"}},{"kind":"Field","name":{"kind":"Name","value":"submitted_at"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_submitted_at"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_grade"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_points"}},{"kind":"Field","name":{"kind":"Name","value":"completion_data"}}]}}]}}]}}]} as unknown as DocumentNode<UpsertAssignmentCompletionMutation, UpsertAssignmentCompletionMutationVariables>;
|
export const UpsertAssignmentCompletionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpsertAssignmentCompletion"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"courseSessionId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"assignmentUserId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"completionStatus"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"completionDataString"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"evaluationGrade"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Float"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"evaluationPoints"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Float"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"upsert_assignment_completion"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"assignment_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}}},{"kind":"Argument","name":{"kind":"Name","value":"course_session_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"courseSessionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"assignment_user_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentUserId"}}},{"kind":"Argument","name":{"kind":"Name","value":"completion_status"},"value":{"kind":"Variable","name":{"kind":"Name","value":"completionStatus"}}},{"kind":"Argument","name":{"kind":"Name","value":"completion_data_string"},"value":{"kind":"Variable","name":{"kind":"Name","value":"completionDataString"}}},{"kind":"Argument","name":{"kind":"Name","value":"evaluation_grade"},"value":{"kind":"Variable","name":{"kind":"Name","value":"evaluationGrade"}}},{"kind":"Argument","name":{"kind":"Name","value":"evaluation_points"},"value":{"kind":"Variable","name":{"kind":"Name","value":"evaluationPoints"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"assignment_completion"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"completion_status"}},{"kind":"Field","name":{"kind":"Name","value":"submitted_at"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_submitted_at"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_grade"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_points"}},{"kind":"Field","name":{"kind":"Name","value":"completion_data"}}]}}]}}]}}]} as unknown as DocumentNode<UpsertAssignmentCompletionMutation, UpsertAssignmentCompletionMutationVariables>;
|
||||||
export const AssignmentCompletionQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"assignmentCompletionQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"courseSessionId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"assignmentUserId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"assignment"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"content_type"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_description"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_document_url"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_tasks"}},{"kind":"Field","name":{"kind":"Name","value":"performance_objectives"}},{"kind":"Field","name":{"kind":"Name","value":"starting_position"}},{"kind":"Field","name":{"kind":"Name","value":"tasks"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"translation_key"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}},{"kind":"Field","name":{"kind":"Name","value":"assignment_completion"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"assignment_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}}},{"kind":"Argument","name":{"kind":"Name","value":"course_session_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"courseSessionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"assignment_user_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentUserId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"completion_status"}},{"kind":"Field","name":{"kind":"Name","value":"submitted_at"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_submitted_at"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"assignment_user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_grade"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_points"}},{"kind":"Field","name":{"kind":"Name","value":"completion_data"}}]}}]}}]} as unknown as DocumentNode<AssignmentCompletionQueryQuery, AssignmentCompletionQueryQueryVariables>;
|
export const AssignmentCompletionQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"assignmentCompletionQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"courseSessionId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"assignmentUserId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"assignment"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"assignment_type"}},{"kind":"Field","name":{"kind":"Name","value":"content_type"}},{"kind":"Field","name":{"kind":"Name","value":"effort_required"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_description"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_document_url"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_tasks"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"intro_text"}},{"kind":"Field","name":{"kind":"Name","value":"performance_objectives"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"tasks"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"translation_key"}}]}},{"kind":"Field","name":{"kind":"Name","value":"assignment_completion"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"assignment_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentId"}}},{"kind":"Argument","name":{"kind":"Name","value":"course_session_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"courseSessionId"}}},{"kind":"Argument","name":{"kind":"Name","value":"assignment_user_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"assignmentUserId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"completion_status"}},{"kind":"Field","name":{"kind":"Name","value":"submitted_at"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_submitted_at"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"assignment_user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_grade"}},{"kind":"Field","name":{"kind":"Name","value":"evaluation_points"}},{"kind":"Field","name":{"kind":"Name","value":"completion_data"}}]}}]}}]} as unknown as DocumentNode<AssignmentCompletionQueryQuery, AssignmentCompletionQueryQueryVariables>;
|
||||||
export const CourseQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"courseQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"courseId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"course"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"courseId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"category_name"}},{"kind":"Field","name":{"kind":"Name","value":"learning_path"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode<CourseQueryQuery, CourseQueryQueryVariables>;
|
export const CourseQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"courseQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"courseId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"course"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"courseId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"category_name"}},{"kind":"Field","name":{"kind":"Name","value":"learning_path"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode<CourseQueryQuery, CourseQueryQueryVariables>;
|
||||||
|
|
@ -97,8 +97,10 @@ enum CoreUserLanguageChoices {
|
||||||
}
|
}
|
||||||
|
|
||||||
type AssignmentType implements CoursePageInterface {
|
type AssignmentType implements CoursePageInterface {
|
||||||
|
assignment_type: AssignmentAssignmentAssignmentTypeChoices!
|
||||||
|
|
||||||
"""Erläuterung der Ausgangslage"""
|
"""Erläuterung der Ausgangslage"""
|
||||||
starting_position: String!
|
intro_text: String!
|
||||||
|
|
||||||
"""Zeitaufwand als Text"""
|
"""Zeitaufwand als Text"""
|
||||||
effort_required: String!
|
effort_required: String!
|
||||||
|
|
@ -120,6 +122,18 @@ type AssignmentType implements CoursePageInterface {
|
||||||
performance_objectives: JSONStreamField
|
performance_objectives: JSONStreamField
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""An enumeration."""
|
||||||
|
enum AssignmentAssignmentAssignmentTypeChoices {
|
||||||
|
"""CASEWORK"""
|
||||||
|
CASEWORK
|
||||||
|
|
||||||
|
"""PREP_ASSIGNMENT"""
|
||||||
|
PREP_ASSIGNMENT
|
||||||
|
|
||||||
|
"""REFLECTION"""
|
||||||
|
REFLECTION
|
||||||
|
}
|
||||||
|
|
||||||
scalar JSONStreamField
|
scalar JSONStreamField
|
||||||
|
|
||||||
type AssignmentCompletionType {
|
type AssignmentCompletionType {
|
||||||
|
|
|
||||||
|
|
@ -7,17 +7,19 @@ export const ASSIGNMENT_COMPLETION_QUERY = graphql(`
|
||||||
$assignmentUserId: ID
|
$assignmentUserId: ID
|
||||||
) {
|
) {
|
||||||
assignment(id: $assignmentId) {
|
assignment(id: $assignmentId) {
|
||||||
id
|
assignment_type
|
||||||
content_type
|
content_type
|
||||||
|
effort_required
|
||||||
evaluation_description
|
evaluation_description
|
||||||
evaluation_document_url
|
evaluation_document_url
|
||||||
evaluation_tasks
|
evaluation_tasks
|
||||||
|
id
|
||||||
|
intro_text
|
||||||
performance_objectives
|
performance_objectives
|
||||||
starting_position
|
slug
|
||||||
tasks
|
tasks
|
||||||
title
|
title
|
||||||
translation_key
|
translation_key
|
||||||
slug
|
|
||||||
}
|
}
|
||||||
assignment_completion(
|
assignment_completion(
|
||||||
assignment_id: $assignmentId
|
assignment_id: $assignmentId
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import { nextTick } from "vue";
|
||||||
import { createI18n } from "vue-i18n";
|
import { createI18n } from "vue-i18n";
|
||||||
|
|
||||||
// https://vue-i18n.intlify.dev/guide/advanced/lazy.html
|
// https://vue-i18n.intlify.dev/guide/advanced/lazy.html
|
||||||
export const SUPPORT_LOCALES: AvailableLanguages[] = ["de", "fr"];
|
export const SUPPORT_LOCALES: AvailableLanguages[] = ["de", "fr", "it"];
|
||||||
let i18n: any = null;
|
let i18n: any = null;
|
||||||
|
|
||||||
export function setupI18n(
|
export function setupI18n(
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
{
|
{
|
||||||
|
"Nächste Termine": "Nächste Termine",
|
||||||
|
"Zur Zeit sind keine Termine vorhanden": "Zur Zeit sind keine Termine vorhanden",
|
||||||
"assignment": {
|
"assignment": {
|
||||||
"acceptConditionsDisclaimer": "Bedingungen akzeptieren und Ergebnisse abgeben",
|
"acceptConditionsDisclaimer": "Bedingungen akzeptieren und Ergebnisse abgeben",
|
||||||
"assessmentDocumentDisclaimer": "Diese geleitete Fallarbeit wird auf Grund des folgenden Beurteilungsinstrument bewertet:",
|
"assessmentDocumentDisclaimer": "Diese geleitete Fallarbeit wird auf Grund des folgenden Beurteilungsinstrument bewertet:",
|
||||||
|
|
@ -78,6 +80,7 @@
|
||||||
"yes": "Ja"
|
"yes": "Ja"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
"courses": "Kurse",
|
||||||
"welcome": "Willkommen, {name}"
|
"welcome": "Willkommen, {name}"
|
||||||
},
|
},
|
||||||
"feedback": {
|
"feedback": {
|
||||||
|
|
@ -114,9 +117,13 @@
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"contact": "Kontakt",
|
"contact": "Kontakt",
|
||||||
"dataProtection": "Datenschutzbestimmungen",
|
"contactLink": "https://www.vbv.ch/de/der-vbv/organisation/kontakt",
|
||||||
"faq": "FAQ",
|
"contactText": "Kontakt",
|
||||||
"imprint": "Impressum"
|
"copyright": "© 2023 VBV",
|
||||||
|
"dataProtectionLink": "https://www.vbv.ch/de/datenschutzbestimmungen",
|
||||||
|
"dataProtectionText": "Datenschutzbestimmungen",
|
||||||
|
"imprintLink": "https://www.vbv.ch/de/impressum",
|
||||||
|
"imprintText": "Impressum"
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"back": "zurück",
|
"back": "zurück",
|
||||||
|
|
@ -152,7 +159,8 @@
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
"fr": "Französisch"
|
"fr": "Français",
|
||||||
|
"it": "Italiano"
|
||||||
},
|
},
|
||||||
"learningContent": {
|
"learningContent": {
|
||||||
"markAsDone": "Als erledigt markieren"
|
"markAsDone": "Als erledigt markieren"
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,6 @@ log.debug("DashboardPage created");
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const courseSessionsStore = useCourseSessionsStore();
|
const courseSessionsStore = useCourseSessionsStore();
|
||||||
|
|
||||||
function employer() {
|
|
||||||
return userStore.email.indexOf("eiger-versicherungen.ch") > -1
|
|
||||||
? "Eiger Versicherungen, Niederlassung Bern"
|
|
||||||
: "VBV";
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
log.debug("DashboardPage mounted");
|
log.debug("DashboardPage mounted");
|
||||||
});
|
});
|
||||||
|
|
@ -42,7 +36,7 @@ const getNextStepLink = (courseSession: CourseSession) => {
|
||||||
v-if="courseSessionsStore.uniqueCourseSessionsByCourse.length > 0"
|
v-if="courseSessionsStore.uniqueCourseSessionsByCourse.length > 0"
|
||||||
class="mb-14"
|
class="mb-14"
|
||||||
>
|
>
|
||||||
<h2 class="mb-3 mt-12">Kurse</h2>
|
<h2 class="mb-3 mt-12">{{ $t("dashboard.courses") }}</h2>
|
||||||
|
|
||||||
<div class="grid auto-rows-fr grid-cols-1 gap-4 md:grid-cols-2">
|
<div class="grid auto-rows-fr grid-cols-1 gap-4 md:grid-cols-2">
|
||||||
<div
|
<div
|
||||||
|
|
@ -73,12 +67,10 @@ const getNextStepLink = (courseSession: CourseSession) => {
|
||||||
<div>
|
<div>
|
||||||
<h3 class="mb-6">Termine</h3>
|
<h3 class="mb-6">Termine</h3>
|
||||||
<ul class="bg-white p-4">
|
<ul class="bg-white p-4">
|
||||||
<li class="flex flex-row border-b py-4">
|
<li class="flex flex-row py-4">
|
||||||
<p class="text-bold w-60">Prüfung</p>
|
{{ $t("Zur Zeit sind keine Termine vorhanden") }}
|
||||||
<p class="grow">Mo, 14. November 2022, 18 Uhr</p>
|
|
||||||
<p class="underline">Details anschauen</p>
|
|
||||||
</li>
|
</li>
|
||||||
<li class="flex flex-row border-b py-4">
|
<!-- li class="flex flex-row border-b py-4">
|
||||||
<p class="text-bold w-60">Austausch mit Trainer</p>
|
<p class="text-bold w-60">Austausch mit Trainer</p>
|
||||||
<p class="grow">Fr, 24. November 2022, 11 Uhr</p>
|
<p class="grow">Fr, 24. November 2022, 11 Uhr</p>
|
||||||
<p class="underline">Details anschauen</p>
|
<p class="underline">Details anschauen</p>
|
||||||
|
|
@ -87,13 +79,13 @@ const getNextStepLink = (courseSession: CourseSession) => {
|
||||||
<p class="text-bold w-60">Vernetzen - Live Session</p>
|
<p class="text-bold w-60">Vernetzen - Live Session</p>
|
||||||
<p class="grow">Di, 4. Dezember 2022, 10.30 Uhr</p>
|
<p class="grow">Di, 4. Dezember 2022, 10.30 Uhr</p>
|
||||||
<p class="underline">Details anschauen</p>
|
<p class="underline">Details anschauen</p>
|
||||||
</li>
|
</li -->
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<aside class="m-8 lg:order-1 lg:w-[343px]">
|
<aside class="m-8 lg:order-1 lg:w-[343px]">
|
||||||
<div class="mx-auto mb-6 border-b pb-6 text-center">
|
<div class="mx-auto mb-6 pb-6 text-center">
|
||||||
<img
|
<img
|
||||||
class="mb-4 inline-block max-w-[150px] rounded-full"
|
class="mb-4 inline-block max-w-[150px] rounded-full"
|
||||||
:src="userStore.avatar_url"
|
:src="userStore.avatar_url"
|
||||||
|
|
@ -101,49 +93,6 @@ const getNextStepLink = (courseSession: CourseSession) => {
|
||||||
<div>
|
<div>
|
||||||
<p class="text-bold">{{ userStore.first_name }} {{ userStore.last_name }}</p>
|
<p class="text-bold">{{ userStore.first_name }} {{ userStore.last_name }}</p>
|
||||||
<p>{{ userStore.email }}</p>
|
<p>{{ userStore.email }}</p>
|
||||||
<p class="mb-4">{{ employer() }}</p>
|
|
||||||
<p>
|
|
||||||
Profil bearbeiten
|
|
||||||
<it-icon-pen class="h-4 w-4"></it-icon-pen>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div class="mb-4 flex flex-row items-center justify-start">
|
|
||||||
<div class="w-20">
|
|
||||||
<div class="h-12 w-12 rounded-full bg-sky-200">
|
|
||||||
<it-icon-certificate
|
|
||||||
class="mx-auto block h-6 w-6 pt-2"
|
|
||||||
></it-icon-certificate>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<h4 class="text-bold">Zertifikate</h4>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div>
|
|
||||||
<div class="mb-4 flex flex-row justify-start">
|
|
||||||
<p class="text-bold w-20">2024</p>
|
|
||||||
<div>
|
|
||||||
<p class="text-bold">Check-up</p>
|
|
||||||
<p>Vermittler/-in VBV</p>
|
|
||||||
<p>
|
|
||||||
Gültig bis:
|
|
||||||
<span class="text-bold text-green-500">31.12.2026</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-row justify-start">
|
|
||||||
<p class="text-bold w-20">2022</p>
|
|
||||||
<div>
|
|
||||||
<p class="text-bold">Zulassungsprüfung</p>
|
|
||||||
<p>Vermittler/-in VBV</p>
|
|
||||||
<p>
|
|
||||||
Bestanden:
|
|
||||||
<span class="text-bold">14.11.2022</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,9 @@ const userStore = useUserStore();
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<p class="pt-8"><a href="/sso/login/">Login mit SSO</a></p>
|
<p class="pt-8">
|
||||||
|
<a :href="`/sso/login/?lang=${userStore.language}`">Login mit SSO</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ async function loadAdditionalNotifications() {
|
||||||
<div class="bg-gray-200">
|
<div class="bg-gray-200">
|
||||||
<div class="container-large px-8 py-8">
|
<div class="container-large px-8 py-8">
|
||||||
<header class="mb-6">
|
<header class="mb-6">
|
||||||
<h1>{{ $t("general.notification") }}</h1>
|
<h1>{{ $t("general.notification", 2) }}</h1>
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
<div class="bg-white px-4 py-4">
|
<div class="bg-white px-4 py-4">
|
||||||
|
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import * as log from "loglevel";
|
|
||||||
|
|
||||||
log.debug("ProfileView created");
|
|
||||||
|
|
||||||
function setActiveClasses(isActive: boolean) {
|
|
||||||
return isActive ? ["border-blue-900", "border-b-2"] : ["text-bg-900"];
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="bg-gray-200">
|
|
||||||
<div class="container-large">
|
|
||||||
<nav class="py-4 pb-4">
|
|
||||||
<router-link class="btn-text inline-flex items-center pl-0" :to="'/'">
|
|
||||||
<it-icon-arrow-left />
|
|
||||||
<span>{{ $t("general.back") }}</span>
|
|
||||||
</router-link>
|
|
||||||
</nav>
|
|
||||||
<header class="mb-12 flex flex-row items-center">
|
|
||||||
<img class="mr-8 h-44 w-44 rounded-full" src="https://picsum.photos/200" />
|
|
||||||
<div>
|
|
||||||
<h1 class="mb-2">Daniel Baumgartner</h1>
|
|
||||||
<p class="mb-2">d.baumgartner@gmail.com</p>
|
|
||||||
<p class="bg-message bg-[center_left_-4px] bg-no-repeat pl-6">
|
|
||||||
{{ $t("messages.sendMessage") }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<main>
|
|
||||||
<div class="mb-8 w-full bg-white">ich bin ein Lernpfad</div>
|
|
||||||
<ul class="mb-5 flex flex-row border-b-2">
|
|
||||||
<li class="relative top-px mr-12 pb-3" :class="setActiveClasses(true)">
|
|
||||||
<button>{{ $t("competences.competences") }}</button>
|
|
||||||
</li>
|
|
||||||
<li class="mr-12">
|
|
||||||
<button>{{ $t("general.transferTask", 2) }}</button>
|
|
||||||
</li>
|
|
||||||
<li class="mr-12">
|
|
||||||
<button>{{ $t("general.exam", 2) }}</button>
|
|
||||||
</li>
|
|
||||||
<li class="mr-12">
|
|
||||||
<button>{{ $t("general.certificate", 2) }}</button>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped></style>
|
|
||||||
|
|
@ -74,7 +74,11 @@ async function startEvaluation() {
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button class="btn-primary" data-cy="start-evaluation" @click="startEvaluation()">
|
<button
|
||||||
|
class="btn-primary text-large"
|
||||||
|
data-cy="start-evaluation"
|
||||||
|
@click="startEvaluation()"
|
||||||
|
>
|
||||||
<span
|
<span
|
||||||
v-if="
|
v-if="
|
||||||
props.assignmentCompletion.completion_status === 'EVALUATION_IN_PROGRESS'
|
props.assignmentCompletion.completion_status === 'EVALUATION_IN_PROGRESS'
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ const evaluationUser = computed(() => {
|
||||||
Uhr
|
Uhr
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<button class="btn-primary" @click="submitEvaluation()">
|
<button class="btn-primary text-large" @click="submitEvaluation()">
|
||||||
Bewertung freigeben
|
Bewertung freigeben
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -153,7 +153,7 @@ const evaluationUser = computed(() => {
|
||||||
<div v-for="(task, index) in props.assignment.evaluation_tasks" :key="task.id">
|
<div v-for="(task, index) in props.assignment.evaluation_tasks" :key="task.id">
|
||||||
<article class="border-t py-4">
|
<article class="border-t py-4">
|
||||||
<div class="flex flex-row justify-between">
|
<div class="flex flex-row justify-between">
|
||||||
<div class="mb-4">
|
<div class="mb-4 text-gray-900">
|
||||||
Bewertungskriterium {{ index + 1 }}: {{ task.value.title }}
|
Bewertungskriterium {{ index + 1 }}: {{ task.value.title }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
|
|
@ -66,9 +66,9 @@ const assignmentDetail = computed(() =>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<router-link :to="props.assignment.frontend_url" class="link">
|
<a :href="props.assignment.frontend_url" class="link" target="_blank">
|
||||||
Im Circle anzeigen
|
Im Circle anzeigen
|
||||||
</router-link>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ onMounted(async () => {
|
||||||
{{ props.assignment.title }}
|
{{ props.assignment.title }}
|
||||||
</div>
|
</div>
|
||||||
<div><ItProgress :status-count="state.progressStatusCount" /></div>
|
<div><ItProgress :status-count="state.progressStatusCount" /></div>
|
||||||
<div>
|
<div class="text-gray-900" :class="{ 'text-gray-900': showTitle }">
|
||||||
{{ state.progressStatusCount.success || 0 }} von
|
{{ state.progressStatusCount.success || 0 }} von
|
||||||
{{
|
{{
|
||||||
(state.progressStatusCount.success || 0) +
|
(state.progressStatusCount.success || 0) +
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ const assignments = computed(() => {
|
||||||
<div>Geleitete Fallarbeiten</div>
|
<div>Geleitete Fallarbeiten</div>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div v-for="assignment in assignments" :key="assignment.id">
|
<div v-for="assignment in assignments" :key="assignment.id" class="mb-4">
|
||||||
<AssignmentSubmissionProgress
|
<AssignmentSubmissionProgress
|
||||||
:show-title="true"
|
:show-title="true"
|
||||||
:course-session="props.courseSession"
|
:course-session="props.courseSession"
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { LearningContentType } from "@/types";
|
import type { LearningContent } from "@/types";
|
||||||
import { learningContentTypeData } from "@/utils/typeMaps";
|
import { learningContentTypeData } from "@/utils/typeMaps";
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
learningContentType: LearningContentType;
|
learningContent: LearningContent;
|
||||||
}>();
|
}>();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
v-if="props.learningContentType !== 'learnpath.LearningContentPlaceholder'"
|
v-if="props.learningContent.content_type !== 'learnpath.LearningContentPlaceholder'"
|
||||||
class="flex h-min w-min items-center gap-2 rounded-full bg-gray-200 px-2.5 py-0.5"
|
class="flex h-min w-min items-center gap-2 rounded-full bg-gray-200 px-2.5 py-0.5"
|
||||||
>
|
>
|
||||||
<component
|
<component
|
||||||
:is="learningContentTypeData(props.learningContentType).icon"
|
:is="learningContentTypeData(props.learningContent).icon"
|
||||||
class="h-6 w-6"
|
class="h-6 w-6"
|
||||||
></component>
|
></component>
|
||||||
<p class="whitespace-nowrap">
|
<p class="whitespace-nowrap">
|
||||||
{{ learningContentTypeData(props.learningContentType).title }}
|
{{ learningContentTypeData(props.learningContent).title }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,28 @@ const emit = defineEmits(["closemodal"]);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- eslint-disable vue/no-v-html -->
|
|
||||||
<ItFullScreenModal :show="show" @closemodal="emit('closemodal')">
|
<ItFullScreenModal :show="show" @closemodal="emit('closemodal')">
|
||||||
<div v-if="circle" class="container-medium">
|
<div v-if="circle" class="container-medium">
|
||||||
<h1 class="">Überblick: Circle «{{ circle.title }}»</h1>
|
<h2 data-cy="lc-title">Überblick: Circle «{{ circle.title }}»</h2>
|
||||||
|
|
||||||
<div class="mt-8 border p-4">
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div class="text-large" v-html="circle.goals"></div>
|
<div
|
||||||
</div>
|
v-if="circle.goals"
|
||||||
|
class="default-wagtail-rich-text my-4"
|
||||||
|
v-html="circle.goals"
|
||||||
|
></div>
|
||||||
</div>
|
</div>
|
||||||
|
<nav class="nav absolute bottom-0 left-0 w-full border-t px-6 py-4">
|
||||||
|
<div class="relative z-10 flex flex-row place-content-end bg-white">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn-blue z-10 flex items-center"
|
||||||
|
@click="emit('closemodal')"
|
||||||
|
>
|
||||||
|
{{ $t("general.close") }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
</ItFullScreenModal>
|
</ItFullScreenModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,12 @@ const duration = computed(() => {
|
||||||
return "";
|
return "";
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const showDuration = computed(() => {
|
||||||
|
return (
|
||||||
|
circleStore.circle && sumBy(circleStore.circle.learningSequences, "minutes") > 0
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
log.debug(
|
log.debug(
|
||||||
"CirclePage mounted",
|
"CirclePage mounted",
|
||||||
|
|
@ -136,7 +142,10 @@ onMounted(async () => {
|
||||||
{{ circleStore.circle?.title }}
|
{{ circleStore.circle?.title }}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<div class="mt-2">{{ $t("circlePage.duration") }}: {{ duration }}</div>
|
<div v-if="showDuration" class="mt-2">
|
||||||
|
{{ $t("circlePage.duration") }}:
|
||||||
|
{{ duration }}
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="mt-8 w-full">
|
<div class="mt-8 w-full">
|
||||||
<CircleDiagram></CircleDiagram>
|
<CircleDiagram></CircleDiagram>
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,9 @@ const learningSequenceBorderClass = computed(() => {
|
||||||
<h3 class="text-large font-semibold">
|
<h3 class="text-large font-semibold">
|
||||||
{{ learningSequence.title }}
|
{{ learningSequence.title }}
|
||||||
</h3>
|
</h3>
|
||||||
<div>{{ humanizeDuration(learningSequence.minutes) }}</div>
|
<div v-if="learningSequence.minutes === 0">
|
||||||
|
{{ humanizeDuration(learningSequence.minutes) }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ol class="border bg-white px-4 lg:px-6" :class="learningSequenceBorderClass">
|
<ol class="border bg-white px-4 lg:px-6" :class="learningSequenceBorderClass">
|
||||||
|
|
@ -108,7 +110,7 @@ const learningSequenceBorderClass = computed(() => {
|
||||||
>
|
>
|
||||||
<div v-if="learningUnit.title" class="lg:pg-6 flex gap-4 pb-3 text-blue-900">
|
<div v-if="learningUnit.title" class="lg:pg-6 flex gap-4 pb-3 text-blue-900">
|
||||||
<div class="font-semibold">{{ learningUnit.title }}</div>
|
<div class="font-semibold">{{ learningUnit.title }}</div>
|
||||||
<div class="whitespace-nowrap">
|
<div v-if="learningUnit.minutes === 0" class="whitespace-nowrap">
|
||||||
{{ humanizeDuration(learningUnit.minutes) }}
|
{{ humanizeDuration(learningUnit.minutes) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -172,9 +174,7 @@ const learningSequenceBorderClass = computed(() => {
|
||||||
</button>
|
</button>
|
||||||
<div class="hidden sm:block"></div>
|
<div class="hidden sm:block"></div>
|
||||||
<div class="w-full sm:w-auto">
|
<div class="w-full sm:w-auto">
|
||||||
<LearningContentBadge
|
<LearningContentBadge :learning-content="learningContent" />
|
||||||
:learning-content-type="learningContent.content_type"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import log from "loglevel";
|
||||||
import type { Component } from "vue";
|
import type { Component } from "vue";
|
||||||
import { computed, onUnmounted } from "vue";
|
import { computed, onUnmounted } from "vue";
|
||||||
import AssignmentBlock from "./blocks/AssignmentBlock.vue";
|
import AssignmentBlock from "./blocks/AssignmentBlock.vue";
|
||||||
import AttendanceDayBlock from "./blocks/AttendanceDayBlock.vue";
|
import AttendanceCourseBlock from "./blocks/AttendanceCourseBlock.vue";
|
||||||
import FeedbackBlock from "./blocks/FeedbackBlock.vue";
|
import FeedbackBlock from "./blocks/FeedbackBlock.vue";
|
||||||
import IframeBlock from "./blocks/IframeBlock.vue";
|
import IframeBlock from "./blocks/IframeBlock.vue";
|
||||||
import MediaLibraryBlock from "./blocks/MediaLibraryBlock.vue";
|
import MediaLibraryBlock from "./blocks/MediaLibraryBlock.vue";
|
||||||
|
|
@ -26,7 +26,7 @@ log.debug("LearningContentParent setup", props.learningContent);
|
||||||
// can't use the type as component name, as some are reserved HTML components, e.g. video
|
// can't use the type as component name, as some are reserved HTML components, e.g. video
|
||||||
const COMPONENTS: Record<LearningContentType, Component> = {
|
const COMPONENTS: Record<LearningContentType, Component> = {
|
||||||
"learnpath.LearningContentAssignment": AssignmentBlock,
|
"learnpath.LearningContentAssignment": AssignmentBlock,
|
||||||
"learnpath.LearningContentAttendanceDay": AttendanceDayBlock,
|
"learnpath.LearningContentAttendanceCourse": AttendanceCourseBlock,
|
||||||
"learnpath.LearningContentFeedback": FeedbackBlock,
|
"learnpath.LearningContentFeedback": FeedbackBlock,
|
||||||
"learnpath.LearningContentLearningModule": IframeBlock,
|
"learnpath.LearningContentLearningModule": IframeBlock,
|
||||||
"learnpath.LearningContentMediaLibrary": MediaLibraryBlock,
|
"learnpath.LearningContentMediaLibrary": MediaLibraryBlock,
|
||||||
|
|
|
||||||
|
|
@ -17,30 +17,25 @@ const step = useRouteQuery("step");
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- eslint-disable vue/no-v-html -->
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<h3 class="mt-8">{{ $t("assignment.initialSituationTitle") }}</h3>
|
|
||||||
|
|
||||||
<p
|
<p
|
||||||
v-if="props.assignment.starting_position"
|
v-if="props.assignment.intro_text"
|
||||||
class="default-wagtail-rich-text text-large"
|
class="default-wagtail-rich-text text-large"
|
||||||
v-html="props.assignment.starting_position"
|
v-html="props.assignment.intro_text"
|
||||||
></p>
|
></p>
|
||||||
|
|
||||||
<h3 class="mt-8">{{ $t("assignment.taskDefinitionTitle") }}</h3>
|
<h3 class="mb-4 mt-8">{{ $t("assignment.taskDefinitionTitle") }}</h3>
|
||||||
<p class="text-large">
|
<p class="text-large">
|
||||||
{{ $t("assignment.taskDefinition") }}
|
{{ $t("assignment.taskDefinition") }}
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(task, index) in props.assignment.tasks" :key="task.id">
|
<li v-for="(task, index) in props.assignment.tasks" :key="task.id" class="py-1">
|
||||||
<button
|
<button class="text-large link" @click="step = (index + 1).toString()">
|
||||||
class="text-large text-left underline"
|
|
||||||
@click="step = (index + 1).toString()"
|
|
||||||
>
|
|
||||||
- {{ task.value.title }}
|
- {{ task.value.title }}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h3 class="mt-8">{{ $t("assignment.dueDateTitle") }}</h3>
|
<h3 class="mb-4 mt-8">{{ $t("assignment.dueDateTitle") }}</h3>
|
||||||
<p v-if="props.dueDate" class="text-large">
|
<p v-if="props.dueDate" class="text-large">
|
||||||
{{
|
{{
|
||||||
$t("assignment.dueDateIntroduction", {
|
$t("assignment.dueDateIntroduction", {
|
||||||
|
|
@ -53,31 +48,44 @@ const step = useRouteQuery("step");
|
||||||
{{ $t("assignment.dueDateNotSet") }}
|
{{ $t("assignment.dueDateNotSet") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 class="mt-8">{{ $t("assignment.effortTitle") }}</h3>
|
<div v-if="props.assignment.effort_required">
|
||||||
<p class="text-large">{{ props.assignment.effort_required }}</p>
|
<h3 class="mb-4 mt-8">{{ $t("assignment.effortTitle") }}</h3>
|
||||||
|
<p class="text-large">{{ props.assignment.effort_required }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h3 class="mt-8 border-b border-gray-500 pb-2">
|
<div v-if="props.assignment.performance_objectives.length">
|
||||||
{{ $t("assignment.performanceObjectivesTitle") }}
|
<h3 class="mt-8 border-b border-gray-500 pb-4">
|
||||||
</h3>
|
{{ $t("assignment.performanceObjectivesTitle") }}
|
||||||
<p
|
</h3>
|
||||||
v-for="performance_objective in props.assignment.performance_objectives"
|
<p
|
||||||
:key="performance_objective.id"
|
v-for="performance_objective in props.assignment.performance_objectives"
|
||||||
class="text-large border-b border-gray-500 py-4"
|
:key="performance_objective.id"
|
||||||
>
|
class="text-large border-b border-gray-500 py-4"
|
||||||
{{ performance_objective.value.text }}
|
>
|
||||||
</p>
|
{{ performance_objective.value.text }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h3 class="mt-8">{{ $t("assignment.assessmentTitle") }}</h3>
|
<div
|
||||||
<p
|
v-if="
|
||||||
v-if="props.assignment.evaluation_description"
|
props.assignment.evaluation_description ||
|
||||||
class="default-wagtail-rich-text text-large"
|
props.assignment.evaluation_document_url
|
||||||
v-html="props.assignment.evaluation_description"
|
"
|
||||||
></p>
|
|
||||||
<a
|
|
||||||
:href="props.assignment.evaluation_document_url"
|
|
||||||
target="_blank"
|
|
||||||
class="text-large link"
|
|
||||||
>
|
>
|
||||||
{{ $t("assignment.showAssessmentDocument") }}
|
<h3 class="mb-4 mt-8">{{ $t("assignment.assessmentTitle") }}</h3>
|
||||||
</a>
|
<p
|
||||||
|
v-if="props.assignment.evaluation_description"
|
||||||
|
class="default-wagtail-rich-text text-large"
|
||||||
|
v-html="props.assignment.evaluation_description"
|
||||||
|
></p>
|
||||||
|
<p v-if="props.assignment.evaluation_document_url">
|
||||||
|
<a
|
||||||
|
:href="props.assignment.evaluation_document_url"
|
||||||
|
target="_blank"
|
||||||
|
class="text-large link"
|
||||||
|
>
|
||||||
|
{{ $t("assignment.showAssessmentDocument") }}
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import AssignmentIntroductionView from "@/pages/learningPath/learningContentPage
|
||||||
import AssignmentSubmissionView from "@/pages/learningPath/learningContentPage/assignment/AssignmentSubmissionView.vue";
|
import AssignmentSubmissionView from "@/pages/learningPath/learningContentPage/assignment/AssignmentSubmissionView.vue";
|
||||||
import AssignmentTaskView from "@/pages/learningPath/learningContentPage/assignment/AssignmentTaskView.vue";
|
import AssignmentTaskView from "@/pages/learningPath/learningContentPage/assignment/AssignmentTaskView.vue";
|
||||||
import LearningContentMultiLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentMultiLayout.vue";
|
import LearningContentMultiLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentMultiLayout.vue";
|
||||||
|
import { useCourseSessionsStore } from "@/stores/courseSessions";
|
||||||
import { useUserStore } from "@/stores/user";
|
import { useUserStore } from "@/stores/user";
|
||||||
import type {
|
import type {
|
||||||
Assignment,
|
Assignment,
|
||||||
|
|
@ -75,6 +76,10 @@ onMounted(async () => {
|
||||||
props.learningContent
|
props.learningContent
|
||||||
);
|
);
|
||||||
|
|
||||||
|
state.courseSessionAssignmentDetails = useCourseSessionsStore().findAssignmentDetails(
|
||||||
|
props.learningContent.id
|
||||||
|
);
|
||||||
|
|
||||||
// create initial `AssignmentCompletion` first, so that it exists and we don't
|
// create initial `AssignmentCompletion` first, so that it exists and we don't
|
||||||
// have reactivity problem accessing it.
|
// have reactivity problem accessing it.
|
||||||
// noinspection TypeScriptValidateTypes
|
// noinspection TypeScriptValidateTypes
|
||||||
|
|
@ -102,7 +107,14 @@ onMounted(async () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const numTasks = computed(() => assignment.value?.tasks?.length ?? 0);
|
const numTasks = computed(() => assignment.value?.tasks?.length ?? 0);
|
||||||
const numPages = computed(() => numTasks.value + 2);
|
const numPages = computed(() => {
|
||||||
|
if (assignmentType.value === "CASEWORK") {
|
||||||
|
// casework has extra submission page
|
||||||
|
return numTasks.value + 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return numTasks.value + 1;
|
||||||
|
});
|
||||||
const showPreviousButton = computed(() => stepIndex.value != 0);
|
const showPreviousButton = computed(() => stepIndex.value != 0);
|
||||||
const showNextButton = computed(() => stepIndex.value + 1 < numPages.value);
|
const showNextButton = computed(() => stepIndex.value + 1 < numPages.value);
|
||||||
const showExitButton = computed(() => numPages.value === stepIndex.value + 1);
|
const showExitButton = computed(() => numPages.value === stepIndex.value + 1);
|
||||||
|
|
@ -144,17 +156,48 @@ const jumpToTask = (task: AssignmentTask) => {
|
||||||
const getTitle = () => {
|
const getTitle = () => {
|
||||||
if (0 === stepIndex.value) {
|
if (0 === stepIndex.value) {
|
||||||
return t("general.introduction");
|
return t("general.introduction");
|
||||||
} else if (stepIndex.value === numPages.value - 1) {
|
} else if (
|
||||||
|
assignmentType.value === "CASEWORK" &&
|
||||||
|
stepIndex.value === numPages.value - 1
|
||||||
|
) {
|
||||||
return t("general.submission");
|
return t("general.submission");
|
||||||
}
|
}
|
||||||
return currentTask?.value?.value.title ?? "Unknown";
|
return currentTask?.value?.value.title ?? "Unknown";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const assignmentType = computed(() => {
|
||||||
|
return assignment.value?.assignment_type ?? "CASEWORK";
|
||||||
|
});
|
||||||
|
|
||||||
|
const subTitle = computed(() => {
|
||||||
|
if (assignment.value) {
|
||||||
|
let prefix = "Geleitete Fallarbeit";
|
||||||
|
if (assignmentType.value === "PREP_ASSIGNMENT") {
|
||||||
|
prefix = "Vorbereitungsauftrag";
|
||||||
|
} else if (assignmentType.value === "REFLECTION") {
|
||||||
|
prefix = "Reflexion";
|
||||||
|
}
|
||||||
|
return `${prefix}: ${assignment.value?.title ?? ""}`;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
});
|
||||||
|
|
||||||
const assignmentUser = computed(() => {
|
const assignmentUser = computed(() => {
|
||||||
return courseSession.value.users.find(
|
return courseSession.value.users.find(
|
||||||
(user) => user.user_id === Number(userStore.id)
|
(user) => user.user_id === Number(userStore.id)
|
||||||
) as CourseSessionUser;
|
) as CourseSessionUser;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const endBadgeText = computed(() => {
|
||||||
|
if (assignmentType.value === "PREP_ASSIGNMENT") {
|
||||||
|
return "Aufgaben";
|
||||||
|
} else if (assignmentType.value === "CASEWORK") {
|
||||||
|
return "Abgabe";
|
||||||
|
}
|
||||||
|
|
||||||
|
// just return the number of tasks as default
|
||||||
|
return (assignment.value?.tasks.length ?? 0).toString();
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -162,9 +205,9 @@ const assignmentUser = computed(() => {
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<LearningContentMultiLayout
|
<LearningContentMultiLayout
|
||||||
:current-step="stepIndex"
|
:current-step="stepIndex"
|
||||||
:subtitle="assignment.title ?? ''"
|
:sub-title="subTitle"
|
||||||
:title="getTitle()"
|
:title="getTitle()"
|
||||||
:learning-content-type="props.learningContent.content_type"
|
:learning-content="props.learningContent"
|
||||||
:steps-count="numPages"
|
:steps-count="numPages"
|
||||||
:show-next-button="showNextButton && stepIndex !== 0"
|
:show-next-button="showNextButton && stepIndex !== 0"
|
||||||
:show-exit-button="showExitButton"
|
:show-exit-button="showExitButton"
|
||||||
|
|
@ -173,7 +216,7 @@ const assignmentUser = computed(() => {
|
||||||
:base-url="props.learningContent.frontend_url"
|
:base-url="props.learningContent.frontend_url"
|
||||||
step-query-param="step"
|
step-query-param="step"
|
||||||
start-badge-text="Einleitung"
|
start-badge-text="Einleitung"
|
||||||
end-badge-text="Abgabe"
|
:end-badge-text="endBadgeText"
|
||||||
close-button-variant="close"
|
close-button-variant="close"
|
||||||
@previous="handleBack()"
|
@previous="handleBack()"
|
||||||
@next="handleContinue()"
|
@next="handleContinue()"
|
||||||
|
|
@ -186,13 +229,13 @@ const assignmentUser = computed(() => {
|
||||||
:assignment="assignment"
|
:assignment="assignment"
|
||||||
></AssignmentIntroductionView>
|
></AssignmentIntroductionView>
|
||||||
<AssignmentTaskView
|
<AssignmentTaskView
|
||||||
v-if="currentTask"
|
v-else-if="currentTask"
|
||||||
:task="currentTask"
|
:task="currentTask"
|
||||||
:assignment-id="props.learningContent.content_assignment_id"
|
:assignment-id="props.learningContent.content_assignment_id"
|
||||||
:assignment-completion="assignmentCompletion"
|
:assignment-completion="assignmentCompletion"
|
||||||
></AssignmentTaskView>
|
></AssignmentTaskView>
|
||||||
<AssignmentSubmissionView
|
<AssignmentSubmissionView
|
||||||
v-if="stepIndex + 1 === numPages"
|
v-else-if="assignmentType === 'CASEWORK' && stepIndex + 1 === numPages"
|
||||||
:due-date="dueDate"
|
:due-date="dueDate"
|
||||||
:assignment="assignment"
|
:assignment="assignment"
|
||||||
:assignment-completion="assignmentCompletion"
|
:assignment-completion="assignmentCompletion"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
<template>
|
||||||
|
<div class="mb-12 grid grid-cols-icon-card gap-x-4 grid-areas-icon-card">
|
||||||
|
<it-icon-calendar class="w-[60px] grid-in-icon" />
|
||||||
|
<h2 class="text-large font-bold grid-in-title">Datum</h2>
|
||||||
|
<p class="grid-in-value">{{ start }} - {{ end }}</p>
|
||||||
|
</div>
|
||||||
|
<div class="mb-12 grid grid-cols-icon-card gap-x-4 grid-areas-icon-card">
|
||||||
|
<it-icon-location class="w-[60px] grid-in-icon" />
|
||||||
|
<h2 class="text-large font-bold grid-in-title">Standort</h2>
|
||||||
|
<p class="grid-in-value">{{ location }}</p>
|
||||||
|
</div>
|
||||||
|
<div class="grid grid-cols-icon-card content-between gap-x-4 grid-areas-icon-card">
|
||||||
|
<it-icon-trainer class="w-[60px] grid-in-icon" />
|
||||||
|
<h2 class="text-large font-bold grid-in-title">Trainer</h2>
|
||||||
|
<p class="grid-in-value">{{ trainer }}</p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { CourseSessionAttendanceCourse } from "@/types";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import "dayjs/locale/de";
|
||||||
|
import LocalizedFormat from "dayjs/plugin/localizedFormat";
|
||||||
|
import { computed } from "vue";
|
||||||
|
|
||||||
|
export interface Props {
|
||||||
|
attendanceCourse: CourseSessionAttendanceCourse;
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = defineProps<Props>();
|
||||||
|
|
||||||
|
dayjs.extend(LocalizedFormat);
|
||||||
|
dayjs.locale("de");
|
||||||
|
const format = "LLLL [Uhr]";
|
||||||
|
const start = computed(() => dayjs(props.attendanceCourse.start).format(format));
|
||||||
|
const end = computed(() => dayjs(props.attendanceCourse.end).format(format));
|
||||||
|
const location = computed(() => props.attendanceCourse.location);
|
||||||
|
const trainer = computed(() => props.attendanceCourse.trainer);
|
||||||
|
</script>
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="mb-12 grid grid-cols-icon-card gap-x-4 grid-areas-icon-card">
|
|
||||||
<it-icon-calendar class="w-[60px] grid-in-icon" />
|
|
||||||
<h2 class="text-large font-bold grid-in-title">Datum</h2>
|
|
||||||
<p class="grid-in-value">{{ attendanceDay.date }}</p>
|
|
||||||
</div>
|
|
||||||
<div class="mb-12 grid grid-cols-icon-card gap-x-4 grid-areas-icon-card">
|
|
||||||
<it-icon-location class="w-[60px] grid-in-icon" />
|
|
||||||
<h2 class="text-large font-bold grid-in-title">Standort</h2>
|
|
||||||
<p class="grid-in-value">{{ attendanceDay.location }}</p>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-icon-card content-between gap-x-4 grid-areas-icon-card">
|
|
||||||
<it-icon-trainer class="w-[60px] grid-in-icon" />
|
|
||||||
<h2 class="text-large font-bold grid-in-title">Trainer</h2>
|
|
||||||
<p class="grid-in-value">{{ attendanceDay.trainer }}</p>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import type { CourseSessionAttendanceDay } from "@/types";
|
|
||||||
|
|
||||||
export interface Props {
|
|
||||||
attendanceDay: CourseSessionAttendanceDay;
|
|
||||||
}
|
|
||||||
defineProps<Props>();
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,31 +1,28 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import AttendanceDay from "@/pages/learningPath/learningContentPage/attendanceDay/AttendanceDay.vue";
|
import AttendanceCourse from "@/pages/learningPath/learningContentPage/attendanceCourse/AttendanceCourse.vue";
|
||||||
import { useCourseSessionsStore } from "@/stores/courseSessions";
|
import { useCourseSessionsStore } from "@/stores/courseSessions";
|
||||||
import type { LearningContentAttendanceDay } from "@/types";
|
import type { LearningContentAttendanceCourse } from "@/types";
|
||||||
import { computed } from "vue";
|
import { computed } from "vue";
|
||||||
import LearningContentSimpleLayout from "../layouts/LearningContentSimpleLayout.vue";
|
import LearningContentSimpleLayout from "../layouts/LearningContentSimpleLayout.vue";
|
||||||
|
|
||||||
const courseSessionsStore = useCourseSessionsStore();
|
const courseSessionsStore = useCourseSessionsStore();
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
content: LearningContentAttendanceDay;
|
content: LearningContentAttendanceCourse;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const courseSessionAttendanceDay = computed(() => {
|
const courseSessionAttendanceCourse = computed(() => {
|
||||||
return courseSessionsStore.findAttendanceDay(props.content.id);
|
return courseSessionsStore.findAttendanceCourse(props.content.id);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LearningContentSimpleLayout
|
<LearningContentSimpleLayout :title="content.title" :learning-content="props.content">
|
||||||
:title="content.title"
|
|
||||||
:learning-content-type="props.content.content_type"
|
|
||||||
>
|
|
||||||
<div class="container-medium">
|
<div class="container-medium">
|
||||||
<div class="lg:mt-8">
|
<div class="lg:mt-8">
|
||||||
<div class="text-large my-4">
|
<div class="text-large my-4">
|
||||||
<div v-if="courseSessionAttendanceDay">
|
<div v-if="courseSessionAttendanceCourse">
|
||||||
<AttendanceDay :attendance-day="courseSessionAttendanceDay" />
|
<AttendanceCourse :attendance-course="courseSessionAttendanceCourse" />
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
Für diese Durchführung {{ content.id }} existieren noch keine Details
|
Für diese Durchführung {{ content.id }} existieren noch keine Details
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
||||||
import type { LearningContentInterface } from "@/types";
|
import type { LearningContent } from "@/types";
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
content: LearningContentInterface;
|
content: LearningContent;
|
||||||
}>();
|
}>();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LearningContentSimpleLayout :learning-content-type="props.content.content_type">
|
<LearningContentSimpleLayout :learning-content="props.content">
|
||||||
<div class="h-screen">
|
<div class="h-screen">
|
||||||
<iframe
|
<iframe
|
||||||
width="100%"
|
width="100%"
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ log.debug("LearningContentMediaLibraryBlock.vue created");
|
||||||
<template>
|
<template>
|
||||||
<LearningContentSimpleLayout
|
<LearningContentSimpleLayout
|
||||||
:title="props.content.title"
|
:title="props.content.title"
|
||||||
:learning-content-type="props.content.content_type"
|
:learning-content="props.content"
|
||||||
>
|
>
|
||||||
<div class="container-medium">
|
<div class="container-medium">
|
||||||
<!-- eslint-disable vue/no-v-html -->
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
import LearningContentSimpleLayout from "@/pages/learningPath/learningContentPage/layouts/LearningContentSimpleLayout.vue";
|
||||||
import type { LearningContentInterface } from "@/types";
|
import type { LearningContent } from "@/types";
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
content: LearningContentInterface;
|
content: LearningContent;
|
||||||
}>();
|
}>();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<LearningContentSimpleLayout
|
<LearningContentSimpleLayout
|
||||||
:title="props.content.title"
|
:title="props.content.title"
|
||||||
:learning-content-type="props.content.content_type"
|
:learning-content="props.content"
|
||||||
>
|
>
|
||||||
<!-- eslint-disable vue/no-v-html -->
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div class="container-medium">
|
<div class="container-medium">
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ const props = defineProps<{
|
||||||
<template>
|
<template>
|
||||||
<LearningContentSimpleLayout
|
<LearningContentSimpleLayout
|
||||||
:title="props.content.title"
|
:title="props.content.title"
|
||||||
:learning-content-type="props.content.content_type"
|
:learning-content="props.content"
|
||||||
>
|
>
|
||||||
<!-- eslint-disable vue/no-v-html -->
|
<!-- eslint-disable vue/no-v-html -->
|
||||||
<div class="container-medium">
|
<div class="container-medium">
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<LearningContentSimpleLayout
|
<LearningContentSimpleLayout
|
||||||
:title="props.content.title"
|
:title="props.content.title"
|
||||||
:learning-content-type="props.content.content_type"
|
:learning-content="props.content"
|
||||||
>
|
>
|
||||||
<div class="container-medium">
|
<div class="container-medium">
|
||||||
<iframe
|
<iframe
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,15 @@
|
||||||
import ItNavigationProgress from "@/components/ui/ItNavigationProgress.vue";
|
import ItNavigationProgress from "@/components/ui/ItNavigationProgress.vue";
|
||||||
import type { ClosingButtonVariant } from "@/pages/learningPath/learningContentPage/layouts/LearningContentFooter.vue";
|
import type { ClosingButtonVariant } from "@/pages/learningPath/learningContentPage/layouts/LearningContentFooter.vue";
|
||||||
import LearningContentFooter from "@/pages/learningPath/learningContentPage/layouts/LearningContentFooter.vue";
|
import LearningContentFooter from "@/pages/learningPath/learningContentPage/layouts/LearningContentFooter.vue";
|
||||||
import type { LearningContentType } from "@/types";
|
import type { LearningContent } from "@/types";
|
||||||
import { learningContentTypeData } from "@/utils/typeMaps";
|
import { learningContentTypeData } from "@/utils/typeMaps";
|
||||||
|
import { computed } from "vue";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title?: string;
|
title?: string;
|
||||||
subtitle: string;
|
subTitle?: string;
|
||||||
learningContentType: LearningContentType;
|
icon?: string;
|
||||||
|
learningContent?: LearningContent;
|
||||||
showStartButton: boolean;
|
showStartButton: boolean;
|
||||||
showPreviousButton: boolean;
|
showPreviousButton: boolean;
|
||||||
showNextButton: boolean;
|
showNextButton: boolean;
|
||||||
|
|
@ -24,7 +26,10 @@ interface Props {
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
title: undefined,
|
title: "",
|
||||||
|
subTitle: "",
|
||||||
|
icon: "",
|
||||||
|
learningContent: undefined,
|
||||||
startBadgeText: undefined,
|
startBadgeText: undefined,
|
||||||
endBadgeText: undefined,
|
endBadgeText: undefined,
|
||||||
closeButtonVariant: "mark_as_done",
|
closeButtonVariant: "mark_as_done",
|
||||||
|
|
@ -32,25 +37,44 @@ const props = withDefaults(defineProps<Props>(), {
|
||||||
stepQueryParam: undefined,
|
stepQueryParam: undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const subTitle = computed(() => {
|
||||||
|
if (props.subTitle) {
|
||||||
|
return props.subTitle;
|
||||||
|
}
|
||||||
|
if (props.learningContent) {
|
||||||
|
return learningContentTypeData(props.learningContent).title;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
});
|
||||||
|
|
||||||
|
const icon = computed(() => {
|
||||||
|
if (props.icon) {
|
||||||
|
return props.icon;
|
||||||
|
}
|
||||||
|
if (props.learningContent) {
|
||||||
|
return learningContentTypeData(props.learningContent).icon;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
});
|
||||||
|
|
||||||
const emit = defineEmits(["previous", "next", "exit"]);
|
const emit = defineEmits(["previous", "next", "exit"]);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="container-large">
|
<div class="container-large">
|
||||||
<div
|
<div
|
||||||
v-if="props.learningContentType !== 'learnpath.LearningContentPlaceholder'"
|
v-if="
|
||||||
|
props.learningContent?.content_type !== 'learnpath.LearningContentPlaceholder'
|
||||||
|
"
|
||||||
class="flex h-min items-center gap-2 rounded-full pb-10"
|
class="flex h-min items-center gap-2 rounded-full pb-10"
|
||||||
>
|
>
|
||||||
<component
|
<component :is="icon" v-if="icon" class="h-6 w-6 text-gray-900"></component>
|
||||||
:is="learningContentTypeData(props.learningContentType).icon"
|
<p v-if="subTitle" class="text-gray-900" data-cy="lc-subtitle">
|
||||||
class="h-6 w-6 text-gray-900"
|
{{ subTitle }}
|
||||||
></component>
|
|
||||||
<p class="text-gray-900" data-cy="lc-subtitle">
|
|
||||||
{{ props.subtitle }}
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2 v-if="props.title" class="pb-6 text-3xl" data-cy="lc-title">
|
<h2 v-if="props.title" class="mb-6 text-3xl" data-cy="lc-title">
|
||||||
{{ props.title }}
|
{{ props.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<ItNavigationProgress
|
<ItNavigationProgress
|
||||||
|
|
@ -61,7 +85,7 @@ const emit = defineEmits(["previous", "next", "exit"]);
|
||||||
:end-badge-text="props.endBadgeText"
|
:end-badge-text="props.endBadgeText"
|
||||||
:base-url="props.baseUrl"
|
:base-url="props.baseUrl"
|
||||||
:query-param="props.stepQueryParam"
|
:query-param="props.stepQueryParam"
|
||||||
class="overflow-hidden pb-12"
|
class="mb-8 overflow-hidden"
|
||||||
></ItNavigationProgress>
|
></ItNavigationProgress>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,56 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
// Basic layout for a learning content that only has a single step
|
// Basic layout for a learning content that only has a single step
|
||||||
import LearningContentFooter from "@/pages/learningPath/learningContentPage/layouts/LearningContentFooter.vue";
|
import LearningContentFooter from "@/pages/learningPath/learningContentPage/layouts/LearningContentFooter.vue";
|
||||||
import type { LearningContentType } from "@/types";
|
import type { LearningContent } from "@/types";
|
||||||
import { learningContentTypeData } from "@/utils/typeMaps";
|
import { learningContentTypeData } from "@/utils/typeMaps";
|
||||||
|
import { computed } from "vue";
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
title?: string;
|
title?: string;
|
||||||
learningContentType: LearningContentType;
|
icon?: string;
|
||||||
|
subTitle?: string;
|
||||||
|
learningContent?: LearningContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
title: "",
|
title: "",
|
||||||
|
icon: "",
|
||||||
|
subTitle: "",
|
||||||
|
learningContent: undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
const type = learningContentTypeData(props.learningContentType);
|
const subTitle = computed(() => {
|
||||||
|
if (props.subTitle) {
|
||||||
|
return props.subTitle;
|
||||||
|
}
|
||||||
|
if (props.learningContent) {
|
||||||
|
return learningContentTypeData(props.learningContent).title;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
});
|
||||||
|
|
||||||
|
const icon = computed(() => {
|
||||||
|
if (props.icon) {
|
||||||
|
return props.icon;
|
||||||
|
}
|
||||||
|
if (props.learningContent) {
|
||||||
|
return learningContentTypeData(props.learningContent).icon;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="container-medium">
|
<div class="container-medium">
|
||||||
<div
|
<div
|
||||||
v-if="props.learningContentType !== 'learnpath.LearningContentPlaceholder'"
|
v-if="
|
||||||
|
props.learningContent?.content_type !== 'learnpath.LearningContentPlaceholder'
|
||||||
|
"
|
||||||
class="flex h-min w-full items-center gap-2 pb-8"
|
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>
|
<component :is="icon" v-if="icon" class="h-6 w-6 text-gray-900"></component>
|
||||||
<p class="whitespace-nowrap text-gray-900" data-cy="lc-subtitle">
|
<p v-if="subTitle" class="whitespace-nowrap text-gray-900" data-cy="lc-subtitle">
|
||||||
{{ type.title }}
|
{{ subTitle }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<p class="mb-4 font-bold">Nächste Termine</p>
|
<p class="mb-4 font-bold">{{ $t("Nächste Termine") }}</p>
|
||||||
<ul>
|
<!-- ul>
|
||||||
<li class="border-b border-t py-3">
|
<li class="border-b border-t py-3">
|
||||||
<p class="pr-12">24. November 2022, 11 Uhr - Austausch mit Trainer</p>
|
<p class="pr-12">24. November 2022, 11 Uhr - Austausch mit Trainer</p>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -8,5 +8,6 @@
|
||||||
<p class="pr-12">4. Dezember 2022, 10.30 Uhr - Vernetzen - Live Session</p>
|
<p class="pr-12">4. Dezember 2022, 10.30 Uhr - Vernetzen - Live Session</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="pt-2 underline">Alle Termine anzeigen</p>
|
<p class="pt-2 underline">Alle Termine anzeigen</p -->
|
||||||
|
<p class="min-h-[150px] pt-2">{{ $t("Zur Zeit sind keine Termine vorhanden") }}</p>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -69,9 +69,9 @@ onUnmounted(() => {
|
||||||
>
|
>
|
||||||
<LearningContentMultiLayout
|
<LearningContentMultiLayout
|
||||||
:current-step="questionIndex"
|
:current-step="questionIndex"
|
||||||
:subtitle="$t('selfEvaluation.title')"
|
:sub-title="$t('selfEvaluation.title')"
|
||||||
:title="$t('selfEvaluation.title', { title: learningUnit.title })"
|
:title="$t('selfEvaluation.title', { title: learningUnit.title })"
|
||||||
learning-content-type="learnpath.LearningContentLearningModule"
|
icon="it-icon-lc-learning-module"
|
||||||
:steps-count="questions.length"
|
:steps-count="questions.length"
|
||||||
:show-next-button="showNextButton"
|
:show-next-button="showNextButton"
|
||||||
:show-exit-button="showExitButton"
|
:show-exit-button="showExitButton"
|
||||||
|
|
|
||||||
|
|
@ -155,10 +155,6 @@ const router = createRouter({
|
||||||
path: "/messages",
|
path: "/messages",
|
||||||
component: () => import("@/pages/MessagesPage.vue"),
|
component: () => import("@/pages/MessagesPage.vue"),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: "/profile",
|
|
||||||
component: () => import("@/pages/ProfilePage.vue"),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: "/settings",
|
path: "/settings",
|
||||||
component: () => import("@/pages/SettingsPage.vue"),
|
component: () => import("@/pages/SettingsPage.vue"),
|
||||||
|
|
|
||||||
|
|
@ -1,447 +1,447 @@
|
||||||
{
|
{
|
||||||
"id": 10,
|
"id": 10,
|
||||||
"title": "Test Lernpfad",
|
"title": "Test Lernpfad",
|
||||||
"slug": "test-lehrgang-lp",
|
"slug": "test-lehrgang-lp",
|
||||||
"content_type": "learnpath.LearningPath",
|
"content_type": "learnpath.LearningPath",
|
||||||
"translation_key": "9cf4fea4-9d6f-4297-ab99-68a65bf07bb5",
|
"translation_key": "9cf4fea4-9d6f-4297-ab99-68a65bf07bb5",
|
||||||
"frontend_url": "/course/test-lehrgang/learn",
|
"frontend_url": "/course/test-lehrgang/learn",
|
||||||
"children": [
|
"children": [
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"title": "Circle \u00dcK",
|
||||||
|
"slug": "test-lehrgang-lp-topic-circle-\u00fck",
|
||||||
|
"content_type": "learnpath.Topic",
|
||||||
|
"translation_key": "983f97f7-fd68-4678-860f-7a19bab0b94d",
|
||||||
|
"frontend_url": "",
|
||||||
|
"is_visible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"title": "Fahrzeug",
|
||||||
|
"slug": "test-lehrgang-lp-circle-fahrzeug",
|
||||||
|
"content_type": "learnpath.Circle",
|
||||||
|
"translation_key": "0286b096-2a55-4242-a277-ba15d478b79a",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug",
|
||||||
|
"children": [
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 13,
|
||||||
"title": "Circle \u00dcK",
|
"title": "Vorbereitung",
|
||||||
"slug": "test-lehrgang-lp-topic-circle-\u00fck",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung",
|
||||||
"content_type": "learnpath.Topic",
|
"content_type": "learnpath.LearningSequence",
|
||||||
"translation_key": "983f97f7-fd68-4678-860f-7a19bab0b94d",
|
"translation_key": "dbc0e05f-a899-4524-b021-39a97ac1c542",
|
||||||
"frontend_url": "",
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-vorbereitung",
|
||||||
"is_visible": false
|
"icon": "it-icon-ls-start"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 14,
|
||||||
"title": "Fahrzeug",
|
"title": "Vorbereitung",
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-vorbereitung",
|
||||||
"content_type": "learnpath.Circle",
|
"content_type": "learnpath.LearningUnit",
|
||||||
"translation_key": "0286b096-2a55-4242-a277-ba15d478b79a",
|
"translation_key": "626d656a-15d6-49ce-8b20-c035482802cd",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug",
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-vorbereitung",
|
||||||
"children": [
|
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/vorbereitung",
|
||||||
{
|
"course_category": {
|
||||||
"id": 13,
|
"id": 1,
|
||||||
"title": "Vorbereitung",
|
"title": "Allgemein",
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung",
|
"general": true
|
||||||
"content_type": "learnpath.LearningSequence",
|
},
|
||||||
"translation_key": "dbc0e05f-a899-4524-b021-39a97ac1c542",
|
"children": [
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-vorbereitung",
|
{
|
||||||
"icon": "it-icon-ls-start"
|
"id": 18,
|
||||||
},
|
"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",
|
||||||
"id": 14,
|
"content_type": "competence.PerformanceCriteria",
|
||||||
"title": "Vorbereitung",
|
"translation_key": "d49be54d-51e5-4bf4-9238-365006c3b95d",
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-vorbereitung",
|
"frontend_url": "",
|
||||||
"content_type": "learnpath.LearningUnit",
|
"competence_id": "X1.1"
|
||||||
"translation_key": "626d656a-15d6-49ce-8b20-c035482802cd",
|
},
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-vorbereitung",
|
{
|
||||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/vorbereitung",
|
"id": 19,
|
||||||
"course_category": {
|
"title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die IST-Situation des Kunden mit der geeigneten Gespr\u00e4chs-/Fragetechnik zu erfassen.",
|
||||||
"id": 1,
|
"slug": "test-lehrgang-competence-crit-x11-allgemein-1",
|
||||||
"title": "Allgemein",
|
"content_type": "competence.PerformanceCriteria",
|
||||||
"general": true
|
"translation_key": "2fb68d58-3ab7-4192-865c-1e67ab9bcd15",
|
||||||
},
|
"frontend_url": "",
|
||||||
"children": [
|
"competence_id": "X1.1"
|
||||||
{
|
}
|
||||||
"id": 18,
|
]
|
||||||
"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",
|
|
||||||
"content_type": "competence.PerformanceCriteria",
|
|
||||||
"translation_key": "d49be54d-51e5-4bf4-9238-365006c3b95d",
|
|
||||||
"frontend_url": "",
|
|
||||||
"competence_id": "X1.1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 19,
|
|
||||||
"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",
|
|
||||||
"content_type": "competence.PerformanceCriteria",
|
|
||||||
"translation_key": "2fb68d58-3ab7-4192-865c-1e67ab9bcd15",
|
|
||||||
"frontend_url": "",
|
|
||||||
"competence_id": "X1.1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 15,
|
|
||||||
"title": "Verschaffe dir einen \u00dcberblick",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-\u00fcberblick",
|
|
||||||
"content_type": "learnpath.LearningContentPlaceholder",
|
|
||||||
"translation_key": "47698ce1-0e4f-446d-a23d-8a9e9c906ff7",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/verschaffe-dir-einen-\u00fcberblick",
|
|
||||||
"minutes": 15,
|
|
||||||
"description": "Platzhalter",
|
|
||||||
"content_url": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 16,
|
|
||||||
"title": "Mediathek Fahrzeug",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug",
|
|
||||||
"content_type": "learnpath.LearningContentMediaLibrary",
|
|
||||||
"translation_key": "34e79a3b-c1f9-49ff-b779-0149d614f02c",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/mediathek-fahrzeug",
|
|
||||||
"minutes": 15,
|
|
||||||
"description": "",
|
|
||||||
"content_url": "/media/\u00fcberbetriebliche-kurse-media/category/fahrzeug"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 17,
|
|
||||||
"title": "Vorbereitungsauftrag",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag",
|
|
||||||
"content_type": "learnpath.LearningContentPlaceholder",
|
|
||||||
"translation_key": "8feca9cd-4937-4406-b44d-564f341e8bfe",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/vorbereitungsauftrag",
|
|
||||||
"minutes": 15,
|
|
||||||
"description": "Platzhalter",
|
|
||||||
"content_url": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 20,
|
|
||||||
"title": "Training",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-training",
|
|
||||||
"content_type": "learnpath.LearningSequence",
|
|
||||||
"translation_key": "b09f87c7-01fb-4967-98c1-894ac3144595",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-training",
|
|
||||||
"icon": "it-icon-ls-apply"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 21,
|
|
||||||
"title": "Unterlagen",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-unterlagen",
|
|
||||||
"content_type": "learnpath.LearningUnit",
|
|
||||||
"translation_key": "772d5352-87fa-46a7-8470-368d59565d3a",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-unterlagen",
|
|
||||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/unterlagen",
|
|
||||||
"course_category": {
|
|
||||||
"id": 1,
|
|
||||||
"title": "Allgemein",
|
|
||||||
"general": true
|
|
||||||
},
|
|
||||||
"children": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 22,
|
|
||||||
"title": "Unterlagen f\u00fcr den Unterricht",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-unterlagen-f\u00fcr-den-unterricht",
|
|
||||||
"content_type": "learnpath.LearningContentPlaceholder",
|
|
||||||
"translation_key": "ace9f1e8-5cb7-4b7c-b1c8-d43f2e4f7269",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/unterlagen-f\u00fcr-den-unterricht",
|
|
||||||
"minutes": 15,
|
|
||||||
"description": "Platzhalter",
|
|
||||||
"content_url": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 23,
|
|
||||||
"title": "Pr\u00e4senztag",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-pr\u00e4senztag",
|
|
||||||
"content_type": "learnpath.LearningUnit",
|
|
||||||
"translation_key": "18bc5d1d-ddcf-4e54-b58c-58f1e8833af2",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-pr\u00e4senztag",
|
|
||||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/pr\u00e4senztag",
|
|
||||||
"course_category": {
|
|
||||||
"id": 1,
|
|
||||||
"title": "Allgemein",
|
|
||||||
"general": true
|
|
||||||
},
|
|
||||||
"children": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 24,
|
|
||||||
"title": "Pr\u00e4senztag Fahrzeug",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-pr\u00e4senztag-fahrzeug",
|
|
||||||
"content_type": "learnpath.LearningContentAttendanceDay",
|
|
||||||
"translation_key": "2441afae-83ea-4fb5-a938-8db4352ed6c5",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/pr\u00e4senztag-fahrzeug",
|
|
||||||
"minutes": 15,
|
|
||||||
"description": "Platzhalter Beschreibung",
|
|
||||||
"content_url": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 25,
|
|
||||||
"title": "Kompetenznachweis",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-kompetenznachweis",
|
|
||||||
"content_type": "learnpath.LearningUnit",
|
|
||||||
"translation_key": "b115d4e0-f487-4d03-a7cf-08d90bb4813d",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-kompetenznachweis",
|
|
||||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/kompetenznachweis",
|
|
||||||
"course_category": {
|
|
||||||
"id": 1,
|
|
||||||
"title": "Allgemein",
|
|
||||||
"general": true
|
|
||||||
},
|
|
||||||
"children": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 26,
|
|
||||||
"title": "Wissens- und Verst\u00e4ndnisfragen",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verst\u00e4ndnisfragen",
|
|
||||||
"content_type": "learnpath.LearningContentPlaceholder",
|
|
||||||
"translation_key": "053c32bd-6174-444b-95fe-35ad2e15edf5",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/wissens-und-verst\u00e4ndnisfragen",
|
|
||||||
"minutes": 15,
|
|
||||||
"description": "Platzhalter",
|
|
||||||
"content_url": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 27,
|
|
||||||
"title": "Transfer",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-transfer",
|
|
||||||
"content_type": "learnpath.LearningSequence",
|
|
||||||
"translation_key": "58939dc7-dd19-4996-b4bf-aba348be092a",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-transfer",
|
|
||||||
"icon": "it-icon-ls-end"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 28,
|
|
||||||
"title": "Transfer",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-transfer",
|
|
||||||
"content_type": "learnpath.LearningUnit",
|
|
||||||
"translation_key": "185568d3-9ba3-433d-9480-4f492d9d3235",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-transfer",
|
|
||||||
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/transfer",
|
|
||||||
"course_category": {
|
|
||||||
"id": 1,
|
|
||||||
"title": "Allgemein",
|
|
||||||
"general": true
|
|
||||||
},
|
|
||||||
"children": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 29,
|
|
||||||
"title": "Reflexion",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-reflexion",
|
|
||||||
"content_type": "learnpath.LearningContentPlaceholder",
|
|
||||||
"translation_key": "c62d4cf6-2505-40f7-8764-41fa1ea0057c",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/reflexion",
|
|
||||||
"minutes": 15,
|
|
||||||
"description": "Platzhalter",
|
|
||||||
"content_url": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 30,
|
|
||||||
"title": "\u00dcberpr\u00fcfen einer Motorfahrzeug-Versicherungspolice",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
|
|
||||||
"content_type": "learnpath.LearningContentAssignment",
|
|
||||||
"translation_key": "53cc2b76-ea59-47a2-a15a-ebf19897e9b1",
|
|
||||||
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
|
|
||||||
"minutes": 15,
|
|
||||||
"description": "",
|
|
||||||
"content_url": "",
|
|
||||||
"content_assignment_id": 9
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 31,
|
|
||||||
"title": "Feedback",
|
|
||||||
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-feedback",
|
|
||||||
"content_type": "learnpath.LearningContentFeedback",
|
|
||||||
"translation_key": "d78bded2-a760-492c-9249-283230d98ce0",
|
|
||||||
"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": 32,
|
"id": 15,
|
||||||
"title": "Circle VV",
|
"title": "Verschaffe dir einen \u00dcberblick",
|
||||||
"slug": "test-lehrgang-lp-topic-circle-vv",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-\u00fcberblick",
|
||||||
"content_type": "learnpath.Topic",
|
"content_type": "learnpath.LearningContentPlaceholder",
|
||||||
"translation_key": "19611237-22e1-40e6-b5b1-a34ff470df14",
|
"translation_key": "47698ce1-0e4f-446d-a23d-8a9e9c906ff7",
|
||||||
"frontend_url": "",
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/verschaffe-dir-einen-\u00fcberblick",
|
||||||
"is_visible": false
|
"minutes": 15,
|
||||||
|
"description": "Platzhalter",
|
||||||
|
"content_url": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 33,
|
"id": 16,
|
||||||
"title": "Reisen",
|
"title": "Mediathek Fahrzeug",
|
||||||
"slug": "test-lehrgang-lp-circle-reisen",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug",
|
||||||
"content_type": "learnpath.Circle",
|
"content_type": "learnpath.LearningContentMediaLibrary",
|
||||||
"translation_key": "2aaf0215-693a-407c-9f1c-bdb80f982c92",
|
"translation_key": "34e79a3b-c1f9-49ff-b779-0149d614f02c",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen",
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/mediathek-fahrzeug",
|
||||||
"children": [
|
"minutes": 15,
|
||||||
{
|
"description": "",
|
||||||
"id": 34,
|
"content_url": "/media/\u00fcberbetriebliche-kurse-media/category/fahrzeug"
|
||||||
"title": "Starten",
|
},
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-ls-starten",
|
{
|
||||||
"content_type": "learnpath.LearningSequence",
|
"id": 17,
|
||||||
"translation_key": "e4b0eac3-3a7c-435f-8151-f69c40b35fd6",
|
"title": "Vorbereitungsauftrag",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-starten",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag",
|
||||||
"icon": "it-icon-ls-start"
|
"content_type": "learnpath.LearningContentPlaceholder",
|
||||||
},
|
"translation_key": "8feca9cd-4937-4406-b44d-564f341e8bfe",
|
||||||
{
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/vorbereitungsauftrag",
|
||||||
"id": 35,
|
"minutes": 15,
|
||||||
"title": "Einf\u00fchrung",
|
"description": "Platzhalter",
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lu-einf\u00fchrung",
|
"content_url": ""
|
||||||
"content_type": "learnpath.LearningUnit",
|
},
|
||||||
"translation_key": "9f0d6302-d058-4f93-b08e-9dbd4b8b8ed3",
|
{
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-einf\u00fchrung",
|
"id": 20,
|
||||||
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/einf\u00fchrung",
|
"title": "Training",
|
||||||
"course_category": {
|
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-training",
|
||||||
"id": 1,
|
"content_type": "learnpath.LearningSequence",
|
||||||
"title": "Allgemein",
|
"translation_key": "b09f87c7-01fb-4967-98c1-894ac3144595",
|
||||||
"general": true
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-training",
|
||||||
},
|
"icon": "it-icon-ls-apply"
|
||||||
"children": []
|
},
|
||||||
},
|
{
|
||||||
{
|
"id": 21,
|
||||||
"id": 36,
|
"title": "Unterlagen",
|
||||||
"title": "Verschaff dir einen \u00dcberblick",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-unterlagen",
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lc-verschaff-dir-einen-\u00fcberblick",
|
"content_type": "learnpath.LearningUnit",
|
||||||
"content_type": "learnpath.LearningContentVideo",
|
"translation_key": "772d5352-87fa-46a7-8470-368d59565d3a",
|
||||||
"translation_key": "e666b414-175f-439d-9dfd-e1c434a8cc0e",
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-unterlagen",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen/verschaff-dir-einen-\u00fcberblick",
|
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/unterlagen",
|
||||||
"minutes": 15,
|
"course_category": {
|
||||||
"description": "Willkommen im Lehrgang Versicherungsvermitler VBV",
|
"id": 1,
|
||||||
"content_url": "https://player.vimeo.com/video/772512710?h=30f912f15a"
|
"title": "Allgemein",
|
||||||
},
|
"general": true
|
||||||
{
|
},
|
||||||
"id": 37,
|
"children": []
|
||||||
"title": "Mediathek Reisen",
|
},
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lc-mediathek-reisen",
|
{
|
||||||
"content_type": "learnpath.LearningContentMediaLibrary",
|
"id": 22,
|
||||||
"translation_key": "3b4cae41-185f-40f2-86c0-f96057214ada",
|
"title": "Unterlagen f\u00fcr den Unterricht",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen/mediathek-reisen",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-unterlagen-f\u00fcr-den-unterricht",
|
||||||
"minutes": 15,
|
"content_type": "learnpath.LearningContentPlaceholder",
|
||||||
"description": "",
|
"translation_key": "ace9f1e8-5cb7-4b7c-b1c8-d43f2e4f7269",
|
||||||
"content_url": "/media/test-lehrgang-media/category/reisen"
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/unterlagen-f\u00fcr-den-unterricht",
|
||||||
},
|
"minutes": 15,
|
||||||
{
|
"description": "Platzhalter",
|
||||||
"id": 38,
|
"content_url": ""
|
||||||
"title": "Analyse",
|
},
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-ls-analyse",
|
{
|
||||||
"content_type": "learnpath.LearningSequence",
|
"id": 23,
|
||||||
"translation_key": "84be9e5b-6517-4a6d-85a3-1bdf90f78780",
|
"title": "Pr\u00e4senztag",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-analyse",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-pr\u00e4senztag",
|
||||||
"icon": "it-icon-ls-apply"
|
"content_type": "learnpath.LearningUnit",
|
||||||
},
|
"translation_key": "18bc5d1d-ddcf-4e54-b58c-58f1e8833af2",
|
||||||
{
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-pr\u00e4senztag",
|
||||||
"id": 39,
|
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/pr\u00e4senztag",
|
||||||
"title": "Bedarfsanalyse, Ist- und Soll-Situation",
|
"course_category": {
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lu-reisen",
|
"id": 1,
|
||||||
"content_type": "learnpath.LearningUnit",
|
"title": "Allgemein",
|
||||||
"translation_key": "7cc1e966-75db-4703-8de4-1a3171372299",
|
"general": true
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-reisen",
|
},
|
||||||
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/reisen",
|
"children": []
|
||||||
"course_category": {
|
},
|
||||||
"id": 3,
|
{
|
||||||
"title": "Reisen",
|
"id": 24,
|
||||||
"general": false
|
"title": "Pr\u00e4senztag Fahrzeug",
|
||||||
},
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-pr\u00e4senztag-fahrzeug",
|
||||||
"children": [
|
"content_type": "learnpath.LearningContentAttendanceCourse",
|
||||||
{
|
"translation_key": "2441afae-83ea-4fb5-a938-8db4352ed6c5",
|
||||||
"id": 41,
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/pr\u00e4senztag-fahrzeug",
|
||||||
"title": "Ich bin f\u00e4hig zu Reisen eine Gespr\u00e4chsf\u00fchrung zu machen",
|
"minutes": 15,
|
||||||
"slug": "test-lehrgang-competence-crit-y11-reisen",
|
"description": "Platzhalter Beschreibung",
|
||||||
"content_type": "competence.PerformanceCriteria",
|
"content_url": ""
|
||||||
"translation_key": "b82dfd37-649f-488c-a78e-c6a3257c3f43",
|
},
|
||||||
"frontend_url": "",
|
{
|
||||||
"competence_id": "Y1.1"
|
"id": 25,
|
||||||
},
|
"title": "Kompetenznachweis",
|
||||||
{
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-kompetenznachweis",
|
||||||
"id": 42,
|
"content_type": "learnpath.LearningUnit",
|
||||||
"title": "Ich bin f\u00e4hig zu Reisen eine Analyse zu machen",
|
"translation_key": "b115d4e0-f487-4d03-a7cf-08d90bb4813d",
|
||||||
"slug": "test-lehrgang-competence-crit-y21-reisen",
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-kompetenznachweis",
|
||||||
"content_type": "competence.PerformanceCriteria",
|
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/kompetenznachweis",
|
||||||
"translation_key": "9cf4e552-9dc1-46f8-b3e2-800e7bfd4afe",
|
"course_category": {
|
||||||
"frontend_url": "",
|
"id": 1,
|
||||||
"competence_id": "Y2.1"
|
"title": "Allgemein",
|
||||||
}
|
"general": true
|
||||||
]
|
},
|
||||||
},
|
"children": []
|
||||||
{
|
},
|
||||||
"id": 40,
|
{
|
||||||
"title": "Emma und Ayla campen durch Amerika - Analyse",
|
"id": 26,
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lc-emma-und-ayla-campen-durch-amerika-analyse",
|
"title": "Wissens- und Verst\u00e4ndnisfragen",
|
||||||
"content_type": "learnpath.LearningContentLearningModule",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verst\u00e4ndnisfragen",
|
||||||
"translation_key": "a2b7889c-1143-4cc1-b4f7-0e611de60ee1",
|
"content_type": "learnpath.LearningContentPlaceholder",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen/emma-und-ayla-campen-durch-amerika-analyse",
|
"translation_key": "053c32bd-6174-444b-95fe-35ad2e15edf5",
|
||||||
"minutes": 15,
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/wissens-und-verst\u00e4ndnisfragen",
|
||||||
"description": "",
|
"minutes": 15,
|
||||||
"content_url": "https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-FZoZOP9y/index.html"
|
"description": "Platzhalter",
|
||||||
},
|
"content_url": ""
|
||||||
{
|
},
|
||||||
"id": 43,
|
{
|
||||||
"title": "Transfer",
|
"id": 27,
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-ls-transfer",
|
"title": "Transfer",
|
||||||
"content_type": "learnpath.LearningSequence",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-transfer",
|
||||||
"translation_key": "655a349d-48e4-4831-b518-872d0714d9e3",
|
"content_type": "learnpath.LearningSequence",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-transfer",
|
"translation_key": "58939dc7-dd19-4996-b4bf-aba348be092a",
|
||||||
"icon": "it-icon-ls-end"
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-transfer",
|
||||||
},
|
"icon": "it-icon-ls-end"
|
||||||
{
|
},
|
||||||
"id": 44,
|
{
|
||||||
"title": "Transfer, Reflexion, Feedback",
|
"id": 28,
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lu-transfer-reflexion-feedback",
|
"title": "Transfer",
|
||||||
"content_type": "learnpath.LearningUnit",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-transfer",
|
||||||
"translation_key": "8d7cc58a-3a91-49ea-906f-c1de57fec0b2",
|
"content_type": "learnpath.LearningUnit",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-transfer-reflexion-feedback",
|
"translation_key": "185568d3-9ba3-433d-9480-4f492d9d3235",
|
||||||
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/transfer-reflexion-feedback",
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-transfer",
|
||||||
"course_category": {
|
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/transfer",
|
||||||
"id": 1,
|
"course_category": {
|
||||||
"title": "Allgemein",
|
"id": 1,
|
||||||
"general": true
|
"title": "Allgemein",
|
||||||
},
|
"general": true
|
||||||
"children": []
|
},
|
||||||
},
|
"children": []
|
||||||
{
|
},
|
||||||
"id": 45,
|
{
|
||||||
"title": "Auswandern: Woran muss ich denken?",
|
"id": 29,
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lc-auswandern-woran-muss-ich-denken",
|
"title": "Reflexion",
|
||||||
"content_type": "learnpath.LearningContentPlaceholder",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-reflexion",
|
||||||
"translation_key": "691d7659-8bd9-4baa-92fd-022e9d418c46",
|
"content_type": "learnpath.LearningContentPlaceholder",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen/auswandern-woran-muss-ich-denken",
|
"translation_key": "c62d4cf6-2505-40f7-8764-41fa1ea0057c",
|
||||||
"minutes": 15,
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/reflexion",
|
||||||
"description": "Platzhalter",
|
"minutes": 15,
|
||||||
"content_url": ""
|
"description": "Platzhalter",
|
||||||
},
|
"content_url": ""
|
||||||
{
|
},
|
||||||
"id": 46,
|
{
|
||||||
"title": "Fachcheck Reisen",
|
"id": 30,
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen",
|
"title": "\u00dcberpr\u00fcfen einer Motorfahrzeug-Versicherungspolice",
|
||||||
"content_type": "learnpath.LearningContentPlaceholder",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
|
||||||
"translation_key": "26294bc1-9dfe-4c17-a231-02a1387e8dcf",
|
"content_type": "learnpath.LearningContentAssignment",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen/fachcheck-reisen",
|
"translation_key": "53cc2b76-ea59-47a2-a15a-ebf19897e9b1",
|
||||||
"minutes": 15,
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
|
||||||
"description": "Platzhalter",
|
"minutes": 15,
|
||||||
"content_url": ""
|
"description": "",
|
||||||
},
|
"content_url": "",
|
||||||
{
|
"content_assignment_id": 9
|
||||||
"id": 47,
|
},
|
||||||
"title": "Reflexion",
|
{
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lc-reflexion",
|
"id": 31,
|
||||||
"content_type": "learnpath.LearningContentPlaceholder",
|
"title": "Feedback",
|
||||||
"translation_key": "cd091a5d-63e8-4a4d-8178-d0224e869146",
|
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-feedback",
|
||||||
"frontend_url": "/course/test-lehrgang/learn/reisen/reflexion",
|
"content_type": "learnpath.LearningContentFeedback",
|
||||||
"minutes": 15,
|
"translation_key": "d78bded2-a760-492c-9249-283230d98ce0",
|
||||||
"description": "Platzhalter",
|
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/feedback",
|
||||||
"content_url": ""
|
"minutes": 15,
|
||||||
},
|
"description": "",
|
||||||
{
|
"content_url": ""
|
||||||
"id": 48,
|
|
||||||
"title": "Feedback",
|
|
||||||
"slug": "test-lehrgang-lp-circle-reisen-lc-feedback",
|
|
||||||
"content_type": "learnpath.LearningContentFeedback",
|
|
||||||
"translation_key": "ca35688c-f8ee-4aaf-b435-6e84163d9ea6",
|
|
||||||
"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 "
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"course": {
|
"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.",
|
||||||
"id": -1,
|
"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 "
|
||||||
"title": "Test Lehrgang",
|
},
|
||||||
"category_name": "Handlungsfeld",
|
{
|
||||||
"slug": "test-lehrgang"
|
"id": 32,
|
||||||
|
"title": "Circle VV",
|
||||||
|
"slug": "test-lehrgang-lp-topic-circle-vv",
|
||||||
|
"content_type": "learnpath.Topic",
|
||||||
|
"translation_key": "19611237-22e1-40e6-b5b1-a34ff470df14",
|
||||||
|
"frontend_url": "",
|
||||||
|
"is_visible": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 33,
|
||||||
|
"title": "Reisen",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen",
|
||||||
|
"content_type": "learnpath.Circle",
|
||||||
|
"translation_key": "2aaf0215-693a-407c-9f1c-bdb80f982c92",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": 34,
|
||||||
|
"title": "Starten",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-ls-starten",
|
||||||
|
"content_type": "learnpath.LearningSequence",
|
||||||
|
"translation_key": "e4b0eac3-3a7c-435f-8151-f69c40b35fd6",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-starten",
|
||||||
|
"icon": "it-icon-ls-start"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 35,
|
||||||
|
"title": "Einf\u00fchrung",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lu-einf\u00fchrung",
|
||||||
|
"content_type": "learnpath.LearningUnit",
|
||||||
|
"translation_key": "9f0d6302-d058-4f93-b08e-9dbd4b8b8ed3",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-einf\u00fchrung",
|
||||||
|
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/einf\u00fchrung",
|
||||||
|
"course_category": {
|
||||||
|
"id": 1,
|
||||||
|
"title": "Allgemein",
|
||||||
|
"general": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 36,
|
||||||
|
"title": "Verschaff dir einen \u00dcberblick",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lc-verschaff-dir-einen-\u00fcberblick",
|
||||||
|
"content_type": "learnpath.LearningContentVideo",
|
||||||
|
"translation_key": "e666b414-175f-439d-9dfd-e1c434a8cc0e",
|
||||||
|
"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": 37,
|
||||||
|
"title": "Mediathek Reisen",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lc-mediathek-reisen",
|
||||||
|
"content_type": "learnpath.LearningContentMediaLibrary",
|
||||||
|
"translation_key": "3b4cae41-185f-40f2-86c0-f96057214ada",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen/mediathek-reisen",
|
||||||
|
"minutes": 15,
|
||||||
|
"description": "",
|
||||||
|
"content_url": "/media/test-lehrgang-media/category/reisen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 38,
|
||||||
|
"title": "Analyse",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-ls-analyse",
|
||||||
|
"content_type": "learnpath.LearningSequence",
|
||||||
|
"translation_key": "84be9e5b-6517-4a6d-85a3-1bdf90f78780",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-analyse",
|
||||||
|
"icon": "it-icon-ls-apply"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 39,
|
||||||
|
"title": "Bedarfsanalyse, Ist- und Soll-Situation",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lu-reisen",
|
||||||
|
"content_type": "learnpath.LearningUnit",
|
||||||
|
"translation_key": "7cc1e966-75db-4703-8de4-1a3171372299",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-reisen",
|
||||||
|
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/reisen",
|
||||||
|
"course_category": {
|
||||||
|
"id": 3,
|
||||||
|
"title": "Reisen",
|
||||||
|
"general": false
|
||||||
|
},
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"id": 41,
|
||||||
|
"title": "Ich bin f\u00e4hig zu Reisen eine Gespr\u00e4chsf\u00fchrung zu machen",
|
||||||
|
"slug": "test-lehrgang-competence-crit-y11-reisen",
|
||||||
|
"content_type": "competence.PerformanceCriteria",
|
||||||
|
"translation_key": "b82dfd37-649f-488c-a78e-c6a3257c3f43",
|
||||||
|
"frontend_url": "",
|
||||||
|
"competence_id": "Y1.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 42,
|
||||||
|
"title": "Ich bin f\u00e4hig zu Reisen eine Analyse zu machen",
|
||||||
|
"slug": "test-lehrgang-competence-crit-y21-reisen",
|
||||||
|
"content_type": "competence.PerformanceCriteria",
|
||||||
|
"translation_key": "9cf4e552-9dc1-46f8-b3e2-800e7bfd4afe",
|
||||||
|
"frontend_url": "",
|
||||||
|
"competence_id": "Y2.1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 40,
|
||||||
|
"title": "Emma und Ayla campen durch Amerika - Analyse",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lc-emma-und-ayla-campen-durch-amerika-analyse",
|
||||||
|
"content_type": "learnpath.LearningContentLearningModule",
|
||||||
|
"translation_key": "a2b7889c-1143-4cc1-b4f7-0e611de60ee1",
|
||||||
|
"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": 43,
|
||||||
|
"title": "Transfer",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-ls-transfer",
|
||||||
|
"content_type": "learnpath.LearningSequence",
|
||||||
|
"translation_key": "655a349d-48e4-4831-b518-872d0714d9e3",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-transfer",
|
||||||
|
"icon": "it-icon-ls-end"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 44,
|
||||||
|
"title": "Transfer, Reflexion, Feedback",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lu-transfer-reflexion-feedback",
|
||||||
|
"content_type": "learnpath.LearningUnit",
|
||||||
|
"translation_key": "8d7cc58a-3a91-49ea-906f-c1de57fec0b2",
|
||||||
|
"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": 1,
|
||||||
|
"title": "Allgemein",
|
||||||
|
"general": true
|
||||||
|
},
|
||||||
|
"children": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 45,
|
||||||
|
"title": "Auswandern: Woran muss ich denken?",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lc-auswandern-woran-muss-ich-denken",
|
||||||
|
"content_type": "learnpath.LearningContentPlaceholder",
|
||||||
|
"translation_key": "691d7659-8bd9-4baa-92fd-022e9d418c46",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen/auswandern-woran-muss-ich-denken",
|
||||||
|
"minutes": 15,
|
||||||
|
"description": "Platzhalter",
|
||||||
|
"content_url": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 46,
|
||||||
|
"title": "Fachcheck Reisen",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen",
|
||||||
|
"content_type": "learnpath.LearningContentPlaceholder",
|
||||||
|
"translation_key": "26294bc1-9dfe-4c17-a231-02a1387e8dcf",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen/fachcheck-reisen",
|
||||||
|
"minutes": 15,
|
||||||
|
"description": "Platzhalter",
|
||||||
|
"content_url": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 47,
|
||||||
|
"title": "Reflexion",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lc-reflexion",
|
||||||
|
"content_type": "learnpath.LearningContentPlaceholder",
|
||||||
|
"translation_key": "cd091a5d-63e8-4a4d-8178-d0224e869146",
|
||||||
|
"frontend_url": "/course/test-lehrgang/learn/reisen/reflexion",
|
||||||
|
"minutes": 15,
|
||||||
|
"description": "Platzhalter",
|
||||||
|
"content_url": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 48,
|
||||||
|
"title": "Feedback",
|
||||||
|
"slug": "test-lehrgang-lp-circle-reisen-lc-feedback",
|
||||||
|
"content_type": "learnpath.LearningContentFeedback",
|
||||||
|
"translation_key": "ca35688c-f8ee-4aaf-b435-6e84163d9ea6",
|
||||||
|
"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 "
|
||||||
}
|
}
|
||||||
}
|
],
|
||||||
|
"course": {
|
||||||
|
"id": -1,
|
||||||
|
"title": "Test Lehrgang",
|
||||||
|
"category_name": "Handlungsfeld",
|
||||||
|
"slug": "test-lehrgang"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,9 @@ export function calcAssignmentLearningContents(learningPath?: LearningPath) {
|
||||||
|
|
||||||
return learningPath.circles.flatMap((circle) => {
|
return learningPath.circles.flatMap((circle) => {
|
||||||
const learningContents = circle.flatLearningContents.filter(
|
const learningContents = circle.flatLearningContents.filter(
|
||||||
(lc) => lc.content_type === "learnpath.LearningContentAssignment"
|
(lc) =>
|
||||||
|
lc.content_type === "learnpath.LearningContentAssignment" &&
|
||||||
|
lc.assignment_type === "CASEWORK"
|
||||||
) as LearningContentAssignment[];
|
) as LearningContentAssignment[];
|
||||||
return learningContents.map((lc) => {
|
return learningContents.map((lc) => {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import values from "lodash/values";
|
||||||
function isLearningContentType(object: any): object is LearningContent {
|
function isLearningContentType(object: any): object is LearningContent {
|
||||||
return (
|
return (
|
||||||
object?.content_type === "learnpath.LearningContentAssignment" ||
|
object?.content_type === "learnpath.LearningContentAssignment" ||
|
||||||
object?.content_type === "learnpath.LearningContentAttendanceDay" ||
|
object?.content_type === "learnpath.LearningContentAttendanceCourse" ||
|
||||||
object?.content_type === "learnpath.LearningContentFeedback" ||
|
object?.content_type === "learnpath.LearningContentFeedback" ||
|
||||||
object?.content_type === "learnpath.LearningContentLearningModule" ||
|
object?.content_type === "learnpath.LearningContentLearningModule" ||
|
||||||
object?.content_type === "learnpath.LearningContentMediaLibrary" ||
|
object?.content_type === "learnpath.LearningContentMediaLibrary" ||
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ describe("CourseSession Store", () => {
|
||||||
competence_url: "/course/test-course/competence/",
|
competence_url: "/course/test-course/competence/",
|
||||||
course_url: "/course/test-course/",
|
course_url: "/course/test-course/",
|
||||||
media_library_url: "/course/test-course/media/",
|
media_library_url: "/course/test-course/media/",
|
||||||
attendance_days: [],
|
attendance_courses: [],
|
||||||
additional_json_data: {},
|
additional_json_data: {},
|
||||||
documents: [],
|
documents: [],
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import type {
|
||||||
CircleDocument,
|
CircleDocument,
|
||||||
CourseSession,
|
CourseSession,
|
||||||
CourseSessionAssignmentDetails,
|
CourseSessionAssignmentDetails,
|
||||||
CourseSessionAttendanceDay,
|
CourseSessionAttendanceCourse,
|
||||||
CourseSessionUser,
|
CourseSessionUser,
|
||||||
ExpertSessionUser,
|
ExpertSessionUser,
|
||||||
} from "@/types";
|
} from "@/types";
|
||||||
|
|
@ -210,12 +210,12 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function findAttendanceDay(
|
function findAttendanceCourse(
|
||||||
contentId: number
|
contentId: number
|
||||||
): CourseSessionAttendanceDay | undefined {
|
): CourseSessionAttendanceCourse | undefined {
|
||||||
if (currentCourseSession.value) {
|
if (currentCourseSession.value) {
|
||||||
return currentCourseSession.value.attendance_days.find(
|
return currentCourseSession.value.attendance_courses.find(
|
||||||
(attendanceDay) => attendanceDay.learningContentId === contentId
|
(attendanceCourse) => attendanceCourse.learningContentId === contentId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -243,7 +243,7 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
|
||||||
addDocument,
|
addDocument,
|
||||||
startUpload,
|
startUpload,
|
||||||
removeDocument,
|
removeDocument,
|
||||||
findAttendanceDay,
|
findAttendanceCourse,
|
||||||
findAssignmentDetails,
|
findAssignmentDetails,
|
||||||
|
|
||||||
// use `useCurrentCourseSession` whenever possible
|
// use `useCurrentCourseSession` whenever possible
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ export interface CircleLight {
|
||||||
|
|
||||||
export type LearningContent =
|
export type LearningContent =
|
||||||
| LearningContentAssignment
|
| LearningContentAssignment
|
||||||
| LearningContentAttendanceDay
|
| LearningContentAttendanceCourse
|
||||||
| LearningContentFeedback
|
| LearningContentFeedback
|
||||||
| LearningContentLearningModule
|
| LearningContentLearningModule
|
||||||
| LearningContentMediaLibrary
|
| LearningContentMediaLibrary
|
||||||
|
|
@ -48,10 +48,11 @@ export interface LearningContentInterface extends BaseCourseWagtailPage {
|
||||||
export interface LearningContentAssignment extends LearningContentInterface {
|
export interface LearningContentAssignment extends LearningContentInterface {
|
||||||
readonly content_type: "learnpath.LearningContentAssignment";
|
readonly content_type: "learnpath.LearningContentAssignment";
|
||||||
readonly content_assignment_id: number;
|
readonly content_assignment_id: number;
|
||||||
|
readonly assignment_type: AssignmentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LearningContentAttendanceDay extends LearningContentInterface {
|
export interface LearningContentAttendanceCourse extends LearningContentInterface {
|
||||||
readonly content_type: "learnpath.LearningContentAttendanceDay";
|
readonly content_type: "learnpath.LearningContentAttendanceCourse";
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LearningContentFeedback extends LearningContentInterface {
|
export interface LearningContentFeedback extends LearningContentInterface {
|
||||||
|
|
@ -326,9 +327,12 @@ export interface AssignmentEvaluationTask {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type AssignmentType = "CASEWORK" | "PREP_ASSIGNMENT" | "REFLECTION";
|
||||||
|
|
||||||
export interface Assignment extends BaseCourseWagtailPage {
|
export interface Assignment extends BaseCourseWagtailPage {
|
||||||
readonly content_type: "assignment.Assignment";
|
readonly content_type: "assignment.Assignment";
|
||||||
readonly starting_position: string;
|
readonly assignment_type: AssignmentType;
|
||||||
|
readonly intro_text: string;
|
||||||
readonly effort_required: string;
|
readonly effort_required: string;
|
||||||
readonly performance_objectives: AssignmentPerformanceObjective[];
|
readonly performance_objectives: AssignmentPerformanceObjective[];
|
||||||
readonly evaluation_description: string;
|
readonly evaluation_description: string;
|
||||||
|
|
@ -390,12 +394,10 @@ export interface CircleDocument {
|
||||||
learning_sequence: number;
|
learning_sequence: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO refactor, when a user can manually create these days
|
export interface CourseSessionAttendanceCourse {
|
||||||
export interface CourseSessionAttendanceDay {
|
|
||||||
learningContentId: number;
|
learningContentId: number;
|
||||||
date: string;
|
start: string;
|
||||||
startTime: string;
|
end: string;
|
||||||
endTime: string;
|
|
||||||
location: string;
|
location: string;
|
||||||
trainer: string;
|
trainer: string;
|
||||||
}
|
}
|
||||||
|
|
@ -419,7 +421,7 @@ export interface CourseSession {
|
||||||
competence_url: string;
|
competence_url: string;
|
||||||
course_url: string;
|
course_url: string;
|
||||||
media_library_url: string;
|
media_library_url: string;
|
||||||
attendance_days: CourseSessionAttendanceDay[];
|
attendance_courses: CourseSessionAttendanceCourse[];
|
||||||
assignment_details_list: CourseSessionAssignmentDetails[];
|
assignment_details_list: CourseSessionAssignmentDetails[];
|
||||||
documents: CircleDocument[];
|
documents: CircleDocument[];
|
||||||
users: CourseSessionUser[];
|
users: CourseSessionUser[];
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import type { LearningContentType } from "@/types";
|
import type { LearningContent } from "@/types";
|
||||||
import { assertUnreachable } from "@/utils/utils";
|
import { assertUnreachable } from "@/utils/utils";
|
||||||
|
|
||||||
export interface LearningContentIdentifier {
|
export interface LearningContentIdentifier {
|
||||||
|
|
@ -7,13 +7,25 @@ export interface LearningContentIdentifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function learningContentTypeData(
|
export function learningContentTypeData(
|
||||||
t: LearningContentType
|
lc: LearningContent
|
||||||
): LearningContentIdentifier {
|
): LearningContentIdentifier {
|
||||||
switch (t) {
|
switch (lc.content_type) {
|
||||||
case "learnpath.LearningContentAssignment":
|
case "learnpath.LearningContentAssignment": {
|
||||||
return { title: "Transferauftrag", icon: "it-icon-lc-assignment" };
|
let title = "unknown";
|
||||||
case "learnpath.LearningContentAttendanceDay":
|
if (lc.assignment_type === "CASEWORK") {
|
||||||
return { title: "Präsenztag", icon: "it-icon-lc-training" };
|
title = "Geleitete Fallarbeit";
|
||||||
|
} else if (lc.assignment_type === "PREP_ASSIGNMENT") {
|
||||||
|
title = "Vorbereitungsaufgabe";
|
||||||
|
} else if (lc.assignment_type === "REFLECTION") {
|
||||||
|
title = "Reflexion";
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title: title,
|
||||||
|
icon: "it-icon-lc-assignment",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
case "learnpath.LearningContentAttendanceCourse":
|
||||||
|
return { title: "Präsenzkurs", icon: "it-icon-lc-training" };
|
||||||
case "learnpath.LearningContentLearningModule":
|
case "learnpath.LearningContentLearningModule":
|
||||||
return { title: "Lernmodul", icon: "it-icon-lc-learning-module" };
|
return { title: "Lernmodul", icon: "it-icon-lc-learning-module" };
|
||||||
case "learnpath.LearningContentMediaLibrary":
|
case "learnpath.LearningContentMediaLibrary":
|
||||||
|
|
|
||||||
|
|
@ -29,12 +29,18 @@ body {
|
||||||
|
|
||||||
.default-wagtail-rich-text h3 {
|
.default-wagtail-rich-text h3 {
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
|
margin-top: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.default-wagtail-rich-text p {
|
.default-wagtail-rich-text p {
|
||||||
margin-bottom: 0.5em;
|
margin-bottom: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.default-wagtail-rich-text a {
|
||||||
|
text-decoration-line: underline;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.default-wagtail-rich-text ul {
|
.default-wagtail-rich-text ul {
|
||||||
list-style-type: disc;
|
list-style-type: disc;
|
||||||
margin-left: 24px;
|
margin-left: 24px;
|
||||||
|
|
@ -129,7 +135,7 @@ textarea {
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-secondary {
|
.btn-secondary {
|
||||||
@apply inline-block border-2 border-blue-900 bg-white px-4
|
@apply inline-block border-2 border-blue-900 bg-transparent px-4
|
||||||
py-2 align-middle font-semibold text-blue-900
|
py-2 align-middle font-semibold text-blue-900
|
||||||
hover:bg-gray-200
|
hover:bg-gray-200
|
||||||
disabled:cursor-not-allowed disabled:opacity-50;
|
disabled:cursor-not-allowed disabled:opacity-50;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { login } from "./helpers";
|
import { login } from "./helpers";
|
||||||
|
|
||||||
describe("circle page", () => {
|
describe("circle.cy.js", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.manageCommand("cypress_reset");
|
cy.manageCommand("cypress_reset");
|
||||||
|
|
||||||
|
|
@ -47,20 +47,12 @@ describe("circle page", () => {
|
||||||
);
|
);
|
||||||
cy.get('[data-cy="complete-and-continue"]').click({ force: true });
|
cy.get('[data-cy="complete-and-continue"]').click({ force: true });
|
||||||
|
|
||||||
cy.get('[data-cy="ls-continue-button"]').click();
|
|
||||||
cy.get('[data-cy="lc-title"]').should("contain", "Vorbereitungsauftrag");
|
|
||||||
cy.get('[data-cy="complete-and-continue"]').click({ force: true });
|
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-überblick-checkbox"] > .cy-checkbox-checked'
|
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-überblick-checkbox"] > .cy-checkbox-checked'
|
||||||
).should("have.class", "cy-checkbox-checked");
|
).should("have.class", "cy-checkbox-checked");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-handlungsfeld-fahrzeug-checkbox"] > .cy-checkbox-checked'
|
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-handlungsfeld-fahrzeug-checkbox"] > .cy-checkbox-checked'
|
||||||
).should("have.class", "cy-checkbox-checked");
|
).should("have.class", "cy-checkbox-checked");
|
||||||
|
|
||||||
cy.get(
|
|
||||||
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag-checkbox"] > .cy-checkbox-checked'
|
|
||||||
).should("have.class", "cy-checkbox-checked");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("continue button works", () => {
|
it("continue button works", () => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { login } from "./helpers";
|
import { login } from "./helpers";
|
||||||
|
|
||||||
describe("Competence", () => {
|
describe("competence.cy.js", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.manageCommand("cypress_reset");
|
cy.manageCommand("cypress_reset");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { login } from "./helpers";
|
import { login } from "./helpers";
|
||||||
|
|
||||||
describe("learningPath page", () => {
|
describe("learningPath.cy.js", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.manageCommand("cypress_reset");
|
cy.manageCommand("cypress_reset");
|
||||||
login("test-student1@example.com", "test");
|
login("test-student1@example.com", "test");
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { login } from "./helpers";
|
import { login } from "./helpers";
|
||||||
|
|
||||||
describe("login", () => {
|
describe("login.cy.js", () => {
|
||||||
Cypress.on("uncaught:exception", (err, runnable) => {
|
Cypress.on("uncaught:exception", (err, runnable) => {
|
||||||
// do not fail on failed requests during tests
|
// do not fail on failed requests during tests
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { login } from "./helpers";
|
import { login } from "./helpers";
|
||||||
|
|
||||||
describe("MediaLibrary", () => {
|
describe("mediaLibrary.cy.js", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.manageCommand("cypress_reset");
|
cy.manageCommand("cypress_reset");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { login } from "./helpers";
|
import { login } from "./helpers";
|
||||||
|
|
||||||
describe("notifications page", () => {
|
describe("notifications.cy.js", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.manageCommand("cypress_reset");
|
cy.manageCommand("cypress_reset");
|
||||||
cy.manageCommand("create_default_notifications");
|
cy.manageCommand("create_default_notifications");
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
from vbv_lernwelt.assignment.models import (
|
from vbv_lernwelt.assignment.models import (
|
||||||
|
AssignmentListPage,
|
||||||
|
AssignmentType,
|
||||||
EvaluationSubTaskBlock,
|
EvaluationSubTaskBlock,
|
||||||
TaskContentStreamBlock,
|
TaskContentStreamBlock,
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.assignment.tests.assignment_factories import (
|
from vbv_lernwelt.assignment.tests.assignment_factories import (
|
||||||
AssignmentFactory,
|
AssignmentFactory,
|
||||||
AssignmentListPageFactory,
|
|
||||||
EvaluationSubTaskBlockFactory,
|
EvaluationSubTaskBlockFactory,
|
||||||
EvaluationTaskBlockFactory,
|
EvaluationTaskBlockFactory,
|
||||||
ExplanationBlockFactory,
|
ExplanationBlockFactory,
|
||||||
|
|
@ -13,30 +14,35 @@ from vbv_lernwelt.assignment.tests.assignment_factories import (
|
||||||
UserTextInputBlockFactory,
|
UserTextInputBlockFactory,
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.core.utils import replace_whitespace
|
from vbv_lernwelt.core.utils import replace_whitespace
|
||||||
from vbv_lernwelt.course.consts import COURSE_TEST_ID, COURSE_UK
|
from vbv_lernwelt.course.consts import COURSE_UK
|
||||||
from vbv_lernwelt.course.models import CoursePage
|
from vbv_lernwelt.course.models import CoursePage
|
||||||
from wagtail.blocks import StreamValue
|
from wagtail.blocks import StreamValue
|
||||||
from wagtail.blocks.list_block import ListBlock, ListValue
|
from wagtail.blocks.list_block import ListBlock, ListValue
|
||||||
from wagtail.rich_text import RichText
|
from wagtail.rich_text import RichText
|
||||||
|
|
||||||
|
|
||||||
def create_uk_assignments(course_id=COURSE_UK):
|
def create_uk_casework(course_id=COURSE_UK):
|
||||||
course_page = CoursePage.objects.get(course_id=course_id)
|
assignment_list_page = (
|
||||||
assignment_page = AssignmentListPageFactory(
|
CoursePage.objects.get(course_id=course_id)
|
||||||
parent=course_page,
|
.get_children()
|
||||||
|
.exact_type(AssignmentListPage)
|
||||||
|
.first()
|
||||||
)
|
)
|
||||||
|
|
||||||
assignment = AssignmentFactory(
|
assignment = AssignmentFactory(
|
||||||
parent=assignment_page,
|
parent=assignment_list_page,
|
||||||
title="Überprüfen einer Motorfahrzeugs-Versicherungspolice",
|
title="Überprüfen einer Motorfahrzeugs-Versicherungspolice",
|
||||||
effort_required="ca. 5 Stunden",
|
effort_required="ca. 5 Stunden",
|
||||||
starting_position=replace_whitespace(
|
intro_text=replace_whitespace(
|
||||||
"""
|
"""
|
||||||
|
<h3>Ausgangslage</h3>
|
||||||
|
<p>
|
||||||
Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein
|
Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein
|
||||||
Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu
|
Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu
|
||||||
und bittet dich als Versicherungsprofi, diese kritisch zu überprüfen und ihr ggf. Anpassungsvorschläge
|
und bittet dich als Versicherungsprofi, diese kritisch zu überprüfen und ihr ggf. Anpassungsvorschläge
|
||||||
zu unterbreiten. In diesem Kompetenznachweis kannst du nun dein Wissen und Können im Bereich
|
zu unterbreiten. In diesem Kompetenznachweis kannst du nun dein Wissen und Können im Bereich
|
||||||
der Motorfahrzeugversicherung unter Beweis stellen.
|
der Motorfahrzeugversicherung unter Beweis stellen.
|
||||||
|
</p>
|
||||||
"""
|
"""
|
||||||
),
|
),
|
||||||
performance_objectives=[
|
performance_objectives=[
|
||||||
|
|
@ -459,220 +465,50 @@ def create_uk_assignments(course_id=COURSE_UK):
|
||||||
return assignment
|
return assignment
|
||||||
|
|
||||||
|
|
||||||
def create_test_assignment(course_id=COURSE_TEST_ID):
|
def create_uk_prep_assignment(course_id=COURSE_UK):
|
||||||
course_page = CoursePage.objects.get(course_id=course_id)
|
assignment_list_page = (
|
||||||
assignment_page = AssignmentListPageFactory(
|
CoursePage.objects.get(course_id=course_id)
|
||||||
parent=course_page,
|
.get_children()
|
||||||
|
.exact_type(AssignmentListPage)
|
||||||
|
.first()
|
||||||
)
|
)
|
||||||
|
|
||||||
assignment = AssignmentFactory(
|
assignment = AssignmentFactory(
|
||||||
parent=assignment_page,
|
parent=assignment_list_page,
|
||||||
title="Überprüfen einer Motorfahrzeugs-Versicherungspolice",
|
assignment_type=AssignmentType.PREP_ASSIGNMENT.name,
|
||||||
effort_required="ca. 5 Stunden",
|
title="Fahrzeug - Mein erstes Auto",
|
||||||
starting_position=replace_whitespace(
|
effort_required="ca. 3 Stunden",
|
||||||
|
intro_text=replace_whitespace(
|
||||||
"""
|
"""
|
||||||
Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein
|
<h3>Handlungskompetenzen, Arbeitssituationen & Leistungsziele</h3>
|
||||||
Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu
|
<p>
|
||||||
und bittet dich als Versicherungsprofi, diese kritisch zu überprüfen und ihr ggf. Anpassungsvorschläge
|
Handlungskompetenz d2: Informations- und Beratungsgespräch mit Kunden oder Lieferanten führen<br/>
|
||||||
zu unterbreiten. In diesem Kompetenznachweis kannst du nun dein Wissen und Können im Bereich
|
Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln<br/>
|
||||||
der Motorfahrzeugversicherung unter Beweis stellen.
|
<ul>
|
||||||
|
<li>d2.pv.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)</li>
|
||||||
|
<li>d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Handlungskompetenz e4: Betriebsbezogene Inhalte multimedial aufbereiten<br/>
|
||||||
|
Arbeitssituation 1: Charakteristiken der Branche und Stärken des Betriebs einbringen<br/>
|
||||||
|
<ul>
|
||||||
|
<li>e4.pv.ük1: Sie erläutern die Dienstleistungen des Betriebs. (K2)</li>
|
||||||
|
<li>e4.pv.ük2: Sie unterscheiden Mitbewerber in der privaten Versicherungsbranche anhand der relevanten Kriterien.(K2)</li>
|
||||||
|
<li>e4.pv.ük4: Sie erläutern die Grundlagen der Produkte von Privatversicherungen. (K2)</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Ausgangslage</h3>
|
||||||
|
<p>
|
||||||
|
Stell dir vor, du hast die Autoprüfung abgeschlossen und nun kann es endlich losgehen mit deiner Mobilität.
|
||||||
|
Welches wird dein erstes eigenes Auto sein? Dieses Auto möchtest du natürlich auch schützen und richtig
|
||||||
|
versichern.
|
||||||
|
</p>
|
||||||
"""
|
"""
|
||||||
),
|
),
|
||||||
performance_objectives=[
|
performance_objectives=[],
|
||||||
(
|
|
||||||
"performance_objective",
|
|
||||||
PerformanceObjectiveBlockFactory(
|
|
||||||
text="Sie erläutern die Leistungen und Produkte im Versicherungsbereich."
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"performance_objective",
|
|
||||||
PerformanceObjectiveBlockFactory(
|
|
||||||
text="Sie beurteilen gängige Versicherungslösungen fachkundig."
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
evaluation_document_url="/static/media/assignments/UK_03_09_NACH_KN_Beurteilungsraster.pdf",
|
|
||||||
evaluation_description="Diese geleitete Fallarbeit wird auf Grund des folgenden Beurteilungsintrument bewertet.",
|
|
||||||
)
|
|
||||||
|
|
||||||
assignment.evaluation_tasks = []
|
|
||||||
assignment.evaluation_tasks.append(
|
|
||||||
(
|
|
||||||
"task",
|
|
||||||
EvaluationTaskBlockFactory(
|
|
||||||
title="Ausgangslage des Auftrags",
|
|
||||||
description=RichText(
|
|
||||||
"Beschreibt der/die Lernende die Ausgangslage des Auftrags vollständig?"
|
|
||||||
),
|
|
||||||
max_points=6,
|
|
||||||
sub_tasks=ListValue(
|
|
||||||
ListBlock(EvaluationSubTaskBlock()),
|
|
||||||
values=[
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Ausgangslage des Auftrag ist vollständig beschrieben.",
|
|
||||||
description=RichText(
|
|
||||||
replace_whitespace(
|
|
||||||
"""
|
|
||||||
<ul>
|
|
||||||
<li>Worum geht es? Was ist die Aufgabe?</li>
|
|
||||||
<li>Sind das Kundenprofil und die Kundenbeziehung vollständig und nachvollziehbar dargestellt?</li>
|
|
||||||
<li>Ist das Alter des Fahrzeugs dokumentiert?</li>
|
|
||||||
<li>Welche Ressourcen stehen zur Verfügung?</li>
|
|
||||||
</ul>
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
),
|
|
||||||
points=6,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Ausgangslage ist grösstenteils vollständig beschrieben.",
|
|
||||||
points=4,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Ausgangslage ist unvollständig - nur 2 Punkte wurden beschrieben.",
|
|
||||||
points=2,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Ausgangslage des Auftrag ist unvollständig - es fehlen mehr als 2 Punkte in der Beschreibung.",
|
|
||||||
points=0,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assignment.evaluation_tasks.append(
|
|
||||||
(
|
|
||||||
"task",
|
|
||||||
EvaluationTaskBlockFactory(
|
|
||||||
title="Inhaltsanalyse und Struktur",
|
|
||||||
max_points=6,
|
|
||||||
description=RichText(
|
|
||||||
"Sind die Deckungen der Police vollständig und nachvollziehbar dokumentiert?"
|
|
||||||
),
|
|
||||||
sub_tasks=ListValue(
|
|
||||||
ListBlock(EvaluationSubTaskBlock()),
|
|
||||||
values=[
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Analyse beinhaltet alle in der Police vorhandenen Deckungen und ist logisch aufgebaut.",
|
|
||||||
points=6,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Analyse beinhaltet die meisten vorhandenen Deckungen in der Police und ist grösstenteils logisch aufgebaut.",
|
|
||||||
points=4,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Analyse ist unvollständig (es fehlen mehr als 3 Deckungen) und der rote Faden ist nicht erkennbar.",
|
|
||||||
points=2,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Analyse ist insgesamt nicht nachvollziehbar und es fehlen einige Deckungen.",
|
|
||||||
points=0,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assignment.evaluation_tasks.append(
|
|
||||||
(
|
|
||||||
"task",
|
|
||||||
EvaluationTaskBlockFactory(
|
|
||||||
title="Sinnvolle Empfehlungen",
|
|
||||||
max_points=6,
|
|
||||||
description=RichText(
|
|
||||||
"Leitet die lernende Person sinnvolle und geeignete Empfehlungen ab?"
|
|
||||||
),
|
|
||||||
sub_tasks=ListValue(
|
|
||||||
ListBlock(EvaluationSubTaskBlock()),
|
|
||||||
values=[
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Empfehlungen sind durchgängig sinnvoll und nachvollziehbar begründet.",
|
|
||||||
points=6,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Empfehlungen sind grösstenteils sinnvoll und nachvollziehbar begründet.",
|
|
||||||
points=4,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Empfehlungen sind wenig sinnvoll und unvollständig begründet.",
|
|
||||||
points=2,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Empfehlungen sind weder sinnvoll nch nachvollziehbar begründet.",
|
|
||||||
points=0,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assignment.evaluation_tasks.append(
|
|
||||||
(
|
|
||||||
"task",
|
|
||||||
EvaluationTaskBlockFactory(
|
|
||||||
title="Qualität der Reflexion",
|
|
||||||
max_points=3,
|
|
||||||
description=RichText(
|
|
||||||
"Reflektiert die lernende Person die Durchführung der geleiteten Fallarbeit?"
|
|
||||||
),
|
|
||||||
sub_tasks=ListValue(
|
|
||||||
ListBlock(EvaluationSubTaskBlock()),
|
|
||||||
values=[
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Reflexion bezieht sich auf die geleitete Fallarbeit und umfasst nachvollziehbare positive wie negative Aspekte.",
|
|
||||||
points=3,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Reflexion bezieht sich auf die geleitete Fallarbeit und umfasst grösstenteils nachvollziehbare positive wie negative Aspekte.",
|
|
||||||
points=2,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Reflexion ist unvollständig.",
|
|
||||||
points=1,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Reflexion bezieht sich nicht auf die geleitete Fallarbeit.",
|
|
||||||
points=0,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
assignment.evaluation_tasks.append(
|
|
||||||
(
|
|
||||||
"task",
|
|
||||||
EvaluationTaskBlockFactory(
|
|
||||||
title="Eignung der Learnings",
|
|
||||||
max_points=3,
|
|
||||||
description=RichText(
|
|
||||||
"Leitet die lernende Person geeignete Learnings aus der Reflexion ab?"
|
|
||||||
),
|
|
||||||
sub_tasks=ListValue(
|
|
||||||
ListBlock(EvaluationSubTaskBlock()),
|
|
||||||
values=[
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Learnings beziehen sich auf die geleitete Fallarbeit und sind inhaltlich sinnvoll.",
|
|
||||||
points=3,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Learnings beziehen sich grösstenteils auf die geleitete Fallarbeit und sind inhaltlich sinnvoll.",
|
|
||||||
points=2,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Learnings beziehen sich teilweise auf die geleitete Fallarbeit und sind inhaltlich wenig sinnvoll.",
|
|
||||||
points=1,
|
|
||||||
),
|
|
||||||
EvaluationSubTaskBlockFactory(
|
|
||||||
title="Die Learnings beziehen sich nicht auf die geleitete Fallarbeit.",
|
|
||||||
points=0,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
assignment.tasks = []
|
assignment.tasks = []
|
||||||
|
|
@ -680,7 +516,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
(
|
(
|
||||||
"task",
|
"task",
|
||||||
TaskBlockFactory(
|
TaskBlockFactory(
|
||||||
title="Teilaufgabe 1: Beispiel einer Versicherungspolice finden",
|
title="Teilaufgabe 1: Verschaffe dir einen ersten Überblick zum Thema.",
|
||||||
# it is hard to create a StreamValue programmatically, we have to
|
# it is hard to create a StreamValue programmatically, we have to
|
||||||
# create a `StreamValue` manually. Ask Daniel and/or Ramon
|
# create a `StreamValue` manually. Ask Daniel and/or Ramon
|
||||||
content=StreamValue(
|
content=StreamValue(
|
||||||
|
|
@ -690,7 +526,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"explanation",
|
"explanation",
|
||||||
ExplanationBlockFactory(
|
ExplanationBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Bitte jemand aus deiner Familie oder deinem Freundeskreis darum, dir seine/ihre Motorfahrzeugversicherungspolice zur Verfügung zu stellen."
|
'Schaue dazu das folgende Video: <a href="https://www.youtube.com/watch?v=GY2VRYyhwjM" target="_blank">Wie funktioniert eine Autoversicherung? – Einfach erklärt</a>'
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -698,7 +534,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"user_confirmation",
|
"user_confirmation",
|
||||||
ExplanationBlockFactory(
|
ExplanationBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Ja, ich habe Motorfahrzeugversicherungspolice von jemandem aus meiner Familie oder meinem Freundeskreis erhalten."
|
"Ja, ich habe das Video angeschaut und verstanden."
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -712,7 +548,41 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
(
|
(
|
||||||
"task",
|
"task",
|
||||||
TaskBlockFactory(
|
TaskBlockFactory(
|
||||||
title="Teilaufgabe 2: Kundensituation und Ausgangslage",
|
title="Teilaufgabe 2: Kapitel «Haftpflichtrecht und Motorfahrzeugversicherung» lesen",
|
||||||
|
# it is hard to create a StreamValue programmatically, we have to
|
||||||
|
# create a `StreamValue` manually. Ask Daniel and/or Ramon
|
||||||
|
content=StreamValue(
|
||||||
|
TaskContentStreamBlock(),
|
||||||
|
stream_data=[
|
||||||
|
(
|
||||||
|
"explanation",
|
||||||
|
ExplanationBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Lese und bearbeite im Buch «Haftpflichtrecht und Motorfahrzeugversicherung» die entsprechenden Kapitel"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"user_confirmation",
|
||||||
|
ExplanationBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Ja, ich habe das Kapitel gelesen und verstanden."
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment.tasks.append(
|
||||||
|
(
|
||||||
|
"task",
|
||||||
|
TaskBlockFactory(
|
||||||
|
title="Teilaufgabe 3: Offerte erstellen",
|
||||||
|
# it is hard to create a StreamValue programmatically, we have to
|
||||||
|
# create a `StreamValue` manually. Ask Daniel and/or Ramon
|
||||||
content=StreamValue(
|
content=StreamValue(
|
||||||
TaskContentStreamBlock(),
|
TaskContentStreamBlock(),
|
||||||
stream_data=[
|
stream_data=[
|
||||||
|
|
@ -722,17 +592,28 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
text=RichText(
|
text=RichText(
|
||||||
replace_whitespace(
|
replace_whitespace(
|
||||||
"""
|
"""
|
||||||
Erläutere die Kundensituation und die Ausgangslage.
|
<p>
|
||||||
<ul>
|
Nun geht es los! Erstelle dir für dein erstes eigenes Auto eine entsprechende
|
||||||
<li>Hast du alle Informationen, die du für den Policen-Check benötigst?</li>
|
Offerte. Überlege dir, welche Deckungen du unbedingt abschliessen musst und
|
||||||
<li>Halte die wichtigsten Eckwerte des aktuellen Versicherungsverhältnisse in deiner Dokumentation fest (z.B wie lang wo versichert, Alter des Fahrzeugs, Kundenprofil, etc.</li>
|
welche Deckungen für dich zusätzlich wünschenswert sind. Nutze dazu das
|
||||||
</ul>
|
Offertentool deiner Unternehmung. Alternativ dazu kannst du auch irgendein
|
||||||
|
Onlinetool nutzen.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Möglicherweise musst du mit deinem Geburtsjahrgang etwas schummeln,
|
||||||
|
damit du alt genug bist, um für dich eine Offerte zu machen.
|
||||||
|
</p>
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
("user_text_input", UserTextInputBlockFactory()),
|
(
|
||||||
|
"user_confirmation",
|
||||||
|
ExplanationBlockFactory(
|
||||||
|
text=RichText("Ja, ich habe eine Offerte erstellt.")
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -743,8 +624,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
(
|
(
|
||||||
"task",
|
"task",
|
||||||
TaskBlockFactory(
|
TaskBlockFactory(
|
||||||
title="Teilaufgabe 3: Aktuelle Versicherung",
|
title="Teilaufgabe 4: Notizen und Fragestellungen",
|
||||||
# TODO: add document upload
|
|
||||||
content=StreamValue(
|
content=StreamValue(
|
||||||
TaskContentStreamBlock(),
|
TaskContentStreamBlock(),
|
||||||
stream_data=[
|
stream_data=[
|
||||||
|
|
@ -752,30 +632,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"explanation",
|
"explanation",
|
||||||
ExplanationBlockFactory(
|
ExplanationBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Zeige nun detailliert auf, wie dein Kundenbeispiel momentan versichert ist."
|
"Mache dir im Verlauf des Prozesses Notizen zu den folgenden Fragestellungen:"
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
("user_text_input", UserTextInputBlockFactory()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
assignment.tasks.append(
|
|
||||||
(
|
|
||||||
"task",
|
|
||||||
TaskBlockFactory(
|
|
||||||
title="Teilaufgabe 4: Deine Empfehlungen",
|
|
||||||
content=StreamValue(
|
|
||||||
TaskContentStreamBlock(),
|
|
||||||
stream_data=[
|
|
||||||
(
|
|
||||||
"explanation",
|
|
||||||
ExplanationBlockFactory(
|
|
||||||
text=RichText(
|
|
||||||
"Erarbeite nun basierend auf deinen Erkenntnissen eine Empfehlung für die Person."
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -783,7 +640,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"user_text_input",
|
"user_text_input",
|
||||||
UserTextInputBlockFactory(
|
UserTextInputBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest? Begründe deine Empfehlung"
|
"Wie bist du bei der Erstellung deiner Offerte vorgegangen?"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -791,7 +648,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"user_text_input",
|
"user_text_input",
|
||||||
UserTextInputBlockFactory(
|
UserTextInputBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Gibt es Deckungen, die du streichen würdest? Begründe deine Empfehlung."
|
"Welches waren die Schwierigkeiten bei der Erstellung der Offerte? Wie hast du die Schwierigkeiten gelöst?"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -799,7 +656,23 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"user_text_input",
|
"user_text_input",
|
||||||
UserTextInputBlockFactory(
|
UserTextInputBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Wenn die Person gemäss deiner Einschätzung genau richtig versichert ist, argumentiere, warum dies der Fall ist."
|
"Welche Angaben sind zwingend notwendig, um eine saubere Motorfahrzeugofferte erstellen zu können?"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Welche zusätzlichen Deckungen hast du gewählt? Was waren die Überlegungen dazu?"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Welche Faktoren/Elemente bestimmen hauptsächlich die Höhe der Prämie?"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -813,7 +686,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
(
|
(
|
||||||
"task",
|
"task",
|
||||||
TaskBlockFactory(
|
TaskBlockFactory(
|
||||||
title="Teilaufgabe 5: Reflexion",
|
title="Teilaufgabe 5: Präzenz-Training",
|
||||||
content=StreamValue(
|
content=StreamValue(
|
||||||
TaskContentStreamBlock(),
|
TaskContentStreamBlock(),
|
||||||
stream_data=[
|
stream_data=[
|
||||||
|
|
@ -821,31 +694,8 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"explanation",
|
"explanation",
|
||||||
ExplanationBlockFactory(
|
ExplanationBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Reflektiere dein Handeln und halte deine Erkenntnisse fest. Frage dich dabei:"
|
"<p>Bringe die Offerte und diese Notizen mit ins Präsenz-Training.</p>"
|
||||||
)
|
"<p>Vergiss die dazugehörenden AVB nicht. Es ist auch okay, wenn du die Unterlagen nur elektronisch dabei hast.</p>"
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"user_text_input",
|
|
||||||
UserTextInputBlockFactory(
|
|
||||||
text=RichText(
|
|
||||||
"War die Bearbeitung dieser geleiteten Fallarbeit erfolgreich? Begründe deine Einschätzung."
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"user_text_input",
|
|
||||||
UserTextInputBlockFactory(
|
|
||||||
text=RichText(
|
|
||||||
"Was ist dir bei der Bearbeitung des Auftrags gut gelungen?"
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"user_text_input",
|
|
||||||
UserTextInputBlockFactory(
|
|
||||||
text=RichText(
|
|
||||||
"Was ist dir bei der Bearbeitung des Auftrags weniger gut gelungen?"
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -859,7 +709,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
(
|
(
|
||||||
"task",
|
"task",
|
||||||
TaskBlockFactory(
|
TaskBlockFactory(
|
||||||
title="Teilaufgabe 6: Learnings",
|
title="Aufgaben zum Vorbereitungsauftrag",
|
||||||
content=StreamValue(
|
content=StreamValue(
|
||||||
TaskContentStreamBlock(),
|
TaskContentStreamBlock(),
|
||||||
stream_data=[
|
stream_data=[
|
||||||
|
|
@ -867,7 +717,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"explanation",
|
"explanation",
|
||||||
ExplanationBlockFactory(
|
ExplanationBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Leite aus der Teilaufgabe 5 deine persönlichen Learnings ab."
|
"Schnappt euch euren Vorbereitungsauftrag und setzt euch zu dritt zusammen. Diskutiert miteinander die folgenden Fragen."
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -875,7 +725,7 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"user_text_input",
|
"user_text_input",
|
||||||
UserTextInputBlockFactory(
|
UserTextInputBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Was würdest du beim nächsten Mal anders machen?"
|
"Wie seid ihr bei der Erstellung der Offerte vorgegangen?"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -883,7 +733,195 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||||
"user_text_input",
|
"user_text_input",
|
||||||
UserTextInputBlockFactory(
|
UserTextInputBlockFactory(
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"Was hast du beim Bearbeiten des Auftrags Neues gelernt?"
|
"Welches waren die Schwierigkeiten bei der Erstellung der Offerte? Wie hast du die Schwierigkeiten gelöst?"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Welche Angaben sind zwingend notwendig, um eine saubere Motorfahrzeugofferte erstellen zu können?"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Welche zusätzlichen Deckungen hast du gewählt? Was waren die Überlegungen dazu?"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Welche Faktoren/Elemente bestimmen hauptsächlich die Höhe der Prämie?"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Wenn ihr mit der Diskussion und dem Vergleich fertig seid, schreibt doch die Prämie eurer eigenen Offerte jeweils auf den Flipchart/Whiteboard/Wandtafel."
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment.save()
|
||||||
|
|
||||||
|
return assignment
|
||||||
|
|
||||||
|
|
||||||
|
def create_uk_reflection(course_id=COURSE_UK, circle_title="Fahrzeug"):
|
||||||
|
assignment_list_page = (
|
||||||
|
CoursePage.objects.get(course_id=course_id)
|
||||||
|
.get_children()
|
||||||
|
.exact_type(AssignmentListPage)
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment = AssignmentFactory(
|
||||||
|
parent=assignment_list_page,
|
||||||
|
assignment_type=AssignmentType.REFLECTION.name,
|
||||||
|
title=f"{circle_title} - Reflexionsfragen",
|
||||||
|
effort_required="ca. 1 Stunde",
|
||||||
|
intro_text=replace_whitespace(
|
||||||
|
"""
|
||||||
|
<p>
|
||||||
|
Du hast in diesem Circle viele neue Inhalte und Inputs erhalten.
|
||||||
|
Nun ist es Zeit, nochmals auf dein Kompetenzprofil zu schauen.
|
||||||
|
Das Beantworten von Reflexionsfragen hilft dir den eigenen Lern- und Denkprozess sichtbar und begreifbar zu machen.
|
||||||
|
Es deckt deine persönlichen Stärken und Schwächen während der Erarbeitung auf und hilft dir, dich laufend zu verbessern.
|
||||||
|
</p>
|
||||||
|
"""
|
||||||
|
),
|
||||||
|
performance_objectives=[],
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment.tasks = []
|
||||||
|
assignment.tasks.append(
|
||||||
|
(
|
||||||
|
"task",
|
||||||
|
TaskBlockFactory(
|
||||||
|
title="Frage 1: Was gelingt mir bereits gut?",
|
||||||
|
content=StreamValue(
|
||||||
|
TaskContentStreamBlock(),
|
||||||
|
stream_data=[
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment.tasks.append(
|
||||||
|
(
|
||||||
|
"task",
|
||||||
|
TaskBlockFactory(
|
||||||
|
title="Frage 2: Vertiefung",
|
||||||
|
content=StreamValue(
|
||||||
|
TaskContentStreamBlock(),
|
||||||
|
stream_data=[
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Wo muss ich mich noch vertiefen oder nochmals repetieren? "
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment.tasks.append(
|
||||||
|
(
|
||||||
|
"task",
|
||||||
|
TaskBlockFactory(
|
||||||
|
title="Frage 3: Was nehme ich mit?",
|
||||||
|
content=StreamValue(
|
||||||
|
TaskContentStreamBlock(),
|
||||||
|
stream_data=[
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment.tasks.append(
|
||||||
|
(
|
||||||
|
"task",
|
||||||
|
TaskBlockFactory(
|
||||||
|
title="Frage 4: Vorbereitung",
|
||||||
|
content=StreamValue(
|
||||||
|
TaskContentStreamBlock(),
|
||||||
|
stream_data=[
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Wie habe ich mich auf den Circle vorbereitet (z. B. Lernzeit eingeplant)?"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment.tasks.append(
|
||||||
|
(
|
||||||
|
"task",
|
||||||
|
TaskBlockFactory(
|
||||||
|
title="Frage 5: Präsenzunterricht",
|
||||||
|
content=StreamValue(
|
||||||
|
TaskContentStreamBlock(),
|
||||||
|
stream_data=[
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Wie engagiert war ich im Präsenzunterricht?"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
assignment.tasks.append(
|
||||||
|
(
|
||||||
|
"task",
|
||||||
|
TaskBlockFactory(
|
||||||
|
title="Frage 6: Verbesserung",
|
||||||
|
content=StreamValue(
|
||||||
|
TaskContentStreamBlock(),
|
||||||
|
stream_data=[
|
||||||
|
(
|
||||||
|
"user_text_input",
|
||||||
|
UserTextInputBlockFactory(
|
||||||
|
text=RichText(
|
||||||
|
"Was will ich für den nächsten Circle im Lernprozess ändern/verbessern?"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,8 @@ class AssignmentType(DjangoObjectType):
|
||||||
model = Assignment
|
model = Assignment
|
||||||
interfaces = (CoursePageInterface,)
|
interfaces = (CoursePageInterface,)
|
||||||
fields = (
|
fields = (
|
||||||
"starting_position",
|
"assignment_type",
|
||||||
|
"intro_text",
|
||||||
"effort_required",
|
"effort_required",
|
||||||
"evaluation_description",
|
"evaluation_description",
|
||||||
"evaluation_document_url",
|
"evaluation_document_url",
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
initial = True
|
initial = True
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|
@ -30,7 +29,7 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"starting_position",
|
"intro_text",
|
||||||
wagtail.fields.RichTextField(
|
wagtail.fields.RichTextField(
|
||||||
help_text="Erläuterung der Ausgangslage"
|
help_text="Erläuterung der Ausgangslage"
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Generated by Django 3.2.13 on 2023-05-19 13:43
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("assignment", "0003_initial"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="assignment",
|
||||||
|
name="assignment_type",
|
||||||
|
field=models.CharField(
|
||||||
|
choices=[
|
||||||
|
("CASEWORK", "CASEWORK"),
|
||||||
|
("PREP_ASSIGNMENT", "PREP_ASSIGNMENT"),
|
||||||
|
("REFLECTION", "REFLECTION"),
|
||||||
|
],
|
||||||
|
default="CASEWORK",
|
||||||
|
max_length=50,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -8,7 +8,10 @@ from wagtail.admin.panels import FieldPanel
|
||||||
from wagtail.fields import RichTextField, StreamField
|
from wagtail.fields import RichTextField, StreamField
|
||||||
from wagtail.models import Page
|
from wagtail.models import Page
|
||||||
|
|
||||||
from vbv_lernwelt.core.constants import DEFAULT_RICH_TEXT_FEATURES
|
from vbv_lernwelt.core.constants import (
|
||||||
|
DEFAULT_RICH_TEXT_FEATURES,
|
||||||
|
DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER,
|
||||||
|
)
|
||||||
from vbv_lernwelt.core.model_utils import find_available_slug
|
from vbv_lernwelt.core.model_utils import find_available_slug
|
||||||
from vbv_lernwelt.core.models import User
|
from vbv_lernwelt.core.models import User
|
||||||
from vbv_lernwelt.course.models import CourseBasePage
|
from vbv_lernwelt.course.models import CourseBasePage
|
||||||
|
|
@ -104,9 +107,19 @@ class EvaluationTaskBlock(blocks.StructBlock):
|
||||||
label = "Beurteilungskriterium"
|
label = "Beurteilungskriterium"
|
||||||
|
|
||||||
|
|
||||||
|
AssignmentType = Enum(
|
||||||
|
"AssignmentType",
|
||||||
|
[
|
||||||
|
"CASEWORK", # Geleitete Fallarbeit
|
||||||
|
"PREP_ASSIGNMENT", # Vorbereitungsauftrag
|
||||||
|
"REFLECTION", # Reflexion
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Assignment(CourseBasePage):
|
class Assignment(CourseBasePage):
|
||||||
serialize_field_names = [
|
serialize_field_names = [
|
||||||
"starting_position",
|
"intro_text",
|
||||||
"effort_required",
|
"effort_required",
|
||||||
"performance_objectives",
|
"performance_objectives",
|
||||||
"evaluation_description",
|
"evaluation_description",
|
||||||
|
|
@ -115,8 +128,15 @@ class Assignment(CourseBasePage):
|
||||||
"evaluation_tasks",
|
"evaluation_tasks",
|
||||||
]
|
]
|
||||||
|
|
||||||
starting_position = RichTextField(
|
assignment_type = models.CharField(
|
||||||
help_text="Erläuterung der Ausgangslage", features=DEFAULT_RICH_TEXT_FEATURES
|
max_length=50,
|
||||||
|
choices=[(tag.name, tag.name) for tag in AssignmentType],
|
||||||
|
default=AssignmentType.CASEWORK.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
intro_text = RichTextField(
|
||||||
|
help_text="Erläuterung der Ausgangslage",
|
||||||
|
features=DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER,
|
||||||
)
|
)
|
||||||
effort_required = models.CharField(
|
effort_required = models.CharField(
|
||||||
max_length=100, help_text="Zeitaufwand als Text", blank=True
|
max_length=100, help_text="Zeitaufwand als Text", blank=True
|
||||||
|
|
@ -161,7 +181,8 @@ class Assignment(CourseBasePage):
|
||||||
)
|
)
|
||||||
|
|
||||||
content_panels = Page.content_panels + [
|
content_panels = Page.content_panels + [
|
||||||
FieldPanel("starting_position"),
|
FieldPanel("assignment_type"),
|
||||||
|
FieldPanel("intro_text"),
|
||||||
FieldPanel("effort_required"),
|
FieldPanel("effort_required"),
|
||||||
FieldPanel("performance_objectives"),
|
FieldPanel("performance_objectives"),
|
||||||
FieldPanel("tasks"),
|
FieldPanel("tasks"),
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ class PerformanceObjectiveBlockFactory(wagtail_factories.StructBlockFactory):
|
||||||
|
|
||||||
class AssignmentFactory(wagtail_factories.PageFactory):
|
class AssignmentFactory(wagtail_factories.PageFactory):
|
||||||
title = "Auftrag"
|
title = "Auftrag"
|
||||||
starting_position = replace_whitespace(
|
intro_text = replace_whitespace(
|
||||||
"""
|
"""
|
||||||
Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein
|
Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein
|
||||||
Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu
|
Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ import json
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
|
from vbv_lernwelt.assignment.creators.create_assignments import create_uk_casework
|
||||||
from vbv_lernwelt.assignment.models import (
|
from vbv_lernwelt.assignment.models import (
|
||||||
Assignment,
|
|
||||||
AssignmentCompletion,
|
AssignmentCompletion,
|
||||||
AssignmentCompletionAuditLog,
|
AssignmentCompletionAuditLog,
|
||||||
)
|
)
|
||||||
|
|
@ -20,8 +20,7 @@ class AssignmentApiTestCase(APITestCase):
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
create_default_users()
|
create_default_users()
|
||||||
create_test_course(include_vv=False)
|
create_test_course(include_vv=False)
|
||||||
|
self.assignment = create_uk_casework(course_id=COURSE_TEST_ID)
|
||||||
self.assignment = Assignment.objects.first()
|
|
||||||
self.assignment_subtasks = self.assignment.filter_user_subtasks()
|
self.assignment_subtasks = self.assignment.filter_user_subtasks()
|
||||||
|
|
||||||
self.cs = CourseSession.objects.create(
|
self.cs = CourseSession.objects.create(
|
||||||
|
|
|
||||||
|
|
@ -4,30 +4,32 @@ from django.test import TestCase
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from vbv_lernwelt.assignment.creators.create_assignments import create_test_assignment
|
|
||||||
from vbv_lernwelt.assignment.models import (
|
from vbv_lernwelt.assignment.models import (
|
||||||
|
Assignment,
|
||||||
AssignmentCompletion,
|
AssignmentCompletion,
|
||||||
AssignmentCompletionAuditLog,
|
AssignmentCompletionAuditLog,
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.assignment.services import update_assignment_completion
|
from vbv_lernwelt.assignment.services import update_assignment_completion
|
||||||
from vbv_lernwelt.core.create_default_users import create_default_users
|
from vbv_lernwelt.core.create_default_users import create_default_users
|
||||||
from vbv_lernwelt.core.models import User
|
from vbv_lernwelt.core.models import User
|
||||||
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
|
|
||||||
from vbv_lernwelt.core.utils import find_first
|
from vbv_lernwelt.core.utils import find_first
|
||||||
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
||||||
from vbv_lernwelt.course.factories import CourseFactory, CoursePageFactory
|
from vbv_lernwelt.course.creators.test_course import create_test_course
|
||||||
from vbv_lernwelt.course.models import CourseSession
|
from vbv_lernwelt.course.models import CourseSession
|
||||||
|
from vbv_lernwelt.learnpath.models import LearningContentAssignment
|
||||||
|
|
||||||
|
|
||||||
class UpdateAssignmentCompletionTestCase(TestCase):
|
class UpdateAssignmentCompletionTestCase(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
create_default_users()
|
create_default_users()
|
||||||
create_locales_for_wagtail()
|
self.course = create_test_course(include_vv=False)
|
||||||
course = CourseFactory(
|
self.assignment = (
|
||||||
id=COURSE_TEST_ID,
|
self.course.coursepage.get_descendants()
|
||||||
|
.exact_type(Assignment)
|
||||||
|
.filter(assignment__assignment_type="CASEWORK")
|
||||||
|
.first()
|
||||||
|
.specific
|
||||||
)
|
)
|
||||||
course_page = CoursePageFactory(course=course)
|
|
||||||
self.assignment = create_test_assignment()
|
|
||||||
self.course_session = CourseSession.objects.create(
|
self.course_session = CourseSession.objects.create(
|
||||||
course_id=COURSE_TEST_ID,
|
course_id=COURSE_TEST_ID,
|
||||||
title="Bern 2022 a",
|
title="Bern 2022 a",
|
||||||
|
|
@ -182,19 +184,22 @@ class UpdateAssignmentCompletionTestCase(TestCase):
|
||||||
self.assertEqual(acl.assignment_user_email, "student")
|
self.assertEqual(acl.assignment_user_email, "student")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
acl.assignment_slug,
|
acl.assignment_slug,
|
||||||
"versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
||||||
)
|
)
|
||||||
|
|
||||||
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
|
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
|
||||||
ac.delete()
|
ac.delete()
|
||||||
self.user.delete()
|
self.user.delete()
|
||||||
|
self.course.coursepage.get_descendants().exact_type(
|
||||||
|
LearningContentAssignment
|
||||||
|
).delete()
|
||||||
self.assignment.delete()
|
self.assignment.delete()
|
||||||
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
|
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
|
||||||
self.assertEqual(acl.created_at.date(), date.today())
|
self.assertEqual(acl.created_at.date(), date.today())
|
||||||
self.assertEqual(acl.assignment_user_email, "student")
|
self.assertEqual(acl.assignment_user_email, "student")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
acl.assignment_slug,
|
acl.assignment_slug,
|
||||||
"versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
||||||
)
|
)
|
||||||
self.assertIsNone(acl.assignment_user)
|
self.assertIsNone(acl.assignment_user)
|
||||||
self.assertIsNone(acl.assignment)
|
self.assertIsNone(acl.assignment)
|
||||||
|
|
@ -516,7 +521,7 @@ class UpdateAssignmentCompletionTestCase(TestCase):
|
||||||
self.assertEqual(acl.assignment_user_email, "student")
|
self.assertEqual(acl.assignment_user_email, "student")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
acl.assignment_slug,
|
acl.assignment_slug,
|
||||||
"versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
||||||
)
|
)
|
||||||
trainer_input = acl.completion_data[evaluation_task["id"]]
|
trainer_input = acl.completion_data[evaluation_task["id"]]
|
||||||
self.assertDictEqual(
|
self.assertDictEqual(
|
||||||
|
|
@ -530,13 +535,16 @@ class UpdateAssignmentCompletionTestCase(TestCase):
|
||||||
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
|
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
|
||||||
ac.delete()
|
ac.delete()
|
||||||
self.user.delete()
|
self.user.delete()
|
||||||
|
self.course.coursepage.get_descendants().exact_type(
|
||||||
|
LearningContentAssignment
|
||||||
|
).delete()
|
||||||
self.assignment.delete()
|
self.assignment.delete()
|
||||||
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
|
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
|
||||||
self.assertEqual(acl.created_at.date(), date.today())
|
self.assertEqual(acl.created_at.date(), date.today())
|
||||||
self.assertEqual(acl.assignment_user_email, "student")
|
self.assertEqual(acl.assignment_user_email, "student")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
acl.assignment_slug,
|
acl.assignment_slug,
|
||||||
"versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
||||||
)
|
)
|
||||||
self.assertIsNone(acl.assignment_user)
|
self.assertIsNone(acl.assignment_user)
|
||||||
self.assertIsNone(acl.assignment)
|
self.assertIsNone(acl.assignment)
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,13 @@ from slugify import slugify
|
||||||
from wagtail.models import Site
|
from wagtail.models import Site
|
||||||
from wagtail.rich_text import RichText
|
from wagtail.rich_text import RichText
|
||||||
|
|
||||||
from vbv_lernwelt.assignment.creators.create_assignments import create_test_assignment
|
from vbv_lernwelt.assignment.creators.create_assignments import (
|
||||||
|
create_uk_casework,
|
||||||
|
create_uk_prep_assignment,
|
||||||
|
)
|
||||||
from vbv_lernwelt.assignment.models import Assignment
|
from vbv_lernwelt.assignment.models import Assignment
|
||||||
from vbv_lernwelt.assignment.services import update_assignment_completion
|
from vbv_lernwelt.assignment.services import update_assignment_completion
|
||||||
|
from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentListPageFactory
|
||||||
from vbv_lernwelt.competence.factories import (
|
from vbv_lernwelt.competence.factories import (
|
||||||
CompetencePageFactory,
|
CompetencePageFactory,
|
||||||
CompetenceProfilePageFactory,
|
CompetenceProfilePageFactory,
|
||||||
|
|
@ -34,7 +38,7 @@ from vbv_lernwelt.learnpath.models import Circle
|
||||||
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||||
CircleFactory,
|
CircleFactory,
|
||||||
LearningContentAssignmentFactory,
|
LearningContentAssignmentFactory,
|
||||||
LearningContentAttendanceDayFactory,
|
LearningContentAttendanceCourseFactory,
|
||||||
LearningContentFeedbackFactory,
|
LearningContentFeedbackFactory,
|
||||||
LearningContentLearningModuleFactory,
|
LearningContentLearningModuleFactory,
|
||||||
LearningContentMediaLibraryFactory,
|
LearningContentMediaLibraryFactory,
|
||||||
|
|
@ -63,7 +67,13 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False):
|
||||||
|
|
||||||
create_test_competence_profile()
|
create_test_competence_profile()
|
||||||
if include_uk:
|
if include_uk:
|
||||||
create_test_assignment()
|
# assignments create assignments parent page
|
||||||
|
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
||||||
|
_assignment_list_page = AssignmentListPageFactory(
|
||||||
|
parent=course_page,
|
||||||
|
)
|
||||||
|
create_uk_casework(course_id=COURSE_TEST_ID)
|
||||||
|
create_uk_prep_assignment(course_id=COURSE_TEST_ID)
|
||||||
|
|
||||||
create_test_learning_path(include_uk=include_uk, include_vv=include_vv)
|
create_test_learning_path(include_uk=include_uk, include_vv=include_vv)
|
||||||
create_test_media_library()
|
create_test_media_library()
|
||||||
|
|
@ -205,14 +215,14 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||||
parent=circle,
|
parent=circle,
|
||||||
text=RichText(
|
text=RichText(
|
||||||
"""
|
"""
|
||||||
<h3>Arbeitsblätter «Vorbereitungsauftrag»</h3>
|
<h3>Arbeitsblätter «Vorbereitungsauftrag»</h3>
|
||||||
<p>Handlungskompetenz d2: Informations-und Beratungsgespräch mit Kunden oder Lieferanten führen</p>
|
<p>Handlungskompetenz d2: Informations-und Beratungsgespräch mit Kunden oder Lieferanten führen</p>
|
||||||
<p>Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln</p>
|
<p>Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln</p>
|
||||||
<p>Die Kaufleute führen Bedarfserhebungen für Kunden durch und schlagen ihnen angemessene Versicherungslösungen vor. Sie führen Beratungs-und Verkaufsgespräche und erteilen Auskünfte. Sieführen Kundenaufträge aus und behandeln Beschwerden. Sie formulieren Aufträge an relevante Anspruchsgruppen und unterstützen den Aussendient in verkaufsrelevanten Belangen.</p>
|
<p>Die Kaufleute führen Bedarfserhebungen für Kunden durch und schlagen ihnen angemessene Versicherungslösungen vor. Sie führen Beratungs-und Verkaufsgespräche und erteilen Auskünfte. Sieführen Kundenaufträge aus und behandeln Beschwerden. Sie formulieren Aufträge an relevante Anspruchsgruppen und unterstützen den Aussendient in verkaufsrelevanten Belangen.</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>d2.pv.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)</li>
|
<li>d2.pv.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)</li>
|
||||||
<li>d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)</li>
|
<li>d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)</li>
|
||||||
</ul>
|
</ul>
|
||||||
"""
|
"""
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -225,10 +235,14 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||||
),
|
),
|
||||||
content_url=f"/course/{lp.get_course().slug}/media/category/{slugify(title)}",
|
content_url=f"/course/{lp.get_course().slug}/media/category/{slugify(title)}",
|
||||||
)
|
)
|
||||||
LearningContentPlaceholderFactory(
|
LearningContentAssignmentFactory(
|
||||||
title="Vorbereitungsauftrag",
|
title="Fahrzeug - Mein erstes Auto",
|
||||||
|
assignment_type="PREP_ASSIGNMENT",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
)
|
content_assignment=Assignment.objects.get(
|
||||||
|
slug__startswith="test-lehrgang-assignment-fahrzeug-mein-erstes-auto"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
PerformanceCriteriaFactory(
|
PerformanceCriteriaFactory(
|
||||||
parent=CompetencePage.objects.get(competence_id="X1"),
|
parent=CompetencePage.objects.get(competence_id="X1"),
|
||||||
|
|
@ -249,9 +263,9 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||||
title="Unterlagen für den Unterricht",
|
title="Unterlagen für den Unterricht",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
)
|
)
|
||||||
LearningUnitFactory(title="Präsenztag", parent=circle)
|
LearningUnitFactory(title="Präsenzkurs", parent=circle)
|
||||||
LearningContentAttendanceDayFactory(
|
LearningContentAttendanceCourseFactory(
|
||||||
title="Präsenztag Fahrzeug",
|
title="Präsenzkurs Fahrzeug",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
)
|
)
|
||||||
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
|
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
|
||||||
|
|
|
||||||
|
|
@ -59,3 +59,5 @@ def create_versicherungsvermittlerin_with_categories(
|
||||||
)
|
)
|
||||||
course.slug = course_page.slug
|
course.slug = course_page.slug
|
||||||
course.save()
|
course.save()
|
||||||
|
|
||||||
|
return course
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,14 @@ import random
|
||||||
|
|
||||||
import djclick as click
|
import djclick as click
|
||||||
|
|
||||||
from vbv_lernwelt.assignment.creators.create_assignments import create_uk_assignments
|
from vbv_lernwelt.assignment.creators.create_assignments import (
|
||||||
|
create_uk_casework,
|
||||||
|
create_uk_prep_assignment,
|
||||||
|
create_uk_reflection,
|
||||||
|
)
|
||||||
from vbv_lernwelt.assignment.models import Assignment
|
from vbv_lernwelt.assignment.models import Assignment
|
||||||
from vbv_lernwelt.assignment.services import update_assignment_completion
|
from vbv_lernwelt.assignment.services import update_assignment_completion
|
||||||
|
from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentListPageFactory
|
||||||
from vbv_lernwelt.competence.create_uk_competence_profile import (
|
from vbv_lernwelt.competence.create_uk_competence_profile import (
|
||||||
create_uk_competence_profile,
|
create_uk_competence_profile,
|
||||||
create_uk_fr_competence_profile,
|
create_uk_fr_competence_profile,
|
||||||
|
|
@ -39,7 +44,7 @@ from vbv_lernwelt.learnpath.models import (
|
||||||
Circle,
|
Circle,
|
||||||
LearningContent,
|
LearningContent,
|
||||||
LearningContentAssignment,
|
LearningContentAssignment,
|
||||||
LearningContentAttendanceDay,
|
LearningContentAttendanceCourse,
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.media_library.create_default_media_library import (
|
from vbv_lernwelt.media_library.create_default_media_library import (
|
||||||
create_default_media_library,
|
create_default_media_library,
|
||||||
|
|
@ -145,10 +150,19 @@ def create_versicherungsvermittlerin_course():
|
||||||
|
|
||||||
def create_course_uk_de():
|
def create_course_uk_de():
|
||||||
# Überbetriebliche Kurse DE
|
# Überbetriebliche Kurse DE
|
||||||
create_versicherungsvermittlerin_with_categories(
|
course = create_versicherungsvermittlerin_with_categories(
|
||||||
course_id=COURSE_UK, title="Überbetriebliche Kurse"
|
course_id=COURSE_UK, title="Überbetriebliche Kurse"
|
||||||
)
|
)
|
||||||
create_uk_assignments(course_id=COURSE_UK)
|
|
||||||
|
# assignments create assignments parent page
|
||||||
|
_assignment_list_page = AssignmentListPageFactory(
|
||||||
|
parent=course.coursepage,
|
||||||
|
)
|
||||||
|
create_uk_casework(course_id=COURSE_UK)
|
||||||
|
create_uk_prep_assignment(course_id=COURSE_UK)
|
||||||
|
create_uk_reflection(course_id=COURSE_UK)
|
||||||
|
|
||||||
|
# learning path
|
||||||
create_uk_learning_path(course_id=COURSE_UK)
|
create_uk_learning_path(course_id=COURSE_UK)
|
||||||
create_uk_competence_profile(course_id=COURSE_UK)
|
create_uk_competence_profile(course_id=COURSE_UK)
|
||||||
create_default_media_library(course_id=COURSE_UK)
|
create_default_media_library(course_id=COURSE_UK)
|
||||||
|
|
@ -156,14 +170,13 @@ def create_course_uk_de():
|
||||||
cs = CourseSession.objects.create(
|
cs = CourseSession.objects.create(
|
||||||
course_id=COURSE_UK,
|
course_id=COURSE_UK,
|
||||||
title="Bern 2023 a",
|
title="Bern 2023 a",
|
||||||
attendance_days=[
|
attendance_courses=[
|
||||||
{
|
{
|
||||||
"learningContentId": LearningContentAttendanceDay.objects.get(
|
"learningContentId": LearningContentAttendanceCourse.objects.get(
|
||||||
slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-präsenztag-fahrzeug"
|
slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-präsenzkurs-fahrzeug"
|
||||||
).id,
|
).id,
|
||||||
"date": "2023-09-18",
|
"start": "2023-05-23T08:30:00+0200",
|
||||||
"startTime": "08:15",
|
"end": "2023-05-23T17:00:00+0200",
|
||||||
"endTime": "17:00",
|
|
||||||
"location": "Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern",
|
"location": "Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern",
|
||||||
"trainer": "Roland Grossenbacher, roland.grossenbacher@helvetia.ch",
|
"trainer": "Roland Grossenbacher, roland.grossenbacher@helvetia.ch",
|
||||||
}
|
}
|
||||||
|
|
@ -175,7 +188,14 @@ def create_course_uk_de():
|
||||||
).id,
|
).id,
|
||||||
"submissionDeadlineDateTimeUtc": "2023-06-13T19:00:00Z",
|
"submissionDeadlineDateTimeUtc": "2023-06-13T19:00:00Z",
|
||||||
"evaluationDeadlineDateTimeUtc": "2023-06-27T19:00:00Z",
|
"evaluationDeadlineDateTimeUtc": "2023-06-27T19:00:00Z",
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"learningContentId": LearningContentAssignment.objects.get(
|
||||||
|
slug="überbetriebliche-kurse-lp-circle-fahrzeug-lc-fahrzeug-mein-erstes-auto"
|
||||||
|
).id,
|
||||||
|
"submissionDeadlineDateTimeUtc": "2023-06-13T19:00:00Z",
|
||||||
|
"evaluationDeadlineDateTimeUtc": "2023-06-27T19:00:00Z",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,11 @@ from vbv_lernwelt.course.models import CoursePage
|
||||||
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||||
CircleFactory,
|
CircleFactory,
|
||||||
LearningContentAssignmentFactory,
|
LearningContentAssignmentFactory,
|
||||||
LearningContentAttendanceDayFactory,
|
LearningContentAttendanceCourseFactory,
|
||||||
LearningContentFeedbackFactory,
|
LearningContentFeedbackFactory,
|
||||||
LearningContentMediaLibraryFactory,
|
LearningContentMediaLibraryFactory,
|
||||||
LearningContentPlaceholderFactory,
|
LearningContentPlaceholderFactory,
|
||||||
|
LearningContentRichTextFactory,
|
||||||
LearningPathFactory,
|
LearningPathFactory,
|
||||||
LearningSequenceFactory,
|
LearningSequenceFactory,
|
||||||
LearningUnitFactory,
|
LearningUnitFactory,
|
||||||
|
|
@ -230,9 +231,21 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||||
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
|
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
|
||||||
)
|
)
|
||||||
LearningUnitFactory(title="Vorbereitung", parent=circle)
|
LearningUnitFactory(title="Vorbereitung", parent=circle)
|
||||||
LearningContentPlaceholderFactory(
|
LearningContentRichTextFactory(
|
||||||
title="Verschaffe dir einen Überblick",
|
title="Verschaffe dir einen Überblick",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
|
text=RichText(
|
||||||
|
"""
|
||||||
|
<h3>Arbeitsblätter «Vorbereitungsauftrag»</h3>
|
||||||
|
<p>Handlungskompetenz d2: Informations-und Beratungsgespräch mit Kunden oder Lieferanten führen</p>
|
||||||
|
<p>Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln</p>
|
||||||
|
<p>Die Kaufleute führen Bedarfserhebungen für Kunden durch und schlagen ihnen angemessene Versicherungslösungen vor. Sie führen Beratungs-und Verkaufsgespräche und erteilen Auskünfte. Sieführen Kundenaufträge aus und behandeln Beschwerden. Sie formulieren Aufträge an relevante Anspruchsgruppen und unterstützen den Aussendient in verkaufsrelevanten Belangen.</p>
|
||||||
|
<ul>
|
||||||
|
<li>d2.pv.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)</li>
|
||||||
|
<li>d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)</li>
|
||||||
|
</ul>
|
||||||
|
"""
|
||||||
|
),
|
||||||
)
|
)
|
||||||
LearningContentMediaLibraryFactory(
|
LearningContentMediaLibraryFactory(
|
||||||
title=f"Handlungsfeld «{title}»",
|
title=f"Handlungsfeld «{title}»",
|
||||||
|
|
@ -243,19 +256,23 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||||
),
|
),
|
||||||
content_url=f"/course/überbetriebliche-kurse/media/category/{slugify(title)}",
|
content_url=f"/course/überbetriebliche-kurse/media/category/{slugify(title)}",
|
||||||
)
|
)
|
||||||
LearningContentPlaceholderFactory(
|
LearningContentAssignmentFactory(
|
||||||
title="Vorbereitungsauftrag",
|
title="Fahrzeug - Mein erstes Auto",
|
||||||
|
assignment_type="PREP_ASSIGNMENT",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
)
|
content_assignment=Assignment.objects.get(
|
||||||
|
slug__startswith="überbetriebliche-kurse-assignment-fahrzeug-mein-erstes-auto"
|
||||||
|
),
|
||||||
|
),
|
||||||
LearningSequenceFactory(title="Training", parent=circle)
|
LearningSequenceFactory(title="Training", parent=circle)
|
||||||
LearningUnitFactory(title="Unterlagen", parent=circle)
|
LearningUnitFactory(title="Unterlagen", parent=circle)
|
||||||
LearningContentPlaceholderFactory(
|
LearningContentPlaceholderFactory(
|
||||||
title="Unterlagen für den Unterricht",
|
title="Unterlagen für den Unterricht",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
)
|
)
|
||||||
LearningUnitFactory(title="Präsenztag", parent=circle)
|
LearningUnitFactory(title="Präsenzkurs", parent=circle)
|
||||||
LearningContentAttendanceDayFactory(
|
LearningContentAttendanceCourseFactory(
|
||||||
title="Präsenztag Fahrzeug",
|
title="Präsenzkurs Fahrzeug",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
)
|
)
|
||||||
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
|
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
|
||||||
|
|
@ -265,10 +282,14 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||||
)
|
)
|
||||||
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
|
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
|
||||||
LearningUnitFactory(title="Transfer", parent=circle)
|
LearningUnitFactory(title="Transfer", parent=circle)
|
||||||
LearningContentPlaceholderFactory(
|
LearningContentAssignmentFactory(
|
||||||
title="Reflexion",
|
title="Reflexionsfragen Fahrzeug",
|
||||||
|
assignment_type="REFLECTION",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
)
|
content_assignment=Assignment.objects.get(
|
||||||
|
slug__startswith="überbetriebliche-kurse-assignment-fahrzeug-reflexionsfragen"
|
||||||
|
),
|
||||||
|
),
|
||||||
LearningContentAssignmentFactory(
|
LearningContentAssignmentFactory(
|
||||||
title="Überprüfen einer Motorfahrzeug-Versicherungspolice",
|
title="Überprüfen einer Motorfahrzeug-Versicherungspolice",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.13 on 2023-05-23 12:49
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("course", "0002_initial"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name="coursesession",
|
||||||
|
old_name="attendance_days",
|
||||||
|
new_name="attendance_courses",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -193,7 +193,7 @@ class CourseSession(models.Model):
|
||||||
Das anhängen kann via CourseSessionUser oder "Schulklasse (TODO)" geschehen
|
Das anhängen kann via CourseSessionUser oder "Schulklasse (TODO)" geschehen
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ATTENDANCE_DAYS_SCHEMA = {
|
ATTENDANCE_COURSES_SCHEMA = {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
|
@ -203,7 +203,8 @@ class CourseSession(models.Model):
|
||||||
"title": "ID des Lerninhalts",
|
"title": "ID des Lerninhalts",
|
||||||
"required": True,
|
"required": True,
|
||||||
},
|
},
|
||||||
"date": {"type": "string"},
|
"start": {"type": "string", "format": "datetime"},
|
||||||
|
"end": {"type": "string", "format": "datetime"},
|
||||||
"location": {"type": "string"},
|
"location": {"type": "string"},
|
||||||
"trainer": {"type": "string"},
|
"trainer": {"type": "string"},
|
||||||
},
|
},
|
||||||
|
|
@ -219,7 +220,9 @@ class CourseSession(models.Model):
|
||||||
start_date = models.DateField(null=True, blank=True)
|
start_date = models.DateField(null=True, blank=True)
|
||||||
end_date = models.DateField(null=True, blank=True)
|
end_date = models.DateField(null=True, blank=True)
|
||||||
|
|
||||||
attendance_days = JSONField(schema=ATTENDANCE_DAYS_SCHEMA, blank=True, default=list)
|
attendance_courses = JSONField(
|
||||||
|
schema=ATTENDANCE_COURSES_SCHEMA, blank=True, default=list
|
||||||
|
)
|
||||||
assignment_details_list = models.JSONField(default=list, blank=True)
|
assignment_details_list = models.JSONField(default=list, blank=True)
|
||||||
|
|
||||||
additional_json_data = models.JSONField(default=dict, blank=True)
|
additional_json_data = models.JSONField(default=dict, blank=True)
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ class CourseSessionSerializer(serializers.ModelSerializer):
|
||||||
"start_date",
|
"start_date",
|
||||||
"end_date",
|
"end_date",
|
||||||
"additional_json_data",
|
"additional_json_data",
|
||||||
"attendance_days",
|
"attendance_courses",
|
||||||
"assignment_details_list",
|
"assignment_details_list",
|
||||||
"learning_path_url",
|
"learning_path_url",
|
||||||
"cockpit_url",
|
"cockpit_url",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.13 on 2023-05-23 12:49
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("wagtailcore", "0083_workflowcontenttype"),
|
||||||
|
("wagtailforms", "0005_alter_formsubmission_form_data"),
|
||||||
|
("wagtailredirects", "0008_add_verbose_name_plural"),
|
||||||
|
("contenttypes", "0002_remove_content_type_name"),
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
("learnpath", "0002_learningcontentrichtext_text"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name="LearningContentAttendanceDay",
|
||||||
|
new_name="LearningContentAttendanceCourse",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Generated by Django 3.2.13 on 2023-05-19 15:21
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
(
|
||||||
|
"learnpath",
|
||||||
|
"0003_rename_learningcontentattendanceday_learningcontentattendancecourse",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="learningcontentassignment",
|
||||||
|
name="assignment_type",
|
||||||
|
field=models.CharField(
|
||||||
|
choices=[
|
||||||
|
("CASEWORK", "CASEWORK"),
|
||||||
|
("PREP_ASSIGNMENT", "PREP_ASSIGNMENT"),
|
||||||
|
("REFLECTION", "REFLECTION"),
|
||||||
|
],
|
||||||
|
default="CASEWORK",
|
||||||
|
max_length=50,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -6,6 +6,7 @@ from wagtail.admin.panels import FieldPanel, PageChooserPanel
|
||||||
from wagtail.fields import RichTextField
|
from wagtail.fields import RichTextField
|
||||||
from wagtail.models import Page
|
from wagtail.models import Page
|
||||||
|
|
||||||
|
from vbv_lernwelt.assignment.models import AssignmentType
|
||||||
from vbv_lernwelt.core.constants import DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER
|
from vbv_lernwelt.core.constants import DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER
|
||||||
from vbv_lernwelt.core.model_utils import find_available_slug
|
from vbv_lernwelt.core.model_utils import find_available_slug
|
||||||
from vbv_lernwelt.course.models import CourseBasePage, CoursePage
|
from vbv_lernwelt.course.models import CourseBasePage, CoursePage
|
||||||
|
|
@ -69,7 +70,7 @@ class Circle(CourseBasePage):
|
||||||
"learnpath.LearningSequence",
|
"learnpath.LearningSequence",
|
||||||
"learnpath.LearningUnit",
|
"learnpath.LearningUnit",
|
||||||
"learnpath.LearningContentAssignment",
|
"learnpath.LearningContentAssignment",
|
||||||
"learnpath.LearningContentAttendanceDay",
|
"learnpath.LearningContentAttendanceCourse",
|
||||||
"learnpath.LearningContentFeedback",
|
"learnpath.LearningContentFeedback",
|
||||||
"learnpath.LearningContentLearningModule",
|
"learnpath.LearningContentLearningModule",
|
||||||
"learnpath.LearningContentMediaLibrary",
|
"learnpath.LearningContentMediaLibrary",
|
||||||
|
|
@ -87,7 +88,7 @@ class Circle(CourseBasePage):
|
||||||
|
|
||||||
description = models.TextField(default="", blank=True)
|
description = models.TextField(default="", blank=True)
|
||||||
|
|
||||||
goals = RichTextField()
|
goals = RichTextField(features=DEFAULT_RICH_TEXT_FEATURES_WITH_HEADER)
|
||||||
|
|
||||||
content_panels = Page.content_panels + [
|
content_panels = Page.content_panels + [
|
||||||
FieldPanel("description"),
|
FieldPanel("description"),
|
||||||
|
|
@ -274,7 +275,7 @@ class LearningContent(CourseBasePage):
|
||||||
super().save(**kwargs)
|
super().save(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
class LearningContentAttendanceDay(LearningContent):
|
class LearningContentAttendanceCourse(LearningContent):
|
||||||
parent_page_types = ["learnpath.Circle"]
|
parent_page_types = ["learnpath.Circle"]
|
||||||
subpage_types = []
|
subpage_types = []
|
||||||
|
|
||||||
|
|
@ -325,6 +326,7 @@ class LearningContentRichText(LearningContent):
|
||||||
class LearningContentAssignment(LearningContent):
|
class LearningContentAssignment(LearningContent):
|
||||||
serialize_field_names = LearningContent.serialize_field_names + [
|
serialize_field_names = LearningContent.serialize_field_names + [
|
||||||
"content_assignment_id",
|
"content_assignment_id",
|
||||||
|
"assignment_type",
|
||||||
]
|
]
|
||||||
parent_page_types = ["learnpath.Circle"]
|
parent_page_types = ["learnpath.Circle"]
|
||||||
subpage_types = []
|
subpage_types = []
|
||||||
|
|
@ -335,6 +337,12 @@ class LearningContentAssignment(LearningContent):
|
||||||
related_name="+",
|
related_name="+",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
assignment_type = models.CharField(
|
||||||
|
max_length=50,
|
||||||
|
choices=[(tag.name, tag.name) for tag in AssignmentType],
|
||||||
|
default=AssignmentType.CASEWORK.name,
|
||||||
|
)
|
||||||
|
|
||||||
content_panels = [
|
content_panels = [
|
||||||
FieldPanel("title", classname="full title"),
|
FieldPanel("title", classname="full title"),
|
||||||
FieldPanel("minutes"),
|
FieldPanel("minutes"),
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ from wagtail.rich_text import RichText
|
||||||
from vbv_lernwelt.learnpath.models import (
|
from vbv_lernwelt.learnpath.models import (
|
||||||
Circle,
|
Circle,
|
||||||
LearningContentAssignment,
|
LearningContentAssignment,
|
||||||
LearningContentAttendanceDay,
|
LearningContentAttendanceCourse,
|
||||||
LearningContentFeedback,
|
LearningContentFeedback,
|
||||||
LearningContentLearningModule,
|
LearningContentLearningModule,
|
||||||
LearningContentMediaLibrary,
|
LearningContentMediaLibrary,
|
||||||
|
|
@ -84,19 +84,19 @@ class LearningUnitFactory(wagtail_factories.PageFactory):
|
||||||
model = LearningUnit
|
model = LearningUnit
|
||||||
|
|
||||||
|
|
||||||
class LearningContentAttendanceDayFactory(wagtail_factories.PageFactory):
|
class LearningContentAttendanceCourseFactory(wagtail_factories.PageFactory):
|
||||||
title = "Platzhalter Inhalt"
|
title = "Platzhalter Inhalt"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
description = RichText("Platzhalter Beschreibung")
|
description = RichText("Platzhalter Beschreibung")
|
||||||
content_url = ""
|
content_url = ""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = LearningContentAttendanceDay
|
model = LearningContentAttendanceCourse
|
||||||
|
|
||||||
|
|
||||||
class LearningContentVideoFactory(wagtail_factories.PageFactory):
|
class LearningContentVideoFactory(wagtail_factories.PageFactory):
|
||||||
title = "Platzhalter Video"
|
title = "Platzhalter Video"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
content_url = "https://www.youtube.com/embed/qhPIfxS2hvI"
|
content_url = "https://www.youtube.com/embed/qhPIfxS2hvI"
|
||||||
description = RichText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
|
description = RichText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
|
||||||
|
|
||||||
|
|
@ -106,7 +106,7 @@ class LearningContentVideoFactory(wagtail_factories.PageFactory):
|
||||||
|
|
||||||
class LearningContentPlaceholderFactory(wagtail_factories.PageFactory):
|
class LearningContentPlaceholderFactory(wagtail_factories.PageFactory):
|
||||||
title = "Platzhalter Video"
|
title = "Platzhalter Video"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
content_url = ""
|
content_url = ""
|
||||||
description = RichText("Platzhalter")
|
description = RichText("Platzhalter")
|
||||||
|
|
||||||
|
|
@ -116,7 +116,7 @@ class LearningContentPlaceholderFactory(wagtail_factories.PageFactory):
|
||||||
|
|
||||||
class LearningContentFeedbackFactory(wagtail_factories.PageFactory):
|
class LearningContentFeedbackFactory(wagtail_factories.PageFactory):
|
||||||
title = "Feedback"
|
title = "Feedback"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
content_url = ""
|
content_url = ""
|
||||||
description = RichText("")
|
description = RichText("")
|
||||||
|
|
||||||
|
|
@ -126,7 +126,7 @@ class LearningContentFeedbackFactory(wagtail_factories.PageFactory):
|
||||||
|
|
||||||
class LearningContentLearningModuleFactory(wagtail_factories.PageFactory):
|
class LearningContentLearningModuleFactory(wagtail_factories.PageFactory):
|
||||||
title = "Beispiel Lernmodul"
|
title = "Beispiel Lernmodul"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
content_url = ""
|
content_url = ""
|
||||||
description = RichText("")
|
description = RichText("")
|
||||||
|
|
||||||
|
|
@ -136,7 +136,7 @@ class LearningContentLearningModuleFactory(wagtail_factories.PageFactory):
|
||||||
|
|
||||||
class LearningContentMediaLibraryFactory(wagtail_factories.PageFactory):
|
class LearningContentMediaLibraryFactory(wagtail_factories.PageFactory):
|
||||||
title = "Mediathek"
|
title = "Mediathek"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
content_url = ""
|
content_url = ""
|
||||||
description = RichText("")
|
description = RichText("")
|
||||||
|
|
||||||
|
|
@ -146,7 +146,7 @@ class LearningContentMediaLibraryFactory(wagtail_factories.PageFactory):
|
||||||
|
|
||||||
class LearningContentTestFactory(wagtail_factories.PageFactory):
|
class LearningContentTestFactory(wagtail_factories.PageFactory):
|
||||||
title = "Fachcheck"
|
title = "Fachcheck"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
content_url = ""
|
content_url = ""
|
||||||
description = RichText("")
|
description = RichText("")
|
||||||
|
|
||||||
|
|
@ -156,7 +156,7 @@ class LearningContentTestFactory(wagtail_factories.PageFactory):
|
||||||
|
|
||||||
class LearningContentRichTextFactory(wagtail_factories.PageFactory):
|
class LearningContentRichTextFactory(wagtail_factories.PageFactory):
|
||||||
title = "Rich Text"
|
title = "Rich Text"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
content_url = ""
|
content_url = ""
|
||||||
description = RichText("")
|
description = RichText("")
|
||||||
|
|
||||||
|
|
@ -166,7 +166,7 @@ class LearningContentRichTextFactory(wagtail_factories.PageFactory):
|
||||||
|
|
||||||
class LearningContentAssignmentFactory(wagtail_factories.PageFactory):
|
class LearningContentAssignmentFactory(wagtail_factories.PageFactory):
|
||||||
title = "Geleitete Fallarbeit"
|
title = "Geleitete Fallarbeit"
|
||||||
minutes = 15
|
minutes = 0
|
||||||
content_url = ""
|
content_url = ""
|
||||||
description = RichText("")
|
description = RichText("")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,8 @@ OAUTH_FAIL_REDIRECT = "login-error"
|
||||||
def login(request):
|
def login(request):
|
||||||
oauth_client = oauth.create_client(settings.OAUTH["client_name"])
|
oauth_client = oauth.create_client(settings.OAUTH["client_name"])
|
||||||
redirect_uri = settings.OAUTH["local_redirect_uri"]
|
redirect_uri = settings.OAUTH["local_redirect_uri"]
|
||||||
return oauth_client.authorize_redirect(request, redirect_uri)
|
language = request.GET.get("lang", "de")
|
||||||
|
return oauth_client.authorize_redirect(request, redirect_uri, lang=language)
|
||||||
|
|
||||||
|
|
||||||
def authorize(request):
|
def authorize(request):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue