summaryrefslogtreecommitdiff
path: root/archaeological_finds/migrations/0141_data_migration_recommanded_treatments.py
blob: 9fcc41f6adce38fad3051e2e0f43b6f602bbf043 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import os

from django.db import migrations
from django.core.management import call_command


def load_data(apps, __):
    migration = "0141_data_migration_recommanded_treatments.json"
    json_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + [migration])
    call_command("loaddata", json_path)
    Find = apps.get_model("archaeological_finds", "find")
    if not hasattr(Find, "preservation_to_considers"):
        return
    q = Find.objects.filter(preservation_to_considers__isnull=False)
    if not q.count():
        return
    TreatmentType = apps.get_model("archaeological_finds", "TreatmentType")
    RecommendedTreatmentType = apps.get_model("archaeological_finds", "RecommendedTreatmentType")
    parent = RecommendedTreatmentType.objects.create(
        label="Anciennes recommandations",
        txt_idx="anciennes-recommandations",
        order=999,
    )
    reco = {}
    for find in q.all():
        for treatment_type in find.preservation_to_considers.all():
            if treatment_type.txt_idx not in reco:
                slug = treatment_type.txt_idx
                while RecommendedTreatmentType.objects.filter(txt_idx=slug).count():
                    slug += "1"
                reco[treatment_type.txt_idx] = RecommendedTreatmentType.objects.create(
                    label=treatment_type.label,
                    txt_idx=slug,
                    parent=parent
                )
            find.recommended_treatments.add(reco[treatment_type.txt_idx])


class Migration(migrations.Migration):

    dependencies = [
        ('archaeological_finds', '0140_recommanded_treatments'),
    ]

    operations = [
        migrations.RunPython(load_data)
    ]