diff --git a/sv/migrations/0070_fix_fiche_zone_without_evenement.py b/sv/migrations/0070_fix_fiche_zone_without_evenement.py new file mode 100644 index 00000000..cde1edf8 --- /dev/null +++ b/sv/migrations/0070_fix_fiche_zone_without_evenement.py @@ -0,0 +1,46 @@ +# Generated by Django 5.1.4 on 2025-01-24 09:21 +from datetime import datetime +from django.db import migrations, transaction + + +def get_next_numero(NumeroFiche): + annee_courante = datetime.now().year + last_fiche = NumeroFiche.objects.filter(annee=annee_courante).order_by("-numero").first() + numero = last_fiche.numero + 1 if last_fiche else 1 + new_fiche = NumeroFiche(annee=annee_courante, numero=numero) + new_fiche.save() + return new_fiche + + +def create_missing_evenements(apps, schema_editor): + FicheZoneDelimitee = apps.get_model("sv", "FicheZoneDelimitee") + Evenement = apps.get_model("sv", "Evenement") + NumeroFiche = apps.get_model("sv", "NumeroFiche") + OrganismeNuisible = apps.get_model("sv", "OrganismeNuisible") + StatutReglementaire = apps.get_model("sv", "StatutReglementaire") + + with transaction.atomic(): + fiches_zones = FicheZoneDelimitee.objects.filter(evenement__isnull=True) + organisme_nuisible = OrganismeNuisible.objects.first() + statut_reglementaire = StatutReglementaire.objects.first() + + for fiche in fiches_zones: + numero = fiche.numero if fiche.numero else get_next_numero(NumeroFiche) + Evenement.objects.create( + numero=numero, + createur=fiche.createur, + date_creation=fiche.date_creation, + organisme_nuisible=organisme_nuisible, + statut_reglementaire=statut_reglementaire, + fiche_zone_delimitee=fiche, + ) + + +class Migration(migrations.Migration): + dependencies = [ + ("sv", "0069_position_chaine_distribution_data_update"), + ] + + operations = [ + migrations.RunPython(create_missing_evenements, reverse_code=migrations.RunPython.noop), + ]