""" Authentication module """ import os from datetime import datetime from flask_login import login_required, current_user from flask_menu import Menu, register_menu from flask import render_template, request, flash, Blueprint, redirect, url_for from app.models import User, Page, Ballot, Priority, Question, Option from app import db BLUEPRINT = Blueprint( 'vote', __name__, template_folder='templates' ) @register_menu(BLUEPRINT, 'vote', 'Vote') @login_required @BLUEPRINT.route("/") def main(): """Ballots overview""" ballots = Ballot.query.all() return render_template( 'main.j2', ballots=ballots, ) @BLUEPRINT.route('/create', methods=["GET", "POST"]) @login_required def create(): """Creating ballot""" if request.method == 'POST': ballot = Ballot() print(request.form) ballot.name = request.form['name'] ballot.description = request.form['description'] ballot.user_id = current_user.id start_at = "%s %s" % (request.form['start_at_date'], request.form['start_at_time']) ballot.start_at = datetime.strptime(start_at, "%Y-%m-%d %H:%M") end_at = "%s %s" % (request.form['end_at_date'], request.form['end_at_time']) ballot.end_at = datetime.strptime(end_at, "%Y-%m-%d %H:%M") db.session.add(ballot) db.session.commit() flash('Page "%s" successfully created' % ballot.name, 'success') return redirect(url_for('vote.view', ballot_id=ballot.id)) priorities = Priority.query.all() return render_template( 'vote/create.j2', priorities=priorities ) @BLUEPRINT.route('/', methods=["GET", "POST"]) @login_required def view(ballot_id): """View ballot""" ballot = Ballot.query.get(ballot_id) if request.method == 'POST': option = Option() option.question_id = request.form['question_id'] option.name = request.form['name'] db.session.add(option) db.session.commit() return render_template( 'vote/view.j2', ballot=ballot, ) @BLUEPRINT.route('//add_question', methods=["GET", "POST"]) @login_required def add_question(ballot_id): """Add question to ballot""" ballot = Ballot.query.get(ballot_id) if request.method == 'POST': question = Question() question.ballot_id = ballot.id question.name = request.form['name'] question.description = request.form['description'] question.combined_approval_voting = 'combined_approval_voting' in request.form db.session.add(question) db.session.commit() if question.combined_approval_voting: options = ['Voor', 'Tegen', 'Onthouden'] for option_name in options: option = Option() option.question_id = question.id option.name = option_name db.session.add(option) db.session.commit() return redirect(url_for('vote.view', ballot_id=ballot.id)) return render_template( 'vote/add_question.j2', ballot=ballot, ) @BLUEPRINT.route('/public/', methods=["GET", "POST"]) def public(ballot_id): """Vote and view results of ballot""" ballot = Ballot.query.get(ballot_id) return render_template( 'vote/public.j2', ballot=ballot, )