diff options
| -rw-r--r-- | archaeological_operations/management/commands/reindex_acts.py | 58 | ||||
| -rw-r--r-- | archaeological_operations/models.py | 17 | ||||
| -rw-r--r-- | ishtar_common/models.py | 7 | 
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( | 
