Skip to content

Commit d1796b8

Browse files
committed
Create create packets route
1 parent 6d18b78 commit d1796b8

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

packet/routes/api.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,79 @@ def sync_freshman():
7878
return dumps(results), 200
7979

8080

81+
@app.route('/api/v1/packets', methods=['POST'])
82+
@packet_auth
83+
def create_packet():
84+
"""
85+
Create a new packet.
86+
87+
Body parameters: {
88+
start_date: the start date of the packets in MM/DD/YYYY format
89+
freshmen: [
90+
rit_username: string
91+
]
92+
}
93+
"""
94+
95+
# Only allow evals to create new packets
96+
username = str(session['userinfo'].get('preferred_username', ''))
97+
if not _ldap_is_member_of_group(ldap_get_member(username), 'eboard-evaluations'):
98+
return 'Forbidden: not Evaluations Director', 403
99+
100+
base_date = datetime.strptime(request.json['start_date'], '%m/%d/%Y').date()
101+
102+
start = datetime.combine(base_date, packet_start_time)
103+
end = datetime.combine(base_date, packet_end_time) + timedelta(days=14)
104+
105+
frosh = request.json['freshmen']
106+
results = list()
107+
108+
# Gather upperclassmen data from LDAP
109+
all_upper = list(filter(
110+
lambda member: not ldap_is_intromember(member) and not ldap_is_on_coop(member), ldap_get_active_members()))
111+
112+
rtp = ldap_get_active_rtps()
113+
three_da = ldap_get_3das()
114+
webmaster = ldap_get_webmasters()
115+
c_m = ldap_get_constitutional_maintainers()
116+
drink = ldap_get_drink_admins()
117+
118+
# Packet starting notifications
119+
packets_starting_notification(start)
120+
121+
for frosh_rit_username in frosh:
122+
# Create the packet and signatures
123+
freshman = Freshman.query.filter_by(rit_username=frosh_rit_username).first()
124+
if freshman is None:
125+
results.append(f"Freshman '{frosh_rit_username}' not found")
126+
continue
127+
128+
packet = Packet(freshman=freshman, start=start, end=end)
129+
db.session.add(packet)
130+
send_start_packet_mail(packet)
131+
packet_starting_notification(packet)
132+
133+
for member in all_upper:
134+
sig = UpperSignature(packet=packet, member=member.uid)
135+
sig.eboard = ldap_get_eboard_role(member)
136+
sig.active_rtp = member.uid in rtp
137+
sig.three_da = member.uid in three_da
138+
sig.webmaster = member.uid in webmaster
139+
sig.c_m = member.uid in c_m
140+
sig.drink_admin = member.uid in drink
141+
db.session.add(sig)
142+
143+
for onfloor_freshman in Freshman.query.filter_by(onfloor=True).filter(Freshman.rit_username !=
144+
freshman.rit_username).all():
145+
db.session.add(FreshSignature(packet=packet, freshman=onfloor_freshman))
146+
147+
results.append(f'Packet created for {frosh_rit_username}')
148+
149+
db.session.commit()
150+
151+
return dumps(results), 201
152+
153+
81154
@app.route('/api/v1/packets/<username>', methods=['GET'])
82155
@packet_auth
83156
def get_packets_by_user(username: str) -> dict:

0 commit comments

Comments
 (0)