Location filter in manage event search #426

This commit is contained in:
Daniel Grams 2023-04-12 23:59:08 +02:00
parent f36a1984a3
commit 12cf0ed655
6 changed files with 29 additions and 5 deletions

View File

@ -71,6 +71,8 @@ def get_next_full_hour():
def form_input_to_date(date_str, hour=0, minute=0, second=0):
if not date_str: # pragma: no cover
return None
date = datetime.strptime(date_str, "%Y-%m-%d")
date_time = date_add_time(date, hour=hour, minute=minute, second=second)
return berlin_tz.localize(date_time)

View File

@ -5,6 +5,7 @@ from flask_wtf import FlaskForm
from wtforms import (
BooleanField,
FormField,
HiddenField,
IntegerField,
RadioField,
SelectField,
@ -17,7 +18,7 @@ from wtforms.fields.core import FieldList
from wtforms.fields.html5 import EmailField, URLField
from wtforms.validators import DataRequired, Length, Optional
from project.forms.common import Base64ImageForm, event_rating_choices
from project.forms.common import Base64ImageForm, distance_choices, event_rating_choices
from project.forms.event_place import EventPlaceLocationForm
from project.forms.widgets import CustomDateField, CustomDateTimeField, HTML5StringField
from project.models import (
@ -441,6 +442,15 @@ class FindEventForm(FlaskForm):
event_place_id = SelectField(
lazy_gettext("Place"), validators=[Optional()], coerce=int
)
coordinate = HiddenField(validators=[Optional()])
location_name = HiddenField(validators=[Optional()])
location = SelectField(lazy_gettext("Location"), validators=[Optional()])
distance = SelectField(
lazy_gettext("Distance"),
validators=[Optional()],
coerce=int,
choices=distance_choices,
)
submit = SubmitField(lazy_gettext("Find events"))

View File

@ -466,6 +466,7 @@ $(function () {
$("#clear_location_btn").click(function () {
$("#coordinate").val("");
$("#location_name").val("");
$("#location").val("").trigger('change');
});

View File

@ -856,11 +856,11 @@
var data = select2GetData(e);
if ("gmaps_id" in data) {
get_gmaps_place_details(data.gmaps_id);
get_gmaps_place_details(data.gmaps_id, data.text);
}
});
function get_gmaps_place_details(place_id) {
function get_gmaps_place_details(place_id, place_name) {
$.ajax({
url: "{{ url_for('js_autocomplete_gmaps_place') }}",
type: "get",
@ -868,6 +868,7 @@
data: "gmaps_id=" + place_id,
success: function (data) {
$('#coordinate').val('' + data.geometry.location.lat + ',' + data.geometry.location.lng);
$('#location_name').val(place_name);
}
});
}

View File

@ -1,6 +1,6 @@
{% extends "layout_vue.html" %}
{% set active_id = "events" %}
{% from "_macros.html" import render_field, render_event_dates_date_field, render_event_in_list, render_manage_form_styles, render_manage_form_scripts, render_event_dates_filter_form, render_event_warning_pills, render_pagination, render_event_date, render_field_with_errors, render_event_organizer %}
{% from "_macros.html" import render_jquery_steps_header, render_google_filter_autocomplete_header, render_event_dates_location_field, render_field, render_event_dates_date_field, render_event_in_list, render_manage_form_styles, render_manage_form_scripts, render_event_dates_filter_form, render_event_warning_pills, render_pagination, render_event_date, render_field_with_errors, render_event_organizer %}
{%- block title -%}
{{ _('Events') }}
@ -15,6 +15,11 @@
{{ render_manage_form_scripts() }}
{%- endblock -%}
{% block header %}
{{ render_jquery_steps_header() }}
{{ render_google_filter_autocomplete_header() }}
{% endblock %}
{% block component_scripts %}
<script src="{{ url_for('static', filename='vue/event-lists/add-event.vue.js')}}"></script>
{% endblock %}
@ -54,7 +59,7 @@ var vue_app_data = { eventId: 0 };
{{ render_field_with_errors(form.keyword, formrow="1") }}
{% endif %}
{% set form_collapsed = not form.category_id.data and not form.organizer_id.data and not form.event_place_id.data %}
{% set form_collapsed = not form.category_id.data and not form.organizer_id.data and not form.event_place_id.data and not form.coordinate.data %}
<div id="extended_search_form" class="{% if form_collapsed %}collapse{% else %}show{% endif %}">
{% if form.category_id %}
@ -69,6 +74,8 @@ var vue_app_data = { eventId: 0 };
{{ render_field_with_errors(form.event_place_id, formrow="1") }}
{% endif %}
{{ render_event_dates_location_field(form.location, form.distance) }}
</div>
<p>

View File

@ -174,6 +174,9 @@ def manage_admin_unit_events(id):
form.event_place_id.choices = [(p.id, get_place_str(p)) for p in event_places]
form.event_place_id.choices.insert(0, (0, ""))
if form.location.data: # pragma: no cover
form.location.choices = [(form.location.data, form.location_name.data)]
if form.validate():
form.populate_obj(params)