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): 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 = datetime.strptime(date_str, "%Y-%m-%d")
date_time = date_add_time(date, hour=hour, minute=minute, second=second) date_time = date_add_time(date, hour=hour, minute=minute, second=second)
return berlin_tz.localize(date_time) return berlin_tz.localize(date_time)

View File

@ -5,6 +5,7 @@ from flask_wtf import FlaskForm
from wtforms import ( from wtforms import (
BooleanField, BooleanField,
FormField, FormField,
HiddenField,
IntegerField, IntegerField,
RadioField, RadioField,
SelectField, SelectField,
@ -17,7 +18,7 @@ from wtforms.fields.core import FieldList
from wtforms.fields.html5 import EmailField, URLField from wtforms.fields.html5 import EmailField, URLField
from wtforms.validators import DataRequired, Length, Optional 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.event_place import EventPlaceLocationForm
from project.forms.widgets import CustomDateField, CustomDateTimeField, HTML5StringField from project.forms.widgets import CustomDateField, CustomDateTimeField, HTML5StringField
from project.models import ( from project.models import (
@ -441,6 +442,15 @@ class FindEventForm(FlaskForm):
event_place_id = SelectField( event_place_id = SelectField(
lazy_gettext("Place"), validators=[Optional()], coerce=int 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")) submit = SubmitField(lazy_gettext("Find events"))

View File

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

View File

@ -856,11 +856,11 @@
var data = select2GetData(e); var data = select2GetData(e);
if ("gmaps_id" in data) { 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({ $.ajax({
url: "{{ url_for('js_autocomplete_gmaps_place') }}", url: "{{ url_for('js_autocomplete_gmaps_place') }}",
type: "get", type: "get",
@ -868,6 +868,7 @@
data: "gmaps_id=" + place_id, data: "gmaps_id=" + place_id,
success: function (data) { success: function (data) {
$('#coordinate').val('' + data.geometry.location.lat + ',' + data.geometry.location.lng); $('#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" %} {% extends "layout_vue.html" %}
{% set active_id = "events" %} {% 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 -%} {%- block title -%}
{{ _('Events') }} {{ _('Events') }}
@ -15,6 +15,11 @@
{{ render_manage_form_scripts() }} {{ render_manage_form_scripts() }}
{%- endblock -%} {%- endblock -%}
{% block header %}
{{ render_jquery_steps_header() }}
{{ render_google_filter_autocomplete_header() }}
{% endblock %}
{% block component_scripts %} {% block component_scripts %}
<script src="{{ url_for('static', filename='vue/event-lists/add-event.vue.js')}}"></script> <script src="{{ url_for('static', filename='vue/event-lists/add-event.vue.js')}}"></script>
{% endblock %} {% endblock %}
@ -54,7 +59,7 @@ var vue_app_data = { eventId: 0 };
{{ render_field_with_errors(form.keyword, formrow="1") }} {{ render_field_with_errors(form.keyword, formrow="1") }}
{% endif %} {% 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 %}"> <div id="extended_search_form" class="{% if form_collapsed %}collapse{% else %}show{% endif %}">
{% if form.category_id %} {% if form.category_id %}
@ -69,6 +74,8 @@ var vue_app_data = { eventId: 0 };
{{ render_field_with_errors(form.event_place_id, formrow="1") }} {{ render_field_with_errors(form.event_place_id, formrow="1") }}
{% endif %} {% endif %}
{{ render_event_dates_location_field(form.location, form.distance) }}
</div> </div>
<p> <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 = [(p.id, get_place_str(p)) for p in event_places]
form.event_place_id.choices.insert(0, (0, "")) 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(): if form.validate():
form.populate_obj(params) form.populate_obj(params)