diff --git a/timeTrack.py b/timeTrack.py index 0198bd8..f37369e 100644 --- a/timeTrack.py +++ b/timeTrack.py @@ -3,15 +3,13 @@ # # timeTrack.py # by 4nima -# v.0.3.0 +# v.0.4.0 # ######################### # simple time tracking with database ######################### import datetime -from sqlite3.dbapi2 import Cursor -import time import sqlite3 import json import os @@ -24,6 +22,7 @@ class TimeTrack: self.CONFIG = CONFIG self.USERID = 0 self.USERNAME = '' + self.OLDEVENT = 2 self.LOGFILE = 'timetrack.log' logging.basicConfig( filename=self.LOGFILE, @@ -35,6 +34,15 @@ class TimeTrack: self.load_config() ## Prepartation + ### Check OS and clear screen + def clear_screen(self): + if os.name == 'posix': + logging.debug('Unix/Linux system detected') + _ = os.system('clear') + else: + logging.debug('Winwos System detected') + _ = os.system('cls') + ### Creates a database if none is found def db_setup(self): if os.path.isfile(self.DATABASE): @@ -118,14 +126,16 @@ class TimeTrack: else: logging.info('Config file was loaded successfully') self.USERID = data['user'] + self.OLDEVENT = data['oldevent'] logging.debug('UserID {} was used'.format(data['user'])) self.set_user() else: logging.warning('Config file not found') config = { + 'default' : 'interactive', 'user' : 1, - 'default' : 'interactive' + 'oldevent' : 2 } with open(self.CONFIG, "w") as outfile: json.dump(config, outfile, indent=4, sort_keys=True) @@ -221,7 +231,7 @@ class TimeTrack: ## Time handling ### Creates an active event if none exists for the user - def set_event(self, TIME=datetime.datetime.now()): + def save_event(self, TIME=datetime.datetime.now()): if not self.get_event(USERID=self.USERID): logging.debug('No active events found for the user: {}'.format(self.USERID)) connect = sqlite3.connect(self.DATABASE) @@ -234,13 +244,16 @@ class TimeTrack: logging.error('Event could not be created') logging.debug(sql) print('Event konnte nicht gespeichert werden.') + return False else: logging.info('Event was created successfully') connect.commit() connect.close() + return True else: logging.warning('Active events found for the user, new event could not be created') + return False ### Deletes an active event based on a user or event ID def delete_event(self, ENTRYID='', USERID=''): @@ -309,14 +322,64 @@ class TimeTrack: else: logging.debug('{} events found'.format(len(data))) return data[0] -#################################################################################################### -#################################################################################################### -#################################################################################################### -#################################################################################################### - def time_start(self): - pass - def time_end(self): + def time_start(self, AUTOFORWARD=True): + self.clear_screen() + starttime = datetime.datetime.now() + logging.info('New Event process started at {}'.format(starttime)) + if self.save_event(starttime): + print('Neues Event gestartet um {}'.format(starttime.strftime("%H:%M"))) + else: + data = self.get_event(USERID=self.USERID) + print('Es existiert bereits ein aktives Event.') + if (data[1] + datetime.timedelta(hours=self.OLDEVENT)) <= datetime.datetime.now(): + logging.info('Event exceeds allowed duration') + print('Zeiteintrag ist zu alt laut den Einstellungen (älter {} Stunden)'.format(self.OLDEVENT)) + + if datetime.date.today() == data[1].date(): + print('Start um: {}'.format(data[1].strftime("%H:%M"))) + else: + print('Start am: {}'.format(data[1].strftime("%d.%m.%Y um %H:%M"))) + + elapsed = datetime.datetime.now() - data[1] + if elapsed.days: + logging.debug('Event older than 1 day ({} days)'.format(elapsed.days)) + print('Vergangene Zeit: >{} Tage'.format(elapsed.days)) + else: + logging.debug('Event younger than 1 day') + print('Vergangene Zeit: >{} Stunden'.format(int(elapsed.seconds/3600))) + + userinput = '' + while True: + if userinput == "A" or userinput == "a" or userinput == "1" \ + or userinput == "F" or userinput == "f" or userinput == "2" \ + or userinput == "L" or userinput == "l" or userinput == "3": + break + print('Soll das Event fortgesetzt oder gelöscht werden?') + print('[1/F/f] für fortsetzen') + print('[2/L/l] für löschen') + print('[3/A/a] für abbrechen') + userinput = input('Antwort: ') + logging.debug('User input: {}'.format(userinput)) + self.clear_screen() + + if userinput == "F" or userinput == "f" or userinput == "1": + logging.debug('Event should be continued') + self.time_stop() + elif userinput == "L" or userinput == "l" or userinput == "2": + logging.info('Event should be deleted (eventid: {})'.format(data[0])) + self.delete_event(data[0]) + self.time_start() + else: + logging.debug('Terminated by the user') + exit() + + else: + logging.debug('Event continues (eventid{})'.format(data[0])) + print('Event von {} Uhr geladen'.format(data[1].strftime("%H:%M"))) + self.time_stop() + + def time_stop(self): pass def get_time(self): @@ -325,5 +388,6 @@ class TimeTrack: test = TimeTrack() #test.delete_event(USERID=1) -#test.set_event() -test.get_event() \ No newline at end of file +#test.save_event() +#test.get_event() +test.time_start() \ No newline at end of file