date range tested with get attendance
parent
f5d4ad9cd9
commit
c705a757b0
|
|
@ -21,4 +21,4 @@ or
|
||||||
|
|
||||||
`$ http --session=./session.json GET "http://127.0.0.1:5000/api/attendance/student?identifier=3&start_time=now&end_time=now"`
|
`$ http --session=./session.json GET "http://127.0.0.1:5000/api/attendance/student?identifier=3&start_time=now&end_time=now"`
|
||||||
#### Class:
|
#### Class:
|
||||||
`$ http --session=./session.json GET "http://127.0.0.1:5000/api/attendance/class?identifier=1&start_time=now&end_time=now"`
|
`$ http --session=./session.json GET "http://127.0.0.1:5000/api/attendance/class?identifier=1"`
|
||||||
|
|
|
||||||
13
server.py
13
server.py
|
|
@ -74,20 +74,22 @@ def parse_time(time_str):
|
||||||
utc_now = (time_str and time_str == 'now') or not time_str
|
utc_now = (time_str and time_str == 'now') or not time_str
|
||||||
time = datetime.utcnow() if utc_now else None
|
time = datetime.utcnow() if utc_now else None
|
||||||
try:
|
try:
|
||||||
time = parser.parse(attend_date)
|
time = parser.parse(time_str)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
return time
|
return time
|
||||||
|
|
||||||
|
|
||||||
def compute_attendance(request_type, object_id, start_time, end_time):
|
def compute_attendance(request_type, object_id, start_time, end_time):
|
||||||
|
print('AttendanceUpdates for :', start_time, end_time)
|
||||||
|
|
||||||
def get_records(req_type, obj_id):
|
def get_records(req_type, obj_id):
|
||||||
return AttendanceUpdate.query.filter(
|
return AttendanceUpdate.query.filter(
|
||||||
AttendanceUpdate.update_type == req_type).filter(
|
AttendanceUpdate.update_type == req_type).filter(
|
||||||
AttendanceUpdate.value_identifier == obj_id).filter(
|
AttendanceUpdate.value_identifier == obj_id).filter(
|
||||||
func.date(AttendanceUpdate.time) >=
|
func.date(AttendanceUpdate.time) >=
|
||||||
start_time.date()).filter(
|
start_time.date()).filter(
|
||||||
func.date(AttendanceUpdate.time) >=
|
func.date(AttendanceUpdate.time) <=
|
||||||
end_time.date()).all()
|
end_time.date()).all()
|
||||||
|
|
||||||
def student_records(stud_id):
|
def student_records(stud_id):
|
||||||
|
|
@ -97,10 +99,12 @@ def compute_attendance(request_type, object_id, start_time, end_time):
|
||||||
pres_rec = stud_recs
|
pres_rec = stud_recs
|
||||||
for gr in gcls_recs:
|
for gr in gcls_recs:
|
||||||
# if any grade record overlaps with student record -> ignore
|
# if any grade record overlaps with student record -> ignore
|
||||||
if not any(map(lambda x:gr.time.date()==x.time.date(),stud_recs)):
|
if not any(
|
||||||
|
map(lambda x: gr.time.date() == x.time.date(), stud_recs)):
|
||||||
pres_rec.append(gr)
|
pres_rec.append(gr)
|
||||||
recs = []
|
recs = []
|
||||||
for r in pres_rec:
|
# sort student records by time
|
||||||
|
for r in sorted(pres_rec, key=lambda x: x.time):
|
||||||
recs.append({
|
recs.append({
|
||||||
"presence": presense_map[r.presence].lower(),
|
"presence": presense_map[r.presence].lower(),
|
||||||
"student": stud.student_name,
|
"student": stud.student_name,
|
||||||
|
|
@ -113,6 +117,7 @@ def compute_attendance(request_type, object_id, start_time, end_time):
|
||||||
result.extend(student_records(object_id))
|
result.extend(student_records(object_id))
|
||||||
if request_type == 'class':
|
if request_type == 'class':
|
||||||
gcls = Gradeclass.query.get(object_id)
|
gcls = Gradeclass.query.get(object_id)
|
||||||
|
# get result for each student
|
||||||
for stud in gcls.students:
|
for stud in gcls.students:
|
||||||
result.extend(student_records(stud.id))
|
result.extend(student_records(stud.id))
|
||||||
return result
|
return result
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue