Merged in fix/uk-importer (pull request #356)

Fix import urls
This commit is contained in:
Christian Cueni 2024-07-22 07:10:25 +00:00
commit 2d3234c7ce
2 changed files with 70 additions and 37 deletions

View File

@ -48,7 +48,7 @@ LP_DATA = {
"slug": "lancement",
"presence_course": "lancement-lc-cours-de-présence-lancement",
"assignments": [
"lancement-lc-mission-de-préparation",
"lancement-lc-mandat-de-préparation",
"lancement-lc-déclaration-de-probité",
"lancement-lc-réflexion",
],
@ -83,7 +83,7 @@ LP_DATA = {
"slug": "base",
"presence_course": "base-lc-cours-de-présence-base",
"assignments": [
"base-lc-mission-de-préparation",
"base-lc-mandat-de-préparation",
],
"edoniq_tests": ["base-lc-questions-de-connaissances-et-de-compréhension"],
},
@ -103,7 +103,7 @@ LP_DATA = {
"slug": "fahrzeug",
"presence_course": "fahrzeug-lc-präsenzkurs-fahrzeug",
"assignments": [
"fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice",
"fahrzeug-lc-geleitete-fallarbeit-überprüfen-einer-versicherungspolice",
"fahrzeug-lc-fahrzeug-mein-erstes-auto",
],
"edoniq_tests": [],
@ -113,8 +113,8 @@ LP_DATA = {
"slug": "véhicule",
"presence_course": "véhicule-lc-cours-de-présence-véhicule",
"assignments": [
"véhicule-lc-vérification-dune-police-dassurance-de-véhicule-à-moteur",
"véhicule-lc-véhicule-à-moteur-ma-première-voiture",
"véhicule-lc-mandat-de-préparation",
"véhicule-lc-étude-de-cas-dirigée-vérification-dune-police-dassurance",
],
"edoniq_tests": [],
},
@ -123,8 +123,8 @@ LP_DATA = {
"slug": "veicolo",
"presence_course": "veicolo-lc-corso-di-presenza",
"assignments": [
"veicolo-lc-verifica-di-una-polizza-di-assicurazione-veicoli-a-motore",
"veicolo-lc-veicolo-la-mia-prima-auto",
"veicolo-lc-caso-di-studio-guidato-verifica-di-una-polizza-di-assicurazione",
"veicolo-lc-incarico-di-preparazione",
],
"edoniq_tests": [],
},
@ -192,7 +192,7 @@ LP_DATA = {
"de": {
"title": "Reisen & Rechtsstreitigkeiten",
"slug": "reisen-rechtsstreitigkeiten",
"presence_course": "reisen-rechtsstreitigkeiten-lc-präsenzkurs-reisen-rechtsstreiti",
"presence_course": "reisen-rechtsstreitigkeiten-lc-präsenzkurs-reisen-rechtsstreitigkeiten",
"assignments": [
"reisen-rechtsstreitigkeiten-lc-vorbereitungsauftrag",
],
@ -203,7 +203,7 @@ LP_DATA = {
"fr": {
"title": "Voyages / Litiges juridiques",
"slug": "voyages-litiges-juridiques",
"presence_course": "voyages--litiges-juridiques-lc-cours-de-présence",
"presence_course": "voyages-litiges-juridiques-lc-cours-de-présence-voyages-litiges-juridiques",
"assignments": [
"voyages-litiges-juridiques-lc-mandat-de-préparation",
],
@ -214,7 +214,7 @@ LP_DATA = {
"it": {
"title": "Viaggi e controversie giuridiche",
"slug": "viaggi-e-controversie-giuridiche",
"presence_course": "viaggi-e-controversie-giuridiche-lc-corso-di-presenza",
"presence_course": "viaggi-e-controversie-giuridiche-lc-corso-di-presenza-viaggi-e-controversie-giuridiche",
"assignments": [
"viaggi-e-controversie-giuridiche-lc-incarico-di-preparazione",
],
@ -237,7 +237,7 @@ LP_DATA = {
"fr": {
"title": "Propriété du logement",
"slug": "propriété-du-logement",
"presence_course": "propriété-du-logement-lc-cours-de-présence",
"presence_course": "propriété-du-logement-lc-cours-de-présence-propriété-du-logement",
"assignments": [
"propriété-du-logement-lc-mandat-de-préparation",
"propriété-du-logement-lc-etude-de-cas-dirigée",
@ -247,7 +247,7 @@ LP_DATA = {
"it": {
"title": "Casa di proprietà",
"slug": "casa-di-proprietà",
"presence_course": "casa-di-proprietà-lc-corso-di-presenza",
"presence_course": "casa-di-proprietà-lc-corso-di-presenza-casa-di-proprietà",
"assignments": [
"casa-di-proprietà-lc-incarico-di-preparazione",
"casa-di-proprietà-lc-caso-di-studio-guidato-dal-cantiere-alla-propria-casa",
@ -268,7 +268,7 @@ LP_DATA = {
"fr": {
"title": "PME, Partie 1",
"slug": "pme-partie-1",
"presence_course": "pme-partie-1-lc-cours-de-présence",
"presence_course": "pme-partie-1-lc-cours-de-présence-pme-partie-1",
"assignments": [
"pme-partie-1-lc-mandat-de-préparation",
],
@ -279,7 +279,7 @@ LP_DATA = {
"it": {
"title": "PMI parte 1",
"slug": "PMI parte 1",
"presence_course": "pmi-parte-1-lc-corso-di-presenza",
"presence_course": "pmi-parte-1-lc-corso-di-presenza-pmi-parte-1",
"assignments": [
"pmi-parte-1-lc-incarico-di-preparazione",
],
@ -300,7 +300,7 @@ LP_DATA = {
"fr": {
"title": "PME, Partie 2",
"slug": "pme-partie-2",
"presence_course": "pme-partie-2-lc-cours-de-présence",
"presence_course": "pme-partie-2-lc-cours-de-présence-pme-partie-2",
"assignments": [
"pme-partie-2-lc-mandat-de-préparation",
"pme-partie-2-lc-etude-de-cas-dirigée",
@ -310,10 +310,10 @@ LP_DATA = {
"it": {
"title": "PMI parte 2",
"slug": "PMI parte 2",
"presence_course": "pmi-parte-2-lc-corso-di-presenza",
"presence_course": "pmi-parte-2-lc-corso-di-presenza-pmi-parte-2",
"assignments": [
"pmi-parte-2-lc-incarico-di-preparazione",
"pmi-parte-2-lc-caso-di-studio-guidato",
"pmi-parte-2-lc-caso-di-studio-guidato-visitare-unazienda-pmi",
],
"edoniq_tests": [],
},
@ -322,16 +322,16 @@ LP_DATA = {
"de": {
"title": "3-säulenkonzept",
"slug": "3-säulenkonzept",
"presence_course": "3-säulenkonzept-lc-präsenzkurs-3-säulenkonzept",
"presence_course": "3-säulensystem-lc-präsenzkurs-3-säulenkonzept",
"assignments": [
"3-säulenkonzept-lc-vorbereitungsauftrag",
"3-säulensystem-lc-vorbereitungsauftrag",
],
"edoniq_tests": ["3-säulenkonzept-lc-wissens-und-verständnisfragen"],
"edoniq_tests": ["3-säulensystem-lc-wissens-und-verständnisfragen"],
},
"fr": {
"title": "Concept des 3 piliers",
"slug": "concept-des-3-piliers",
"presence_course": "",
"presence_course": "concept-des-3-piliers-lc-cours-de-présence-concept-des-3-piliers",
"assignments": [
"concept-des-3-piliers-lc-mandat-de-préparation",
],
@ -342,7 +342,7 @@ LP_DATA = {
"it": {
"title": "Concetto dei 3 pilastri",
"slug": "concetto-dei-3-pilastri",
"presence_course": "concetto-dei-3-pilastri-lc-corso-di-presenza",
"presence_course": "concetto-dei-3-pilastri-lc-corso-di-presenza-concetto-dei-3-pilastri",
"assignments": [
"concetto-dei-3-pilastri-lc-incarico-di-preparazione",
],
@ -366,7 +366,7 @@ LP_DATA = {
"fr": {
"title": "Garantie des revenus, Partie 1",
"slug": "garantie-des-revenus-partie-1",
"presence_course": "garantie-des-revenus-partie-1-lc-cours-de-présence",
"presence_course": "garantie-des-revenus-partie-1-lc-cours-de-présence-garantie-des-revenus-partie-1",
"assignments": [
"garantie-des-revenus-partie-1-lc-mandat-de-préparation",
],
@ -377,7 +377,7 @@ LP_DATA = {
"it": {
"title": "Protezione del reddito parte 1",
"slug": "protezione-del-reddito-parte-1",
"presence_course": "protezione-del-reddito-parte-1-lc-corso-di-presenza",
"presence_course": "protezione-del-reddito-parte-1-lc-corso-di-presenza-protezione-del-reddito-parte-1",
"assignments": [
"protezione-del-reddito-parte-1-lc-incarico-di-preparazione",
],
@ -390,7 +390,7 @@ LP_DATA = {
"de": {
"title": "Einkommenssicherung (Todesfall)",
"slug": "einkommenssicherung-todesfall",
"presence_course": "einkommenssicherung-invalidität-lc-präsenzkurs-einkommenssicherung-invalidität",
"presence_course": "einkommenssicherung-todesfall-lc-präsenzkurs-einkommenssicherung-todesfall",
"assignments": [
"einkommenssicherung-todesfall-lc-vorbereitungsauftrag",
],
@ -401,7 +401,7 @@ LP_DATA = {
"fr": {
"title": "Garantie des revenus, Partie 2",
"slug": "garantie-des-revenus-partie-2",
"presence_course": "garantie-des-revenus-partie-2-lc-cours-de-présence",
"presence_course": "garantie-des-revenus-partie-2-lc-cours-de-présence-garantie-des-revenus-partie-2",
"assignments": [
"garantie-des-revenus-partie-2-lc-mandat-de-préparation",
],
@ -410,14 +410,15 @@ LP_DATA = {
],
},
"it": {
"title": "Casa di proprietà",
"slug": "casa-di-proprietà",
"presence_course": "",
"title": "Protezione del reddito parte 2",
"slug": "protezione-del-reddito-parte-2",
"presence_course": "protezione-del-reddito-parte-2-lc-corso-di-presenza-protezione-del-reddito-parte-2",
"assignments": [
"",
"",
"protezione-del-reddito-parte-2-lc-incarico-di-preparazione",
],
"edoniq_tests": [
"protezione-del-reddito-parte-2-lc-domande-di-conoscenza-e-di-comprensione"
],
"edoniq_tests": [],
},
},
"Pensionierung": {
@ -427,14 +428,14 @@ LP_DATA = {
"presence_course": "pensionierung-lc-präsenzkurs-pensionierung",
"assignments": [
"pensionierung-lc-vorbereitungsauftrag",
"pensionierung-lc-geleitete-fallarbeit-geleitete-fallarbeit",
"pensionierung-lc-geleitete-fallarbeit",
],
"edoniq_tests": [],
},
"fr": {
"title": "Retraite",
"slug": "retraite",
"presence_course": "retraite-lc-cours-de-présence",
"presence_course": "retraite-lc-cours-de-présence-retraite",
"assignments": [
"retraite-lc-mandat-de-préparation",
"retraite-lc-etude-de-cas-dirigée",
@ -444,7 +445,7 @@ LP_DATA = {
"it": {
"title": "Pensionamento",
"slug": "pensionamento",
"presence_course": "pensionamento-lc-corso-di-presenza",
"presence_course": "pensionamento-lc-corso-di-presenza-pensionamento",
"assignments": [
"pensionamento-lc-incarico-di-preparazione",
"pensionamento-lc-caso-di-studio-guidato",
@ -648,7 +649,8 @@ def create_or_update_course_session(
presence_day_end = try_parse_datetime(
data[f"{circle} {TRANSLATIONS[language]['ende']}"]
)[1]
except KeyError:
except KeyError as e:
logger.debug("import", type="presence_data", key_error=e)
continue
if attendance_course_lc:
@ -662,6 +664,14 @@ def create_or_update_course_session(
presence_day_end,
)
else:
logger.debug(
"import",
type="course_session_attendance",
slug=f"{course.slug}-lp-circle-{circle_data['presence_course']}",
error="Does not exist",
)
for assignment_slug in circle_data["assignments"]:
create_or_update_course_session_assignment(
cs, course.slug, assignment_slug, presence_day_start
@ -758,6 +768,13 @@ def create_or_update_course_session_assignment(
) + timezone.timedelta(days=45)
csa.evaluation_deadline.end = None
csa.evaluation_deadline.save()
else:
logger.debug(
"import",
type="course_session_assignment",
slug=f"{course_slug}-lp-circle-{assignment_slug}",
error="Does not exist",
)
def create_or_update_course_session_edoniq_test(
@ -779,6 +796,13 @@ def create_or_update_course_session_edoniq_test(
)
cset.deadline.end = None
cset.deadline.save()
else:
logger.debug(
"import",
type="course_session_edoniq_test",
slug=f"{course_slug}-lp-circle-{test_slug}",
error="Does not exist",
)
def validate_row_data(data: Dict[str, any], required_headers: List[str]):

View File

@ -26,7 +26,7 @@ from vbv_lernwelt.importer.utils import (
calc_header_tuple_list_from_pyxl_sheet,
try_parse_datetime,
)
from vbv_lernwelt.learnpath.models import Circle
from vbv_lernwelt.learnpath.models import Circle, LearningContentAssignment
test_dir = os.path.dirname(os.path.abspath(__file__))
@ -54,6 +54,15 @@ class CreateOrUpdateCourseSessionTestCase(TestCase):
def setUp(self):
create_default_users()
self.course = create_test_course(include_vv=False)
# update slug to reflect the real data
assignment_slug = (
"fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice"
)
casework = LearningContentAssignment.objects.filter(
slug=f"{self.course.slug}-lp-circle-{assignment_slug}"
).first()
casework.title = "Geleitete Fallarbeit: Überprüfen einer Versicherungspolice"
casework.save()
def test_create_course_session(self):
row = [