Professional Documents
Culture Documents
Main Menu: Binary File
Main Menu: Binary File
MAiN ADMiN
SCAN QR
MENU
GET iD
ADD REGiSTRY
UPDATE DATA
REGiSTER DURATiON
ATTENDANCE
CREATE QR
DELETE
ViEW ATTENDANCE
ViEW REGiSTRY
***********************************************************
''')
import pickle
import winsound
dataBuffer_Main={}
userList=[['admin','password','admin']]
fileOpen.close()
def attendance(fpAdress):
dataBuffer_attendance=data.get('attendance')# Getting
Attendance list from Dictonary
registry=data.get('Registry')# Getting Registry list from
dictionary
for i in registry : # Searhing for the ID in Registry
if str(i[2])==fpAdress:
print ('Record Found')
name=i[0]
empID=i[1]
fileOpen.close()
currentDate=datetime.date(datetime.now()) ###
Getting current date and time
currentTime=datetime.time(datetime.now())
attendanceRecord=[currentDate,empID,name,currentTime]# Creating
Record (List) with employee details
if type(dataBuffer_attendance)!=list: # Checking if
its NONE type or List type
dataBuffer_attendance=[]
dataBuffer_attendance.append(attendanceRecord)
data['attendance']=dataBuffer_attendance # Assigning
the list to the appropriate key in dictionary
## print (data)
fileOpen=open('source.txt','wb')
pickle.dump(data,fileOpen) # After the Appending the
new data to dictionary, the dictionary is completely
# overwritten with new
dictionary
fileOpen.close()
winsound.PlaySound('success.wav.wav',winsound.SND_FILENAME)
break
else:
print ("Record Not Found !!")
winsound.PlaySound('error_effect.wav',winsound.SND_FILENAME)
### For getting the length of Biggest string in a list (Used for
Tabulation) ###
def maxLenStr(list1):
max=0
for i in list1:
if len(str(i))>=max:
max=len(str(i))
return max
def attendanceSheet():
fileOpen=open('source.txt','rb')
data=pickle.load(fileOpen)
attendance=data.get('attendance') # Opening File And storing
the attedance list to variable
n=len(attendance)
name=[]
date=[]
empID=[]
Time=[]
print ('+',end='')
print ('-'*maxLenStr(date),end='')
print ('+',end='')
print ('-'*maxLenStr(empID),end='') # Horizontal Top
Line #
print ('+',end='')
print ('-'*maxLenStr(name),end='')
print ('+',end='')
print ('-'*maxLenStr(Time),end='')
print ('+')
print ('|','Date',"
"*(int(maxLenStr(date))-4),end='',sep='')
print ('|','EmpID',"
"*(int(maxLenStr(empID))-5),end='',sep='') # Column Names #
print ('|','Name',"
"*(int(maxLenStr(name))-4),end='',sep='')
print ('|','Time',"
"*(int(maxLenStr(Time))-4),end='',sep='')
print ('|')
print ('+',end='')
print ('-'*maxLenStr(date),end='')
print ('+',end='')
print ('-'*maxLenStr(empID),end='')
print ('+',end='')
print ('-'*maxLenStr(name),end='') # Horizontal Line Below
Column Names #
print ('+',end='')
print ('-'*maxLenStr(Time),end='')
print ('+')
print ('+',end='')
print ('-'*maxLenStr(date),end='')
print ('+',end='')
print ('-'*maxLenStr(empID),end='')
print ('+',end='')
print ('-'*maxLenStr(name),end='') # Horizontal Bottom Line
#
print ('+',end='')
print ('-'*maxLenStr(Time),end='')
print ('+')
def viewRegistry():
fileOpen=open('source.txt','rb')
data=pickle.load(fileOpen) # Opening and Storing
Registry list to a Variable
registry=data.get('Registry')
n=len(registry)
name=[]
empID=[]
fpAdress=[]
print ('''
Welcome to Admin Portal!
''')
for i in registry:
print ('+',end='')
print ('-'*maxLenStr(name),end='')
print ('+',end='')
print ('-'*maxLenStr(empID),end='') #
Horizontal Top Line #
print ('+',end='')
print ('-'*maxLenStr(fpAdress),end='')
print ('+')
print ('|','Name',"
"*(int(maxLenStr(name))-4),end='',sep='')
print ('|','EmpID',"
"*(int(maxLenStr(empID))-5),end='',sep='') # Column Names #
print ('|','fpAdress',"
"*(int(maxLenStr(fpAdress))-8),end='',sep='')
print ('|')
print ('+',end='')
print ('-'*maxLenStr(name),end='')
print ('+',end='')
print ('-'*maxLenStr(empID),end='') #
Horizontal line below Column Names #
print ('+',end='')
print ('-'*maxLenStr(fpAdress),end='')
print ('+')
print ('|')
print ('+',end='')
print ('-'*maxLenStr(name),end='')
print ('+',end='')
print ('-'*maxLenStr(empID),end='') #
Horizontal Bottom Line #
print ('+',end='')
print ('-'*maxLenStr(fpAdress),end='')
print ('+')
def createQR():
import pyqrcode
import png
from pyqrcode import QRCode
fileOpen=open('source.txt','rb')
data=pickle.load(fileOpen) # Opening file and lading
the dictionary to a variable
registry=data.get('Registry')
viewRegistry() # Printing
registry
empID=input("Enter the employee ID of the Person: ")
for i in registry:
if i[1]==empID: # Searching for the
record in Registry
fpAdress=i[2]
name=i[0]
break
else:
print ('Record Not found')
winsound.PlaySound('error_effect.wav',winsound.SND_FILENAME)
qrcode=pyqrcode.create(str(fpAdress))
# Creating QR Code
try:
qrcode.png('QRCode '+name+' '+empID+'.png',scale=6)
print ('QR Code Succesfully Created')
# Saving QR Code to the Directory
winsound.PlaySound('success.wav.wav',winsound.SND_FILENAME)
except:
print('File Already Exists!')
winsound.PlaySound('error_effect.wav',winsound.SND_FILENAME)
### Updating Registry ###
def updateRegistry():
import uuid
fileOpen=open('source.txt','rb')
data=pickle.load(fileOpen) ## Opening and Storing
Registry list to a variable
registry=data.get('Registry')
viewRegistry()
empID=input('Enter the employee ID: ')
for i in registry:
if empID==i[1]: ## Searching with Employee ID
print ('''
What do you want to change:
1.Name
2.Fingerprint Adress
''')
choice=int(input(">>>"))
if choice==1:
name=input('Enter New Name: ')
i[0]=name ## Registering new
name given by the user
print('New Name Registered')
winsound.PlaySound('success.wav.wav',winsound.SND_FILENAME)
if choice==2:
fpAdress=uuid.uuid1()
i[2]=fpAdress ## Registering with new
auto-generated adress
print ('New Fingerprint Registered')
winsound.PlaySound('success.wav.wav',winsound.SND_FILENAME)
print ('New Fingerprint Adress',fpAdress)
break
else:
print("***No record found!***")
winsound.PlaySound('error_effect.wav',winsound.SND_FILENAME)
fileOpen.close()
fileOpen=open('source.txt','wb')
pickle.dump(data,fileOpen) # Overwritting file with new
dictionary
fileOpen.close()
## CLEARING FILE ##
def clearFile():
fileOpen=open('source.txt','wb')
fileOpen.close()
print ('ALL RECORDS CLEARED!')
winsound.PlaySound('success.wav.wav',winsound.SND_FILENAME)
def convertSeconds(secs):
hrs=secs//3600
mins=((secs)-(hrs*3600))//60
secs=((secs)-((hrs*3600)+(mins*60)))//1
return (hrs,mins,secs)
## CALCULATE DURATION ##
def duration():
import datetime
fileOpen=open('source.txt','rb')
data=pickle.load(fileOpen) # Opening and
loading the ditioanry to a varibale
attendance=data.get('attendance')
time=[]
combine=datetime.datetime.combine(i[0],i[3]) #
Searching for the Record with employee ID and date
name=i[2]
time.append(combine)
### TABULATION ##
entryTime=[]
exitTime=[]
print ('+',end='')
print ('-'*maxLenStr(entryTime),end='')
print ('+',end='')
print ('-'*maxLenStr(exitTime),end='') # Horizontal
Top Line #
print ('+')
print ('+',end='')
print ('-'*maxLenStr(entryTime),end='')
print ('+',end='')
print ('-'*maxLenStr(exitTime),end='') # Horizontal
Top Line #
print ('+')
print ('+',end='')
print ('-'*maxLenStr(entryTime),end='')
print ('+',end='')
print ('-'*maxLenStr(exitTime),end='') # Horizontal
Top Line #
print ('+')
n=len(time)
if n%2==0:
deltaTime=time[n-1]-time[0] # Calculating
difference of times
else:
print ('Exit time not found!, Taking Current time as
exit time')
deltaTime=datetime.now()-time[0]
seconds=deltaTime.total_seconds() # Converting
Time to secons
convert=convertSeconds(seconds)
print ('Total time in Office\n')
print('Hours :\t\t',convert[0])
print('Minutes: \t',convert[1]) # Converting
Seconds to Hours, Minutes And Seconds
print('Seconds: \t',convert[2])
breakTime=datetime.datetime(2021,1,1,0,0,0) #
Fixing Random Date
b1=0
b2=0
breakTime=breakTime-datetime.datetime(2021,1,1,0,0,0)
# Taking Delta of time with zero (Since time cannot be directly
-
# converted to seconds)
breakSeconds=breakTime.total_seconds()
convert2=convertSeconds(breakSeconds) #
Conerting to Seconds
print('Hours :\t\t',convert2[0])
print('Minutes: \t',convert2[1])
print('Seconds: \t',convert2[2])
effectiveTime=seconds-breakSeconds # Subtracting
Break time from Total time in office to get effective working hours
convert3=convertSeconds(effectiveTime)
print('Hours :\t\t',convert3[0])
print('Minutes: \t',convert3[1])
print('Seconds: \t',convert3[2])
else:
print('Not Enough Records Found')
winsound.PlaySound('error_effect.wav',winsound.SND_FILENAME)
## SCAN QR CODE ##
def scan():
import cv2
import numpy as np
from pyzbar.pyzbar import decode
while True:
myData=0
def delete():
fileOpen=open('source.txt','rb')
data=pickle.load(fileOpen) ## Opening file and loading
dictionary to a varible
registry=data.get('Registry')
viewRegistry()
empID=input("Enter Employee Number: ") # Getting
Employee ID
for i in registry:
if empID==i[1]: # Searching in
Registry
data["Registry"]=registry
fileOpen.close()