Skip to content

Commit

Permalink
🐛 fix filter maintenance deleted, add trigger deleted for report
Browse files Browse the repository at this point in the history
  • Loading branch information
LePetitTim committed Jan 25, 2023
1 parent 2acfcf8 commit b99cff2
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 28 deletions.
11 changes: 8 additions & 3 deletions geotrek/maintenance/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand All @@ -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


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
-------------------------------------------------------------------------------
Expand Down
76 changes: 51 additions & 25 deletions geotrek/maintenance/tests/test_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand All @@ -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):
"""
Expand Down

0 comments on commit b99cff2

Please sign in to comment.