73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
|
# Generated by Django 4.2.16 on 2024-09-20 07:23
|
||
|
import logging
|
||
|
|
||
|
from django.db import migrations
|
||
|
|
||
|
|
||
|
def fill_user_certificate_data(apps, schema_editor):
|
||
|
OriginalUser = apps.get_model("cats", "User")
|
||
|
UserProfile = apps.get_model("cats", "UserProfile")
|
||
|
UserCertificate = apps.get_model("cats", "UserCertificate")
|
||
|
AuthUser = apps.get_model("auth", "User")
|
||
|
|
||
|
for user in OriginalUser.objects.all():
|
||
|
auth_user_id = None
|
||
|
if (
|
||
|
user.email
|
||
|
and "@" in user.email
|
||
|
and not AuthUser.objects.filter(email=user.email).exists()
|
||
|
):
|
||
|
auth_user = AuthUser.objects.create(
|
||
|
username=user.email,
|
||
|
email=user.email,
|
||
|
is_staff=user.admin == "1",
|
||
|
)
|
||
|
UserProfile.objects.create(
|
||
|
user=auth_user,
|
||
|
language=user.lang,
|
||
|
send_certificate=user.send_certificate,
|
||
|
)
|
||
|
auth_user_id = auth_user.id
|
||
|
UserCertificate.objects.create(
|
||
|
user_id=auth_user_id,
|
||
|
serial_number=user.serial_number,
|
||
|
issuer_name=user.issuer_name,
|
||
|
common_name=user.common_name,
|
||
|
)
|
||
|
|
||
|
|
||
|
def fill_learn_progress_references(apps, schema_editor):
|
||
|
UserCertificate = apps.get_model("cats", "UserCertificate")
|
||
|
LearnProgress = apps.get_model("cats", "LearnProgress")
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
for learn_progress in LearnProgress.objects.all():
|
||
|
try:
|
||
|
user_cert = UserCertificate.objects.get(
|
||
|
serial_number=learn_progress.serial_number,
|
||
|
issuer_name=learn_progress.issuer_name,
|
||
|
)
|
||
|
learn_progress.user_certificate = user_cert
|
||
|
if user_cert.user_id:
|
||
|
learn_progress.user_id = user_cert.user_id
|
||
|
learn_progress.save()
|
||
|
except UserCertificate.DoesNotExist:
|
||
|
logger.warning(
|
||
|
"no user certificate found for learn_progress %d", learn_progress.id
|
||
|
)
|
||
|
|
||
|
|
||
|
class Migration(migrations.Migration):
|
||
|
|
||
|
dependencies = [
|
||
|
("cats", "0019_prepare_to_separate_certificate_information"),
|
||
|
]
|
||
|
|
||
|
operations = [
|
||
|
# remove invalid learn progress entities
|
||
|
migrations.RunSQL("DELETE FROM cats_learnprogress WHERE t_id_id NOT IN (SELECT id FROM cats_topic)"),
|
||
|
migrations.RunPython(fill_user_certificate_data),
|
||
|
migrations.RunPython(fill_learn_progress_references),
|
||
|
]
|