-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
executable file
·197 lines (146 loc) · 5.48 KB
/
main.py
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import datetime
import pickle
import card_read
import os
import pandas as pd
import time
tmp_database_path = os.getcwd() + "/temp_database.csv"
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('sheets', 'v4', credentials=creds)
spreadsheet_id = '***********************'
range_ = 'Sheet1!A:F'
employee_card = {"*****": "***",
"****": "****"}
gym_card = {"CARD1": "*****",
"CARD2": "*****"}
def add_entry(time, employee_name, card_name, RowNumber):
if not os.path.isfile(tmp_database_path):
df = pd.DataFrame(columns=["Time", "EmployeeName", "CardName", "RowNumber"])
df.to_csv(tmp_database_path, index=False)
df = pd.read_csv(tmp_database_path)
labels = ["Time", "EmployeeName", "CardName", "RowNumber"]
df1 = pd.DataFrame.from_records([(time, employee_name, card_name, RowNumber)], columns=labels)
df = df.append(df1, ignore_index=False)
df.to_csv(tmp_database_path, index=False)
def read_entry(employee_name, card_name):
if not os.path.isfile(tmp_database_path):
return False, None
else:
df = pd.read_csv(tmp_database_path)
RowNumber = df.loc[(df["EmployeeName"] == employee_name) & (df["CardName"] == card_name), "RowNumber"]
# print RowNumber
if len(RowNumber) > 0:
print RowNumber.iloc[0]
df = df[df["RowNumber"] != RowNumber.iloc[0]]
df.to_csv(tmp_database_path, index=False)
return True, RowNumber.iloc[0]
else:
return False, None
def ID2cardname(ID):
for key, value in gym_card.iteritems():
if value == ID:
return key
return None
def ID2empname(ID):
for key, value in employee_card.iteritems():
if value == ID:
return key
return None
def update(list1):
value_input_option = 'RAW'
insert_data_option = 'INSERT_ROWS'
value_range_body = {
"majorDimension": "COLUMNS",
"values": list1
}
request = service.spreadsheets().values().append(spreadsheetId=spreadsheet_id, range=range_,
valueInputOption=value_input_option, insertDataOption=insert_data_option, body=value_range_body).execute()
return
def updateOUTtime(RowNumber, Time):
updateRange = "Sheet1!D" + str(RowNumber) + ":D" + str(RowNumber)
value_input_option = 'RAW'
value_range_body = {
"majorDimension": "COLUMNS",
"values": [[str(Time)]]
}
request = service.spreadsheets().values().update(spreadsheetId=spreadsheet_id, range=updateRange,
valueInputOption=value_input_option, body=value_range_body)
response = request.execute()
return
Employee_card = True
Gym_card = False
employee_name = None
card_name = None
number_of_entries = 0
IsReturn = False
if __name__ == '__main__':
while True:
if Employee_card:
print "Punch the Employee card"
while True:
ID = card_read.read()
if len(ID) == 0:
not_punched = True
break
not_punched = False
employee_name = ID2empname(ID)
if employee_name is None:
print "Use proper card"
time.sleep(1)
continue
print "Card punched successfully"
Employee_card = False
Gym_card = True
break
if not_punched:
continue
time.sleep(2)
if Gym_card:
print "Punch the gym Card"
while True:
ID = card_read.read()
if len(ID) == 0:
not_punched = True
break
not_punched = False
card_name = ID2cardname(ID)
if card_name is None:
print "Use proper card"
time.sleep(1)
continue
print "Card punched successfully"
Time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Gym_card = False
Employee_card = True
break
if not_punched:
Employee_card = True
continue
IsReturn, RowNumber = read_entry(employee_name, card_name)
if not IsReturn:
list1 = [[employee_name], [card_name], [str(Time)]]
print "Now updating record on spreadsheet"
update(list1)
print "Entry made successfully. Have a great Workout!!!"
number_of_entries += 1
add_entry(Time, employee_name, card_name, number_of_entries)
else:
# print RowNumber
updateOUTtime(RowNumber, Time)
print "Thanks for using the GYM!!"