summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-01-27 17:31:00 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2023-01-27 17:31:00 +0100
commitdc1d0da3544d2ec9adb4c792c357fe06eaf752a7 (patch)
treedc2627a86507fe03bf42b21bcc5fe21183573cf4 /archaeological_context_records
parente448e19f9a472f8bb9ce41b085d175e91e0b873b (diff)
downloadIshtar-dc1d0da3544d2ec9adb4c792c357fe06eaf752a7.tar.bz2
Ishtar-dc1d0da3544d2ec9adb4c792c357fe06eaf752a7.zip
Add custom cached_label configuration for each main item
Diffstat (limited to 'archaeological_context_records')
-rw-r--r--archaeological_context_records/migrations/0111_auto_20230127_1503.py54
-rw-r--r--archaeological_context_records/models.py25
-rw-r--r--archaeological_context_records/tests.py26
3 files changed, 101 insertions, 4 deletions
diff --git a/archaeological_context_records/migrations/0111_auto_20230127_1503.py b/archaeological_context_records/migrations/0111_auto_20230127_1503.py
new file mode 100644
index 000000000..b1d36254c
--- /dev/null
+++ b/archaeological_context_records/migrations/0111_auto_20230127_1503.py
@@ -0,0 +1,54 @@
+# Generated by Django 2.2.24 on 2023-01-27 15:03
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_context_records', '0110_auto_20221017_1435'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='contextrecord',
+ name='cached_label',
+ field=models.TextField(blank=True, db_index=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached name'),
+ ),
+ migrations.AlterField(
+ model_name='contextrecord',
+ name='excavation_technics',
+ field=models.ManyToManyField(blank=True, related_name='context_records', to='archaeological_context_records.ExcavationTechnicType', verbose_name='Excavation techniques'),
+ ),
+ migrations.AlterField(
+ model_name='contextrecord',
+ name='geodata',
+ field=models.ManyToManyField(blank=True, related_name='related_items_archaeological_context_records_contextrecord', to='ishtar_common.GeoVectorData', verbose_name='Geodata'),
+ ),
+ migrations.AlterField(
+ model_name='contextrecord',
+ name='main_geodata',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_related_items_archaeological_context_records_contextrecord', to='ishtar_common.GeoVectorData', verbose_name='Main geodata'),
+ ),
+ migrations.AlterField(
+ model_name='dating',
+ name='period',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='archaeological_operations.Period', verbose_name='Chronological period'),
+ ),
+ migrations.AlterField(
+ model_name='dating',
+ name='precise_dating',
+ field=models.TextField(blank=True, default='', verbose_name='Precise on dating'),
+ ),
+ migrations.AlterField(
+ model_name='historicalcontextrecord',
+ name='cached_label',
+ field=models.TextField(blank=True, db_index=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached name'),
+ ),
+ migrations.AlterField(
+ model_name='historicalcontextrecord',
+ name='main_geodata',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.GeoVectorData', verbose_name='Main geodata'),
+ ),
+ ]
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 074bc3358..bfdda4bfe 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -838,9 +838,6 @@ class ContextRecord(
blank=True,
null=True,
)
- cached_label = models.TextField(
- _("Cached name"), blank=True, default="", db_index=True
- )
cached_periods = models.TextField(
_("Cached periods label"),
blank=True,
@@ -997,6 +994,25 @@ class ContextRecord(
def cached_label_bulk_update(
cls, operation_id=None, parcel_id=None, transaction_id=None
):
+ profile = get_current_profile()
+ if profile.contextrecord_cached_label:
+ # no bulk possible
+ q = cls.objects
+ if operation_id:
+ q = q.filter(operation_id=operation_id)
+ elif parcel_id:
+ q = q.filter(parcel_id=parcel_id)
+ else:
+ return
+ for cr in q.all():
+ cr.skip_history_when_saving = True
+ cr._no_move = True
+ cr.save()
+ cls._meta.get_field("base_finds").related_model.cached_label_bulk_update(
+ operation_id=operation_id, parcel_id=parcel_id,
+ transaction_id=transaction_id
+ )
+ return
transaction_id, is_recursion = cls.bulk_recursion(
transaction_id, [operation_id, parcel_id]
)
@@ -1186,6 +1202,9 @@ class ContextRecord(
)
def _generate_cached_label(self):
+ label = self._profile_generate_cached_label()
+ if label:
+ return label
return self.full_label()
def _generate_cached_periods(self):
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py
index f0b12e0d6..28aa2208b 100644
--- a/archaeological_context_records/tests.py
+++ b/archaeological_context_records/tests.py
@@ -27,7 +27,7 @@ from django.conf import settings
from django.contrib.auth.models import Permission
from django.core.exceptions import ValidationError, ImproperlyConfigured
from django.core.files.uploadedfile import SimpleUploadedFile
-from django.test import tag
+from django.template.defaultfilters import slugify
from django.test.client import Client
from django.urls import reverse
from django.utils.translation import pgettext_lazy
@@ -438,6 +438,30 @@ class ContextRecordTest(ContextRecordInit, TestCase):
self.assertIsNotNone(cr.cached_label)
self.assertIn(profile.operation_prefix.lower() + "patriarch", cr.search_vector)
+ def test_custom_cached_label(self):
+ profile, created = IshtarSiteProfile.objects.get_or_create(
+ slug="default", active=True
+ )
+ profile.contextrecord_cached_label = \
+ "OA{operation__code_patriarche}-{label|slug:0>7}"
+ profile.save()
+ cr1 = self.context_records[0]
+ cr1 = models.ContextRecord.objects.get(pk=cr1.pk)
+ cr1.save()
+ cr1 = models.ContextRecord.objects.get(pk=cr1.pk)
+ code_patriarche = cr1.operation.code_patriarche
+ label = slugify(cr1.label)
+ # label = "CR 1" - code patriarche = "1"
+ # -> OA1-000cr-1
+ expected_lbl = f"OA{code_patriarche}-{label:0>7}"
+ self.assertEqual(cr1.cached_label, expected_lbl)
+ # test cascade update
+ cr1.operation.code_patriarche = "666"
+ cr1.operation.save()
+ cr1 = models.ContextRecord.objects.get(pk=cr1.pk)
+ expected_lbl = f"OA666-{label:0>7}"
+ self.assertEqual(cr1.cached_label, expected_lbl)
+
def test_upstream_cache_update(self):
cr = self.create_context_record()[0]
cr_pk = cr.pk