diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-29 16:19:42 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-29 16:19:42 +0200 | 
| commit | 0a6a45a319df0dec6b154b06737fe428f7b254db (patch) | |
| tree | 7f64fa5d9e8b8c263e2f61344e089698c7d65265 | |
| parent | 96fc326ad4fcfcad645e4d8e7fa9c3daf1dfcf79 (diff) | |
| parent | 066d7c88825a983997cfee9ac61003b5d48b35da (diff) | |
| download | Ishtar-0a6a45a319df0dec6b154b06737fe428f7b254db.tar.bz2 Ishtar-0a6a45a319df0dec6b154b06737fe428f7b254db.zip  | |
Merge branch 'master' into develop
| -rw-r--r-- | archaeological_finds/models_finds.py | 24 | ||||
| -rw-r--r-- | archaeological_finds/tests.py | 37 | 
2 files changed, 60 insertions, 1 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 59b8eb1d0..b3a167a26 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -24,7 +24,8 @@ from django.contrib.gis.db import models  from django.core.urlresolvers import reverse  from django.db import connection, transaction  from django.db.models import Max, Q -from django.db.models.signals import m2m_changed, post_save, post_delete +from django.db.models.signals import m2m_changed, post_save, post_delete, \ +    pre_delete  from django.utils.translation import ugettext_lazy as _, ugettext  from ishtar_common.data_importer import post_importer_action, ImporterError @@ -1219,7 +1220,28 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,          Dating.fix_dating_association(self) +def pre_clean_find(sender, **kwargs): +    if not kwargs.get('instance'): +        return +    instance = kwargs.get('instance') + +    for bf in instance.base_finds.all(): +        # no other find is associated +        if not bf.find.exclude(pk=instance.pk).count(): +            bf.delete() + +    if instance.downstream_treatment: +        # TODO: not managed for now. Raise an error? +        return +    if not instance.upstream_treatment: +        return +    instance.upstream_treatment.upstream.clear() +    instance.upstream_treatment.downstream.clear() +    instance.upstream_treatment.delete() + +  post_save.connect(cached_label_changed, sender=Find) +pre_delete.connect(pre_clean_find, sender=Find)  def base_find_find_changed(sender, **kwargs): diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 1d5559dbb..a128b05ff 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -435,6 +435,20 @@ class FindTest(FindInit, TestCase):          self.assertEqual(response.status_code, 200)          self.assertIn('class="sheet"', response.content) +    def test_delete(self): +        self.create_finds(force=True) +        first_bf = self.base_finds[0] +        self.finds[1].base_finds.add(first_bf) + +        self.finds[0].delete() +        # on delete the selected base find is not deleted if another find +        # is related to it +        self.assertEqual(models.BaseFind.objects.filter( +            pk=self.base_finds[0].pk).count(), 1) +        self.finds[1].delete() +        self.assertEqual(models.BaseFind.objects.filter( +            pk=self.base_finds[0].pk).count(), 0) +  class FindSearchTest(FindInit, TestCase):      fixtures = FIND_FIXTURES @@ -622,3 +636,26 @@ class PackagingTest(FindInit, TestCase):              self.assertNotIn(                  item, self.finds,                  msg="Other basket have not been upgraded after packaging") + +    def test_delete(self): +        # manage treatment deletion +        treatment_type = models.TreatmentType.objects.get(txt_idx='packaging') +        treatment = models.Treatment() + +        initial_find = self.finds[0] +        treatment.save(user=self.get_default_user(), items=self.basket) +        treatment.treatment_types.add(treatment_type) + +        resulting_find = models.Find.objects.get( +            upstream_treatment__upstream=initial_find, +            base_finds__pk=initial_find.base_finds.all()[0].pk +        ) +        resulting_find.delete() + +        self.assertEqual( +            models.Treatment.objects.filter(pk=treatment.pk).count(), 0) +        q = models.Find.objects.filter(pk=initial_find.pk) +        # initial find not deleted +        self.assertEqual(q.count(), 1) +        initial_find = q.all()[0] +        self.assertEqual(initial_find.upstream_treatment, None)  | 
