diff options
Diffstat (limited to 'archaeological_finds/models.py')
| -rw-r--r-- | archaeological_finds/models.py | 40 | 
1 files changed, 38 insertions, 2 deletions
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index 0a1e59a68..b84b7614f 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -304,10 +304,10 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):      find_number = models.IntegerField(_("Find number"), blank=True, null=True)      upstream_treatment = models.ForeignKey(          "Treatment", blank=True, null=True, -        related_name='downstream_treatment', +        related_name='downstream',          verbose_name=_("Upstream treatment"))      downstream_treatment = models.ForeignKey( -        "Treatment", blank=True, null=True, related_name='upstream_treatment', +        "Treatment", blank=True, null=True, related_name='upstream',          verbose_name=_("Downstream treatment"))      datings = models.ManyToManyField(Dating, verbose_name=_(u"Dating"),                                       related_name='find') @@ -413,6 +413,42 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):              bf.context_record.operation.get_reference(),              self.index) +    def upstream_treatments(self): +        treatments = [] +        base_finds = [bf.pk for bf in self.base_finds.all()] +        if self.upstream_treatment and \ +                self.upstream_treatment.pk not in treatments: +            treatments.append((self.upstream_treatment.upstream.distinct( +                ).order_by('label').all(), self.upstream_treatment)) +            for upstream in self.upstream_treatment.upstream.all(): +                if upstream.pk != self.pk and not [ +                        bf.pk for bf in upstream.base_finds.all() +                        if bf.pk in base_finds]: +                    continue +                for items, treatment in upstream.upstream_treatments(): +                    if treatment.pk not in treatments: +                        treatments.append((treatment.upstream.order_by( +                            'label').all(), treatment)) +        return treatments + +    def downstream_treatments(self): +        treatments = [] +        base_finds = [bf.pk for bf in self.base_finds.all()] +        if self.downstream_treatment and \ +                self.downstream_treatment.pk not in treatments: +            treatments.append((self.downstream_treatment.downstream.distinct( +                 ).order_by('label').all(), self.downstream_treatment)) +            for downstream in self.downstream_treatment.downstream.all(): +                if downstream.pk != self.pk and not [ +                        bf.pk for bf in downstream.base_finds.all() +                        if bf.pk in base_finds]: +                    continue +                for items, treatment in downstream.downstream_treatments(): +                    if treatment.pk not in treatments: +                        treatments.append((treatment.downstream.order_by( +                            'label').all(), treatment)) +        return treatments +      def get_department(self):          bf = self.get_first_base_find()          if not bf:  | 
