diff --git a/forms/event_place.py b/forms/event_place.py
index 9a6139d..81b820b 100644
--- a/forms/event_place.py
+++ b/forms/event_place.py
@@ -37,6 +37,10 @@ class UpdateEventPlaceForm(BaseEventPlaceForm):
public = BooleanField(lazy_gettext('Other organizers can use this location'), validators=[Optional()])
submit = SubmitField(lazy_gettext("Update place"))
+class DeleteEventPlaceForm(FlaskForm):
+ submit = SubmitField(lazy_gettext("Delete place"))
+ name = StringField(lazy_gettext('Name'), validators=[DataRequired()])
+
class FindEventPlaceForm(FlaskForm):
class Meta:
csrf = False
diff --git a/templates/event_place/delete.html b/templates/event_place/delete.html
new file mode 100644
index 0000000..3b6b2d1
--- /dev/null
+++ b/templates/event_place/delete.html
@@ -0,0 +1,24 @@
+{% extends "layout.html" %}
+{% from "_macros.html" import render_field_with_errors, render_field %}
+
+{% block content %}
+
+
{{ _('Delete place') }} "{{ place.name }}"
+
+
+
+{% endblock %}
diff --git a/templates/manage/places.html b/templates/manage/places.html
index 87e2155..c5446fb 100644
--- a/templates/manage/places.html
+++ b/templates/manage/places.html
@@ -32,6 +32,7 @@
diff --git a/translations/de/LC_MESSAGES/messages.mo b/translations/de/LC_MESSAGES/messages.mo
index 9505780..75b385e 100644
Binary files a/translations/de/LC_MESSAGES/messages.mo and b/translations/de/LC_MESSAGES/messages.mo differ
diff --git a/translations/de/LC_MESSAGES/messages.po b/translations/de/LC_MESSAGES/messages.po
index 1fcff31..b25ede9 100644
--- a/translations/de/LC_MESSAGES/messages.po
+++ b/translations/de/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2020-10-04 12:59+0200\n"
+"POT-Creation-Date: 2020-10-04 13:28+0200\n"
"PO-Revision-Date: 2020-06-07 18:51+0200\n"
"Last-Translator: FULL NAME \n"
"Language: de\n"
@@ -142,11 +142,11 @@ msgid "Longitude"
msgstr "Längengrad"
#: forms/admin_unit.py:19 forms/event.py:18 forms/event.py:36 forms/event.py:41
-#: forms/event.py:118 forms/event_place.py:20 forms/organizer.py:19
-#: forms/organizer.py:41 forms/reference.py:18 forms/reference_request.py:14
-#: templates/_macros.html:97 templates/admin/admin_units.html:18
-#: templates/event_place/list.html:19 templates/profile.html:16
-#: templates/profile.html:36
+#: forms/event.py:118 forms/event_place.py:20 forms/event_place.py:42
+#: forms/organizer.py:19 forms/organizer.py:41 forms/reference.py:18
+#: forms/reference_request.py:14 templates/_macros.html:97
+#: templates/admin/admin_units.html:18 templates/event_place/list.html:19
+#: templates/profile.html:16 templates/profile.html:36
msgid "Name"
msgstr "Name"
@@ -278,7 +278,7 @@ msgstr "Vorheriges Startdatum"
msgid "Tags"
msgstr "Stichworte"
-#: forms/event.py:51 forms/event.py:141 forms/event_place.py:44
+#: forms/event.py:51 forms/event.py:141 forms/event_place.py:48
#: templates/_macros.html:363 templates/event/create.html:59
#: templates/event/update.html:46 templates/manage/events.html:17
#: templates/manage/places.html:17 templates/organizer/create.html:16
@@ -351,7 +351,7 @@ msgstr "Bewertung"
#: forms/event.py:73 forms/event.py:74 forms/event.py:105
#: templates/_macros.html:333 templates/event/create.html:84
#: templates/event/update.html:55 templates/event_place/create.html:20
-#: templates/event_place/update.html:20
+#: templates/event_place/delete.html:13 templates/event_place/update.html:20
msgid "Place"
msgstr "Ort"
@@ -475,7 +475,11 @@ msgstr "Ort hinzufügen"
msgid "Update place"
msgstr "Ort aktualisieren"
-#: forms/event_place.py:43
+#: forms/event_place.py:41 templates/event_place/delete.html:6
+msgid "Delete place"
+msgstr "Ort löschen"
+
+#: forms/event_place.py:47
msgid "Find places"
msgstr "Orte finden"
@@ -845,7 +849,7 @@ msgstr "Bearbeiten"
#: templates/manage/events.html:47 templates/manage/members.html:21
#: templates/manage/members.html:36 templates/manage/organizers.html:23
-#: templates/manage/references_incoming.html:20
+#: templates/manage/places.html:35 templates/manage/references_incoming.html:20
msgid "Delete"
msgstr "Löschen"
@@ -980,6 +984,14 @@ msgstr "Ort erfolgreich erstellt"
msgid "Place successfully updated"
msgstr "Ort erfolgreich aktualisiert"
+#: views/event_place.py:70
+msgid "Entered name does not match place name"
+msgstr "Der eingegebene Name entspricht nicht dem Namen des Ortes"
+
+#: views/event_place.py:75
+msgid "Place successfully deleted"
+msgstr "Ort erfolgreich gelöscht"
+
#: views/event_review.py:55 views/reference_request_review.py:76
msgid "Event review status updated"
msgstr "Prüfungsstatus aktualisiert"
diff --git a/views/event_place.py b/views/event_place.py
index 7d8038e..515bd37 100644
--- a/views/event_place.py
+++ b/views/event_place.py
@@ -4,7 +4,7 @@ from flask import render_template, flash, url_for, redirect, request, jsonify
from flask_babelex import gettext
from flask_security import auth_required
from access import has_access, access_or_401, get_admin_unit_for_manage_or_404
-from forms.event_place import UpdateEventPlaceForm, CreateEventPlaceForm
+from forms.event_place import UpdateEventPlaceForm, CreateEventPlaceForm, DeleteEventPlaceForm
from .utils import flash_errors, upsert_image_with_data, send_mail, handleSqlError
from sqlalchemy.sql import asc, func
from sqlalchemy.exc import SQLAlchemyError
@@ -57,6 +57,34 @@ def event_place_update(id):
form=form,
place=place)
+@app.route('/event_place//delete', methods=('GET', 'POST'))
+@auth_required()
+def event_place_delete(id):
+ place = EventPlace.query.get_or_404(id)
+ access_or_401(place.adminunit, 'place:delete')
+
+ form = DeleteEventPlaceForm()
+
+ if form.validate_on_submit():
+ if form.name.data != place.name:
+ flash(gettext('Entered name does not match place name'), 'danger')
+ else:
+ try:
+ organizer_id=place.organizer.id
+ db.session.delete(place)
+ db.session.commit()
+ flash(gettext('Place successfully deleted'), 'success')
+ return redirect(url_for('manage_organizer_event_places', organizer_id=organizer_id))
+ except SQLAlchemyError as e:
+ db.session.rollback()
+ flash(handleSqlError(e), 'danger')
+ else:
+ flash_errors(form)
+
+ return render_template('event_place/delete.html',
+ form=form,
+ place=place)
+
def update_event_place_with_form(place, form):
form.populate_obj(place)