Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tinydb import TinyDB, Query
- from datetime import datetime
- import csv
- DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
- class Server:
- db = TinyDB('db.json')
- terminals = db.table('terminals')
- employees = db.table('employees')
- cards = db.table('cards')
- readings_unknown = db.table('readings_unknown')
- readings_emp = db.table('readings_employees')
- def add_emp(self, name, surname):
- emp_id = self.employees.insert({'name': name, 'surname': surname})
- return emp_id
- def add_card(self, card_id):
- if self.cards.search(Query().id == card_id):
- print("Karta już istnieje!")
- return
- self.cards.insert({'id': card_id, 'emp_id': None})
- def add_terminal(self, terminal_id):
- if self.terminals.search(Query().id == terminal_id):
- print("Terminal już istnieje!")
- return
- self.terminals.insert({'id': terminal_id})
- def remove_terminal(self, terminal_id):
- removed = self.terminals.remove(Query().id == terminal_id)
- if not removed:
- print("Terminal nie istnieje!")
- def assign_emp(self, card_id, emp_id):
- updated = self.cards.update({'emp_id': emp_id}, Query().id == card_id)
- if not updated:
- print("Karty nie ma w systemie!")
- def unassign_emp(self, card_id):
- updated = self.cards.update({'emp_id': None}, Query().id == card_id)
- if not updated:
- print("Karty nie ma w systemie!")
- def register(self, terminal_id, card_id):
- current_time = datetime.now()
- if not self.terminals.search(Query().id == terminal_id):
- print("Nieobsługiwany terminal!")
- return
- card = self.cards.search(Query().id == card_id)
- if card and card[0]['emp_id'] is not None:
- emp_id = card[0]['emp_id']
- self.readings_emp.insert(
- {'terminal_id': terminal_id, 'emp_id': emp_id, 'time': current_time.strftime(DATE_FORMAT)})
- else:
- self.readings_unknown.insert(
- {'terminal_id': terminal_id, 'card_id': card_id, 'time': current_time.strftime(DATE_FORMAT)})
- def work_time_csv(self, emp_id):
- if self.employees.get(doc_id=emp_id) is None:
- print("Pracownik nie istnieje!")
- return
- readings_emp = self.readings_emp.search(Query().emp_id == emp_id)
- readings_emp.sort(key=lambda read: read['time'])
- emp = self.employees.get(doc_id=emp_id)
- file = open(str(emp_id) + "_" + emp['name'] + "_" + emp['surname'] + ".csv", "w+")
- writer = csv.writer(file)
- writer.writerow(["Rozpoczęcie pracy", "Zakończenie pracy", "Czas"])
- for enter, leave in zip(readings_emp[0::2], readings_emp[1::2]):
- diff = datetime.strptime(leave['time'], DATE_FORMAT) - datetime.strptime(enter['time'], DATE_FORMAT)
- writer.writerow([enter['time'], leave['time'], diff.__str__()])
- if len(readings_emp) % 2 == 1:
- writer.writerow([readings_emp[-1]['time']])
- file.close()
- def purge_database(self):
- self.terminals.purge()
- self.employees.purge()
- self.readings_unknown.purge()
- self.readings_emp.purge()
- self.cards.purge()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement