1+ from datetime import datetime
2+ from itertools import chain
3+
14from flask import redirect , render_template
5+ from sqlalchemy import func , case
26
3- from packet import auth , app
4- from packet .models import UpperSignature
7+ from packet import auth , app , db
8+ from packet .models import Packet , UpperSignature , MiscSignature
59from packet .utils import before_request
610
711
@@ -15,5 +19,37 @@ def index():
1519@auth .oidc_auth
1620@before_request
1721def upperclassman (uid , info = None ):
18- signatures = UpperSignature .query .filter_by (member = uid ).order_by (UpperSignature .signed .desc ())
19- return render_template ("upperclassman.html" , info = info , signatures = signatures , member = uid )
22+ open_packets = Packet .query .filter (Packet .end > datetime .now ()).filter (Packet .start < datetime .now ()).all ()
23+ signatures = 0
24+
25+ for packet in open_packets :
26+ packet .did_sign = False
27+
28+ for sig in chain (filter (lambda sig : sig .signed , packet .upper_signatures ), packet .misc_signatures ):
29+ if sig .member == uid :
30+ packet .did_sign = True
31+ signatures += 1
32+ break
33+
34+ open_packets .sort (key = lambda x : x .did_sign , reverse = True )
35+
36+ return render_template ("upperclassman.html" , info = info , open_packets = open_packets , member = uid ,
37+ signatures = signatures )
38+
39+
40+ @app .route ("/upperclassmen" )
41+ @auth .oidc_auth
42+ @before_request
43+ def upperclassmen_total (info = None ):
44+ open_packets = Packet .query .filter (Packet .end > datetime .now ()).filter (Packet .start < datetime .now ()).count ()
45+
46+ # TODO: Only count open Packets
47+ upperclassmen = (db .session .query (func .count (case ([(UpperSignature .signed == True , 1 )])).label ("signatures" ),
48+ UpperSignature .member )).group_by (UpperSignature .member ).all ()
49+ upperclassmen += (db .session .query (func .count ().label ("signatures" ),
50+ MiscSignature .member )).group_by (MiscSignature .member ).all ()
51+
52+ upperclassmen .sort (reverse = True )
53+
54+ return render_template ("upperclassmen_totals.html" , info = info , upperclassmen = upperclassmen ,
55+ open_packets = open_packets )
0 commit comments