summaryrefslogtreecommitdiff
path: root/archaeological_finds/migrations/0137_data_migration_treatment_status_inputstatus.py
blob: b1f2077a3b89372b9568156ea330b526b1ce549b (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
48
49
50
51
import os

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


def load_data(apps, __):
    TreatmentStatus = apps.get_model("archaeological_finds", "treatmentstatus")
    if not TreatmentStatus.objects.count():
        migration = "0137_data_migration_treatmentstatus.json"
        json_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + [migration])
        call_command("loaddata", json_path)

    TreatmentInputStatus = apps.get_model("archaeological_finds", "treatmentinputstatus")
    if not TreatmentInputStatus.objects.count():
        migration = "0137_data_migration_treatmentinputstatus.json"
        json_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + [migration])
        call_command("loaddata", json_path)

    input_status_executed = TreatmentInputStatus.objects.filter(executed=True).all()[0]
    input_status_draft = TreatmentInputStatus.objects.filter(executed=False).all()[0]

    Treatment = apps.get_model("archaeological_finds", "treatment")
    try:
        TreatmentState = apps.get_model("archaeological_finds", "treatmentstate")
    except LookupError:
        # treatment state model deleted
        return
    for treatment_state in TreatmentState.objects.all():
        q = TreatmentStatus.objects.filter(txt_idx=treatment_state.txt_idx)
        if not q.exists():
            print(f"Equivalence for treatment state: '{treatment_state.txt_idx}' not found")
            continue
        equiv = q.all()[0]
        q = Treatment.objects.filter(treatment_state=treatment_state)
        q.update(treatment_status=equiv)
        if treatment_state.executed:
            q.update(input_status=input_status_executed)
        else:
            q.update(input_status=input_status_draft)


class Migration(migrations.Migration):

    dependencies = [
        ('archaeological_finds', '0136_treatment_status_refactoring'),
    ]

    operations = [
        migrations.RunPython(load_data)
    ]