R/informe_escola.R

Defines functions informe_escola

# Informe escola

# Aquest és el fitxer principal, que conté la funció informe_escola, que crea els latex pels informes
# Parteix dels csv que estan a la carpeta temp/dades. Crearà un .tex per cada .csv a la carpeta
# TODO: implementar que pugui importar directament d'un excel.

Sys.setlocale("LC_ALL", "Catalan_Spain.1252")

config = config::get()  # Importem la configuració
encoding_ = config$encoding
individuals = config$individuals  # Per debuguejar més ràpid
aprofitar = config$aprofitar  # Ídem
numero_respostes = config$numero_respostes
options(endoding=encoding_)

wd = getwd()

source(file.path(wd, 'R', 'calculs', 'calculs_collectiu.R'), encoding = encoding_)
source(file.path(wd, 'R', 'calculs', 'calculs_individual.R'), encoding = encoding_)
source(file.path(wd, 'R', 'escriure_latex', 'latex_collectiu.R'), encoding = encoding_)
source(file.path(wd, 'R', 'escriure_latex', 'latex_individual.R'), encoding = encoding_)
source(file.path(wd, 'R', 'texts', 'texts_escola.R'), encoding = encoding_)
source(file.path(wd, 'R', 'texts', 'texts_collectiu.R'), encoding = encoding_)
source(file.path(wd, 'R', 'texts', 'texts_individual.R'), encoding = encoding_)
source(file.path(wd, 'R', 'altres', 'utils.R'), encoding = encoding_)
source(file.path(wd, 'R', 'altres', 'manipulacions_dades.R'), encoding = encoding_)

informe_escola = function(nom_escola){
  
  # Aquesta funció crea les figures de l'informe i els .tex, una carpeta de figures i un .tex
  # per cada classe
  # Arguments: nom_escola: el nom de l'escola tal com volem que surti a l'informe
  # Importacions: els csv que es trobin a la carpeta temp/dades
  # Retorna: res
  # Exporta: les imatges i els fitxers .tex dels informes.
  
  wd <- getwd();
  
  # Creem ara els paths que anirem fent servir:
  path_dades = file.path(wd, "temp", "dades")
  path_figures = file.path(wd, "temp", "figures")
  path_taules = file.path(wd, "temp", "taules")
  path_informes = file.path(wd, "temp", "informes")
  
  # Ajuntem tots els paths en un "diccionari" per tenir-los una mica ordenats i poder-hi accedir fàcilment.
  path_llista = list('dades' = path_dades, 
                     'figures' = path_figures, 
                     'taules' = path_taules, 
                     'informes' = path_informes)

  # Arreglem el nom de l'escola per fer-lo servir per coses internes i traiem accents i espais
  nom_escola_arreglat = make.names(nom_escola) 
  
  if (!aprofitar){
    # I creem els directoris sobreescrivint si ja existeixen:
    # FIXME: ja els hem netejat abans, no sé si cal una segona vegada
    
    directoris_ = c(path_figures, path_taules, path_informes)  # Alerta de no netejar el de dades!
    netejar_directoris(c(directoris_, file.path(directoris_, "individuals")))
  }
  
  noms_fitxers = as.vector(list.files(path_llista$dades))
  num_curs = substr(noms_fitxers, 1, 1)
  curs_classe = substr(noms_fitxers, 1, 2)
  noms_classes = substr(noms_fitxers, 2, 2)
  escola_curs_classe = paste0(nom_escola_arreglat, "-", curs_classe)
  
  cursos = list()
  for (i in 1:length(noms_fitxers)){
    cursos[[i]] = c(escola_curs_classe[i], num_curs[i])
  }
  
  noms_cursos = vector(mode="list", length=6)
  noms_cursos = c("1r de Primària", "2n de Primària", "3r de Primària", 
                  "4rt de Primària", "5è de Primària", "6è de Primària")
  
  names(noms_cursos) = seq(1, 6)
  
  classes = c()
  for (i in 1:length(noms_fitxers)){
    classes[i] = paste(noms_cursos[num_curs[i]], noms_classes[i])
  }
  
  for (cl in 1:length(curs_classe)){
    
    print(paste0("> Creant els informes per la classe ", classes[cl]))
    print("> Creant gràfics i taules...")
    
    nom_fitxer = noms_fitxers[cl]
    
    # Importem les dades que farem servir tant pel col·lectiu com per l'individual:
    
    dades = importar_i_manipular(file.path(path_llista$dades, nom_fitxer), numero_respostes)
    
    # Informe col·lectiu
    
    if (!aprofitar){
      calculs_collectiu(dades, path_llista = path_llista, nom_fitxer = nom_fitxer, numero_respostes = 3)
    }
    
    path_ = file.path(path_llista$informes, paste0("sociograma_", curs_classe[cl], ".tex"))
    con = file(path_, open = "wt", encoding = encoding_)
    sink(con)
    
    cat(coses_latex);
    
    cat("\\begin{document}\n")
    
    titol_classes(nom_escola, classes[cl])
    
    # Intro
    cat(introduccio_escola)
    
    cat(titol_collectiu)
    #cat(introduccio)
    
    informe_classe(path_llista = path_llista)
    
    # Informes individuals (en el mateix fitxer)
    
    if (individuals){
      if (!aprofitar){
        noms = calculs_individual(dades, path_llista, nom_fitxer, numero_respostes=3)
      }
      else {
        noms = dades[[3]]
      }
      cat(titol_individual)
      informe_individual(path_llista = path_llista, noms)
    }
    
    cat(final_latex)
    sink()
    close(con)
    closeAllConnections()
  }
  
}

if (!interactive()) {  
  # equivalent a l'"if __name__==__main__ en python
  
  nom_escola = 'Hogwarts'
  informe_escola(nom_escola)
  
}
Projecte-Orbita/sociogrames documentation built on Aug. 19, 2020, 12:03 a.m.