From 0c7f6a4dc8595437253480d2a39294281ada4d93 Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Thu, 1 Oct 2020 21:23:52 +0200 Subject: [PATCH] =?UTF-8?q?F=C3=BCr=20ein=20Event=20kann=20man=20eine=20an?= =?UTF-8?q?dere=20Organisation=20fragen,=20ob=20sie=20dieses=20Event=20ref?= =?UTF-8?q?erenzieren/empfehlen=20m=C3=B6chten.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 5 +- forms/reference_request.py | 19 +- jinja_filters.py | 4 +- services/reference.py | 14 + templates/_macros.html | 17 +- templates/email/reference_request_notice.html | 6 + templates/email/reference_request_notice.txt | 3 + ...eference_request_review_status_notice.html | 6 + ...reference_request_review_status_notice.txt | 3 + templates/event/read.html | 2 +- ....html => reference_requests_incoming.html} | 8 +- .../manage/reference_requests_outgoing.html | 30 + ...ferences.html => references_incoming.html} | 4 +- templates/manage/references_outgoing.html | 30 + templates/reference_request/review.html | 42 + .../reference_request/review_status.html | 22 + translations/de/LC_MESSAGES/messages.mo | Bin 12022 -> 13851 bytes translations/de/LC_MESSAGES/messages.po | 769 ++++++++++-------- views/admin_unit.py | 1 + views/admin_unit_member.py | 1 + views/admin_unit_member_invitation.py | 1 + views/event.py | 1 + views/event_place.py | 1 + views/event_review.py | 1 + views/organizer.py | 1 + views/reference.py | 25 +- views/reference_request.py | 120 +-- views/reference_request_review.py | 78 ++ views/utils.py | 6 + 29 files changed, 781 insertions(+), 439 deletions(-) create mode 100644 services/reference.py create mode 100644 templates/email/reference_request_notice.html create mode 100644 templates/email/reference_request_notice.txt create mode 100644 templates/email/reference_request_review_status_notice.html create mode 100644 templates/email/reference_request_review_status_notice.txt rename templates/manage/{reference_requests.html => reference_requests_incoming.html} (61%) create mode 100644 templates/manage/reference_requests_outgoing.html rename templates/manage/{references.html => references_incoming.html} (83%) create mode 100644 templates/manage/references_outgoing.html create mode 100644 templates/reference_request/review.html create mode 100644 templates/reference_request/review_status.html create mode 100644 views/reference_request_review.py diff --git a/app.py b/app.py index bf731db..c985e25 100644 --- a/app.py +++ b/app.py @@ -2,7 +2,6 @@ import os from base64 import b64decode from flask import jsonify, Flask, render_template, request, url_for, redirect, abort, flash, current_app from flask_sqlalchemy import SQLAlchemy -from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import joinedload from sqlalchemy.sql import asc, func from sqlalchemy import and_, or_, not_ @@ -13,7 +12,6 @@ from flask_principal import Permission from flask_cors import CORS import pytz import json -from urllib.parse import quote_plus from flask_qrcode import QRcode from flask_mail import Mail, Message @@ -40,8 +38,6 @@ app.config['BABEL_DEFAULT_LOCALE'] = 'de' app.config['BABEL_DEFAULT_TIMEZONE'] = 'Europe/Berlin' babel = Babel(app) -app.jinja_env.filters['quote_plus'] = lambda u: quote_plus(u) - # cors cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) @@ -100,6 +96,7 @@ from views import ( organizer, reference, reference_request, + reference_request_review, root, user, widget diff --git a/forms/reference_request.py b/forms/reference_request.py index 76fe85a..a87282c 100644 --- a/forms/reference_request.py +++ b/forms/reference_request.py @@ -3,6 +3,7 @@ from flask_wtf import FlaskForm from wtforms import SelectField, StringField, SubmitField from wtforms.validators import DataRequired from .common import event_rating_choices +from models import EventReferenceRequestRejectionReason, EventReferenceRequestReviewStatus class CreateEventReferenceRequestForm(FlaskForm): admin_unit_id = SelectField(lazy_gettext('Admin unit'), validators=[DataRequired()], coerce=int) @@ -10,4 +11,20 @@ class CreateEventReferenceRequestForm(FlaskForm): class DeleteReferenceRequestForm(FlaskForm): submit = SubmitField(lazy_gettext("Delete request")) - name = StringField(lazy_gettext('Name'), validators=[DataRequired()]) \ No newline at end of file + name = StringField(lazy_gettext('Name'), validators=[DataRequired()]) + +class ReferenceRequestReviewForm(FlaskForm): + review_status = SelectField(lazy_gettext('Review status'), coerce=int, choices=[ + (int(EventReferenceRequestReviewStatus.inbox), lazy_gettext('EventReferenceRequestReviewStatus.inbox')), + (int(EventReferenceRequestReviewStatus.verified), lazy_gettext('EventReferenceRequestReviewStatus.verified')), + (int(EventReferenceRequestReviewStatus.rejected), lazy_gettext('EventReferenceRequestReviewStatus.rejected'))]) + + rejection_reason = SelectField(lazy_gettext('Rejection reason'), coerce=int, choices=[ + (0, ''), + (int(EventReferenceRequestRejectionReason.duplicate), lazy_gettext('EventReferenceRequestRejectionReason.duplicate')), + (int(EventReferenceRequestRejectionReason.untrustworthy), lazy_gettext('EventReferenceRequestRejectionReason.untrustworthy')), + (int(EventReferenceRequestRejectionReason.irrelevant), lazy_gettext('EventReferenceRequestRejectionReason.irrelevant')), + (int(EventReferenceRequestRejectionReason.illegal), lazy_gettext('EventReferenceRequestRejectionReason.illegal'))]) + + rating = SelectField(lazy_gettext('Rating'), default=50, coerce=int, choices=event_rating_choices) + submit = SubmitField(lazy_gettext("Save review")) \ No newline at end of file diff --git a/jinja_filters.py b/jinja_filters.py index 41356b5..28aa9a3 100644 --- a/jinja_filters.py +++ b/jinja_filters.py @@ -1,5 +1,6 @@ from app import app from utils import get_event_category_name, get_localized_enum_name +from urllib.parse import quote_plus import os def env_override(value, key): @@ -7,4 +8,5 @@ def env_override(value, key): app.jinja_env.filters['event_category_name'] = lambda u: get_event_category_name(u) app.jinja_env.filters['loc_enum'] = lambda u: get_localized_enum_name(u) -app.jinja_env.filters['env_override'] = env_override \ No newline at end of file +app.jinja_env.filters['env_override'] = env_override +app.jinja_env.filters['quote_plus'] = lambda u: quote_plus(u) \ No newline at end of file diff --git a/services/reference.py b/services/reference.py new file mode 100644 index 0000000..e9a6a42 --- /dev/null +++ b/services/reference.py @@ -0,0 +1,14 @@ +from app import db +from models import EventReference, EventReferenceRequest +from sqlalchemy import and_, or_, not_ + +def create_event_reference_for_request(request): + result = EventReference.query.filter(and_(EventReference.event_id == request.event_id, + EventReference.admin_unit_id == request.admin_unit_id)).first() + + if result is None: + result = EventReference(event_id = request.event_id, + admin_unit_id = request.admin_unit_id) + db.session.add(result) + + return result diff --git a/templates/_macros.html b/templates/_macros.html index 40223ef..b5cb447 100644 --- a/templates/_macros.html +++ b/templates/_macros.html @@ -218,9 +218,9 @@ {% endif %} {% endmacro %} -{% macro render_reference_review_status_pill(reference) %} -{% if reference.review_status and reference.review_status != 2 %} - {{ reference.review_status | loc_enum }} +{% macro render_reference_request_review_status_pill(reference_request) %} +{% if reference_request.review_status %} + {{ reference_request.review_status | loc_enum }} {% endif %} {% endmacro %} @@ -265,6 +265,11 @@ {{ render_enum_prop(event.rejection_resaon, 'fa-search-minus', 'Rejection reason') }} {% endmacro %} +{% macro render_reference_request_review_status(reference_request) %} + {{ render_enum_prop(reference_request.review_status, 'fa-certificate', 'Review status') }} + {{ render_enum_prop(reference_request.rejection_reason, 'fa-search-minus', 'Rejection reason') }} +{% endmacro %} + {% macro render_event_props(event, start, end, dates = None, show_rating = False) %}
@@ -476,8 +481,10 @@
{% endif %} diff --git a/templates/manage/reference_requests.html b/templates/manage/reference_requests_incoming.html similarity index 61% rename from templates/manage/reference_requests.html rename to templates/manage/reference_requests_incoming.html index 017e4c2..d70b23f 100644 --- a/templates/manage/reference_requests.html +++ b/templates/manage/reference_requests_incoming.html @@ -1,5 +1,5 @@ {% extends "layout.html" %} -{% from "_macros.html" import render_request_review_status_pill, render_event_status_pill, render_event_date, render_pagination, render_event_organizer, render_manage_menu %} +{% from "_macros.html" import render_reference_request_review_status_pill, render_event_status_pill, render_event_date, render_pagination, render_event_organizer, render_manage_menu %} {% block title %} {{ _('Reference requests') }} {% endblock %} @@ -7,7 +7,7 @@

{{ admin_unit.name }}

-{{ render_manage_menu(admin_unit, 'reference_requests') }} +{{ render_manage_menu(admin_unit, 'reference_requests_incoming') }}