summaryrefslogtreecommitdiff
path: root/archaeological_operations
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2014-06-15 19:46:25 +0200
committerÉtienne Loks <etienne.loks@proxience.com>2014-06-15 19:46:25 +0200
commit42e670964c037cf9edf11b3fa12c6ab6465362da (patch)
tree14fd19cba5728d93dccdee96daf84aaf5309de1b /archaeological_operations
parent1dce12d7a7c1a7db7a0b467b09248b3b8d2e3724 (diff)
downloadIshtar-42e670964c037cf9edf11b3fa12c6ab6465362da.tar.bz2
Ishtar-42e670964c037cf9edf11b3fa12c6ab6465362da.zip
Administrativ act: fix bad index
Diffstat (limited to 'archaeological_operations')
-rw-r--r--archaeological_operations/management/commands/reindex_acts.py58
-rw-r--r--archaeological_operations/models.py17
2 files changed, 66 insertions, 9 deletions
diff --git a/archaeological_operations/management/commands/reindex_acts.py b/archaeological_operations/management/commands/reindex_acts.py
new file mode 100644
index 000000000..70c97e0fd
--- /dev/null
+++ b/archaeological_operations/management/commands/reindex_acts.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+import sys
+
+from django.db import models
+from django.core.management.base import BaseCommand, CommandError
+from django.core.exceptions import ValidationError
+
+from archaeological_operations import models
+
+class Command(BaseCommand):
+ args = ''
+ help = 'Regenerate index'
+
+ def handle(self, *args, **options):
+ # first handle not appropriate index
+ q = models.AdministrativeAct.objects.filter(
+ signature_date__isnull=False,
+ index__isnull=False
+ ).exclude(act_type__indexed=True)
+ ln = q.count()
+ sys.stdout.write("\n* clean\n")
+ for idx, admin_act in enumerate(q.all()):
+ admin_act.index = None
+ admin_act.save()
+ sys.stdout.write("\r* %d/%d" % (idx, ln))
+ # then try to fix
+ q = models.AdministrativeAct.objects
+ ln = q.count()
+ sys.stdout.write("\n* fix\n")
+ tobefix = []
+ for idx, admin_act in enumerate(q.all()):
+ sys.stdout.write("\r* %d/%d" % (idx, ln))
+ try:
+ admin_act.save()
+ except ValidationError:
+ tobefix.append(admin_act)
+ print "To be fix"
+ for item in tobefix:
+ print item.signature_date.year, item.index, item.act_type, \
+ item.operation or item.associated_file
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index 8601c602f..2ea29fcf5 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -590,15 +590,14 @@ class AdministrativeAct(BaseHistorizedItem, OwnPerms, ValueGetter):
if q.count():
c_index = q.all()[0].index + 1
self.index = c_index
- if self.act_type.indexed:
- conflict = AdministrativeAct.objects.filter(act_type__indexed=True,
- signature_date__year=year,
- index=self.index)
- if self.pk:
- conflict = conflict.exclude(pk=self.pk)
- if conflict.count():
- raise ValidationError(_(u"This index already exists for "
- u"this year"))
+ conflict = AdministrativeAct.objects.filter(act_type__indexed=True,
+ signature_date__year=year,
+ index=self.index)
+ if self.pk:
+ conflict = conflict.exclude(pk=self.pk)
+ if conflict.count():
+ raise ValidationError(_(u"This index already exists for "
+ u"this year"))
super(AdministrativeAct, self).save(*args, **kwargs)
class Parcel(LightHistorizedItem):