R/fct_import_emm.R

Defines functions import_emm import_one_table

Documented in import_emm import_one_table

# fonctions d'import des tables emm

#' Importe Tableau 1.V.5.EMM
#' Importe le Tableau 1.V.5.EMM de Ovalide et empile les valeurs.
#' @param file_path Chemin vers le fichier HTML sauvegardé depuis Ovalide
#' @return Une data.frame avec les valeurs empilées
#' @export
import_emm <- function(file_path) {

  # Lit le fichier
  emm_html <- xml2::read_html(x = file_path)

  # Récupérer toutes les tables
  tables_data <- emm_html %>%
    rvest::html_nodes("table[class='table']")

  # Récupérer tous les nombes de table
  tables_names <- emm_html %>%
    rvest::html_nodes("div[class='c m byline']") %>%
    rvest::html_text() %>%
    gsub(pattern = "type=", replacement = "")

  # Boucle d'import de chaque table
  x <- mapply(tables_data, tables_names, FUN = import_one_table, SIMPLIFY = F)



  # Empiler
  x <- bind_rows(x)

  # Ajouter les données de la page
  # Récupérer la date du traitement
  x$date_traitement <-   emm_html %>%
    html_node('.systemtitle') %>%
    html_text() %>%
    stringr::str_extract('\\d{2}/\\d{2}/\\d{4}') %>%
    as.Date.character(format = '%d/%m/%Y')

  # Récupérer le mois de traité
  x$mois_traite <- emm_html %>%
    html_node('.systemtitle4') %>%
    html_text() %>%
    stringr::str_extract('(?<=M)\\d{1,2}') %>%
    as.integer()

  # Récupérer l'année traitée
  x$annee_traite <- emm_html %>%
    html_node('.systemtitle4') %>%
    html_text() %>%
    stringr::str_extract('(?<=e )\\d{4}') %>%
    as.integer()
  x
}

#' Importer une table d'un fichier EMM
#' Fonction d'aide pour [import_emm]
#' @import magrittr
import_one_table <- function(table_node, table_name) {

  df1 <- rvest::html_table(table_node, fill = TRUE)

  # Reformater

  # Les premières lignes ne sont que des éléments d'en-tête
  df1clean <- df1[ 5:nrow(df1),]

  # Le nom des mois est sur la première ligne
  colnames(df1clean) <- df1[1,]
  colnames(df1clean)[1] <- "mois_envoi"

  # Mettre au format long
  dflong <- tidyr::gather(df1clean,
                          key = "mois_sortie",
                          value = "valorisation",
                          2:length(df1))

  # Convert numeric
  # Retirer les blancs
  dflong$valorisation %<>%
    gsub(" ", "", .) %>%
  # Changer les , en .
    gsub(",", ".", .) %>%
  # Convertir en numérique
    as.numeric

  # en faire une tibble
  df <- tibble::as.tibble(dflong)
  df

  # Remplacer les noms des mois par des numéro de mois

  df %<>%
    mutate(mois_envoi = as.integer(match_pair(mois_envoi, .mois_fr)),
           mois_sortie = as.integer(match_pair(mois_sortie, .mois_fr)))
  # firtrer les totaux et NA
  df <- df[complete.cases(df), ]

  # Ajouter le type
  df$type_table <- table_name
  # Distinguer envoi initiaux des rattrapages
  df %<>%
    mutate(envoi_initial = mois_envoi == mois_sortie)

  df
}

match_pair <- function(x, dico) {
  positions <- match(x, names(dico))
  dico[positions]
}

.mois_fr <- c(
  "Janvier" = 1,
  "Février" = 2,
  "Mars" = 3,
  "Avril" = 4,
  "Mai" = 5,
  "Juin" = 6,
  "Juillet" = 7,
  "Août" = 8,
  "Septembre" = 9,
  "Octobre" = 10,
  "Novembre" = 11,
  "Décembre" = 12
)

#' Importer un tableau EMM depuis epmsi
#' @inheritParams open_ovalide_session
#' @inheritParams jump_to_emm
#' @inherit import_emm return
#' @seealso [open_ovalide_session()], [jump_to_emm()] et [import_emm()]
#' @export
import_emm_from_epmsi <- function(user, pass, annee, mois) {
  session <- open_ovalide_session(user, pass)
  session <- jump_to_emm(session, annee, mois)
  import_emm(session)
}
jomuller/vvs documentation built on May 21, 2019, 2:05 p.m.