summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_operations/management/commands/reindex_acts.py58
-rw-r--r--archaeological_operations/models.py17
-rw-r--r--ishtar_common/models.py7
3 files changed, 70 insertions, 12 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):
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 1aaaf933a..3c33928a9 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -54,6 +54,8 @@ def post_save_user(sender, **kwargs):
ishtaruser = IshtarUser.create_from_user(user)
else:
ishtaruser = q.all()[0]
+ ADMINISTRATOR, created = PersonType.objects.get_or_create(
+ txt_idx='administrator')
if ishtaruser.is_superuser \
and not ishtaruser.has_right('administrator'):
ishtaruser.person.person_types.add(ADMINISTRATOR)
@@ -753,9 +755,6 @@ class PersonType(GeneralType):
verbose_name_plural = _(u"Person types")
ordering = ('label',)
-ADMINISTRATOR, created = PersonType.objects.get_or_create(
- txt_idx='administrator')
-
class Person(Address, OwnPerms, ValueGetter) :
_prefix = 'person_'
TYPE = (('Mr', _(u'Mr')),
@@ -857,6 +856,8 @@ class IshtarUser(User):
email = user.email
person_type = None
if user.is_superuser:
+ ADMINISTRATOR, created = PersonType.objects.get_or_create(
+ txt_idx='administrator')
person_type = ADMINISTRATOR
else:
person_type, created = PersonType.objects.get_or_create(