summaryrefslogtreecommitdiff
path: root/archaeological_warehouse
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r--archaeological_warehouse/forms.py4
-rw-r--r--archaeological_warehouse/migrations/0115_auto_20230120_1133.py (renamed from archaeological_warehouse/migrations/0115_auto_20230119_1911.py)30
-rw-r--r--archaeological_warehouse/models.py17
-rw-r--r--archaeological_warehouse/tests.py6
4 files changed, 49 insertions, 8 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py
index 828d651f1..a95289669 100644
--- a/archaeological_warehouse/forms.py
+++ b/archaeological_warehouse/forms.py
@@ -23,6 +23,7 @@ import datetime
from django import forms
from django.db.models import Max
from django.conf import settings
+from django.core.validators import validate_slug
from django.forms.formsets import formset_factory
from ishtar_common.utils import ugettext_lazy as _
@@ -201,6 +202,9 @@ class WarehouseForm(CustomForm, ManageOldType, forms.Form):
}
name = forms.CharField(label=_("Name"), max_length=200, validators=[name_validator])
+ slug = forms.CharField(label=_("Textual ID"), max_length=200,
+ validators=[validate_slug], required=False,
+ help_text=_("Auto filled if kept empty."))
warehouse_type = forms.ChoiceField(label=_("Warehouse type"), choices=[])
organization = forms.IntegerField(
label=_("Organization"),
diff --git a/archaeological_warehouse/migrations/0115_auto_20230119_1911.py b/archaeological_warehouse/migrations/0115_auto_20230120_1133.py
index cf678f2c2..8462d4bb8 100644
--- a/archaeological_warehouse/migrations/0115_auto_20230119_1911.py
+++ b/archaeological_warehouse/migrations/0115_auto_20230120_1133.py
@@ -1,9 +1,25 @@
-# Generated by Django 2.2.24 on 2023-01-19 19:11
+# Generated by Django 2.2.24 on 2023-01-20 11:33
from django.db import migrations, models
import django.db.models.deletion
+def copy_external_id_to_slug(apps, schema):
+ Warehouse = apps.get_model("archaeological_warehouse", "Warehouse")
+ for w in Warehouse.objects.all():
+ w.skip_history_when_saving = True
+ w.slug = w.external_id
+ w.save()
+
+
+def update_profile(apps, schema):
+ IshtarSiteProfile = apps.get_model("ishtar_common", "IshtarSiteProfile")
+ for p in IshtarSiteProfile.objects.filter(
+ warehouse_external_id="{name|slug}").all():
+ p.warehouse_external_id = "{slug}"
+ p.save()
+
+
class Migration(migrations.Migration):
dependencies = [
@@ -17,10 +33,20 @@ class Migration(migrations.Migration):
field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached town label'),
),
migrations.AddField(
+ model_name='historicalwarehouse',
+ name='slug',
+ field=models.SlugField(blank=True, default='', max_length=200, verbose_name='Textual ID'),
+ ),
+ migrations.AddField(
model_name='warehouse',
name='cached_town_label',
field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached town label'),
),
+ migrations.AddField(
+ model_name='warehouse',
+ name='slug',
+ field=models.SlugField(blank=True, default='', max_length=200, verbose_name='Textual ID'),
+ ),
migrations.AlterField(
model_name='container',
name='geodata',
@@ -46,4 +72,6 @@ class Migration(migrations.Migration):
name='main_geodata',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_related_items_archaeological_warehouse_warehouse', to='ishtar_common.GeoVectorData', verbose_name='Main geodata'),
),
+ migrations.RunPython(copy_external_id_to_slug),
+ migrations.RunPython(update_profile),
]
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index 3f4913d4b..5d96e6863 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -320,6 +320,7 @@ class Warehouse(
}
GEO_LABEL = "name"
DOWN_MODEL_UPDATE = ["containers"]
+ FORCE_CASCADE_UPDATE = True
CACHED_LABELS = ["cached_town_label"]
QA_EDIT = QuickAction(
@@ -346,6 +347,7 @@ class Warehouse(
uuid = models.UUIDField(default=uuid.uuid4)
name = models.CharField(_("Name"), max_length=200)
+ slug = models.SlugField(_("Textual ID"), blank=True, default="", max_length=200)
warehouse_type = models.ForeignKey(
WarehouseType, verbose_name=_("Warehouse type"), on_delete=models.PROTECT
)
@@ -658,15 +660,20 @@ class Warehouse(
self.update_search_vector()
super(Warehouse, self).save(*args, **kwargs)
- self.skip_history_when_saving = True
+ updated = False
+ if not self.slug and self.name:
+ self.slug = slugify(self.name)[:200]
+ updated = True
if not self.external_id or self.auto_external_id:
external_id = get_generated_id("warehouse_external_id", self)
if external_id != self.external_id:
- self.auto_external_id = True
self.external_id = external_id
- self._cached_label_checked = False
- self.save()
- return
+ updated = True
+ if updated:
+ self.skip_history_when_saving = True
+ self._cached_label_checked = False
+ self.force_update = True
+ self.save()
m2m_changed.connect(document_attached_changed, sender=Warehouse.documents.through)
diff --git a/archaeological_warehouse/tests.py b/archaeological_warehouse/tests.py
index e67d03542..e211e3a2d 100644
--- a/archaeological_warehouse/tests.py
+++ b/archaeological_warehouse/tests.py
@@ -731,8 +731,10 @@ class ContainerTest(FindInit, TestCase):
container.save()
container = models.Container.objects.get(pk=container.pk)
self.assertIn(self.main_warehouse.name, container.cached_location)
- self.main_warehouse.name = "New name"
- self.main_warehouse.save()
+ warehouse = models.Warehouse.objects.get(pk=self.main_warehouse.pk)
+ warehouse.name = "New name"
+ warehouse.slug = "new-name"
+ warehouse.save()
self.assertEqual(models.Container.objects.filter(need_update=True).count(), 1)
self.assertEqual(
models.Container.objects.filter(pk=container.pk, need_update=True).count(),