app.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. """
  2. Authentication module
  3. """
  4. import os
  5. from datetime import datetime
  6. from flask_login import login_required, current_user
  7. from flask_menu import Menu, register_menu
  8. from flask import render_template, request, flash, Blueprint, redirect, url_for
  9. from app.models import User, Page, Ballot, Priority, Question, Option
  10. from app import db
  11. BLUEPRINT = Blueprint(
  12. 'vote',
  13. __name__,
  14. template_folder='templates'
  15. )
  16. @register_menu(BLUEPRINT, 'vote', 'Vote')
  17. @login_required
  18. @BLUEPRINT.route("/")
  19. def main():
  20. """Ballots overview"""
  21. ballots = Ballot.query.all()
  22. return render_template(
  23. 'main.j2',
  24. ballots=ballots,
  25. )
  26. @BLUEPRINT.route('/create', methods=["GET", "POST"])
  27. @login_required
  28. def create():
  29. """Creating ballot"""
  30. if request.method == 'POST':
  31. ballot = Ballot()
  32. print(request.form)
  33. ballot.name = request.form['name']
  34. ballot.description = request.form['description']
  35. ballot.user_id = current_user.id
  36. start_at = "%s %s" % (request.form['start_at_date'], request.form['start_at_time'])
  37. ballot.start_at = datetime.strptime(start_at, "%Y-%m-%d %H:%M")
  38. end_at = "%s %s" % (request.form['end_at_date'], request.form['end_at_time'])
  39. ballot.end_at = datetime.strptime(end_at, "%Y-%m-%d %H:%M")
  40. db.session.add(ballot)
  41. db.session.commit()
  42. flash('Page "%s" successfully created' % ballot.name, 'success')
  43. return redirect(url_for('vote.view', ballot_id=ballot.id))
  44. priorities = Priority.query.all()
  45. return render_template(
  46. 'vote/create.j2',
  47. priorities=priorities
  48. )
  49. @BLUEPRINT.route('/<int:ballot_id>', methods=["GET", "POST"])
  50. @login_required
  51. def view(ballot_id):
  52. """View ballot"""
  53. ballot = Ballot.query.get(ballot_id)
  54. if request.method == 'POST':
  55. option = Option()
  56. option.question_id = request.form['question_id']
  57. option.name = request.form['name']
  58. db.session.add(option)
  59. db.session.commit()
  60. return render_template(
  61. 'vote/view.j2',
  62. ballot=ballot,
  63. )
  64. @BLUEPRINT.route('/<int:ballot_id>/add_question', methods=["GET", "POST"])
  65. @login_required
  66. def add_question(ballot_id):
  67. """Add question to ballot"""
  68. ballot = Ballot.query.get(ballot_id)
  69. if request.method == 'POST':
  70. question = Question()
  71. question.ballot_id = ballot.id
  72. question.name = request.form['name']
  73. question.description = request.form['description']
  74. question.combined_approval_voting = 'combined_approval_voting' in request.form
  75. db.session.add(question)
  76. db.session.commit()
  77. if question.combined_approval_voting:
  78. options = ['Voor', 'Tegen', 'Onthouden']
  79. for option_name in options:
  80. option = Option()
  81. option.question_id = question.id
  82. option.name = option_name
  83. db.session.add(option)
  84. db.session.commit()
  85. return redirect(url_for('vote.view', ballot_id=ballot.id))
  86. return render_template(
  87. 'vote/add_question.j2',
  88. ballot=ballot,
  89. )
  90. @BLUEPRINT.route('/public/<int:ballot_id>', methods=["GET", "POST"])
  91. def public(ballot_id):
  92. """Vote and view results of ballot"""
  93. ballot = Ballot.query.get(ballot_id)
  94. return render_template(
  95. 'vote/public.j2',
  96. ballot=ballot,
  97. )