107 lines
4.3 KiB
Python
107 lines
4.3 KiB
Python
import PySimpleGUI as sg
|
|
import csv
|
|
import pandas as pd
|
|
import helperFunctions as HF
|
|
|
|
def subHisWin(subRequestsArchiveFilename,defaultFont):
|
|
|
|
history = pd.read_csv(subRequestsArchiveFilename,dtype=str)
|
|
|
|
layout=[[sg.Text("Name of TA:")],
|
|
[sg.Input()],[sg.Button("Find History"),sg.Button("Close Window"),sg.Button("Hall of Fame")],
|
|
[sg.Button("+APP"),sg.Button("-APP"),sg.Button("+ACC"),sg.Button("-ACC"),sg.Button("+REJ"),sg.Button("-REJ"),sg.Button("+CAN"),sg.Button("-CAN"),sg.Button("+FUL"),sg.Button("-FUL")]
|
|
,[sg.Text("",key="OUTPUT",expand_x=True,expand_y=True,size=(200, 20))]]
|
|
|
|
# Create the Window
|
|
window = sg.Window('Substitution History', layout, font=defaultFont,resizable=True)
|
|
|
|
#Event Loop to process "events" and get the "values" of the inputs
|
|
#Cease running if they close the window
|
|
event=-1
|
|
netID=-1
|
|
while event != sg.WIN_CLOSED and event != "Close Window":
|
|
event, values = window.read()
|
|
|
|
#If event is the pressing of an incrementing button AND the textbox search returns exactly one name
|
|
if event in ["+APP","-APP","+ACC","-ACC","+REJ","-REJ","+CAN","-CAN","+FUL","-FUL"] and netID != -1 and len(netIDs)<=1:
|
|
if event[0]=="+":
|
|
change = 1
|
|
elif event[0]=="-":
|
|
change = -1
|
|
else:
|
|
print("ERROR: button names in sub history window do not match!")
|
|
HF.incrementSubCount(netID,event[1:],change)
|
|
event = "Find History"
|
|
|
|
if event=="Find History":
|
|
name = values[0]
|
|
netIDs=HF.nameToID(name,getAllMatches=True)
|
|
if not hasattr(netIDs,'__len__') or len(netIDs)==0:
|
|
netID=-1
|
|
if name=="":
|
|
name="_BLANK_"
|
|
window['OUTPUT'].update(value=name+" was not found in any names in the staff database.")
|
|
else:
|
|
netID=netIDs[0]
|
|
name=HF.IDToName(netID)#convert ID back to get full name
|
|
extraNamesStr=""
|
|
if len(netIDs)>1:
|
|
names = [HF.IDToName(i) for i in netIDs[:]]
|
|
window['OUTPUT'].update(value="Multiple matches found: ["+", ".join(names)+"]")
|
|
else:
|
|
#Enable the incrementing buttons once a single valid name is found
|
|
window['+APP'].Update(disabled=False)
|
|
window['-APP'].Update(disabled=False)
|
|
window['+ACC'].Update(disabled=False)
|
|
window['-ACC'].Update(disabled=False)
|
|
window['+REJ'].Update(disabled=False)
|
|
window['-REJ'].Update(disabled=False)
|
|
window['+CAN'].Update(disabled=False)
|
|
window['-CAN'].Update(disabled=False)
|
|
window['+FUL'].Update(disabled=False)
|
|
window['-FUL'].Update(disabled=False)
|
|
#Get the number of previous requests in each category for that ULA
|
|
APP,ACC,REJ,CAN,FUL=HF.getSubCount(netID)
|
|
|
|
#Printing options for the Pandas dataframe
|
|
pd.set_option('display.min_rows', 20)
|
|
pd.set_option('display.expand_frame_repr', False)
|
|
pd.set_option('max_colwidth', 30)
|
|
|
|
output=history[history['Requestor']==netID].fillna("NONE")
|
|
if output.empty:
|
|
output="No history"
|
|
else:
|
|
output=str(output.to_string(index=False))
|
|
#Change the textbox to include the relevant data
|
|
window['OUTPUT'].update(value=name+"; "+netID+"\n"+"APP:"+APP+" ACC:"+ACC+" REJ:"+REJ+" CAN:"+CAN+" FUL:"+FUL+"\n"+output)
|
|
|
|
if event=="Hall of Fame":
|
|
#Disable the incrementing buttons while in "Hall of Fame" mode since there is no single name attached.
|
|
window['+APP'].Update(disabled=True)
|
|
window['-APP'].Update(disabled=True)
|
|
window['+ACC'].Update(disabled=True)
|
|
window['-ACC'].Update(disabled=True)
|
|
window['+REJ'].Update(disabled=True)
|
|
window['-REJ'].Update(disabled=True)
|
|
window['+CAN'].Update(disabled=True)
|
|
window['-CAN'].Update(disabled=True)
|
|
window['+FUL'].Update(disabled=True)
|
|
window['-FUL'].Update(disabled=True)
|
|
|
|
#Printing options for Pandas
|
|
pd.set_option('display.expand_frame_repr', False)
|
|
pd.set_option('max_colwidth', 30)
|
|
|
|
#Display instructions while the inputStr is not a valid input for the Hall of Fame
|
|
output='To customize which categories to add (App,Acc,Rej,Can,Ful):\nuse 0,1,2,3,4 or any combination thereof in the text box then click "Hall of Fame" again\n(e.g. "12" yields Accepted plus Rejected)\n'
|
|
inputStr=values[0]
|
|
if inputStr=="" or not inputStr.isnumeric():
|
|
inputStr=""
|
|
output+=HF.getTopSubs(inputStr,num=15)
|
|
window['OUTPUT'].update(value=output)
|
|
|
|
|
|
|
|
window.close()
|