From e9c4e70f9c7db8a2c1f006c27279681efc2f6da5 Mon Sep 17 00:00:00 2001
From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr>
Date: Fri, 8 Nov 2024 16:25:00 +0100
Subject: [PATCH] Renommage du flat

---
 ...s.Rmd => flat_create_tables_sequences.Rmd} | 177 +++++++++++++++---
 1 file changed, 153 insertions(+), 24 deletions(-)
 rename dev/{flat_create_tables.Rmd => flat_create_tables_sequences.Rmd} (60%)

diff --git a/dev/flat_create_tables.Rmd b/dev/flat_create_tables_sequences.Rmd
similarity index 60%
rename from dev/flat_create_tables.Rmd
rename to dev/flat_create_tables_sequences.Rmd
index 564b933..fbfa589 100644
--- a/dev/flat_create_tables.Rmd
+++ b/dev/flat_create_tables_sequences.Rmd
@@ -1,5 +1,5 @@
 ---
-title: "Cr\u00e9ation des tables finales"
+title: "Cr\u00e9ation des tables et des s\u00e9quences"
 output: html_document
 editor_options: 
   chunk_output_type: console
@@ -7,6 +7,7 @@ editor_options:
 
 ```{r development, include=FALSE}
 library(testthat)
+library(yaml)
 library(glue)
 library(DBI)
 library(datalibaba)
@@ -17,11 +18,18 @@ library(datalibaba)
 pkgload::load_all(export_all = FALSE)
 ```
 
-# Présentation
+```{r config, eval=FALSE}
+# Lire le fichier de configuration
+config <- yaml::read_yaml("config.yml")
 
-> Cette page contient la logique métier concernant la création des tables de prélèvements et d'analyses concernant les nitrates.
+# Accéder aux valeurs pour version et last_year
+version <- config$version
+last_year <- config$last_year
+```
+
+# Création des tables en base
 
-# Table des prélèvements
+## Création de la table des prélèvements et ajout des commentaires
 
 ```{r function-create_nitrate_prelevement_table, eval=FALSE}
 #' Créer une table de prélèvements de nitrates
@@ -32,12 +40,13 @@ pkgload::load_all(export_all = FALSE)
 #'
 #' @param version String. Version de la table (par exemple, 'v1').
 #' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
-#' @param connexion DBIConnection. Connexion active à la base de données PostgreSQL.
 #'
 #' @return String. Le script SQL utilisé pour créer la table.
 #' @export
 #' @importFrom datalibaba connect_to_db
-create_nitrate_prelevement_table  <- function(version, last_year, connexion) {
+create_nitrate_prelevement_table  <- function(version, last_year) {
+  # Établir une connexion à la base de données PostgreSQL
+  connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
   
   # Génération de la date du jour
   date_now <- format(Sys.Date(), "%d/%m/%Y")
@@ -110,16 +119,14 @@ create_nitrate_prelevement_table  <- function(version, last_year, connexion) {
 }
 ```
 
-```{r examples-create_nitrate_prelevement_table, eval=FALSE}
-# Connexion à la base de données
-connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
-
+Création de la table `nitrates.nitrate_prelevement_version` :
+```{r create_nitrate_prelevement_table_version, eval=FALSE}
 # Création du script SQL avec la version choisie
-version <- "v0_16"
-last_year <- "2023"
-sql <- create_nitrate_prelevement_table(version, last_year, connexion)
+sql <- create_nitrate_prelevement_table(version, last_year)
 ```
 
+## Création de la table des analyses et ajout des commentaires
+
 ```{r function-create_nitrate_analyse_table, eval=FALSE} 
 #' Créer une table d'analyses de nitrates
 #'
@@ -129,12 +136,13 @@ sql <- create_nitrate_prelevement_table(version, last_year, connexion)
 #'
 #' @param version String. Version de la table (par exemple, 'v1').
 #' @param last_year Integer. L'année la plus récente incluse dans les données de la table.
-#' @param connexion DBIConnection. Connexion active à la base de données PostgreSQL.
 #'
 #' @return String. Le script SQL utilisé pour créer la table.
 #' @export
 #' @importFrom datalibaba connect_to_db
-create_nitrate_analyse_table <- function(version, last_year, connexion) {
+create_nitrate_analyse_table <- function(version, last_year) {
+  # Établir une connexion à la base de données PostgreSQL
+  connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
 
   # Génération de la date du jour
   date_now <- format(Sys.Date(), "%d/%m/%Y")
@@ -213,19 +221,140 @@ create_nitrate_analyse_table <- function(version, last_year, connexion) {
 
 ```
 
-```{r examples-create_nitrate_analyse_table, eval=FALSE}
-# Connexion à la base de données
-connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
-
+Création de la table `nitrates.nitrate_analyse_version` :
+```{r create_nitrate_analyse_table, eval=FALSE}
 # Création du script SQL avec la version choisie
-version <- "v0_16"
-last_year <- "2023"
-sql <- create_nitrate_analyse_table(version, last_year, connexion)
+sql <- create_nitrate_analyse_table(version, last_year)
+```
+
+# Incrémentation des séquences
+
+## Incrémentation de la table des prélèvements
+
+```{r function-add_code_prelevement, eval=FALSE} 
+#' Ajouter une variable code_prelevement au dataframe
+#'
+#' @description Cette fonction ajoute une nouvelle variable `code_prelevement` 
+#' au dataframe en utilisant une séquence PostgreSQL dynamique. La séquence est 
+#' construite en fonction du paramètre `version` fourni.
+#'
+#' @param dataframe Un dataframe contenant les données sur lesquelles ajouter 
+#' la variable `code_prelevement`.
+#' @param version Une chaîne de caractères représentant la version de la 
+#' séquence à utiliser.
+#'
+#' @return Un dataframe avec une nouvelle colonne `code_prelevement` contenant 
+#' les valeurs de la séquence PostgreSQL.
+#' 
+#' @importFrom DBI dbGetQuery dbDisconnect
+#' @importFrom dplyr mutate
+#' @importFrom glue glue
+#' @importFrom datalibaba connect_to_db
+#' @export
+add_code_prelevement <- function(dataframe, version) {
+  # Établir une connexion à la base de données PostgreSQL
+  connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+  
+  # Construire le nom de la séquence
+  sequence_name <- glue::glue("nitrates.nitrate_prelevement_{version}_code_prelevement_seq")
+  
+  # Initialiser une liste pour stocker les valeurs de la séquence
+  code_prelevements <- c()
+  
+  # Pour chaque ligne du dataframe, obtenir une valeur de la séquence
+  for (i in 1:nrow(dataframe)) {
+    query <- glue::glue("SELECT nextval(\'{sequence_name}\') AS code_prelevement")
+    result <- DBI::dbGetQuery(connexion, query)
+    code_prelevements <- c(code_prelevements, result$code_prelevement)
+  }
+  
+  # Ajouter la nouvelle variable au dataframe
+  dataframe <- dataframe |>
+    dplyr::mutate(code_prelevement = code_prelevements)
+  
+  # Fermer la connexion à la base de données
+  DBI::dbDisconnect(connexion)
+  
+  return(dataframe)
+}
+
+```
+
+## Incrémentation de la table des analyses
+
+```{r function-add_code_analyse, eval=FALSE} 
+#' Ajouter une variable code_analyse au dataframe
+#'
+#' @description Cette fonction ajoute une nouvelle variable `code_analyse` 
+#' au dataframe en utilisant une séquence PostgreSQL dynamique. La séquence est 
+#' construite en fonction du paramètre `version` fourni.
+#'
+#' @param dataframe Un dataframe contenant les données sur lesquelles ajouter 
+#' la variable `code_analyse`.
+#' @param version Une chaîne de caractères représentant la version de la 
+#' séquence à utiliser.
+#'
+#' @return Un dataframe avec une nouvelle colonne `code_analyse` contenant 
+#' les valeurs de la séquence PostgreSQL.
+#' 
+#' @importFrom DBI dbGetQuery dbDisconnect
+#' @importFrom dplyr mutate
+#' @importFrom glue glue
+#' @importFrom datalibaba connect_to_db
+#' @export
+add_code_analyse <- function(dataframe, version) {
+  # Établir une connexion à la base de données PostgreSQL
+  connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+  
+  # Construire le nom de la séquence
+  sequence_name <- glue::glue("nitrates.nitrate_analyse_{version}_code_analyse_seq")
+  
+  # Initialiser une liste pour stocker les valeurs de la séquence
+  code_analyses <- c()
+  
+  # Pour chaque ligne du dataframe, obtenir une valeur de la séquence
+  for (i in 1:nrow(dataframe)) {
+    query <- glue::glue("SELECT nextval(\'{sequence_name}\') AS code_analyse")
+    result <- DBI::dbGetQuery(connexion, query)
+    code_analyses <- c(code_analyses, result$code_analyse)
+  }
+  
+  # Ajouter la nouvelle variable au dataframe
+  dataframe <- dataframe |>
+    dplyr::mutate(code_analyse = code_analyses)
+  
+  # Fermer la connexion à la base de données
+  DBI::dbDisconnect(connexion)
+  
+  return(dataframe)
+}
+
+```
+
+```{r development-skeleton-dir, eval=FALSE}
+# Créer de l'arborescence et des fichiers du template
+usethis::use_rmarkdown_template(
+  template_name = "Cr\u00e9ation des tables et des s\u00e9quences",
+  template_dir = "creation-des-tables-et-des-sequences",
+  template_description = "Cr\u00e9ation des tables et des s\u00e9quences",
+  template_create_dir = TRUE
+)
+```
+
+```{r development-skeleton-copy, eval=FALSE}
+# Définir les chemins source et destination
+source_file <- "dev/flat_create_tables_sequences.Rmd"
+destination_dir <- "inst/rmarkdown/templates/creation-des-tables-et-des-sequences/skeleton"
+destination_file <- file.path(destination_dir, "skeleton.Rmd")
+
+# Copier et renommer le fichier
+file.copy(from = source_file, to = destination_file, overwrite = TRUE)
+message("File copied and renamed successfully.")
+
 ```
 
 ```{r development-inflate, eval=FALSE}
 # Run but keep eval=FALSE to avoid infinite loop
 # Execute in the console directly
-fusen::inflate(flat_file = "dev/flat_create_tables.Rmd", vignette_name = "Cr\u00e9ation des tables finales")
+fusen::inflate(flat_file = "dev/flat_create_tables_sequences.Rmd", vignette_name = "Cr\u00e9ation des tables et des s\u00e9quences")
 ```
-
-- 
GitLab