R/update_project_roadmap.R

Defines functions update_project_roadmap

Documented in update_project_roadmap

#' Updates PROJECT_ROADMAP with changes provided by PROJECT_ROADMAP_ objects
#' @importFrom somersaulteR create_new_pk
#' @importFrom somersaulteR mutate_new_cols_if_not_exist_by_robj_name
#' @importFrom dplyr mutate
#' @importFrom somersaulteR call_mr_clean
#' @importFrom dplyr bind_rows
#' @importFrom somersaulteR filter_for_vector
#' @importFrom somersaulteR nrow_diff
#' @export
#'
update_project_roadmap <-
        function() {
                PROJECT_ROADMAP_ID <- get("PROJECT_ROADMAP_ID", envir = globalenv())

                if (PROJECT_ROADMAP_ID == "") {
                        PROJECT_ROADMAP_ID <- somersaulteR::create_new_pk(PROJECT_ROADMAP$HISTORY, PROJECT_ROADMAP_ID)
                }

                df_skeleton <- create_roadmap_dataframe()
                df_skeleton <- somersaulteR::mutate_new_cols_if_not_exist_by_robj_name(df_skeleton,"^PROJECT_ROADMAP_")

                robj_names <- colnames(df_skeleton)

                if (!(PROJECT_ROADMAP_ID %in% PROJECT_ROADMAP$CURRENT$PROJECT_ROADMAP_ID)) {
                        for (i in 1:length(robj_names)) {
                                robj_name <- robj_names[i]
                                if (exists(robj_name, envir = globalenv())) {
                                        column_name <- robj_name
                                        df_skeleton[1, column_name] <- get(robj_name)
                                }
                        }

                        new_roadmap_df <- df_skeleton %>%
                                                dplyr::mutate(PROJECT_ROADMAP_TIMESTAMP = mirroR::get_timestamp()) %>%
                                                somersaulteR::call_mr_clean()

                        PROJECT_ROADMAP$HISTORY <<- dplyr::bind_rows(PROJECT_ROADMAP$HISTORY %>% somersaulteR::call_mr_clean(), new_roadmap_df)
                        suppressWarnings(rm(list = robj_names, envir = globalenv()))
                        refresh_project_roadmap()
                } else {
                        current_df <- somersaulteR::filter_for_vector(PROJECT_ROADMAP$CURRENT, PROJECT_ROADMAP_ID, inclusion_vector = PROJECT_ROADMAP_ID)
                        current_df <- somersaulteR::mutate_new_cols_if_not_exist_by_robj_name(current_df,"^PROJECT_ROADMAP_")

                        new_df   <- current_df %>%
                                        as.data.frame()

                        for (i in 1:length(robj_names)) {
                                robj_name <- robj_names[i]
                                if (exists(robj_name, envir = globalenv())) {
                                        column_name <- robj_name
                                        robj_data   <- get(robj_name)
                                        if (robj_data != "") {
                                                new_df[1, column_name] <- robj_data
                                        }
                                }
                        }

                        if (somersaulteR::nrow_diff(current_df %>% select(-PROJECT_ROADMAP_TIMESTAMP),
                                                    new_df %>% select(-PROJECT_ROADMAP_TIMESTAMP)) > 0) {
                                new_roadmap_df <-
                                        new_df %>%
                                        dplyr::mutate(PROJECT_ROADMAP_TIMESTAMP = mirroR::get_timestamp()) %>%
                                        somersaulteR::call_mr_clean()

                                PROJECT_ROADMAP$HISTORY <<- dplyr::bind_rows(PROJECT_ROADMAP$HISTORY %>% somersaulteR::call_mr_clean(), new_roadmap_df)
                                suppressWarnings(rm(list = robj_names, envir = globalenv()))
                                refresh_project_roadmap()
                        }
                }
        }
patelm9/projectRoadTrip documentation built on Dec. 3, 2019, 11:14 p.m.