diff --git a/project/dateutils.py b/project/dateutils.py index b1ca7bf..52ad98c 100644 --- a/project/dateutils.py +++ b/project/dateutils.py @@ -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) diff --git a/project/forms/event.py b/project/forms/event.py index 55777dc..a25ee16 100644 --- a/project/forms/event.py +++ b/project/forms/event.py @@ -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")) diff --git a/project/static/site.js b/project/static/site.js index 40dca7d..0a68957 100644 --- a/project/static/site.js +++ b/project/static/site.js @@ -466,6 +466,7 @@ $(function () { $("#clear_location_btn").click(function () { $("#coordinate").val(""); + $("#location_name").val(""); $("#location").val("").trigger('change'); }); diff --git a/project/templates/_macros.html b/project/templates/_macros.html index fcb9679..ebd1811 100644 --- a/project/templates/_macros.html +++ b/project/templates/_macros.html @@ -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); } }); } diff --git a/project/templates/manage/events.html b/project/templates/manage/events.html index 53fd96f..5e8c606 100644 --- a/project/templates/manage/events.html +++ b/project/templates/manage/events.html @@ -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 %} {% 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 %}
diff --git a/project/views/manage.py b/project/views/manage.py index b832046..6d1a6c3 100644 --- a/project/views/manage.py +++ b/project/views/manage.py @@ -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)