diff options
Diffstat (limited to 'archaeological_finds/migrations')
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 + } +} +] |