diff --git a/bin/work b/bin/work index f071f51..cf7a844 100755 --- a/bin/work +++ b/bin/work @@ -61,10 +61,69 @@ def get_today_fields(): def work(args): + total_delta = timedelta() + month_delta = timedelta() + count = 0 + month_count = 0 + with open(TIME_FILE, "r") as f: + for line in f: + fields = line.strip().split(",", 5) + date = datetime.strptime(fields[0], "%Y-%m-%d") + t = datetime.strptime(fields[4], "%H:%M") + delta = timedelta(hours=t.hour, minutes=t.minute) + if date.month == start_time.month: + month_delta += delta + month_count += 1 + total_delta += delta + count += 1 + eight_h = timedelta(hours=8) * count + mean_time = total_delta / count + minutes = total_delta - eight_h + month_mean_time = month_delta / month_count + month_min = month_delta - timedelta(hours=(8 * month_count)) + print("stats: {}, {}".format( + td_format(mean_time), + td_format(minutes))) + print("month stats: {}, {}".format( + td_format(month_mean_time), + td_format(month_min))) + + # Try to calculate remaining time fields = get_today_fields() - if len(fields) < 2: - die("you haven't started working yet today") - print("stats: {}".format(fields)) + hour = start_time.strftime("%H:%M") + if not fields: + print("No work ongoing") + return + fields.append(hour) + # Test for even number of timestamp (but fields[0] is the date) + if len(fields) < 3: + die("not enough fields in {}".format(TODAY_FILE)) + elif len(fields) % 2 == 0: + # Break in progress + log("Break in progress") + return + begin_time = None + worked_time = timedelta() + for field in fields[1:]: + try: + if begin_time is None: + begin_time = datetime.strptime(field, "%H:%M") + else: + end_time = datetime.strptime(field, "%H:%M") + worked_time += end_time - begin_time + begin_time = None + except ValueError: + die("couldn't parse field '{}' in {}".format( + field, TODAY_FILE)) + day_start = datetime.strptime(fields[1], "%H:%M") + day_end = datetime.strptime(fields[-1], "%H:%M") + total_time = day_end - day_start + break_time = total_time - worked_time + day_end_estimation = day_start + timedelta(hours=8) + break_time + print("Worked {} already today. Estimated leave at {}".format( + td_format(worked_time), + day_end_estimation.strftime("%H:%M"))) + def work_start(args):