summaryrefslogtreecommitdiff
path: root/archaeological_operations/migrations
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations/migrations')
-rw-r--r--archaeological_operations/migrations/0125_archaeologicalsite_actors.py19
-rw-r--r--archaeological_operations/migrations/0126_archaeologicalsite_heritage_relations_datings.py207
-rw-r--r--archaeological_operations/migrations/0127_data_migration_current_states.py23
-rw-r--r--archaeological_operations/migrations/0128_add_editors.py39
-rw-r--r--archaeological_operations/migrations/0129_data_migration.json396
-rw-r--r--archaeological_operations/migrations/0129_data_migration_heritageinterest_heritageenvprotection_relsite.py24
6 files changed, 708 insertions, 0 deletions
diff --git a/archaeological_operations/migrations/0125_archaeologicalsite_actors.py b/archaeological_operations/migrations/0125_archaeologicalsite_actors.py
new file mode 100644
index 000000000..ac1d91587
--- /dev/null
+++ b/archaeological_operations/migrations/0125_archaeologicalsite_actors.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.2.19 on 2026-03-24 09:55
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0274_qualifiedbiographicalnote'),
+ ('archaeological_operations', '0124_archaeologicalsite_cached_types'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='actors',
+ field=models.ManyToManyField(blank=True, related_name='sites', to='ishtar_common.qualifiedbiographicalnote', verbose_name='Actors'),
+ ),
+ ]
diff --git a/archaeological_operations/migrations/0126_archaeologicalsite_heritage_relations_datings.py b/archaeological_operations/migrations/0126_archaeologicalsite_heritage_relations_datings.py
new file mode 100644
index 000000000..baa407d6f
--- /dev/null
+++ b/archaeological_operations/migrations/0126_archaeologicalsite_heritage_relations_datings.py
@@ -0,0 +1,207 @@
+# Generated by Django 4.2.19 on 2026-03-27 12:03
+
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import ishtar_common.models_common
+import re
+import uuid
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0275_authortype_parent'),
+ ('archaeological_context_records', '0126_migrate_periods_and_datings'),
+ ('archaeological_operations', '0125_archaeologicalsite_actors'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='cached_current_states',
+ field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached current states label'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='cached_heritage_environmental_protections',
+ field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached heritage and environmental protections label'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='cached_heritage_interests',
+ field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached heritage interests label'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='current_states',
+ field=models.ManyToManyField(blank=True, to='archaeological_operations.sitecurrentstatustype', verbose_name='Current status'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='details_on_protection',
+ field=models.TextField(blank=True, default='', verbose_name='Details on protection'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='editors',
+ field=models.ManyToManyField(blank=True, related_name='sites', to='ishtar_common.author', verbose_name='Editors'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='protection_date',
+ field=models.DateField(blank=True, null=True, verbose_name='Protection date'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='protection_id',
+ field=models.TextField(blank=True, default='', verbose_name='Protection ID'),
+ ),
+ migrations.AddField(
+ model_name='historicalarchaeologicalsite',
+ name='cached_current_states',
+ field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached current states label'),
+ ),
+ migrations.AddField(
+ model_name='historicalarchaeologicalsite',
+ name='cached_heritage_environmental_protections',
+ field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached heritage and environmental protections label'),
+ ),
+ migrations.AddField(
+ model_name='historicalarchaeologicalsite',
+ name='cached_heritage_interests',
+ field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached heritage interests label'),
+ ),
+ migrations.AddField(
+ model_name='historicalarchaeologicalsite',
+ name='details_on_protection',
+ field=models.TextField(blank=True, default='', verbose_name='Details on protection'),
+ ),
+ migrations.AddField(
+ model_name='historicalarchaeologicalsite',
+ name='protection_date',
+ field=models.DateField(blank=True, null=True, verbose_name='Protection date'),
+ ),
+ migrations.AddField(
+ model_name='historicalarchaeologicalsite',
+ name='protection_id',
+ field=models.TextField(blank=True, default='', verbose_name='Protection ID'),
+ ),
+ migrations.AlterField(
+ model_name='archaeologicalsite',
+ name='current_status',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sites_deprecated', to='archaeological_operations.sitecurrentstatustype', verbose_name='Current status - deprecated'),
+ ),
+ migrations.AlterField(
+ model_name='historicalarchaeologicalsite',
+ name='current_status',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.sitecurrentstatustype', verbose_name='Current status - deprecated'),
+ ),
+ migrations.CreateModel(
+ name='SiteRelationType',
+ 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=1, verbose_name='Order')),
+ ('symmetrical', models.BooleanField(verbose_name='Symmetrical')),
+ ('tiny_label', models.CharField(blank=True, max_length=50, null=True, verbose_name='Tiny label')),
+ ('logical_relation', models.CharField(blank=True, choices=[('above', 'Above'), ('below', 'Below'), ('equal', 'Equal'), ('include', 'Include'), ('included', 'Is included')], max_length=10, null=True, verbose_name='Logical relation')),
+ ('inverse_relation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.siterelationtype', verbose_name='Inverse relation')),
+ ],
+ options={
+ 'verbose_name': 'Site relation type',
+ 'verbose_name_plural': 'Site relation types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.CreateModel(
+ name='SiteRecordRelations',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('timestamp_geo', models.IntegerField(blank=True, null=True, verbose_name='Timestamp geo')),
+ ('timestamp_label', models.IntegerField(blank=True, null=True, verbose_name='Timestamp label')),
+ ('imports', models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports')),
+ ('imports_updated', models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports')),
+ ('left_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='right_relations', to='archaeological_operations.archaeologicalsite')),
+ ('relation_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='archaeological_operations.siterelationtype')),
+ ('right_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='left_relations', to='archaeological_operations.archaeologicalsite')),
+ ],
+ options={
+ 'verbose_name': 'Site record relation',
+ 'verbose_name_plural': 'Site record relations',
+ 'ordering': ('left_record__cached_label', 'relation_type', 'right_record__cached_label'),
+ 'permissions': [('view_siterelation', 'Can view all Site relations')],
+ },
+ ),
+ migrations.CreateModel(
+ name='SiteDating',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('uuid', models.UUIDField(default=uuid.uuid4)),
+ ('reference', models.TextField(blank=True, default='', verbose_name='Reference')),
+ ('external_id', models.TextField(blank=True, default='', verbose_name='External ID')),
+ ('start_date', models.IntegerField(blank=True, null=True, verbose_name='Start date')),
+ ('end_date', models.IntegerField(blank=True, null=True, verbose_name='End date')),
+ ('precise_dating', models.TextField(blank=True, default='', verbose_name='Precise on this dating')),
+ ('dating_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.datingtype', verbose_name='Dating type')),
+ ('period', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='archaeological_operations.period', verbose_name='Chronological period')),
+ ('quality', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.datingquality', verbose_name='Quality')),
+ ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='datings', to='archaeological_operations.archaeologicalsite', verbose_name='Site')),
+ ],
+ options={
+ 'verbose_name': 'Site dating',
+ 'verbose_name_plural': 'Site datings',
+ },
+ bases=(models.Model, ishtar_common.models_common.SerializeItem),
+ ),
+ migrations.CreateModel(
+ name='HeritageInterestType',
+ 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')),
+ ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.heritageinteresttype', verbose_name='Parent')),
+ ],
+ options={
+ 'verbose_name': 'Heritage interest type',
+ 'verbose_name_plural': 'Heritage interest types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.CreateModel(
+ name='HeritageAndEnvironmentalProtectionType',
+ 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')),
+ ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.heritageandenvironmentalprotectiontype', verbose_name='Parent')),
+ ],
+ options={
+ 'verbose_name': 'Heritage and environmental protection type',
+ 'verbose_name_plural': 'Heritage and environmental protection types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='heritage_environmental_protections',
+ field=models.ManyToManyField(blank=True, to='archaeological_operations.heritageandenvironmentalprotectiontype', verbose_name='Heritage and environmental protections'),
+ ),
+ migrations.AddField(
+ model_name='archaeologicalsite',
+ name='heritage_interests',
+ field=models.ManyToManyField(blank=True, to='archaeological_operations.heritageinteresttype', verbose_name='Heritage interests'),
+ ),
+ ]
diff --git a/archaeological_operations/migrations/0127_data_migration_current_states.py b/archaeological_operations/migrations/0127_data_migration_current_states.py
new file mode 100644
index 000000000..fe1aa5c25
--- /dev/null
+++ b/archaeological_operations/migrations/0127_data_migration_current_states.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.2.19 on 2026-03-27 12:06
+
+from django.db import migrations
+
+
+def migrate_current_states(apps, __):
+ ArchaeologicalSite = apps.get_model("archaeological_operations", "archaeologicalsite")
+ if not hasattr(ArchaeologicalSite, "current_status"):
+ return
+ q = ArchaeologicalSite.objects.filter(current_status__isnull=False)
+ for site in q.all():
+ site.current_states.add(site.current_status)
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_operations', '0126_archaeologicalsite_heritage_relations_datings'),
+ ]
+
+ operations = [
+ migrations.RunPython(migrate_current_states)
+ ]
diff --git a/archaeological_operations/migrations/0128_add_editors.py b/archaeological_operations/migrations/0128_add_editors.py
new file mode 100644
index 000000000..d26c47f74
--- /dev/null
+++ b/archaeological_operations/migrations/0128_add_editors.py
@@ -0,0 +1,39 @@
+# Generated by Django 4.2.21 on 2026-04-02 06:36
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0276_add_editors'),
+ ('archaeological_operations', '0127_data_migration_current_states'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='administrativeact',
+ name='editors',
+ field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'),
+ ),
+ migrations.AddField(
+ model_name='operation',
+ name='editors',
+ field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'),
+ ),
+ migrations.AddField(
+ model_name='parcel',
+ name='editors',
+ field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'),
+ ),
+ migrations.AddField(
+ model_name='parcelowner',
+ name='editors',
+ field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'),
+ ),
+ migrations.AlterField(
+ model_name='archaeologicalsite',
+ name='editors',
+ field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'),
+ ),
+ ]
diff --git a/archaeological_operations/migrations/0129_data_migration.json b/archaeological_operations/migrations/0129_data_migration.json
new file mode 100644
index 000000000..f1e341c88
--- /dev/null
+++ b/archaeological_operations/migrations/0129_data_migration.json
@@ -0,0 +1,396 @@
+[
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Protections et labels patrimoniaux",
+ "txt_idx": "protections-et-labels-patrimoniaux",
+ "comment": "",
+ "available": true,
+ "parent": null,
+ "order": 100
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Protections environnementales",
+ "txt_idx": "protections-environnementales",
+ "comment": "",
+ "available": true,
+ "parent": null,
+ "order": 300
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Inscrit MH",
+ "txt_idx": "inscrit-mh",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-et-labels-patrimoniaux"
+ ],
+ "order": 110
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Class\u00e9 MH",
+ "txt_idx": "classe-mh",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-et-labels-patrimoniaux"
+ ],
+ "order": 120
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "P\u00e9rim\u00e8tre MH",
+ "txt_idx": "Perimetre-mh",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-et-labels-patrimoniaux"
+ ],
+ "order": 130
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Site Patrimonial remarquable",
+ "txt_idx": "site-patrimonial-remarquable",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-et-labels-patrimoniaux"
+ ],
+ "order": 140
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Label ACR ",
+ "txt_idx": "label-acr",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-et-labels-patrimoniaux"
+ ],
+ "order": 150
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Label PIR",
+ "txt_idx": "label-pir",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-et-labels-patrimoniaux"
+ ],
+ "order": 160
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Jardin remarquable ",
+ "txt_idx": "jardin-remarquable",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-et-labels-patrimoniaux"
+ ],
+ "order": 200
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Maison des Illustres ",
+ "txt_idx": "maison-des-illustres",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-et-labels-patrimoniaux"
+ ],
+ "order": 220
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Natura 2000",
+ "txt_idx": "natura-2000",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-environnementales"
+ ],
+ "order": 320
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Site inscrit ",
+ "txt_idx": "site-inscrit",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-environnementales"
+ ],
+ "order": 340
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "Site class\u00e9 ",
+ "txt_idx": "site-classe",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "protections-environnementales"
+ ],
+ "order": 360
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "PVAP",
+ "txt_idx": "pvap",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "site-patrimonial-remarquable"
+ ],
+ "order": 10
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageandenvironmentalprotectiontype",
+ "fields": {
+ "label": "PSMV",
+ "txt_idx": "psmv",
+ "comment": "",
+ "available": true,
+ "parent": [
+ "site-patrimonial-remarquable"
+ ],
+ "order": 20
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageinteresttype",
+ "fields": {
+ "label": "Peu int\u00e9ressant",
+ "txt_idx": "peu-interessant",
+ "comment": "",
+ "available": true,
+ "parent": null,
+ "order": 10
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageinteresttype",
+ "fields": {
+ "label": "Int\u00e9ressant",
+ "txt_idx": "interessant",
+ "comment": "",
+ "available": true,
+ "parent": null,
+ "order": 20
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageinteresttype",
+ "fields": {
+ "label": "Tr\u00e8s int\u00e9ressant",
+ "txt_idx": "tres-interessant",
+ "comment": "",
+ "available": true,
+ "parent": null,
+ "order": 30
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageinteresttype",
+ "fields": {
+ "label": "Remarquable",
+ "txt_idx": "remarquable",
+ "comment": "",
+ "available": true,
+ "parent": null,
+ "order": 40
+ }
+ },
+ {
+ "model": "archaeological_operations.heritageinteresttype",
+ "fields": {
+ "label": "\u00c0 prot\u00e9ger",
+ "txt_idx": "a-proteger",
+ "comment": "",
+ "available": true,
+ "parent": null,
+ "order": 50
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Voisin de",
+ "txt_idx": "voisin-de",
+ "comment": "",
+ "available": true,
+ "order": 30,
+ "symmetrical": true,
+ "tiny_label": null,
+ "inverse_relation": null,
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Relation indirecte",
+ "txt_idx": "relation-indirecte",
+ "comment": "",
+ "available": true,
+ "order": 40,
+ "symmetrical": true,
+ "tiny_label": null,
+ "inverse_relation": null,
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Parent de",
+ "txt_idx": "parent-de",
+ "comment": "",
+ "available": true,
+ "order": 10,
+ "symmetrical": false,
+ "tiny_label": null,
+ "inverse_relation": null,
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Enfant de",
+ "txt_idx": "enfant-de",
+ "comment": "",
+ "available": true,
+ "order": 20,
+ "symmetrical": false,
+ "tiny_label": null,
+ "inverse_relation": null,
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Ant\u00e9rieure \u00e0",
+ "txt_idx": "anterieure-a",
+ "comment": "",
+ "available": true,
+ "order": 50,
+ "symmetrical": false,
+ "tiny_label": null,
+ "inverse_relation": null,
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Post\u00e9rieure \u00e0",
+ "txt_idx": "posterieure-a",
+ "comment": "",
+ "available": true,
+ "order": 60,
+ "symmetrical": false,
+ "tiny_label": null,
+ "inverse_relation": null,
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Parent de",
+ "txt_idx": "parent-de",
+ "comment": "",
+ "available": true,
+ "order": 10,
+ "symmetrical": false,
+ "tiny_label": null,
+ "inverse_relation": [
+ "enfant-de"
+ ],
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Enfant de",
+ "txt_idx": "enfant-de",
+ "comment": "",
+ "available": true,
+ "order": 20,
+ "symmetrical": false,
+ "tiny_label": null,
+ "inverse_relation": [
+ "parent-de"
+ ],
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Ant\u00e9rieure \u00e0",
+ "txt_idx": "anterieure-a",
+ "comment": "",
+ "available": true,
+ "order": 50,
+ "symmetrical": false,
+ "tiny_label": null,
+ "inverse_relation": [
+ "posterieure-a"
+ ],
+ "logical_relation": null
+ }
+ },
+ {
+ "model": "archaeological_operations.siterelationtype",
+ "fields": {
+ "label": "Post\u00e9rieure \u00e0",
+ "txt_idx": "posterieure-a",
+ "comment": "",
+ "available": true,
+ "order": 60,
+ "symmetrical": false,
+ "tiny_label": null,
+ "inverse_relation": [
+ "anterieure-a"
+ ],
+ "logical_relation": null
+ }
+ }
+]
diff --git a/archaeological_operations/migrations/0129_data_migration_heritageinterest_heritageenvprotection_relsite.py b/archaeological_operations/migrations/0129_data_migration_heritageinterest_heritageenvprotection_relsite.py
new file mode 100644
index 000000000..59a884794
--- /dev/null
+++ b/archaeological_operations/migrations/0129_data_migration_heritageinterest_heritageenvprotection_relsite.py
@@ -0,0 +1,24 @@
+# Generated by Django 2.2.24 on 2024-02-10 12:07
+
+import os
+
+from django.db import migrations
+from django.core.management import call_command
+
+
+def load_data(apps, __):
+ QualifiedBiographicalNoteType = apps.get_model("archaeological_operations", "HeritageInterestType")
+ if not QualifiedBiographicalNoteType.objects.count():
+ json_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + ["0129_data_migration.json"])
+ call_command("loaddata", json_path)
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_operations', '0128_add_editors'),
+ ]
+
+ operations = [
+ migrations.RunPython(load_data)
+ ]