-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathARFID_System.py
More file actions
132 lines (107 loc) · 4.16 KB
/
ARFID_System.py
File metadata and controls
132 lines (107 loc) · 4.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# ARFID RULES!!!
from ARFID_Arduino import *
from ARFID_Database import *
from ARFID_Display import *
from ARFID_Excel import *
from ARFID_Email import *
logFile = open('ARFIDLog.txt','a')
def log(message):
logFile.write(str(datetime.datetime.now()) + " | " + message + "\n")
class Arfid():
def __init__(self, user, database, studentTable, tapRecordsTable, teachersTable, teacherClassesTable):
log("Starting ARFID")
try:
self.queries = setupQueries(studentTable, tapRecordsTable, teachersTable, teacherClassesTable)
self.cnx, self.cursor = setupDbCon(user, database)
self.ser = initArduino()
initDisplay()
print("Done init.")
except Exception as e:
log("Error in Arfid.__init__(): " + str(e))
def studentPage(self, rfid):
try:
self.student = searchDb(rfid, self.queries, self.cursor)
if not self.student:
print("Unknown")
log("Unknown rfid {}".format(rfid))
return False
if hasTapped(rfid, self.queries, self.cursor):
print("Has already tapped today")
return (self.student, True)
recordTapDb(rfid, self.queries, self.cnx, self.cursor, self.student)
return (self.student, False)
except Exception as e:
log("Error in studentPage(): " + str(e))
def sendToTeachers(self, sections):
try:
minDate, maxDate = dateRange(self.queries, self.cursor)
teacherClasses, teacherEmails = returnEmailsClasses(self.queries, self.cursor)
files = {}
teacherFiles = {}
for section in sections:
filePath = createExcelAttendance(section, self.queries, self.cursor)
files[section] = filePath
for teacher in teacherClasses.keys():
for s in teacherClasses[teacher]:
try:
teacherFiles[teacher].append(files[s])
except:
teacherFiles[teacher] = [files[s]]
subject, msg = writeEmail(teacherClasses[teacher], teacher, minDate, maxDate)
sendEmail(subject, msg, teacher, teacherEmails[teacher], teacherFiles[teacher])
log("Emailed to {}:{}".format(teacher, str(teacherClasses[teacher])))
return (True)
except Exception as e:
log("Error in : " + str(e))
return (False, str(e))
def editRfidInDb(self):
rfid = scan(self.ser)
updateDbRfid(rfid, self.queries, self.cnx, self.cursor)
@eel.expose
def callStudentPage(rfid):
return arfid.studentPage(rfid)
@eel.expose
def callSendToTeachers():
sections = ['Hernandez', 'Banzon', 'SyCip', 'Faculty']
return arfid.sendToTeachers(sections)
@eel.expose
def callEditRfidInDb():
return arfid.editRfidInDb()
@eel.expose
def callSendSMS():
time.sleep(3)
return sendSMS(arfid.ser, arfid.student)
@eel.expose
def callSendAbsentSMS(students):
print(students[0])
time.sleep(0.5)
sendAbsentSMS(arfid.ser, students[0])
return students[1:] if students[1:] else False
@eel.expose
def callScan():
return scan(arfid.ser)
@eel.expose
def callSearchAbsents():
return searchAbsents(arfid.queries, arfid.cursor)
arfid = Arfid("cs","test","students20","tapRecords","teacherstest","teacherClassesTest")
##Test if these functions work
# if __name__ == "__main__":
#
# while(True):
# # choice = '3'
# choice = input("\nWhat do you want to test:\n"
# "1) Student page\n"
# "2) Send Email\n"
# "3) Edit RFID in Database\n"
# "[1/2/3/x]: ")
# if(choice=="1"):
# arfid.studentPage()
# elif(choice=="2"):
# arfid.sendToTeachers(sections)
# elif(choice=="3"):
# arfid.editRfidInDb()
# elif(choice=="4"):
# arfid.test()
# else:
# break
# eel.sleep(3)