Bugfix for date range filter #569

This commit is contained in:
Daniel Grams 2024-02-10 17:36:57 +01:00
parent 70b696b4b0
commit 71c894df7e
3 changed files with 33 additions and 20 deletions

View File

@ -238,25 +238,39 @@ def fill_event_admin_unit_filter(event_filter, params: EventSearchParams):
return admin_unit_reference, event_filter return admin_unit_reference, event_filter
def get_event_date_range_filter(params: EventSearchParams):
date_filter = EventDate.start >= datetime.min
if params.date_from:
date_filter = or_(
EventDate.start >= params.date_from,
and_(EventDate.end.isnot(None), EventDate.end >= params.date_from),
)
if params.date_to:
date_to_filter = or_(
EventDate.start < params.date_to,
and_(EventDate.end.isnot(None), EventDate.end < params.date_to),
)
date_filter = and_(date_filter, date_to_filter)
# PostgreSQL specific https://stackoverflow.com/a/25597632
if params.weekday and type(params.weekday) is list:
weekdays = params.weekday
date_filter = and_(date_filter, extract("dow", EventDate.start).in_(weekdays))
return date_filter
def get_event_dates_query(params: EventSearchParams): def get_event_dates_query(params: EventSearchParams):
event_filter = 1 == 1 event_filter = 1 == 1
date_filter = EventDate.start >= datetime.min
event_filter = fill_event_filter(event_filter, params) event_filter = fill_event_filter(event_filter, params)
admin_unit_reference, event_filter = fill_event_admin_unit_filter( admin_unit_reference, event_filter = fill_event_admin_unit_filter(
event_filter, params event_filter, params
) )
if params.date_from: date_filter = get_event_date_range_filter(params)
date_filter = EventDate.start >= params.date_from
if params.date_to:
date_filter = and_(date_filter, EventDate.start < params.date_to)
# PostgreSQL specific https://stackoverflow.com/a/25597632
if params.weekday and type(params.weekday) is list:
weekdays = params.weekday
date_filter = and_(date_filter, extract("dow", EventDate.start).in_(weekdays))
result = ( result = (
EventDate.query.join(EventDate.event) EventDate.query.join(EventDate.event)
@ -378,19 +392,13 @@ def get_event_with_details_or_404(event_id):
def get_events_query(params: EventSearchParams): def get_events_query(params: EventSearchParams):
event_filter = 1 == 1 event_filter = 1 == 1
date_filter = EventDate.start >= datetime.min
event_filter = fill_event_filter(event_filter, params) event_filter = fill_event_filter(event_filter, params)
admin_unit_reference, event_filter = fill_event_admin_unit_filter( admin_unit_reference, event_filter = fill_event_admin_unit_filter(
event_filter, params event_filter, params
) )
if params.date_from: date_filter = get_event_date_range_filter(params)
date_filter = EventDate.start >= params.date_from
if params.date_to:
date_filter = and_(date_filter, EventDate.start < params.date_to)
event_filter = and_(event_filter, Event.dates.any(date_filter)) event_filter = and_(event_filter, Event.dates.any(date_filter))
result = ( result = (
Event.query.join(Event.admin_unit) Event.query.join(Event.admin_unit)

View File

@ -276,8 +276,11 @@ const PlanningList = {
this.countTitle = ""; this.countTitle = "";
} }
const vm = this; const vm = this;
const req_data = $("#filter_form :input").filter(function () {
return this.value.length > 0
}).serialize()
axios axios
.get(`/api/v1/event-dates/search?` + $("#filter_form").serialize(), { .get(`/api/v1/event-dates/search?` + req_data, {
withCredentials: true, withCredentials: true,
handleLoading: this.handleLoading, handleLoading: this.handleLoading,
}) })

View File

@ -127,6 +127,8 @@ def prepare_form_reference_requests(form, admin_unit):
[(a.id, a.name) for a in admin_unit_choices], [(a.id, a.name) for a in admin_unit_choices],
key=lambda a: a[1], key=lambda a: a[1],
) )
if not form.is_submitted():
form.reference_request_admin_unit_id.data = selected_ids form.reference_request_admin_unit_id.data = selected_ids