def create_timesheet(self, project_configuration, reports_set_folder, timesheet_name_prefix): TimesheetLogger().log_on_console("=" * 50) TimesheetLogger().log_on_console( "Started creating timesheet: {}.".format(timesheet_name_prefix)) report_name = self._names_generator.generate_report_name( timesheet_name_prefix) if not os.path.exists( os.path.join(self._timesheet_reports_folder, reports_set_folder)): os.makedirs( os.path.join(self._timesheet_reports_folder, reports_set_folder)) workbook = xlsxwriter.Workbook( os.path.join(self._timesheet_reports_folder, reports_set_folder, report_name)) timesheet = Timesheet(workbook) self._project_teams_builder.clean_teams_container() self._teams_container = self._project_teams_builder.build_project_team( project_configuration['teams'], self._timesheet_data) teams_list = self._teams_container.get_teams_list() timesheet.add_summary_worksheet( teams_list, self._timesheet_date, self._national_holidays_list, project_configuration['po_number'], project_configuration['man_days_costs']) timesheet.add_statistics_worksheet( teams_list, self._timesheet_date, project_configuration['man_day_hours']) timesheet.add_worksheets_for_employees( teams_list, self._timesheet_date, project_configuration['man_day_hours']) timesheet.save_timesheet() TimesheetLogger().log_on_console("*" * 50) TimesheetLogger().log_on_console( "Timesheet: {} created.".format(timesheet_name_prefix)) TimesheetLogger().log_on_console("=" * 50)
def setUp(self): self.timesheet = Timesheet()
class TestTimesheet(unittest.TestCase): def setUp(self): self.timesheet = Timesheet() def testTimecardsDefaultValue(self): self.assertEqual(self.timesheet.timecards, {}) def testGetTimecardReturnsATimecardObject(self): timecard = self.timesheet.get_timecard("2015-06-01") self.assertTrue(isinstance(timecard, Timecard)) def testGetTimecardReturnsTimecardWithCorrectDate(self): timecard = self.timesheet.get_timecard("2015-06-01") self.assertEqual(timecard.date, datetime.strptime("2015-06-01", "%Y-%m-%d")) def testGetTimecardAddsTimecardToTimecardsDict(self): self.timesheet.get_timecard("2015-07-22") self.assertEqual(len(self.timesheet.timecards), 1) def testRepeatedCallsToGetTimecardReturnSameTimecard(self): tc1 = self.timesheet.get_timecard("2015-07-22") tc2 = self.timesheet.get_timecard("2015-07-22") self.assertEqual(tc1, tc2) def testDatesReturnsEmptyListWithoutTimecards(self): self.assertEqual(self.timesheet.dates(), []) def testDatesReturnsLengthTwoListWithTwoDifferentTimecards(self): self.timesheet.get_timecard("2015-06-01") self.timesheet.get_timecard("2015-06-02") self.assertEqual(len(self.timesheet.dates()), 2) def testDatesReturnsLengthOneListWithTwoSameTimecards(self): self.timesheet.get_timecard("2015-06-01") self.timesheet.get_timecard("2015-06-01") self.assertEqual(len(self.timesheet.dates()), 1) def testToCsvReturnsCsvFormattedDataForOneTimecard(self): item = { "time_spec": "10:00-18:30", "notes": "did stuff", } timecard = self.timesheet.get_timecard("2015-06-01") timecard.add(**item) timesheet_csv = self.timesheet.to_csv() expected = "Date work,Description,Tickets,Hours\r\n" expected += "2015-06-01,did stuff,,8.50\r\n" self.assertEqual(timesheet_csv, expected) def testToCsvReturnsCsvFormattedDataForTwoTimecards(self): first_item = { "time_spec": "10:00-18:30", "notes": "did stuff", } first_timecard = self.timesheet.get_timecard("2015-06-01") first_timecard.add(**first_item) second_item = { "time_spec": "19:00-20:00", "notes": "did more stuff", "tickets": "#123", } second_timecard = self.timesheet.get_timecard("2015-06-02") second_timecard.add(**second_item) timesheet_csv = self.timesheet.to_csv() expected = "Date work,Description,Tickets,Hours\r\n" expected += "2015-06-01,did stuff,,8.50\r\n" expected += "2015-06-02,did more stuff,#123,1.00\r\n" self.assertEqual(timesheet_csv, expected)
import yaml import argparse import os.path from timesheets.timesheet import Timesheet parser = argparse.ArgumentParser(description="Convert timesheets to CSV") parser.add_argument("--timesheet", type=str, required=True, help="timesheet file name") args = parser.parse_args() timesheet_yml_fname = args.timesheet yml_fh = open(timesheet_yml_fname) timesheet_items = yaml.load_all(yml_fh) timesheet = Timesheet() total_hours = 0.0 for item in timesheet_items: timecard = timesheet.get_timecard(item.pop("date")) timecard.add(**item) timesheet_csv = timesheet.to_csv() timesheet_basename = os.path.basename(timesheet_yml_fname) timesheet_stem = os.path.splitext(timesheet_basename)[0] timesheet_csv_fname = timesheet_stem + ".csv" csv_fh = open(timesheet_csv_fname, "w") csv_fh.write(timesheet_csv) csv_fh.close() print "Total hours: {0:.2f}".format(timesheet.total_hours_worked())