summaryrefslogtreecommitdiff
path: root/archaeological_finds/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/models.py')
-rw-r--r--archaeological_finds/models.py40
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: