summaryrefslogtreecommitdiff
path: root/archaeological_finds/migrations
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-21 17:06:53 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-24 18:09:08 +0100
commitbc6cf94def73926e6f6bb986d61e5861a17584e2 (patch)
treeba4a7438cd6594c02938ad3211d523c6dd28a79f /archaeological_finds/migrations
parent1b72554283f5c9e0644262a3f182409376870991 (diff)
downloadIshtar-bc6cf94def73926e6f6bb986d61e5861a17584e2.tar.bz2
Ishtar-bc6cf94def73926e6f6bb986d61e5861a17584e2.zip
✨ treatment state refactoring -> distinct input status and treatment status (refs #6182) - treatments: search criteria
Diffstat (limited to 'archaeological_finds/migrations')
-rw-r--r--archaeological_finds/migrations/0102_link_apps.py2
-rw-r--r--archaeological_finds/migrations/0103_auto_20200129_1944.py1
-rw-r--r--archaeological_finds/migrations/0109_auto_20220328_1222.py2
-rw-r--r--archaeological_finds/migrations/0136_treatment_status_refactoring.py83
-rw-r--r--archaeological_finds/migrations/0137_data_migration_treatment_status_inputstatus.py51
-rw-r--r--archaeological_finds/migrations/0137_data_migration_treatmentinputstatus.json24
-rw-r--r--archaeological_finds/migrations/0137_data_migration_treatmentstatus.json62
7 files changed, 222 insertions, 3 deletions
diff --git a/archaeological_finds/migrations/0102_link_apps.py b/archaeological_finds/migrations/0102_link_apps.py
index a39fd7c8f..40b6ff882 100644
--- a/archaeological_finds/migrations/0102_link_apps.py
+++ b/archaeological_finds/migrations/0102_link_apps.py
@@ -82,7 +82,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='treatment',
name='treatment_state',
- field=models.ForeignKey(default=archaeological_finds.models_treatments.TreatmentState.get_default, on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.TreatmentState', verbose_name='State'),
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_finds.TreatmentState', verbose_name='State'),
),
migrations.AddField(
model_name='treatment',
diff --git a/archaeological_finds/migrations/0103_auto_20200129_1944.py b/archaeological_finds/migrations/0103_auto_20200129_1944.py
index f127c71c8..3739a6de6 100644
--- a/archaeological_finds/migrations/0103_auto_20200129_1944.py
+++ b/archaeological_finds/migrations/0103_auto_20200129_1944.py
@@ -308,7 +308,6 @@ class Migration(migrations.Migration):
model_name='historicaltreatment',
name='treatment_state',
field=models.ForeignKey(blank=True, db_constraint=False,
- default=archaeological_finds.models_treatments.TreatmentState.get_default,
null=True,
on_delete=django.db.models.deletion.DO_NOTHING,
related_name='+',
diff --git a/archaeological_finds/migrations/0109_auto_20220328_1222.py b/archaeological_finds/migrations/0109_auto_20220328_1222.py
index abbae69a4..a451d8142 100644
--- a/archaeological_finds/migrations/0109_auto_20220328_1222.py
+++ b/archaeological_finds/migrations/0109_auto_20220328_1222.py
@@ -157,7 +157,7 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='treatment',
name='treatment_state',
- field=models.ForeignKey(default=archaeological_finds.models_treatments.TreatmentState.get_default, on_delete=django.db.models.deletion.PROTECT, to='archaeological_finds.TreatmentState', verbose_name='State'),
+ field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='archaeological_finds.TreatmentState', verbose_name='State'),
),
migrations.AlterField(
model_name='treatmentfile',
diff --git a/archaeological_finds/migrations/0136_treatment_status_refactoring.py b/archaeological_finds/migrations/0136_treatment_status_refactoring.py
new file mode 100644
index 000000000..987b995af
--- /dev/null
+++ b/archaeological_finds/migrations/0136_treatment_status_refactoring.py
@@ -0,0 +1,83 @@
+# Generated by Django 2.2.28 on 2025-02-21 14:00
+
+import archaeological_finds.models_treatments
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import ishtar_common.models_common
+import re
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_finds', '0135_exhibition_description'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='TreatmentInputStatus',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('label', models.TextField(verbose_name='Label')),
+ ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')),
+ ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ('executed', models.BooleanField(default=False, verbose_name='Treatment is executed')),
+ ],
+ options={
+ 'verbose_name': 'Treatment - Input status type',
+ 'verbose_name_plural': 'Treatment - Input status types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.CreateModel(
+ name='TreatmentStatus',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('label', models.TextField(verbose_name='Label')),
+ ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')),
+ ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ],
+ options={
+ 'verbose_name': 'Treatment - Treatment status type',
+ 'verbose_name_plural': 'Treatment - Treatment status types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.AlterField(
+ model_name='historicaltreatment',
+ name='treatment_state',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.TreatmentState', verbose_name='State - deprecated'),
+ ),
+ migrations.AlterField(
+ model_name='treatment',
+ name='treatment_state',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='archaeological_finds.TreatmentState', verbose_name='State - deprecated'),
+ ),
+ migrations.AddField(
+ model_name='historicaltreatment',
+ name='input_status',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.TreatmentInputStatus', verbose_name='Input status'),
+ ),
+ migrations.AddField(
+ model_name='historicaltreatment',
+ name='treatment_status',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.TreatmentStatus', verbose_name='Treatment status'),
+ ),
+ migrations.AddField(
+ model_name='treatment',
+ name='input_status',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.TreatmentInputStatus', verbose_name='Input status'),
+ ),
+ migrations.AddField(
+ model_name='treatment',
+ name='treatment_status',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.TreatmentStatus', verbose_name='Treatment status'),
+ ),
+ ]
diff --git a/archaeological_finds/migrations/0137_data_migration_treatment_status_inputstatus.py b/archaeological_finds/migrations/0137_data_migration_treatment_status_inputstatus.py
new file mode 100644
index 000000000..b1f2077a3
--- /dev/null
+++ b/archaeological_finds/migrations/0137_data_migration_treatment_status_inputstatus.py
@@ -0,0 +1,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)
+ ]
diff --git a/archaeological_finds/migrations/0137_data_migration_treatmentinputstatus.json b/archaeological_finds/migrations/0137_data_migration_treatmentinputstatus.json
new file mode 100644
index 000000000..100dee461
--- /dev/null
+++ b/archaeological_finds/migrations/0137_data_migration_treatmentinputstatus.json
@@ -0,0 +1,24 @@
+[
+{
+ "model": "archaeological_finds.treatmentinputstatus",
+ "fields": {
+ "label": "Brouillon",
+ "txt_idx": "draft",
+ "comment": "",
+ "available": true,
+ "order": 10,
+ "executed": false
+ }
+},
+{
+ "model": "archaeological_finds.treatmentinputstatus",
+ "fields": {
+ "label": "Valid\u00e9",
+ "txt_idx": "validated",
+ "comment": "",
+ "available": true,
+ "order": 20,
+ "executed": true
+ }
+}
+]
diff --git a/archaeological_finds/migrations/0137_data_migration_treatmentstatus.json b/archaeological_finds/migrations/0137_data_migration_treatmentstatus.json
new file mode 100644
index 000000000..28f725d8a
--- /dev/null
+++ b/archaeological_finds/migrations/0137_data_migration_treatmentstatus.json
@@ -0,0 +1,62 @@
+[
+{
+ "model": "archaeological_finds.treatmentstatus",
+ "fields": {
+ "label": "Pr\u00e9vu",
+ "txt_idx": "planned",
+ "comment": "",
+ "available": true,
+ "order": 30
+ }
+},
+{
+ "model": "archaeological_finds.treatmentstatus",
+ "fields": {
+ "label": "En cours",
+ "txt_idx": "in-progress",
+ "comment": "",
+ "available": true,
+ "order": 10
+ }
+},
+{
+ "model": "archaeological_finds.treatmentstatus",
+ "fields": {
+ "label": "Achev\u00e9",
+ "txt_idx": "completed",
+ "comment": "",
+ "available": true,
+ "order": 20
+ }
+},
+{
+ "model": "archaeological_finds.treatmentstatus",
+ "fields": {
+ "label": "Inconnu",
+ "txt_idx": "unknown",
+ "comment": "",
+ "available": true,
+ "order": 60
+ }
+},
+{
+ "model": "archaeological_finds.treatmentstatus",
+ "fields": {
+ "label": "\u00c0 confirmer",
+ "txt_idx": "to-be-confirmed",
+ "comment": "",
+ "available": true,
+ "order": 40
+ }
+},
+{
+ "model": "archaeological_finds.treatmentstatus",
+ "fields": {
+ "label": "Abandonn\u00e9",
+ "txt_idx": "cancelled",
+ "comment": "",
+ "available": true,
+ "order": 50
+ }
+}
+]