Skip to content

Commit f4cbb59

Browse files
authored
Housing Queue Improvements (Solves #103) (#105)
* Add InHousingQueue Table * Replace Housing Util Logic * Fix bug in checking directorships * Eval director UI for manipulating housing queue
1 parent cffc62a commit f4cbb59

File tree

16 files changed

+313
-46
lines changed

16 files changed

+313
-46
lines changed

conditional/blueprints/cache_management.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ def restart_app():
3838
@cache_bp.route('/clearcache')
3939
def clear_cache():
4040
user_name = request.headers.get('x-webauth-user')
41+
account = ldap_get_member(user_name)
4142

42-
if not ldap_is_eval_director(user_name) or not ldap_is_rtp(user_name):
43+
if not ldap_is_eval_director(account) or not ldap_is_rtp(account):
4344
return redirect("/dashboard")
4445

4546
logger.info('api', action='purge system cache')

conditional/blueprints/conditional.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ def create_conditional():
5353
log.info('api', action='create new conditional')
5454

5555
user_name = request.headers.get('x-webauth-user')
56+
account = ldap_get_member(user_name)
5657

57-
if not ldap_is_eval_director(user_name):
58+
if not ldap_is_eval_director(account):
5859
return "must be eval director", 403
5960

6061
post_data = request.get_json()
@@ -78,8 +79,9 @@ def conditional_review():
7879

7980
# get user data
8081
user_name = request.headers.get('x-webauth-user')
82+
account = ldap_get_member(user_name)
8183

82-
if not ldap_is_eval_director(user_name):
84+
if not ldap_is_eval_director(account):
8385
return redirect("/dashboard", code=302)
8486

8587
post_data = request.get_json()
@@ -106,7 +108,9 @@ def conditional_delete(cid):
106108
log.info('api', action='delete conditional')
107109

108110
user_name = request.headers.get('x-webauth-user')
109-
if ldap_is_eval_director(user_name):
111+
account = ldap_get_member(user_name)
112+
113+
if ldap_is_eval_director(account):
110114
Conditional.query.filter(
111115
Conditional.id == cid
112116
).delete()

conditional/blueprints/dashboard.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from conditional.blueprints.member_management import get_members_info
1919

20-
from conditional.util.housing import get_queue_length, get_queue_position
20+
from conditional.util.housing import get_queue_position
2121
from conditional.util.flask import render_template
2222
from conditional.util.member import get_freshman_data, get_voting_members
2323

@@ -73,8 +73,8 @@ def display_dashboard():
7373
housing = dict()
7474
housing['points'] = member.housingPoints
7575
housing['room'] = member.roomNumber
76-
if housing['room'] == "":
77-
housing['queue_pos'] = "%s / %s" % (get_queue_position(member.uid), get_queue_length())
76+
if housing['room'] is None:
77+
housing['queue_pos'] = "%s / %s" % get_queue_position(member.uid)
7878
else:
7979
housing['queue_pos'] = "N/A"
8080
else:

conditional/blueprints/housing.py

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import uuid
22
import structlog
33

4-
from flask import Blueprint, request
4+
from flask import Blueprint, request, jsonify
55

66
from conditional.models.models import FreshmanAccount
7-
from conditional.util.housing import get_queue_with_points
8-
from conditional.util.ldap import ldap_get_onfloor_members
7+
from conditional.models.models import InHousingQueue
8+
from conditional.util.housing import get_housing_queue
9+
from conditional.util.ldap import ldap_get_onfloor_members, ldap_is_eval_director, ldap_get_member
910
from conditional.util.flask import render_template
1011

1112
from conditional.util.ldap import ldap_get_roomnumber
1213

14+
from conditional import db
15+
1316

1417
logger = structlog.get_logger()
1518

@@ -23,8 +26,8 @@ def display_housing():
2326
log.info('frontend', action='display housing')
2427

2528
# get user data
26-
2729
user_name = request.headers.get('x-webauth-user')
30+
account = ldap_get_member(user_name)
2831

2932
housing = {}
3033
onfloors = [account for account in ldap_get_onfloor_members()]
@@ -57,6 +60,33 @@ def display_housing():
5760
return render_template(request,
5861
'housing.html',
5962
username=user_name,
60-
queue=get_queue_with_points(),
63+
queue=get_housing_queue(ldap_is_eval_director(account)),
6164
housing=housing,
6265
room_list=sorted(list(room_list)))
66+
67+
68+
@housing_bp.route('/housing/in_queue', methods=['PUT'])
69+
def change_queue_state():
70+
log = logger.new(user_name=request.headers.get("x-webauth-user"),
71+
request_id=str(uuid.uuid4()))
72+
log.info('api', action='add or remove member from housing queue')
73+
74+
username = request.headers.get('x-webauth-user')
75+
account = ldap_get_member(username)
76+
77+
if not ldap_is_eval_director(account):
78+
return "must be eval director", 403
79+
80+
post_data = request.get_json()
81+
uid = post_data.get('uid', False)
82+
83+
if uid:
84+
if post_data.get('inQueue', False):
85+
queue_obj = InHousingQueue(uid=uid)
86+
db.session.add(queue_obj)
87+
else:
88+
InHousingQueue.query.filter_by(uid=uid).delete()
89+
90+
db.session.flush()
91+
db.session.commit()
92+
return jsonify({"success": True}), 200

conditional/blueprints/major_project_submission.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ def major_project_review():
7878

7979
# get user data
8080
user_name = request.headers.get('x-webauth-user')
81+
account = ldap_get_member(user_name)
8182

82-
if not ldap_is_eval_director(user_name):
83+
if not ldap_is_eval_director(account):
8384
return redirect("/dashboard", code=302)
8485

8586
post_data = request.get_json()
@@ -106,12 +107,14 @@ def major_project_delete(pid):
106107

107108
# get user data
108109
user_name = request.headers.get('x-webauth-user')
110+
account = ldap_get_member(user_name)
111+
109112
major_project = MajorProject.query.filter(
110113
MajorProject.id == pid
111114
).first()
112115
creator = major_project.uid
113116

114-
if creator == user_name or ldap_is_eval_director(user_name):
117+
if creator == user_name or ldap_is_eval_director(account):
115118
MajorProject.query.filter(
116119
MajorProject.id == pid
117120
).delete()

conditional/blueprints/member_management.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ def display_member_management():
5656
log.info('frontend', action='display member management')
5757

5858
username = request.headers.get('x-webauth-user')
59+
account = ldap_get_member(username)
5960

60-
if not ldap_is_eval_director(username) and not ldap_is_financial_director(username):
61+
if not ldap_is_eval_director(account) and not ldap_is_financial_director(account):
6162
return "must be eval director", 403
6263

6364
member_list = get_members_info()
@@ -102,8 +103,9 @@ def member_management_eval():
102103
log.info('api', action='submit site settings')
103104

104105
username = request.headers.get('x-webauth-user')
106+
account = ldap_get_member(username)
105107

106-
if not ldap_is_eval_director(username):
108+
if not ldap_is_eval_director(account):
107109
return "must be eval director", 403
108110

109111
post_data = request.get_json()
@@ -134,8 +136,9 @@ def member_management_adduser():
134136
log.info('api', action='add fid user')
135137

136138
username = request.headers.get('x-webauth-user')
139+
account = ldap_get_member(username)
137140

138-
if not ldap_is_eval_director(username):
141+
if not ldap_is_eval_director(account):
139142
return "must be eval director", 403
140143

141144
post_data = request.get_json()
@@ -158,8 +161,9 @@ def member_management_adduser():
158161
@member_management_bp.route('/manage/user/upload', methods=['POST'])
159162
def member_management_uploaduser():
160163
username = request.headers.get('x-webauth-user')
164+
account = ldap_get_member(username)
161165

162-
if not ldap_is_eval_director(username):
166+
if not ldap_is_eval_director(account):
163167
return "must be eval director", 403
164168

165169
f = request.files['file']
@@ -195,8 +199,9 @@ def member_management_edituser(uid):
195199
log.info('api', action='edit uid user')
196200

197201
username = request.headers.get('x-webauth-user')
202+
account = ldap_get_member(username)
198203

199-
if not ldap_is_eval_director(username) and not ldap_is_financial_director(username):
204+
if not ldap_is_eval_director(account) and not ldap_is_financial_director(account):
200205
return "must be eval director", 403
201206

202207
post_data = request.get_json()
@@ -219,7 +224,8 @@ def edit_uid(uid, username, post_data):
219224
onfloor_status = post_data['onfloorStatus']
220225
housing_points = post_data['housingPoints']
221226

222-
if ldap_is_eval_director(username):
227+
current_account = ldap_get_member(username)
228+
if ldap_is_eval_director(current_account):
223229
logger.info('backend', action="edit %s room: %s onfloor: %s housepts %s" %
224230
(uid, post_data['roomNumber'], post_data['onfloorStatus'],
225231
post_data['housingPoints']))
@@ -296,8 +302,9 @@ def member_management_getuserinfo(uid):
296302
log.info('api', action='retrieve user info')
297303

298304
username = request.headers.get('x-webauth-user')
305+
account = ldap_get_member(username)
299306

300-
if not ldap_is_eval_director(username) and not ldap_is_financial_director(username):
307+
if not ldap_is_eval_director(account) and not ldap_is_financial_director(account):
301308
return "must be eval or financial director", 403
302309

303310
acct = None
@@ -341,7 +348,7 @@ def get_hm_date(hm_id):
341348

342349
account = ldap_get_member(uid)
343350

344-
if ldap_is_eval_director(username):
351+
if ldap_is_eval_director(ldap_get_member(username)):
345352
missed_hm = [
346353
{
347354
'date': get_hm_date(hma.meeting_id),
@@ -382,8 +389,9 @@ def member_management_deleteuser(fid):
382389
log.info('api', action='edit fid user')
383390

384391
username = request.headers.get('x-webauth-user')
392+
account = ldap_get_member(username)
385393

386-
if not ldap_is_eval_director(username):
394+
if not ldap_is_eval_director(account):
387395
return "must be eval director", 403
388396

389397
if not fid.isdigit():
@@ -417,8 +425,9 @@ def member_management_upgrade_user():
417425
log.info('api', action='convert fid to uid entry')
418426

419427
username = request.headers.get('x-webauth-user')
428+
account = ldap_get_member(username)
420429

421-
if not ldap_is_eval_director(username):
430+
if not ldap_is_eval_director(account):
422431
return "must be eval director", 403
423432

424433
post_data = request.get_json()
@@ -479,8 +488,9 @@ def introductory_project():
479488
log.info('api', action='show introductory project management')
480489

481490
username = request.headers.get('x-webauth-user')
491+
account = ldap_get_member(username)
482492

483-
if not ldap_is_eval_director(username):
493+
if not ldap_is_eval_director(account):
484494
return "must be eval director", 403
485495

486496
return render_template(request,
@@ -496,8 +506,9 @@ def introductory_project_submit():
496506
log.info('api', action='submit introductory project results')
497507

498508
username = request.headers.get('x-webauth-user')
509+
account = ldap_get_member(username)
499510

500-
if not ldap_is_eval_director(username):
511+
if not ldap_is_eval_director(account):
501512
return "must be eval director", 403
502513

503514
post_data = request.get_json()

conditional/blueprints/slideshow.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from conditional.blueprints.intro_evals import display_intro_evals
1212
from conditional.blueprints.spring_evals import display_spring_evals
1313

14-
from conditional.util.ldap import ldap_is_eval_director
14+
from conditional.util.ldap import ldap_is_eval_director, ldap_get_member
1515

1616
from conditional.models.models import FreshmanEvalData
1717
from conditional.models.models import SpringEval
@@ -31,7 +31,9 @@ def slideshow_intro_display():
3131
log.info('frontend', action='display intro slideshow')
3232

3333
user_name = request.headers.get('x-webauth-user')
34-
if not ldap_is_eval_director(user_name):
34+
account = ldap_get_member(user_name)
35+
36+
if not ldap_is_eval_director(account):
3537
return redirect("/dashboard")
3638

3739
return render_template(request,
@@ -61,8 +63,9 @@ def slideshow_intro_review():
6163

6264
# get user data
6365
user_name = request.headers.get('x-webauth-user')
66+
account = ldap_get_member(user_name)
6467

65-
if not ldap_is_eval_director(user_name):
68+
if not ldap_is_eval_director(account):
6669
return redirect("/dashboard", code=302)
6770

6871
post_data = request.get_json()
@@ -90,7 +93,9 @@ def slideshow_spring_display():
9093
log.info('frontend', action='display membership evaluations slideshow')
9194

9295
user_name = request.headers.get('x-webauth-user')
93-
if not ldap_is_eval_director(user_name):
96+
account = ldap_get_member(user_name)
97+
98+
if not ldap_is_eval_director(account):
9499
return redirect("/dashboard")
95100

96101
return render_template(request,
@@ -120,8 +125,9 @@ def slideshow_spring_review():
120125

121126
# get user data
122127
user_name = request.headers.get('x-webauth-user')
128+
account = ldap_get_member(user_name)
123129

124-
if not ldap_is_eval_director(user_name):
130+
if not ldap_is_eval_director(account):
125131
return redirect("/dashboard", code=302)
126132

127133
post_data = request.get_json()

conditional/models/docs.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,12 @@ Records the yearly results of member's spring evaluations.
169169
| `date_created` | `TIMESTAMP` | The date of the evaluation.
170170
| `status` | `ENUM` | Result of the evaluation.
171171

172+
## InHousingQueue table ##
173+
Records the yearly results of member's spring evaluations.
172174

175+
| Field | Type | Description |
176+
| ------------- | ------------- | ------------------- |
177+
| `uid` | `VARCHAR(32)` | LDAP uid of the member in the housing queue.
173178

174179

175180
### Member state ###

conditional/models/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,10 @@ class SpringEval(db.Model):
248248
name="spring_eval_enum"),
249249
nullable=False)
250250

251+
class InHousingQueue(db.Model):
252+
__tablename__ = 'in_housing_queue'
253+
uid = Column(String(32), primary_key=True)
254+
251255
def __init__(self, uid):
252256
self.uid = uid
253257
self.active = True

0 commit comments

Comments
 (0)