def test_filter_projects_by_name(self): records = track_time.parse(file("sub_projects-001.txt")) self.assertEqual(len(records), 20) selected_records = track_time.filter_projects_by_name(records) self.assertEqual(len(selected_records), 20) selected_records = track_time.filter_projects_by_name(records, project_name_pattern="my_project_b/*") self.assertEqual(len(selected_records), 10) selected_records = track_time.filter_projects_by_name(records, project_name_pattern="*/blog") self.assertEqual(len(selected_records), 4)
def query_hours( timesheet_pathname, nr_hours_to_work, project_pattern, nr_weeks_to_report): selected_records = track_time.parse(file(timesheet_pathname, "r")) to_time_point = track_time.last_day_of_week(datetime.date.today()) from_time_point = to_time_point - datetime.timedelta( days=(nr_weeks_to_report * 7) - 1) assert from_time_point.isocalendar()[2] == 1 # Monday. assert to_time_point.isocalendar()[2] == 7 # Sunday. selected_records = track_time.filter_projects_by_name(selected_records, project_pattern) selected_records = track_time.filter_projects_by_date(selected_records, from_time_point, to_time_point) merged_records = track_time.merge_records_by_date(selected_records) merged_records = sorted(merged_records, key=lambda record: record.date) # Hours per day (work + sick + holiday + vacation). table = prettytable.PrettyTable(["Date", "Hours"]) table.align = "r" for record in merged_records: table.add_row([ "{} {}".format(record.date.strftime("%a"), record.date), "{:.2f}".format(record.nr_hours) ]) write_table(table) merged_records = track_time.merge_records_by_week(selected_records) merged_records = sorted(merged_records, key=lambda record: record.date) # Weekly balance. table = prettytable.PrettyTable(["Week", "Balance"]) table.align = "r" for record in merged_records: table.add_row([ "{} {}".format(record.date.strftime("%a"), record.date), "{:+.2f}".format(record.nr_hours - nr_hours_to_work) ]) write_table(table) # Balance of the whole period. if merged_records: table = prettytable.PrettyTable(["Period", "Balance"]) table.align = "r" record = track_time.merge_records(selected_records) record.date = merged_records[0].date table.add_row([ "{} {}".format(record.date.strftime("%a"), record.date), "{:+.2f}".format(record.nr_hours - (nr_weeks_to_report * nr_hours_to_work)) ]) write_table(table)
def query_project( timesheet_pathname, project_pattern, aggregate): records = track_time.parse(file(timesheet_pathname, "r")) selected_records = track_time.filter_projects_by_name(records, project_pattern) merged_records = track_time.merge_records_by_project(selected_records) if aggregate: merged_records = track_time.merge_child_projects_with_parents( merged_records) # Number of hours per projects --------------------------------------------- table = prettytable.PrettyTable(["Project", "Hours", "Days"]) table.align["Project"] = "l" table.align["Hours"] = "r" table.align["Days"] = "r" table.sortby="Project" for record in merged_records: table.add_row([ record.project_string(), "{:.2f}".format(record.nr_hours), "{:.2f}".format(record.nr_days) ]) write_table(table) # Number of hours overall -------------------------------------------------- table = prettytable.PrettyTable(["Hours", "Days"]) table.align["Hours"] = "r" table.align["Days"] = "r" nr_hours = 0.0 nr_days = 0.0 for record in merged_records: nr_hours += record.nr_hours nr_days += record.nr_days table.add_row([ "{:.2f}".format(nr_hours), "{:.2f}".format(nr_days) ]) write_table(table)