@@ -42,6 +42,15 @@ def parse_csv(freshmen_csv):
4242 raise e
4343
4444
45+ def input_date (prompt ):
46+ while True :
47+ try :
48+ date_str = input (prompt + " (format: MM/DD/YYYY): " )
49+ return datetime .strptime (date_str , "%m/%d/%Y" ).date ()
50+ except ValueError :
51+ pass
52+
53+
4554@app .cli .command ("sync-freshmen" )
4655@click .argument ("freshmen_csv" )
4756def sync_freshmen (freshmen_csv ):
@@ -99,14 +108,7 @@ def create_packets(freshmen_csv):
99108 return
100109
101110 # Collect the necessary data
102- base_date = None
103- while base_date is None :
104- try :
105- date_str = input ("Input the first day of packet season (format: MM/DD/YYYY): " )
106- base_date = datetime .strptime (date_str , "%m/%d/%Y" ).date ()
107- except ValueError :
108- pass
109-
111+ base_date = input_date ("Input the first day of packet season" )
110112 start = datetime .combine (base_date , packet_start_time )
111113 end = datetime .combine (base_date , packet_end_time ) + timedelta (days = 14 )
112114
@@ -175,16 +177,8 @@ def fetch_results():
175177 """
176178 Fetches and prints the results from a given packet season.
177179 """
178- end_date = None
179- while end_date is None :
180- try :
181- date_str = input ("Enter the last day of the packet season you'd like to retrieve results from " +
182- "(format: MM/DD/YYYY): " )
183- end_date = datetime .strptime (date_str , "%m/%d/%Y" ).date ()
184- except ValueError :
185- pass
186-
187- end_date = datetime .combine (end_date , packet_end_time )
180+ end_date = datetime .combine (input_date ("Enter the last day of the packet season you'd like to retrieve results "
181+ "from" ), packet_end_time )
188182
189183 for packet in Packet .query .filter_by (end = end_date ).all ():
190184 print ()
@@ -205,3 +199,74 @@ def fetch_results():
205199 print ()
206200
207201 print ("\t Total missed:" , required .total - received .total )
202+
203+
204+ @app .cli .command ("extend-packet" )
205+ @click .argument ("packet_id" )
206+ def extend_packet (packet_id ):
207+ """
208+ Extends the given packet by setting a new end date.
209+ """
210+ packet = Packet .by_id (packet_id )
211+
212+ if not packet .is_open ():
213+ print ("Packet is already closed so it cannot be extended" )
214+ return
215+ else :
216+ print ("Ready to extend packet #{} for {}" .format (packet_id , packet .freshman_username ))
217+
218+ packet .end = input_date ("Enter the new end date for this packet" )
219+ db .session .commit ()
220+
221+ print ("Packet successfully extended" )
222+
223+
224+ def remove_sig (packet_id , username , is_member ):
225+ packet = Packet .by_id (packet_id )
226+
227+ if not packet .is_open ():
228+ print ("Packet is already closed so its signatures cannot be modified" )
229+ return
230+ elif is_member :
231+ sig = UpperSignature .query .filter_by (packet_id = packet_id , member = username ).first ()
232+ if sig is not None :
233+ sig .signed = False
234+ db .session .commit ()
235+ print ("Successfully unsigned packet" )
236+ else :
237+ result = MiscSignature .query .filter_by (packet_id = packet_id , member = username ).delete ()
238+ if result == 1 :
239+ db .session .commit ()
240+ print ("Successfully unsigned packet" )
241+ else :
242+ print ("Failed to unsign packet; could not find signature" )
243+ else :
244+ sig = FreshSignature .query .filter_by (packet_id = packet_id , freshman_username = username ).first ()
245+ if sig is not None :
246+ sig .signed = False
247+ db .session .commit ()
248+ print ("Successfully unsigned packet" )
249+ else :
250+ print ("Failed to unsign packet; {} is not an onfloor" .format (username ))
251+
252+
253+ @app .cli .command ("remove-member-sig" )
254+ @click .argument ("packet_id" )
255+ @click .argument ("member" )
256+ def remove_member_sig (packet_id , member ):
257+ """
258+ Removes the given member's signature from the given packet.
259+ :param member: The member's CSH username
260+ """
261+ remove_sig (packet_id , member , True )
262+
263+
264+ @app .cli .command ("remove-freshman-sig" )
265+ @click .argument ("packet_id" )
266+ @click .argument ("freshman" )
267+ def remove_freshman_sig (packet_id , freshman ):
268+ """
269+ Removes the given freshman's signature from the given packet.
270+ :param freshman: The freshman's RIT username
271+ """
272+ remove_sig (packet_id , freshman , False )
0 commit comments