Skip to content

Commit

Permalink
fix country area and perimeters to filter siae with tender
Browse files Browse the repository at this point in the history
  • Loading branch information
madjid-asa committed Nov 13, 2023
1 parent d375910 commit 7665d64
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions lemarche/siaes/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ def address_in_perimeter_list(self, perimeters: models.QuerySet):
conditions |= get_region_filter(perimeter)
return self.filter(conditions)

def geo_range_in_perimeter_list(self, perimeters: models.QuerySet, with_country=False):
def geo_range_in_perimeter_list(self, perimeters: models.QuerySet, with_country=False, include_country_area=False):
"""
Method to filter the Siaes depending on the perimeter filter.
We filter on the Siae's address & geo_range fields.
Expand All @@ -300,6 +300,8 @@ def geo_range_in_perimeter_list(self, perimeters: models.QuerySet, with_country=
conditions |= get_department_filter(perimeter)
if perimeter.kind == Perimeter.KIND_REGION:
conditions |= get_region_filter(perimeter)
if include_country_area:
conditions = Q(geo_range=siae_constants.GEO_RANGE_COUNTRY) | conditions
return self.filter(conditions)

def within(self, point, distance_km=0):
Expand Down Expand Up @@ -341,13 +343,19 @@ def filter_with_tender(self, tender):
if tender.sectors.count():
qs = qs.filter_sectors(tender.sectors.all())
# filter by perimeters
if tender.is_country_area:
if tender.is_country_area: # for all country
qs = qs.with_country_geo_range()
else:
if tender.perimeters.count():
qs = qs.geo_range_in_perimeter_list(tender.perimeters.all(), with_country=True)
if not tender.include_country_area:
qs = qs.exclude_country_geo_range()
if tender.perimeters.count() and tender.include_country_area: # perimeters and all country
qs = qs.geo_range_in_perimeter_list(
tender.perimeters.all(), with_country=False, include_country_area=True
)
elif tender.perimeters.count(): # only perimeters
qs = qs.geo_range_in_perimeter_list(
tender.perimeters.all(), with_country=True
).exclude_country_geo_range()
elif tender.include_country_area:
qs = qs.with_country_geo_range()
# filter by presta_type
if len(tender.presta_type):
qs = qs.filter(presta_type__overlap=tender.presta_type)
Expand Down

0 comments on commit 7665d64

Please sign in to comment.