From 18c6d653bb504326c5376e9d7989dcf73b98fff7 Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Sun, 5 Jul 2020 17:36:50 +0200 Subject: [PATCH] Org with admin unit --- app.py | 20 ++++++++++++++++++++ forms/organization.py | 12 +++++++----- templates/organization/create.html | 9 +++++++++ translations/de/LC_MESSAGES/messages.mo | Bin 4073 -> 4119 bytes translations/de/LC_MESSAGES/messages.po | 18 +++++++++++------- 5 files changed, 47 insertions(+), 12 deletions(-) diff --git a/app.py b/app.py index d75e69d..a60e0df 100644 --- a/app.py +++ b/app.py @@ -363,6 +363,12 @@ def upsert_event(event_name, host, location_name, start, description, link = Non return result +def get_admin_units_for_organizations(): + if has_current_user_permission('event:create'): + return AdminUnit.query.all() + + return admin_units_the_current_user_is_member_of() + def get_event_hosts(): # User permission, e.g. user is global admin if has_current_user_permission('event:create'): @@ -482,6 +488,14 @@ def admin_units_with_current_user_member_permission(permission): return result +def admin_units_the_current_user_is_member_of(): + result = list() + admin_unit_members = AdminUnitMember.query.filter_by(user_id=current_user.id).all() + for admin_unit_member in admin_unit_members: + result.append(admin_unit_member.adminunit) + + return result + def organizations_with_current_user_org_member_permission(permission): result = list() org_members = OrgMember.query.filter_by(user_id=current_user.id).all() @@ -992,13 +1006,19 @@ def organization_create(): abort(401) form = CreateOrganizationForm() + form.admin_unit_id.choices = sorted([(admin_unit.id, admin_unit.name) for admin_unit in get_admin_units_for_organizations()], key=lambda admin_unit: admin_unit[1]) + if form.validate_on_submit(): organization = Organization() organization.location = Location() update_organization_with_form(organization, form) + admin_unit = AdminUnit.query.get_or_404(form.admin_unit_id.data) + add_organization_to_admin_unit(organization, admin_unit) + try: db.session.add(organization) + upsert_org_or_admin_unit_for_organization(organization) db.session.commit() flash(gettext('Organization successfully created'), 'success') return redirect(url_for('organization', organization_id=organization.id)) diff --git a/forms/organization.py b/forms/organization.py index 14e0293..db0ae96 100644 --- a/forms/organization.py +++ b/forms/organization.py @@ -1,7 +1,7 @@ from flask_babelex import lazy_gettext from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileAllowed -from wtforms import StringField, SubmitField, DecimalField, TextAreaField, FormField +from wtforms import StringField, SubmitField, DecimalField, TextAreaField, FormField, SelectField from wtforms.validators import DataRequired, Optional import decimal @@ -13,14 +13,16 @@ class OrganizationLocationForm(FlaskForm): latitude = DecimalField(lazy_gettext('Latitude'), places=16, validators=[Optional()]) longitude = DecimalField(lazy_gettext('Longitude'), places=16, validators=[Optional()]) -class CreateOrganizationForm(FlaskForm): - submit = SubmitField(lazy_gettext("Create organization")) - +class BaseOrganizationForm(FlaskForm): name = StringField(lazy_gettext('Name'), validators=[DataRequired()]) url = StringField(lazy_gettext('Link URL'), validators=[Optional()]) logo_file = FileField(lazy_gettext('Logo'), validators=[FileAllowed(['jpg', 'jpeg', 'png'], lazy_gettext('Images only!'))]) legal_name = TextAreaField(lazy_gettext('Legal name'), validators=[Optional()]) location = FormField(OrganizationLocationForm) -class UpdateOrganizationForm(CreateOrganizationForm): +class CreateOrganizationForm(BaseOrganizationForm): + submit = SubmitField(lazy_gettext("Create organization")) + admin_unit_id = SelectField(lazy_gettext('Admin unit'), validators=[DataRequired()], coerce=int) + +class UpdateOrganizationForm(BaseOrganizationForm): submit = SubmitField(lazy_gettext("Update organization")) \ No newline at end of file diff --git a/templates/organization/create.html b/templates/organization/create.html index 260735f..99c833d 100644 --- a/templates/organization/create.html +++ b/templates/organization/create.html @@ -49,6 +49,15 @@ +
+
+ {{ _('Admin unit') }} +
+
+ {{ render_field_with_errors(form.admin_unit_id, class="autocomplete w-100") }} +
+
+ {{ render_field(form.submit) }} diff --git a/translations/de/LC_MESSAGES/messages.mo b/translations/de/LC_MESSAGES/messages.mo index cb33b8681e652dc6ad0441aeb29b1ff66c2f35b8..0f42d636fe396a7442e337bb1494176bd568d0b3 100644 GIT binary patch delta 1363 zcmYM!O-R&17{~EP-A#A5+Rc|1MkRF!A_GB)utSv8MV6>TZ{Ht1&@#?vX8tqJyyD8X$z<@pG&EuS zj`CN<-&CP$|9@3svyD`%kz`F|F>J*s9>x;v!Vsph7<+IX_TyU2y63Qr`sIK1z@{lE z&tLSV?zmM9_ejnBTf7Xy-j{ zubV*~?Vvl18aRrZ@dD~Q04J2D7 z(@uY(1{9I$(IilTwxR;3kYo*HI`aLf$94#JU^mv|Y1E0`M8%y$Ep#4rQm+GVSVRR{ zMs@s%n&=DasPbO_iCR#I)u?|Q)xX@WL`{%HjjMAT{rf&t+&0w4gCqVSjl{MSsK5j6 z5Gv5HJBpg%A~s?U_uvcE!oH!#>z))ZjCzEnSc^?avNTx{^IL|3?qUG-4`>V(U>X(R z7V4<(xsR}d`ZKJ?CDi!usK=OKTiRg_>aOciSI~}nL&s59HG(m{zDpG9XqZH*_7v6e z6Y7x_CUVhmee_`OKxQzR9n74XZ4TcJ6*ngvT3YwE%&tUE7Ua&x%Vs-b*F%2+E{}6K delta 1332 zcmYM!O-R&17{~F)+*S9*)lALA$YM81HgMhWUO7*+_;B2mYds6&4WqAnSc zi}XSi74&wgg)E{VLZU-OQRbx}lORZf4$&LY_XiKO{C7Vy^PhQU=9yu~+dnS}-Zz9w z#%Dd>Hojx?RQvylhs~O))*_E3`H5jC)?g2Yun(&-hqX9>aU60-Z~^tbUO$FWv%pFe z6yO3X@D+^UE#$HL-u?&~V9(rXZ~us`w134EMyt%`V;3sU8q~M})Pe@F9(Q7l`K{~)@ z`r06Bz%VYt0&2$r>MT#Vmr&y;a3MZKO*rN6XHg6Lfjkyw`$(5aOnnDfufa?Fr{eqg{8*1DiH_YnQFM*2Nh}wCZx2KV=7Iafk;668p3e@jz zL`|?2vsl2Dcp9~^C#dnSPyyefF5fJsu!?ij(WUvR#MP*y=tKT*0^34C0g9*q2T-Xx z>W*R)^%5?|8>j$JQI~KAwZreIv;K=Zf@Zd>yVHd_syuRvwjDch7bbO^#we)cJ=EoT gU3aQAoGxz&-wai+YVXeUW-{eabVo&bf9!ndALue{fdBvi diff --git a/translations/de/LC_MESSAGES/messages.po b/translations/de/LC_MESSAGES/messages.po index c0c9cfa..34a18f5 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-07-04 21:11+0200\n" +"POT-Creation-Date: 2020-07-05 17:27+0200\n" "PO-Revision-Date: 2020-06-07 18:51+0200\n" "Last-Translator: FULL NAME \n" "Language: de\n" @@ -94,27 +94,27 @@ msgstr "Sport" msgid "Event_Other" msgstr "Sonstiges" -#: app.py:1003 +#: app.py:1023 msgid "Organization successfully created" msgstr "Organisation erfolgreich erstellt" -#: app.py:1023 +#: app.py:1043 msgid "Organization successfully updated" msgstr "Organisation erfolgreich aktualisiert" -#: app.py:1078 +#: app.py:1098 msgid "Place successfully updated" msgstr "Ort erfolgreich aktualisiert" -#: app.py:1101 +#: app.py:1121 msgid "Place successfully created" msgstr "Ort erfolgreich erstellt" -#: app.py:1193 +#: app.py:1213 msgid "Event successfully created" msgstr "Veranstaltung erfolgreich erstellt" -#: app.py:1225 +#: app.py:1245 msgid "Event suggestion successfully created" msgstr "Veranstaltungsvorschlag erfolgreich erstellt" @@ -350,6 +350,10 @@ msgstr "Organisation hinzufügen" msgid "Organization" msgstr "Organisation" +#: templates/organization/create.html:54 +msgid "Admin unit" +msgstr "Verwaltungseinheit" + #: templates/organization/read.html:12 templates/organization/update.html:10 msgid "Update organization" msgstr "Organisation aktualisieren"