Skip to content

Commit 7bdbef8

Browse files
authored
Merge pull request #106 from JoelEager/new-admin-commands
Admin commands for unsigning and extending packets
2 parents 8310c44 + 9a3d717 commit 7bdbef8

File tree

1 file changed

+83
-18
lines changed

1 file changed

+83
-18
lines changed

packet/commands.py

Lines changed: 83 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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")
4756
def 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("\tTotal 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

Comments
 (0)