From b99cff2f7e612801d94382f57f04c944954bc532 Mon Sep 17 00:00:00 2001 From: LePetitTim Date: Wed, 25 Jan 2023 17:10:19 +0100 Subject: [PATCH] :bug: fix filter maintenance deleted, add trigger deleted for report --- geotrek/maintenance/filters.py | 11 ++- .../maintenance/sql/post_10_interventions.sql | 4 + geotrek/maintenance/tests/test_filters.py | 76 +++++++++++++------ 3 files changed, 63 insertions(+), 28 deletions(-) diff --git a/geotrek/maintenance/filters.py b/geotrek/maintenance/filters.py index 7978dce01c..61deb1d4d1 100644 --- a/geotrek/maintenance/filters.py +++ b/geotrek/maintenance/filters.py @@ -9,6 +9,7 @@ from geotrek.altimetry.filters import AltimetryPointFilterSet from geotrek.authent.filters import StructureRelatedFilterSet from geotrek.common.filters import OptionalRangeFilter, RightFilter +from geotrek.feedback.models import Report from geotrek.zoning.filters import (IntersectionFilterCity, IntersectionFilterDistrict, IntersectionFilterRestrictedArea, IntersectionFilterRestrictedAreaType, ZoningFilterSet) @@ -43,12 +44,16 @@ def filter(self, qs, values): model = ContentType.objects.get(pk=target_type).model_class() elements_in_bbox = [] for value in values: - elements_in_bbox.extend(model.objects.filter(**{'geom__%s' % self.lookup_expr: self.get_geom(value)}).values_list('id', - flat=True)) + elements_in_bbox.extend( + model.objects.filter(**{'geom__%s' % self.lookup_expr: self.get_geom(value)}).values_list('id', flat=True) + ) if 'geotrek.outdoor' in settings.INSTALLED_APPS and issubclass(model, Site) or issubclass(model, Course): interventions.extend(qs.values_list('id', flat=True).filter(target_type=target_type).exclude( target_id__in=model.objects.values_list('id', flat=True) )) + if 'geotrek.feedback' in settings.INSTALLED_APPS and issubclass(model, Report): + interventions.extend(qs.values_list('id', flat=True).filter(target_type=target_type).exclude( + target_id__in=model.objects.values_list('id', flat=True))) if 'geotrek.signage' in settings.INSTALLED_APPS and issubclass(model, Topology) or issubclass(model, Signage): signages = elements_in_bbox interventions += qs.values_list('id', flat=True).filter(target_type=target_type, @@ -61,7 +66,7 @@ def filter(self, qs, values): target_type=blade_content_type).values_list('id', flat=True) interventions.extend(blades_intervention) - qs = qs.filter(pk__in=interventions) + qs = qs.filter(pk__in=interventions).existing() return qs diff --git a/geotrek/maintenance/templates/maintenance/sql/post_10_interventions.sql b/geotrek/maintenance/templates/maintenance/sql/post_10_interventions.sql index b2c7b64c95..4884da7a6e 100644 --- a/geotrek/maintenance/templates/maintenance/sql/post_10_interventions.sql +++ b/geotrek/maintenance/templates/maintenance/sql/post_10_interventions.sql @@ -37,6 +37,10 @@ CREATE TRIGGER maintenance_topology_interventions_d_tgr AFTER UPDATE OF deleted ON core_topology FOR EACH ROW EXECUTE PROCEDURE delete_related_intervention(); +CREATE TRIGGER maintenance_report_interventions_d_tgr +AFTER UPDATE OF deleted ON feedback_report +FOR EACH ROW EXECUTE PROCEDURE delete_related_intervention(); + ------------------------------------------------------------------------------- -- Denormalized altimetry information ------------------------------------------------------------------------------- diff --git a/geotrek/maintenance/tests/test_filters.py b/geotrek/maintenance/tests/test_filters.py index 6c1a751ba0..9889479cb8 100644 --- a/geotrek/maintenance/tests/test_filters.py +++ b/geotrek/maintenance/tests/test_filters.py @@ -16,6 +16,7 @@ from geotrek.maintenance.filters import ProjectFilterSet, InterventionFilterSet from geotrek.maintenance.tests.factories import InterventionFactory, ProjectFactory from geotrek.outdoor.tests.factories import SiteFactory, CourseFactory +from geotrek.feedback.tests.factories import ReportFactory from geotrek.signage.tests.factories import BladeFactory, SignageFactory from geotrek.zoning.tests.factories import (CityFactory, DistrictFactory, RestrictedAreaFactory, RestrictedAreaTypeFactory) @@ -304,6 +305,16 @@ def setUpTestData(cls): geom=GeometryCollection(Point(5, 5), srid=settings.SRID)) cls.intervention_course_in_2 = InterventionFactory.create(target=cls.course_in_2) + cls.report_in_1 = ReportFactory.create(geom=Point(1, 1, srid=settings.SRID)) + cls.intervention_report_in_1 = InterventionFactory.create(target=cls.report_in_1) + + cls.report_in_2 = ReportFactory.create(geom=Point(5, 5, srid=settings.SRID)) + cls.intervention_report_in_2 = InterventionFactory.create(target=cls.site_in_2) + + report_deleted = ReportFactory.create(geom=Point(1, 1, srid=settings.SRID)) + cls.intervention_report_deleted = InterventionFactory.create(target=report_deleted) + report_deleted.delete() + course_deleted = CourseFactory.create(geom=GeometryCollection(Point(1, 1), srid=settings.SRID)) cls.intervention_course_deleted = InterventionFactory.create(target=course_deleted) course_deleted.delete() @@ -335,8 +346,9 @@ def test_filter_in_1_city(self): self.intervention_course_in_1, self.intervention_blade_in_1, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 6) + self.intervention_course_deleted, + self.intervention_report_in_1}) + self.assertEqual(len(filter.qs), 7) def test_filter_in_2_city(self): """ @@ -351,8 +363,9 @@ def test_filter_in_2_city(self): self.intervention_course_in_2, self.intervention_blade_in_2, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 6) + self.intervention_course_deleted, + self.intervention_report_in_2}) + self.assertEqual(len(filter.qs), 7) def test_filter_in_1_and_2_city(self): """ @@ -372,8 +385,10 @@ def test_filter_in_1_and_2_city(self): self.intervention_course_in_1, self.intervention_blade_in_1, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 10) + self.intervention_course_deleted, + self.intervention_report_in_1, + self.intervention_report_in_2}) + self.assertEqual(len(filter.qs), 12) def test_filter_out_city(self): """ @@ -396,9 +411,9 @@ def test_filter_in_1_district(self): self.intervention_course_in_1, self.intervention_blade_in_1, self.intervention_site_deleted, - self.intervention_course_deleted - }) - self.assertEqual(len(filter.qs), 6) + self.intervention_course_deleted, + self.intervention_report_in_1}) + self.assertEqual(len(filter.qs), 7) def test_filter_in_2_district(self): """ @@ -413,8 +428,9 @@ def test_filter_in_2_district(self): self.intervention_course_in_2, self.intervention_blade_in_2, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 6) + self.intervention_course_deleted, + self.intervention_report_in_2}) + self.assertEqual(len(filter.qs), 7) def test_filter_in_1_and_2_district(self): """ @@ -434,8 +450,10 @@ def test_filter_in_1_and_2_district(self): self.intervention_course_in_1, self.intervention_blade_in_1, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 10) + self.intervention_course_deleted, + self.intervention_report_in_1, + self.intervention_report_in_2}) + self.assertEqual(len(filter.qs), 12) def test_filter_out_district(self): """ @@ -457,8 +475,9 @@ def test_filter_in_1_restricted_area(self): self.intervention_course_in_1, self.intervention_blade_in_1, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 6) + self.intervention_course_deleted, + self.intervention_report_in_1}) + self.assertEqual(len(filter.qs), 7) def test_filter_in_2_restricted_area(self): """ @@ -473,8 +492,9 @@ def test_filter_in_2_restricted_area(self): self.intervention_course_in_2, self.intervention_blade_in_2, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 6) + self.intervention_course_deleted, + self.intervention_report_in_2}) + self.assertEqual(len(filter.qs), 7) def test_filter_in_1_and_2_restricted_area(self): """ @@ -494,8 +514,10 @@ def test_filter_in_1_and_2_restricted_area(self): self.intervention_course_in_1, self.intervention_blade_in_1, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 10) + self.intervention_course_deleted, + self.intervention_report_in_1, + self.intervention_report_in_2}) + self.assertEqual(len(filter.qs), 12) def test_filter_out_restricted_area(self): """ @@ -520,8 +542,9 @@ def test_filter_in_1_restricted_area_type(self): self.intervention_course_in_1, self.intervention_blade_in_1, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 6) + self.intervention_course_deleted, + self.intervention_report_in_1}) + self.assertEqual(len(filter.qs), 7) def test_filter_in_2_restricted_area_type(self): """ @@ -538,8 +561,9 @@ def test_filter_in_2_restricted_area_type(self): self.intervention_course_in_2, self.intervention_blade_in_2, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 6) + self.intervention_course_deleted, + self.intervention_report_in_2}) + self.assertEqual(len(filter.qs), 7) def test_filter_in_1_and_in_2_restricted_area_type(self): """ @@ -564,8 +588,10 @@ def test_filter_in_1_and_in_2_restricted_area_type(self): self.intervention_course_in_1, self.intervention_blade_in_1, self.intervention_site_deleted, - self.intervention_course_deleted}) - self.assertEqual(len(filter.qs), 10) + self.intervention_course_deleted, + self.intervention_report_in_1, + self.intervention_report_in_2}) + self.assertEqual(len(filter.qs), 12) def test_filter_out_restricted_area_type(self): """