diff options
Diffstat (limited to 'archaeological_finds/models.py')
| -rw-r--r-- | archaeological_finds/models.py | 25 | 
1 files changed, 24 insertions, 1 deletions
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index 99a7f14cb..36702b707 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -257,6 +257,7 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):      mark = models.TextField(_(u"Mark"), blank=True, null=True)      comment = models.TextField(_(u"Comment"), blank=True, null=True)      previous_id = models.TextField(_(u"Previous ID"), blank=True, null=True) +    index = models.IntegerField(u"Index", default=0)      history = HistoricalRecords()      def __init__(self, *args, **kwargs): @@ -301,7 +302,7 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):          q = self.base_finds          if not q.count():              return -        return q.all()[0] +        return q.order_by('-pk').all()[0]      @property      def reference(self): @@ -310,6 +311,15 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):              return "00"          return bf.short_id() +    @property +    def administrative_index(self): +        bf = self.get_first_base_find() +        if not bf: +            return +        return "{}-{}".format( +            bf.context_record.operation.get_reference(), +            self.index) +      def get_department(self):          bf = self.get_first_base_find()          if not bf: @@ -391,6 +401,19 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):      def save(self, *args, **kwargs):          super(Find, self).save(*args, **kwargs) +        q = self.base_finds +        if not self.index and q.count(): +            # TODO: which base_find to take? +            operation = q.all()[0].context_record.operation +            q = Find.objects\ +                .filter(base_finds__context_record__operation=operation) +            if self.pk: +                q = q.exclude(pk=self.pk) +            if q.count(): +                self.index = q.aggregate(Max('index'))['index__max'] + 1 +            else: +                self.index = 1 +            self.save()          for base_find in self.base_finds.all():              if not base_find.index:                  idx = BaseFind.objects\  | 
