diff --git a/project/__init__.py b/project/__init__.py index 078df3c..414cc10 100644 --- a/project/__init__.py +++ b/project/__init__.py @@ -51,6 +51,12 @@ app.config["ADMIN_UNIT_CREATE_REQUIRES_ADMIN"] = os.getenv( app.config["SEO_SITEMAP_PING_GOOGLE"] = getenv_bool("SEO_SITEMAP_PING_GOOGLE", "False") app.config["GOOGLE_MAPS_API_KEY"] = os.getenv("GOOGLE_MAPS_API_KEY") set_env_to_app(app, "SITE_NAME", "EventCally") +app.config["FLASK_DEBUG"] = getenv_bool("FLASK_DEBUG", "False") + +# if app.config["FLASK_DEBUG"]: +# logging.basicConfig(level=logging.DEBUG) +# logging.getLogger("sqlalchemy.engine").setLevel(logging.INFO) +# logging.getLogger("authlib").setLevel(logging.DEBUG) # Proxy handling if os.getenv("PREFERRED_URL_SCHEME"): # pragma: no cover diff --git a/project/forms/event.py b/project/forms/event.py index c51a734..4626ba9 100644 --- a/project/forms/event.py +++ b/project/forms/event.py @@ -438,6 +438,9 @@ class FindEventForm(FlaskForm): organizer_id = SelectField( lazy_gettext("Organizer"), validators=[Optional()], coerce=int ) + event_place_id = SelectField( + lazy_gettext("Place"), validators=[Optional()], coerce=int + ) submit = SubmitField(lazy_gettext("Find events")) diff --git a/project/services/event.py b/project/services/event.py index 9854a8f..5b1891c 100644 --- a/project/services/event.py +++ b/project/services/event.py @@ -92,6 +92,9 @@ def fill_event_filter(event_filter, params): if params.organizer_id: event_filter = and_(event_filter, Event.organizer_id == params.organizer_id) + if params.event_place_id: + event_filter = and_(event_filter, Event.event_place_id == params.event_place_id) + if params.latitude and params.longitude and params.distance: point = "POINT({} {})".format(params.longitude, params.latitude) event_filter = and_( diff --git a/project/services/event_search.py b/project/services/event_search.py index 77af042..6c6e0bb 100644 --- a/project/services/event_search.py +++ b/project/services/event_search.py @@ -24,6 +24,7 @@ class EventSearchParams(object): self.distance = None self.category_id = None self.organizer_id = None + self.event_place_id = None self.event_list_id = None self.weekday = None self.sort = None @@ -141,6 +142,9 @@ class EventSearchParams(object): if "organizer_id" in request.args: self.organizer_id = request.args["organizer_id"] + if "event_place_id" in request.args: + self.event_place_id = request.args["event_place_id"] + if "event_list_id" in request.args: self.event_list_id = self.load_list_param("event_list_id") diff --git a/project/templates/_macros.html b/project/templates/_macros.html index f603504..b12c51a 100644 --- a/project/templates/_macros.html +++ b/project/templates/_macros.html @@ -984,6 +984,10 @@ {{ render_field_with_errors(form.organizer_id, formrow="1") }} {% endif %} + {% if form.event_place_id and form.event_place_id.type != "HiddenField" %} + {{ render_field_with_errors(form.event_place_id, formrow="1") }} + {% endif %} + {{ render_event_dates_date_field(form.date_from, form.date_to) }} {% if form.weekday and form.weekday.choices|length > 0 %} diff --git a/project/views/manage.py b/project/views/manage.py index 8388f6c..0697ac5 100644 --- a/project/views/manage.py +++ b/project/views/manage.py @@ -31,6 +31,7 @@ from project.services.admin_unit import ( from project.services.event import get_events_query from project.services.event_search import EventSearchParams from project.services.event_suggestion import get_event_reviews_query +from project.utils import get_place_str from project.views.event import get_event_category_choices from project.views.utils import ( flash_errors, @@ -151,6 +152,7 @@ def manage_admin_unit_events(id): set_current_admin_unit(admin_unit) params = EventSearchParams() + params.set_default_date_range() form = FindEventForm(formdata=request.args, obj=params) form.category_id.choices = get_event_category_choices() @@ -164,6 +166,14 @@ def manage_admin_unit_events(id): form.organizer_id.choices = [(o.id, o.name) for o in organizers] form.organizer_id.choices.insert(0, (0, "")) + event_places = ( + EventPlace.query.filter(EventPlace.admin_unit_id == admin_unit.id) + .order_by(func.lower(EventPlace.name)) + .all() + ) + 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.validate(): form.populate_obj(params) diff --git a/tests/api/test_event_date.py b/tests/api/test_event_date.py index c1acfa6..8e17185 100644 --- a/tests/api/test_event_date.py +++ b/tests/api/test_event_date.py @@ -81,6 +81,10 @@ def test_search(client, seeder, utils, app, db): url = utils.get_url("api_v1_event_date_search", organizer_id=organizer_id) response = utils.get_ok(url) + event_place_id = seeder.upsert_default_event_place(admin_unit_id) + url = utils.get_url("api_v1_event_date_search", event_place_id=event_place_id) + response = utils.get_ok(url) + url = utils.get_url("api_v1_event_date_search", organization_id=admin_unit_id) response = utils.get_ok(url) diff --git a/tests/views/test_manage.py b/tests/views/test_manage.py index 70d9f18..97cecd4 100644 --- a/tests/views/test_manage.py +++ b/tests/views/test_manage.py @@ -123,6 +123,16 @@ def test_admin_unit_events_invalidDateFormat(client, seeder, utils): ) +def test_admin_unit_events_place(client, seeder, utils): + user_id, admin_unit_id = seeder.setup_base(admin_unit_verified=False) + seeder.create_event(admin_unit_id, draft=True) + event_place_id = seeder.upsert_default_event_place(admin_unit_id) + + utils.get_endpoint_ok( + "manage_admin_unit_events", id=admin_unit_id, event_place_id=event_place_id + ) + + def test_admin_unit_organizers(client, seeder, utils): user_id, admin_unit_id = seeder.setup_base()