Merged develop into feature/VBV-717-teilnehmer-profil-in-dashboard-fullscreen

This commit is contained in:
Elia Bieri 2024-10-01 06:35:33 +00:00
commit 82f01dbcf0
39 changed files with 964 additions and 447 deletions

View File

@ -2,13 +2,15 @@
import EvaluationIntro from "@/components/assignment/evaluation/EvaluationIntro.vue"; import EvaluationIntro from "@/components/assignment/evaluation/EvaluationIntro.vue";
import EvaluationSummary from "@/components/assignment/evaluation/EvaluationSummary.vue"; import EvaluationSummary from "@/components/assignment/evaluation/EvaluationSummary.vue";
import EvaluationTask from "@/components/assignment/evaluation/EvaluationTask.vue"; import EvaluationTask from "@/components/assignment/evaluation/EvaluationTask.vue";
import { useCourseSessionDetailQuery } from "@/composables"; import { useCourseSessionDetailQuery, useCurrentCourseSession } from "@/composables";
import { UPSERT_ASSIGNMENT_COMPLETION_MUTATION } from "@/graphql/mutations";
import type { import type {
Assignment, Assignment,
AssignmentCompletion, AssignmentCompletion,
AssignmentEvaluationTask, AssignmentEvaluationTask,
CourseSessionUser, CourseSessionUser,
} from "@/types"; } from "@/types";
import { useMutation } from "@urql/vue";
import { useRouteQuery } from "@vueuse/router"; import { useRouteQuery } from "@vueuse/router";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { findIndex } from "lodash"; import { findIndex } from "lodash";
@ -21,10 +23,12 @@ const props = defineProps<{
assignment: Assignment; assignment: Assignment;
}>(); }>();
const emit = defineEmits(["close"]); const emit = defineEmits(["close", "reopen"]);
log.debug("UserEvaluation setup"); log.debug("UserEvaluation setup");
const courseSession = useCurrentCourseSession();
// 0 = introduction, 1 - n = tasks, n+1 = submission // 0 = introduction, 1 - n = tasks, n+1 = submission
const stepIndex = useRouteQuery("step", "0", { transform: Number, mode: "push" }); const stepIndex = useRouteQuery("step", "0", { transform: Number, mode: "push" });
@ -58,6 +62,34 @@ function editTask(task: AssignmentEvaluationTask) {
stepIndex.value = taskIndex + 1; stepIndex.value = taskIndex + 1;
} }
function canReopen() {
return (
evaluationSubmitted.value &&
(props.assignment.assignment_type === "CASEWORK" ||
props.assignment.assignment_type === "PRAXIS_ASSIGNMENT")
);
}
const upsertAssignmentCompletionMutation = useMutation(
UPSERT_ASSIGNMENT_COMPLETION_MUTATION
);
async function reopen() {
log.debug("reopen");
await upsertAssignmentCompletionMutation.executeMutation({
assignmentId: props.assignment.id,
courseSessionId: courseSession.value.id,
assignmentUserId: props.assignmentUser.id,
completionStatus: "EVALUATION_IN_PROGRESS",
completionDataString: JSON.stringify({}),
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
id: props.assignmentCompletion?.id,
});
stepIndex.value = 1;
}
const courseSessionDetailResult = useCourseSessionDetailQuery(); const courseSessionDetailResult = useCourseSessionDetailQuery();
const assignmentDetail = computed(() => { const assignmentDetail = computed(() => {
@ -86,22 +118,6 @@ const taskExpertDataText = computed(() => {
return result; return result;
}); });
const text = computed(() => {
if (props.assignment.assignment_type === "CASEWORK") {
return {
evaluationFinish: "a.Bewertung abschliessen",
};
} else if (props.assignment.assignment_type === "PRAXIS_ASSIGNMENT") {
return {
evaluationFinish: "a.Feedback abschliessen",
};
} else {
return {
evaluationFinish: "UNKNOWN ASSIGNMENT TYPE",
};
}
});
function nextButtonEnabled() { function nextButtonEnabled() {
if (inEvaluationTask.value) { if (inEvaluationTask.value) {
return taskExpertDataText.value ?? false; return taskExpertDataText.value ?? false;
@ -109,6 +125,15 @@ function nextButtonEnabled() {
return true; return true;
} }
function previousButtonVisible() {
// Bei einer "bewerteten" Arbeit, kann man im letzten Schritt nicht mehr "zurück"
// man kann aber die Bewertung wieder "bearbeiten"
return !(
stepIndex.value > numTasks.value &&
props.assignmentCompletion.completion_status === "EVALUATION_SUBMITTED"
);
}
function finishButtonEnabled() { function finishButtonEnabled() {
return props.assignmentCompletion.completion_status === "EVALUATION_SUBMITTED"; return props.assignmentCompletion.completion_status === "EVALUATION_SUBMITTED";
} }
@ -150,18 +175,19 @@ function finishButtonEnabled() {
<nav v-if="stepIndex > 0" class="sticky bottom-0 border-t bg-gray-200 p-6"> <nav v-if="stepIndex > 0" class="sticky bottom-0 border-t bg-gray-200 p-6">
<div class="relative flex flex-row place-content-end"> <div class="relative flex flex-row place-content-end">
<button <button
v-if="true" v-if="previousButtonVisible()"
class="btn-secondary mr-2 flex items-center" class="btn-secondary flex items-center"
data-cy="previous-step" data-cy="previous-step"
@click="previousPage()" @click="previousPage()"
> >
<it-icon-arrow-left class="mr-2 h-6 w-6"></it-icon-arrow-left> <it-icon-arrow-left class="mr-2 h-6 w-6"></it-icon-arrow-left>
{{ $t("general.backCapitalized") }} {{ $t("general.backCapitalized") }}
</button> </button>
<button <button
v-if="stepIndex <= numTasks" v-if="stepIndex <= numTasks"
:disabled="!nextButtonEnabled()" :disabled="!nextButtonEnabled()"
class="btn-secondary z-10 flex items-center" class="btn-secondary z-10 ml-2 flex items-center"
data-cy="next-step" data-cy="next-step"
@click="nextPage()" @click="nextPage()"
> >
@ -170,15 +196,25 @@ function finishButtonEnabled() {
</button> </button>
<button <button
v-if="stepIndex > numTasks" v-if="stepIndex > numTasks && canReopen()"
class="btn-secondary z-10 ml-2"
data-cy="btn-reopen"
@click="reopen()"
>
<span class="flex items-center">
{{ $t("a.Bewertung bearbeiten") }}
</span>
</button>
<button
v-if="stepIndex > numTasks && finishButtonEnabled()"
:disabled="!finishButtonEnabled()" :disabled="!finishButtonEnabled()"
class="btn-secondary z-10" class="btn-primary z-10 ml-2"
data-cy="next-step" data-cy="btn-close"
@click="emit('close')" @click="emit('close')"
> >
<span class="flex items-center"> <span class="flex items-center">
{{ $t(text.evaluationFinish) }} {{ $t("a.Schliessen") }}
<it-icon-check class="ml-2 h-6 w-6"></it-icon-check>
</span> </span>
</button> </button>
</div> </div>

View File

@ -76,30 +76,8 @@ async function startEvaluation() {
<template> <template>
<div> <div>
<div class="mb-4">
{{
$t("assignment.x hat die Ergebnisse am y um z Uhr abgegeben", {
x: props.assignmentUser.first_name + " " + props.assignmentUser.last_name,
y: dayjs(props.assignmentCompletion.submitted_at).format("DD.MM.YYYY"),
z: dayjs(props.assignmentCompletion.submitted_at).format("HH.mm"),
})
}}
</div>
<h3 data-cy="title">{{ $t(text.evaluationTitle) }}</h3> <h3 data-cy="title">{{ $t(text.evaluationTitle) }}</h3>
<p v-if="props.dueDate" class="my-4" data-cy="evaluation-duedate">
{{
$t(
"assignment.Du musst die Bewertung bis am x um y Uhr abschliessen und freigeben",
{
x: props.dueDate.format("DD.MM.YYYY"),
y: props.dueDate.format("HH.mm"),
}
)
}}
</p>
<p class="my-4" data-cy="instruction"> <p class="my-4" data-cy="instruction">
{{ {{
$t(text.evaluationInstruction, { $t(text.evaluationInstruction, {
@ -125,6 +103,11 @@ async function startEvaluation() {
</a> </a>
</p> </p>
<p v-if="props.dueDate" class="my-4" data-cy="evaluation-duedate">
{{ $t("a.Freigabetermin Bewertung") }}: {{ props.dueDate.format("DD.MM.YYYY") }}
{{ props.dueDate.format("HH.mm") }}
</p>
<div> <div>
<button <button
class="btn-primary text-large" class="btn-primary text-large"
@ -148,6 +131,18 @@ async function startEvaluation() {
<span v-else>{{ $t(text.evaluationStart) }}</span> <span v-else>{{ $t(text.evaluationStart) }}</span>
</button> </button>
</div> </div>
<ol class="mt-8">
<li
v-for="historyEntry in props.assignmentCompletion.additional_json_data
?.submission_history ?? []"
:key="historyEntry.timestamp"
>
{{ dayjs(historyEntry.timestamp).format("DD.MM.YYYY HH.mm") }}:
{{ $t(historyEntry.translation_key) }}
({{ historyEntry.user_display_name }})
</li>
</ol>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ItSuccessAlert from "@/components/ui/ItSuccessAlert.vue"; import ItSuccessAlert from "@/components/ui/ItSuccessAlert.vue";
import ItTextarea from "@/components/ui/ItTextarea.vue";
import RichText from "@/components/ui/RichText.vue"; import RichText from "@/components/ui/RichText.vue";
import { useCurrentCourseSession } from "@/composables"; import { useCurrentCourseSession } from "@/composables";
import { UPSERT_ASSIGNMENT_COMPLETION_MUTATION } from "@/graphql/mutations"; import { UPSERT_ASSIGNMENT_COMPLETION_MUTATION } from "@/graphql/mutations";
@ -16,7 +17,7 @@ import type {
import { useMutation } from "@urql/vue"; import { useMutation } from "@urql/vue";
import dayjs, { Dayjs } from "dayjs"; import dayjs, { Dayjs } from "dayjs";
import * as log from "loglevel"; import * as log from "loglevel";
import { computed, reactive } from "vue"; import { computed, reactive, ref } from "vue";
const props = defineProps<{ const props = defineProps<{
assignmentUser: CourseSessionUser; assignmentUser: CourseSessionUser;
@ -40,6 +41,10 @@ const upsertAssignmentCompletionMutation = useMutation(
UPSERT_ASSIGNMENT_COMPLETION_MUTATION UPSERT_ASSIGNMENT_COMPLETION_MUTATION
); );
const evaluationComment = ref(
props.assignmentCompletion.completion_data.expert_evaluation_comment?.text ?? ""
);
const text = computed(() => { const text = computed(() => {
if (props.assignment.assignment_type === "CASEWORK") { if (props.assignment.assignment_type === "CASEWORK") {
return { return {
@ -77,7 +82,11 @@ async function submitEvaluation() {
courseSessionId: courseSession.value.id, courseSessionId: courseSession.value.id,
assignmentUserId: props.assignmentUser.id, assignmentUserId: props.assignmentUser.id,
completionStatus: "EVALUATION_SUBMITTED", completionStatus: "EVALUATION_SUBMITTED",
completionDataString: JSON.stringify({}), completionDataString: JSON.stringify({
expert_evaluation_comment: {
text: evaluationComment.value,
},
}),
evaluationPoints: userPoints.value, evaluationPoints: userPoints.value,
// next line used for urql // next line used for urql
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@ -112,9 +121,48 @@ const maxPoints = computed(() => {
} }
return maxAssignmentPoints(props.assignment); return maxAssignmentPoints(props.assignment);
}); });
const userPoints = computed(() => const userPoints = computed(() =>
userAssignmentPoints(props.assignment, props.assignmentCompletion) userAssignmentPoints(props.assignment, props.assignmentCompletion)
); );
const userPointsWithDeduction = computed(() => {
const points = userPoints.value;
if (points && props.assignmentCompletion.evaluation_points_deducted > 0) {
return points - props.assignmentCompletion.evaluation_points_deducted;
}
return points;
});
const percentage = computed(() => {
if (props.assignmentCompletion.completion_status === "EVALUATION_SUBMITTED") {
return (
((props.assignmentCompletion?.evaluation_points_final ??
userPointsWithDeduction.value ??
0) /
(props.assignmentCompletion?.evaluation_max_points ?? 1)) *
100
);
} else {
return ((userPointsWithDeduction.value ?? 0) / (maxPoints.value ?? 1)) * 100;
}
});
const showNotPassed = computed(() => {
if (props.assignment.assignment_type === "CASEWORK") {
return percentage.value < 55;
}
return false;
});
const showPassed = computed(() => {
if (props.assignment.assignment_type === "CASEWORK") {
return percentage.value >= 55;
}
return false;
});
</script> </script>
<template> <template>
@ -136,26 +184,23 @@ const userPoints = computed(() =>
<section v-if="props.assignment.assignment_type === 'CASEWORK'"> <section v-if="props.assignment.assignment_type === 'CASEWORK'">
<div class="flex items-center"> <div class="flex items-center">
<div class="heading-1 py-4" data-cy="user-points"> <div class="heading-1 py-4" data-cy="user-points">
<template {{ userPointsWithDeduction }}
v-if="
props.assignmentCompletion.completion_status == 'EVALUATION_SUBMITTED'
"
>
{{ props.assignmentCompletion.evaluation_points_final }}
</template>
<template v-else>
{{ userPoints }}
</template>
</div> </div>
<div class="pl-2" data-cy="total-points"> <div class="pl-2" data-cy="total-points">
{{ $t("assignment.von x Punkten", { x: maxPoints }) }} {{ $t("assignment.von x Punkten", { x: maxPoints }) }}
({{ ({{ percentage.toFixed(0) }}%)
( </div>
((props.assignmentCompletion?.evaluation_points_final ?? 0) /
(props.assignmentCompletion?.evaluation_max_points ?? 1)) * <div v-if="showNotPassed" class="ml-2">
100 <span class="my-2 rounded-md bg-error-red-200 px-2.5 py-0.5">
).toFixed(0) {{ $t("a.Nicht Bestanden") }}
}}%) </span>
</div>
<div v-if="showPassed" class="ml-2">
<span class="my-2 rounded-md bg-green-200 px-2.5 py-0.5">
{{ $t("a.Bestanden") }}
</span>
</div> </div>
</div> </div>
@ -206,6 +251,11 @@ const userPoints = computed(() =>
</p> </p>
</div> </div>
<p v-if="props.dueDate" class="my-4" data-cy="evaluation-duedate">
{{ $t("a.Freigabetermin Bewertung") }}: {{ props.dueDate.format("DD.MM.YYYY") }}
{{ props.dueDate.format("HH.mm") }}
</p>
<p <p
v-if=" v-if="
props.assignment.assignment_type === 'PRAXIS_ASSIGNMENT' && props.assignment.assignment_type === 'PRAXIS_ASSIGNMENT' &&
@ -214,18 +264,11 @@ const userPoints = computed(() =>
> >
{{ $t("a.assignment.evaluationFeedbackDescriptionText") }} {{ $t("a.assignment.evaluationFeedbackDescriptionText") }}
</p> </p>
<div <div
v-if="props.assignmentCompletion.completion_status === 'EVALUATION_SUBMITTED'" v-if="props.assignmentCompletion.completion_status !== 'EVALUATION_SUBMITTED'"
class="mt-8"
> >
{{ $t("assignment.dueDateEvaluation") }}:
{{
dayjs(props.assignmentCompletion.evaluation_submitted_at).format("DD.MM.YYYY")
}}
um
{{ dayjs(props.assignmentCompletion.evaluation_submitted_at).format("HH.mm") }}
Uhr
</div>
<div v-else>
<button <button
class="btn-primary text-large" class="btn-primary text-large"
data-cy="submit-evaluation" data-cy="submit-evaluation"
@ -233,6 +276,18 @@ const userPoints = computed(() =>
> >
{{ $t(text.evaluationSubmit) }} {{ $t(text.evaluationSubmit) }}
</button> </button>
<ItTextarea
v-model="evaluationComment"
class="mt-8"
:placeholder="`${$t('a.Kommentar erfassen')}...`"
data-cy="reason-text"
></ItTextarea>
</div>
<div v-else-if="evaluationComment" class="mt-4">
{{ $t("a.Kommentar") }}:
<br />
{{ evaluationComment }}
</div> </div>
<div v-if="state.showSuccessInfo" class="mt-4"> <div v-if="state.showSuccessInfo" class="mt-4">
@ -245,6 +300,21 @@ const userPoints = computed(() =>
" "
></ItSuccessAlert> ></ItSuccessAlert>
</div> </div>
<section class="mt-4" data-cy="assignment-history">
<ol>
<li
v-for="historyEntry in props.assignmentCompletion.additional_json_data
?.submission_history ?? []"
:key="historyEntry.timestamp"
data-cy="assignment-history-entry"
>
{{ dayjs(historyEntry.timestamp).format("DD.MM.YYYY HH.mm") }}:
{{ $t(historyEntry.translation_key) }}
({{ historyEntry.user_display_name }})
</li>
</ol>
</section>
</section> </section>
<section> <section>

View File

@ -23,7 +23,7 @@ onMounted(async () => {
:details-link="`/course/${props.courseSlug}/learning-mentor/tasks`" :details-link="`/course/${props.courseSlug}/learning-mentor/tasks`"
data-cy="dashboard.mentor.openTasksCount" data-cy="dashboard.mentor.openTasksCount"
> >
<template #title>{{ $t("Zu erledigen") }}</template> <template #title>{{ $t("a.Zu erledigen") }}</template>
<template #content> <template #content>
<div class="flex flex-row space-x-3 bg-white pb-6"> <div class="flex flex-row space-x-3 bg-white pb-6">
<div <div
@ -31,7 +31,7 @@ onMounted(async () => {
> >
<span>{{ openTaskCount }}</span> <span>{{ openTaskCount }}</span>
</div> </div>
<p class="ml-3 mt-0 leading-[74px]">{{ $t("Elemente zu erledigen") }}</p> <p class="ml-3 mt-0 leading-[74px]">{{ $t("a.Elemente zu erledigen") }}</p>
</div> </div>
</template> </template>
</BaseBox> </BaseBox>

View File

@ -26,7 +26,7 @@ const regionFilter = computed(() => {
})); }));
return [ return [
{ {
name: `${t("Region")}: ${t("a.Alle")}`, name: `${t("a.Region")}: ${t("a.Alle")}`,
id: "_all", id: "_all",
}, },
...f, ...f,

View File

@ -79,7 +79,7 @@ const attendanceCountPerChosenProfile = computed(() => {
:details-link="`/dashboard/persons?course=${courseId}&selectedPaidYear=${currentYear}`" :details-link="`/dashboard/persons?course=${courseId}&selectedPaidYear=${currentYear}`"
data-cy="dashboard.stats.trainingResponsible.participants" data-cy="dashboard.stats.trainingResponsible.participants"
> >
<template #title>{{ $t("Teilnehmer im") }} {{ currentYear }}</template> <template #title>{{ $t("a.Teilnehmer im") }} {{ currentYear }}</template>
<template #content> <template #content>
<div class="flex flex-row space-x-3 bg-white pb-6"> <div class="flex flex-row space-x-3 bg-white pb-6">
<div <div
@ -89,7 +89,7 @@ const attendanceCountPerChosenProfile = computed(() => {
<span>{{ attendanceCountInCurrentYear }}</span> <span>{{ attendanceCountInCurrentYear }}</span>
</div> </div>
<p class="ml-3 mt-0 leading-[74px]"> <p class="ml-3 mt-0 leading-[74px]">
{{ $t("Teilnehmer") }} {{ $t("a.Teilnehmer") }}
</p> </p>
</div> </div>
</template> </template>
@ -97,7 +97,7 @@ const attendanceCountPerChosenProfile = computed(() => {
</div> </div>
<div class="my-6 space-y-6 border-t border-gray-500 py-6"> <div class="my-6 space-y-6 border-t border-gray-500 py-6">
<h2 class="text-base font-bold"> <h2 class="text-base font-bold">
{{ $t("Teilnehmer nach Zulassungsprofilen im") }} {{ currentYear }} {{ $t("a.Teilnehmer nach Zulassungsprofilen im") }} {{ currentYear }}
</h2> </h2>
<AttendancePerChosenProfileChart <AttendancePerChosenProfileChart
v-if="attendanceCountPerChosenProfile" v-if="attendanceCountPerChosenProfile"

View File

@ -38,7 +38,7 @@ const filteredDueDates = computed(() => {
<LoadingSpinner /> <LoadingSpinner />
</div> </div>
<div v-else class="flex flex-col space-y-2"> <div v-else class="flex flex-col space-y-2">
<h3 class="heading-3">{{ $t("Nächste Termine") }}</h3> <h3 class="heading-3">{{ $t("a.Nächste Termine") }}</h3>
<div <div
v-for="dueDate in filteredDueDates" v-for="dueDate in filteredDueDates"
:key="dueDate.id" :key="dueDate.id"

View File

@ -17,7 +17,7 @@ export const formatDueDate = (start: string, end?: string | null) => {
// at least `start` must be provided and valid // at least `start` must be provided and valid
if (!startDayjs.isValid()) { if (!startDayjs.isValid()) {
return i18next.t("Termin nicht festgelegt"); return i18next.t("a.Termin nicht festgelegt");
} }
// when only `start` is provided, show only the start date with time // when only `start` is provided, show only the start date with time

View File

@ -130,7 +130,7 @@ const mentorTabTitle = computed(() =>
data-cy="vv-buy-link" data-cy="vv-buy-link"
@click="clickLink(vvBuyLink.href.value as string)" @click="clickLink(vvBuyLink.href.value as string)"
> >
{{ $t("Lernpfad kaufen") }} {{ $t("a.Lehrgang kaufen") }}
</button> </button>
</li> </li>
</ul> </ul>

View File

@ -70,7 +70,7 @@ const inviteMentor = async () => {
const myLearningMentors = computed(() => const myLearningMentors = computed(() =>
courseSession.value.course.configuration.is_uk courseSession.value.course.configuration.is_uk
? "Meine Praxisbildner" ? "Meine Praxisbildner"
: "Meine Lernbegleiter" : "a.Meine Lernbegleitung"
); );
const inviteLearningMentor = computed(() => const inviteLearningMentor = computed(() =>

View File

@ -14,11 +14,11 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-
*/ */
const documents = { const documents = {
"\n mutation AttendanceCheckMutation(\n $attendanceCourseId: ID!\n $attendanceUserList: [AttendanceUserInputType]!\n ) {\n update_course_session_attendance_course_users(\n id: $attendanceCourseId\n attendance_user_list: $attendanceUserList\n ) {\n course_session_attendance_course {\n id\n attendance_user_list {\n user_id\n first_name\n last_name\n email\n status\n }\n }\n }\n }\n": types.AttendanceCheckMutationDocument, "\n mutation AttendanceCheckMutation(\n $attendanceCourseId: ID!\n $attendanceUserList: [AttendanceUserInputType]!\n ) {\n update_course_session_attendance_course_users(\n id: $attendanceCourseId\n attendance_user_list: $attendanceUserList\n ) {\n course_session_attendance_course {\n id\n attendance_user_list {\n user_id\n first_name\n last_name\n email\n status\n }\n }\n }\n }\n": types.AttendanceCheckMutationDocument,
"\n mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n $completionStatus: AssignmentCompletionStatus!\n $completionDataString: String!\n $evaluationPoints: Float\n $initializeCompletion: Boolean\n $evaluationUserId: ID\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_points: $evaluationPoints\n initialize_completion: $initializeCompletion\n evaluation_user_id: $evaluationUserId\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_points\n completion_data\n task_completion_data\n }\n }\n }\n": types.UpsertAssignmentCompletionDocument, "\n mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n $completionStatus: AssignmentCompletionStatus!\n $completionDataString: String!\n $evaluationPoints: Float\n $initializeCompletion: Boolean\n $evaluationUserId: ID\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_points: $evaluationPoints\n initialize_completion: $initializeCompletion\n evaluation_user_id: $evaluationUserId\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n completion_data\n task_completion_data\n additional_json_data\n }\n }\n }\n": types.UpsertAssignmentCompletionDocument,
"\n mutation UpdateCourseSessionProfile($input: CourseSessionProfileMutationInput!) {\n update_course_session_profile(input: $input) {\n clientMutationId\n result {\n __typename\n ... on UpdateCourseProfileSuccess {\n user {\n id\n chosen_profile\n }\n }\n ... on UpdateCourseProfileError {\n message\n }\n }\n }\n }\n": types.UpdateCourseSessionProfileDocument, "\n mutation UpdateCourseSessionProfile($input: CourseSessionProfileMutationInput!) {\n update_course_session_profile(input: $input) {\n clientMutationId\n result {\n __typename\n ... on UpdateCourseProfileSuccess {\n user {\n id\n chosen_profile\n }\n }\n ... on UpdateCourseProfileError {\n message\n }\n }\n }\n }\n": types.UpdateCourseSessionProfileDocument,
"\n fragment CoursePageFields on CoursePageInterface {\n title\n id\n slug\n content_type\n frontend_url\n }\n": types.CoursePageFieldsFragmentDoc, "\n fragment CoursePageFields on CoursePageInterface {\n title\n id\n slug\n content_type\n frontend_url\n }\n": types.CoursePageFieldsFragmentDoc,
"\n query attendanceCheckQuery($courseSessionId: ID!) {\n course_session_attendance_course(id: $courseSessionId) {\n id\n attendance_user_list {\n user_id\n status\n }\n }\n }\n": types.AttendanceCheckQueryDocument, "\n query attendanceCheckQuery($courseSessionId: ID!) {\n course_session_attendance_course(id: $courseSessionId) {\n id\n attendance_user_list {\n user_id\n status\n }\n }\n }\n": types.AttendanceCheckQueryDocument,
"\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument, "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n\n additional_json_data\n }\n }\n": types.AssignmentCompletionQueryDocument,
"\n query competenceCertificateQuery(\n $courseSlug: String!\n $courseSessionId: ID!\n $userIds: [UUID!]\n ) {\n competence_certificate_list(course_slug: $courseSlug, user_ids: $userIds) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n assignment_user {\n id\n }\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n evaluation_percent\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateQueryDocument, "\n query competenceCertificateQuery(\n $courseSlug: String!\n $courseSessionId: ID!\n $userIds: [UUID!]\n ) {\n competence_certificate_list(course_slug: $courseSlug, user_ids: $userIds) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n assignment_user {\n id\n }\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n evaluation_percent\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateQueryDocument,
"\n query competenceCertificateForUserQuery(\n $courseSlug: String!\n $courseSessionId: ID!\n $userIds: [UUID!]!\n ) {\n competence_certificate_list(course_slug: $courseSlug, user_ids: $userIds) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_final\n evaluation_points_deducted\n evaluation_max_points\n evaluation_passed\n evaluation_percent\n assignment_user {\n id\n }\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateForUserQueryDocument, "\n query competenceCertificateForUserQuery(\n $courseSlug: String!\n $courseSessionId: ID!\n $userIds: [UUID!]!\n ) {\n competence_certificate_list(course_slug: $courseSlug, user_ids: $userIds) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_final\n evaluation_points_deducted\n evaluation_max_points\n evaluation_passed\n evaluation_percent\n assignment_user {\n id\n }\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateForUserQueryDocument,
"\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n configuration {\n id\n enable_circle_documents\n enable_learning_mentor\n enable_competence_certificates\n }\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n optional_attendance\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument, "\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n configuration {\n id\n enable_circle_documents\n enable_learning_mentor\n enable_competence_certificates\n }\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n optional_attendance\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument,
@ -53,7 +53,7 @@ export function graphql(source: "\n mutation AttendanceCheckMutation(\n $att
/** /**
* 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 mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n $completionStatus: AssignmentCompletionStatus!\n $completionDataString: String!\n $evaluationPoints: Float\n $initializeCompletion: Boolean\n $evaluationUserId: ID\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_points: $evaluationPoints\n initialize_completion: $initializeCompletion\n evaluation_user_id: $evaluationUserId\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_points\n completion_data\n task_completion_data\n }\n }\n }\n"): (typeof documents)["\n mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n $completionStatus: AssignmentCompletionStatus!\n $completionDataString: String!\n $evaluationPoints: Float\n $initializeCompletion: Boolean\n $evaluationUserId: ID\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_points: $evaluationPoints\n initialize_completion: $initializeCompletion\n evaluation_user_id: $evaluationUserId\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_points\n completion_data\n task_completion_data\n }\n }\n }\n"]; export function graphql(source: "\n mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n $completionStatus: AssignmentCompletionStatus!\n $completionDataString: String!\n $evaluationPoints: Float\n $initializeCompletion: Boolean\n $evaluationUserId: ID\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_points: $evaluationPoints\n initialize_completion: $initializeCompletion\n evaluation_user_id: $evaluationUserId\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n completion_data\n task_completion_data\n additional_json_data\n }\n }\n }\n"): (typeof documents)["\n mutation UpsertAssignmentCompletion(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n $completionStatus: AssignmentCompletionStatus!\n $completionDataString: String!\n $evaluationPoints: Float\n $initializeCompletion: Boolean\n $evaluationUserId: ID\n ) {\n upsert_assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n assignment_user_id: $assignmentUserId\n completion_status: $completionStatus\n completion_data_string: $completionDataString\n evaluation_points: $evaluationPoints\n initialize_completion: $initializeCompletion\n evaluation_user_id: $evaluationUserId\n ) {\n assignment_completion {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n completion_data\n task_completion_data\n additional_json_data\n }\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.
*/ */
@ -69,7 +69,7 @@ export function graphql(source: "\n query attendanceCheckQuery($courseSessionId
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n"): (typeof documents)["\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n"]; export function graphql(source: "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n\n additional_json_data\n }\n }\n"): (typeof documents)["\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n\n additional_json_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.
*/ */

File diff suppressed because one or more lines are too long

View File

@ -594,7 +594,7 @@ type AssignmentCompletionObjectType {
course_session: CourseSessionObjectType! course_session: CourseSessionObjectType!
completion_status: AssignmentAssignmentCompletionCompletionStatusChoices! completion_status: AssignmentAssignmentCompletionCompletionStatusChoices!
completion_data: GenericScalar completion_data: GenericScalar
additional_json_data: JSONString! additional_json_data: GenericScalar
task_completion_data: GenericScalar task_completion_data: GenericScalar
learning_content_page_id: ID learning_content_page_id: ID
evaluation_points: Float evaluation_points: Float
@ -650,14 +650,6 @@ String, Boolean, Int, Float, List or Object.
""" """
scalar GenericScalar scalar GenericScalar
"""
Allows use of a JSON String for input / output from the GraphQL schema.
Use of this type is *not recommended* as you lose the benefits of having a defined, static
schema (one of the key benefits of GraphQL).
"""
scalar JSONString
type ContentDocumentObjectType { type ContentDocumentObjectType {
id: ID! id: ID!
display_text: String! display_text: String!

View File

@ -55,7 +55,6 @@ export const GenericScalar = "GenericScalar";
export const ID = "ID"; export const ID = "ID";
export const Int = "Int"; export const Int = "Int";
export const JSONStreamField = "JSONStreamField"; export const JSONStreamField = "JSONStreamField";
export const JSONString = "JSONString";
export const LearningContentAssignmentObjectType = "LearningContentAssignmentObjectType"; export const LearningContentAssignmentObjectType = "LearningContentAssignmentObjectType";
export const LearningContentAttendanceCourseObjectType = "LearningContentAttendanceCourseObjectType"; export const LearningContentAttendanceCourseObjectType = "LearningContentAttendanceCourseObjectType";
export const LearningContentDocumentListObjectType = "LearningContentDocumentListObjectType"; export const LearningContentDocumentListObjectType = "LearningContentDocumentListObjectType";

View File

@ -52,8 +52,13 @@ export const UPSERT_ASSIGNMENT_COMPLETION_MUTATION = graphql(`
submitted_at submitted_at
evaluation_submitted_at evaluation_submitted_at
evaluation_points evaluation_points
evaluation_max_points
evaluation_points_deducted
evaluation_points_deducted_reason
evaluation_points_final
completion_data completion_data
task_completion_data task_completion_data
additional_json_data
} }
} }
} }

View File

@ -85,6 +85,8 @@ export const ASSIGNMENT_COMPLETION_QUERY = graphql(`
edoniq_extended_time_flag edoniq_extended_time_flag
completion_data completion_data
task_completion_data task_completion_data
additional_json_data
} }
} }
`); `);

View File

@ -4,8 +4,6 @@
"60%": "60%", "60%": "60%",
"80%": "80%", "80%": "80%",
"100%": "100%", "100%": "100%",
"a.": "a.",
"a.a.AlleCircle": "a.a.AlleCircle",
"a.Abbrechen": "Abbrechen", "a.Abbrechen": "Abbrechen",
"a.Abgabetermin": "Abgabetermin", "a.Abgabetermin": "Abgabetermin",
"a.Abgezogene Punkte": "Abgezogene Punkte", "a.Abgezogene Punkte": "Abgezogene Punkte",
@ -16,13 +14,11 @@
"a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen.": "Aktuell hast du noch keine Person als Lernbegleitung eingeladen.", "a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen.": "Aktuell hast du noch keine Person als Lernbegleitung eingeladen.",
"a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen. Lade jetzt jemanden ein.": "Aktuell hast du noch keine Person als Lernbegleitung eingeladen. Lade jetzt jemanden ein.", "a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen. Lade jetzt jemanden ein.": "Aktuell hast du noch keine Person als Lernbegleitung eingeladen. Lade jetzt jemanden ein.",
"a.Aktuell hast du noch keine Person als Praxisbildner eingeladen.": "Aktuell hast du noch keine Person als Praxisbildner eingeladen.", "a.Aktuell hast du noch keine Person als Praxisbildner eingeladen.": "Aktuell hast du noch keine Person als Praxisbildner eingeladen.",
"a.Aktuell hast du noch keine Person als Praxisbildner eingeladen. Lade jetzt jemanden ein.": "a.Aktuell hast du noch keine Person als Praxisbildner eingeladen. Lade jetzt jemanden ein.", "a.Aktuell hast du noch keine Person als Praxisbildner eingeladen. Lade jetzt jemanden ein.": "Aktuell hast du noch keine Person als Praxisbildner eingeladen. Lade jetzt jemanden ein.",
"a.Aktueller Lehrgang": "Aktueller Lehrgang", "a.Aktueller Lehrgang": "Aktueller Lehrgang",
"a.Allbranche": "Allbranche", "a.Allbranche": "Allbranche",
"a.Alle": "Alle", "a.Alle": "Alle",
"a.Alle aufklappen": "Alle aufklappen", "a.Alle aufklappen": "Alle aufklappen",
"a.Alle Lehrgang": "a.Alle Lehrgang",
"a.Alle Lehrgänge": "a.Alle Lehrgänge",
"a.Alle Lehrgänge anzeigen": "Alle Lehrgänge anzeigen", "a.Alle Lehrgänge anzeigen": "Alle Lehrgänge anzeigen",
"a.Alle Personen anzeigen": "Alle Personen anzeigen", "a.Alle Personen anzeigen": "Alle Personen anzeigen",
"a.Alle Termine anzeigen": "Alle Termine anzeigen", "a.Alle Termine anzeigen": "Alle Termine anzeigen",
@ -30,8 +26,6 @@
"a.AlleCircle": "Circle: Alle", "a.AlleCircle": "Circle: Alle",
"a.AlleDurchführungen": "Durchführungen: Alle", "a.AlleDurchführungen": "Durchführungen: Alle",
"a.AlleGenerationen": "Generationen: Alle", "a.AlleGenerationen": "Generationen: Alle",
"a.AlleKreise": "a.AlleKreise",
"a.AlleRegionen": "a.AlleRegionen",
"a.AlleTermine": "Termine", "a.AlleTermine": "Termine",
"a.AlleTypen": "Alle Typen", "a.AlleTypen": "Alle Typen",
"a.Allgemeine Zufriedenheit": "Allgemeine Zufriedenheit", "a.Allgemeine Zufriedenheit": "Allgemeine Zufriedenheit",
@ -39,6 +33,8 @@
"a.An Durchführung teilnehmen": "An Durchführung teilnehmen", "a.An Durchführung teilnehmen": "An Durchführung teilnehmen",
"a.Anmelden": "Anmelden", "a.Anmelden": "Anmelden",
"a.Anwesenheit": "Anwesenheit", "a.Anwesenheit": "Anwesenheit",
"a.Anwesenheit Präsenzkurse": "Anwesenheit Präsenzkurse",
"a.Anwesenheitskontrolle Präsenzkurse": "Anwesenheitskontrolle Präsenzkurse",
"a.Arbeiten": "Arbeiten", "a.Arbeiten": "Arbeiten",
"a.assignment.evaluationFeedbackDescriptionText": "Gib dein Feedback frei, damit es mit dem Teilnehmer geteilt wird.", "a.assignment.evaluationFeedbackDescriptionText": "Gib dein Feedback frei, damit es mit dem Teilnehmer geteilt wird.",
"a.assignment.evaluationInstrumentDescriptionTextFeedback": "Bitte unterstütze {{name}} und gib Feedback zum Auftrag.", "a.assignment.evaluationInstrumentDescriptionTextFeedback": "Bitte unterstütze {{name}} und gib Feedback zum Auftrag.",
@ -53,9 +49,9 @@
"a.Bewertung": "Bewertung", "a.Bewertung": "Bewertung",
"a.Bewertung abschliessen": "Bewertung abschliessen", "a.Bewertung abschliessen": "Bewertung abschliessen",
"a.Bewertung ansehen": "Bewertung ansehen", "a.Bewertung ansehen": "Bewertung ansehen",
"a.Bewertung bearbeiten": "a.Bewertung bearbeiten", "a.Bewertung bearbeiten": "Bewertung bearbeiten",
"a.Bewertung bearbeitet": "a.Bewertung bearbeitet", "a.Bewertung bearbeitet": "Bewertung bearbeitet",
"a.Bewertung erneut bearbeitet": "a.Bewertung erneut bearbeitet", "a.Bewertung erneut bearbeitet": "Bewertung erneut bearbeitet",
"a.Bewertung fortsetzen": "Bewertung fortsetzen", "a.Bewertung fortsetzen": "Bewertung fortsetzen",
"a.Bewertung Freigabe": "Bewertung Freigabe", "a.Bewertung Freigabe": "Bewertung Freigabe",
"a.Bewertung freigeben": "Bewertung freigeben", "a.Bewertung freigeben": "Bewertung freigeben",
@ -106,6 +102,7 @@
"a.E-Mail Adresse": "E-Mail Adresse", "a.E-Mail Adresse": "E-Mail Adresse",
"a.Einladung": "Einladung", "a.Einladung": "Einladung",
"a.Einladung abschicken": "Einladung abschicken", "a.Einladung abschicken": "Einladung abschicken",
"a.Elemente zu erledigen": "Elemente zu erledigen",
"a.Email": "Email", "a.Email": "Email",
"a.Entfernen": "Entfernen", "a.Entfernen": "Entfernen",
"a.Erfahrungsnote üK": "Erfahrungsnote üK", "a.Erfahrungsnote üK": "Erfahrungsnote üK",
@ -116,7 +113,7 @@
"a.Ergebnisse bewerten": "Ergebnisse bewerten", "a.Ergebnisse bewerten": "Ergebnisse bewerten",
"a.Ergebnisse teilen": "Ergebnisse teilen", "a.Ergebnisse teilen": "Ergebnisse teilen",
"a.Erneut bearbeiten": "Erneut bearbeiten", "a.Erneut bearbeiten": "Erneut bearbeiten",
"a.Experte": "", "a.Experte": "Experte",
"a.Feedback abschliessen": "Feedback abschliessen", "a.Feedback abschliessen": "Feedback abschliessen",
"a.Feedback ansehen": "Feedback ansehen", "a.Feedback ansehen": "Feedback ansehen",
"a.Feedback erneut bearbeitet": "Feedback erneut bearbeitet", "a.Feedback erneut bearbeitet": "Feedback erneut bearbeitet",
@ -134,6 +131,8 @@
"a.Firmenanschrift": "Firmenanschrift", "a.Firmenanschrift": "Firmenanschrift",
"a.Firmenname": "Firmenname", "a.Firmenname": "Firmenname",
"a.Franzosisch": "Französisch", "a.Franzosisch": "Französisch",
"a.Freigabetermin Bewertung": "Freigabetermin Bewertung",
"a.Freigabetermin Bewertungen": "Freigabetermin Bewertungen",
"a.Fremdeinschätzung anzeigen": "Fremdeinschätzung anzeigen", "a.Fremdeinschätzung anzeigen": "Fremdeinschätzung anzeigen",
"a.Fremdeinschätzung freigeben": "Fremdeinschätzung freigeben", "a.Fremdeinschätzung freigeben": "Fremdeinschätzung freigeben",
"a.Fremdeinschätzung von FEEDBACK_PROVIDER_NAME": "Fremdeinschätzung von {{FEEDBACK_PROVIDER_NAME}}", "a.Fremdeinschätzung von FEEDBACK_PROVIDER_NAME": "Fremdeinschätzung von {{FEEDBACK_PROVIDER_NAME}}",
@ -156,18 +155,19 @@
"a.Hast du Fragen? Schau dir unsere FAQ an oder kontaktiere uns": "Hast du Fragen? Schau dir unsere {faq} an oder kontaktiere uns", "a.Hast du Fragen? Schau dir unsere FAQ an oder kontaktiere uns": "Hast du Fragen? Schau dir unsere {faq} an oder kontaktiere uns",
"a.Hast du schon ein Konto?": "Hast du schon ein Konto?", "a.Hast du schon ein Konto?": "Hast du schon ein Konto?",
"a.Hausnummmer": "Hausnummmer", "a.Hausnummmer": "Hausnummmer",
"a.Hier kannst du ausschliesslich mit einer Kreditkarte bezahlen.": "a.Hier kannst du ausschliesslich mit einer Kreditkarte bezahlen.",
"a.Hier kannst du Personen einladen, damit sie deine Lernbegleitung werden. Zudem siehst du jederzeit eine Übersicht aller Personen, die du bereits als Lernbegleitung hinzugefügt hast.": "Hier kannst du Personen einladen, damit sie deine Lernbegleitung werden. Zudem siehst du jederzeit eine Übersicht aller Personen, die du bereits als Lernbegleitung hinzugefügt hast.", "a.Hier kannst du Personen einladen, damit sie deine Lernbegleitung werden. Zudem siehst du jederzeit eine Übersicht aller Personen, die du bereits als Lernbegleitung hinzugefügt hast.": "Hier kannst du Personen einladen, damit sie deine Lernbegleitung werden. Zudem siehst du jederzeit eine Übersicht aller Personen, die du bereits als Lernbegleitung hinzugefügt hast.",
"a.Höchstpunktzahl": "Höchstpunktzahl", "a.Höchstpunktzahl": "Höchstpunktzahl",
"a.Ich kann das": "Ich kann das", "a.Ich kann das": "Ich kann das",
"a.Italienisch": "Italienisch", "a.Italienisch": "Italienisch",
"a.Ja, NAME kann das.": "Ja, {{NAME}} kann das", "a.Ja, NAME kann das.": "Ja, {{NAME}} kann das",
"a.Jahr": "Jahr",
"a.Jetzt mit Lehrgang starten": "Jetzt mit Lehrgang starten", "a.Jetzt mit Lehrgang starten": "Jetzt mit Lehrgang starten",
"a.Kann FULLNAME das?": "Kann {{FULLNAME}} das?", "a.Kann FULLNAME das?": "Kann {{FULLNAME}} das?",
"a.Kein Circle verfügbar oder ausgewählt.": "Kein Circle verfügbar oder ausgewählt.", "a.Kein Circle verfügbar oder ausgewählt.": "Kein Circle verfügbar oder ausgewählt.",
"a.Keine Angabe": "Keine Angabe", "a.Keine Angabe": "Keine Angabe",
"a.Kommentar": "a.Kommentar", "a.Keine Auftragsdetails verfügbar.": "Keine Auftragsdetails verfügbar.",
"a.Kommentar erfassen": "a.Kommentar erfassen", "a.Kommentar": "Kommentar",
"a.Kommentar erfassen": "Kommentar erfassen",
"a.Kompetenznachweis": "Kompetenznachweis", "a.Kompetenznachweis": "Kompetenznachweis",
"a.Kompetenznachweis-Elemente": "Kompetenznachweis-Elemente", "a.Kompetenznachweis-Elemente": "Kompetenznachweis-Elemente",
"a.Kompetenznachweise": "Kompetenznachweise", "a.Kompetenznachweise": "Kompetenznachweise",
@ -175,7 +175,6 @@
"a.Konto erstellen": "Konto erstellen", "a.Konto erstellen": "Konto erstellen",
"a.Kosten": "Kosten", "a.Kosten": "Kosten",
"a.Kosten aller Jahre ansehen": "a.Kosten aller Jahre ansehen", "a.Kosten aller Jahre ansehen": "a.Kosten aller Jahre ansehen",
"a.Kosten in 2024": "a.Kosten in 2024",
"a.Krankenzusatzversicherung": "Krankenzusatzversicherung", "a.Krankenzusatzversicherung": "Krankenzusatzversicherung",
"a.Krankenzusatzversicherungen": "Krankenzusatzversicherungen", "a.Krankenzusatzversicherungen": "Krankenzusatzversicherungen",
"a.Lade ein Profilbild hoch, damit dich andere Personen auf den ersten Blick erkennen.": "Lade ein Profilbild hoch, damit dich andere Personen auf den ersten Blick erkennen.", "a.Lade ein Profilbild hoch, damit dich andere Personen auf den ersten Blick erkennen.": "Lade ein Profilbild hoch, damit dich andere Personen auf den ersten Blick erkennen.",
@ -186,7 +185,7 @@
"a.Lehrgang kaufen": "Lehrgang kaufen", "a.Lehrgang kaufen": "Lehrgang kaufen",
"a.Leistungsziel": "Leistungsziel", "a.Leistungsziel": "Leistungsziel",
"a.Leistungsziele": "Leistungsziele", "a.Leistungsziele": "Leistungsziele",
"a.Lernbegleiter": "a.Lernbegleiter", "a.Lernbegleiter": "Lernbegleiter",
"a.Lernbegleitung": "Lernbegleitung", "a.Lernbegleitung": "Lernbegleitung",
"a.Lernbegleitung auswählen": "Lernbegleitung auswählen", "a.Lernbegleitung auswählen": "Lernbegleitung auswählen",
"a.Lernbegleitung einladen": "Lernbegleitung einladen", "a.Lernbegleitung einladen": "Lernbegleitung einladen",
@ -212,8 +211,7 @@
"a.NUMBER Elemente abgeschlossen": "{NUMBER} Elemente abgeschlossen", "a.NUMBER Elemente abgeschlossen": "{NUMBER} Elemente abgeschlossen",
"a.NUMBER Präsenztage abgeschlossen": "{NUMBER} Präsenztage abgeschlossen", "a.NUMBER Präsenztage abgeschlossen": "{NUMBER} Präsenztage abgeschlossen",
"a.NUMBER Teilnehmer anwesend": "{NUMBER} Teilnehmer anwesend", "a.NUMBER Teilnehmer anwesend": "{NUMBER} Teilnehmer anwesend",
"a.Nächste Termine": "a.Nächste Termine", "a.Nächste Termine": "Nächste Termine",
"a.OldCircle": "a.OldCircle",
"a.Optionale Anwesenheit": "Optionale Anwesenheit", "a.Optionale Anwesenheit": "Optionale Anwesenheit",
"a.Ort": "Ort", "a.Ort": "Ort",
"a.Personen": "Personen", "a.Personen": "Personen",
@ -229,20 +227,20 @@
"a.Profil bearbeiten": "Profil bearbeiten", "a.Profil bearbeiten": "Profil bearbeiten",
"a.Profil ergänzen": "Profil ergänzen", "a.Profil ergänzen": "Profil ergänzen",
"a.Profilbild": "Profilbild", "a.Profilbild": "Profilbild",
"a.Präsenzkurs": "Präsenzkurs",
"a.Präsenztag": "Präsenztag", "a.Präsenztag": "Präsenztag",
"a.Punkte": "Punkte", "a.Punkte": "Punkte",
"a.Punkte aus Bewertung": "Punkte aus Bewertung", "a.Punkte aus Bewertung": "Punkte aus Bewertung",
"a.PunkteVonDaniel": "",
"a.PunkteVonDaniel123": "Super Sache",
"a.Rechnung": "Rechnung", "a.Rechnung": "Rechnung",
"a.RechnungPaymentMethodDescription": "a.RechnungPaymentMethodDescription",
"a.Rechnungsadresse": "Rechnungsadresse", "a.Rechnungsadresse": "Rechnungsadresse",
"a.Rechnungsadresse hinzufügen": "Rechnungsadresse hinzufügen", "a.Rechnungsadresse hinzufügen": "Rechnungsadresse hinzufügen",
"a.Rechnungsadresse von {organisation}": "Rechnungsadresse von {{organisation}}", "a.Rechnungsadresse von {organisation}": "Rechnungsadresse von {{organisation}}",
"a.Rechnungsadresse von {organisation} hinzufügen": "Rechnungsadresse von {{organisation}} hinzufügen", "a.Rechnungsadresse von {organisation} hinzufügen": "Rechnungsadresse von {{organisation}} hinzufügen",
"a.Regionenleiter": "a.Regionenleiter", "a.Region": "Region",
"a.Regionenleiter": "Regionenleiter",
"a.Resultat": "Resultat", "a.Resultat": "Resultat",
"a.Schliessen": "a.Schliessen", "a.Rolle": "Rolle",
"a.Schliessen": "Schliessen",
"a.Selbst- und Fremdeinschätzungen": "Selbst- und Fremdeinschätzungen", "a.Selbst- und Fremdeinschätzungen": "Selbst- und Fremdeinschätzungen",
"a.Selbsteinschätzung": "Selbsteinschätzung", "a.Selbsteinschätzung": "Selbsteinschätzung",
"a.Selbsteinschätzung anschauen": "Selbsteinschätzung anschauen", "a.Selbsteinschätzung anschauen": "Selbsteinschätzung anschauen",
@ -255,16 +253,17 @@
"a.Selbsteinschätzungen geteilt": "Selbsteinschätzungen geteilt", "a.Selbsteinschätzungen geteilt": "Selbsteinschätzungen geteilt",
"a.So startest du mit diesem Lehrgang": "So startest du mit diesem Lehrgang", "a.So startest du mit diesem Lehrgang": "So startest du mit diesem Lehrgang",
"a.Standort": "Standort", "a.Standort": "Standort",
"a.Statistik": "a.Statistik", "a.Statistik": "Statistik",
"a.Statistik für alle Lernenden": "a.Statistik für alle Lernenden",
"a.Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.": "Stelle deinen Teilnehmern zusätzliche Inhalte zur Verfügung.", "a.Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.": "Stelle deinen Teilnehmern zusätzliche Inhalte zur Verfügung.",
"a.Strasse": "Strasse", "a.Strasse": "Strasse",
"a.Super, nun ist alles bereit. Du bist der Durchführung «{course}» zugewiesen und kannst mit dem Lehrgang starten.": "Super, nun ist alles bereit. Du bist der Durchführung «{{course}}» zugewiesen und kannst mit dem Lehrgang starten.", "a.Super, nun ist alles bereit. Du bist der Durchführung «{course}» zugewiesen und kannst mit dem Lehrgang starten.": "Super, nun ist alles bereit. Du bist der Durchführung «{{course}}» zugewiesen und kannst mit dem Lehrgang starten.",
"a.Teilnehmer": "Teilnehmer", "a.Teilnehmer": "Teilnehmer",
"a.Teilnehmer im 2024": "a.Teilnehmer im 2024", "a.Teilnehmer im": "Teilnehmer im",
"a.Teilnehmer nach Zulassungsprofilen im": "Teilnehmer nach Zulassungsprofilen im",
"a.Telefonnummer": "Telefonnummer", "a.Telefonnummer": "Telefonnummer",
"a.Telefonnummer hat das falsche Format": "a.Telefonnummer hat das falsche Format", "a.Telefonnummer hat das falsche Format": "Telefonnummer hat das falsche Format",
"a.Termin": "Termin", "a.Termin": "Termin",
"a.Termin nicht festgelegt": "Termin nich festgelegt",
"a.Termine": "Termine", "a.Termine": "Termine",
"a.Total {NUMBER} Antworten": "Total {NUMBER} Antworten", "a.Total {NUMBER} Antworten": "Total {NUMBER} Antworten",
"a.Trainer": "Trainer", "a.Trainer": "Trainer",
@ -280,7 +279,6 @@
"a.VorschauTeilnehmer": "Vorschau Teilnehmer", "a.VorschauTeilnehmer": "Vorschau Teilnehmer",
"a.Wegleitung üK": "Wegleitung üK", "a.Wegleitung üK": "Wegleitung üK",
"a.wegleitungUkUrl": "https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/KV/Wegleitung_ueK_240215_de_V2.pdf", "a.wegleitungUkUrl": "https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/KV/Wegleitung_ueK_240215_de_V2.pdf",
"a.Weiter zur Zahlung": "a.Weiter zur Zahlung",
"a.Wir haben per E-Mail eine Bestätigung an {email} geschickt.": "Wir haben per E-Mail eine Bestätigung an {email} geschickt.", "a.Wir haben per E-Mail eine Bestätigung an {email} geschickt.": "Wir haben per E-Mail eine Bestätigung an {email} geschickt.",
"a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst.": "Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst.", "a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst.": "Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst.",
"a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst. Du kannst ihn später jederzeit ändern.": "Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst. Du kannst ihn später jederzeit ändern.", "a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst. Du kannst ihn später jederzeit ändern.": "Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst. Du kannst ihn später jederzeit ändern.",
@ -291,7 +289,7 @@
"a.Zulassungsprofil": "Zulassungsprofil", "a.Zulassungsprofil": "Zulassungsprofil",
"a.Zulassungsprofil auswählen": "Zulassungsprofil auswählen", "a.Zulassungsprofil auswählen": "Zulassungsprofil auswählen",
"a.Zum Unterlagen-Upload": "Unterlagen hochladen", "a.Zum Unterlagen-Upload": "Unterlagen hochladen",
"a.Zurück": "a.Zurück", "a.Zurück": "Zurück",
"a.Zwischenstand": "Zwischenstand", "a.Zwischenstand": "Zwischenstand",
"a.{AVG} von {MAX}": "{AVG} von {MAX}", "a.{AVG} von {MAX}": "{AVG} von {MAX}",
"a.{NUMBER} Bestanden": "{NUMBER} Bestanden", "a.{NUMBER} Bestanden": "{NUMBER} Bestanden",
@ -306,9 +304,7 @@
"Alle": "Alle", "Alle": "Alle",
"Anwesenheit": "Anwesenheit", "Anwesenheit": "Anwesenheit",
"Anwesenheit bestätigen": "Anwesenheit bestätigen", "Anwesenheit bestätigen": "Anwesenheit bestätigen",
"Anwesenheit Präsenzkurse": "Anwesenheit Präsenzkurse",
"Anwesenheit prüfen": "Anwesenheit prüfen", "Anwesenheit prüfen": "Anwesenheit prüfen",
"Anwesenheitskontrolle Präsenzkurse": "Anwesenheitskontrolle Präsenzkurse",
"assignment.acceptConditionsDisclaimer": "Bedingungen akzeptieren und Ergebnisse abgeben", "assignment.acceptConditionsDisclaimer": "Bedingungen akzeptieren und Ergebnisse abgeben",
"assignment.assessmentDocumentDisclaimer": "Diese geleitete Fallarbeit wird auf Grund des folgenden Beurteilungsinstrument bewertet:", "assignment.assessmentDocumentDisclaimer": "Diese geleitete Fallarbeit wird auf Grund des folgenden Beurteilungsinstrument bewertet:",
"assignment.assessmentTitle": "Bewertung", "assignment.assessmentTitle": "Bewertung",
@ -379,7 +375,6 @@
"circlePage.gotQuestions": "Hast du Fragen?", "circlePage.gotQuestions": "Hast du Fragen?",
"circlePage.Im KompetenzNavi anschauen": "Im KompetenzNavi anzeigen", "circlePage.Im KompetenzNavi anschauen": "Im KompetenzNavi anzeigen",
"circlePage.learnMore": "Erfahre mehr dazu", "circlePage.learnMore": "Erfahre mehr dazu",
"Cockpit anschauen": "Cockpit anschauen",
"cockpit.all": "Alle", "cockpit.all": "Alle",
"cockpit.examsDone": "Abgelegte Prüfungen von Teilnehmer.", "cockpit.examsDone": "Abgelegte Prüfungen von Teilnehmer.",
"cockpit.feedbacksDone": "Abgeschickte Feedbacks von Teilnehmer.", "cockpit.feedbacksDone": "Abgeschickte Feedbacks von Teilnehmer.",
@ -411,7 +406,6 @@
"Der Preis für den Lehrgang «Versicherungsvermittler-/in VBV» beträgt CHF 300 exkl. MWSt.. Mit dem Kauf erhältst du Zugang zum Lernpfad und den Lernmedien.": "Nach der Bezahlung von 300 CHF exkl. MWSt. erhältst du Zugang für den gesamten Lehrgang (inkl. Prüfung).", "Der Preis für den Lehrgang «Versicherungsvermittler-/in VBV» beträgt CHF 300 exkl. MWSt.. Mit dem Kauf erhältst du Zugang zum Lernpfad und den Lernmedien.": "Nach der Bezahlung von 300 CHF exkl. MWSt. erhältst du Zugang für den gesamten Lehrgang (inkl. Prüfung).",
"dueDates.noDueDatesAvailable": "Keine Termine vorhanden", "dueDates.noDueDatesAvailable": "Keine Termine vorhanden",
"dueDates.showAllDueDates": "Alle Termine anzeigen", "dueDates.showAllDueDates": "Alle Termine anzeigen",
"Durchführung": "Durchführung",
"edoniqTest.checkboxTitle": "Bedingungen akzeptieren und Test durchführen", "edoniqTest.checkboxTitle": "Bedingungen akzeptieren und Test durchführen",
"edoniqTest.deadlineInPast": "Der Test kann nicht mehr durchgeführt werden, da das Abgabedatum abgelaufen ist.", "edoniqTest.deadlineInPast": "Der Test kann nicht mehr durchgeführt werden, da das Abgabedatum abgelaufen ist.",
"edoniqTest.qualifiesForExtendedTime": "Ich bestätige, dass ich Anrecht auf einen Test mit Nachteilsausgleich habe.", "edoniqTest.qualifiesForExtendedTime": "Ich bestätige, dass ich Anrecht auf einen Test mit Nachteilsausgleich habe.",
@ -421,7 +415,6 @@
"edoniqTest.testDescription": "Führe den folgenden Test durch. Der Test kann nur einmal durchgeführt werden und ist notenrelevant.", "edoniqTest.testDescription": "Führe den folgenden Test durch. Der Test kann nur einmal durchgeführt werden und ist notenrelevant.",
"edoniqTest.testSubmitted": "Du hast diesen Test abgeschlossen", "edoniqTest.testSubmitted": "Du hast diesen Test abgeschlossen",
"edoniqTest.viewResults": "Ergebnisse anschauen", "edoniqTest.viewResults": "Ergebnisse anschauen",
"Elemente zu erledigen": "Elemente zu erledigen",
"Ergebnisse anschauen": "Ergebnisse anschauen", "Ergebnisse anschauen": "Ergebnisse anschauen",
"Ergebnisse anzeigen": "Ergebnisse anzeigen", "Ergebnisse anzeigen": "Ergebnisse anzeigen",
"Feedback": "Feedback", "Feedback": "Feedback",
@ -471,7 +464,6 @@
"footer.dataProtectionText": "Datenschutzbestimmungen", "footer.dataProtectionText": "Datenschutzbestimmungen",
"footer.imprintLink": "https://www.vbv.ch/de/impressum", "footer.imprintLink": "https://www.vbv.ch/de/impressum",
"footer.imprintText": "Impressum", "footer.imprintText": "Impressum",
"Freigabetermin Bewertungen:": "Freigabetermin Bewertungen:",
"Füge dein Profilbild hinzu und ergänze die fehlenden Angaben.": "Füge dein Profilbild hinzu und ergänze die fehlenden Angaben.", "Füge dein Profilbild hinzu und ergänze die fehlenden Angaben.": "Füge dein Profilbild hinzu und ergänze die fehlenden Angaben.",
"Geleitete Fallarbeit": "Geleitete Fallarbeit", "Geleitete Fallarbeit": "Geleitete Fallarbeit",
"general.back": "Zurück", "general.back": "Zurück",
@ -479,18 +471,14 @@
"general.backToCircle": "zurück zum Circle", "general.backToCircle": "zurück zum Circle",
"general.backToLearningPath": "zurück zum Lernpfad", "general.backToLearningPath": "zurück zum Lernpfad",
"general.cancel": "Abbrechen", "general.cancel": "Abbrechen",
"general.certificate_many": "",
"general.certificate_one": "Zertifikat", "general.certificate_one": "Zertifikat",
"general.certificate_other": "Zertifikate", "general.certificate_other": "Zertifikate",
"general.circles": "Circles", "general.circles": "Circles",
"general.close": "Schliessen", "general.close": "Schliessen",
"general.exam_many": "",
"general.exam_one": "Prüfung", "general.exam_one": "Prüfung",
"general.exam_other": "Prüfungen", "general.exam_other": "Prüfungen",
"general.examResult_many": "",
"general.examResult_one": "Prüfungsresultat", "general.examResult_one": "Prüfungsresultat",
"general.examResult_other": "Prüfungsresultate", "general.examResult_other": "Prüfungsresultate",
"general.feedback_many": "",
"general.feedback_one": "Feedback", "general.feedback_one": "Feedback",
"general.feedback_other": "Feedbacks", "general.feedback_other": "Feedbacks",
"general.im circle x anschauen": "Im Circle «{{x}}» anzeigen", "general.im circle x anschauen": "Im Circle «{{x}}» anzeigen",
@ -501,7 +489,6 @@
"general.next": "Weiter", "general.next": "Weiter",
"general.nextStep": "Weiter geht's", "general.nextStep": "Weiter geht's",
"general.no": "Nein", "general.no": "Nein",
"general.notification_many": "",
"general.notification_one": "Benachrichtigung", "general.notification_one": "Benachrichtigung",
"general.notification_other": "Benachrichtigungen", "general.notification_other": "Benachrichtigungen",
"general.profileLink": "Details anzeigen", "general.profileLink": "Details anzeigen",
@ -514,21 +501,14 @@
"general.start": "Los geht's", "general.start": "Los geht's",
"general.submission": "Abgabe", "general.submission": "Abgabe",
"general.title": "myVBV", "general.title": "myVBV",
"general.transferTask_many": "",
"general.transferTask_one": "Transferauftrag", "general.transferTask_one": "Transferauftrag",
"general.transferTask_other": "Transferaufträge", "general.transferTask_other": "Transferaufträge",
"general.yes": "Ja", "general.yes": "Ja",
"Generation": "Generation",
"Hast du Fragen?": "Hast du Fragen?", "Hast du Fragen?": "Hast du Fragen?",
"Hier überprüfst und bestätigst du die Anwesenheit deiner Teilnehmenden.": "Hier überprüfst und bestätigst du die Anwesenheit deiner Teilnehmenden.", "Hier überprüfst und bestätigst du die Anwesenheit deiner Teilnehmenden.": "Hier überprüfst und bestätigst du die Anwesenheit deiner Teilnehmenden.",
"Ich will die Anwesenheit der untenstehenden Personen definitiv bestätigen.": "Ich will die Anwesenheit der untenstehenden Personen definitiv bestätigen.", "Ich will die Anwesenheit der untenstehenden Personen definitiv bestätigen.": "Ich will die Anwesenheit der untenstehenden Personen definitiv bestätigen.",
"Jahr": "Jahr",
"Keine Auftragsdetails verfügbar.": "Keine Auftragsdetails verfügbar.",
"Kompetenznachweise": "Kompetenznachweise", "Kompetenznachweise": "Kompetenznachweise",
"Kompetenzprofil": "Kompetenzprofil",
"Kosten im": "Kosten im", "Kosten im": "Kosten im",
"Kosten in": "Kosten in",
"Kosten in 2024": "Kosten in 2024",
"language.de": "Deutsch", "language.de": "Deutsch",
"language.fr": "Français", "language.fr": "Français",
"language.it": "Italiano", "language.it": "Italiano",
@ -540,7 +520,6 @@
"learningContentTypes.feedback": "Feedback", "learningContentTypes.feedback": "Feedback",
"learningContentTypes.knowledgeAssessment": "Test", "learningContentTypes.knowledgeAssessment": "Test",
"learningContentTypes.learningModule": "Lernmodul", "learningContentTypes.learningModule": "Lernmodul",
"learningContentTypes.mandatory_casework": "learningContentTypes.mandatory_casework",
"learningContentTypes.placeholder": "In Umsetzung", "learningContentTypes.placeholder": "In Umsetzung",
"learningContentTypes.praxisAssignment": "Auftrag", "learningContentTypes.praxisAssignment": "Auftrag",
"learningContentTypes.prepAssignment": "Vorbereitungsauftrag", "learningContentTypes.prepAssignment": "Vorbereitungsauftrag",
@ -558,9 +537,6 @@
"learningPathPage.showListView": "Listenansicht anzeigen", "learningPathPage.showListView": "Listenansicht anzeigen",
"learningPathPage.topics": "Themen:", "learningPathPage.topics": "Themen:",
"learningPathPage.welcomeBack": "Willkommen zurück in deinem Lehrgang:", "learningPathPage.welcomeBack": "Willkommen zurück in deinem Lehrgang:",
"Lehrgang": "Lehrgang",
"Lernbegleitung einladen": "Lernbegleitung einladen",
"Lernpfad kaufen": "",
"login.demoLogin": "Demo Login", "login.demoLogin": "Demo Login",
"login.guidelineFile": "Registrierung_myVBV.pdf", "login.guidelineFile": "Registrierung_myVBV.pdf",
"login.guidelineText": "Erfahre wie du dich als Lernende/r registrieren kannst", "login.guidelineText": "Erfahre wie du dich als Lernende/r registrieren kannst",
@ -572,40 +548,31 @@
"mainNavigation.logout": "Abmelden", "mainNavigation.logout": "Abmelden",
"mainNavigation.profile": "Profil", "mainNavigation.profile": "Profil",
"mediaLibrary.handlungsfelder.description": "Finde alle Ressourcen der Handlungsfelder wie Lernmedien, Links und andere nützliche Informationen.", "mediaLibrary.handlungsfelder.description": "Finde alle Ressourcen der Handlungsfelder wie Lernmedien, Links und andere nützliche Informationen.",
"mediaLibrary.handlungsfelder.title_many": "",
"mediaLibrary.handlungsfelder.title_one": "Handlungsfeld", "mediaLibrary.handlungsfelder.title_one": "Handlungsfeld",
"mediaLibrary.handlungsfelder.title_other": "Handlungsfelder", "mediaLibrary.handlungsfelder.title_other": "Handlungsfelder",
"mediaLibrary.learningMedia.description": "Finde eine vollständige Liste der Bücher und anderen Medien, auf die im Kurs verwiesen wird.", "mediaLibrary.learningMedia.description": "Finde eine vollständige Liste der Bücher und anderen Medien, auf die im Kurs verwiesen wird.",
"mediaLibrary.learningMedia.titel": "Lernmedien", "mediaLibrary.learningMedia.titel": "Lernmedien",
"mediaLibrary.show": "Mediathek anzeigen", "mediaLibrary.show": "Mediathek anzeigen",
"mediaLibrary.title": "Mediathek", "mediaLibrary.title": "Mediathek",
"Meine Lernbegleiter": "Meine Lernbegleiter",
"Meine Praxisbildner": "Meine Praxisbildner", "Meine Praxisbildner": "Meine Praxisbildner",
"Member": "Teilnehmer", "Member": "Teilnehmer",
"MentorUK": "Praxisbildner/Praxisbildnerin", "MentorUK": "Praxisbildner/Praxisbildnerin",
"MentorVV": "Lernbegleitung", "MentorVV": "Lernbegleitung",
"messages.sendMessage": "Nachricht schreiben", "messages.sendMessage": "Nachricht schreiben",
"MS Teams öffnen": "MS Teams öffnen", "MS Teams öffnen": "MS Teams öffnen",
"Nach der Bezahlung von 300 CHF exkl. MWSt. erhältst du Zugang für den gesamten Lehrgang (inkl. Prüfung).": "Nach der Bezahlung von 300 CHF exkl. MWSt. erhältst du Zugang für den gesamten Lehrgang (inkl. Prüfung).",
"Neuen Praxisbildner einladen": "Neuen Praxisbildner einladen", "Neuen Praxisbildner einladen": "Neuen Praxisbildner einladen",
"Nicht bestanden": "Nicht bestanden", "Nicht bestanden": "Nicht bestanden",
"notifications.load_more": "Mehr laden", "notifications.load_more": "Mehr laden",
"notifications.no_notifications": "Du hast derzeit keine Benachrichtigungen", "notifications.no_notifications": "Du hast derzeit keine Benachrichtigungen",
"Nächste Termine": "Nächste Termine", "Nächste Termine": "Nächste Termine",
"Passwort": "Passwort", "Passwort": "Passwort",
"Personen": "Personen",
"profile.": "profile.",
"profile.all": "Allbranche", "profile.all": "Allbranche",
"profile.krankenzusatzversicherung": "Krankenzusatz", "profile.krankenzusatzversicherung": "Krankenzusatz",
"profile.leben": "Leben", "profile.leben": "Leben",
"profile.nichtleben": "Nichtleben", "profile.nichtleben": "Nichtleben",
"profile.null": "profile.null",
"Präsenzkurs": "Präsenzkurs",
"receivedEvaluation.no": "Das musst du nochmals anschauen", "receivedEvaluation.no": "Das musst du nochmals anschauen",
"receivedEvaluation.yes": "Ja, du kannst das", "receivedEvaluation.yes": "Ja, du kannst das",
"Reflexion": "Reflexion", "Reflexion": "Reflexion",
"Region": "Region",
"Rolle": "Rolle",
"Sehr unzufrieden": "Sehr unzufrieden", "Sehr unzufrieden": "Sehr unzufrieden",
"Sehr zufrieden": "Sehr zufrieden", "Sehr zufrieden": "Sehr zufrieden",
"selfEvaluation.instruction.0": "Überprüfe, ob du in der Lernheinheit", "selfEvaluation.instruction.0": "Überprüfe, ob du in der Lernheinheit",
@ -631,13 +598,6 @@
"start.vvDescription": "Der Lernpfad und die Lernmedien, welche dich auf die Prüfung «Versicherungsvermittler/-in VBV» vorbereiten.", "start.vvDescription": "Der Lernpfad und die Lernmedien, welche dich auf die Prüfung «Versicherungsvermittler/-in VBV» vorbereiten.",
"Status anschauen": "Status anschauen", "Status anschauen": "Status anschauen",
"Supervisor": "Regionenleiter", "Supervisor": "Regionenleiter",
"Teilnehmer": "Teilnehmer",
"Teilnehmer im": "Teilnehmer im",
"Teilnehmer im 2024": "Teilnehmer im 2024",
"Teilnehmer nach Zulassungsprofilen": "Teilnehmer nach Zulassungsprofilen",
"Teilnehmer nach Zulassungsprofilen im": "Teilnehmer nach Zulassungsprofilen im",
"Termin nicht festgelegt": "",
"TODO: Nächste Termine": "TODO: Nächste Termine",
"Trainer": "Trainer", "Trainer": "Trainer",
"Trainerunterlagen": "Trainerunterlagen", "Trainerunterlagen": "Trainerunterlagen",
"TrainingResponsible": "Ausbildungsverantwortlicher", "TrainingResponsible": "Ausbildungsverantwortlicher",
@ -647,7 +607,6 @@
"uk.dashboard.allClear": "Alles klar?", "uk.dashboard.allClear": "Alles klar?",
"uk.dashboard.nextSteps": "Als lernende Person wirst in den kommenden Tagen einem üK-Lehrgang zugewiesen. Dann\nerscheint hier Deine personalisierte Lehrgangs-Box mit den weiteren Informationen.", "uk.dashboard.nextSteps": "Als lernende Person wirst in den kommenden Tagen einem üK-Lehrgang zugewiesen. Dann\nerscheint hier Deine personalisierte Lehrgangs-Box mit den weiteren Informationen.",
"uk.dashboard.welcome": "Es hat alles geklappt, du bist nun auf der digitalen Lernumgebung des Berufsbildungsverbands derVersicherungswirtschaft (VBV) registriert!", "uk.dashboard.welcome": "Es hat alles geklappt, du bist nun auf der digitalen Lernumgebung des Berufsbildungsverbands derVersicherungswirtschaft (VBV) registriert!",
"UnknownRoleKey": "UnknownRoleKey",
"unzufrieden": "unzufrieden", "unzufrieden": "unzufrieden",
"Vorbedingung": "Vorbedingung", "Vorbedingung": "Vorbedingung",
"Vorbereitungsaufgabe": "Vorbereitungsauftrag", "Vorbereitungsaufgabe": "Vorbereitungsauftrag",
@ -665,6 +624,5 @@
"Zu erledigen": "Zu erledigen", "Zu erledigen": "Zu erledigen",
"zufrieden": "zufrieden", "zufrieden": "zufrieden",
"Zulassungsprofil": "Zulassungsprofil", "Zulassungsprofil": "Zulassungsprofil",
"Zur Zeit sind keine Termine vorhanden": "Zur Zeit sind keine Termine vorhanden", "Zur Zeit sind keine Termine vorhanden": "Zur Zeit sind keine Termine vorhanden"
"Überbetriebliche Kurse": "Überbetriebliche Kurse"
} }

View File

@ -1,11 +1,9 @@
{ {
"20%": "", "20%": "20%",
"40%": "", "40%": "40%",
"60%": "", "60%": "60%",
"80%": "", "80%": "80%",
"100%": "", "100%": "100%",
"a.": "",
"a.a.AlleCircle": "",
"a.Abbrechen": "Annuler", "a.Abbrechen": "Annuler",
"a.Abgabetermin": "Date de remise", "a.Abgabetermin": "Date de remise",
"a.Abgezogene Punkte": "Points déduits", "a.Abgezogene Punkte": "Points déduits",
@ -16,13 +14,11 @@
"a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen.": "Actuellement, tu n'as invité aucune personne comme tuteur.", "a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen.": "Actuellement, tu n'as invité aucune personne comme tuteur.",
"a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen. Lade jetzt jemanden ein.": "Actuellement, tu n'as invité aucune personne comme tuteur. Invite quelqu'un maintenant.", "a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen. Lade jetzt jemanden ein.": "Actuellement, tu n'as invité aucune personne comme tuteur. Invite quelqu'un maintenant.",
"a.Aktuell hast du noch keine Person als Praxisbildner eingeladen.": "Actuellement, tu n'as pas encore invité de personne comme formateur/-trice pratique.", "a.Aktuell hast du noch keine Person als Praxisbildner eingeladen.": "Actuellement, tu n'as pas encore invité de personne comme formateur/-trice pratique.",
"a.Aktuell hast du noch keine Person als Praxisbildner eingeladen. Lade jetzt jemanden ein.": "", "a.Aktuell hast du noch keine Person als Praxisbildner eingeladen. Lade jetzt jemanden ein.": "Actuellement, tu n'as invité personne en tant que formateur pratique. Invite quelqu'un maintenant.",
"a.Aktueller Lehrgang": "Cours en cours", "a.Aktueller Lehrgang": "Cours en cours",
"a.Allbranche": "Allbranche", "a.Allbranche": "Allbranche",
"a.Alle": "Tout", "a.Alle": "Tout",
"a.Alle aufklappen": "Tout déplier", "a.Alle aufklappen": "Tout déplier",
"a.Alle Lehrgang": "",
"a.Alle Lehrgänge": "",
"a.Alle Lehrgänge anzeigen": "Afficher tous les cours", "a.Alle Lehrgänge anzeigen": "Afficher tous les cours",
"a.Alle Personen anzeigen": "Afficher toutes les personnes", "a.Alle Personen anzeigen": "Afficher toutes les personnes",
"a.Alle Termine anzeigen": "Afficher tous les dates", "a.Alle Termine anzeigen": "Afficher tous les dates",
@ -30,8 +26,6 @@
"a.AlleCircle": "Circle: Tous", "a.AlleCircle": "Circle: Tous",
"a.AlleDurchführungen": "Opérations: Tous", "a.AlleDurchführungen": "Opérations: Tous",
"a.AlleGenerationen": "Générations : Toutes", "a.AlleGenerationen": "Générations : Toutes",
"a.AlleKreise": "",
"a.AlleRegionen": "",
"a.AlleTermine": "Rendez-vous", "a.AlleTermine": "Rendez-vous",
"a.AlleTypen": "Tous les types", "a.AlleTypen": "Tous les types",
"a.Allgemeine Zufriedenheit": "Satisfaction générale", "a.Allgemeine Zufriedenheit": "Satisfaction générale",
@ -39,6 +33,8 @@
"a.An Durchführung teilnehmen": "Participer à la session", "a.An Durchführung teilnehmen": "Participer à la session",
"a.Anmelden": "Connexion", "a.Anmelden": "Connexion",
"a.Anwesenheit": "Présence", "a.Anwesenheit": "Présence",
"a.Anwesenheit Präsenzkurse": "Présence aux cours",
"a.Anwesenheitskontrolle Präsenzkurse": "Contrôle de présence aux cours",
"a.Arbeiten": "Travaux", "a.Arbeiten": "Travaux",
"a.assignment.evaluationFeedbackDescriptionText": "Valide ton feedback pour qu'il puisse être partagé aux participants.", "a.assignment.evaluationFeedbackDescriptionText": "Valide ton feedback pour qu'il puisse être partagé aux participants.",
"a.assignment.evaluationInstrumentDescriptionTextFeedback": "Veuillez soutenir {{name}} et donner votre avis sur la mission.", "a.assignment.evaluationInstrumentDescriptionTextFeedback": "Veuillez soutenir {{name}} et donner votre avis sur la mission.",
@ -53,9 +49,9 @@
"a.Bewertung": "Évaluation", "a.Bewertung": "Évaluation",
"a.Bewertung abschliessen": "Évaluation complète", "a.Bewertung abschliessen": "Évaluation complète",
"a.Bewertung ansehen": "Voir l'avis", "a.Bewertung ansehen": "Voir l'avis",
"a.Bewertung bearbeiten": "", "a.Bewertung bearbeiten": "Modifier l'évaluation",
"a.Bewertung bearbeitet": "", "a.Bewertung bearbeitet": "Évaluation modifiée",
"a.Bewertung erneut bearbeitet": "", "a.Bewertung erneut bearbeitet": "Évaluation à nouveau modifiée",
"a.Bewertung fortsetzen": "Continuer l'évaluation", "a.Bewertung fortsetzen": "Continuer l'évaluation",
"a.Bewertung Freigabe": "Libération de l'évaluation", "a.Bewertung Freigabe": "Libération de l'évaluation",
"a.Bewertung freigeben": "Libérer l'évaluation", "a.Bewertung freigeben": "Libérer l'évaluation",
@ -106,7 +102,8 @@
"a.E-Mail Adresse": "Adresse e-mail", "a.E-Mail Adresse": "Adresse e-mail",
"a.Einladung": "Invitation", "a.Einladung": "Invitation",
"a.Einladung abschicken": "Envoyer l'invitation", "a.Einladung abschicken": "Envoyer l'invitation",
"a.Email": "", "a.Elemente zu erledigen": "Eléments à faire",
"a.Email": "Email",
"a.Entfernen": "Supprimer", "a.Entfernen": "Supprimer",
"a.Erfahrungsnote üK": "Note dexpérience CI", "a.Erfahrungsnote üK": "Note dexpérience CI",
"a.Ergebnis bewerten": "Évaluer le résultat", "a.Ergebnis bewerten": "Évaluer le résultat",
@ -116,10 +113,10 @@
"a.Ergebnisse bewerten": "Évaluer les résultats", "a.Ergebnisse bewerten": "Évaluer les résultats",
"a.Ergebnisse teilen": "Partager les résultats", "a.Ergebnisse teilen": "Partager les résultats",
"a.Erneut bearbeiten": "Modifier à nouveau", "a.Erneut bearbeiten": "Modifier à nouveau",
"a.Experte": "", "a.Experte": "Expert",
"a.Feedback abschliessen": "Terminer le feedback", "a.Feedback abschliessen": "Terminer le feedback",
"a.Feedback ansehen": "Voir le feedback", "a.Feedback ansehen": "Voir le feedback",
"a.Feedback erneut bearbeitet": "", "a.Feedback erneut bearbeitet": "Feedback modifié à nouveau",
"a.Feedback fortsetzen": "Poursuivre le feedback", "a.Feedback fortsetzen": "Poursuivre le feedback",
"a.Feedback Freigabe": "Validation du feedback", "a.Feedback Freigabe": "Validation du feedback",
"a.Feedback freigeben": "Valider le feedback", "a.Feedback freigeben": "Valider le feedback",
@ -134,6 +131,8 @@
"a.Firmenanschrift": "Adresse de l'entreprise", "a.Firmenanschrift": "Adresse de l'entreprise",
"a.Firmenname": "Nom de l'entreprise", "a.Firmenname": "Nom de l'entreprise",
"a.Franzosisch": "Français", "a.Franzosisch": "Français",
"a.Freigabetermin Bewertung": "Date de remise d'évaluation",
"a.Freigabetermin Bewertungen": "Date de remise des évaluations",
"a.Fremdeinschätzung anzeigen": "Valutazione esterna", "a.Fremdeinschätzung anzeigen": "Valutazione esterna",
"a.Fremdeinschätzung freigeben": "Autoriser l'évaluation externe", "a.Fremdeinschätzung freigeben": "Autoriser l'évaluation externe",
"a.Fremdeinschätzung von FEEDBACK_PROVIDER_NAME": "Évaluation externe de {{FEEDBACK_PROVIDER_NAME}}", "a.Fremdeinschätzung von FEEDBACK_PROVIDER_NAME": "Évaluation externe de {{FEEDBACK_PROVIDER_NAME}}",
@ -156,18 +155,19 @@
"a.Hast du Fragen? Schau dir unsere FAQ an oder kontaktiere uns": "Vous avez des questions ? Consultez notre {faq} ou contactez-nous", "a.Hast du Fragen? Schau dir unsere FAQ an oder kontaktiere uns": "Vous avez des questions ? Consultez notre {faq} ou contactez-nous",
"a.Hast du schon ein Konto?": "Avez-vous déjà un compte?", "a.Hast du schon ein Konto?": "Avez-vous déjà un compte?",
"a.Hausnummmer": "Numéro de maison", "a.Hausnummmer": "Numéro de maison",
"a.Hier kannst du ausschliesslich mit einer Kreditkarte bezahlen.": "",
"a.Hier kannst du Personen einladen, damit sie deine Lernbegleitung werden. Zudem siehst du jederzeit eine Übersicht aller Personen, die du bereits als Lernbegleitung hinzugefügt hast.": "Ici, tu peux inviter des personnes pour devenir ton tuteur. De plus, tu peux toujours voir un aperçu de toutes les personnes que tu as déjà ajoutées comme tuteurs.", "a.Hier kannst du Personen einladen, damit sie deine Lernbegleitung werden. Zudem siehst du jederzeit eine Übersicht aller Personen, die du bereits als Lernbegleitung hinzugefügt hast.": "Ici, tu peux inviter des personnes pour devenir ton tuteur. De plus, tu peux toujours voir un aperçu de toutes les personnes que tu as déjà ajoutées comme tuteurs.",
"a.Höchstpunktzahl": "Score maximum", "a.Höchstpunktzahl": "Score maximum",
"a.Ich kann das": "Je maîtrise cette question", "a.Ich kann das": "Je maîtrise cette question",
"a.Italienisch": "Italien", "a.Italienisch": "Italien",
"a.Ja, NAME kann das.": "Oui, {{NAME}} peut le faire", "a.Ja, NAME kann das.": "Oui, {{NAME}} peut le faire",
"a.Jahr": "Année",
"a.Jetzt mit Lehrgang starten": "Commencez maintenant le cours", "a.Jetzt mit Lehrgang starten": "Commencez maintenant le cours",
"a.Kann FULLNAME das?": "Peut {{FULLNAME}} faire cela?", "a.Kann FULLNAME das?": "Peut {{FULLNAME}} faire cela?",
"a.Kein Circle verfügbar oder ausgewählt.": "Aucun Circle disponible ou sélectionné.", "a.Kein Circle verfügbar oder ausgewählt.": "Aucun Circle disponible ou sélectionné.",
"a.Keine Angabe": "Aucune indication", "a.Keine Angabe": "Aucune indication",
"a.Kommentar": "", "a.Keine Auftragsdetails verfügbar.": "Aucun détail de la commande n'est disponible.",
"a.Kommentar erfassen": "", "a.Kommentar": "Commentaire",
"a.Kommentar erfassen": "Saisir un commentaire",
"a.Kompetenznachweis": "Contrôle de compétences", "a.Kompetenznachweis": "Contrôle de compétences",
"a.Kompetenznachweis-Elemente": "Éléments de contrôle", "a.Kompetenznachweis-Elemente": "Éléments de contrôle",
"a.Kompetenznachweise": "Contrôles de compétences", "a.Kompetenznachweise": "Contrôles de compétences",
@ -175,7 +175,6 @@
"a.Konto erstellen": "Créer un compte", "a.Konto erstellen": "Créer un compte",
"a.Kosten": "Coûts", "a.Kosten": "Coûts",
"a.Kosten aller Jahre ansehen": "Voir les coûts de toutes les années", "a.Kosten aller Jahre ansehen": "Voir les coûts de toutes les années",
"a.Kosten in 2024": "",
"a.Krankenzusatzversicherung": "Assurance maladie complémentaire", "a.Krankenzusatzversicherung": "Assurance maladie complémentaire",
"a.Krankenzusatzversicherungen": "Assurances maladie complémentaires", "a.Krankenzusatzversicherungen": "Assurances maladie complémentaires",
"a.Lade ein Profilbild hoch, damit dich andere Personen auf den ersten Blick erkennen.": "Téléchargez une photo de profil pour que les autres puissent vous reconnaître au premier coup d'œil.", "a.Lade ein Profilbild hoch, damit dich andere Personen auf den ersten Blick erkennen.": "Téléchargez une photo de profil pour que les autres puissent vous reconnaître au premier coup d'œil.",
@ -186,7 +185,7 @@
"a.Lehrgang kaufen": "Acheter le cours", "a.Lehrgang kaufen": "Acheter le cours",
"a.Leistungsziel": "Objectif de valutazione", "a.Leistungsziel": "Objectif de valutazione",
"a.Leistungsziele": "Objectif évaluateur", "a.Leistungsziele": "Objectif évaluateur",
"a.Lernbegleiter": "", "a.Lernbegleiter": "Tuteur",
"a.Lernbegleitung": "Tuteur", "a.Lernbegleitung": "Tuteur",
"a.Lernbegleitung auswählen": "Tutorat sélectionner", "a.Lernbegleitung auswählen": "Tutorat sélectionner",
"a.Lernbegleitung einladen": "Inviter un tuteur", "a.Lernbegleitung einladen": "Inviter un tuteur",
@ -212,8 +211,7 @@
"a.NUMBER Elemente abgeschlossen": "{NUMBER} éléments terminés", "a.NUMBER Elemente abgeschlossen": "{NUMBER} éléments terminés",
"a.NUMBER Präsenztage abgeschlossen": "{NUMBER} jours de présence complétés", "a.NUMBER Präsenztage abgeschlossen": "{NUMBER} jours de présence complétés",
"a.NUMBER Teilnehmer anwesend": "{NUMBER} participants présents", "a.NUMBER Teilnehmer anwesend": "{NUMBER} participants présents",
"a.Nächste Termine": "", "a.Nächste Termine": "Prochaines dates",
"a.OldCircle": "",
"a.Optionale Anwesenheit": "Présence facultative", "a.Optionale Anwesenheit": "Présence facultative",
"a.Ort": "Ville", "a.Ort": "Ville",
"a.Personen": "Personnes", "a.Personen": "Personnes",
@ -229,20 +227,20 @@
"a.Profil bearbeiten": "Modifier le profil", "a.Profil bearbeiten": "Modifier le profil",
"a.Profil ergänzen": "Compléter le profil", "a.Profil ergänzen": "Compléter le profil",
"a.Profilbild": "Photo de profil", "a.Profilbild": "Photo de profil",
"a.Präsenzkurs": "Cours de présence",
"a.Präsenztag": "Jour de présence", "a.Präsenztag": "Jour de présence",
"a.Punkte": "points", "a.Punkte": "points",
"a.Punkte aus Bewertung": "Points de l'évaluation", "a.Punkte aus Bewertung": "Points de l'évaluation",
"a.PunkteVonDaniel": "",
"a.PunkteVonDaniel123": "",
"a.Rechnung": "Facture", "a.Rechnung": "Facture",
"a.RechnungPaymentMethodDescription": "",
"a.Rechnungsadresse": "Adresse de facturation", "a.Rechnungsadresse": "Adresse de facturation",
"a.Rechnungsadresse hinzufügen": "Ajouter une adresse de facturation", "a.Rechnungsadresse hinzufügen": "Ajouter une adresse de facturation",
"a.Rechnungsadresse von {organisation}": "Adresse de facturation de {{organisation}}", "a.Rechnungsadresse von {organisation}": "Adresse de facturation de {{organisation}}",
"a.Rechnungsadresse von {organisation} hinzufügen": "Ajouter l'adresse de facturation de {{organisation}}", "a.Rechnungsadresse von {organisation} hinzufügen": "Ajouter l'adresse de facturation de {{organisation}}",
"a.Regionenleiter": "", "a.Region": "Région",
"a.Regionenleiter": "Responsable régional",
"a.Resultat": "Résultat", "a.Resultat": "Résultat",
"a.Schliessen": "", "a.Rolle": "Rouleau",
"a.Schliessen": "Fermer",
"a.Selbst- und Fremdeinschätzungen": "Auto-évaluations et évaluations externes", "a.Selbst- und Fremdeinschätzungen": "Auto-évaluations et évaluations externes",
"a.Selbsteinschätzung": "Auto-évaluation", "a.Selbsteinschätzung": "Auto-évaluation",
"a.Selbsteinschätzung anschauen": "Voir l'auto-évaluation", "a.Selbsteinschätzung anschauen": "Voir l'auto-évaluation",
@ -255,16 +253,17 @@
"a.Selbsteinschätzungen geteilt": "Auto-évaluations partagées", "a.Selbsteinschätzungen geteilt": "Auto-évaluations partagées",
"a.So startest du mit diesem Lehrgang": "C'est ainsi que tu commences ce parcours d'apprentissage", "a.So startest du mit diesem Lehrgang": "C'est ainsi que tu commences ce parcours d'apprentissage",
"a.Standort": "Emplacement", "a.Standort": "Emplacement",
"a.Statistik": "", "a.Statistik": "Statistiques",
"a.Statistik für alle Lernenden": "",
"a.Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.": "Proposez à vos participants du contenu supplémentaire", "a.Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.": "Proposez à vos participants du contenu supplémentaire",
"a.Strasse": "Rue", "a.Strasse": "Rue",
"a.Super, nun ist alles bereit. Du bist der Durchführung «{course}» zugewiesen und kannst mit dem Lehrgang starten.": "Super, tout est prêt maintenant. Vous êtes assigné à la session «{{course}}» et pouvez commencer le cours.", "a.Super, nun ist alles bereit. Du bist der Durchführung «{course}» zugewiesen und kannst mit dem Lehrgang starten.": "Super, tout est prêt maintenant. Vous êtes assigné à la session «{{course}}» et pouvez commencer le cours.",
"a.Teilnehmer": "Participants", "a.Teilnehmer": "Participants",
"a.Teilnehmer im 2024": "", "a.Teilnehmer im": "Participants en",
"a.Teilnehmer nach Zulassungsprofilen im": "Participants par profil d'admission en",
"a.Telefonnummer": "Numéro de téléphone", "a.Telefonnummer": "Numéro de téléphone",
"a.Telefonnummer hat das falsche Format": "", "a.Telefonnummer hat das falsche Format": "Le numéro de téléphone n'est pas au bon format",
"a.Termin": "Date", "a.Termin": "Date",
"a.Termin nicht festgelegt": "Date non fixée",
"a.Termine": "Dates", "a.Termine": "Dates",
"a.Total {NUMBER} Antworten": "Total {NUMBER} réponses", "a.Total {NUMBER} Antworten": "Total {NUMBER} réponses",
"a.Trainer": "Formateur / Formatrice", "a.Trainer": "Formateur / Formatrice",
@ -280,7 +279,6 @@
"a.VorschauTeilnehmer": "Vue des participants", "a.VorschauTeilnehmer": "Vue des participants",
"a.Wegleitung üK": "Directives CI", "a.Wegleitung üK": "Directives CI",
"a.wegleitungUkUrl": "https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/KV/Wegleitung_ueK_240215_fr_V2.pdf", "a.wegleitungUkUrl": "https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/KV/Wegleitung_ueK_240215_fr_V2.pdf",
"a.Weiter zur Zahlung": "",
"a.Wir haben per E-Mail eine Bestätigung an {email} geschickt.": "Nous avons envoyé une confirmation par e-mail à {email}.", "a.Wir haben per E-Mail eine Bestätigung an {email} geschickt.": "Nous avons envoyé une confirmation par e-mail à {email}.",
"a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst.": "Choisis un profil d'admission pour que tu puisses commencer ta formation au bon endroit.", "a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst.": "Choisis un profil d'admission pour que tu puisses commencer ta formation au bon endroit.",
"a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst. Du kannst ihn später jederzeit ändern.": "Sélectionne un profil d'admission pour que tu puisses commencer ta formation au bon endroit. Tu peux le modifier à tout moment par la suite.", "a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst. Du kannst ihn später jederzeit ändern.": "Sélectionne un profil d'admission pour que tu puisses commencer ta formation au bon endroit. Tu peux le modifier à tout moment par la suite.",
@ -291,7 +289,7 @@
"a.Zulassungsprofil": "Profil d'admission", "a.Zulassungsprofil": "Profil d'admission",
"a.Zulassungsprofil auswählen": "Choisir le profil d'admission", "a.Zulassungsprofil auswählen": "Choisir le profil d'admission",
"a.Zum Unterlagen-Upload": "Télécharger des documents", "a.Zum Unterlagen-Upload": "Télécharger des documents",
"a.Zurück": "", "a.Zurück": "Retour",
"a.Zwischenstand": "Point intermédiaire", "a.Zwischenstand": "Point intermédiaire",
"a.{AVG} von {MAX}": "{AVG} de {MAX}", "a.{AVG} von {MAX}": "{AVG} de {MAX}",
"a.{NUMBER} Bestanden": "{NUMBER} réussi", "a.{NUMBER} Bestanden": "{NUMBER} réussi",
@ -306,9 +304,7 @@
"Alle": "Tout", "Alle": "Tout",
"Anwesenheit": "Présence", "Anwesenheit": "Présence",
"Anwesenheit bestätigen": "Confirmer la présence", "Anwesenheit bestätigen": "Confirmer la présence",
"Anwesenheit Präsenzkurse": "Présence aux cours",
"Anwesenheit prüfen": "Vérifier la présence", "Anwesenheit prüfen": "Vérifier la présence",
"Anwesenheitskontrolle Präsenzkurse": "Contrôle de présence aux cours",
"assignment.acceptConditionsDisclaimer": "Accepter les conditions et remettre les résultats", "assignment.acceptConditionsDisclaimer": "Accepter les conditions et remettre les résultats",
"assignment.assessmentDocumentDisclaimer": "Cette étude de cas dirigée est évaluée par loutil suivant :", "assignment.assessmentDocumentDisclaimer": "Cette étude de cas dirigée est évaluée par loutil suivant :",
"assignment.assessmentTitle": "Évaluation", "assignment.assessmentTitle": "Évaluation",
@ -343,12 +339,12 @@
"assignment.x von y Arbeiten abgeschlossen": "{{x}} sur {{y}} épreuves terminées", "assignment.x von y Arbeiten abgeschlossen": "{{x}} sur {{y}} épreuves terminées",
"assignment.x von y Kompetenznachweis-Elementen abgeschlossen": "{{x}} sur {{y}} éléments de contrôle de compétences terminés", "assignment.x von y Kompetenznachweis-Elementen abgeschlossen": "{{x}} sur {{y}} éléments de contrôle de compétences terminés",
"Aufgrund von Problemen beim Zahlungsanbieter ist ein Erwerb der myVBV-Lizenz derzeit nur mit TWINT möglich. Wir arbeiten mit Hochdruck an der Lösung des Problems. ": "En raison de problèmes avec le fournisseur de paiement, l'acquisition de la licence myAVA n'est actuellement possible qu'avec TWINT. Nous travaillons d'arrache-pied pour résoudre le problème. ", "Aufgrund von Problemen beim Zahlungsanbieter ist ein Erwerb der myVBV-Lizenz derzeit nur mit TWINT möglich. Wir arbeiten mit Hochdruck an der Lösung des Problems. ": "En raison de problèmes avec le fournisseur de paiement, l'acquisition de la licence myAVA n'est actuellement possible qu'avec TWINT. Nous travaillons d'arrache-pied pour résoudre le problème. ",
"Ausbildungsverantwortlicher": "", "Ausbildungsverantwortlicher": "Responsable de formation",
"Benutzername": "Nom dutilisateur", "Benutzername": "Nom dutilisateur",
"Berufsbildner": "", "Berufsbildner": "Formateur professionnel",
"Bestanden": "", "Bestanden": "Réussi",
"Bewertung von x y": "Évaluation de {{x}} {{y}}", "Bewertung von x y": "Évaluation de {{x}} {{y}}",
"Circle": "", "Circle": "Cercle",
"circlePage.circleContentBoxTitle": "Ce que tu vas apprendre dans ce Circle", "circlePage.circleContentBoxTitle": "Ce que tu vas apprendre dans ce Circle",
"circlePage.contactExpertButton": "Contacter le formateur / la formatrice", "circlePage.contactExpertButton": "Contacter le formateur / la formatrice",
"circlePage.contactExpertDescription": "Échanger avec le formateur / la formatrice si tu as des questions sur le Circle {{circleName}}.", "circlePage.contactExpertDescription": "Échanger avec le formateur / la formatrice si tu as des questions sur le Circle {{circleName}}.",
@ -379,7 +375,6 @@
"circlePage.gotQuestions": "As-tu des questions?", "circlePage.gotQuestions": "As-tu des questions?",
"circlePage.Im KompetenzNavi anschauen": "Afficher dans la « NaviCompétence »", "circlePage.Im KompetenzNavi anschauen": "Afficher dans la « NaviCompétence »",
"circlePage.learnMore": "Pour en savoir plus", "circlePage.learnMore": "Pour en savoir plus",
"Cockpit anschauen": "Montrer le Cockpit",
"cockpit.all": "Tous", "cockpit.all": "Tous",
"cockpit.examsDone": "Examens remis par les participants.", "cockpit.examsDone": "Examens remis par les participants.",
"cockpit.feedbacksDone": "Retours envoyés par les participants.", "cockpit.feedbacksDone": "Retours envoyés par les participants.",
@ -411,7 +406,6 @@
"Der Preis für den Lehrgang «Versicherungsvermittler-/in VBV» beträgt CHF 300 exkl. MWSt.. Mit dem Kauf erhältst du Zugang zum Lernpfad und den Lernmedien.": "Le prix de la formation \"Intermédiaire d'assurance/intermédiaire AFA\" est de 300 CHF hors TVA. L'achat te donne accès au parcours d'apprentissage et aux médias d'apprentissage.", "Der Preis für den Lehrgang «Versicherungsvermittler-/in VBV» beträgt CHF 300 exkl. MWSt.. Mit dem Kauf erhältst du Zugang zum Lernpfad und den Lernmedien.": "Le prix de la formation \"Intermédiaire d'assurance/intermédiaire AFA\" est de 300 CHF hors TVA. L'achat te donne accès au parcours d'apprentissage et aux médias d'apprentissage.",
"dueDates.noDueDatesAvailable": "Pas de dates disponibles", "dueDates.noDueDatesAvailable": "Pas de dates disponibles",
"dueDates.showAllDueDates": "Afficher tous les dates", "dueDates.showAllDueDates": "Afficher tous les dates",
"Durchführung": "Volée",
"edoniqTest.checkboxTitle": "Accepter les conditions et effectuer le test", "edoniqTest.checkboxTitle": "Accepter les conditions et effectuer le test",
"edoniqTest.deadlineInPast": "Le test ne peut plus être effectué car la date limite de soumission est dépassée.", "edoniqTest.deadlineInPast": "Le test ne peut plus être effectué car la date limite de soumission est dépassée.",
"edoniqTest.qualifiesForExtendedTime": "Je confirme que j'ai droit à un test avec compensation des inégalités.", "edoniqTest.qualifiesForExtendedTime": "Je confirme que j'ai droit à un test avec compensation des inégalités.",
@ -421,7 +415,6 @@
"edoniqTest.testDescription": "Effectuez le test suivant. Le test ne peut être effectué qu'une seule fois et est pertinent pour la note.", "edoniqTest.testDescription": "Effectuez le test suivant. Le test ne peut être effectué qu'une seule fois et est pertinent pour la note.",
"edoniqTest.testSubmitted": "Vous avez terminé ce test", "edoniqTest.testSubmitted": "Vous avez terminé ce test",
"edoniqTest.viewResults": "Voir les résultats", "edoniqTest.viewResults": "Voir les résultats",
"Elemente zu erledigen": "Eléments à faire",
"Ergebnisse anschauen": "Consulter les résultats", "Ergebnisse anschauen": "Consulter les résultats",
"Ergebnisse anzeigen": "Afficher les résultats", "Ergebnisse anzeigen": "Afficher les résultats",
"Feedback": "Feedback", "Feedback": "Feedback",
@ -471,7 +464,6 @@
"footer.dataProtectionText": "Dispositions sur la protection des données", "footer.dataProtectionText": "Dispositions sur la protection des données",
"footer.imprintLink": "https://www.vbv.ch/fr/impressum", "footer.imprintLink": "https://www.vbv.ch/fr/impressum",
"footer.imprintText": "Impressum", "footer.imprintText": "Impressum",
"Freigabetermin Bewertungen:": "Date de remise des évaluations :",
"Füge dein Profilbild hinzu und ergänze die fehlenden Angaben.": "Ajoute ta photo de profil et complète les informations manquantes.", "Füge dein Profilbild hinzu und ergänze die fehlenden Angaben.": "Ajoute ta photo de profil et complète les informations manquantes.",
"Geleitete Fallarbeit": "Étude de cas dirigée", "Geleitete Fallarbeit": "Étude de cas dirigée",
"general.back": "Retour", "general.back": "Retour",
@ -479,18 +471,14 @@
"general.backToCircle": "Revenir au Circle", "general.backToCircle": "Revenir au Circle",
"general.backToLearningPath": "Revenir au programme de formation", "general.backToLearningPath": "Revenir au programme de formation",
"general.cancel": "Annuler", "general.cancel": "Annuler",
"general.certificate_many": "Certificats",
"general.certificate_one": "Certificat", "general.certificate_one": "Certificat",
"general.certificate_other": "Certificats", "general.certificate_other": "Certificats",
"general.circles": "Circles", "general.circles": "Circles",
"general.close": "Fermer", "general.close": "Fermer",
"general.exam_many": "Examens",
"general.exam_one": "Examen", "general.exam_one": "Examen",
"general.exam_other": "Examens", "general.exam_other": "Examens",
"general.examResult_many": "Résultats de lexamen",
"general.examResult_one": "Résultat de lexamen", "general.examResult_one": "Résultat de lexamen",
"general.examResult_other": "Résultats de lexamen", "general.examResult_other": "Résultats de lexamen",
"general.feedback_many": "Feed-backs",
"general.feedback_one": "Feed-back", "general.feedback_one": "Feed-back",
"general.feedback_other": "Feed-backs", "general.feedback_other": "Feed-backs",
"general.im circle x anschauen": "Regarder dans le Circle «{{x}}»", "general.im circle x anschauen": "Regarder dans le Circle «{{x}}»",
@ -501,7 +489,6 @@
"general.next": "Continuer", "general.next": "Continuer",
"general.nextStep": "Cela continue", "general.nextStep": "Cela continue",
"general.no": "Non", "general.no": "Non",
"general.notification_many": "Notifications",
"general.notification_one": "Notification", "general.notification_one": "Notification",
"general.notification_other": "Notifications", "general.notification_other": "Notifications",
"general.profileLink": "Détails", "general.profileLink": "Détails",
@ -514,21 +501,14 @@
"general.start": "Cest parti !", "general.start": "Cest parti !",
"general.submission": "Remise", "general.submission": "Remise",
"general.title": "myAFA", "general.title": "myAFA",
"general.transferTask_many": "Exercices dapplication",
"general.transferTask_one": "Exercice dapplication", "general.transferTask_one": "Exercice dapplication",
"general.transferTask_other": "Exercices dapplication", "general.transferTask_other": "Exercices dapplication",
"general.yes": "Oui", "general.yes": "Oui",
"Generation": "",
"Hast du Fragen?": "As-tu des questions?", "Hast du Fragen?": "As-tu des questions?",
"Hier überprüfst und bestätigst du die Anwesenheit deiner Teilnehmenden.": "Ici, vous vérifiez et confirmez la présence de vos participants.", "Hier überprüfst und bestätigst du die Anwesenheit deiner Teilnehmenden.": "Ici, vous vérifiez et confirmez la présence de vos participants.",
"Ich will die Anwesenheit der untenstehenden Personen definitiv bestätigen.": "Je souhaite confirmer définitivement la présence des personnes ci-dessous.", "Ich will die Anwesenheit der untenstehenden Personen definitiv bestätigen.": "Je souhaite confirmer définitivement la présence des personnes ci-dessous.",
"Jahr": "", "Kompetenznachweise": "Éléments de contrôle",
"Keine Auftragsdetails verfügbar.": "",
"Kompetenznachweise": "",
"Kompetenzprofil": "",
"Kosten im": "Coûts en", "Kosten im": "Coûts en",
"Kosten in": "",
"Kosten in 2024": "",
"language.de": "Deutsch", "language.de": "Deutsch",
"language.fr": "Français", "language.fr": "Français",
"language.it": "Italiano", "language.it": "Italiano",
@ -540,7 +520,6 @@
"learningContentTypes.feedback": "Feedback", "learningContentTypes.feedback": "Feedback",
"learningContentTypes.knowledgeAssessment": "Test", "learningContentTypes.knowledgeAssessment": "Test",
"learningContentTypes.learningModule": "Module de formation", "learningContentTypes.learningModule": "Module de formation",
"learningContentTypes.mandatory_casework": "",
"learningContentTypes.placeholder": "en cours de réalisation", "learningContentTypes.placeholder": "en cours de réalisation",
"learningContentTypes.praxisAssignment": "Mandat", "learningContentTypes.praxisAssignment": "Mandat",
"learningContentTypes.prepAssignment": "Mandat de préparation", "learningContentTypes.prepAssignment": "Mandat de préparation",
@ -558,9 +537,6 @@
"learningPathPage.showListView": "Afficher la liste", "learningPathPage.showListView": "Afficher la liste",
"learningPathPage.topics": "Thèmes :", "learningPathPage.topics": "Thèmes :",
"learningPathPage.welcomeBack": "Cela fait plaisir de te revoir dans ta formation :", "learningPathPage.welcomeBack": "Cela fait plaisir de te revoir dans ta formation :",
"Lehrgang": "Formation",
"Lernbegleitung einladen": "",
"Lernpfad kaufen": "",
"login.demoLogin": "Connexion Demo", "login.demoLogin": "Connexion Demo",
"login.guidelineFile": "Inscription_myAFA.pdf", "login.guidelineFile": "Inscription_myAFA.pdf",
"login.guidelineText": "Découvre comment t'inscrire en tant qu'apprenant-e", "login.guidelineText": "Découvre comment t'inscrire en tant qu'apprenant-e",
@ -572,40 +548,31 @@
"mainNavigation.logout": "Se déconnecter", "mainNavigation.logout": "Se déconnecter",
"mainNavigation.profile": "Profil", "mainNavigation.profile": "Profil",
"mediaLibrary.handlungsfelder.description": "Trouve toutes les ressources des champs daction, comme les outils didactiques, les liens et autres informations utiles.", "mediaLibrary.handlungsfelder.description": "Trouve toutes les ressources des champs daction, comme les outils didactiques, les liens et autres informations utiles.",
"mediaLibrary.handlungsfelder.title_many": "Champs daction",
"mediaLibrary.handlungsfelder.title_one": "Champ daction", "mediaLibrary.handlungsfelder.title_one": "Champ daction",
"mediaLibrary.handlungsfelder.title_other": "Champs daction", "mediaLibrary.handlungsfelder.title_other": "Champs daction",
"mediaLibrary.learningMedia.description": "Trouve une liste complète des livres, manuels et autres outils qui ont été mentionnés pendant le cours.", "mediaLibrary.learningMedia.description": "Trouve une liste complète des livres, manuels et autres outils qui ont été mentionnés pendant le cours.",
"mediaLibrary.learningMedia.titel": "Outils didactiques ", "mediaLibrary.learningMedia.titel": "Outils didactiques ",
"mediaLibrary.show": "Voir la médiathèque", "mediaLibrary.show": "Voir la médiathèque",
"mediaLibrary.title": "Médiathèque", "mediaLibrary.title": "Médiathèque",
"Meine Lernbegleiter": "",
"Meine Praxisbildner": "Mes formateurs pratiques", "Meine Praxisbildner": "Mes formateurs pratiques",
"Member": "Participants", "Member": "Participants",
"MentorUK": "Formateur/-trice pratique", "MentorUK": "Formateur/-trice pratique",
"MentorVV": "Tuteur", "MentorVV": "Tuteur",
"messages.sendMessage": "Écrire un message", "messages.sendMessage": "Écrire un message",
"MS Teams öffnen": "Ouvrir MS Teams ", "MS Teams öffnen": "Ouvrir MS Teams ",
"Nach der Bezahlung von 300 CHF exkl. MWSt. erhältst du Zugang für den gesamten Lehrgang (inkl. Prüfung).": "",
"Neuen Praxisbildner einladen": "Inviter un nouveau formateur pratique", "Neuen Praxisbildner einladen": "Inviter un nouveau formateur pratique",
"Nicht bestanden": "", "Nicht bestanden": "Échoué",
"notifications.load_more": "Télécharger davantage", "notifications.load_more": "Télécharger davantage",
"notifications.no_notifications": "Tu nas reçu aucune notification pour le moment", "notifications.no_notifications": "Tu nas reçu aucune notification pour le moment",
"Nächste Termine": "Prochaines dates", "Nächste Termine": "Prochaines dates",
"Passwort": "Mot de passe", "Passwort": "Mot de passe",
"Personen": "",
"profile.": "",
"profile.all": "Toutes branches", "profile.all": "Toutes branches",
"profile.krankenzusatzversicherung": "Maladie complémentaire", "profile.krankenzusatzversicherung": "Maladie complémentaire",
"profile.leben": "Vie", "profile.leben": "Vie",
"profile.nichtleben": "Non-vie", "profile.nichtleben": "Non-vie",
"profile.null": "",
"Präsenzkurs": "",
"receivedEvaluation.no": "Il faut que tu regardes cela encore une fois de plus près", "receivedEvaluation.no": "Il faut que tu regardes cela encore une fois de plus près",
"receivedEvaluation.yes": "Oui, tu peux le faire", "receivedEvaluation.yes": "Oui, tu peux le faire",
"Reflexion": "", "Reflexion": "Réflexion",
"Region": "",
"Rolle": "",
"Sehr unzufrieden": "très insatisfait", "Sehr unzufrieden": "très insatisfait",
"Sehr zufrieden": "très satisfait", "Sehr zufrieden": "très satisfait",
"selfEvaluation.instruction.0": "Überprüfe, ob du in der Lernheinheit", "selfEvaluation.instruction.0": "Überprüfe, ob du in der Lernheinheit",
@ -631,13 +598,6 @@
"start.vvDescription": "Le parcours d'apprentissage et les médias d'apprentissage qui te préparent à l'examen d' «intermédiare d'assurance AFA».", "start.vvDescription": "Le parcours d'apprentissage et les médias d'apprentissage qui te préparent à l'examen d' «intermédiare d'assurance AFA».",
"Status anschauen": "Consulter le statut", "Status anschauen": "Consulter le statut",
"Supervisor": "Responsable CI", "Supervisor": "Responsable CI",
"Teilnehmer": "Participants",
"Teilnehmer im": "Participants en",
"Teilnehmer im 2024": "",
"Teilnehmer nach Zulassungsprofilen": "Participants par profil d'admission",
"Teilnehmer nach Zulassungsprofilen im": "",
"Termin nicht festgelegt": "",
"TODO: Nächste Termine": "TODO: prochaines dates",
"Trainer": "Formateur / Formatrice", "Trainer": "Formateur / Formatrice",
"Trainerunterlagen": "Documents du formateur / de la formatrice", "Trainerunterlagen": "Documents du formateur / de la formatrice",
"TrainingResponsible": "Responsable de la formation", "TrainingResponsible": "Responsable de la formation",
@ -647,7 +607,6 @@
"uk.dashboard.allClear": "Tout est clair ?", "uk.dashboard.allClear": "Tout est clair ?",
"uk.dashboard.nextSteps": "En tant que personne en formation, tu seras attribué(e) à un cours interentreprise dans les prochains jours. Puis tu verras apparaître ici ta boîte de formation personnalisée avec les informations complémentaires.", "uk.dashboard.nextSteps": "En tant que personne en formation, tu seras attribué(e) à un cours interentreprise dans les prochains jours. Puis tu verras apparaître ici ta boîte de formation personnalisée avec les informations complémentaires.",
"uk.dashboard.welcome": "Tout s'est bien passé, tu es maintenant inscrit/e à l'environnement d'apprentissage numérique de l'Association pour la formation professionnelle en assurance (AFA) !", "uk.dashboard.welcome": "Tout s'est bien passé, tu es maintenant inscrit/e à l'environnement d'apprentissage numérique de l'Association pour la formation professionnelle en assurance (AFA) !",
"UnknownRoleKey": "",
"unzufrieden": "insatisfait", "unzufrieden": "insatisfait",
"Vorbedingung": "Condition préalable", "Vorbedingung": "Condition préalable",
"Vorbereitungsaufgabe": "Mandat de préparation", "Vorbereitungsaufgabe": "Mandat de préparation",
@ -665,6 +624,5 @@
"Zu erledigen": "", "Zu erledigen": "",
"zufrieden": "satisfait", "zufrieden": "satisfait",
"Zulassungsprofil": "", "Zulassungsprofil": "",
"Zur Zeit sind keine Termine vorhanden": "Aucune réunion nest prévue pour le moment", "Zur Zeit sind keine Termine vorhanden": "Aucune réunion nest prévue pour le moment"
"Überbetriebliche Kurse": ""
} }

View File

@ -1,11 +1,9 @@
{ {
"20%": "", "20%": "20%",
"40%": "", "40%": "40%",
"60%": "", "60%": "60%",
"80%": "", "80%": "80%",
"100%": "", "100%": "100%",
"a.": "",
"a.a.AlleCircle": "",
"a.Abbrechen": "Annullare", "a.Abbrechen": "Annullare",
"a.Abgabetermin": "Termine di consegna", "a.Abgabetermin": "Termine di consegna",
"a.Abgezogene Punkte": "Punti detratti", "a.Abgezogene Punkte": "Punti detratti",
@ -16,13 +14,11 @@
"a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen.": "Al momento non hai invitato nessuna persona come tutor.", "a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen.": "Al momento non hai invitato nessuna persona come tutor.",
"a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen. Lade jetzt jemanden ein.": "Al momento non hai invitato nessuna persona come tutor. Invita qualcuno ora.", "a.Aktuell hast du noch keine Person als Lernbegleitung eingeladen. Lade jetzt jemanden ein.": "Al momento non hai invitato nessuna persona come tutor. Invita qualcuno ora.",
"a.Aktuell hast du noch keine Person als Praxisbildner eingeladen.": "Attualmente non hai ancora invitato nessuna persona come formatore/-trice pratico/a.", "a.Aktuell hast du noch keine Person als Praxisbildner eingeladen.": "Attualmente non hai ancora invitato nessuna persona come formatore/-trice pratico/a.",
"a.Aktuell hast du noch keine Person als Praxisbildner eingeladen. Lade jetzt jemanden ein.": "", "a.Aktuell hast du noch keine Person als Praxisbildner eingeladen. Lade jetzt jemanden ein.": "Attualmente non hai invitato nessuno come formatore pratico. Invita qualcuno ora.",
"a.Aktueller Lehrgang": "Corso in corso", "a.Aktueller Lehrgang": "Corso in corso",
"a.Allbranche": "Tutti i settori", "a.Allbranche": "Tutti i settori",
"a.Alle": "Tutto", "a.Alle": "Tutto",
"a.Alle aufklappen": "Apri tutto", "a.Alle aufklappen": "Apri tutto",
"a.Alle Lehrgang": "",
"a.Alle Lehrgänge": "",
"a.Alle Lehrgänge anzeigen": "Mostra tutti i corsi", "a.Alle Lehrgänge anzeigen": "Mostra tutti i corsi",
"a.Alle Personen anzeigen": "Mostra tutte le persone", "a.Alle Personen anzeigen": "Mostra tutte le persone",
"a.Alle Termine anzeigen": "Mostrare tutte le date", "a.Alle Termine anzeigen": "Mostrare tutte le date",
@ -30,8 +26,6 @@
"a.AlleCircle": "Circle: Tutti", "a.AlleCircle": "Circle: Tutti",
"a.AlleDurchführungen": "Svolgimenti: Tutti", "a.AlleDurchführungen": "Svolgimenti: Tutti",
"a.AlleGenerationen": "Generazioni: Tutte", "a.AlleGenerationen": "Generazioni: Tutte",
"a.AlleKreise": "",
"a.AlleRegionen": "",
"a.AlleTermine": "Appuntamenti", "a.AlleTermine": "Appuntamenti",
"a.AlleTypen": "Tutti i tipi", "a.AlleTypen": "Tutti i tipi",
"a.Allgemeine Zufriedenheit": "Soddisfazione generale ", "a.Allgemeine Zufriedenheit": "Soddisfazione generale ",
@ -39,6 +33,8 @@
"a.An Durchführung teilnehmen": "Partecipare alla sessione", "a.An Durchführung teilnehmen": "Partecipare alla sessione",
"a.Anmelden": "Login", "a.Anmelden": "Login",
"a.Anwesenheit": "Presenza", "a.Anwesenheit": "Presenza",
"a.Anwesenheit Präsenzkurse": "Presenza ai corsi",
"a.Anwesenheitskontrolle Präsenzkurse": "Controllo di presenza ai corsi",
"a.Arbeiten": "Lavori", "a.Arbeiten": "Lavori",
"a.assignment.evaluationFeedbackDescriptionText": "Pubblica il tuo feedback in modo che possa essere condiviso con il/la partecipante.", "a.assignment.evaluationFeedbackDescriptionText": "Pubblica il tuo feedback in modo che possa essere condiviso con il/la partecipante.",
"a.assignment.evaluationInstrumentDescriptionTextFeedback": "Si prega di sostenere {{name}} e di fornire un feedback sul compito.", "a.assignment.evaluationInstrumentDescriptionTextFeedback": "Si prega di sostenere {{name}} e di fornire un feedback sul compito.",
@ -53,9 +49,9 @@
"a.Bewertung": "Valutazione", "a.Bewertung": "Valutazione",
"a.Bewertung abschliessen": "Valutazione completa", "a.Bewertung abschliessen": "Valutazione completa",
"a.Bewertung ansehen": "Visualizza recensione", "a.Bewertung ansehen": "Visualizza recensione",
"a.Bewertung bearbeiten": "", "a.Bewertung bearbeiten": "Modificare la valutazione",
"a.Bewertung bearbeitet": "", "a.Bewertung bearbeitet": "Valutazione modificata",
"a.Bewertung erneut bearbeitet": "", "a.Bewertung erneut bearbeitet": "Valutazione modificata nuovamente",
"a.Bewertung fortsetzen": "Continua la valutazione", "a.Bewertung fortsetzen": "Continua la valutazione",
"a.Bewertung Freigabe": "Rilascio della valutazione", "a.Bewertung Freigabe": "Rilascio della valutazione",
"a.Bewertung freigeben": "Rilasciare la valutazione", "a.Bewertung freigeben": "Rilasciare la valutazione",
@ -106,7 +102,8 @@
"a.E-Mail Adresse": "Indirizzo e-mail", "a.E-Mail Adresse": "Indirizzo e-mail",
"a.Einladung": "Invito", "a.Einladung": "Invito",
"a.Einladung abschicken": "Inviare l'invito", "a.Einladung abschicken": "Inviare l'invito",
"a.Email": "", "a.Elemente zu erledigen": "Elementi da completare",
"a.Email": "E-mail",
"a.Entfernen": "Rimuovere", "a.Entfernen": "Rimuovere",
"a.Erfahrungsnote üK": "Nota relativa allinsegnamento professionale CI", "a.Erfahrungsnote üK": "Nota relativa allinsegnamento professionale CI",
"a.Ergebnis bewerten": "Valutare il risultato", "a.Ergebnis bewerten": "Valutare il risultato",
@ -116,10 +113,10 @@
"a.Ergebnisse bewerten": "Valutare i risultati", "a.Ergebnisse bewerten": "Valutare i risultati",
"a.Ergebnisse teilen": "Condividere i risultati", "a.Ergebnisse teilen": "Condividere i risultati",
"a.Erneut bearbeiten": "Modifica di nuovo", "a.Erneut bearbeiten": "Modifica di nuovo",
"a.Experte": "", "a.Experte": "Esperto",
"a.Feedback abschliessen": "Completa il feedback", "a.Feedback abschliessen": "Completa il feedback",
"a.Feedback ansehen": "Visualizza il feedback", "a.Feedback ansehen": "Visualizza il feedback",
"a.Feedback erneut bearbeitet": "", "a.Feedback erneut bearbeitet": "Feedback modificato nuovamente",
"a.Feedback fortsetzen": "Prosegui il feedback", "a.Feedback fortsetzen": "Prosegui il feedback",
"a.Feedback Freigabe": "Pubblicazione del feedback", "a.Feedback Freigabe": "Pubblicazione del feedback",
"a.Feedback freigeben": "Pubblica il feedback", "a.Feedback freigeben": "Pubblica il feedback",
@ -134,6 +131,8 @@
"a.Firmenanschrift": "Indirizzo aziendale", "a.Firmenanschrift": "Indirizzo aziendale",
"a.Firmenname": "Nome dell'azienda", "a.Firmenname": "Nome dell'azienda",
"a.Franzosisch": "Francese", "a.Franzosisch": "Francese",
"a.Freigabetermin Bewertung": "Termine di pubblicazione della valutazione",
"a.Freigabetermin Bewertungen": "Termine di pubblicazione delle valutazioni",
"a.Fremdeinschätzung anzeigen": "Évaluation externe", "a.Fremdeinschätzung anzeigen": "Évaluation externe",
"a.Fremdeinschätzung freigeben": "Rilasciare la valutazione esterna", "a.Fremdeinschätzung freigeben": "Rilasciare la valutazione esterna",
"a.Fremdeinschätzung von FEEDBACK_PROVIDER_NAME": "Valutazione esterna di {{FEEDBACK_PROVIDER_NAME}}", "a.Fremdeinschätzung von FEEDBACK_PROVIDER_NAME": "Valutazione esterna di {{FEEDBACK_PROVIDER_NAME}}",
@ -156,18 +155,19 @@
"a.Hast du Fragen? Schau dir unsere FAQ an oder kontaktiere uns": "Hai domande? Consulta le nostre {faq} o contattaci", "a.Hast du Fragen? Schau dir unsere FAQ an oder kontaktiere uns": "Hai domande? Consulta le nostre {faq} o contattaci",
"a.Hast du schon ein Konto?": "Hai già un account?", "a.Hast du schon ein Konto?": "Hai già un account?",
"a.Hausnummmer": "Numero civico", "a.Hausnummmer": "Numero civico",
"a.Hier kannst du ausschliesslich mit einer Kreditkarte bezahlen.": "",
"a.Hier kannst du Personen einladen, damit sie deine Lernbegleitung werden. Zudem siehst du jederzeit eine Übersicht aller Personen, die du bereits als Lernbegleitung hinzugefügt hast.": "Qui puoi invitare persone a diventare il tuo tutor. Inoltre, puoi sempre vedere una panoramica di tutte le persone che hai già aggiunto come tutor.", "a.Hier kannst du Personen einladen, damit sie deine Lernbegleitung werden. Zudem siehst du jederzeit eine Übersicht aller Personen, die du bereits als Lernbegleitung hinzugefügt hast.": "Qui puoi invitare persone a diventare il tuo tutor. Inoltre, puoi sempre vedere una panoramica di tutte le persone che hai già aggiunto come tutor.",
"a.Höchstpunktzahl": "Punteggio massimo", "a.Höchstpunktzahl": "Punteggio massimo",
"a.Ich kann das": "Ho compreso tutto", "a.Ich kann das": "Ho compreso tutto",
"a.Italienisch": "Italiano", "a.Italienisch": "Italiano",
"a.Ja, NAME kann das.": "Sì, {{NAME}} può farlo", "a.Ja, NAME kann das.": "Sì, {{NAME}} può farlo",
"a.Jahr": "Anno",
"a.Jetzt mit Lehrgang starten": "Inizia ora il corso", "a.Jetzt mit Lehrgang starten": "Inizia ora il corso",
"a.Kann FULLNAME das?": "{{FULLNAME}} può farlo?", "a.Kann FULLNAME das?": "{{FULLNAME}} può farlo?",
"a.Kein Circle verfügbar oder ausgewählt.": "Nessun Circle disponibile o selezionato.", "a.Kein Circle verfügbar oder ausgewählt.": "Nessun Circle disponibile o selezionato.",
"a.Keine Angabe": "Nessuna indicazione", "a.Keine Angabe": "Nessuna indicazione",
"a.Kommentar": "", "a.Keine Auftragsdetails verfügbar.": "Non sono disponibili i dettagli dell'ordine.",
"a.Kommentar erfassen": "", "a.Kommentar": "Commento",
"a.Kommentar erfassen": "Inserisci il commento",
"a.Kompetenznachweis": "Controllo delle competenze", "a.Kompetenznachweis": "Controllo delle competenze",
"a.Kompetenznachweis-Elemente": "Elementi del controllo", "a.Kompetenznachweis-Elemente": "Elementi del controllo",
"a.Kompetenznachweise": "Controlli delle competenze", "a.Kompetenznachweise": "Controlli delle competenze",
@ -175,7 +175,6 @@
"a.Konto erstellen": "Crea un account", "a.Konto erstellen": "Crea un account",
"a.Kosten": "Costi", "a.Kosten": "Costi",
"a.Kosten aller Jahre ansehen": "Visualizza i costi per tutti gli anni", "a.Kosten aller Jahre ansehen": "Visualizza i costi per tutti gli anni",
"a.Kosten in 2024": "",
"a.Krankenzusatzversicherung": "Assicurazione sanitaria integrativa", "a.Krankenzusatzversicherung": "Assicurazione sanitaria integrativa",
"a.Krankenzusatzversicherungen": "Assicurazione sanitaria integrativa", "a.Krankenzusatzversicherungen": "Assicurazione sanitaria integrativa",
"a.Lade ein Profilbild hoch, damit dich andere Personen auf den ersten Blick erkennen.": "Carica un'immagine del profilo così che altre persone possano riconoscerti a prima vista.", "a.Lade ein Profilbild hoch, damit dich andere Personen auf den ersten Blick erkennen.": "Carica un'immagine del profilo così che altre persone possano riconoscerti a prima vista.",
@ -186,7 +185,7 @@
"a.Lehrgang kaufen": "Acquistare il corso", "a.Lehrgang kaufen": "Acquistare il corso",
"a.Leistungsziel": "Obiettivo di valutazione", "a.Leistungsziel": "Obiettivo di valutazione",
"a.Leistungsziele": "Obiettivo di valutazione", "a.Leistungsziele": "Obiettivo di valutazione",
"a.Lernbegleiter": "", "a.Lernbegleiter": "Tutor",
"a.Lernbegleitung": "Tutor", "a.Lernbegleitung": "Tutor",
"a.Lernbegleitung auswählen": "Tutoraggio selezionare", "a.Lernbegleitung auswählen": "Tutoraggio selezionare",
"a.Lernbegleitung einladen": "Invitare un tutor", "a.Lernbegleitung einladen": "Invitare un tutor",
@ -212,8 +211,7 @@
"a.NUMBER Elemente abgeschlossen": "{NUMBER} elementi completati", "a.NUMBER Elemente abgeschlossen": "{NUMBER} elementi completati",
"a.NUMBER Präsenztage abgeschlossen": "{NUMBER} giorni di presenza completati", "a.NUMBER Präsenztage abgeschlossen": "{NUMBER} giorni di presenza completati",
"a.NUMBER Teilnehmer anwesend": "{NUMBER} partecipanti presenti", "a.NUMBER Teilnehmer anwesend": "{NUMBER} partecipanti presenti",
"a.Nächste Termine": "", "a.Nächste Termine": "Prossime date",
"a.OldCircle": "",
"a.Optionale Anwesenheit": "Presenza opzionale", "a.Optionale Anwesenheit": "Presenza opzionale",
"a.Ort": "Città", "a.Ort": "Città",
"a.Personen": "Persone", "a.Personen": "Persone",
@ -229,20 +227,20 @@
"a.Profil bearbeiten": "Modificare il profilo", "a.Profil bearbeiten": "Modificare il profilo",
"a.Profil ergänzen": "Completare il profilo", "a.Profil ergänzen": "Completare il profilo",
"a.Profilbild": "Immagine del profilo", "a.Profilbild": "Immagine del profilo",
"a.Präsenzkurs": "Corso di presenza",
"a.Präsenztag": "Giorno di presenza", "a.Präsenztag": "Giorno di presenza",
"a.Punkte": "punti", "a.Punkte": "punti",
"a.Punkte aus Bewertung": "Punti della valutazione", "a.Punkte aus Bewertung": "Punti della valutazione",
"a.PunkteVonDaniel": "",
"a.PunkteVonDaniel123": "",
"a.Rechnung": "Fattura", "a.Rechnung": "Fattura",
"a.RechnungPaymentMethodDescription": "",
"a.Rechnungsadresse": "Indirizzo di fatturazione", "a.Rechnungsadresse": "Indirizzo di fatturazione",
"a.Rechnungsadresse hinzufügen": "Aggiungere un indirizzo di fatturazione", "a.Rechnungsadresse hinzufügen": "Aggiungere un indirizzo di fatturazione",
"a.Rechnungsadresse von {organisation}": "Indirizzo di fatturazione di {{organisation}}", "a.Rechnungsadresse von {organisation}": "Indirizzo di fatturazione di {{organisation}}",
"a.Rechnungsadresse von {organisation} hinzufügen": "Aggiungere l'indirizzo di fatturazione di {{organisation}}", "a.Rechnungsadresse von {organisation} hinzufügen": "Aggiungere l'indirizzo di fatturazione di {{organisation}}",
"a.Regionenleiter": "", "a.Region": "Regione",
"a.Regionenleiter": "Responsabile regionale",
"a.Resultat": "Risultato", "a.Resultat": "Risultato",
"a.Schliessen": "", "a.Rolle": "Ruolo",
"a.Schliessen": "Chiudere",
"a.Selbst- und Fremdeinschätzungen": "Autovalutazioni e valutazioni esterne", "a.Selbst- und Fremdeinschätzungen": "Autovalutazioni e valutazioni esterne",
"a.Selbsteinschätzung": "Auto-valutazione", "a.Selbsteinschätzung": "Auto-valutazione",
"a.Selbsteinschätzung anschauen": "Guarda l'auto-valutazione", "a.Selbsteinschätzung anschauen": "Guarda l'auto-valutazione",
@ -255,16 +253,17 @@
"a.Selbsteinschätzungen geteilt": "Auto-valutazioni condivise", "a.Selbsteinschätzungen geteilt": "Auto-valutazioni condivise",
"a.So startest du mit diesem Lehrgang": "Ecco come iniziare questo percorso di apprendimento", "a.So startest du mit diesem Lehrgang": "Ecco come iniziare questo percorso di apprendimento",
"a.Standort": "Posizione", "a.Standort": "Posizione",
"a.Statistik": "", "a.Statistik": "Statistiche",
"a.Statistik für alle Lernenden": "",
"a.Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.": "Fornisci ai tuoi partecipanti contenuti aggiuntivi.", "a.Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.": "Fornisci ai tuoi partecipanti contenuti aggiuntivi.",
"a.Strasse": "Strada", "a.Strasse": "Strada",
"a.Super, nun ist alles bereit. Du bist der Durchführung «{course}» zugewiesen und kannst mit dem Lehrgang starten.": "Ottimo, ora è tutto pronto. Sei assegnato alla sessione «{{course}}» e puoi iniziare il corso.", "a.Super, nun ist alles bereit. Du bist der Durchführung «{course}» zugewiesen und kannst mit dem Lehrgang starten.": "Ottimo, ora è tutto pronto. Sei assegnato alla sessione «{{course}}» e puoi iniziare il corso.",
"a.Teilnehmer": "Partecipanti", "a.Teilnehmer": "Partecipanti",
"a.Teilnehmer im 2024": "", "a.Teilnehmer im": "I partecipanti al",
"a.Teilnehmer nach Zulassungsprofilen im": "Partecipanti per profilo di ammissione nel",
"a.Telefonnummer": "Numero di telefono", "a.Telefonnummer": "Numero di telefono",
"a.Telefonnummer hat das falsche Format": "", "a.Telefonnummer hat das falsche Format": "Il numero di telefono ha un formato sbagliato",
"a.Termin": "Data", "a.Termin": "Data",
"a.Termin nicht festgelegt": "Data non fissata",
"a.Termine": "Date", "a.Termine": "Date",
"a.Total {NUMBER} Antworten": "Totale {NUMBER} risposte", "a.Total {NUMBER} Antworten": "Totale {NUMBER} risposte",
"a.Trainer": "Trainer", "a.Trainer": "Trainer",
@ -280,7 +279,6 @@
"a.VorschauTeilnehmer": "Vue des participants", "a.VorschauTeilnehmer": "Vue des participants",
"a.Wegleitung üK": "Guida CI", "a.Wegleitung üK": "Guida CI",
"a.wegleitungUkUrl": "https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/KV/Wegleitung_ueK_240215_it_V2.pdf", "a.wegleitungUkUrl": "https://www.vbv.ch/fileadmin/vbv/Dokumente/Bildungsabschluesse/KV/Wegleitung_ueK_240215_it_V2.pdf",
"a.Weiter zur Zahlung": "",
"a.Wir haben per E-Mail eine Bestätigung an {email} geschickt.": "Abbiamo inviato una conferma via e-mail a {email}.", "a.Wir haben per E-Mail eine Bestätigung an {email} geschickt.": "Abbiamo inviato una conferma via e-mail a {email}.",
"a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst.": "Scegli un profilo di ammissione in modo da iniziare il tuo corso nel posto giusto.", "a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst.": "Scegli un profilo di ammissione in modo da iniziare il tuo corso nel posto giusto.",
"a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst. Du kannst ihn später jederzeit ändern.": "Scegli un profilo di ammissione in modo da iniziare il tuo corso nel posto giusto. Potrai cambiarlo in seguito in qualsiasi momento.", "a.Wähle ein Zulassungsprofil, damit du deinen Lehrgang an der richtigen Stelle beginnen kannst. Du kannst ihn später jederzeit ändern.": "Scegli un profilo di ammissione in modo da iniziare il tuo corso nel posto giusto. Potrai cambiarlo in seguito in qualsiasi momento.",
@ -291,7 +289,7 @@
"a.Zulassungsprofil": "Profilo di ammissione", "a.Zulassungsprofil": "Profilo di ammissione",
"a.Zulassungsprofil auswählen": "Selezionare il profilo di ammissione", "a.Zulassungsprofil auswählen": "Selezionare il profilo di ammissione",
"a.Zum Unterlagen-Upload": "Carica documenti", "a.Zum Unterlagen-Upload": "Carica documenti",
"a.Zurück": "", "a.Zurück": "Indietro",
"a.Zwischenstand": "Punto intermedio", "a.Zwischenstand": "Punto intermedio",
"a.{AVG} von {MAX}": "{AVG} di {MAX}", "a.{AVG} von {MAX}": "{AVG} di {MAX}",
"a.{NUMBER} Bestanden": "{NUMBER} superato", "a.{NUMBER} Bestanden": "{NUMBER} superato",
@ -306,9 +304,7 @@
"Alle": "Tutto", "Alle": "Tutto",
"Anwesenheit": "Presenza", "Anwesenheit": "Presenza",
"Anwesenheit bestätigen": "Confermare la presenza", "Anwesenheit bestätigen": "Confermare la presenza",
"Anwesenheit Präsenzkurse": "Presenza ai corsi",
"Anwesenheit prüfen": "Verificare la presenza", "Anwesenheit prüfen": "Verificare la presenza",
"Anwesenheitskontrolle Präsenzkurse": "Controllo di presenza ai corsi",
"assignment.acceptConditionsDisclaimer": "Accettare le condizioni e consegnare i risultati", "assignment.acceptConditionsDisclaimer": "Accettare le condizioni e consegnare i risultati",
"assignment.assessmentDocumentDisclaimer": "Questa analisi guidata del caso viene valutata sulla base del seguente strumento di valutazione:", "assignment.assessmentDocumentDisclaimer": "Questa analisi guidata del caso viene valutata sulla base del seguente strumento di valutazione:",
"assignment.assessmentTitle": "Valutazione", "assignment.assessmentTitle": "Valutazione",
@ -345,10 +341,10 @@
"Aufgrund von Problemen beim Zahlungsanbieter ist ein Erwerb der myVBV-Lizenz derzeit nur mit TWINT möglich. Wir arbeiten mit Hochdruck an der Lösung des Problems. ": "A causa di problemi con il provider di pagamento, al momento è possibile acquistare la licenza myAFA solo con TWINT. Stiamo lavorando duramente per risolvere il problema.", "Aufgrund von Problemen beim Zahlungsanbieter ist ein Erwerb der myVBV-Lizenz derzeit nur mit TWINT möglich. Wir arbeiten mit Hochdruck an der Lösung des Problems. ": "A causa di problemi con il provider di pagamento, al momento è possibile acquistare la licenza myAFA solo con TWINT. Stiamo lavorando duramente per risolvere il problema.",
"Ausbildungsverantwortlicher": "Addetto alla formazione", "Ausbildungsverantwortlicher": "Addetto alla formazione",
"Benutzername": "Nome utente", "Benutzername": "Nome utente",
"Berufsbildner": "", "Berufsbildner": "Formatore professionale",
"Bestanden": "", "Bestanden": "Superato",
"Bewertung von x y": "Valutazione di {{x}} {{y}}", "Bewertung von x y": "Valutazione di {{x}} {{y}}",
"Circle": "", "Circle": "Cerchio",
"circlePage.circleContentBoxTitle": "Cosa apprenderai in questo Circle", "circlePage.circleContentBoxTitle": "Cosa apprenderai in questo Circle",
"circlePage.contactExpertButton": "Contattare il/la trainer", "circlePage.contactExpertButton": "Contattare il/la trainer",
"circlePage.contactExpertDescription": "Confrontati con il/la trainer per il Circle {{circleName}}.", "circlePage.contactExpertDescription": "Confrontati con il/la trainer per il Circle {{circleName}}.",
@ -379,7 +375,6 @@
"circlePage.gotQuestions": "Hai domande?", "circlePage.gotQuestions": "Hai domande?",
"circlePage.Im KompetenzNavi anschauen": "Mostra nel \"KompetenzNavi\"", "circlePage.Im KompetenzNavi anschauen": "Mostra nel \"KompetenzNavi\"",
"circlePage.learnMore": "Ottieni maggiori informazioni", "circlePage.learnMore": "Ottieni maggiori informazioni",
"Cockpit anschauen": "",
"cockpit.all": "Tutti", "cockpit.all": "Tutti",
"cockpit.examsDone": "Esami sostenuti dal/dalla partecipante.", "cockpit.examsDone": "Esami sostenuti dal/dalla partecipante.",
"cockpit.feedbacksDone": "Feedback inviati dal/dalla partecipante.", "cockpit.feedbacksDone": "Feedback inviati dal/dalla partecipante.",
@ -411,7 +406,6 @@
"Der Preis für den Lehrgang «Versicherungsvermittler-/in VBV» beträgt CHF 300 exkl. MWSt.. Mit dem Kauf erhältst du Zugang zum Lernpfad und den Lernmedien.": "Il prezzo del corso \"Intermediario/a assicurativo/a AFA\" è di 300 CHF IVA esclusa. L'acquisto ti dà accesso al percorso di apprendimento e ai supporti didattici.", "Der Preis für den Lehrgang «Versicherungsvermittler-/in VBV» beträgt CHF 300 exkl. MWSt.. Mit dem Kauf erhältst du Zugang zum Lernpfad und den Lernmedien.": "Il prezzo del corso \"Intermediario/a assicurativo/a AFA\" è di 300 CHF IVA esclusa. L'acquisto ti dà accesso al percorso di apprendimento e ai supporti didattici.",
"dueDates.noDueDatesAvailable": "Nessuna data disponibile", "dueDates.noDueDatesAvailable": "Nessuna data disponibile",
"dueDates.showAllDueDates": "Mostrare tutte le date", "dueDates.showAllDueDates": "Mostrare tutte le date",
"Durchführung": "",
"edoniqTest.checkboxTitle": "Accetta le condizioni ed esegui il test", "edoniqTest.checkboxTitle": "Accetta le condizioni ed esegui il test",
"edoniqTest.deadlineInPast": "Il test non può più essere eseguito poiché la data di consegna è scaduta.", "edoniqTest.deadlineInPast": "Il test non può più essere eseguito poiché la data di consegna è scaduta.",
"edoniqTest.qualifiesForExtendedTime": "Confermo di avere diritto a un test con compensazione delli ineguaglianze", "edoniqTest.qualifiesForExtendedTime": "Confermo di avere diritto a un test con compensazione delli ineguaglianze",
@ -421,7 +415,6 @@
"edoniqTest.testDescription": "Esegui il test seguente. Il test può essere eseguito solo una volta ed è rilevante per il voto.", "edoniqTest.testDescription": "Esegui il test seguente. Il test può essere eseguito solo una volta ed è rilevante per il voto.",
"edoniqTest.testSubmitted": "Hai completato questo test", "edoniqTest.testSubmitted": "Hai completato questo test",
"edoniqTest.viewResults": "Guarda i risultati", "edoniqTest.viewResults": "Guarda i risultati",
"Elemente zu erledigen": "Elementi da completare",
"Ergebnisse anschauen": "Vedere i risultati", "Ergebnisse anschauen": "Vedere i risultati",
"Ergebnisse anzeigen": "Mostra i risultati", "Ergebnisse anzeigen": "Mostra i risultati",
"Feedback": "Feedback", "Feedback": "Feedback",
@ -471,7 +464,6 @@
"footer.dataProtectionText": "Dichiarazione sulla protezione dei dati", "footer.dataProtectionText": "Dichiarazione sulla protezione dei dati",
"footer.imprintLink": "https://www.vbv.ch/it/impressum", "footer.imprintLink": "https://www.vbv.ch/it/impressum",
"footer.imprintText": "Impressum", "footer.imprintText": "Impressum",
"Freigabetermin Bewertungen:": "Termine di pubblicazione delle valutazioni:",
"Füge dein Profilbild hinzu und ergänze die fehlenden Angaben.": "Aggiungi la foto del tuo profilo e inserisci i dettagli mancanti.", "Füge dein Profilbild hinzu und ergänze die fehlenden Angaben.": "Aggiungi la foto del tuo profilo e inserisci i dettagli mancanti.",
"Geleitete Fallarbeit": "Caso di studio guidato", "Geleitete Fallarbeit": "Caso di studio guidato",
"general.back": "Indietro", "general.back": "Indietro",
@ -479,18 +471,14 @@
"general.backToCircle": "Torna al Circle", "general.backToCircle": "Torna al Circle",
"general.backToLearningPath": "Torna al percorso formativo", "general.backToLearningPath": "Torna al percorso formativo",
"general.cancel": "Annullare", "general.cancel": "Annullare",
"general.certificate_many": "Certificati",
"general.certificate_one": "Certificato", "general.certificate_one": "Certificato",
"general.certificate_other": "Certificati", "general.certificate_other": "Certificati",
"general.circles": "Circles", "general.circles": "Circles",
"general.close": "Chiudere", "general.close": "Chiudere",
"general.exam_many": "Esami",
"general.exam_one": "Esame", "general.exam_one": "Esame",
"general.exam_other": "Esami", "general.exam_other": "Esami",
"general.examResult_many": "Risultati degli esami",
"general.examResult_one": "Risultato dellesame", "general.examResult_one": "Risultato dellesame",
"general.examResult_other": "Risultati degli esami", "general.examResult_other": "Risultati degli esami",
"general.feedback_many": "Feedback",
"general.feedback_one": "Feedback", "general.feedback_one": "Feedback",
"general.feedback_other": "Feedback", "general.feedback_other": "Feedback",
"general.im circle x anschauen": "Guarda nel Circle «{{x}}»", "general.im circle x anschauen": "Guarda nel Circle «{{x}}»",
@ -501,7 +489,6 @@
"general.next": "Avanti", "general.next": "Avanti",
"general.nextStep": "Continua", "general.nextStep": "Continua",
"general.no": "No", "general.no": "No",
"general.notification_many": "Notifiche",
"general.notification_one": "Notifica", "general.notification_one": "Notifica",
"general.notification_other": "Notifiche", "general.notification_other": "Notifiche",
"general.profileLink": "Mostrare i dettagli", "general.profileLink": "Mostrare i dettagli",
@ -514,21 +501,14 @@
"general.start": "Si comincia", "general.start": "Si comincia",
"general.submission": "Consegna", "general.submission": "Consegna",
"general.title": "myAFA", "general.title": "myAFA",
"general.transferTask_many": "Incarichi di trasferimento",
"general.transferTask_one": "Incarico di trasferimento", "general.transferTask_one": "Incarico di trasferimento",
"general.transferTask_other": "Incarichi di trasferimento", "general.transferTask_other": "Incarichi di trasferimento",
"general.yes": "Sì", "general.yes": "Sì",
"Generation": "",
"Hast du Fragen?": "Hai domande?", "Hast du Fragen?": "Hai domande?",
"Hier überprüfst und bestätigst du die Anwesenheit deiner Teilnehmenden.": "Qui controlli e confermi la presenza dei tuoi partecipanti.", "Hier überprüfst und bestätigst du die Anwesenheit deiner Teilnehmenden.": "Qui controlli e confermi la presenza dei tuoi partecipanti.",
"Ich will die Anwesenheit der untenstehenden Personen definitiv bestätigen.": "Voglio confermare definitivamente la presenza delle persone sottostanti.", "Ich will die Anwesenheit der untenstehenden Personen definitiv bestätigen.": "Voglio confermare definitivamente la presenza delle persone sottostanti.",
"Jahr": "", "Kompetenznachweise": "Elementi del controllo",
"Keine Auftragsdetails verfügbar.": "",
"Kompetenznachweise": "",
"Kompetenzprofil": "",
"Kosten im": "Costi nel", "Kosten im": "Costi nel",
"Kosten in": "",
"Kosten in 2024": "",
"language.de": "Deutsch", "language.de": "Deutsch",
"language.fr": "Français", "language.fr": "Français",
"language.it": "Italiano", "language.it": "Italiano",
@ -540,12 +520,11 @@
"learningContentTypes.feedback": "Feedback", "learningContentTypes.feedback": "Feedback",
"learningContentTypes.knowledgeAssessment": "Test", "learningContentTypes.knowledgeAssessment": "Test",
"learningContentTypes.learningModule": "Modulo di formazione", "learningContentTypes.learningModule": "Modulo di formazione",
"learningContentTypes.mandatory_casework": "",
"learningContentTypes.placeholder": "In attuazione", "learningContentTypes.placeholder": "In attuazione",
"learningContentTypes.praxisAssignment": "Ordine", "learningContentTypes.praxisAssignment": "Ordine",
"learningContentTypes.prepAssignment": "Incarico di preparazione", "learningContentTypes.prepAssignment": "Incarico di preparazione",
"learningContentTypes.reflection": "Riflessione", "learningContentTypes.reflection": "Riflessione",
"learningContentTypes.task": "", "learningContentTypes.task": "Compito",
"learningContentTypes.test": "Test", "learningContentTypes.test": "Test",
"learningContentTypes.text": "Testo", "learningContentTypes.text": "Testo",
"learningContentTypes.video": "Video", "learningContentTypes.video": "Video",
@ -558,9 +537,6 @@
"learningPathPage.showListView": "Mostrare la vista elenco", "learningPathPage.showListView": "Mostrare la vista elenco",
"learningPathPage.topics": "Temi:", "learningPathPage.topics": "Temi:",
"learningPathPage.welcomeBack": "Bentornato/a al tuo corso:", "learningPathPage.welcomeBack": "Bentornato/a al tuo corso:",
"Lehrgang": "",
"Lernbegleitung einladen": "",
"Lernpfad kaufen": "",
"login.demoLogin": "Login Demo", "login.demoLogin": "Login Demo",
"login.guidelineFile": "Registrazione_myAFA.pdf", "login.guidelineFile": "Registrazione_myAFA.pdf",
"login.guidelineText": "Scopri come iscriverti come apprendista professionale", "login.guidelineText": "Scopri come iscriverti come apprendista professionale",
@ -572,40 +548,31 @@
"mainNavigation.logout": "Logout", "mainNavigation.logout": "Logout",
"mainNavigation.profile": "Profilo", "mainNavigation.profile": "Profilo",
"mediaLibrary.handlungsfelder.description": "Trova tutte le risorse dei campi dazione, come materiali didattici, link e altre informazioni utili.", "mediaLibrary.handlungsfelder.description": "Trova tutte le risorse dei campi dazione, come materiali didattici, link e altre informazioni utili.",
"mediaLibrary.handlungsfelder.title_many": "Campi dazione",
"mediaLibrary.handlungsfelder.title_one": "Campo dazione", "mediaLibrary.handlungsfelder.title_one": "Campo dazione",
"mediaLibrary.handlungsfelder.title_other": "Campi dazione", "mediaLibrary.handlungsfelder.title_other": "Campi dazione",
"mediaLibrary.learningMedia.description": "Trova un elenco completo di libri e altri materiali a cui si rimanda nel corso.", "mediaLibrary.learningMedia.description": "Trova un elenco completo di libri e altri materiali a cui si rimanda nel corso.",
"mediaLibrary.learningMedia.titel": "Materiali didattici", "mediaLibrary.learningMedia.titel": "Materiali didattici",
"mediaLibrary.show": "Visualizza la libreria mediateca", "mediaLibrary.show": "Visualizza la libreria mediateca",
"mediaLibrary.title": "Mediateca", "mediaLibrary.title": "Mediateca",
"Meine Lernbegleiter": "",
"Meine Praxisbildner": "I miei formatori pratici", "Meine Praxisbildner": "I miei formatori pratici",
"Member": "Partecipanti", "Member": "Partecipanti",
"MentorUK": "Formatore/-trice pratico/a", "MentorUK": "Formatore/-trice pratico/a",
"MentorVV": "Tutor", "MentorVV": "Tutor",
"messages.sendMessage": "Scrivere un messaggio", "messages.sendMessage": "Scrivere un messaggio",
"MS Teams öffnen": "Aprire MS Teams", "MS Teams öffnen": "Aprire MS Teams",
"Nach der Bezahlung von 300 CHF exkl. MWSt. erhältst du Zugang für den gesamten Lehrgang (inkl. Prüfung).": "",
"Neuen Praxisbildner einladen": "Invitare un nuovo formatore pratico", "Neuen Praxisbildner einladen": "Invitare un nuovo formatore pratico",
"Nicht bestanden": "", "Nicht bestanden": "Non superato",
"notifications.load_more": "Caricare altro", "notifications.load_more": "Caricare altro",
"notifications.no_notifications": "Al momento non hai nessuna notifica", "notifications.no_notifications": "Al momento non hai nessuna notifica",
"Nächste Termine": "Prossime date", "Nächste Termine": "Prossime date",
"Passwort": "Password", "Passwort": "Password",
"Personen": "",
"profile.": "",
"profile.all": "Multiramo", "profile.all": "Multiramo",
"profile.krankenzusatzversicherung": "Malattie complementare", "profile.krankenzusatzversicherung": "Malattie complementare",
"profile.leben": "Vita", "profile.leben": "Vita",
"profile.nichtleben": "Non vita", "profile.nichtleben": "Non vita",
"profile.null": "",
"Präsenzkurs": "",
"receivedEvaluation.no": "Devi riguardarlo ancora una volta", "receivedEvaluation.no": "Devi riguardarlo ancora una volta",
"receivedEvaluation.yes": " Sì, puoi farlo", "receivedEvaluation.yes": " Sì, puoi farlo",
"Reflexion": "", "Reflexion": "Riflessione",
"Region": "",
"Rolle": "",
"Sehr unzufrieden": "molto insoddisfatto", "Sehr unzufrieden": "molto insoddisfatto",
"Sehr zufrieden": "molto soddisfatto", "Sehr zufrieden": "molto soddisfatto",
"selfEvaluation.instruction.0": "Überprüfe, ob du in der Lernheinheit", "selfEvaluation.instruction.0": "Überprüfe, ob du in der Lernheinheit",
@ -631,13 +598,6 @@
"start.vvDescription": "Il percorso di apprendimento e i supporti didattici che ti preparano all'esame «Intermediario/a assicurativo/a AFA».", "start.vvDescription": "Il percorso di apprendimento e i supporti didattici che ti preparano all'esame «Intermediario/a assicurativo/a AFA».",
"Status anschauen": "Vedere lo stato", "Status anschauen": "Vedere lo stato",
"Supervisor": "Responsabile CI", "Supervisor": "Responsabile CI",
"Teilnehmer": "",
"Teilnehmer im": "I partecipanti al",
"Teilnehmer im 2024": "",
"Teilnehmer nach Zulassungsprofilen": "Partecipanti secondo i profili di ammissione",
"Teilnehmer nach Zulassungsprofilen im": "",
"Termin nicht festgelegt": "",
"TODO: Nächste Termine": "TODO: prossime date",
"Trainer": "Trainer", "Trainer": "Trainer",
"Trainerunterlagen": "Documenti del/della trainer", "Trainerunterlagen": "Documenti del/della trainer",
"TrainingResponsible": "Addetto alla formazione", "TrainingResponsible": "Addetto alla formazione",
@ -647,7 +607,6 @@
"uk.dashboard.allClear": "È tutto chiaro?", "uk.dashboard.allClear": "È tutto chiaro?",
"uk.dashboard.nextSteps": "In qualità di apprendista, nei prossimi giorni sarai assegnata/o a un corso interaziendale. Poi il riquadro di formazione personalizzato del corso apparirà qui con ulteriori informazioni.", "uk.dashboard.nextSteps": "In qualità di apprendista, nei prossimi giorni sarai assegnata/o a un corso interaziendale. Poi il riquadro di formazione personalizzato del corso apparirà qui con ulteriori informazioni.",
"uk.dashboard.welcome": "Tutto ha funzionato, ora sei registrata/o nell'ambiente di apprendimento digitale dell'Associazione per la formazione professionale nell'assicurazione (AFA)!", "uk.dashboard.welcome": "Tutto ha funzionato, ora sei registrata/o nell'ambiente di apprendimento digitale dell'Associazione per la formazione professionale nell'assicurazione (AFA)!",
"UnknownRoleKey": "",
"unzufrieden": "insoddisfatto", "unzufrieden": "insoddisfatto",
"Vorbedingung": "Condizione preliminare", "Vorbedingung": "Condizione preliminare",
"Vorbereitungsaufgabe": "Incarico di preparazione", "Vorbereitungsaufgabe": "Incarico di preparazione",
@ -665,6 +624,5 @@
"Zu erledigen": "", "Zu erledigen": "",
"zufrieden": "soddisfatto", "zufrieden": "soddisfatto",
"Zulassungsprofil": "", "Zulassungsprofil": "",
"Zur Zeit sind keine Termine vorhanden": "Al momento non ci sono scadenze", "Zur Zeit sind keine Termine vorhanden": "Al momento non ci sono scadenze"
"Überbetriebliche Kurse": ""
} }

View File

@ -114,12 +114,12 @@ function generateCertificatesLink(userId: string) {
</span> </span>
<template v-if="assignmentDetail.evaluation_deadline?.start"> <template v-if="assignmentDetail.evaluation_deadline?.start">
<br /> <br />
{{ $t("Freigabetermin Bewertungen:") }} {{ $t("a.Freigabetermin Bewertungen") }}:
{{ formatDueDate(assignmentDetail.evaluation_deadline?.start) }} {{ formatDueDate(assignmentDetail.evaluation_deadline?.start) }}
</template> </template>
</div> </div>
<div v-else> <div v-else>
{{ $t("Keine Auftragsdetails verfügbar.") }} {{ $t("a.Keine Auftragsdetails verfügbar.") }}
</div> </div>
<div class="mt-4"> <div class="mt-4">

View File

@ -43,7 +43,7 @@ const presenceCoursesDropdownOptions = computed(() => {
(attendanceCourse) => (attendanceCourse) =>
({ ({
id: attendanceCourse.id, id: attendanceCourse.id,
name: `${t("Präsenzkurs")} ${ name: `${t("a.Präsenzkurs")} ${
attendanceCourse.learning_content.circle?.title attendanceCourse.learning_content.circle?.title
} ${dayjs(attendanceCourse.due_date?.start).format("DD.MM.YYYY")}`, } ${dayjs(attendanceCourse.due_date?.start).format("DD.MM.YYYY")}`,
}) as DropdownSelectable }) as DropdownSelectable
@ -165,7 +165,7 @@ watch(
</router-link> </router-link>
</nav> </nav>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<h3 class="pb-4 text-xl font-bold">{{ $t("Anwesenheit Präsenzkurse") }}</h3> <h3 class="pb-4 text-xl font-bold">{{ $t("a.Anwesenheit Präsenzkurse") }}</h3>
<button <button
v-if="state.attendanceSaved" v-if="state.attendanceSaved"
class="flex" class="flex"

View File

@ -83,7 +83,7 @@ const courseSessionDetailResult = useCourseSessionDetailQuery();
<div class="my-4 flex flex-col justify-between bg-white p-6 lg:my-0"> <div class="my-4 flex flex-col justify-between bg-white p-6 lg:my-0">
<div> <div>
<h3 class="heading-3 mb-4 flex items-center gap-2"> <h3 class="heading-3 mb-4 flex items-center gap-2">
{{ $t("Anwesenheitskontrolle Präsenzkurse") }} {{ $t("a.Anwesenheitskontrolle Präsenzkurse") }}
</h3> </h3>
<div class="mb-4"> <div class="mb-4">
{{ {{

View File

@ -31,7 +31,7 @@ const courses = computed(() => {
return [ return [
{ {
id: UNFILTERED, id: UNFILTERED,
name: `${t("Lehrgang")}: ${t("a.Alle")}`, name: `${t("a.Lehrgang")}: ${t("a.Alle")}`,
slug: "", slug: "",
}, },
..._(dashboardDueDates.value) ..._(dashboardDueDates.value)

View File

@ -91,7 +91,7 @@ const regions = computed(() => {
return [ return [
{ {
id: UNFILTERED, id: UNFILTERED,
name: `${t("Region")}: ${t("a.Alle")}`, name: `${t("a.Region")}: ${t("a.Alle")}`,
}, },
...values, ...values,
]; ];
@ -141,7 +141,7 @@ const generations = computed(() => {
return [ return [
{ {
id: UNFILTERED, id: UNFILTERED,
name: `${t("Generation")}: ${t("a.Alle")}`, name: `${t("a.Generation")}: ${t("a.Alle")}`,
}, },
...values, ...values,
]; ];
@ -164,7 +164,7 @@ const roles = computed(() => {
return [ return [
{ {
id: UNFILTERED, id: UNFILTERED,
name: `${t("Rolle")}: ${t("a.Alle")}`, name: `${t("a.Rolle")}: ${t("a.Alle")}`,
}, },
...values, ...values,
]; ];
@ -186,7 +186,7 @@ const chosenProfiles = computed(() => {
return [ return [
{ {
id: UNFILTERED, id: UNFILTERED,
name: `${t("Zulassungsprofil")}: ${t("a.Alle")}`, name: `${t("a.Zulassungsprofil")}: ${t("a.Alle")}`,
}, },
...values, ...values,
]; ];
@ -210,7 +210,7 @@ const paidYears = computed(() => {
return [ return [
{ {
id: UNFILTERED, id: UNFILTERED,
name: `${t("Jahr")}: ${t("a.Alle")}`, name: `${t("a.Jahr")}: ${t("a.Alle")}`,
}, },
...values, ...values,
]; ];

View File

@ -0,0 +1,145 @@
import { TEST_STUDENT1_USER_ID, TEST_TRAINER1_USER_ID } from "../../consts";
import { EXPERT_COCKPIT_URL, login } from "../helpers";
describe("assignmentTrainer.cy.js", () => {
beforeEach(() => {
cy.manageCommand(
"cypress_reset --create-assignment-completion --create-assignment-evaluation",
);
login("test-trainer1@example.com", "test");
});
describe("Can reevaluation assignment", () => {
it("can start evaluation and store evaluation results", () => {
cy.visit(EXPERT_COCKPIT_URL);
cy.get(
'[data-cy="show-details-btn-test-lehrgang-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice"]',
).click();
cy.get('[data-cy="Student1"]').find('[data-cy="show-results"]').click();
// on EvaluationSummary page
cy.get(
'[data-cy="assignment-history"] [data-cy="assignment-history-entry"]',
).should("have.length", 2);
cy.get('[data-cy="assignment-history"]')
.should("contain", "Ergebnisse abgegeben")
.should("contain", "Bewertung freigegeben");
cy.get('[data-cy="user-points"]').should("contain", "24");
cy.get('[data-cy="total-points"]').should("contain", "100%");
// reevaluation
cy.get('[data-cy="btn-reopen"]').click();
cy.get('[data-cy="evaluation-task"]').should(
"contain",
"Beurteilungskriterium 1 / 5",
);
cy.get('[data-cy="subtask-4"]').click();
cy.wait(500);
cy.get('[data-cy="next-step"]').click();
cy.get('[data-cy="evaluation-task"]').should(
"contain",
"Beurteilungskriterium 2 / 5",
);
cy.get('[data-cy="next-step"]').click();
cy.get('[data-cy="evaluation-task"]').should(
"contain",
"Beurteilungskriterium 3 / 5",
);
cy.get('[data-cy="subtask-4"]').click();
cy.wait(500);
cy.get('[data-cy="next-step"]').click();
cy.get('[data-cy="evaluation-task"]').should(
"contain",
"Beurteilungskriterium 4 / 5",
);
cy.get('[data-cy="subtask-2"]').click();
cy.wait(500);
cy.get('[data-cy="next-step"]').click();
cy.get('[data-cy="evaluation-task"]').should(
"contain",
"Beurteilungskriterium 5 / 5",
);
cy.get('[data-cy="next-step"]').click();
cy.get('[data-cy="user-points"]').should("contain", "19");
cy.get('[data-cy="total-points"]').should("contain", "79%");
cy.get('[data-cy="reason-text"]').type("nochmal bewertet");
cy.get(
'[data-cy="assignment-history"] [data-cy="assignment-history-entry"]',
).should("have.length", 3);
cy.get('[data-cy="assignment-history"]')
.should("contain", "Ergebnisse abgegeben")
.should("contain", "Bewertung freigegeben")
.should("contain", "Bewertung erneut bearbeitet");
cy.get('[data-cy="submit-evaluation"]').click();
// check stored data
cy.get('[data-cy="result-section"]').should(
"contain",
"Deine Bewertung für Test Student1 wurde freigegeben",
);
cy.reload();
cy.get(
'[data-cy="assignment-history"] [data-cy="assignment-history-entry"]',
).should("have.length", 4);
cy.loadAssignmentCompletion(
"evaluation_user_id",
TEST_TRAINER1_USER_ID,
).then((ac) => {
expect(ac.completion_status).to.equal("EVALUATION_SUBMITTED");
expect(ac.evaluation_points).to.equal(19);
expect(ac.completion_data.expert_evaluation_comment.text).to.equal(
"nochmal bewertet",
);
expect(ac.additional_json_data.submission_history).to.have.length(4);
expect(ac.additional_json_data.submission_history[0].status).to.equal(
"SUBMITTED",
);
expect(ac.additional_json_data.submission_history[1].status).to.equal(
"EVALUATION_SUBMITTED",
);
expect(ac.additional_json_data.submission_history[2].status).to.equal(
"EVALUATION_IN_PROGRESS",
);
expect(ac.additional_json_data.submission_history[3].status).to.equal(
"EVALUATION_SUBMITTED",
);
// check AssignmentCompletionAuditLog
cy.task(
"runSql",
`select * from assignment_assignmentcompletionauditlog
where assignment_slug = 'test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice'
and assignment_user_id = '${TEST_STUDENT1_USER_ID}'
order by created_at asc;`,
).then((res) => {
console.log(res);
expect(res.rows).to.have.length(3);
expect(res.rows[0].completion_status).to.equal("SUBMITTED");
expect(res.rows[1].completion_status).to.equal(
"EVALUATION_SUBMITTED",
);
expect(res.rows[1].evaluation_points).to.equal(24);
expect(res.rows[2].completion_status).to.equal(
"EVALUATION_SUBMITTED",
);
expect(res.rows[2].evaluation_points).to.equal(19);
expect(res.rows[2].completion_data.expert_evaluation_comment.text).to.equal(
"nochmal bewertet",
);
});
});
});
});
});

View File

@ -100,7 +100,7 @@ describe("courseSpecificSettings.cy.js", () => {
"Lernbegleitung" "Lernbegleitung"
); );
cy.get('[data-cy="navigation-learning-mentor-link"]').click(); cy.get('[data-cy="navigation-learning-mentor-link"]').click();
cy.get('[data-cy="lm-my-lms-title"]').contains("Meine Lernbegleiter"); cy.get('[data-cy="lm-my-lms-title"]').contains("Meine Lernbegleitung");
cy.get('[data-cy="lm-invite-mentor-button"]').contains( cy.get('[data-cy="lm-invite-mentor-button"]').contains(
"Neue Lernbegleitung einladen" "Neue Lernbegleitung einladen"
); );

View File

@ -100,7 +100,7 @@ describe("praxisauftrag.cy.js", () => {
cy.get('[data-cy="next-step"]').click(); cy.get('[data-cy="next-step"]').click();
cy.get('[data-cy="submit-evaluation"]').click(); cy.get('[data-cy="submit-evaluation"]').click();
cy.get('[data-cy="next-step"]').click(); cy.get('[data-cy="btn-close"]').click();
cy.visit("/"); cy.visit("/");

View File

@ -63,7 +63,7 @@ describe("memberOnly.cy.js", () => {
it("uses term Lernbegleitung in VV-course", () => { it("uses term Lernbegleitung in VV-course", () => {
cy.visit(MENTOR_MENTEES_URL_VV); cy.visit(MENTOR_MENTEES_URL_VV);
cy.get(MAIN_NAVIGATION_MENTOR_LINK).should("contain", "Lernbegleitung"); cy.get(MAIN_NAVIGATION_MENTOR_LINK).should("contain", "Lernbegleitung");
cy.get(MENTEE_MENTORS_TITLE).should("contain", "Meine Lernbegleiter"); cy.get(MENTEE_MENTORS_TITLE).should("contain", "Meine Lernbegleitung");
cy.get(MENTEE_INVITE_MENTOR).should( cy.get(MENTEE_INVITE_MENTOR).should(
"contain", "contain",
"Neue Lernbegleitung einladen" "Neue Lernbegleitung einladen"

View File

@ -59,6 +59,7 @@ DATABASES = {
default="postgres://postgres@localhost:5432/vbv_lernwelt", default="postgres://postgres@localhost:5432/vbv_lernwelt",
) )
} }
DATABASES["default"]["ATOMIC_REQUESTS"] = env.bool( DATABASES["default"]["ATOMIC_REQUESTS"] = env.bool(
"DATABASE_ATOMIC_REQUESTS", default=True "DATABASE_ATOMIC_REQUESTS", default=True
) )

View File

@ -1,7 +1,11 @@
from django.contrib import admin from django.contrib import admin
from django.db.models import JSONField from django.db.models import JSONField
from vbv_lernwelt.assignment.models import AssignmentCompletion from vbv_lernwelt.assignment.models import (
AssignmentCompletion,
AssignmentCompletionAuditLog,
)
from vbv_lernwelt.core.admin import LogAdmin
from vbv_lernwelt.core.admin_utils import PrettyJSONWidget from vbv_lernwelt.core.admin_utils import PrettyJSONWidget
@ -16,6 +20,7 @@ class AssignmentCompletionAdmin(admin.ModelAdmin):
"assignment", "assignment",
"get_circle", "get_circle",
"assignment_user", "assignment_user",
"evaluation_user",
"course_session", "course_session",
"completion_status", "completion_status",
"evaluation_points", "evaluation_points",
@ -27,7 +32,14 @@ class AssignmentCompletionAdmin(admin.ModelAdmin):
"course_session__course", "course_session__course",
"course_session", "course_session",
] ]
search_fields = ["assignment_user__email"] search_fields = [
"assignment_user__email",
"assignment_user__first_name",
"assignment_user__last_name",
"evaluation_user__email",
"evaluation_user__first_name",
"evaluation_user__last_name",
]
readonly_fields = [ readonly_fields = [
"assignment_user", "assignment_user",
"assignment", "assignment",
@ -53,3 +65,40 @@ class AssignmentCompletionAdmin(admin.ModelAdmin):
if change and "evaluation_points_deducted" in form.changed_data: if change and "evaluation_points_deducted" in form.changed_data:
obj.evaluation_points_deducted_user = request.user obj.evaluation_points_deducted_user = request.user
super().save_model(request, obj, form, change) super().save_model(request, obj, form, change)
@admin.register(AssignmentCompletionAuditLog)
class AssignmentCompletionAuditLogAdmin(LogAdmin):
date_hierarchy = "created_at"
list_display = [
"created_at",
"assignment",
"get_circle",
"assignment_user",
"evaluation_user",
"course_session",
"completion_status",
"evaluation_points",
]
list_filter = [
"completion_status",
"assignment__assignment_type",
"course_session__course",
"course_session",
]
search_fields = [
"assignment_user__email",
"assignment_user__first_name",
"assignment_user__last_name",
"evaluation_user__email",
"evaluation_user__first_name",
"evaluation_user__last_name",
]
def get_circle(self, obj):
try:
return obj.learning_content_page.specific.get_circle().title
except Exception:
return ""
get_circle.short_description = "Circle"

View File

@ -16,6 +16,7 @@ class AssignmentCompletionObjectType(DjangoObjectType):
completion_data = GenericScalar() completion_data = GenericScalar()
task_completion_data = GenericScalar() task_completion_data = GenericScalar()
learning_content_page_id = graphene.ID(source="learning_content_page_id") learning_content_page_id = graphene.ID(source="learning_content_page_id")
additional_json_data = GenericScalar()
# rounded to sensible representation # rounded to sensible representation
evaluation_points = graphene.Float() evaluation_points = graphene.Float()

View File

@ -0,0 +1,71 @@
import djclick as click
import structlog
from vbv_lernwelt.assignment.models import AssignmentCompletion
logger = structlog.get_logger(__name__)
def create_initial_submission_history(apps=None, schema_editor=None):
if apps is None:
# pylint: disable=import-outside-toplevel
from vbv_lernwelt.assignment.models import AssignmentCompletion
else:
AssignmentCompletion = apps.get_model("assignment", "AssignmentCompletion")
for ac in AssignmentCompletion.objects.filter(
assignment__assignment_type__in=["PRAXIS_ASSIGNMENT", "CASEWORK"]
):
num_entries = ac_create_initial_submission_history(ac)
# print(f"Created initial submission history for {ac} {num_entries}")
def ac_create_initial_submission_history(ac: AssignmentCompletion):
submission_history = ac.additional_json_data.get("submission_history", [])
num_entries = 0
if len(submission_history) > 0:
return num_entries
if ac.submitted_at:
entry = {
"timestamp": ac.submitted_at.isoformat(),
"status": "SUBMITTED",
"translation_key": "a.Ergebnisse abgegeben",
"user_id": str(ac.assignment_user.id),
"user_email": ac.assignment_user.email,
"user_display_name": (
f"{ac.assignment_user.first_name} {ac.assignment_user.last_name}"
),
}
submission_history.append(entry)
num_entries += 1
if ac.evaluation_submitted_at:
translation_key = "a.Bewertung freigegeben"
if ac.assignment.assignment_type == "PRAXIS_ASSIGNMENT":
translation_key = "Feedback freigegeben"
entry = {
"timestamp": ac.evaluation_submitted_at.isoformat(),
"status": "EVALUATION_SUBMITTED",
"translation_key": translation_key,
"user_id": str(ac.evaluation_user.id),
"user_email": ac.evaluation_user.email,
"user_display_name": (
f"{ac.evaluation_user.first_name} {ac.evaluation_user.last_name}"
),
}
submission_history.append(entry)
num_entries += 1
ac.additional_json_data["submission_history"] = submission_history
ac.save()
return num_entries
@click.command()
def command():
create_initial_submission_history()

View File

@ -0,0 +1,43 @@
# Generated by Django 4.2.13 on 2024-09-16 12:00
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("assignment", "0014_evaluation_points_deducted"),
]
operations = [
migrations.AddField(
model_name="assignmentcompletionauditlog",
name="evaluation_points_deducted",
field=models.FloatField(default=0.0, verbose_name="Punkteabzug"),
),
migrations.AddField(
model_name="assignmentcompletionauditlog",
name="evaluation_points_deducted_reason",
field=models.TextField(
blank=True, default="", verbose_name="Punkteabzug Begründung"
),
),
migrations.AddField(
model_name="assignmentcompletionauditlog",
name="evaluation_points_deducted_user",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="assignmentcompletionauditlog",
name="evaluation_points_deducted_user_email",
field=models.CharField(blank=True, default="", max_length=255),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 4.2.13 on 2024-09-17 11:37
from django.db import migrations
from vbv_lernwelt.assignment.management.commands.assignment_create_initial_submission_history import (
create_initial_submission_history,
)
class Migration(migrations.Migration):
dependencies = [
(
"assignment",
"0015_assignmentcompletionauditlog_evaluation_points_deducted_and_more",
),
]
operations = [migrations.RunPython(create_initial_submission_history)]

View File

@ -485,6 +485,23 @@ class AssignmentCompletionAuditLog(models.Model):
evaluation_max_points = models.FloatField(null=True, blank=True) evaluation_max_points = models.FloatField(null=True, blank=True)
evaluation_passed = models.BooleanField(null=True, blank=True) evaluation_passed = models.BooleanField(null=True, blank=True)
evaluation_points_deducted = models.FloatField(
default=0.0, verbose_name="Punkteabzug"
)
evaluation_points_deducted_reason = models.TextField(
default="", blank=True, verbose_name="Punkteabzug Begründung"
)
evaluation_points_deducted_user = models.ForeignKey(
User,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="+",
)
evaluation_points_deducted_user_email = models.CharField(
max_length=255, blank=True, default=""
)
def recalculate_assignment_passed(ac: AssignmentCompletion): def recalculate_assignment_passed(ac: AssignmentCompletion):
if ac.evaluation_points_final is not None and ac.evaluation_max_points is not None: if ac.evaluation_points_final is not None and ac.evaluation_max_points is not None:

View File

@ -142,6 +142,13 @@ def update_assignment_completion(
} }
) )
evaluation_reopened = False
if (
completion_status == AssignmentCompletionStatus.EVALUATION_IN_PROGRESS
and ac.completion_status == "EVALUATION_SUBMITTED"
):
evaluation_reopened = True
if evaluation_max_points is None: if evaluation_max_points is None:
ac.evaluation_max_points = assignment.get_max_points() ac.evaluation_max_points = assignment.get_max_points()
else: else:
@ -229,9 +236,16 @@ def update_assignment_completion(
evaluation_points=evaluation_points, evaluation_points=evaluation_points,
evaluation_max_points=ac.evaluation_max_points, evaluation_max_points=ac.evaluation_max_points,
evaluation_passed=ac.evaluation_passed, evaluation_passed=ac.evaluation_passed,
evaluation_points_deducted=ac.evaluation_points_deducted,
evaluation_points_deducted_reason=ac.evaluation_points_deducted_reason,
evaluation_points_deducted_user=ac.evaluation_points_deducted_user,
) )
if evaluation_user: if evaluation_user:
acl.evaluation_user_email = evaluation_user.email acl.evaluation_user_email = evaluation_user.email
if ac.evaluation_points_deducted_user:
acl.evaluation_points_deducted_user_email = (
ac.evaluation_points_deducted_user.email
)
# copy over the question data, so that we don't lose the context # copy over the question data, so that we don't lose the context
subtasks = assignment.get_input_tasks() subtasks = assignment.get_input_tasks()
@ -241,6 +255,49 @@ def update_assignment_completion(
acl.completion_data[key].update(task_data) acl.completion_data[key].update(task_data)
acl.save() acl.save()
if (
completion_status
in [
AssignmentCompletionStatus.EVALUATION_SUBMITTED,
AssignmentCompletionStatus.SUBMITTED,
]
or evaluation_reopened
) and assignment.assignment_type != AssignmentType.EDONIQ_TEST.value:
# make history entry
submission_history = ac.additional_json_data.get("submission_history", [])
entry = {
"timestamp": timezone.now().isoformat(),
"status": completion_status.value,
}
if completion_status == AssignmentCompletionStatus.SUBMITTED:
entry["translation_key"] = "a.Ergebnisse abgegeben"
entry["user_id"] = str(assignment_user.id)
entry["user_email"] = assignment_user.email
entry["user_display_name"] = (
f"{assignment_user.first_name} {assignment_user.last_name}"
)
else:
entry["user_id"] = str(evaluation_user.id)
entry["user_email"] = evaluation_user.email
entry["user_display_name"] = (
f"{evaluation_user.first_name} {evaluation_user.last_name}"
)
if completion_status == AssignmentCompletionStatus.EVALUATION_SUBMITTED:
if assignment.assignment_type == AssignmentType.PRAXIS_ASSIGNMENT.value:
entry["translation_key"] = "a.Feedback freigegeben"
else:
entry["translation_key"] = "a.Bewertung freigegeben"
elif completion_status == AssignmentCompletionStatus.EVALUATION_IN_PROGRESS:
if assignment.assignment_type == AssignmentType.PRAXIS_ASSIGNMENT.value:
entry["translation_key"] = "a.Feedback erneut bearbeitet"
else:
entry["translation_key"] = "a.Bewertung erneut bearbeitet"
submission_history.append(entry)
ac.additional_json_data["submission_history"] = submission_history
ac.save()
if completion_status in [ if completion_status in [
AssignmentCompletionStatus.EVALUATION_SUBMITTED, AssignmentCompletionStatus.EVALUATION_SUBMITTED,
AssignmentCompletionStatus.EVALUATION_IN_PROGRESS, AssignmentCompletionStatus.EVALUATION_IN_PROGRESS,
@ -267,7 +324,8 @@ def _remove_unknown_entries(assignment, completion_data):
Removes all entries from completion_data which are not known to the assignment Removes all entries from completion_data which are not known to the assignment
""" """
input_task_ids = [task["id"] for task in assignment.get_input_tasks()] input_task_ids = [task["id"] for task in assignment.get_input_tasks()]
keys = set(input_task_ids) | {"expert_evaluation_comment"}
filtered_completion_data = { filtered_completion_data = {
key: value for key, value in completion_data.items() if key in input_task_ids key: value for key, value in completion_data.items() if key in keys
} }
return filtered_completion_data return filtered_completion_data

View File

@ -190,6 +190,13 @@ class UpdateAssignmentCompletionTestCase(TestCase):
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice", "test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
) )
# will create submission_history entry
submission_history = ac.additional_json_data.get("submission_history", [])
self.assertEqual(len(submission_history), 1)
entry = submission_history[0]
self.assertEqual(entry["status"], "SUBMITTED")
self.assertEqual(entry["user_email"], "student")
# 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()
@ -512,6 +519,13 @@ class UpdateAssignmentCompletionTestCase(TestCase):
user_input["user_data"], {"text": "Ich würde nichts weiteres empfehlen."} user_input["user_data"], {"text": "Ich würde nichts weiteres empfehlen."}
) )
# will create submission_history entry
submission_history = ac.additional_json_data.get("submission_history", [])
self.assertEqual(len(submission_history), 1)
entry = submission_history[0]
self.assertEqual(entry["status"], "EVALUATION_SUBMITTED")
self.assertEqual(entry["user_email"], "admin")
# will create AssignmentCompletionAuditLog entry # will create AssignmentCompletionAuditLog entry
acl = AssignmentCompletionAuditLog.objects.get( acl = AssignmentCompletionAuditLog.objects.get(
assignment_user=self.user, assignment_user=self.user,
@ -553,3 +567,156 @@ class UpdateAssignmentCompletionTestCase(TestCase):
) )
self.assertIsNone(acl.assignment_user) self.assertIsNone(acl.assignment_user)
self.assertIsNone(acl.assignment) self.assertIsNone(acl.assignment)
def test_can_reopen_evaluated_submission(self):
subtasks = self.assignment.filter_user_subtasks(
subtask_types=["user_text_input"]
)
user_text_input = find_first(
subtasks,
pred=lambda x: (value := x.get("value"))
and value.get("text", "").startswith(
"Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest?"
),
)
ac = AssignmentCompletion.objects.create(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
completion_status=AssignmentCompletionStatus.SUBMITTED.value,
completion_data={
user_text_input["id"]: {
"user_data": {"text": "Ich würde nichts weiteres empfehlen."}
},
},
)
evaluation_task = self.assignment.get_evaluation_tasks()[0]
update_assignment_completion(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
completion_data={
evaluation_task["id"]: {
"expert_data": {"points": 2, "text": "Gut gemacht!"}
},
},
completion_status=AssignmentCompletionStatus.EVALUATION_IN_PROGRESS,
evaluation_user=self.trainer,
)
update_assignment_completion(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
completion_data={},
completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED,
evaluation_user=self.trainer,
evaluation_points=16,
)
ac = AssignmentCompletion.objects.get(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
)
self.assertEqual(ac.completion_status, "EVALUATION_SUBMITTED")
self.assertEqual(ac.evaluation_points, 16)
self.assertEqual(ac.evaluation_max_points, 24)
self.assertTrue(ac.evaluation_passed)
trainer_input = ac.completion_data[evaluation_task["id"]]
self.assertDictEqual(
trainer_input["expert_data"], {"points": 2, "text": "Gut gemacht!"}
)
user_input = ac.completion_data[user_text_input["id"]]
self.assertDictEqual(
user_input["user_data"], {"text": "Ich würde nichts weiteres empfehlen."}
)
update_assignment_completion(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
completion_data={},
completion_status=AssignmentCompletionStatus.EVALUATION_IN_PROGRESS,
evaluation_user=self.trainer,
)
ac = AssignmentCompletion.objects.get(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
)
self.assertEqual(ac.completion_status, "EVALUATION_IN_PROGRESS")
update_assignment_completion(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
completion_data={
evaluation_task["id"]: {
"expert_data": {
"points": 2,
"text": "Gut gemacht. Ich musste es noch einmal anschauen.",
}
},
},
completion_status=AssignmentCompletionStatus.EVALUATION_IN_PROGRESS,
evaluation_user=self.trainer,
)
# will create submission_history entry
submission_history = ac.additional_json_data.get("submission_history", [])
self.assertEqual(len(submission_history), 2)
entry = submission_history[1]
self.assertEqual(entry["status"], "EVALUATION_IN_PROGRESS")
self.assertEqual(entry["user_email"], "admin")
update_assignment_completion(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
completion_data={},
completion_status=AssignmentCompletionStatus.EVALUATION_SUBMITTED,
evaluation_user=self.trainer,
evaluation_points=16,
)
ac = AssignmentCompletion.objects.get(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
)
# will create submission_history entry
submission_history = ac.additional_json_data.get("submission_history", [])
self.assertEqual(len(submission_history), 3)
entry = submission_history[2]
self.assertEqual(entry["status"], "EVALUATION_SUBMITTED")
self.assertEqual(entry["user_email"], "admin")
self.assertEqual(ac.completion_status, "EVALUATION_SUBMITTED")
self.assertEqual(ac.evaluation_points, 16)
self.assertEqual(ac.evaluation_max_points, 24)
self.assertTrue(ac.evaluation_passed)
trainer_input = ac.completion_data[evaluation_task["id"]]
self.assertDictEqual(
trainer_input["expert_data"],
{"points": 2, "text": "Gut gemacht. Ich musste es noch einmal anschauen."},
)
user_input = ac.completion_data[user_text_input["id"]]
self.assertDictEqual(
user_input["user_data"], {"text": "Ich würde nichts weiteres empfehlen."}
)
# it will have created another AssignmentCompletionAuditLog entry
acl_qs = AssignmentCompletionAuditLog.objects.filter(
assignment_user=self.user,
assignment=self.assignment,
course_session=self.course_session,
completion_status="EVALUATION_SUBMITTED",
)
self.assertEqual(acl_qs.count(), 2)

View File

@ -6,7 +6,11 @@ from django.contrib.auth.hashers import make_password
from django.db import connection from django.db import connection
from django.utils import timezone from django.utils import timezone
from vbv_lernwelt.assignment.models import Assignment, AssignmentCompletion from vbv_lernwelt.assignment.models import (
Assignment,
AssignmentCompletion,
AssignmentCompletionAuditLog,
)
from vbv_lernwelt.competence.models import PerformanceCriteria from vbv_lernwelt.competence.models import PerformanceCriteria
from vbv_lernwelt.core.constants import ( from vbv_lernwelt.core.constants import (
TEST_COURSE_SESSION_BERN_ID, TEST_COURSE_SESSION_BERN_ID,
@ -183,6 +187,7 @@ def command(
CourseCompletion.objects.all().delete() CourseCompletion.objects.all().delete()
Notification.objects.all().delete() Notification.objects.all().delete()
AssignmentCompletion.objects.all().delete() AssignmentCompletion.objects.all().delete()
AssignmentCompletionAuditLog.objects.all().delete()
FeedbackResponse.objects.all().delete() FeedbackResponse.objects.all().delete()
CourseSessionAttendanceCourse.objects.all().update(attendance_user_list=[]) CourseSessionAttendanceCourse.objects.all().update(attendance_user_list=[])

View File

@ -291,8 +291,8 @@ class CourseSessionObjectType(DjangoObjectType):
_add_course_session_user(rel.participant) _add_course_session_user(rel.participant)
if self.course.configuration.is_uk: if self.course.configuration.is_uk:
# happy path, members and experts
if me_csu: if me_csu:
# VBV-708: Teilnehmer und Trainer haben Zugriff auf alle Teilnehmer im Ük
for course_session_user in CourseSessionUser.objects.filter( for course_session_user in CourseSessionUser.objects.filter(
course_session_id=self.id course_session_id=self.id
).distinct(): ).distinct():
@ -300,38 +300,29 @@ class CourseSessionObjectType(DjangoObjectType):
user.id for user in course_session_users_resolved user.id for user in course_session_users_resolved
]: ]:
_add_course_session_user(course_session_user) _add_course_session_user(course_session_user)
else: elif CourseSessionGroup.objects.filter(
# VBV-708: user has only "AgentParticipantRole" and is not in the list of users supervisor=info.context.user, course_session=self
for rel in AgentParticipantRelation.objects.filter( ).exists():
participant__course_session=self, agent=info.context.user # VBV-708: Supervisor (Regionenleiter) has access to all users and circles
): for course_session_user in CourseSessionUser.objects.filter(
if rel.participant_id not in [ course_session_id=self.id
).distinct():
if course_session_user.id not in [
user.id for user in course_session_users_resolved user.id for user in course_session_users_resolved
]: ]:
_add_course_session_user(rel.participant) _add_course_session_user(course_session_user)
# workaround for supervisor
# add supervisor to the list of users (as expert)
course_session_id = self.id # noqa
user = info.context.user # noqa
if CourseSessionGroup.objects.filter(
course_session=course_session_id, supervisor=user
).exists():
if course_session := CourseSession.objects.filter(
id=course_session_id
).first():
circles = ( circles = (
course_session.course.get_learning_path() self.course.get_learning_path()
.get_descendants() .get_descendants()
.live() .live()
.specific() .specific()
.exact_type(Circle) .exact_type(Circle)
) )
user = info.context.user
course_session_users_resolved.append( course_session_users_resolved.append(
CourseSessionUserObjectsType( CourseSessionUserObjectsType(
id=f"{user.id}-as-ephemeral-supervisor", # noqa id=f"{user.id}-{self.id}-as-ephemeral-supervisor", # noqa
user_id=user.id, # noqa user_id=user.id, # noqa
first_name=user.first_name, # noqa first_name=user.first_name, # noqa
last_name=user.last_name, # noqa last_name=user.last_name, # noqa
@ -348,29 +339,14 @@ class CourseSessionObjectType(DjangoObjectType):
], ],
) )
) )
else:
# VBV-708: user has only "AgentParticipantRole" and is not in the list of users
for rel in AgentParticipantRelation.objects.filter(
participant__course_session=self, agent=info.context.user
):
if rel.participant_id not in [
user.id for user in course_session_users_resolved
]:
_add_course_session_user(rel.participant)
return course_session_users_resolved return course_session_users_resolved
def _add_course_session_user(
self, course_session_user, course_session_users_resolved
):
course_session_users_resolved.append(
CourseSessionUserObjectsType(
id=course_session_user.id, # noqa
user_id=course_session_user.user.id, # noqa
first_name=course_session_user.user.first_name, # noqa
last_name=course_session_user.user.last_name, # noqa
email=course_session_user.user.email, # noqa
avatar_url=course_session_user.user.avatar_url, # noqa
role=course_session_user.role, # noqa
circles=[ # noqa
CourseSessionUserExpertCircleType( # noqa
id=circle.id, # noqa
title=circle.title, # noqa
slug=circle.slug, # noqa
)
for circle in course_session_user.expert.all() # noqa
],
optional_attendance=course_session_user.optional_attendance, # noqa
)
)