Skip to content

Commit 4e9b599

Browse files
committed
Only show current year's worth of data
1 parent 6980d52 commit 4e9b599

File tree

7 files changed

+96
-62
lines changed

7 files changed

+96
-62
lines changed

conditional/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import subprocess
3+
from datetime import datetime
34
from flask import Flask, redirect, request, render_template, g
45
from flask_sqlalchemy import SQLAlchemy
56
from flask_migrate import Migrate
@@ -30,6 +31,12 @@
3031
app.config['LDAP_BIND_PW'],
3132
ro=app.config['LDAP_RO'])
3233

34+
def start_of_year():
35+
start = datetime(datetime.today().year, 6, 1)
36+
if datetime.today() < start:
37+
start = datetime(datetime.today().year-1, 6, 1)
38+
return start
39+
3340
# pylint: disable=C0413
3441

3542
from conditional.blueprints.dashboard import dashboard_bp

conditional/blueprints/attendance.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
from conditional.util.flask import render_template
2727

28-
from conditional import db
28+
from conditional import db, start_of_year
2929

3030
logger = structlog.get_logger()
3131

@@ -414,6 +414,7 @@ def get_seminar_attendees(meeting_id):
414414
"attendees": get_meeting_attendees(m.id),
415415
"type": "cm"
416416
} for m in CommitteeMeeting.query.filter(
417+
CommitteeMeeting.timestamp > start_of_year(),
417418
CommitteeMeeting.approved).all()]
418419
all_ts = [{"id": m.id,
419420
"name": m.name,
@@ -422,20 +423,23 @@ def get_seminar_attendees(meeting_id):
422423
"attendees": get_seminar_attendees(m.id),
423424
"type": "ts"
424425
} for m in TechnicalSeminar.query.filter(
426+
TechnicalSeminar.timestamp > start_of_year(),
425427
TechnicalSeminar.approved).all()]
426428
pend_cm = [{"id": m.id,
427429
"name": m.committee,
428430
"dt_obj": m.timestamp,
429431
"date": m.timestamp.strftime("%a %m/%d/%Y"),
430432
"attendees": get_meeting_attendees(m.id)
431433
} for m in CommitteeMeeting.query.filter(
434+
CommitteeMeeting.timestamp > start_of_year(),
432435
CommitteeMeeting.approved == False).all()] # pylint: disable=singleton-comparison
433436
pend_ts = [{"id": m.id,
434437
"name": m.name,
435438
"dt_obj": m.timestamp,
436439
"date": m.timestamp.strftime("%a %m/%d/%Y"),
437440
"attendees": get_seminar_attendees(m.id)
438441
} for m in TechnicalSeminar.query.filter(
442+
TechnicalSeminar.timestamp > start_of_year(),
439443
TechnicalSeminar.approved == False).all()] # pylint: disable=singleton-comparison
440444
all_meetings = sorted((all_cm + all_ts), key=lambda k: k['dt_obj'], reverse=True)[offset:limit]
441445
if len(all_cm) % 10 != 0:

conditional/blueprints/dashboard.py

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from conditional.util.ldap import ldap_get_member
1010
from conditional.util.ldap import ldap_get_active_members
1111

12-
from conditional.models.models import MemberCommitteeAttendance
1312
from conditional.models.models import MemberHouseMeetingAttendance
1413
from conditional.models.models import MajorProject
1514
from conditional.models.models import Conditional
@@ -19,7 +18,9 @@
1918

2019
from conditional.util.housing import get_queue_position
2120
from conditional.util.flask import render_template
22-
from conditional.util.member import get_freshman_data, get_voting_members
21+
from conditional.util.member import get_freshman_data, get_voting_members, get_cm, get_hm
22+
23+
from conditional import start_of_year
2324

2425
logger = structlog.get_logger()
2526

@@ -55,18 +56,13 @@ def display_dashboard():
5556
data['freshman'] = False
5657

5758
spring = {}
58-
c_meetings = [m.meeting_id for m in
59-
MemberCommitteeAttendance.query.filter(
60-
MemberCommitteeAttendance.uid == member.uid
61-
) if CommitteeMeeting.query.filter(
62-
CommitteeMeeting.id == m.meeting_id).first().approved]
59+
c_meetings = get_cm(member)
6360
spring['committee_meetings'] = len(c_meetings)
64-
h_meetings = [(m.meeting_id, m.attendance_status) for m in
65-
MemberHouseMeetingAttendance.query.filter(
66-
MemberHouseMeetingAttendance.uid == member.uid)]
61+
h_meetings = [(m.meeting_id, m.attendance_status) for m in get_hm(member)]
6762
spring['hm_missed'] = len([h for h in h_meetings if h[1] == "Absent"])
68-
eval_entry = SpringEval.query.filter(SpringEval.uid == member.uid
69-
and SpringEval.active).first()
63+
eval_entry = SpringEval.query.filter(SpringEval.uid == member.uid,
64+
SpringEval.date_created > start_of_year(),
65+
SpringEval.active == True).first() # pylint: disable=singleton-comparison
7066
if eval_entry is not None:
7167
spring['status'] = eval_entry.status
7268
else:
@@ -92,7 +88,8 @@ def display_dashboard():
9288
'status': p.status,
9389
'description': p.description
9490
} for p in
95-
MajorProject.query.filter(MajorProject.uid == member.uid)]
91+
MajorProject.query.filter(MajorProject.uid == member.uid,
92+
MajorProject.date > start_of_year())]
9693

9794
data['major_projects_count'] = len(data['major_projects'])
9895

@@ -112,7 +109,9 @@ def display_dashboard():
112109
'description': c.description,
113110
'status': c.status
114111
} for c in
115-
Conditional.query.filter(Conditional.uid == member.uid)]
112+
Conditional.query.filter(
113+
Conditional.uid == member.uid,
114+
Conditional.date_due > start_of_year())]
116115
data['conditionals'] = conditionals
117116
data['conditionals_len'] = len(conditionals)
118117

@@ -121,18 +120,23 @@ def display_dashboard():
121120
'type': m.committee,
122121
'datetime': m.timestamp.date()
123122
} for m in CommitteeMeeting.query.filter(
124-
CommitteeMeeting.id.in_(c_meetings)
123+
CommitteeMeeting.id.in_(c_meetings),
124+
CommitteeMeeting.timestamp > start_of_year()
125125
)]
126126

127127
hm_attendance = [
128128
{
129129
'reason': m.excuse,
130-
'datetime': HouseMeeting.query.filter(
131-
HouseMeeting.id == m.meeting_id).first().date
130+
'datetime': m.date
132131
} for m in
133-
MemberHouseMeetingAttendance.query.filter(
134-
MemberHouseMeetingAttendance.uid == member.uid
135-
).filter(MemberHouseMeetingAttendance.attendance_status == "Absent")]
132+
MemberHouseMeetingAttendance.query.outerjoin(
133+
HouseMeeting,
134+
MemberHouseMeetingAttendance.meeting_id == HouseMeeting.id).with_entities(
135+
MemberHouseMeetingAttendance.excuse,
136+
HouseMeeting.date).filter(
137+
MemberHouseMeetingAttendance.uid == member.uid,
138+
MemberHouseMeetingAttendance.attendance_status == "Absent",
139+
HouseMeeting.date > start_of_year())]
136140

137141
data['cm_attendance'] = cm_attendance
138142
data['cm_attendance_len'] = len(cm_attendance)

conditional/blueprints/intro_evals.py

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66

77
from conditional.util.ldap import ldap_get_intro_members
88

9-
109
from conditional.models.models import FreshmanCommitteeAttendance
11-
from conditional.models.models import MemberCommitteeAttendance
1210
from conditional.models.models import CommitteeMeeting
1311
from conditional.models.models import FreshmanAccount
1412
from conditional.models.models import FreshmanEvalData
@@ -20,6 +18,10 @@
2018
from conditional.models.models import TechnicalSeminar
2119
from conditional.util.flask import render_template
2220

21+
from conditional.util.member import get_cm, get_hm
22+
23+
from conditional import start_of_year
24+
2325
intro_evals_bp = Blueprint('intro_evals_bp', __name__)
2426

2527
logger = structlog.get_logger()
@@ -32,11 +34,6 @@ def display_intro_evals(internal=False):
3234
log.info('frontend', action='display intro evals listing')
3335

3436
# get user data
35-
def get_uid_cm_count(member_id):
36-
return len([a for a in MemberCommitteeAttendance.query.filter(
37-
MemberCommitteeAttendance.uid == member_id)
38-
if CommitteeMeeting.query.filter(CommitteeMeeting.id == a.meeting_id).first().approved])
39-
4037
def get_fid_cm_count(member_id):
4138
return len([a for a in FreshmanCommitteeAttendance.query.filter(
4239
FreshmanCommitteeAttendance.fid == member_id)
@@ -52,6 +49,7 @@ def get_fid_cm_count(member_id):
5249

5350
# freshmen who don't have accounts
5451
fids = [f for f in FreshmanAccount.query.filter(
52+
FreshmanAccount.eval_date > start_of_year(),
5553
FreshmanAccount.eval_date > datetime.now())]
5654

5755
for fid in fids:
@@ -108,33 +106,29 @@ def get_fid_cm_count(member_id):
108106
uid = member.uid
109107
name = member.cn
110108
freshman_data = FreshmanEvalData.query.filter(
109+
FreshmanEvalData.eval_date > start_of_year(),
111110
FreshmanEvalData.uid == uid).first()
112111

113112
if freshman_data is None:
114113
continue
115114
elif freshman_data.freshman_eval_result != "Pending" and internal:
116115
continue
117116

118-
h_meetings = [m.meeting_id for m in
119-
MemberHouseMeetingAttendance.query.filter(
120-
MemberHouseMeetingAttendance.uid == uid
121-
).filter(
122-
MemberHouseMeetingAttendance.attendance_status == "Absent"
123-
)]
124-
member = {
117+
h_meetings = [m.meeting_id for m in get_hm(member)]
118+
member_info = {
125119
'name': name,
126120
'uid': uid,
127121
'eval_date': freshman_data.eval_date.strftime("%Y-%m-%d"),
128122
'signatures_missed': freshman_data.signatures_missed,
129-
'committee_meetings': get_uid_cm_count(uid),
130-
'committee_meetings_passed': get_uid_cm_count(uid) >= 10,
123+
'committee_meetings': len(get_cm(member)),
124+
'committee_meetings_passed': len(get_cm(member)) >= 10,
131125
'house_meetings_missed':
132126
[
133127
{
134128
"date": m.date.strftime("%Y-%m-%d"),
135129
"reason":
136130
MemberHouseMeetingAttendance.query.filter(
137-
MemberHouseMeetingAttendance.uid == uid).filter(
131+
MemberHouseMeetingAttendance.uid == uid,
138132
MemberHouseMeetingAttendance.meeting_id == m.id).first().excuse
139133
}
140134
for m in HouseMeeting.query.filter(
@@ -146,7 +140,9 @@ def get_fid_cm_count(member_id):
146140
TechnicalSeminar.id.in_(
147141
[a.seminar_id for a in MemberSeminarAttendance.query.filter(
148142
MemberSeminarAttendance.uid == uid)
149-
if TechnicalSeminar.query.filter(TechnicalSeminar.id == a.seminar_id).first().approved]
143+
if TechnicalSeminar.query.filter(
144+
TechnicalSeminar.id == a.seminar_id,
145+
TechnicalSeminar.timestamp > start_of_year()).first().approved]
150146
))
151147
],
152148
'social_events': freshman_data.social_events,
@@ -155,7 +151,7 @@ def get_fid_cm_count(member_id):
155151
'ldap_account': True,
156152
'status': freshman_data.freshman_eval_result
157153
}
158-
ie_members.append(member)
154+
ie_members.append(member_info)
159155

160156
ie_members.sort(key=lambda x: x['freshman_project'] == "Passed")
161157
ie_members.sort(key=lambda x: len(x['house_meetings_missed']))

conditional/blueprints/major_project_submission.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from conditional.util.ldap import ldap_get_member
1010
from conditional.util.flask import render_template
1111

12-
from conditional import db
12+
from conditional import db, start_of_year
1313
from sqlalchemy import desc
1414

1515

@@ -38,7 +38,9 @@ def display_major_project():
3838
'id': p.id,
3939
'is_owner': bool(user_name == p.uid)
4040
} for p in
41-
MajorProject.query.order_by(desc(MajorProject.id))]
41+
MajorProject.query.filter(
42+
MajorProject.date > start_of_year()).order_by(
43+
desc(MajorProject.id))]
4244

4345
major_projects_len = len(major_projects)
4446
# return names in 'first last (username)' format

conditional/blueprints/spring_evals.py

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55

66
from conditional.util.ldap import ldap_get_active_members
77

8-
from conditional.models.models import MemberCommitteeAttendance
9-
from conditional.models.models import CommitteeMeeting
108
from conditional.models.models import MemberHouseMeetingAttendance
119
from conditional.models.models import MajorProject
1210
from conditional.models.models import HouseMeeting
1311
from conditional.models.models import SpringEval
1412

1513
from conditional.util.flask import render_template
1614

17-
from conditional import db
15+
from conditional.util.member import get_cm, get_hm
16+
17+
from conditional import db, start_of_year
1818

1919
spring_evals_bp = Blueprint('spring_evals_bp', __name__)
2020

@@ -27,11 +27,6 @@ def display_spring_evals(internal=False):
2727
request_id=str(uuid.uuid4()))
2828
log.info('frontend', action='display membership evaluations listing')
2929

30-
def get_cm_count(member_id):
31-
return len([a for a in MemberCommitteeAttendance.query.filter(
32-
MemberCommitteeAttendance.uid == member_id)
33-
if CommitteeMeeting.query.filter(CommitteeMeeting.id == a.meeting_id).first().approved])
34-
3530
user_name = None
3631
if not internal:
3732
user_name = request.headers.get('x-webauth-user')
@@ -42,31 +37,26 @@ def get_cm_count(member_id):
4237
for account in active_members:
4338
uid = account.uid
4439
spring_entry = SpringEval.query.filter(
45-
SpringEval.uid == uid and
46-
SpringEval.active).first()
40+
SpringEval.date_created > start_of_year(),
41+
SpringEval.uid == uid,
42+
SpringEval.active == True).first() # pylint: disable=singleton-comparison
4743

4844
if spring_entry is None:
4945
spring_entry = SpringEval(uid)
5046
db.session.add(spring_entry)
5147
db.session.flush()
5248
db.session.commit()
53-
# something bad happened to get here...
5449
elif spring_entry.status != "Pending" and internal:
5550
continue
5651

5752
eval_data = None
5853

59-
h_meetings = [m.meeting_id for m in
60-
MemberHouseMeetingAttendance.query.filter(
61-
MemberHouseMeetingAttendance.uid == uid
62-
).filter(
63-
MemberHouseMeetingAttendance.attendance_status == "Absent"
64-
)]
54+
h_meetings = [m.meeting_id for m in get_hm(account)]
6555
member = {
6656
'name': account.cn,
6757
'uid': uid,
6858
'status': spring_entry.status,
69-
'committee_meetings': get_cm_count(uid),
59+
'committee_meetings': len(get_cm(account)),
7060
'house_meetings_missed':
7161
[
7262
{
@@ -86,6 +76,7 @@ def get_cm_count(member_id):
8676
'status': p.status,
8777
'description': p.description
8878
} for p in MajorProject.query.filter(
79+
MajorProject.date > start_of_year(),
8980
MajorProject.uid == uid)]
9081
}
9182
member['major_projects_len'] = len(member['major_projects'])
@@ -94,8 +85,10 @@ def get_cm_count(member_id):
9485
'name': p.name,
9586
'status': p.status,
9687
'description': p.description
97-
} for p in MajorProject.query.filter(MajorProject.uid == uid)
98-
if p.status == "Passed"]
88+
} for p in MajorProject.query.filter(
89+
MajorProject.date > start_of_year(),
90+
MajorProject.status == "Passed",
91+
MajorProject.uid == uid)]
9992
member['major_projects_passed_len'] = len(member['major_projects_passed'])
10093
member['major_project_passed'] = False
10194
for mp in member['major_projects']:

0 commit comments

Comments
 (0)