Merged in feature/update-importer (pull request #183)

Feature/update importer
This commit is contained in:
Christian Cueni 2023-08-14 16:17:13 +00:00
commit 5e9617c9b0
8 changed files with 137 additions and 16 deletions

View File

@ -152,7 +152,7 @@
"imprintText": "Impressum"
},
"general": {
"back": "capit",
"back": "Zurück",
"backCapitalized": "Zurück",
"backToCircle": "zurück zum Circle",
"backToLearningPath": "zurück zum Lernpfad",
@ -211,7 +211,7 @@
"login": {
"demoLogin": "Demo Login",
"guidelineFile": "Registrierung _myVBV.pptx",
"guidelineText": "Erfahre wie du dich als üK-Lernende/r registrieren kannst",
"guidelineText": "Erfahre wie du dich als Lernende/r registrieren kannst",
"login": "Login",
"ssoLogin": "SSO Login/Registration",
"ssoText": "Klicke auf den Button, um dich über SSO anzumelden oder zu registrieren.",
@ -269,7 +269,7 @@
"dashboard": {
"allClear": "Alles klar?",
"nextSteps": "Als lernende Person wirst in den kommenden Tagen einem üK-Lehrgang zugewiesen. Dann\nerscheint hier Deine personalisierte Lehrgangs-Box mit den weiteren Informationen.",
"welcome": "Es hat alles geklappt, du bist nun auf der digitalen Lernumgebung des Berufsbildungsverbands der\nVersicherungswirtschaft (VBV) registriert!"
"welcome": "Es hat alles geklappt, du bist nun auf der digitalen Lernumgebung des Berufsbildungsverbands derVersicherungswirtschaft (VBV) registriert!"
}
},
"x von y Bewertungen freigegeben": "{{x}} von {{y}} Bewertungen freigegeben",

View File

@ -1,8 +1,20 @@
{
"Anwesenheit Präsenzkurse": "Présence aux cours",
"Anwesenheit bestätigen": "Confirmer la présence",
"Anwesenheit prüfen": "Vérifier la présence",
"Anwesenheitskontrolle Präsenzkurse": "Contrôle de présence aux cours",
"Benutzername": "Nom dutilisateur",
"Ergebnisse anschauen": "Consulter les résultats",
"Feedback": "Feedback",
"Feedback anschauen": "Consulter le feedback",
"MS Teams öffnen": "Ouvrir MS Teams ",
"Nächste Termine": "Prochaines dates",
"Passwort": "Mot de passe",
"Status anschauen": "Consulter le statut",
"TODO: Nächste Termine": "TODO: prochaines dates",
"Trainerunterlagen": "Documents du formateur / de la formatrice",
"Vorbereitungsauftrag": "Mandat de préparation",
"Wissens - und Verständnisfragen": "Questions de connaissance et de compréhension ",
"Zur Zeit sind keine Termine vorhanden": "Aucune réunion nest prévue pour le moment",
"assignment": {
"acceptConditionsDisclaimer": "Accepter les conditions et remettre les résultats",
@ -85,11 +97,14 @@
},
"dashboard": {
"courses": "Formation",
"dueDatesTitle": "Dates",
"nocourses": "Tu nas été affecté(e) à aucune formation encore.",
"welcome": "Bienvenue, {{name}}"
},
"dueDates": {
"nextDueDates": "Prochaines réunions"
"nextDueDates": "Prochaines réunions",
"noDueDatesAvailable": "Pas de dates disponibles",
"showAllDueDates": "Afficher tous les dates"
},
"feedback": {
"answers": "Réponses",
@ -138,7 +153,7 @@
},
"general": {
"back": "Retour",
"backCapitalized": "@.capitalize:general.back",
"backCapitalized": "Retour",
"backToCircle": "Revenir au cercle",
"backToLearningPath": "Revenir au programme de formation",
"certificate_many": "Certificats",
@ -191,6 +206,7 @@
"learningPathPage": {
"currentCircle": "Cercle en cours",
"listView": "Affichage sous forme de liste",
"nextDueDates": "Prochaines dates",
"nextStep": "Étape suivante",
"pathView": "Affichage sous forme de parcours",
"progressText": "Tu as traité {{ inProgressCount }} de {{ allCount }} cercles",
@ -200,9 +216,13 @@
},
"login": {
"demoLogin": "Connexion Demo",
"guidelineFile": "Régistration _myAFA.pptx",
"guidelineText": "Découvre comment t'inscrire en tant qu'apprenant-e",
"login": "Login",
"ssoLogin": "Connexion SSO / Inscription",
"ssoText": "Clique sur le bouton pour te connecter via le SSO ou tinscrire."
"ssoText": "Clique sur le bouton pour te connecter via le SSO ou tinscrire.",
"welcomeText": "Bienvenue sur la page de login pour les cours interentreprises de la branche de formation et d'examens ommerciales \"Assurance privée\".",
"welcomeUk": "Bienvenue"
},
"mainNavigation": {
"logout": "Se déconnecter",
@ -246,5 +266,21 @@
},
"settings": {
"emailNotifications": "Notifications par e-mail"
},
"uk": {
"contact": {
"address": "Laupenstrasse 10, 3008 Berne",
"team": "Équipe Dévelopement de la relève",
"title": "Association pour la formation professionnelle en assurance"
},
"dashboard": {
"allClear": "Tout est clair ?",
"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.",
"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) !"
}
},
"x von y Bewertungen freigegeben": "{{x}} de {{y}} évaluations validée/s",
"x von y Ergebnisse abgegeben": "{{x}} de {{y}} résultats remis",
"x von y Feedbacks abgegeben": "{{x}} de {{y}} feedbacks remis",
"x von y abgeschlossen": "{{x}} de {{y}} achevée/s"
}

View File

@ -1,8 +1,20 @@
{
"Anwesenheit Präsenzkurse": "Presenza ai corsi",
"Anwesenheit bestätigen": "Confermare la presenza",
"Anwesenheit prüfen": "Verificare la presenza",
"Anwesenheitskontrolle Präsenzkurse": "Controllo di presenza ai corsi",
"Benutzername": "Nome utente",
"Ergebnisse anschauen": "Vedere i risultati",
"Feedback": "Feedback",
"Feedback anschauen": "Vedere il feedback",
"MS Teams öffnen": "Aprire MS Teams",
"Nächste Termine": "Prossime date",
"Passwort": "Password",
"Status anschauen": "Vedere lo stato",
"TODO: Nächste Termine": "TODO: prossime date",
"Trainerunterlagen": "Documenti del/della trainer",
"Vorbereitungsauftrag": "Incarico di preparazione",
"Wissens - und Verständnisfragen": "Domande di conoscenza e di comprensione",
"Zur Zeit sind keine Termine vorhanden": "Al momento non ci sono scadenze",
"assignment": {
"acceptConditionsDisclaimer": "Accettare le condizioni e consegnare i risultati",
@ -85,11 +97,14 @@
},
"dashboard": {
"courses": "Corso",
"dueDatesTitle": "Date",
"nocourses": "Non sei ancora stato/a assegnato/a a nessun corso.",
"welcome": "Ti diamo il benvenuto, {{name}}"
},
"dueDates": {
"nextDueDates": "Prossime scadenze"
"nextDueDates": "Prossime scadenze",
"noDueDatesAvailable": "Nessuna data disponibile",
"showAllDueDates": "Mostrare tutte le date"
},
"feedback": {
"answers": "Risposte",
@ -138,7 +153,7 @@
},
"general": {
"back": "Indietro",
"backCapitalized": "@.capitalize:general.back",
"backCapitalized": "Indietro",
"backToCircle": "Torna al Circle",
"backToLearningPath": "Torna al percorso formativo",
"certificate_many": "Certificati",
@ -191,6 +206,7 @@
"learningPathPage": {
"currentCircle": "Circle attuale",
"listView": "Vista elenco",
"nextDueDates": "Prossime date",
"nextStep": "Prossimo passo",
"pathView": "Vista percorso",
"progressText": "Hai svolto {{ inProgressCount }} Circle su {{ allCount }}",
@ -200,9 +216,13 @@
},
"login": {
"demoLogin": "Login Demo",
"guidelineFile": "Registrazione _myAFA.pptx",
"guidelineText": "Scopri come iscriverti come apprendista professionale",
"login": "Login",
"ssoLogin": "Login/Registrazione SSO",
"ssoText": "Clicca sul pulsante per effettuare il login o registrarti tramite SSO."
"ssoText": "Clicca sul pulsante per effettuare il login o registrarti tramite SSO.",
"welcomeText": "Benvenuti nella pagina di login per i corsi interaziendali del ramo di formazione e degli esami commerciali \"Assicurazione privata\".",
"welcomeUk": "Benvenuti"
},
"mainNavigation": {
"logout": "Logout",
@ -246,5 +266,21 @@
},
"settings": {
"emailNotifications": "Notifiche e-mail"
},
"uk": {
"contact": {
"address": "Laupenstrasse 10, 3008 Berna",
"team": "Team Sviluppo delle giovani leve",
"title": "Associazione per la formazione professionale nell'assicurzione"
},
"dashboard": {
"allClear": "È tutto chiaro?",
"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.",
"welcome": "Tutto ha funzionato, ora sei registrata/o nell'ambiente di apprendimento digitale dell'Associazione per la formazione professionale nell'assicurazione (AFA)!"
}
},
"x von y Bewertungen freigegeben": "{{x}} di {{y}} valutazioni approvate/a",
"x von y Ergebnisse abgegeben": "{{x}} di {{y}} risultati consegnati/o",
"x von y Feedbacks abgegeben": "{{x}} di {{y}} feedback consegnati/o",
"x von y abgeschlossen": "{{x}} di {{y}} completate/a"
}

View File

@ -204,9 +204,13 @@ onMounted(async () => {
</p>
</div>
</div>
<button class="btn-secondary mt-4 text-xl">
<a
v-if="courseSessionsStore.circleExperts.length > 0"
:href="'mailto:' + courseSessionsStore.circleExperts[0].email"
class="btn-secondary mt-4 text-xl"
>
{{ $t("circlePage.contactExpertButton") }}
</button>
</a>
</div>
</div>
</div>

View File

@ -21,7 +21,7 @@ export function learningContentTypeData(
} else if (lc.assignment_type === "REFLECTION") {
title = t("Reflexion");
} else if (lc.assignment_type === "CONDITION_ACCEPTANCE") {
title = t("Vorbedingung");
title = t("Auftrag");
}
return {
title: title,

View File

@ -0,0 +1,13 @@
from django.contrib import admin
from vbv_lernwelt.feedback.models import FeedbackResponse
@admin.register(FeedbackResponse)
class FeedbackResponseModel(admin.ModelAdmin):
list_display = [
"course_session",
"circle",
"created_at",
]
list_filter = ["course_session", "circle"]

View File

@ -357,12 +357,26 @@ def create_or_update_course_session(
csa.submission_deadline.end = timezone.make_aware(start)
csa.submission_deadline.save()
elif (
csa.learning_content.assignment_type
== AssignmentType.CASEWORK.value
and end
):
csa.submission_deadline.end = timezone.make_aware(
start
) + timezone.timedelta(days=30)
csa.submission_deadline.save()
return cs
def validate_row_data(data: Dict[str, any], required_headers: List[str]):
logger.debug(
"validate_row_data_missing_header",
data={"data": data},
label="import",
)
for header in required_headers:
some = str(data.get(header, "")).strip()
if str(data.get(header, "")).strip() in ["", "None"]:
logger.debug(
"validate_row_data_missing_header",

View File

@ -3,11 +3,15 @@ import os
from django.test import TestCase
from openpyxl.reader.excel import load_workbook
from vbv_lernwelt.assignment.models import AssignmentType
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
from vbv_lernwelt.course_session.models import (
CourseSessionAssignment,
CourseSessionAttendanceCourse,
)
from vbv_lernwelt.duedate.models import DueDate
from vbv_lernwelt.importer.services import (
create_or_update_course_session,
@ -87,6 +91,13 @@ class CreateOrUpdateCourseSessionTestCase(TestCase):
self.assertEqual("", attendance_course.trainer)
self.assertEqual(4, DueDate.objects.count())
casework = CourseSessionAssignment.objects.filter(
learning_content__assignment_type=AssignmentType.CASEWORK.value
).first()
self.assertEqual(
casework.submission_deadline.end.isoformat(), "2023-07-06T11:30:00+00:00"
)
def test_update_course_session(self):
row = [
("ID", "AG 2023 A"),
@ -164,6 +175,13 @@ class CreateOrUpdateCourseSessionTestCase(TestCase):
)
self.assertEqual(4, DueDate.objects.count())
casework = CourseSessionAssignment.objects.filter(
learning_content__assignment_type=AssignmentType.CASEWORK.value
).first()
self.assertEqual(
casework.submission_deadline.end.isoformat(), "2023-07-06T12:30:00+00:00"
)
def test_import_course_session_twice(self):
"""
importing the course session twice should create the