Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.28 KB | None | 0 0
  1. from tinydb import TinyDB, Query
  2. from datetime import datetime
  3. import csv
  4.  
  5. DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
  6.  
  7.  
  8. class Server:
  9.     db = TinyDB('db.json')
  10.     terminals = db.table('terminals')
  11.     employees = db.table('employees')
  12.     cards = db.table('cards')
  13.     readings_unknown = db.table('readings_unknown')
  14.     readings_emp = db.table('readings_employees')
  15.  
  16.     def add_emp(self, name, surname):
  17.         emp_id = self.employees.insert({'name': name, 'surname': surname})
  18.         return emp_id
  19.  
  20.     def add_card(self, card_id):
  21.         if self.cards.search(Query().id == card_id):
  22.             print("Karta już istnieje!")
  23.             return
  24.         self.cards.insert({'id': card_id, 'emp_id': None})
  25.  
  26.     def add_terminal(self, terminal_id):
  27.         if self.terminals.search(Query().id == terminal_id):
  28.             print("Terminal już istnieje!")
  29.             return
  30.         self.terminals.insert({'id': terminal_id})
  31.  
  32.     def remove_terminal(self, terminal_id):
  33.         removed = self.terminals.remove(Query().id == terminal_id)
  34.         if not removed:
  35.             print("Terminal nie istnieje!")
  36.  
  37.     def assign_emp(self, card_id, emp_id):
  38.         updated = self.cards.update({'emp_id': emp_id}, Query().id == card_id)
  39.         if not updated:
  40.             print("Karty nie ma w systemie!")
  41.  
  42.     def unassign_emp(self, card_id):
  43.         updated = self.cards.update({'emp_id': None}, Query().id == card_id)
  44.         if not updated:
  45.             print("Karty nie ma w systemie!")
  46.  
  47.     def register(self, terminal_id, card_id):
  48.         current_time = datetime.now()
  49.         if not self.terminals.search(Query().id == terminal_id):
  50.             print("Nieobsługiwany terminal!")
  51.             return
  52.  
  53.         card = self.cards.search(Query().id == card_id)
  54.         if card and card[0]['emp_id'] is not None:
  55.             emp_id = card[0]['emp_id']
  56.             self.readings_emp.insert(
  57.                 {'terminal_id': terminal_id, 'emp_id': emp_id, 'time': current_time.strftime(DATE_FORMAT)})
  58.         else:
  59.             self.readings_unknown.insert(
  60.                 {'terminal_id': terminal_id, 'card_id': card_id, 'time': current_time.strftime(DATE_FORMAT)})
  61.  
  62.     def work_time_csv(self, emp_id):
  63.         if self.employees.get(doc_id=emp_id) is None:
  64.             print("Pracownik nie istnieje!")
  65.             return
  66.  
  67.         readings_emp = self.readings_emp.search(Query().emp_id == emp_id)
  68.         readings_emp.sort(key=lambda read: read['time'])
  69.  
  70.         emp = self.employees.get(doc_id=emp_id)
  71.         file = open(str(emp_id) + "_" + emp['name'] + "_" + emp['surname'] + ".csv", "w+")
  72.         writer = csv.writer(file)
  73.  
  74.         writer.writerow(["Rozpoczęcie pracy", "Zakończenie pracy", "Czas"])
  75.  
  76.         for enter, leave in zip(readings_emp[0::2], readings_emp[1::2]):
  77.             diff = datetime.strptime(leave['time'], DATE_FORMAT) - datetime.strptime(enter['time'], DATE_FORMAT)
  78.             writer.writerow([enter['time'], leave['time'], diff.__str__()])
  79.  
  80.         if len(readings_emp) % 2 == 1:
  81.             writer.writerow([readings_emp[-1]['time']])
  82.  
  83.         file.close()
  84.  
  85.     def purge_database(self):
  86.         self.terminals.purge()
  87.         self.employees.purge()
  88.         self.readings_unknown.purge()
  89.         self.readings_emp.purge()
  90.         self.cards.purge()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement