From f2438f6d5713ae176e4a78810f22149ca524d3ee Mon Sep 17 00:00:00 2001
From: Christian Cueni Un tuo amico/una tua amica o un tuo/una tua familiare vorrebbe sottoporre a verifica la propria polizza
+ assicurativa. Sapendo che conosci bene il ramo assicurativo, te la mostra chiedendoti di verificarla con sguardo
+ critico e di proporre eventualmente qualche modifica. In questo compito di controllo delle competenze puoi dare
+ prova delle tue conoscenze e capacità nel settore dell’assicurazione veicoli a motore.
+
Una volta eseguita, l’operazione non potrà più essere annullata.",
+ "expertDescription": "Fornisci ai tuoi allievi e alle tue allieve contenuti aggiuntivi.",
+ "fileLabel": "File",
+ "maxFileSize": "Dimensioni massime del file: 20 MB",
+ "modalAction": "Selezionare il file",
+ "modalFileName": "Nome",
+ "modalNameInformation": "Max. 70 caratteri",
+ "selectFile": "Seleziona un file",
+ "title": "Documenti",
+ "trainerDescription": "Trova contenuti aggiuntivi per la tua lezione su Teams.",
+ "trainerLinkSrc": "https://vbvbern.sharepoint.com/sites/myVBV-AFA_K-CI",
+ "trainerLinkText": "Visualizzare i contenuti su Teams",
+ "trainerTitle": "Supporto per trainer",
+ "uploadErrorMessage": "Si è verificato un errore durante il caricamento. Riprova.",
+ "userDescription": "Qui trovi ulteriori documenti che ti supporteranno nell’apprendimento in questo Circle."
+ },
+ "duration": "Durata",
+ "gotQuestions": "Hai domande?",
+ "learnMore": "Ottieni maggiori informazioni"
+ },
+ "cockpit": {
+ "examsDone": "Esami sostenuti dal/dalla partecipante.",
+ "feedbacksDone": "Feedback inviati dal/dalla partecipante.",
+ "notifyTask": "Inviare notifica",
+ "notifyTaskDescription": "Inviare notifica al/alla partecipante",
+ "profileLink": "Mostrare il profilo",
+ "progress": "Partecipanti / Stato",
+ "tasksDone": "Incarichi di trasferimento completati dal/dalla partecipante.",
+ "title": "Cockpit"
+ },
+ "competences": {
+ "assessAgain": "Nuova auto-valutazione",
+ "assessment": "Valutazioni",
+ "competences": "Competenze",
+ "lastImprovements": "Ultime competenze migliorate",
+ "notAssessed": "Non valutato",
+ "title": "Navigatore Competenze"
+ },
+ "constants": {
+ "no": "No",
+ "satisfied": "soddisfatto/a",
+ "unsatisfied": "insoddisfatto/a",
+ "verySatisfied": "molto soddisfatto/a",
+ "veryUnsatisfied": "molto insoddisfatto/a",
+ "yes": "Sì"
+ },
+ "dashboard": {
+ "courses": "Corso",
+ "nocourses": "Non sei ancora stato/a assegnato/a a nessun corso.",
+ "welcome": "Ti diamo il benvenuto, {name}"
+ },
+ "feedback": {
+ "answers": "Risposte",
+ "areYouSatisfied": "Quanto sei soddisfatto/a?",
+ "average": "Media",
+ "circleFeedback": "Feedback sul Circle",
+ "completionDescription": "Il tuo feedback è anonimo. Il/La trainer non visualizzerà il tuo nome e cognome.",
+ "completionTitle": "Invia il tuo feedback a {name}",
+ "courseNegativeFeedbackLabel": "Dove vedi un potenziale di miglioramento?",
+ "coursePositiveFeedbackLabel": "Cos’hai apprezzato particolarmente?",
+ "feedbackPageInfo": "I/Le partecipanti hanno fornito il feedback",
+ "feedbackPageTitle": "Feedback sul corso",
+ "feedbackSent": "Il tuo feedback è stato inviato",
+ "goalAttainmentLabel": "Raggiungimento complessivo degli obiettivi",
+ "happy": "Soddisfatto/a",
+ "instructorCompetenceLabel": "Come valuti il livello di preparazione sui temi e le competenze specialistiche dell’istruttore/istruttrice del corso?",
+ "instructorOpenFeedbackLabel": "Cos’altro vorresti ancora dire all’istruttore/istruttrice del corso?",
+ "instructorRespectLabel": "Le domande e i suggerimenti dei/delle partecipanti al corso sono stati accolti e presi sul serio?",
+ "intro": "{name}, il tuo/la tua trainer ti invita a fornire un feedback su di lui/lei. È facoltativo, ma sarebbe utile per migliorare la tua esperienza di apprendimento.",
+ "materialsRatingLabel": "Se sì: qual è la valutazione dei documenti di preparazione (ad es. eLearning)?",
+ "noFeedbacks": "Non è stato fornito ancora nessun feedback",
+ "preparationTaskClarityLabel": "Gli incarichi di preparazione erano chiari e comprensibili?",
+ "proficiencyLabel": "Come valuti il tuo livello di preparazione sui temi dopo il corso?",
+ "questionTitle": "Domanda",
+ "recommendLabel": "Raccomanderesti il corso?",
+ "satisfactionLabel": "Soddisfazione complessiva",
+ "sendFeedback": "Inviare il feedback",
+ "sentByUsers": "Fornito da {count} partecipanti",
+ "showDetails": "Mostrare i dettagli",
+ "unhappy": "Insoddisfatto/a",
+ "veryHappy": "Molto soddisfatto/a",
+ "veryUnhappy": "Molto insoddisfatto/a"
+ },
+ "footer": {
+ "contact": "Contatti",
+ "contactLink": "https://www.vbv.ch/it/afa/organizzazione/contatto",
+ "contactText": "Contatti",
+ "copyright": "© 2023 AFA",
+ "dataProtectionLink": "https://www.vbv.ch/it/dichiarazione-di-protezione-dei-dati",
+ "dataProtectionText": "Dichiarazione sulla protezione dei dati",
+ "imprintLink": "https://www.vbv.ch/it/impressum",
+ "imprintText": "Impressum"
+ },
+ "general": {
+ "back": "Indietro",
+ "backCapitalized": "@.capitalize:general.back",
+ "backToCircle": "Torna al Circle",
+ "backToLearningPath": "Torna al percorso formativo",
+ "certificate": "Certificato | Certificati",
+ "circles": "Circle",
+ "close": "Chiudere",
+ "exam": "Esame| Esami",
+ "examResult": "Risultato dell’esame | Risultati degli esami",
+ "feedback": "Feedback | Feedback",
+ "introduction": "Introduzione",
+ "learningPath": "Percorso formativo",
+ "learningSequence": "Sequenza di apprendimento",
+ "learningUnit": "Unità di apprendimento",
+ "next": "Avanti",
+ "nextStep": "Continua",
+ "no": "No",
+ "notification": "Notifica | Notifiche",
+ "profileLink": "Mostrare i dettagli",
+ "save": "Salvare",
+ "send": "Inviare",
+ "settings": "Impostazioni account",
+ "shop": "Shop",
+ "show": "Visualizzare",
+ "showAll": "Visualizzare tutto",
+ "start": "Si comincia",
+ "submission": "Consegna",
+ "title": "myAFA",
+ "transferTask": "Incarico di trasferimento | Incarichi di trasferimento",
+ "yes": "Sì"
+ },
+ "language": {
+ "de": "Deutsch",
+ "fr": "Français",
+ "it": "Italiano"
+ },
+ "learningContent": {
+ "markAsDone": "Contrassegnare come completato"
+ },
+ "learningPathPage": {
+ "currentCircle": "Circle attuale",
+ "listView": "Vista elenco",
+ "nextStep": "Prossimo passo",
+ "pathView": "Vista percorso",
+ "progressText": "Hai svolto { inProgressCount } Circle su { allCount }",
+ "showListView": "Mostrare la vista elenco",
+ "topics": "Temi:",
+ "welcomeBack": "Bentornato/a al tuo corso:"
+ },
+ "mainNavigation": {
+ "logout": "Logout",
+ "profile": "Profilo"
+ },
+ "mediaLibrary": {
+ "handlungsfelder": {
+ "description": "Trova tutte le risorse dei campi d’azione, come materiali didattici, link e altre informazioni utili.",
+ "title": "Campo d’azione | Campi d’azione"
+ },
+ "learningMedia": {
+ "description": "Trova un elenco completo di libri e altri materiali a cui si rimanda nel corso.",
+ "titel": "Materiali didattici"
+ },
+ "title": "Mediateca"
+ },
+ "messages": {
+ "sendMessage": "Scrivere un messaggio"
+ },
+ "notifications": {
+ "load_more": "Caricare altro",
+ "no_notifications": "Al momento non hai nessuna notifica"
+ },
+ "selfEvaluation": {
+ "instruction": [
+ "Überprüfe, ob du in der Lernheinheit",
+ "alles verstanden hast.",
+ "Lies die folgende Aussage und bewerte sie:"
+ ],
+ "no": "Devo riguardarlo ancora una volta",
+ "progressLink": "Aprire Navigatore Competenze",
+ "progressText": "Controlla i tuoi progressi nel Navigatore Competenze:",
+ "selfEvaluation": "Auto-valutazione",
+ "selfEvaluationNo": "@:selfEvaluation: Devo riguardarlo ancora una volta.",
+ "selfEvaluationYes": "@:selfEvaluation: Ho compreso tutto.",
+ "steps": "Passo {current} di {max}",
+ "title": "@:selfEvaluation.selfEvaluation {title}",
+ "yes": "Sì, ho compreso tutto"
+ },
+ "settings": {
+ "emailNotifications": "Notifiche e-mail"
+ }
+}
diff --git a/server/vbv_lernwelt/assignment/creators/create_assignments.py b/server/vbv_lernwelt/assignment/creators/create_assignments.py
index c69d043a..8c74555d 100644
--- a/server/vbv_lernwelt/assignment/creators/create_assignments.py
+++ b/server/vbv_lernwelt/assignment/creators/create_assignments.py
@@ -943,6 +943,478 @@ def create_uk_fr_fahrzeug_casework(course_id=COURSE_UK_FR):
return assignment
+def create_uk_it_fahrzeug_casework(course_id=COURSE_UK_FR):
+ assignment_list_page = (
+ CoursePage.objects.get(course_id=course_id)
+ .get_children()
+ .exact_type(AssignmentListPage)
+ .first()
+ )
+
+ assignment = AssignmentFactory(
+ parent=assignment_list_page,
+ title="Verifica di una polizza di assicurazione veicoli a motore",
+ effort_required="Circa 3 ore",
+ intro_text=replace_whitespace(
+ """
+ Situazione di partenza
+
+
+ """
+ )
+ ),
+ points=6,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="La situazione di partenza è stata descritta in larga misura in modo completo.",
+ points=4,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="La situazione di partenza è incompleta: sono stati descritti solo due punti.",
+ points=2,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="La situazione di partenza dell’incarico è incompleta: nella descrizione mancano più di due punti.",
+ points=0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ )
+ assignment.evaluation_tasks.append(
+ (
+ "task",
+ EvaluationTaskBlockFactory(
+ title="Analisi contenutistica e struttura",
+ max_points=6,
+ description=RichText(
+ "Le coperture della polizza sono state documentate in modo chiaro e completo?"
+ ),
+ sub_tasks=ListValue(
+ ListBlock(EvaluationSubTaskBlock()),
+ values=[
+ EvaluationSubTaskBlockFactory(
+ title="L’analisi contiene tutte le coperture presenti nella polizza ed è ben strutturata.",
+ points=6,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="L’analisi contiene la maggior parte delle coperture presenti nella polizza ed è in larga misura ben strutturata.",
+ points=4,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="L’analisi è incompleta (mancano più di tre coperture) e non emerge un filo conduttore.",
+ points=2,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="Nel complesso l’analisi non è chiara e mancano alcune coperture.",
+ points=0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ )
+ assignment.evaluation_tasks.append(
+ (
+ "task",
+ EvaluationTaskBlockFactory(
+ title="Raccomandazioni utili",
+ max_points=6,
+ description=RichText(
+ "L’apprendista ha ricavato raccomandazioni utili e appropriate?"
+ ),
+ sub_tasks=ListValue(
+ ListBlock(EvaluationSubTaskBlock()),
+ values=[
+ EvaluationSubTaskBlockFactory(
+ title="Le raccomandazioni sono utili e motivate con chiarezza.",
+ points=6,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="Le raccomandazioni sono in larga misura utili e motivate con chiarezza.",
+ points=4,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="Le raccomandazioni non sono di grande utilità e sono motivate in modo incompleto.",
+ points=2,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="Le raccomandazioni non sono né utili né motivate con chiarezza.",
+ points=0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ )
+ assignment.evaluation_tasks.append(
+ (
+ "task",
+ EvaluationTaskBlockFactory(
+ title="Qualità della riflessione",
+ max_points=3,
+ description=RichText(
+ "L’apprendista ha riflettuto sullo svolgimento dell’analisi guidata del caso?"
+ ),
+ sub_tasks=ListValue(
+ ListBlock(EvaluationSubTaskBlock()),
+ values=[
+ EvaluationSubTaskBlockFactory(
+ title="La riflessione si riferisce all’analisi guidata del caso e include aspetti positivi e negativi illustrati con chiarezza.",
+ points=3,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="La riflessione si riferisce all’analisi guidata del caso e include in larga misura aspetti positivi e negativi illustrati con chiarezza.",
+ points=2,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="La riflessione è incompleta.",
+ points=1,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="La riflessione non si riferisce al caso di studio guidato.",
+ points=0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ )
+ assignment.evaluation_tasks.append(
+ (
+ "task",
+ EvaluationTaskBlockFactory(
+ title="doneità degli insegnamenti",
+ max_points=3,
+ description=RichText(
+ "L’apprendista ha tratto insegnamenti idonei dalla riflessione?"
+ ),
+ sub_tasks=ListValue(
+ ListBlock(EvaluationSubTaskBlock()),
+ values=[
+ EvaluationSubTaskBlockFactory(
+ title="Gli insegnamenti si riferiscono al caso di studio guidato e si rivelano utili.",
+ points=3,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="Gli insegnamenti si riferiscono in larga misura al caso di studio guidato e si rivelano utili.",
+ points=2,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="Gli insegnamenti si riferiscono solo in parte all’analisi guidata del caso e non si rivelano molto utili.",
+ points=1,
+ ),
+ EvaluationSubTaskBlockFactory(
+ title="Gli insegnamenti non si riferiscono al caso di studio guidato.",
+ points=0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ )
+
+ assignment.tasks = []
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Sottocompito 1: Trovare un’esempio di una polizza assicurativa",
+ # it is hard to create a StreamValue programmatically, we have to
+ # create a `StreamValue` manually. Ask Daniel and/or Ramon
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Chiedi a un amico/un’amica o a un/una familiare di fornirti la sua polizza di assicurazione veicoli a motore."
+ )
+ ),
+ ),
+ (
+ "user_confirmation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Sì, ho ricevuto una polizza assicurativa auto da qualcuno della mia famiglia o cerchia di amici."
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Sottocompito 2: Situazione del cliente e situazione iniziale",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ replace_whitespace(
+ """
+ Illustra il caso del/della cliente e la situazione iniziale.
+
+
+ """
+ )
+ )
+ ),
+ ),
+ ("user_text_input", UserTextInputBlockFactory()),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Sottocompito 3: Assicurazione attuale",
+ # TODO: add document upload
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Mostra ora in dettaglio l’attuale situazione assicurativa del tuo/della tua cliente."
+ )
+ ),
+ ),
+ ("user_text_input", UserTextInputBlockFactory()),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Sottocompito 4: Le tue raccomandazioni",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Sulla base delle informazioni raccolte, elabora ora una raccomandazione."
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Consiglieresti al/alla cliente di stipulare coperture complementari? Motiva la tua raccomandazione."
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Elimineresti qualche copertura? Motiva la tua raccomandazione."
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Quando hai terminato il lavoro, spiega perché con la tua proposta il/la cliente beneficia di un’assicurazione ottimale."
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Sottocompito 5: Riflessione",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Rifletti sul lavoro svolto e annotati le informazioni finora acquisite. Domandati:"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Ho affrontato bene questo caso di studio guidato? Motiva la tua valutazione."
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Cosa ha funzionato durante lo svolgimento di questo incarico?"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Cosa non ha funzionato durante lo svolgimento di questo incarico?"
+ )
+ ),
+ ),
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Annotati tutte queste informazioni e caricale sulla piattaforma di apprendimento per sottoporle a valutazione."
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ assignment.tasks.append(
+ (
+ "task",
+ TaskBlockFactory(
+ title="Sottocompito 6: Apprendimenti",
+ content=StreamValue(
+ TaskContentStreamBlock(),
+ stream_data=[
+ (
+ "explanation",
+ ExplanationBlockFactory(
+ text=RichText(
+ "Trai i tuoi insegnamenti personali dall’compito parziale 5"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Cosa cambieresti nel tuo approccio se potessi ripetere l’esperienza?"
+ )
+ ),
+ ),
+ (
+ "user_text_input",
+ UserTextInputBlockFactory(
+ text=RichText(
+ "Cos’hai imparato di nuovo dall’elaborazione dell’incarico?"
+ )
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ )
+
+ # assignment.tasks.append(
+ # (
+ # "task",
+ # TaskBlockFactory(
+ # title="Compito parziale 7",
+ # content=StreamValue(
+ # TaskContentStreamBlock(),
+ # stream_data=[
+ # (
+ # "explanation",
+ # ExplanationBlockFactory(
+ # text=RichText(
+ # "Redigi un documento chiaro e ben strutturato e presentalo entro la scadenza."
+ # )
+ # ),
+ # ),
+ # ],
+ # ),
+ # ),
+ # )
+ # )
+
+ assignment.save()
+
+ return assignment
+
+
def create_uk_fahrzeug_prep_assignment(course_id=COURSE_UK_FR):
assignment_list_page = (
CoursePage.objects.get(course_id=course_id)
@@ -1280,7 +1752,7 @@ def create_uk_fr_fahrzeug_prep_assignment(course_id=COURSE_UK):
Situation de travail 4 : Conseiller les clients et s’occuper des processus correspondants
+ Competenza operativa d2: condurre colloqui informativi e di consulenza con la clientela o i fornitori
+ Situazione di lavoro 4: fornire consulenza alla clientela e gestire i relativi processi
+
+ Competenza operativa e4: preparare a livello multimediale contenuti riferiti all’azienda
+ Situazione di lavoro 1: integrare le caratteristiche del settore e i punti di forza dell’azienda
+
+ Fai finta di aver appena superato l’esame di guida e di poterti finalmente spostare in autonomia. + Quale sarà la tua prima auto? Naturalmente vuoi anche proteggerla e assicurarla come si deve. +
+ """ + ), + performance_objectives=[], + ) + + assignment.tasks = [] + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Sottocompito 1: Ottieni una panoramica iniziale dell'argomento", + # it is hard to create a StreamValue programmatically, we have to + # create a `StreamValue` manually. Ask Daniel and/or Ramon + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "explanation", + ExplanationBlockFactory( + text=RichText( + 'Fatti una prima idea dell’argomento. Guarda il seguente video: Come funziona un’assicurazione auto? – I punti chiave' + ) + ), + ), + ( + "user_confirmation", + ExplanationBlockFactory( + text=RichText("Sì, ho visto il video e ho capito.") + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Sottocompito 2: Leggere il capitolo “Il diritto della responsabilità civile e L’assicurazione dei veicoli a motore”", + # it is hard to create a StreamValue programmatically, we have to + # create a `StreamValue` manually. Ask Daniel and/or Ramon + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "explanation", + ExplanationBlockFactory( + text=RichText( + "Leggi e studia i capitoli inerenti all’argomento nel libro Diritto della responsabilità civile e assicurazione veicoli a motore." + ) + ), + ), + ( + "user_confirmation", + ExplanationBlockFactory( + text=RichText("Sì, ho letto e compreso il capitolo.") + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Sottocompito 3: Creare un’offerta", + # it is hard to create a StreamValue programmatically, we have to + # create a `StreamValue` manually. Ask Daniel and/or Ramon + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "explanation", + ExplanationBlockFactory( + text=RichText( + replace_whitespace( + """ +Ora si comincia! Redigi un’offerta per la tua prima auto. Rifletti sulle coperture assolutamente indispensabili e su quelle che vorresti stipulare in aggiunta. + Per farlo, utilizza l’apposito strumento messo a disposizione dalla tua azienda. In alternativa puoi anche avvalerti di uno strumento online.
++ Potresti dover «ritoccare» un po’ il tuo anno di nascita per poter redigere un’offerta destinata a te. +
+ """ + ) + ) + ), + ), + ( + "user_confirmation", + ExplanationBlockFactory( + text=RichText("Sì, ho fatto un'offerta.") + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Sottocompito 4: Note e domande", + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "explanation", + ExplanationBlockFactory( + text=RichText( + "Durante il processo prendi appunti rispondendo alle seguenti domande:" + ) + ), + ), + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Quali passaggi hai seguito per redigere l’offerta?" + ) + ), + ), + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Quali difficoltà hai incontrato nel redigere l’offerta? Come le hai risolte?" + ) + ), + ), + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Quali dati sono assolutamente necessari per poter redigere un’offerta accurata riguardante un veicolo a motore?" + ) + ), + ), + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Quali ulteriori coperture hai scelto? Quali sono state le tue considerazioni in merito?" + ) + ), + ), + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Quali sono i fattori/gli elementi che determinano in misura maggiore l’ammontare del premio?" + ) + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Sottocompito 5: Formazione di presenza", + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "explanation", + ExplanationBlockFactory( + text=RichText( + "Porta l’offerta e gli appunti al training in presenza.
" + "Non dimenticare le relative CGA. Va bene anche se porti con te i documenti solo in formato elettronico.
" + ) + ), + ), + ], + ), + ), + ) + ) + + assignment.save() + + return assignment + + def create_uk_kickoff_prep_assignment(course_id=COURSE_UK): assignment_list_page = ( CoursePage.objects.get(course_id=course_id) @@ -2276,6 +2982,159 @@ def create_uk_fr_reflection(course_id=COURSE_UK_FR, circle_title="Véhicule"): return assignment +def create_uk_it_reflection(course_id=COURSE_UK_FR, circle_title="Véhicule"): + assignment_list_page = ( + CoursePage.objects.get(course_id=course_id) + .get_children() + .exact_type(AssignmentListPage) + .first() + ) + + assignment = AssignmentFactory( + parent=assignment_list_page, + assignment_type=AssignmentType.REFLECTION.name, + title=f"Reflexion", + effort_required="", + intro_text=replace_whitespace( + """ ++ Tu as reçu beaucoup de nouveaux contenus et d'inputs dans ce Circle. Il est maintenant temps de jeter à nouveau un coup d'œil sur ton profil de compétences. Répondre aux questions de réflexion t'aide à rendre visible et compréhensible ton propre processus d'apprentissage et de réflexion. Elle met en évidence tes forces et tes faiblesses personnelles pendant l'élaboration et t'aide à t'améliorer en permanence. +
+ """ + ), + performance_objectives=[], + ) + + assignment.tasks = [] + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Question 1: Qu'est-ce que je réussis déjà bien?", + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "user_text_input", + UserTextInputBlockFactory(), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Question 2: Approfondissment", + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Où dois-je encore approfondir ou répéter? " + ) + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Question 3: Qu'est-ce que je retiens?", + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "user_text_input", + UserTextInputBlockFactory(), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Question 4: Préparation", + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Comment me suis-je préparé(e) au Cercle (par ex. en prévoyant du temps d'étude)?" + ) + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Question 5: Cours de présence", + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Quel a été mon degré d'engagement dans les cours de présence?" + ) + ), + ), + ], + ), + ), + ) + ) + + assignment.tasks.append( + ( + "task", + TaskBlockFactory( + title="Question 6: Amélioration", + content=StreamValue( + TaskContentStreamBlock(), + stream_data=[ + ( + "user_text_input", + UserTextInputBlockFactory( + text=RichText( + "Qu'est-ce que je veux changer/améliorer dans le processus d'apprentissage pour le prochain Circle?" + ) + ), + ), + ], + ), + ), + ) + ) + + assignment.save() + + return assignment + + def create_uk_it_reflection(course_id=COURSE_UK_FR, circle_title="Véhicule"): assignment_list_page = ( CoursePage.objects.get(course_id=course_id) diff --git a/server/vbv_lernwelt/competence/create_uk_competence_profile.py b/server/vbv_lernwelt/competence/create_uk_competence_profile.py index 09996f09..a70e3cf9 100644 --- a/server/vbv_lernwelt/competence/create_uk_competence_profile.py +++ b/server/vbv_lernwelt/competence/create_uk_competence_profile.py @@ -4,7 +4,7 @@ from vbv_lernwelt.competence.factories import ( PerformanceCriteriaFactory, ) from vbv_lernwelt.competence.models import CompetencePage -from vbv_lernwelt.course.consts import COURSE_UK, COURSE_UK_FR +from vbv_lernwelt.course.consts import COURSE_UK, COURSE_UK_FR, COURSE_UK_IT from vbv_lernwelt.course.models import CoursePage from vbv_lernwelt.learnpath.models import LearningPath, LearningUnit @@ -281,7 +281,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="c3.pv.ci2", title="Je suis capable de d'expliquer les fondements légaux applicables dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -291,7 +291,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="c3.pv.ci7", title="Je suis capable de d'expliquer les dispositions légales en cas de sinistres et de versement de prestations dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -301,7 +301,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="c3.pv.ci11", title="Je suis capable de d'évaluer de manière compétente les solutions d’assurance courantes dans le domaine d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -311,7 +311,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="d2.pv.ci1", title="Je suis capable de décrire de manière complète les principales bases légales dans le domaine de l'assurance des véhicules à moteur.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -321,7 +321,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="d2.pv.ci2", title="Je suis capable de citer les prestations de service et les produits pertinents dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -331,7 +331,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="d2.pv.ci3", title="Je suis capable de d'expliquer les services et les produits dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -341,7 +341,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="d2.pv.ci4", title="Je suis capable de d'expliquer de manière compréhensible les processus et procédures dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -351,7 +351,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="e4.pv.ci1", title="Je suis capable de d'expliquer les services de l'entreprise dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -361,7 +361,7 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="e4.pv.ci2", title="Je suis capable de de distinguer les concurrents dans le secteur des assurances privées dans le champ d'action des véhicules à l'aide des critères pertinents.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -371,6 +371,159 @@ def create_uk_fr_competence_profile(course_id=COURSE_UK_FR): competence_id="e4.pv.ci4", title="Je suis capable de d'expliquer les principes sur lesquelles reposent les produits d'assurance automobile.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" + ), + ) + + +def create_uk_it_competence_profile(course_id=COURSE_UK_IT): + course_page = CoursePage.objects.get(course_id=course_id) + slug_prefix = course_page.get_children().exact_type(LearningPath).first().slug + + competence_profile_page = CompetenceProfilePageFactory( + title="KompetenzNavi", + parent=course_page, + ) + + competences = [ + { + "competence_id": "e4", + "title": "Betriebsbezogene Inhalte multimedial aufbereiten", + "items": [], + }, + { + "competence_id": "c3", + "title": "Betriebliche Prozesse dokumentieren, koordinieren und umsetzen", + "items": [], + }, + { + "competence_id": "e2", + "title": "Informationen im wirtschaftlichen und kaufmännischen Bereich recherchieren", + "items": [], + }, + { + "competence_id": "d2", + "title": "Informations- und Beratungsgespräche mit Kunden oder Lieferanten führen", + "items": [], + }, + { + "competence_id": "d3", + "title": "Betriebliche Prozesse dokumentieren, koordinieren und umsetzen", + "items": [], + }, + { + "competence_id": "d1", + "title": "Anliegen von Kunden oder Lieferanten entgegennehmen", + "items": [], + }, + ] + + for c in competences: + CompetencePageFactory( + parent=competence_profile_page, + competence_id=c["competence_id"], + title=c["title"], + items=[("item", i) for i in c["items"]], + ) + + # Circle Fahrzeug + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ci2", + title="Je suis capable de d'expliquer les fondements légaux applicables dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ci7", + title="Je suis capable de d'expliquer les dispositions légales en cas de sinistres et de versement de prestations dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ci11", + title="Je suis capable de d'évaluer de manière compétente les solutions d’assurance courantes dans le domaine d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ci1", + title="Je suis capable de décrire de manière complète les principales bases légales dans le domaine de l'assurance des véhicules à moteur.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ci2", + title="Je suis capable de citer les prestations de service et les produits pertinents dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ci3", + title="Je suis capable de d'expliquer les services et les produits dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ci4", + title="Je suis capable de d'expliquer de manière compréhensible les processus et procédures dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ci1", + title="Je suis capable de d'expliquer les services de l'entreprise dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ci2", + title="Je suis capable de de distinguer les concurrents dans le secteur des assurances privées dans le champ d'action des véhicules à l'aide des critères pertinents.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ci4", + title="Je suis capable de d'expliquer les principes sur lesquelles reposent les produits d'assurance automobile.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" ), ) diff --git a/server/vbv_lernwelt/competence/create_uk_training_competence_profile.py b/server/vbv_lernwelt/competence/create_uk_training_competence_profile.py index 458ce705..fbf81220 100644 --- a/server/vbv_lernwelt/competence/create_uk_training_competence_profile.py +++ b/server/vbv_lernwelt/competence/create_uk_training_competence_profile.py @@ -220,7 +220,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="c3.pv.ci2", title="Je suis capable de d'expliquer les fondements légaux applicables dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -230,7 +230,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="c3.pv.ci7", title="Je suis capable de d'expliquer les dispositions légales en cas de sinistres et de versement de prestations dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -240,7 +240,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="c3.pv.ci11", title="Je suis capable de d'évaluer de manière compétente les solutions d’assurance courantes dans le domaine d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -250,7 +250,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="d2.pv.ci1", title="Je suis capable de décrire de manière complète les principales bases légales dans le domaine de l'assurance des véhicules à moteur.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -260,7 +260,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="d2.pv.ci2", title="Je suis capable de citer les prestations de service et les produits pertinents dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -270,7 +270,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="d2.pv.ci3", title="Je suis capable de d'expliquer les services et les produits dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -280,7 +280,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="d2.pv.ci4", title="Je suis capable de d'expliquer de manière compréhensible les processus et procédures dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -290,7 +290,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="e4.pv.ci1", title="Je suis capable de d'expliquer les services de l'entreprise dans le champ d'action des véhicules.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -300,7 +300,7 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="e4.pv.ci2", title="Je suis capable de de distinguer les concurrents dans le secteur des assurances privées dans le champ d'action des véhicules à l'aide des critères pertinents.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" ), ) PerformanceCriteriaFactory( @@ -310,6 +310,159 @@ def create_uk_fr_training_competence_profile(course_id=COURSE_UK): competence_id="e4.pv.ci4", title="Je suis capable de d'expliquer les principes sur lesquelles reposent les produits d'assurance automobile.", learning_unit=LearningUnit.objects.get( - slug=f"{slug_prefix}-circle-véhicule-lu-vorbereitung" + slug=f"{slug_prefix}-circle-véhicule-lu-préparation" + ), + ) + + +def create_uk_it_training_competence_profile(course_id=COURSE_UK): + course_page = CoursePage.objects.get(course_id=course_id) + slug_prefix = course_page.get_children().exact_type(LearningPath).first().slug + + competence_profile_page = CompetenceProfilePageFactory( + title="KompetenzNavi", + parent=course_page, + ) + + competences = [ + { + "competence_id": "c3", + "title": "Betriebliche Prozesse dokumentieren, koordinieren und umsetzen", + "items": [], + }, + { + "competence_id": "e2", + "title": "Informationen im wirtschaftlichen und kaufmännischen Bereich recherchieren", + "items": [], + }, + { + "competence_id": "e4", + "title": "Betriebsbezogene Inhalte multimedial aufbereiten", + "items": [], + }, + { + "competence_id": "d2", + "title": "Informations- und Beratungsgespräche mit Kunden oder Lieferanten führen", + "items": [], + }, + { + "competence_id": "d3", + "title": "Betriebliche Prozesse dokumentieren, koordinieren und umsetzen", + "items": [], + }, + { + "competence_id": "d1", + "title": "Anliegen von Kunden oder Lieferanten entgegennehmen", + "items": [], + }, + ] + + for c in competences: + print(c["title"]) + CompetencePageFactory( + parent=competence_profile_page, + competence_id=c["competence_id"], + title=c["title"], + items=[("item", i) for i in c["items"]], + ) + # Circle Fahrzeug + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ci2", + title="Je suis capable de d'expliquer les fondements légaux applicables dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ci7", + title="Je suis capable de d'expliquer les dispositions légales en cas de sinistres et de versement de prestations dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="c3" + ), + competence_id="c3.pv.ci11", + title="Je suis capable de d'évaluer de manière compétente les solutions d’assurance courantes dans le domaine d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ci1", + title="Je suis capable de décrire de manière complète les principales bases légales dans le domaine de l'assurance des véhicules à moteur.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ci2", + title="Je suis capable de citer les prestations de service et les produits pertinents dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ci3", + title="Je suis capable de d'expliquer les services et les produits dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="d2" + ), + competence_id="d2.pv.ci4", + title="Je suis capable de d'expliquer de manière compréhensible les processus et procédures dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ci1", + title="Je suis capable de d'expliquer les services de l'entreprise dans le champ d'action des véhicules.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ci2", + title="Je suis capable de de distinguer les concurrents dans le secteur des assurances privées dans le champ d'action des véhicules à l'aide des critères pertinents.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" + ), + ) + PerformanceCriteriaFactory( + parent=CompetencePage.objects.get( + slug__startswith=slug_prefix.replace("-lp", ""), competence_id="e4" + ), + competence_id="e4.pv.ci4", + title="Je suis capable de d'expliquer les principes sur lesquelles reposent les produits d'assurance automobile.", + learning_unit=LearningUnit.objects.get( + slug=f"{slug_prefix}-circle-veicolo-lu-preparazione" ), ) diff --git a/server/vbv_lernwelt/course/consts.py b/server/vbv_lernwelt/course/consts.py index 5960844d..30fe9e57 100644 --- a/server/vbv_lernwelt/course/consts.py +++ b/server/vbv_lernwelt/course/consts.py @@ -5,3 +5,5 @@ COURSE_VERSICHERUNGSVERMITTLERIN_ID = -4 COURSE_UK_FR = -5 COURSE_UK_TRAINING = -6 COURSE_UK_TRAINING_FR = -7 +COURSE_UK_IT = -8 +COURSE_UK_TRAINING_IT = -9 diff --git a/server/vbv_lernwelt/course/creators/uk_circle_goals_it.py b/server/vbv_lernwelt/course/creators/uk_circle_goals_it.py new file mode 100644 index 00000000..a9c38cf9 --- /dev/null +++ b/server/vbv_lernwelt/course/creators/uk_circle_goals_it.py @@ -0,0 +1,45 @@ +UK_IT_CIRCLE_GOALS = { + "fahrzeug": """ +Per molte persone l'auto è il loro più grande orgoglio e gioia. Ma è anche un grande potenziale + di pericolo. Con i prezzi dei veicoli e i costi di riparazione di oggi, si arriva rapidamente a somme considerevoli, + che spesso il proprietario del veicolo ha difficoltà a pagare da solo in caso di sinistro grave. L'assicurazione + dei veicoli a motore serve a proteggere te e gli altri utenti della strada in caso di incidente e a fornire una + protezione finanziaria. Questo Circle ti aiuta a tenere una visione d'insieme della giungla assicurativa dei + veicoli a motore e ad essere sicuri sulla strada!
+In questo Circle, costruirai la tua capacità di agire su questi temi:
+Lavorate sui seguenti obiettivi di valutazione del profilo di qualificazione:
+Sono capace...
+Nella mediateca, sotto il campo d'azione «Veicolo», troverai tutte le risorse rilevanti per le tue competenze professionali.
" + f"Si consiglia di leggere l'argomento prima di completare le altre unità di apprendimento.
" + ), + content_url=f"/course/{course_slug}/media/category/{slugify(title)}", + ) + LearningContentAssignmentFactory( + title="Veicolo, la mia prima auto", + assignment_type="PREP_ASSIGNMENT", + parent=circle, + content_assignment=Assignment.objects.get( + slug__startswith=f"{course_slug}-assignment-veicolo-la-mia-prima-auto" + ), + ), + LearningSequenceFactory(title="Formazione", parent=circle) + LearningUnitFactory(title="Corso di presenza", title_hidden=True, parent=circle) + LearningContentAttendanceCourseFactory( + title="Corso di presenza veicolo", + parent=circle, + ) + LearningContentDocumentListFactory( + title="Documenti", + parent=circle, + documents=[ + # ( + # "document", + # LearnMediaBlockFactory( + # title="Présentation", + # description="", + # icon_url="/static/icons/demo/icon-hf-book.png", + # link_display_text="Afficher le document", + # url="/static/media/uk/fr_üK1_FZ_00_Prгentation.pdf", + # ), + # ), + ( + "document", + LearnMediaBlockFactory( + title="Termini", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Mostra documento", + url="/static/media/uk/it_üK1_FZ_02_Begriffe.pdf", + ), + ), + ( + "document", + LearnMediaBlockFactory( + title="Lista di controllo", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Mostra documento", + url="/static/media/uk/it_üK1_FZ_04_Checkliste.pdf", + ), + ), + ( + "document", + LearnMediaBlockFactory( + title="Scheda sinistri", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Mostra documento", + url="/static/media/uk/it_üK1_FZ_05_A_Schaden.pdf", + ), + ), + ( + "document", + LearnMediaBlockFactory( + title="Panoramica casco", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Mostra documento", + url="/static/media/uk/it_üK1_FZ_07_Kasko.pdf", + ), + ), + ( + "document", + LearnMediaBlockFactory( + title="Offerta e successivo colloquio di vendita", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Mostra documento", + url="/static/media/uk/it_üK1_FZ_08_A_Offerte-und-Verkaufsgespraech.pdf", + ), + ), + ( + "document", + LearnMediaBlockFactory( + title="Riserva scheda sinistri", + description="", + icon_url="/static/icons/demo/icon-hf-book.png", + link_display_text="Mostra documento", + url="/static/media/uk/it_üK1_FZ_A_Reserve_Schaden.pdf", + ), + ), + ], + ) + LearningUnitFactory(title="Feedback", title_hidden=True, parent=circle) + LearningContentFeedbackFactory( + parent=circle, + ) + + LearningSequenceFactory(title="Trasferimento", parent=circle, icon="it-icon-ls-end") + LearningUnitFactory( + title="Controllo delle competenze", title_hidden=True, parent=circle + ) + LearningContentAssignmentFactory( + title="Verifica di una polizza di assicurazione veicoli a motore", + parent=circle, + content_assignment=Assignment.objects.get( + slug__startswith=f"{course_slug}-assignment-verifica-di-una-polizza-di-assicurazione-veicoli-a-motore" + ), + ), + LearningUnitFactory(title="Riflessione", title_hidden=True, parent=circle) + LearningContentAssignmentFactory( + title="Riflessione", + assignment_type="REFLECTION", + parent=circle, + content_assignment=Assignment.objects.get( + slug__startswith=f"{course_slug}-assignment-riflessione" + ), + ), + + UK_CIRCLE_GOALS = { "kickoff": """Hey, willkommen im ersten überbetrieblichen Kurs! Du bist in einer spannenden Branche gelandet. Wir wissen, dass es am Anfang oft eine Herausforderung sein kann, sich in einem neuen Umfeld zurechtzufinden und die vielen neuen Eindrücke zu verarbeiten. Aber keine Sorge, wir sind hier, um dir dabei zu helfen. In deiner Ausbildung wirst du viele neue Fähigkeiten erlernen und dein Wissen vertiefen. In diesem Circle helfen wir dir dabei, den Überblick zu gewinnen und dich mit den neuen Arbeitsabläufen und myVBV vertraut zu machen. Lass uns gemeinsam diese neue Herausforderung meistern und das Beste aus deiner Ausbildung herausholen!
diff --git a/server/vbv_lernwelt/course/creators/uk_training_course.py b/server/vbv_lernwelt/course/creators/uk_training_course.py index 89135f40..ef4449fb 100644 --- a/server/vbv_lernwelt/course/creators/uk_training_course.py +++ b/server/vbv_lernwelt/course/creators/uk_training_course.py @@ -5,10 +5,15 @@ from wagtail.models import Locale, Page, Site from wagtail_localize.models import LocaleSynchronization from vbv_lernwelt.core.admin import User -from vbv_lernwelt.course.consts import COURSE_UK_TRAINING, COURSE_UK_TRAINING_FR +from vbv_lernwelt.course.consts import ( + COURSE_UK_TRAINING, + COURSE_UK_TRAINING_FR, + COURSE_UK_TRAINING_IT, +) from vbv_lernwelt.course.creators.uk_course import ( create_uk_circle_fahrzeug, create_uk_fr_circle_fahrzeug, + create_uk_it_circle_fahrzeug, ) from vbv_lernwelt.course.models import CoursePage from vbv_lernwelt.learnpath.tests.learning_path_factories import ( @@ -44,6 +49,9 @@ def create_uk_training_learning_path( elif course_id == COURSE_UK_TRAINING_FR: TopicFactory(title="Training", is_visible=True, parent=lp) create_uk_fr_circle_fahrzeug(lp) + elif course_id == COURSE_UK_TRAINING_IT: + TopicFactory(title="Training", is_visible=True, parent=lp) + create_uk_it_circle_fahrzeug(lp) # locales if not skip_locales: diff --git a/server/vbv_lernwelt/course/management/commands/create_default_courses.py b/server/vbv_lernwelt/course/management/commands/create_default_courses.py index 3573324c..07ea8409 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -10,6 +10,9 @@ from vbv_lernwelt.assignment.creators.create_assignments import ( create_uk_fr_fahrzeug_casework, create_uk_fr_fahrzeug_prep_assignment, create_uk_fr_reflection, + create_uk_it_fahrzeug_casework, + create_uk_it_fahrzeug_prep_assignment, + create_uk_it_reflection, create_uk_kickoff_prep_assignment, create_uk_reflection, create_vv_einkommenssicherung_casework, @@ -23,9 +26,11 @@ from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentListPag from vbv_lernwelt.competence.create_uk_competence_profile import ( create_uk_competence_profile, create_uk_fr_competence_profile, + create_uk_it_competence_profile, ) from vbv_lernwelt.competence.create_uk_training_competence_profile import ( create_uk_fr_training_competence_profile, + create_uk_it_training_competence_profile, create_uk_training_competence_profile, ) from vbv_lernwelt.competence.create_vv_new_competence_profile import ( @@ -38,13 +43,16 @@ from vbv_lernwelt.course.consts import ( COURSE_TEST_ID, COURSE_UK, COURSE_UK_FR, + COURSE_UK_IT, COURSE_UK_TRAINING, COURSE_UK_TRAINING_FR, + COURSE_UK_TRAINING_IT, COURSE_VERSICHERUNGSVERMITTLERIN_ID, ) from vbv_lernwelt.course.creators.test_course import create_test_course from vbv_lernwelt.course.creators.uk_course import ( create_uk_fr_learning_path, + create_uk_it_learning_path, create_uk_learning_path, ) from vbv_lernwelt.course.creators.uk_training_course import ( @@ -92,8 +100,10 @@ ADMIN_EMAILS = ["info@iterativ.ch", "admin"] COURSE_UK, COURSE_VERSICHERUNGSVERMITTLERIN_ID, COURSE_UK_FR, + COURSE_UK_IT, COURSE_UK_TRAINING, COURSE_UK_TRAINING_FR, + COURSE_UK_TRAINING_IT, ], ) def command(course): @@ -118,6 +128,9 @@ def command(course): if COURSE_UK_FR in course: create_course_uk_fr() + if COURSE_UK_IT in course: + create_course_uk_it() + if COURSE_TEST_ID in course: create_test_course(with_sessions=True) @@ -127,6 +140,9 @@ def command(course): if COURSE_UK_TRAINING_FR in course: create_course_training_fr() + if COURSE_UK_TRAINING_IT in course: + create_course_training_it() + def create_versicherungsvermittlerin_course(): # Versicherungsvermittler/in mit neuen Circles @@ -392,6 +408,29 @@ def create_course_uk_fr(): csu.expert.add(fr_circle) +def create_course_uk_it(): + # Überbetriebliche Kurse FR + course = create_versicherungsvermittlerin_with_categories( + course_id=COURSE_UK_IT, title="Corso interaziendale" + ) + + # assignments create assignments parent page + _assignment_list_page = AssignmentListPageFactory( + parent=course.coursepage, + ) + create_uk_it_fahrzeug_casework(course_id=COURSE_UK_IT) + create_uk_it_fahrzeug_prep_assignment(course_id=COURSE_UK_IT) + create_uk_it_reflection(course_id=COURSE_UK_IT) + create_uk_it_learning_path(course_id=COURSE_UK_IT) + create_uk_it_competence_profile(course_id=COURSE_UK_IT) + create_default_media_library(course_id=COURSE_UK_IT) + + _cs = CourseSession.objects.create( + course_id=COURSE_UK_IT, + title="Corso interaziendale Ticino", + ) + + def create_course_uk_de_assignment_completion_data(assignment, course_session, user): subtasks = assignment.filter_user_subtasks(subtask_types=["user_text_input"]) for index, subtask in enumerate(subtasks): @@ -632,3 +671,90 @@ def create_course_training_fr(): ) csu.save() + + +def create_course_training_it(): + # Test Lehrgang für üK Trainer FR + course = create_versicherungsvermittlerin_with_categories( + course_id=COURSE_UK_TRAINING_IT, title="myVBV Training (IT)" + ) + + # assignments create assignments parent page + _assignment_list_page = AssignmentListPageFactory( + parent=course.coursepage, + ) + create_uk_it_fahrzeug_casework(course_id=COURSE_UK_TRAINING_IT) + create_uk_it_fahrzeug_prep_assignment(course_id=COURSE_UK_TRAINING_IT) + create_uk_it_reflection(course_id=COURSE_UK_TRAINING_IT) + + create_uk_training_learning_path(course_id=COURSE_UK_TRAINING_IT) + create_uk_it_training_competence_profile(course_id=COURSE_UK_TRAINING_IT) + create_default_media_library(course_id=COURSE_UK_TRAINING_IT) + + current_dir = os.path.dirname(os.path.realpath(__file__)) + print(current_dir) + course = Course.objects.get(id=COURSE_UK_TRAINING_IT) + import_course_sessions_from_excel( + course, + f"{current_dir}/../../../importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx", + language="it", + ) + import_trainers_from_excel( + course, + f"{current_dir}/../../../importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx", + language="it", + ) + import_students_from_excel( + f"{current_dir}/../../../importer/tests/Schulungen_Teilnehmende.xlsx", + ) + + for cs in CourseSession.objects.filter(course_id=COURSE_UK_TRAINING_IT): + cs.assignment_details_list = [ + { + "learningContentId": LearningContentAssignment.objects.get( + slug=f"{course.slug}-lp-circle-veicolo-lc-verifica-di-una-polizza-di-assicurazione-veicoli-a-motore" + ).id, + "submissionDeadlineDateTimeUtc": "2023-06-20T19:00:00Z", + "evaluationDeadlineDateTimeUtc": "2023-06-27T19:00:00Z", + }, + { + "learningContentId": LearningContentAssignment.objects.get( + slug=f"{course.slug}-lp-circle-veicolo-lc-veicolo-la-mia-prima-auto" + ).id, + "submissionDeadlineDateTimeUtc": "2023-06-20T19:00:00Z", + "evaluationDeadlineDateTimeUtc": "2023-06-27T19:00:00Z", + }, + ] + cs.save() + + # attach users as trainers to ÜK course + course_uk = Course.objects.filter(id=COURSE_UK_IT).first() + if course_uk: + users = [ + csu.user + for csu in CourseSessionUser.objects.filter( + course_session__course_id=COURSE_UK_TRAINING_IT + ) + ] + + cs = CourseSession.objects.get( + course_id=COURSE_UK_IT, + title="Corso interaziendale Ticino", + ) + + for user in users: + csu, _created = CourseSessionUser.objects.get_or_create( + course_session_id=cs.id, user_id=user.id + ) + csu.role = CourseSessionUser.Role.EXPERT + csu.expert.add( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff") + ) + csu.expert.add( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis") + ) + csu.expert.add( + Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-fahrzeug") + ) + + csu.save() diff --git a/server/vbv_lernwelt/importer/services.py b/server/vbv_lernwelt/importer/services.py index 7e53de5f..91e583e4 100644 --- a/server/vbv_lernwelt/importer/services.py +++ b/server/vbv_lernwelt/importer/services.py @@ -108,52 +108,45 @@ def create_or_update_course_session( cs.import_id = import_id cs.save() - for circle in circles: if language == "de": attendance_course_lp_qs = LearningContentAttendanceCourse.objects.filter( slug=f"{course.slug}-lp-circle-{circle.lower()}-lc-präsenzkurs-{circle.lower()}" ) - if attendance_course_lp_qs.exists(): - cs.attendance_courses.append( - { - "learningContentId": attendance_course_lp_qs.first().id, - "start": try_parse_datetime(data[f"{circle} Start"])[ - 1 - ].isoformat(), - "end": try_parse_datetime(data[f"{circle} Ende"])[ - 1 - ].isoformat(), - "location": data[f"{circle} Raum"], - "trainer": "", - } - ) - cs.save() + add_attendance_course_date(cs, attendance_course_lp_qs, circle, data) elif language == "fr": # todo: this is a hack remove me print(f"{course.slug}-lp-circle-véhicule-lc-cours-de-présence-véhicule") attendance_course_lp_qs = LearningContentAttendanceCourse.objects.filter( slug=f"{course.slug}-lp-circle-véhicule-lc-cours-de-présence-véhicule-à-moteur" ) - if attendance_course_lp_qs.exists(): - cs.attendance_courses.append( - { - "learningContentId": attendance_course_lp_qs.first().id, - "start": try_parse_datetime(data[f"{circle} Start"])[ - 1 - ].isoformat(), - "end": try_parse_datetime(data[f"{circle} Ende"])[ - 1 - ].isoformat(), - "location": data[f"{circle} Raum"], - "trainer": "", - } - ) - cs.save() + add_attendance_course_date(cs, attendance_course_lp_qs, circle, data) + elif language == "it": + print(course.slug, f"{course.slug}-lp-circle-veicolo-lc-classi-di-frequenza-veicolo") + # todo: this is a hack remove me + attendance_course_lp_qs = LearningContentAttendanceCourse.objects.filter( + slug=f"{course.slug}-lp-circle-veicolo-lc-corso-di-presenza-veicolo" + ) + print(attendance_course_lp_qs) + add_attendance_course_date(cs, attendance_course_lp_qs, circle, data) return cs +def add_attendance_course_date(course_session, attendance_course_lp_qs, circle, data): + if attendance_course_lp_qs.exists(): + course_session.attendance_courses.append( + { + "learningContentId": attendance_course_lp_qs.first().id, + "start": try_parse_datetime(data[f"{circle} Start"])[1].isoformat(), + "end": try_parse_datetime(data[f"{circle} Ende"])[1].isoformat(), + "location": data[f"{circle} Raum"], + "trainer": "", + } + ) + course_session.save() + + def import_trainers_from_excel(course: Course, filename: str, language="de"): workbook = load_workbook(filename=filename) sheet = workbook["Schulungen Trainer"] diff --git a/server/vbv_lernwelt/importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx b/server/vbv_lernwelt/importer/tests/Schulungen_Durchfuehrung_Trainer.xlsx index ff26f824fdcd48c7575ed2d1f761310d780c6dad..64d590545996460b2275ce4e92fd87061f92fb37 100644 GIT binary patch delta 6124 zcmZWt1z6Ne*I&YA>28#zSy&P2M!HLo?q&%IL3(MFUY1T#KtM`D8kMC4i3JoSBo;(K zx{>&h`@ZjU@BQX^=6`19{N|jQ^PibBbCyF7LWy-XaB!&rAP@*pY%%_pSP={7n${a& z8DrlRYH$#^Hw6U{^9>8RO~6y1jBoK5ZkqshgF~7V^TI8BUaC@s%v;&$2`3LUS*z!( zzjUml_N`;FTN|Va7kPr46MeKlx$XWSf;iXPudZC`SNyFe(&O2ntrC~EHmj%M^HVRx zKC=J9_tv0b;C}Kf9<^Gq