#-------------------------------------------------------- # FISCAL YEAR CONFIGURATION #-------------------------------------------------------- # 1. Calculate the actual Current and Previous FY strings based on the system date # (Fiscal Year starts October 1st) CALC_YYYY := $(shell date +%Y) CALC_MM := $(shell date +%m) ifeq ($(shell [ $(CALC_MM) -ge 10 ] && echo 1), 1) # If October or later, CURRENT is next year, PREVIOUS is this year ACTUAL_CURRENT_FY := FY$(shell echo $$(($(CALC_YYYY) + 1)) | cut -c 3-4) ACTUAL_PREVIOUS_FY := FY$(shell echo $(CALC_YYYY) | cut -c 3-4) else # If Jan-Sept, CURRENT is this year, PREVIOUS is last year ACTUAL_CURRENT_FY := FY$(shell echo $(CALC_YYYY) | cut -c 3-4) ACTUAL_PREVIOUS_FY := FY$(shell echo $$(($(CALC_YYYY) - 1)) | cut -c 3-4) endif # 2. Set the requested year (Default to CURRENT, can be overridden: make FISCAL_YEAR=FY24) FISCAL_YEAR ?= CURRENT # 3. Resolve the "Labeling Year" (For folders and titles) RESOLVED_FY := $(FISCAL_YEAR) ifeq ($(FISCAL_YEAR), CURRENT) RESOLVED_FY := $(ACTUAL_CURRENT_FY) endif ifeq ($(FISCAL_YEAR), PREVIOUS) RESOLVED_FY := $(ACTUAL_PREVIOUS_FY) endif # 4. Data Source Selection (Aliases stay aliases for live-updating links) URL_KEY := $(FISCAL_YEAR) #-------------------------------------------------------- # EXPORT MODULE URLS (Modular Definition) #-------------------------------------------------------- # LIVE UPDATING LINKS (Neoserra modules set to "Fiscal Year: Current" or "Previous") # These will always point to the rolling data regardless of the actual year. CURRENT_TRAININGS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=189&appkey=e4c003ea-2216-48ae-ba76-2ebdef30848b CURRENT_NBS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=187&appkey=1ebb99d3-551c-44f1-803f-f8cd09c8286f CURRENT_CAPITAL_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=188&appkey=1a37972c-8757-4447-b301-59e7ca65f7ea CURRENT_CLIENT_LIST_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=186&appkey=f0e90ceb-8063-44c2-8cc9-4949ca89763a PREVIOUS_TRAININGS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=181&appkey=bc03174a-f36c-45a6-a933-0f6e28062e9c PREVIOUS_NBS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=182&appkey=9b47f8c2-1ad5-4499-812c-742eddf149b9 PREVIOUS_CAPITAL_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=183&appkey=08515f8b-8d52-4eb5-a85c-5c3b49261b4b PREVIOUS_CLIENT_LIST_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=184&appkey=72de7830-d65f-4ce3-9b0e-ab872d1bd41e # ARCHIVED YEAR LINKS (Static keys for specific years) # FY22 FY22_TRAININGS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=195&appkey=44d5cb65-dc5a-4f9a-b5ed-6c8fe4209a59 FY22_NBS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=198&appkey=857a32f8-efbe-4953-b4b6-0ed6809f286d FY22_CAPITAL_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=201&appkey=71bb27aa-4377-4322-8660-ae9b34b4d376 FY22_CLIENT_LIST_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=192&appkey=75045c21-fb95-46e5-8ace-a3e3d67fa15e # FY23 FY23_TRAININGS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=196&appkey=f372244a-7a1b-4627-b951-2241140d0e00 FY23_NBS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=199&appkey=040dab27-3886-4f8a-8d37-b75cd31c5925 FY23_CAPITAL_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=202&appkey=16b9db95-12c8-48bc-ab8c-3dbf09803eb6 FY23_CLIENT_LIST_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=193&appkey=bf10c884-7bdc-4d4e-ab6c-9b1752581bf5 # FY24 FY24_TRAININGS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=197&appkey=46e8bba5-4d94-460e-9a1b-e8435cf9f1d5 FY24_NBS_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=200&appkey=958b9064-2e18-4643-82b3-a821922f7037 FY24_CAPITAL_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=203&appkey=fbf5319c-c564-441d-8482-f1bd380671fb FY24_CLIENT_LIST_URL := https://pasbdc.neoserra.com/api/export?userid=6694&appid=194&appkey=5e7c1d91-2292-4758-87b9-d4dd986e30e9 # 5. Computed Variable Selection: Fetch the URLs based on the URL_KEY TRAININGS_EXPORT_URL := $($(URL_KEY)_TRAININGS_URL) NBS_EXPORT_URL := $($(URL_KEY)_NBS_URL) CAPITAL_EXPORT_URL := $($(URL_KEY)_CAPITAL_URL) CLIENT_LIST_EXPORT_URL := $($(URL_KEY)_CLIENT_LIST_URL) USE_EXPORT_MODULE ?= true #-------------------------------------------------------- # CORE SETTINGS #-------------------------------------------------------- # The home folder for this year's report REPORT_ROOT_FOLDER := reports/$(RESOLVED_FY) # This list defines all of the OUTPUT center names that will be seen in the final report. Some of the scripts need # a list of center names to expect so that it can find the files on the filesystem # Here an underscore represents a space. We have to do this as make's list syntax sees a space to separate list items CENTERS_LIST := Z-Lead_Office \ Wilkes \ Shippensburg \ Widener \ Penn_State \ Bucknell \ St._Francis \ St._Vincent \ Gannon \ Clarion \ Temple \ Scranton \ Lehigh \ Duquesne \ Pittsburgh \ Kutztown # Center Flags to be passed into scripts # (loop over each center, replace _ with " ", and format as -c
CENTER_FLAGS:=$(foreach x,$(CENTERS_LIST),-c "$(subst _, ,$(x))") # The paths to each input CSV file required to produce the report # Set to . if you want it to look in the same directory as the make file CSV_FOLDER:=csv_files # Dynamic CSV paths based on RESOLVED_FY TRAININGS_CSV:=$(CSV_FOLDER)/trainings_raw_$(RESOLVED_FY).csv CLIENT_LIST_CSV:=$(CSV_FOLDER)/client_list_raw_$(RESOLVED_FY).csv NBS_MILESTONE_CSV:=$(CSV_FOLDER)/nbs_milestones_raw_$(RESOLVED_FY).csv FUNDING_MILESTONE_CSV:=$(CSV_FOLDER)/funding_milestones_raw_$(RESOLVED_FY).csv SIGNUP_TO_START_CSV:=$(CSV_FOLDER)/days_client_signup_to_start_$(RESOLVED_FY).csv SIGNUP_TO_COUNSELLING_CSV:=$(CSV_FOLDER)/days_client_signup_to_counselling_$(RESOLVED_FY).csv START_TO_COUNSELLING_CSV:=$(CSV_FOLDER)/days_client_start_to_counselling_$(RESOLVED_FY).csv INITIAL_TO_FOLLOWUP_CSV:=$(CSV_FOLDER)/days_initial_to_followup_$(RESOLVED_FY).csv TRAINING_TO_COUNSELLING_CSV:=$(CSV_FOLDER)/days_training_to_counselling_$(RESOLVED_FY).csv SATISFACTION_SURVEY_CSV:=$(CSV_FOLDER)/satisfaction_survey_raw_$(RESOLVED_FY).csv ifeq ($(USE_EXPORT_MODULE), true) TRAINING_SCRIPT_ARGS := --exportmoduleurl "$(TRAININGS_EXPORT_URL)" NBS_SCRIPT_ARGS := --exportmoduleurl "$(NBS_EXPORT_URL)" CAPITAL_SCRIPT_ARGS := --exportmoduleurl "$(CAPITAL_EXPORT_URL)" CLIENT_SCRIPT_ARGS := --exportmoduleurl "$(CLIENT_LIST_EXPORT_URL)" # Arguments for the make_milestone_analysis.py script which uses different flag names SECTION_3_MILESTONES_ARGS := --fundingexportmodule "$(CAPITAL_EXPORT_URL)" --nbsexportmodule "$(NBS_EXPORT_URL)" # When using API, don't require local CSV files to exist TRAININGS_CSV_DEP := CLIENT_LIST_CSV_DEP := NBS_MILESTONE_CSV_DEP := FUNDING_MILESTONE_CSV_DEP := SIGNUP_TO_START_CSV_DEP := SIGNUP_TO_COUNSELLING_CSV_DEP := START_TO_COUNSELLING_CSV_DEP := INITIAL_TO_FOLLOWUP_CSV_DEP := TRAINING_TO_COUNSELLING_CSV_DEP := SATISFACTION_SURVEY_CSV_DEP := else TRAINING_SCRIPT_ARGS := --inputcsv $(TRAININGS_CSV) NBS_SCRIPT_ARGS := --inputcsv $(NBS_MILESTONE_CSV) CAPITAL_SCRIPT_ARGS := --inputcsv $(FUNDING_MILESTONE_CSV) CLIENT_SCRIPT_ARGS := --inputcsv $(CLIENT_LIST_CSV) # Arguments for the make_milestone_analysis.py script which uses different flag names SECTION_3_MILESTONES_ARGS := --fundingcsv $(FUNDING_MILESTONE_CSV) --nbscsv $(NBS_MILESTONE_CSV) # When using local files, they MUST exist TRAININGS_CSV_DEP := $(TRAININGS_CSV) CLIENT_LIST_CSV_DEP := $(CLIENT_LIST_CSV) NBS_MILESTONE_CSV_DEP := $(NBS_MILESTONE_CSV) FUNDING_MILESTONE_CSV_DEP := $(FUNDING_MILESTONE_CSV) SIGNUP_TO_START_CSV_DEP := $(SIGNUP_TO_START_CSV) SIGNUP_TO_COUNSELLING_CSV_DEP := $(SIGNUP_TO_COUNSELLING_CSV) START_TO_COUNSELLING_CSV_DEP := $(START_TO_COUNSELLING_CSV) INITIAL_TO_FOLLOWUP_CSV_DEP := $(INITIAL_TO_FOLLOWUP_CSV) TRAINING_TO_COUNSELLING_CSV_DEP := $(TRAINING_TO_COUNSELLING_CSV) SATISFACTION_SURVEY_CSV_DEP := $(SATISFACTION_SURVEY_CSV) endif #-------------------------------------------------------- # SECTION 1 VARIABLES #-------------------------------------------------------- # What to call each subfolder containing the images for a single report # They will each be created underneath the root folder SECTION_1_COUNSELLING_INTERVAL_FOLDER:=section_1_counselling_interval_graphs SECTION_1_MILESTONE_FOLDER:=section_1_milestone_analysis_graphs SECTION_1_NAICS_FOLDER:=section_1_naics_coverage_graphs SECTION_1_SATISFACTION_FOLDER:=section_1_satisfaction_ananlysis_graphs SECTION_1_TRAININGS_FOLDER:=section_1_trainings_analysis_graphs # What to call each word file within the report # These are paths so they both say what folder to place the file in and what to call # the file SECTION_1_TRAININGS_WORD_FILE_NAME:=$(REPORT_ROOT_FOLDER)/section_1_trainings_analysis_$(RESOLVED_FY).docx SECTION_1_COUNSELLING_INTERVAL_WORD_FILE_NAME:=$(REPORT_ROOT_FOLDER)/section_1_counselling_interval_analysis_$(RESOLVED_FY).docx SECTION_1_MILESTONE_WORD_FILE_NAME:=$(REPORT_ROOT_FOLDER)/section_1_milestone_analysis_$(RESOLVED_FY).docx SECTION_1_SATISFACTION_SURVEY_WORD_FILE_NAME:=$(REPORT_ROOT_FOLDER)/section_1_satisfaction_analysis_$(RESOLVED_FY).docx SECTION_1_NAICS_WORD_FILE_NAME:=$(REPORT_ROOT_FOLDER)/section_1_naics_coverage_$(RESOLVED_FY).docx #-------------------------------------------------------- # SECTION 3 VARIABLES #-------------------------------------------------------- # What to call each subfolder containing the images for a single report # They will each be created underneath the root folder SECTION_3_TRAININGS_TOPICS_FOLDER:=section_3_trainings_topic_analysis_graphs SECTION_3_TRAININGS_FOLDER:=section_3_trainings_analysis_graphs SECTION_3_MILESTONES_GRAPH_FOLDER:=section_3_milestone_graphs # What to call each word file within the report # These are paths so they both say what folder to place the file in and what to call # the file SECTION_3_TRAININGS_TOPICS_WORD_FILE_NAME:=$(REPORT_ROOT_FOLDER)/section_3_trainings_topics_analysis_$(RESOLVED_FY).docx SECTION_3_TRAININGS_WORD_FOLDER:=$(REPORT_ROOT_FOLDER)/section_3_trainings_analysis_word SECTION_3_MILESTONES_WORD_FOLDER:=$(REPORT_ROOT_FOLDER)/section_3_milestone_word_docs # Set the appropriate location to the python executable based on OS ifeq ($(OS),Windows_NT) VENV_PYTHON:=.venv/Scripts/python.exe RM_CMD:=rmdir /s /q else VENV_PYTHON:=.venv/bin/python3 RM_CMD:=rm -rf endif # Build the whole report all: $(SECTION_1_TRAININGS_WORD_FILE_NAME) \ $(SECTION_1_COUNSELLING_INTERVAL_WORD_FILE_NAME) \ $(SECTION_1_MILESTONE_WORD_FILE_NAME) \ $(SECTION_1_SATISFACTION_SURVEY_WORD_FILE_NAME) \ $(SECTION_1_NAICS_WORD_FILE_NAME) \ $(SECTION_3_TRAININGS_TOPICS_WORD_FILE_NAME) \ $(SECTION_3_TRAININGS_WORD_FOLDER) \ $(SECTION_3_MILESTONES_WORD_FOLDER) # Modular Year Targets fy22: $(MAKE) FISCAL_YEAR=FY22 fy23: $(MAKE) FISCAL_YEAR=FY23 fy24: $(MAKE) FISCAL_YEAR=FY24 current: $(MAKE) FISCAL_YEAR=CURRENT previous: $(MAKE) FISCAL_YEAR=PREVIOUS # Utility targets clean: $(RM_CMD) $(REPORT_ROOT_FOLDER) # Count how many lines of code are in the project lines: cat \ section_1_datasets_module/section_1_datasets_module/*.py \ section_1_graph_export_module/*.py \ section_1_graph_library_module/section_1_graph_library_module/*.py \ section_1_word_export_scripts/*.py \ section_1_word_library_module/section_1_word_library_module/*.py \ section_3_graph_export_module/*.py \ section_3_graph_library_module/section_3_graph_library_module/*.py \ section_3_word_export_scripts/*.py \ section_3_word_library_module/section_3_word_library_module/*.py \ milestone_attribution_dataset_module/milestone_attribution_dataset_module/*.py \ milestone_attribution_graph_export_module/milestone_attribution_graph_export_module/*.py \ milestone_attribution_graph_library_module/milestone_attribution_graph_library_module/*.py \ milestone_attribution_word_export_module/*.py \ shared_tools_module/shared_tools_module/*.py \ libs/pasbdc_data_cleaning/pasbdc_data_cleaning/*.py \ libs/word_library/pasbdc_word_library/*.py \ makefile \ | wc -l \ .PHONY: all lines clean fy22 fy23 fy24 current previous $(REPORT_ROOT_FOLDER): -mkdir -p $(REPORT_ROOT_FOLDER) requirements.txt: echo "Requirements target" #-------------------------------------------------------- # SECTION 1 NETWORK WIDE REPORT #-------------------------------------------------------- #-------------------------------------------------------- # Counselling Interval Graph Generation and word document #-------------------------------------------------------- $(REPORT_ROOT_FOLDER)/$(SECTION_1_COUNSELLING_INTERVAL_FOLDER): requirements.txt \ $(SIGNUP_TO_START_CSV_DEP) \ $(SIGNUP_TO_COUNSELLING_CSV_DEP) \ $(START_TO_COUNSELLING_CSV_DEP) \ $(INITIAL_TO_FOLLOWUP_CSV_DEP) \ $(TRAINING_TO_COUNSELLING_CSV_DEP) | $(REPORT_ROOT_FOLDER) ifeq ($(USE_EXPORT_MODULE), false) $(VENV_PYTHON) section_1_graph_export_module/counselling_interval_script.py \ --signuptostartcsv $(SIGNUP_TO_START_CSV) \ --signuptocounsellingcsv $(SIGNUP_TO_COUNSELLING_CSV) \ --starttocounsellingcsv $(START_TO_COUNSELLING_CSV) \ --initialtofollowupcsv $(INITIAL_TO_FOLLOWUP_CSV) \ --trainingtocounsellingcsv $(TRAINING_TO_COUNSELLING_CSV) \ --fiscalyear $(RESOLVED_FY) --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_1_COUNSELLING_INTERVAL_FOLDER) else @echo "Skipping Counselling Interval graphs for $(RESOLVED_FY) (USE_EXPORT_MODULE is true)" endif $(SECTION_1_COUNSELLING_INTERVAL_WORD_FILE_NAME): $(REPORT_ROOT_FOLDER)/$(SECTION_1_COUNSELLING_INTERVAL_FOLDER) ifeq ($(USE_EXPORT_MODULE), false) $(VENV_PYTHON) section_1_word_export_scripts/counselling_interval_analysis.py \ --images $(REPORT_ROOT_FOLDER)/$(SECTION_1_COUNSELLING_INTERVAL_FOLDER) \ --output $(SECTION_1_COUNSELLING_INTERVAL_WORD_FILE_NAME) else @echo "Skipping Counselling Interval Word doc for $(RESOLVED_FY) (USE_EXPORT_MODULE is true)" endif #-------------------------------------------------------- # Trainings Analysis Graph and Word Generation #-------------------------------------------------------- $(REPORT_ROOT_FOLDER)/$(SECTION_1_TRAININGS_FOLDER): requirements.txt $(TRAININGS_CSV_DEP) | $(REPORT_ROOT_FOLDER) $(VENV_PYTHON) section_1_graph_export_module/trainings_analysis_script.py \ --fiscalyear $(RESOLVED_FY) \ --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_1_TRAININGS_FOLDER) \ $(TRAINING_SCRIPT_ARGS) $(SECTION_1_TRAININGS_WORD_FILE_NAME): $(REPORT_ROOT_FOLDER)/$(SECTION_1_TRAININGS_FOLDER) $(VENV_PYTHON) section_1_word_export_scripts/generate_trainings_analysis_word.py \ --images $(REPORT_ROOT_FOLDER)/$(SECTION_1_TRAININGS_FOLDER) \ --output $(SECTION_1_TRAININGS_WORD_FILE_NAME) \ #-------------------------------------------------------- # Milestone Report Graph Generation #-------------------------------------------------------- $(REPORT_ROOT_FOLDER)/$(SECTION_1_MILESTONE_FOLDER): requirements.txt $(NBS_MILESTONE_CSV_DEP) $(FUNDING_MILESTONE_CSV_DEP) | $(REPORT_ROOT_FOLDER) $(VENV_PYTHON) section_1_graph_export_module/nbs_analysis_script.py \ --fiscalyear $(RESOLVED_FY) \ --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_1_MILESTONE_FOLDER) \ $(NBS_SCRIPT_ARGS) $(VENV_PYTHON) section_1_graph_export_module/funding_analysis_script.py \ --fiscalyear $(RESOLVED_FY) \ --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_1_MILESTONE_FOLDER) \ $(CAPITAL_SCRIPT_ARGS) $(SECTION_1_MILESTONE_WORD_FILE_NAME): $(REPORT_ROOT_FOLDER)/$(SECTION_1_MILESTONE_FOLDER) $(VENV_PYTHON) section_1_word_export_scripts/make_nbs_funding_analysis.py\ --images $(REPORT_ROOT_FOLDER)/$(SECTION_1_MILESTONE_FOLDER) \ --output $(SECTION_1_MILESTONE_WORD_FILE_NAME) #-------------------------------------------------------- # Satisfaction survey Graph and Word Generation #-------------------------------------------------------- $(REPORT_ROOT_FOLDER)/$(SECTION_1_SATISFACTION_FOLDER): requirements.txt $(SATISFACTION_SURVEY_CSV_DEP) $(CLIENT_LIST_CSV_DEP) | $(REPORT_ROOT_FOLDER) ifeq ($(USE_EXPORT_MODULE), false) $(VENV_PYTHON) section_1_graph_export_module/satisfaction_survey_analysis_script.py \ --inputcsv $(SATISFACTION_SURVEY_CSV) \ --clientlistcsv $(CLIENT_LIST_CSV) \ --fiscalyear $(RESOLVED_FY) \ --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_1_SATISFACTION_FOLDER) else @echo "Skipping Satisfaction Survey graphs for $(RESOLVED_FY) (USE_EXPORT_MODULE is true)" endif $(SECTION_1_SATISFACTION_SURVEY_WORD_FILE_NAME): $(REPORT_ROOT_FOLDER)/$(SECTION_1_SATISFACTION_FOLDER) ifeq ($(USE_EXPORT_MODULE), false) $(VENV_PYTHON) section_1_word_export_scripts/satisfaction_survey_word.py \ --images $(REPORT_ROOT_FOLDER)/$(SECTION_1_SATISFACTION_FOLDER) \ --output $(SECTION_1_SATISFACTION_SURVEY_WORD_FILE_NAME) else @echo "Skipping Satisfaction Survey Word doc for $(RESOLVED_FY) (USE_EXPORT_MODULE is true)" endif #-------------------------------------------------------- # NAICS coverage report graph and word generation #-------------------------------------------------------- $(REPORT_ROOT_FOLDER)/$(SECTION_1_NAICS_FOLDER): requirements.txt $(CLIENT_LIST_CSV_DEP) | $(REPORT_ROOT_FOLDER) $(VENV_PYTHON) section_1_graph_export_module/naics_census_analysis_script.py \ --fiscalyear $(RESOLVED_FY) \ --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_1_NAICS_FOLDER) \ $(CLIENT_SCRIPT_ARGS) $(SECTION_1_NAICS_WORD_FILE_NAME): $(REPORT_ROOT_FOLDER)/$(SECTION_1_NAICS_FOLDER) $(VENV_PYTHON) section_1_word_export_scripts/generate_naics_word.py \ --images $(REPORT_ROOT_FOLDER)/$(SECTION_1_NAICS_FOLDER) \ --output $(SECTION_1_NAICS_WORD_FILE_NAME) \ #-------------------------------------------------------- # SECTION 3 CENTER SPECIFIC REPORT #-------------------------------------------------------- #-------------------------------------------------------- # Center Specific Trainings Primary Topic Report Graph and Word Generation #-------------------------------------------------------- $(REPORT_ROOT_FOLDER)/$(SECTION_3_TRAININGS_TOPICS_FOLDER): requirements.txt $(TRAININGS_CSV_DEP) | $(REPORT_ROOT_FOLDER) $(VENV_PYTHON) section_3_graph_export_module/trainings_topic_per_center_script.py \ --fiscalyear $(RESOLVED_FY) \ --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_3_TRAININGS_TOPICS_FOLDER) \ $(TRAINING_SCRIPT_ARGS) $(SECTION_3_TRAININGS_TOPICS_WORD_FILE_NAME): $(REPORT_ROOT_FOLDER)/$(SECTION_3_TRAININGS_TOPICS_FOLDER) $(VENV_PYTHON) section_3_word_export_scripts/generate_center_trainings_topic_analysis_word.py \ --images $(REPORT_ROOT_FOLDER)/$(SECTION_3_TRAININGS_TOPICS_FOLDER) \ --output $(SECTION_3_TRAININGS_TOPICS_WORD_FILE_NAME) \ --fiscalyear $(RESOLVED_FY) \ $(CENTER_FLAGS) #-------------------------------------------------------- # Center Specific Trainings Graph and Word Generation #-------------------------------------------------------- $(REPORT_ROOT_FOLDER)/$(SECTION_3_TRAININGS_FOLDER): requirements.txt $(TRAININGS_CSV_DEP) | $(REPORT_ROOT_FOLDER) $(VENV_PYTHON) section_3_graph_export_module/trainings_analysis_script.py \ --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_3_TRAININGS_FOLDER) \ --fiscalyear $(RESOLVED_FY) \ $(TRAINING_SCRIPT_ARGS) $(SECTION_3_TRAININGS_WORD_FOLDER): $(REPORT_ROOT_FOLDER)/$(SECTION_3_TRAININGS_FOLDER) $(VENV_PYTHON) section_3_word_export_scripts/generate_trainings_analysis_word.py \ --images $(REPORT_ROOT_FOLDER)/$(SECTION_3_TRAININGS_FOLDER) \ --output $(SECTION_3_TRAININGS_WORD_FOLDER) \ --fiscalyear $(RESOLVED_FY) \ $(CENTER_FLAGS) #-------------------------------------------------------- # Center Specific Milestones Report Graph and Word Generation #-------------------------------------------------------- $(REPORT_ROOT_FOLDER)/$(SECTION_3_MILESTONES_GRAPH_FOLDER): requirements.txt $(FUNDING_MILESTONE_CSV_DEP) $(NBS_MILESTONE_CSV_DEP) | $(REPORT_ROOT_FOLDER) $(VENV_PYTHON) milestone_attribution_graph_export_module/milestone_attribution_graph_export_module/make_milestone_analysis.py \ $(SECTION_3_MILESTONES_ARGS) \ --fiscalyear $(RESOLVED_FY) \ --outpath $(REPORT_ROOT_FOLDER)/$(SECTION_3_MILESTONES_GRAPH_FOLDER) $(SECTION_3_MILESTONES_WORD_FOLDER): $(REPORT_ROOT_FOLDER)/$(SECTION_3_MILESTONES_GRAPH_FOLDER) $(VENV_PYTHON) milestone_attribution_word_export_module/generate_milestones_report.py \ --images $(REPORT_ROOT_FOLDER)/$(SECTION_3_MILESTONES_GRAPH_FOLDER) \ --out $(SECTION_3_MILESTONES_WORD_FOLDER)