Allow for workshop/meal checkins #19

Merged
Muirrum merged 6 commits from meal-checkin into master 2023-12-01 17:30:16 -05:00
5 changed files with 41 additions and 1 deletions
Showing only changes of commit dfd0c33be7 - Show all commits

View file

@ -5,6 +5,7 @@ from flask_login import LoginManager
from flask_assets import Bundle, Environment from flask_assets import Bundle, Environment
from flask_cors import CORS from flask_cors import CORS
from flask_mail import Mail, email_dispatched from flask_mail import Mail, email_dispatched
from flask_qrcode import QRcode
db = SQLAlchemy() db = SQLAlchemy()
@ -13,6 +14,7 @@ login = LoginManager()
environment = Environment() environment = Environment()
cors = CORS() cors = CORS()
mail = Mail() mail = Mail()
qrcode = QRcode()
def create_app(): def create_app():
app = Flask(__name__) app = Flask(__name__)
@ -25,6 +27,7 @@ def create_app():
environment.init_app(app) environment.init_app(app)
cors.init_app(app) cors.init_app(app)
mail.init_app(app) mail.init_app(app)
qrcode.init_app(app)
scss = Bundle('css/style.scss', filters='scss', scss = Bundle('css/style.scss', filters='scss',
output='css/style.css') output='css/style.css')

View file

@ -1,9 +1,13 @@
from flask import render_template, redirect, request, url_for, flash import flask
from flask import Response, render_template, redirect, request, url_for, flash
from flask_login import current_user, login_required from flask_login import current_user, login_required
from goathacks.admin import bp, forms from goathacks.admin import bp, forms
from goathacks import db from goathacks import db
from goathacks.models import Event from goathacks.models import Event
import io, qrcode
import qrcode.image.pure
@bp.route("/events") @bp.route("/events")
@login_required @login_required
def list_events(): def list_events():
@ -14,6 +18,14 @@ def list_events():
return render_template("events/list.html", events=events) return render_template("events/list.html", events=events)
@bp.route("/events/events.json")
@login_required
def events_json():
if not current_user.is_admin:
return redirect(url_for("dashboard.home"))
events = Event.query.all()
return Event.create_json_output(events)
@bp.route("/events/new", methods=["GET", "POST"]) @bp.route("/events/new", methods=["GET", "POST"])
@login_required @login_required
def new_event(): def new_event():
@ -67,3 +79,16 @@ def edit_event(id):
form = forms.EventForm(obj=event) form = forms.EventForm(obj=event)
return render_template("events/new_event.html", form=form) return render_template("events/new_event.html", form=form)
@bp.route("/events/qrcode/<int:id>")
@login_required
def qrcode_event(id):
if not current_user.is_admin:
return redirect(url_for("dashboard.home"))
event = Event.query.filter_by(id=id).first()
if event is None:
flash("Event does not exist")
return redirect(url_for("admin.list_events"))
return render_template("events/qrcode.html", event=event)

View file

@ -4,6 +4,8 @@
<div style="height: 100%; color: white;"> <div style="height: 100%; color: white;">
<h2>Events</h2> <h2>Events</h2>
Get a JSON readout of events <a href="{{ url_for('admin.events_json')
}}">here</a>
<table class="table table-striped table-hover table-condensed" style="color: <table class="table table-striped table-hover table-condensed" style="color:
white;"> white;">
<thead> <thead>
@ -15,6 +17,7 @@
<th>End</th> <th>End</th>
<th>Category</th> <th>Category</th>
<th>Checked in</th> <th>Checked in</th>
<th>QR Code</th>
<th><a href="{{url_for('admin.new_event')}}">New</a></th> <th><a href="{{url_for('admin.new_event')}}">New</a></th>
</tr> </tr>
</thead> </thead>
@ -28,6 +31,8 @@
<td>{{ event.end_time }}</td> <td>{{ event.end_time }}</td>
<td>{{ event.category }}</td> <td>{{ event.category }}</td>
<td>{{ event.get_checkins()|length }}</td> <td>{{ event.get_checkins()|length }}</td>
<td><a href='{{ url_for("admin.qrcode_event", id=event.id)
}}'>QR Code</a></td>
<td><a href="{{url_for('admin.edit_event', id=event.id)}}">Edit</a></td> <td><a href="{{url_for('admin.edit_event', id=event.id)}}">Edit</a></td>
</tr> </tr>
{% endfor %} {% endfor %}

View file

@ -0,0 +1,6 @@
<head>
<title>QR Code for {{ event.name }}</title>
</head>
<body>
<img src="{{ qrcode(url_for('events.workshop_checkin', id=event.id)) }}">
</body>

View file

@ -1,6 +1,7 @@
alembic==1.8.1 alembic==1.8.1
click==8.1.3 click==8.1.3
Flask==2.2.2 Flask==2.2.2
Flask-QRCode
Flask-Assets Flask-Assets
Flask-CORS Flask-CORS
Flask-Mail Flask-Mail