add function userchoise and print time entries by daly report

This commit is contained in:
2021-06-08 23:48:44 +02:00
parent 0765f45704
commit c081f519dd

View File

@@ -38,6 +38,7 @@ class TimeTrack:
self.DBCON.close()
## Prepartation
#==============
### Check OS and clear screen
def clear_screen(self):
if os.name == 'posix':
@@ -261,6 +262,7 @@ class TimeTrack:
return timedata
## user handling
#===============
### Creates a user who does not yet exist
def create_user(self, USER=''):
if USER == '':
@@ -336,6 +338,7 @@ class TimeTrack:
self.USERNAME = data[0][1]
## Time handling
#===============
### Creates an active event if none exists for the user
def save_event(self, TIME=datetime.datetime.now()):
if not self.get_active_event(USERID=self.USERID):
@@ -386,7 +389,7 @@ class TimeTrack:
else:
logging.debug('Event was successfully deleted')
# Checks for existing time entries and creates a new one if none is available.
### Checks for existing time entries and creates a new one if none is available.
def time_start(self, AUTOFORWARD=True):
self.clear_screen()
starttime = datetime.datetime.now()
@@ -445,7 +448,7 @@ class TimeTrack:
print('Event von {} Uhr geladen'.format(data[1].strftime("%H:%M")))
self.time_stop()
# Stops existing time entries
### Stops existing time entries
def time_stop(self):
data = self.get_active_event(USERID=self.USERID)
logging.debug('Event stop progess is started')
@@ -504,6 +507,7 @@ class TimeTrack:
logging.info('Time entry was created successfully')
self.delete_event(data[0])
self.clear_screen()
self.print_time_entry(STARTTIME=data[1], ENDTIME=endtime, ACTIVITY=action)
print('Zeiteintrag wurde gespeichert.')
userinput = 0
@@ -531,30 +535,41 @@ class TimeTrack:
logging.debug('Terminated by the user')
exit()
def timedela_to_string(self, TIME):
s = TIME.seconds
hours, remainder = divmod(s, 3600)
minutes, seconds = divmod(remainder, 60)
output = '{:02}:{:02}:{:02}'.format(int(hours), int(minutes), int(seconds))
return output
# Shows a time entry
def print_time_entry(self, STARTTIME='', ENDTIME='', ACTIVITY=''):
## Interactive mode
#==================
### Main menu of the interactive menu
def start_interactive_mode(self):
self.clear_screen()
s = (ENDTIME - STARTTIME).seconds
hours, remainder = divmod(s, 3600)
minutes, seconds = divmod(remainder, 60)
printtext = [
'Was willst du tun?',
'[1] Zeiterfassung starten',
'[2] heutiger Report',
'[3] Report für Tag x',
'[0] Programm verlassen'
]
userinput = self.userchoise(printtext, 4)
print(50*"-")
print('Start: {} Uhr'.format(STARTTIME.strftime('%H:%M')))
print('Ende: {} Uhr'.format(ENDTIME.strftime('%H:%M')))
print('Dauer: {:02}:{:02}:{:02}'.format(int(hours), int(minutes), int(seconds)))
if not ACTIVITY == '':
print('Aktivität:')
print(ACTIVITY)
print(50*"-")
if userinput == 1:
logging.debug('Start TimeTrack')
self.time_start()
elif userinput == 2:
logging.info('Print todays report')
self.report_by_day(DETAIL=True)
input()
self.start_interactive_mode()
elif userinput == 3:
print('commig soon ...')
input()
self.start_interactive_mode()
elif userinput == 4:
print('commig soon ...')
input()
self.start_interactive_mode()
def report_by_day(self, DATE=datetime.date.today(), USER=''):
## Reports
#=========
### One day report, optionally with time entries
def report_by_day(self, DATE=datetime.date.today(), USER='', DETAIL=''):
if not USER:
USER = self.USERID
timedata = self.get_time_entry(DAY=DATE, USERID=USER)
@@ -584,41 +599,61 @@ class TimeTrack:
print('{:40} {}'.format("Erfasste Zeit:", self.timedela_to_string(TRACKEDTIME)))
print('{:40} {}'.format("Zeiteinträge:", ENTRIECOUNT))
def start_interactive_mode(self):
self.clear_screen()
userinput = 0
while not 0 < int(userinput) < 4:
print('Was willst du tun?')
print('[1] für Zeiterfassung starten')
print('[2] für heutiger Report')
print('[3] für Report für Tag x')
print('[9] für Programm verlassen')
printtext = [
'Zeiteinträge anzeigen?',
'[1] Ja',
'[0] Nein'
]
userinput = self.userchoise(printtext)
if userinput == 1:
for entry in timedata:
self.print_time_entry(entry[1], entry[2], entry[4])
else:
self.start_interactive_mode()
## Outputs
#=========
### Shows a time entry
def print_time_entry(self, STARTTIME='', ENDTIME='', ACTIVITY=''):
s = (ENDTIME - STARTTIME).seconds
hours, remainder = divmod(s, 3600)
minutes, seconds = divmod(remainder, 60)
print(50*"-")
print('Start: {} Uhr'.format(STARTTIME.strftime('%H:%M')))
print('Ende: {} Uhr'.format(ENDTIME.strftime('%H:%M')))
print('Dauer: {:02}:{:02}:{:02}'.format(int(hours), int(minutes), int(seconds)))
if not ACTIVITY == '':
print('Aktivität:')
print(ACTIVITY)
print(50*"-")
## Miscellaneous
#===============
### User selection
def userchoise(self, TEXT='', MAX=2):
userinput = -1
while not -1 < int(userinput) < MAX:
for text in TEXT:
print(text)
userinput = input('Aktion: ')
logging.debug('User input: {}'.format(userinput))
try:
int(userinput)
except ValueError:
userinput = 0
userinput = -1
else:
if int(userinput) == 9:
logging.debug('Terminated by the user')
exit()
self.clear_screen()
return int(userinput)
if userinput == "1":
logging.debug('Start TimeTrack')
self.time_start()
elif userinput == "2":
logging.info('Print todays report')
self.report_by_day()
input()
self.start_interactive_mode()
elif userinput == "3":
print('commig soon ...')
input()
self.start_interactive_mode()
### Conversion to string of Timedelta typ
def timedela_to_string(self, TIME):
s = TIME.seconds
hours, remainder = divmod(s, 3600)
minutes, seconds = divmod(remainder, 60)
output = '{:02}:{:02}:{:02}'.format(int(hours), int(minutes), int(seconds))
return output
print(userinput)
if __name__ == "__main__":
test = TimeTrack()