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') }}