Sign_In_Register/lib.py

66 lines
2.2 KiB
Python

from tkinter import *
from tkinter import ttk
import pandas as pd
#Uses a counter to ensure unique iid for each row
#keeps track of parent row iids
#returns parent iids incrementing the counter each time
def row_tracker(department_frame, iid_count):
class Row_Tracker:
def __init__(self, iid_count):
self.iid_count = iid_count
def departiid(self, department):
self.iid_count += 1
setattr(self, department, 'D' + str(self.iid_count))
return getattr(self, department)
row_tracker = Row_Tracker(iid_count)
for rownum, row in department_frame.iterrows():
setattr(row_tracker, row['Department'], False)
return row_tracker
#add a row to the tree
def treerow_add(row_tracker, tree, inputs):
row_iid = inputs[3]
department = inputs[0]
department_iid = getattr(row_tracker, department)
if not getattr(row_tracker, department):
department_iid = row_tracker.departiid(department)
tree.insert(parent='', index='end', iid=department_iid, text=department, values=('', '', ''))
tree.insert(parent=department_iid, index='end', iid=row_iid, text='', values=(inputs[1], inputs[2], row_iid))
#add a row to the csv
# return frame because variable for that frame needs to be updated
def csvrow_add(file_path, frame, columns, inputs):
df_addition = {}
for i, column in enumerate(columns):
df_addition[column] = inputs[i]
frame = frame._append(df_addition, ignore_index = True)
frame.to_csv(file_path, index=False)
return frame
#Delete employess from the tree and csv
#If parent row has no remaining children, delete it row from the tree and reset tracking for it's iid
def treerow_del(row_tracker, tree, iids):
for iid in iids:
parent_row_iid = tree.parent(iid)
tree.delete(iid)
if not tree.get_children(parent_row_iid):
parent_row = tree.item(parent_row_iid)
setattr(row_tracker, parent_row['text'], False)
tree.delete(parent_row_iid)
#Delete employee from data frame and csv
def csvrow_del(file_path, frame, iids):
for iid in iids:
frame = frame.drop(frame[frame['cardID'] == iid].index)
frame.to_csv(file_path, index=False)
return frame