Add bill option; fix negative minutes

The minutes were positive even when the hours were negative. This is obviously undesired, we want the entire time to be negative. That was fixed.
This commit is contained in:
karl 2020-12-15 21:38:01 +01:00
parent 93655127db
commit ebe9548fb3

50
tx
View File

@ -10,6 +10,28 @@ def get_current_date():
def get_timefile_line(date, time, desc): def get_timefile_line(date, time, desc):
return date + " " + time + " " + desc + "\n" return date + " " + time + " " + desc + "\n"
def get_total(filename):
with open(filename, 'r') as time_file:
total_time = timedelta()
for line in time_file:
date_time_description = line.split(" ", 2)
hours, minutes = date_time_description[1].split(':', 1)
# Parse the time to integers
hours_int = int(hours)
minutes_int = int(minutes)
# Make sure that both the hours and the minutes are negative if there's a "-" before the time
if hours_int < 0: minutes_int *= -1
delta = timedelta(hours=hours_int, minutes=minutes_int)
total_time += delta
return total_time
# Parse command line arguments # Parse command line arguments
parser = argparse.ArgumentParser(prog='time.txt', description="Description") parser = argparse.ArgumentParser(prog='time.txt', description="Description")
subparsers = parser.add_subparsers(help='sub-command help', dest='mode') subparsers = parser.add_subparsers(help='sub-command help', dest='mode')
@ -25,6 +47,11 @@ parser_b.add_argument("date", nargs='?', default=get_current_date())
parser_b.add_argument("time") parser_b.add_argument("time")
parser_b.add_argument("description") parser_b.add_argument("description")
parser_b = subparsers.add_parser('bill', help='b help')
parser_b.add_argument("date", nargs='?', default=get_current_date())
parser_b.add_argument("time")
parser_b.add_argument("description")
parser_c = subparsers.add_parser('create', help='b help') parser_c = subparsers.add_parser('create', help='b help')
args = parser.parse_args() args = parser.parse_args()
@ -32,22 +59,21 @@ args = parser.parse_args()
filename = args.file if args.file else 'time.txt' filename = args.file if args.file else 'time.txt'
if not args.mode or args.mode == "total": if not args.mode or args.mode == "total":
with open(filename, 'r') as time_file: print("Total time:", get_total(filename))
total_time = timedelta()
for line in time_file:
date_time_description = line.split(" ", 2)
hours, minutes = date_time_description[1].split(':', 1)
delta = timedelta(hours=int(hours), minutes=int(minutes))
total_time += delta
print('Total time: ', total_time)
elif args.mode == "add": elif args.mode == "add":
with open(filename, 'a') as time_file: with open(filename, 'a') as time_file:
# TODO: Validate date and time
time_file.write(get_timefile_line(args.date, args.time, args.description)) time_file.write(get_timefile_line(args.date, args.time, args.description))
print("New total:", get_total(filename))
elif args.mode == "bill":
with open(filename, 'a') as time_file:
# TODO: Validate date and time
time_file.write(get_timefile_line(args.date, "-" + args.time, args.description))
print("New total:", get_total(filename))
elif args.mode == "create": elif args.mode == "create":
if (os.path.exists(filename)): if (os.path.exists(filename)):