@@ -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
83156def get_packets_by_user (username : str ) -> dict :
0 commit comments