summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2020-12-23 08:48:56 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-02-28 12:15:23 +0100
commita91c54dbb338a075a2dbf2e9ddc2d4acff225f2e (patch)
treec87061a9c41e9ff76fb25526a34c764e59985b38
parentb9579090f654eed8fc9ff656cfd415327f890e6a (diff)
downloadIshtar-a91c54dbb338a075a2dbf2e9ddc2d4acff225f2e.tar.bz2
Ishtar-a91c54dbb338a075a2dbf2e9ddc2d4acff225f2e.zip
Container: fix index generation
-rw-r--r--archaeological_warehouse/management/commands/migrate_to_new_container_management.py5
-rw-r--r--archaeological_warehouse/migrations/0107_auto_20201222_1339.py21
-rw-r--r--archaeological_warehouse/models.py6
3 files changed, 28 insertions, 4 deletions
diff --git a/archaeological_warehouse/management/commands/migrate_to_new_container_management.py b/archaeological_warehouse/management/commands/migrate_to_new_container_management.py
index 44895ce69..24ec078bf 100644
--- a/archaeological_warehouse/management/commands/migrate_to_new_container_management.py
+++ b/archaeological_warehouse/management/commands/migrate_to_new_container_management.py
@@ -58,7 +58,10 @@ class Command(BaseCommand):
for idx, container in enumerate(to_update.values("id").all()):
sys.stdout.write("* Updating: {}/{}\r".format(idx + 1, to_be_done))
sys.stdout.flush()
- container = models.Container.objects.get(pk=container["id"])
+ try:
+ container = models.Container.objects.get(pk=container["id"])
+ except models.Container.DoesNotExist:
+ continue # already merged
if container.responsible_id not in potential_duplicate:
potential_duplicate[container.responsible_id] = {}
parent = None
diff --git a/archaeological_warehouse/migrations/0107_auto_20201222_1339.py b/archaeological_warehouse/migrations/0107_auto_20201222_1339.py
index f51036b59..6bd418541 100644
--- a/archaeological_warehouse/migrations/0107_auto_20201222_1339.py
+++ b/archaeological_warehouse/migrations/0107_auto_20201222_1339.py
@@ -3,6 +3,26 @@
from __future__ import unicode_literals
from django.db import migrations, models
+from django.db.models import Max, Q
+
+
+def fix_index(apps, schema_editor):
+ Container = apps.get_model('archaeological_warehouse', 'Container')
+ for c in Container.objects.all():
+ q = Container.objects.filter(
+ Q(responsible_id=c.responsible_id, index=c.index) |
+ Q(location_id=c.location_id, index=c.index)
+ ).exclude(id=c.id)
+ if q.count():
+ max_index = Container.objects.filter(
+ responsible_id=c.responsible_id).exclude(
+ id=c.id).all().aggregate(Max("index"))["index__max"] + 1
+ while Container.objects.filter(
+ location_id=c.location_id,
+ index=max_index).exclude(id=c.id).count():
+ max_index += 1
+ c.index = max_index
+ c.save()
class Migration(migrations.Migration):
@@ -27,6 +47,7 @@ class Migration(migrations.Migration):
name='max_division_number',
field=models.IntegerField(default=0, help_text='Automatically generated', verbose_name='Maximum number of divisions'),
),
+ migrations.RunPython(fix_index),
migrations.AlterUniqueTogether(
name='container',
unique_together=set([('index', 'location'), ('location', 'container_type', 'parent', 'reference')]),
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index 3e45b3c90..017c39092 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -453,11 +453,11 @@ class Warehouse(Address, DocumentItem, GeoItem, CompleteIdentifierItem,
container.save() # force label regeneration
for container in list(item.containers.all()):
if Container.objects.filter(index=container.index,
- responsible=self).count():
+ location=self).count():
container.index = Container.objects.filter(
- responsible=self).all().aggregate(
+ location=self).exclude(id=container.id).all().aggregate(
Max("index"))["index__max"] + 1
- container.responsible = self
+ container.location = self
container.save()
for wdiv in WarehouseDivisionLink.objects.filter(warehouse=item).all():
wdiv.delete()