Beispiel #1
0
        def test_create_tasks_construnction_summary_before_construnction_ready(
                self, setup_and_teardown):
            description = 'Construction Summary before Construction Ready'
            # setup_and_teardown['COMMENTS'] = setup_and_teardown['COMMENTS'].astype(str)

            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Parent'] = 'Construction Summary'
            setup_and_teardown.at[0, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=1))
            setup_and_teardown.at[0, r'Start_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[0,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Parent'] = 'Construction Summary'
            setup_and_teardown.at[1, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[1, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() - pd.DateOffset(days=1))
            setup_and_teardown.at[1, r'Start_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[1,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            assert ct.create_tasks_construnction_summary_before_construnction_ready(
                setup_and_teardown, False) == None

            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Parent'] = 'Construction Summary'
            setup_and_teardown.at[0, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=1))
            setup_and_teardown.at[0, r'Start_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[0,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Parent'] = 'Construction Summary'
            setup_and_teardown.at[1, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[1, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() - pd.DateOffset(days=1))
            setup_and_teardown.at[1, r'Start_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[1,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            assert ct.create_tasks_construnction_summary_before_construnction_ready(
                setup_and_teardown, False) == description
Beispiel #2
0
        def test_Create_tasks_TOA_equal_Waterfall_Start(
                self, setup_and_teardown):
            description = None
            # setup_and_teardown['COMMENTS'] = setup_and_teardown['COMMENTS'].astype(str)
            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Schedule_Function'] = 'TOA'
            setup_and_teardown.at[0, 'COMMENTS'] = str(
                'Oncor Status: SUBMITTED ERCOT Status:')
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=1))

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Grandchild'] = 'Waterfall Start'
            setup_and_teardown.at[1, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[1, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())

            setup_and_teardown.at[2, 'PETE_ID'] = 1
            setup_and_teardown.at[2, 'Grandchild'] = 'Waterfall Finish'
            setup_and_teardown.at[2, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[2, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=6))

            assert ct.create_tasks_toa_outside_waterfalls(
                setup_and_teardown, False) == description
Beispiel #3
0
        def test_create_tasks_for_engineering_activities_start_dates_FD_PD(
                self, setup_and_teardown):
            description = 'Ask Engineering to update the TE schedule'

            setup_and_teardown = pd.concat([setup_and_teardown] * 2,
                                           ignore_index=True)

            setup_and_teardown.at[0, 'Grandchild'] = 'Foundation Design'
            setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=5)
            setup_and_teardown.at[0, r'Start_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                "today").date() + pd.DateOffset(days=5)
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'

            setup_and_teardown.at[1, 'Grandchild'] = 'Physical Design'
            setup_and_teardown.at[1, 'Start_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=5)
            setup_and_teardown.at[1, r'Start_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[1, 'Finish_Date'] = pd.to_datetime(
                "today").date() + pd.DateOffset(days=5)
            setup_and_teardown.at[1, r'Finish_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[1, 'Program_Manager'] = 'Michael Howard'

            assert ct.create_tasks_for_engineering_activities_start_dates(
                setup_and_teardown, False) == description
Beispiel #4
0
 def test_create_tasks_for_waterfalls_Baseline(self,
                                               setup_and_teardown):
     description = 'Waterfall needs to be baselined'
     setup_and_teardown.at[0, 'Grandchild'] = 'TEST'
     setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'
     assert ct.create_tasks_for_waterfalls(setup_and_teardown,
                                           False) == description
Beispiel #5
0
        def test_create_tasks_for_engineering_activities_finish_dates_FD_ED(
                self, setup_and_teardown):
            description = 'Ask Engineering to update the TE schedule (Finish Date)'

            setup_and_teardown = pd.concat([setup_and_teardown] * 2,
                                           ignore_index=True)

            setup_and_teardown.at[0, 'Grandchild'] = 'Foundation Design'
            setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=10)
            setup_and_teardown.at[0, r'Start_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=5)
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'P'

            setup_and_teardown.at[1, 'Grandchild'] = 'Electrical Design'
            setup_and_teardown.at[1, 'Start_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=10)
            setup_and_teardown.at[1, r'Start_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[1, 'Finish_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=5)
            setup_and_teardown.at[1, r'Finish_Date_Planned\Actual'] = 'P'

            assert ct.create_tasks_for_engineering_activities_finish_dates(
                setup_and_teardown, False) == description
Beispiel #6
0
 def test_create_task_for_final_engineering_with_draft_schedules(
         self, setup_and_teardown):
     description = 'Check with Engineering on when a schedule will be finalized'
     setup_and_teardown.at[0, 'PROJECTSTATUS'] = 'Released'
     setup_and_teardown.at[0, 'Region_Name'] = 'METRO WEST'
     setup_and_teardown.at[0, 'Child'] = 'Construction Summary'
     setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
         "today").date()
     assert ct.create_task_for_final_engineering_with_draft_schedules(
         setup_and_teardown, False) == description
Beispiel #7
0
        def test_Create_tasks_no_active_TOA_inside_Waterfall(
                self, setup_and_teardown):
            description = 'No Active TOA for project'

            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Grandchild'] = 'Waterfall Start'
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())

            assert ct.create_tasks_toa_no_active(setup_and_teardown,
                                                 False) == description
Beispiel #8
0
        def test_Create_task_for_Relay_Settings_Finish_date(
                self, setup_and_teardown):
            description = 'Check with Relay Setter on when settings are going to be issued'

            setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=10)
            setup_and_teardown.at[0, r'Start_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=5)
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'P'

            assert ct.create_task_for_relay_settings(setup_and_teardown,
                                                     False) == description
Beispiel #9
0
        def test_create_tasks_for_construncction_task_request_approval(
                self, setup_and_teardown):
            description = 'Ask Engineering for update on Construction Task Request Approval'

            setup_and_teardown.at[
                0, 'Grandchild'] = 'Construction Task Request Approval'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=5)
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'

            assert ct.create_tasks_for_construncction_task_request_approval(
                setup_and_teardown, False) == description
Beispiel #10
0
        def test_create_tasks_for_engineering_activities_start_dates_ED(
                self, setup_and_teardown):
            description = 'Check with Engineering on if Electrical Designs were started'

            setup_and_teardown.at[0, 'Grandchild'] = 'Electrical Design'
            setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=5)
            setup_and_teardown.at[0, r'Start_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                "today").date() + pd.DateOffset(days=5)
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'
            assert ct.create_tasks_for_engineering_activities_start_dates(
                setup_and_teardown, False) == description
Beispiel #11
0
        def test_create_tasks_for_engineering_activities_finish_dates_FD(
                self, setup_and_teardown):
            description = 'Check with Engineering on if Foundation Designs were issued'

            setup_and_teardown.at[0, 'Grandchild'] = 'Foundation Design'
            setup_and_teardown.at[0, 'Start_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=10)
            setup_and_teardown.at[0, r'Start_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                "today").date() - pd.DateOffset(days=5)
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'P'

            assert ct.create_tasks_for_engineering_activities_finish_dates(
                setup_and_teardown, False) == description
Beispiel #12
0
        def test_Create_tasks_no_active_TOA_inside_Waterfall_neg(
                self, setup_and_teardown):

            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Grandchild'] = 'Waterfall Start'
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Grandchild'] = 'No TOA Request Needed'
            setup_and_teardown.at[1, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[1, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())
            assert ct.create_tasks_toa_no_active(setup_and_teardown,
                                                 False) == None
Beispiel #13
0
        def test_create_tasks_line_activities_conflict(self,
                                                       setup_and_teardown):
            description = 'TE date conflicts with construction/distict summary'
            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[
                0, 'Grandchild'] = 'Complete Design Books Issued'
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=-1))

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Parent'] = 'Construction Summary'
            setup_and_teardown.at[1, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())

            assert ct.create_tasks_line_activities_conflict(
                setup_and_teardown, False) == description
Beispiel #14
0
        def test_create_tasks_station_activities_conflict_8(
                self, setup_and_teardown):
            description = 'TE date conflicts with construction/distict summary'
            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Grandchild'] = 'Grading Design'
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=1))

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Grandchild'] = 'Grading'
            setup_and_teardown.at[1, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())

            assert ct.create_tasks_station_activities_conflict(
                setup_and_teardown,
                False) == description + " " + 'Grading Design'
Beispiel #15
0
        def test_create_tasks_line_design_finish_after_construction_ready_date(
                self, setup_and_teardown):
            description = None
            # setup_and_teardown['COMMENTS'] = setup_and_teardown['COMMENTS'].astype(str)
            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[
                0, 'Grandchild'] = 'Complete Design Books Issued'
            setup_and_teardown.at[0, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=1))
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[0,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Schedule_Function'] = 'Construction'

            assert ct.create_tasks_line_design_finish_after_construction_ready_date(
                setup_and_teardown, False) == description
Beispiel #16
0
        def test_create_tasks_station_activities_conflict_4(
                self, setup_and_teardown):
            description = None
            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Grandchild'] = 'Grading Design'
            setup_and_teardown.at[0, 'Program_Manager'] = 'Michael Howard'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=-1))

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Grandchild'] = 'Grading Job Planning'
            setup_and_teardown.at[1, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())

            setup_and_teardown.at[2, 'PETE_ID'] = 1
            setup_and_teardown.at[2, 'Grandchild'] = 'Grading'
            setup_and_teardown.at[2, 'Start_Date'] = pd.to_datetime(
                pd.to_datetime("today").date())
            setup_and_teardown.at[2, r'Finish_Date_Planned\Actual'] = 'A'

            assert ct.create_tasks_station_activities_conflict(
                setup_and_teardown, False) == description
Beispiel #17
0
def main():
    # TODO Create Docstring
    file_yaml = read_yaml('files.yaml', './configs')
    project_data_filename = file_yaml['Project_Data_Spreadsheet']['filename']

    # project_data_filename='All Project Data Report Metro West or Mike.xlsx'
    schedules_filename = file_yaml['Schedules_Spreadsheet']['filename']
    budget_item_filename = file_yaml['Budget_Item_Spreadsheet']['filename']
    relay_setters_filename = file_yaml['Relay_Setters_Spreadsheet']['filename']
    material_data_filename = file_yaml['Material_Data_Spreadsheet']['filename']

    myprojectbudgetitmes = [
        '00003212', '00003201', '00003203', '00003206', '00003226'
    ]
    """ Main entry point of the app """
    change_working_path('./Data')
    try:
        project_data_df = excel_to_pandas(project_data_filename, True)
    except:
        logger_obj.error('Can not find Project Data file')
        raise

    try:
        project_schedules_df = excel_to_pandas(schedules_filename, True)
    except:
        logger_obj.error('Can not find Schedule Data file')
        raise

    # try:
    #    budget_item_df = excel_to_pandas(budget_item_filename)
    # except:


#   logger_obj.error('Can not find Budget Item Data file')

    try:
        relay_setters_df = excel_to_pandas(relay_setters_filename)
    except:
        logger_obj.error('Can not find Relay Setters Data file')

    project_schedules_all_data_df = pd.merge(project_schedules_df,
                                             project_data_df,
                                             on='PETE_ID',
                                             sort=False,
                                             how='outer')

    # myprojectsdf.to_csv('myprojects.csv')
    project_schedules_all_data_df.to_csv('scheduledf.csv')

    # res = Popen('tasks=$(task tag=PMH _ids) && task delete $tasks', shell=True, stdin=PIPE)
    # res.stdin.write(b'a\n')
    # res.stdin.flush()
    # res.stdin.close()
    # res = Popen('task sync', shell=True, stdin=PIPE)
    # res.wait()
    # res.stdin.close()

    # Return the day of the week as an integer, where Monday is 0 and Sunday is 6
    # if dt.date.today().weekday() == 3:
    #     res = Popen('tasks=$(task tag=PMH_E _ids) && task delete $tasks', shell=True, stdin=PIPE)
    #     res.stdin.write(b'a\n')
    #     res.stdin.flush()
    #     res.wait()
    #     res.stdin.close()
    #     res = Popen('task sync', shell=True, stdin=PIPE)
    #     res.stdin.flush()
    #     res.wait()
    #     res.stdin.close()

    # Create_tasks_for_Precon_meetings(project_schedules_all_data_df)
    ct.create_task_for_final_engineering_with_draft_schedules(
        project_schedules_all_data_df)
    ct.create_task_for_released_projects_missing_construnction_ready_date(
        project_schedules_all_data_df)
    ct.create_task_for_relay_settings(project_schedules_all_data_df)
    ct.create_tasks_for_engineering_activities_start_dates(
        project_schedules_all_data_df)
    ct.create_tasks_for_engineering_activities_finish_dates(
        project_schedules_all_data_df)
    ct.create_task_for_relay_settings(project_schedules_all_data_df)

    ct.create_task_for_eisd_before_energiztion(project_schedules_all_data_df)
    ct.create_task_for_add_wa_to_schedule(project_schedules_all_data_df,
                                          myprojectbudgetitmes)
    ct.create_tasks_for_waterfalls(project_schedules_all_data_df)
    ct.create_task_for_missing_tiers(project_schedules_all_data_df)
    ct.create_tasks_toa_outside_waterfalls(project_schedules_all_data_df)
    ct.create_tasks_toa_no_active(project_schedules_all_data_df)
    ct.create_tasks_construnction_summary_before_construnction_ready(
        project_schedules_all_data_df)
    ct.create_tasks_line_design_finish_after_construction_ready_date(
        project_schedules_all_data_df)
    ct.create_tasks_station_activities_conflict(project_schedules_all_data_df)

    res = Popen('task sync', shell=True, stdin=PIPE)
    res.wait()
    res.stdin.close()

    if dt.date.today().weekday() == 4:
        Reports.Genrate_Relay_Settings_Report(project_schedules_all_data_df,
                                              relay_setters_df)
        Reports.Genrate_Electrical_Prints_Report(project_schedules_all_data_df)
        Reports.Genrate_Physical_Prints_Report(project_schedules_all_data_df)

    if dt.date.today().weekday() == 4:
        try:
            material_data_df = excel_to_pandas(material_data_filename)
        except:
            logger_obj.error('Can not find Project Data file')
            raise
        Reports.Genrate_Matrial_Report(material_data_df,
                                       project_schedules_all_data_df)
Beispiel #18
0
        def test_create_tasks_station_design_finish_after_construction_ready_date(
                self, setup_and_teardown):
            description = 'Design Finish after Construction Ready Date'
            # setup_and_teardown['COMMENTS'] = setup_and_teardown['COMMENTS'].astype(str)

            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Grandchild'] = 'Electrical Design'
            setup_and_teardown.at[0, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=1))
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[0,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Grandchild'] = 'Electrical Design'
            setup_and_teardown.at[1, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[1, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() - pd.DateOffset(days=1))
            setup_and_teardown.at[1, r'Finish_Date_Planned\Actual'] = 'A'
            setup_and_teardown.at[1,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            assert ct.create_tasks_station_design_finish_after_construction_ready_date(
                setup_and_teardown, False) == None

            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Grandchild'] = 'Electrical Design'
            setup_and_teardown.at[0, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=1))
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[0,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Grandchild'] = 'Electrical Design'
            setup_and_teardown.at[1, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[1, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() - pd.DateOffset(days=1))
            setup_and_teardown.at[1, r'Finish_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[1,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            assert ct.create_tasks_station_design_finish_after_construction_ready_date(
                setup_and_teardown, False) == description

            setup_and_teardown.at[0, 'PETE_ID'] = 1
            setup_and_teardown.at[0, 'Grandchild'] = 'Physical Design'
            setup_and_teardown.at[0, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[0, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() + pd.DateOffset(days=1))
            setup_and_teardown.at[0, r'Finish_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[0,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            setup_and_teardown.at[1, 'PETE_ID'] = 1
            setup_and_teardown.at[1, 'Grandchild'] = 'Physical Design'
            setup_and_teardown.at[1, 'Region_Name'] = 'METRO WEST'
            setup_and_teardown.at[1, 'Finish_Date'] = pd.to_datetime(
                pd.to_datetime("today").date() - pd.DateOffset(days=1))
            setup_and_teardown.at[1, r'Finish_Date_Planned\Actual'] = 'P'
            setup_and_teardown.at[1,
                                  'PLANNEDCONSTRUCTIONREADY'] = pd.to_datetime(
                                      pd.to_datetime("today").date())

            assert ct.create_tasks_station_design_finish_after_construction_ready_date(
                setup_and_teardown, False) == description