Created
January 6, 2019 15:19
-
-
Save prakhar1989/bab6be83e33d94d23cf74296e3f2b1b0 to your computer and use it in GitHub Desktop.
attendance
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/Users/prsrivastav/miniconda3/bin/python3.7 | |
import csv | |
from dataclasses import dataclass | |
from datetime import datetime | |
from typing import List | |
DATE_FORMAT = "%d-%m-%Y" | |
@dataclass | |
class MasterRow: | |
""" represents a master row in database """ | |
badge_id: str | |
date: datetime.date | |
@dataclass | |
class AttendanceRow: | |
""" represents an attendance row in database """ | |
badge_id: str | |
first_name: str | |
last_name: str | |
date_issue: datetime.date | |
date_returned: datetime.date | |
def master_rows() -> List[MasterRow]: | |
rows = [row for row in csv.reader(open("master.csv"))][1:] | |
return [MasterRow(row[0], to_date(row[1])) for row in rows] | |
def attendance_rows() -> List[AttendanceRow]: | |
rows = [row for row in csv.reader(open("attendance.csv"))][1:] | |
return [ | |
AttendanceRow(row[0], row[1], row[2], to_date(row[3]), to_date(row[4])) | |
for row in rows | |
] | |
def find_matching_attendance(row: MasterRow, attn_rows: List[AttendanceRow]): | |
date_tagged = row.date | |
for row in attn_rows: | |
if ( | |
row.badge_id == row.badge_id | |
and date_tagged >= row.date_issue | |
and date_tagged <= row.date_returned | |
): | |
return row | |
return None | |
def to_date(d: str) -> datetime.date: | |
return datetime.strptime(d, DATE_FORMAT).date() | |
def write_csv(filename): | |
with open(filename, "w") as f: | |
writer = csv.DictWriter(f, ["badge_id", "date", "first_name", "last_name"]) | |
writer.writeheader() | |
for row in master_rows(): | |
attendance = find_matching_attendance(row, attendance_rows()) | |
writer.writerow( | |
{ | |
"badge_id": row.badge_id, | |
"date": row.date, | |
"first_name": attendance.first_name, | |
"last_name": attendance.last_name, | |
} | |
) | |
if __name__ == "__main__": | |
write_csv("new_master.csv") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment