Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions appdata/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
cssignin.yaml
db/
cssignin.yaml
db/
kanboard/
4 changes: 2 additions & 2 deletions signinapp/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,9 +200,9 @@ def export_stamps(
@login_required
def export():
if current_user.role.admin:
name = request.values.get("name", None)
name = request.values.get("name", current_user.email)
else:
name = current_user.name
name = current_user.email
user = User.from_email(name)
start = request.args.get("start", None)
end = request.args.get("end", None)
Expand Down
35 changes: 26 additions & 9 deletions signinapp/team.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
from sqlalchemy import or_
from sqlalchemy.future import select

from .model import Role, ShirtSizes, Subteam, User, db
from .util import mentor_required
from .model import Role, ShirtSizes, Student, Subteam, User, db
from .util import get_current_graduation_years, mentor_required

team = Blueprint("team", __name__)

Expand Down Expand Up @@ -43,25 +43,42 @@ def subteam():
@team.route("/users/students")
@mentor_required
def list_students():
users = db.session.scalars(
select(User)
.where(or_(User.role.has(name="student"), User.role.has(name="lead")))
.order_by(User.name)
)
include_all = request.args.get("include_all", False) == "true"
select_stmt = select(User).where(or_(User.role.has(name="student"), User.role.has(name="lead")))
if not include_all:
select_stmt = select_stmt.join(Student).where(
Student.graduation_year.in_(get_current_graduation_years())
)
users = db.session.scalars(select_stmt.order_by(User.name)).all()
return render_template("user_list.html.jinja2", role="Student", users=users)


@team.route("/users/guardians")
@mentor_required
def list_guardians():
users = db.session.scalars(select(User).where(User.role.has(guardian=True)).order_by(User.name))
include_all = request.args.get("include_all", False) == "true"
users = db.session.scalars(
select(User).where(User.role.has(guardian=True)).order_by(User.name)
).all()
if not include_all:
users = [
guardian
for guardian in users
if any(
student
for student in guardian.guardian_user_data.students
if student.graduation_year in get_current_graduation_years()
)
]
return render_template("user_list.html.jinja2", role="Guardian", users=users)


@team.route("/users/mentors")
@mentor_required
def list_mentors():
users = db.session.scalars(select(User).where(User.role.has(mentor=True)).order_by(User.name))
users = db.session.scalars(
select(User).where(User.role.has(mentor=True)).order_by(User.name)
).all()
return render_template("user_list.html.jinja2", role="Mentor", users=users)


Expand Down
14 changes: 14 additions & 0 deletions signinapp/templates/user_list.html.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,20 @@
<div id="userListContainer" class="container pt-3">
<div class="d-flex flex-row align-items-center justify-content-between">
<h1>{{ role }} List</h1>
<div>
{{ users|length }} {{ role }}s
{% if role == "Student" or role == "Guardian" %}
{% if request.args.get('include_all',"false") == 'true' -%}
<a class="btn btn-secondary btn-sm"
href="{{ url_for(request.endpoint) }}"
role="button">Show Active</a>
{% else %}
<a class="btn btn-secondary btn-sm"
href="{{ url_for(request.endpoint, include_all='true') }}"
role="button">Show All</a>
{% endif %}
{% endif %}
</div>
{% if role == "Student" %}
<a class="btn btn-primary"
href="{{ url_for('auth.register')}}"
Expand Down
9 changes: 9 additions & 0 deletions signinapp/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,12 @@ def generate_grade_choices():
this_grad_year + 1: f"Junior ({this_grad_year+1})",
this_grad_year: f"Senior ({this_grad_year})",
}


def get_current_graduation_years() -> list[int]:
today = date.today()
this_grad_year = today.year
# If it's past June then graduation is a year from now
if today.month > 6:
this_grad_year += 1
return [this_grad_year + 3, this_grad_year + 2, this_grad_year + 1, this_grad_year]
Loading