1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-09-19 18:31:16 +00:00
AdvLabDB/advlabdb/routes.py

198 lines
7.2 KiB
Python
Raw Normal View History

2021-04-01 22:33:50 +00:00
from advlabdb import app, bcrypt
2021-03-31 23:04:21 +00:00
from flask import render_template, request, url_for, flash, redirect
from advlabdb.utils import *
from advlabdb.models import *
2021-03-31 23:04:21 +00:00
from advlabdb.forms import *
2021-03-18 13:53:55 +00:00
2021-03-31 18:28:27 +00:00
activeSemester_id = 0
2021-03-20 14:41:22 +00:00
2021-03-31 23:04:21 +00:00
2021-03-20 14:41:22 +00:00
@app.context_processor
def util_processor():
def semesterDropDownItems():
semesters = Semester.query.all()
items = []
for semester in semesters:
items.append('<li><a class="dropdown-item" href="' + url_for("set_semester") + "?semester_id=" +
str(semester.id) + '">' + semester.label + '</a></li>')
return items
2021-04-01 12:08:42 +00:00
pages = ["Index", "Students", "Assistants", "Experiments", "Appointments", "Groups", "Users", "Semesters"]
def navbarItems(title):
items = []
for page in pages[1:]:
if page == title:
active = " active"
else:
active = ""
items.append('<a class="nav-link' + active + '" href="' + titleToTemplate(page) + '">' + page + '</a>')
return items
2021-03-20 14:41:22 +00:00
return dict(semesterDropDownItems=semesterDropDownItems,
2021-04-01 12:08:42 +00:00
activeSemesterLabel=Semester.query.get(activeSemester_id).label,
pages=pages,
navbarItems=navbarItems)
2021-03-20 14:41:22 +00:00
2021-03-31 23:04:21 +00:00
2021-03-18 13:53:55 +00:00
@app.route("/")
def index():
2021-03-31 18:28:27 +00:00
global activeSemester_id
activeSemester_id = Semester.query.all()[-1].id
2021-04-01 12:08:42 +00:00
title = "Index"
return render_template(titleToTemplate(title) + ".html", title=title)
2021-03-31 23:04:21 +00:00
@app.route("/students")
def students():
2021-03-20 14:41:22 +00:00
semester = Semester.query.get(activeSemester_id)
2021-03-19 17:09:07 +00:00
parts = semester.parts
tables = []
tablesLabels = []
2021-03-19 15:30:02 +00:00
headerAndDataList = [["Student number", "row.student.student_number"],
["First name", "row.student.first_name"],
["Last name", "row.student.last_name"],
["Email", "row.student.email"],
["GN", "row.group.number"],
2021-03-19 15:30:02 +00:00
["Bachelor thesis", "row.student.bachelor_thesis"],
["BT WG", "row.student.bachelor_thesis_work_group"],
["Note", "row.student.note"],
["Final part mark", "row.final_part_mark"],
["Experiemt marks", "row.experiment_marks"],
["Parts", "[ps.part for ps in row.student.part_students]"]]
2021-03-19 15:30:02 +00:00
for part in parts:
tablesLabels.append("Part " + part.label + ":")
tables.append(makeTable(headerAndDataList=headerAndDataList,
rows=part.part_students))
2021-04-01 12:08:42 +00:00
title = "Students"
return render_template(titleToTemplate(title) + ".html", title=title,
tables=tables, tablesLabels=tablesLabels)
2021-03-31 23:04:21 +00:00
@app.route("/assistants")
def assistants():
2021-03-19 17:09:07 +00:00
headerAndDataList = [["First name", "row.first_name"],
["Last name", "row.last_name"],
["Email", "row.email"],
["Phone number", "row.phone_number"],
["Mobile phone number", "row.mobile_phone_number"],
["Room", "row.room"],
["Building", "row.building"],
["User", "row.user"],
["Appointments", "row.appointments"],
["Experiemt marks", "row.experiment_marks"]]
table = makeTable(headerAndDataList=headerAndDataList,
rows=Assistant.query.filter(Assistant.user_id != None).all())
2021-04-01 12:08:42 +00:00
title = "Assistants"
return render_template(titleToTemplate(title) + ".html", title=title,
2021-03-19 17:09:07 +00:00
table=table)
2021-03-31 23:04:21 +00:00
@app.route("/experiments")
def experiments():
2021-03-20 14:41:22 +00:00
semester = Semester.query.get(activeSemester_id)
parts = semester.parts
tables = []
tablesLabels = []
2021-03-31 23:04:21 +00:00
headerAndDataList = [["Number", "row.experiment.number"],
["Name", "row.experiment.name"],
["Assistants", "row.assistants"],
["Groups with this ex.", "[gEx.group.number for gEx in row.group_experiments]"]]
for part in parts:
tablesLabels.append("Part " + part.label + ":")
tables.append(makeTable(headerAndDataList=headerAndDataList,
rows=part.part_experiments))
2021-04-01 12:08:42 +00:00
title = "Experiments"
return render_template(titleToTemplate(title) + ".html", title=title,
tables=tables, tablesLabels=tablesLabels)
2021-03-31 23:04:21 +00:00
@app.route("/appointments")
def appointments():
2021-04-01 12:08:42 +00:00
title = "Appointments"
return render_template(titleToTemplate(title) + ".html", title=title)
2021-03-31 23:04:21 +00:00
@app.route("/groups")
def groups():
2021-03-20 14:41:22 +00:00
semester = Semester.query.get(activeSemester_id)
parts = semester.parts
tables = []
tablesLabels = []
headerAndDataList = [["Number", "row.number"],
["Students",
"[ps.student.first_name + ' ' + ps.student.last_name for ps in row.part_students]"],
["Experiments (appointments)",
"[str(gx.part_experiment.experiment.number) + ' (' + str([appointmentDate(a.date) for a in gx.appointments]) + ')' for gx in row.group_experiments]"]]
for part in parts:
tablesLabels.append("Part " + part.label + ":")
tables.append(makeTable(headerAndDataList=headerAndDataList,
rows=part.groups))
2021-04-01 12:08:42 +00:00
title = "Groups"
return render_template(titleToTemplate(title) + ".html", title=title,
tables=tables, tablesLabels=tablesLabels)
2021-03-31 23:04:21 +00:00
@app.route("/users")
def users():
2021-03-19 20:40:40 +00:00
headerAndDataList = [["Email", "row.email"],
["Is admin", "row.is_admin"],
["Assistant", "row.assistant"]]
table = makeTable(headerAndDataList=headerAndDataList,
rows=User.query.all())
2021-04-01 12:08:42 +00:00
title = "Users"
return render_template(titleToTemplate(title) + ".html", title=title,
2021-03-19 20:40:40 +00:00
table=table)
2021-03-20 14:41:22 +00:00
2021-03-31 23:04:21 +00:00
2021-03-20 14:41:22 +00:00
@app.route("/set_semester", methods=["GET"])
def set_semester():
global activeSemester_id
activeSemester_id = int(request.args.get("semester_id"))
2021-04-01 12:08:42 +00:00
title = "Index"
return render_template(titleToTemplate(title) + ".html", title=title)
2021-03-20 14:41:22 +00:00
2021-03-31 23:04:21 +00:00
2021-03-20 14:41:22 +00:00
@app.route("/semesters")
def semesters():
headerAndDataList = [["Label", "row.label"],
["Parts", "row.parts"]]
table = makeTable(headerAndDataList=headerAndDataList,
rows=Semester.query.all())
2021-04-01 12:08:42 +00:00
title = "Semesters"
return render_template(titleToTemplate(title) + ".html", title=title,
2021-03-20 14:41:22 +00:00
table=table)
2021-03-31 23:04:21 +00:00
@app.route("/register", methods=["GET", "POST"])
def register():
form = RegistrationForm()
if form.validate_on_submit():
password = randomPassword()
2021-04-01 22:33:50 +00:00
passwordHash = bcrypt.generate_password_hash(password).decode("utf-8")
2021-04-01 12:08:42 +00:00
2021-04-01 22:33:50 +00:00
email = form.email.data.lower()
2021-03-31 23:04:21 +00:00
admin = form.admin.data
2021-04-01 12:08:42 +00:00
2021-03-31 23:04:21 +00:00
user = User(email=email, password_hash=passwordHash, is_admin=admin)
db.session.add(user)
db.session.commit()
return render_template("registered.html", title="Registered",
email=email, password=password, admin=admin)
return render_template("register.html", title="Register", form=form)