# Created by Miha 5.2.2020 #----------------- ENCODING 1KA STREŽNNIK ----------------# # Nastavimo encoding za potrebe strežnika # Pogosto se na 1KA strežniku pokvarijo šumniki # zato šumniki (v PDF poročilu) lokalno delajo # na strežniku pa ne # Torej v kolikor želimo, da se v angleški različici #' izpišemo šumniki je to @NUJNO @POTREBNO!!! Sys.setlocale(category = "LC_ALL", locale = "slovenian") #--------------- //ENCODING 1KA STREŽNNIK// --------------# #------------- List packages we need -----------------# # List packages we want # install packages from CRAN p_needed <- c('tools', 'Cairo', 'gridExtra', 'ggplot2', 'grid', 'scales', 'memisc') # Tale del moramo zakumentirati, ker 1KA strežnik ne pusti # inštalacije paketka in javlja error # Torej tole uporabljamo le LOKALNO!!!!! # ## Install new packages # packages <- rownames(installed.packages()) # p_to_install <- p_needed[!(p_needed %in% packages)] # # if (length(p_to_install) > 0) { # install.packages(p_to_install) # } # Load the packages lapply(p_needed, require, character.only = TRUE) #------------ //List packages we need// --------------# #--------------- FOLDERS WHERE PDF WILL BE SAVED ---------------------# # Tukaj bomo shranili končni PDF dir.create('modules/mod_EVOLI/results', showWarnings = FALSE) # Slike Grafa, ki jo bomo shranili s pomočjo funkcije pdf # Ti sliko bomo nato s pomočjo latex funkcije "includegraphics" # vstavili v PDF poročilo narejeno s pomočjo tools::texi2pdf dir.create('modules/mod_EVOLI/results/slike', showWarnings = FALSE) #--------------- FOLDERS WHERE PDF WILL BE SAVED ---------------------# #----------------------------- IMPORT DATA ----------------------------# podatki <- read.csv2( "modules/mod_EVOLI/temp/pem.csv", sep = ";", header = T, fill = T, stringsAsFactors = FALSE, encoding = 'UTF-8' ) # Ker so baze iz 1KA, bomo prvo vrstico odstranili if (podatki[1, 1]==("Ustreznost") | podatki[1, 1]==("Relevance")) { podatki <- podatki[2:nrow(podatki), ] } # # ker delamo za posameznika v datoteki pa imamo dva, # # najprej izberemo prvo vrstico. # Drugače javi error podatki <- podatki[1,] # #### #--------------------------- //IMPORT DATA// --------------------------# # POMEMBNO!!! #---------------------------- RECODE DATA -----------------------------# # Na podatkih, ki jih pripravimo s spodnjo skripto potem delamo naprej # Sintaksa je narejena po Sintaksa Personal Energy Meter - FDV.xlsx source("modules/mod_EVOLI/R/PEM_sintaks.R") #---------------------------- RECODE DATA -----------------------------# #--------------------- GRAFIKON Moj Employeeship odnos in vedenje -----------------------# # Večino kode za izdelaov grafikona smo vzeli iz kode, ki generira poročilo # za PEQM-SL (Evoli_slo.R) na 1KA strežniku # Za potrebe izrisa grafikona (ggplot) podatke oblikujemo v # podatkovni okvir value <- c(COM, RES, LOY, INI, PRO, REL, QLT, CPT, FLX, IMP, ENE) names <- c("Commitment", "Responsibility", "Loyalty", "Initiative", "Productivity", "Relations", "Quality", "Professional competence", "Flexibility", "Implementation", "Energy") # Podatkovni okvir df <- data.frame(value, names, stringsAsFactors = FALSE) # Ker želiimo, da se labele oz imena v grafikonu prikažejo # v enakem vrstnem redu, kot smo to zapisali v vektroju # names, moramo spremeniti lastnosti vektorja names # in sicer uporabimo factor in uredimo levels df$names <- factor(df$names, levels = rev(unique(df$names))) df$names = factor( df$names, levels = c( "Energy", "Implementation", "Flexibility", "Professional competence", "Quality", "Relations", "Productivity", "Initiative", "Loyalty", "Responsibility", "Commitment" ), ordered = TRUE ) # Manjkajočih vrednosti ne sme biti # Drugače Grafikona ne izrišemo if (any(!is.na(df$value))) { # Izris PDF cairo_pdf( paste('modules/mod_EVOLI/results/slike/EQ_lineplot.pdf', sep = ''), family = 'sans', pointsize = 15, width = 7.5, height = 8.5 ) # Začnemo s sestavljenjem/izdelavo grafikona p <- ggplot(data = df, aes(y = value, x = names, group = 1)) + # Najprej naredimo Točkovni diagram, kjer bomo v nadaljevanju # posamezne točke med seboj povezali # Točke po želji tudi obarvammo z modro barvo oz.Navy Blue # Doličimo tudi velikost točk in obliko (krog) geom_point( color = I("blue"), shape = 21, lwd = 3, fill = "blue") + # Točke povežemo geom_line(group = I(1), color = I("blue")) + # Vertikalna postavitev grrafa in brez label, saj bomo # labele dodali svoje theme_bw() + # white background and gray grid lines coord_flip() + xlab("") + ylab("") + # gray background color and white grid lines theme_gray() + # Dodatmo velikost teksta po želji naročnika theme(axis.text = element_text(size = 11, face = "bold")) + # Prav tako pa uredimo vrednosti (labele) na y ossi po # željo naričnika. scale_y_continuous( expand = c(0, 0), minor_breaks = seq(0, 10, 0.5), breaks = seq(min(0, 5), max(10), by = 2.5), limits = c(0, 10), oob = rescale_none, # Dvojna x os sec.axis = dup_axis() ) + # Dodatno dodamo vertikalne črte theme( panel.border = element_blank(), plot.background = element_rect(fill = "white"), panel.grid.minor = element_line(colour = "gray", size = 0.1) ) + geom_hline(yintercept = 0.0, col = "black", alpha = 0.6) + geom_hline(yintercept = 2.5, col = "black", alpha = 0.6) + geom_hline(yintercept = 7.5, col = "black", alpha = 0.6) + geom_hline(yintercept = 10.0, col = "black", alpha = 0.6) + # NA željo naročnika uredimo velikost grafikona theme(plot.margin = unit(c(2, 2, 0, 3.3), "cm")) # Naročnik želi imeti celoten grafikon v okvirju ( tako tekst kot graf) zato te okvirje # ročno uredimo s funkcijo annotation_custom # Poleg tega dodamo še sivo ozadje pri novem okvirju (sivo ozadje za labele an y osi: # Uresničevanje, Produktivnost, itd.) pp = p + # Dodamo še sivo ozadje za levo stran (labele) annotate( "rect", xmin = 0.4, xmax = 11.6, ymin = -8.17, ymax = 10, alpha = 0.5, fill = "gray" ) + # Nato pa začnemo z novimi črtami: dodelan grafikon # Vertikalna črta v level v kotu annotation_custom( grob = linesGrob(gp = gpar(col = "gray")), xmin = 0.4, xmax = 11.6, ymin = -8.17, ymax = -8.17 ) + # Horizontalna črta na vrhu annotation_custom( grob = linesGrob(gp = gpar(col = "gray")), xmin = 11.6, xmax = 11.6, ymin = -8.17, ymax = 10 ) + # Horizontalna črta na dnu annotation_custom( grob = linesGrob(gp = gpar(col = "gray")), xmin = 0.4, xmax = 0.4, ymin = -8.17, ymax = 0 ) + # Dodamo markerje pri drugi x osi oziroma pri osi nad grafom. # Markerji naj bodo na vrednostih 0, 2.5, 5.0, 7.5, 10.0. # Gre za vertikalne črte/črtice kot pomoč za labele, ki jih bomo # ročno vstavili na vrhu grafa annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 0, ymax = 0) + annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 2.5, ymax = 2.5) + annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 5.0, ymax = 5.0) + annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 7.5, ymax = 7.5) + annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 10.0, ymax = 10.0) + # Dodatne vertikalne črte za potrebe naročnika geom_hline(yintercept = 5, size = 0.6) + geom_hline(yintercept = 0.5, size = 0.1, col="gray") + geom_hline(yintercept = 1.0, size = 0.1, col="gray") + geom_hline(yintercept = 1.5, size = 0.1, col="gray") + geom_hline(yintercept = 2.0, size = 0.1, col="gray") + geom_hline(yintercept = 3.0, size = 0.1, col="gray") + geom_hline(yintercept = 3.5, size = 0.1, col="gray") + geom_hline(yintercept = 4.0, size = 0.1, col="gray") + geom_hline(yintercept = 4.5, size = 0.1, col="gray") + geom_hline(yintercept = 5.5, size = 0.1, col="gray") + geom_hline(yintercept = 6.0, size = 0.1, col="gray") + geom_hline(yintercept = 6.5, size = 0.1, col="gray") + geom_hline(yintercept = 7.0, size = 0.1, col="gray") + geom_hline(yintercept = 8.0, size = 0.1, col="gray") + geom_hline(yintercept = 8.5, size = 0.1, col="gray") + geom_hline(yintercept = 9.0, size = 0.1, col="gray") + geom_hline(yintercept = 9.5, size = 0.1, col="gray") + # Da sivo ozadnje ne prekrije modre barve, ?e nekrat naredimo modro ?rto in to?ke geom_point( color = I("blue"), shape = 21, lwd = 3, fill = "blue" ) + geom_line(group = I(1), color = I("blue"), size = 1) # Na koncu izrišemo željen graf (torej vertiklane črte zunaj # margin grafa) gt <- ggplot_gtable(ggplot_build(pp)) gt$layout$clip[gt$layout$name=="panel"] <- "off" grid.draw(gt) # Zaključimo in shranimo pdf dev.off() # S pomočno uporabe latex kode shranimo predhodno generiran # PDF grafikon v vektor, ki ga bomo kasneje uporabili # pri sestavljanju PDF poročila tex.EQ_lineplot <- c( paste( "\\chapter[\\Large \\textbf My Employeeship attitudes and behaviour]{MY EMPLOYEESHIP \\\\ \\large{My Employeeship attitudes and behaviour}}", "\\begin{figure}[H]", paste0( "\\centerline{\\includegraphics[width=1\\textwidth]{slike/EQ_lineplot.pdf}}" ), "\\end{figure}" ) ) # V primeru manjkajolih vrednosti grafikone ne izrišemo } else { tex.EQ_lineplot <- NULL } #-------------------- //GRAFIKON Moj Employeeship odnos in vedenje// --------------------# #----------------------------------- PODATKI NA NASLOVNICI ----------------------------------------# # Zapišemo še ime respondenta, organizacije in datum testiranja # Vektor vrednosti, ki nas ne zaimajo # in s elahko pojavljajo v 1KA bazi junk <- c("-1", "-2", "-3", "-4", "-5") # Izpis imena in priimka respondenta na naslovnici # Ime in priimek v angleški različici služi tudi kot nagovor. # A le če podatki obstajajo # Ker če ni podatkov za ime respondenta, tudi ostalih podatkov ni if (!is.null(podatki$Q1)) { if (length(podatki$Q1) > 0 & !(podatki$Q1 %in% junk)) { # Ime (Q1) in priimek (Q2) respondent <- paste(podatki[["Q1"]], podatki[["Q2"]], sep = " ") # V kolikor nastopajo šumniki moramo zaradi encodinga strežnika, ki # je angleški le te ustrezno nadomestiti z encoding znaki, # drugače se ne izpišejo pravilno # Mali č respondent <- gsub("\u010D", "č", respondent, fixed = TRUE) # Velik Č respondent <- gsub("\u010C", "Č", respondent, fixed = TRUE) # Mali ž respondent <- gsub("\u017E", "ž", respondent, fixed = TRUE) # Velik Ž respondent <- gsub("\u017D", "Ž", respondent, fixed = TRUE) # Mali š respondent <- gsub("\u0161", "š", respondent, fixed = TRUE) # Velik Š respondent <- gsub("\u0160", "š", respondent, fixed = TRUE) # Mali đ respondent <- gsub("\u0111", "đ", respondent, fixed = TRUE) # Velik đ respondent <- gsub("\u0110", "Đ", respondent, fixed = TRUE) } else { respondent <- " " } # Organisation if (length(podatki$Q3) > 0 & !(podatki$Q3 %in% junk)) { # izpis osebe, ki je pripravila poročilo Organisation <- podatki[["Q3"]] # V kolikor nastopajo šumniki moramo zaradi encodinga strežnika, ki # je angleški le te ustrezno nadomestiti z encoding znaki, # drugače se ne izpišejo pravilno # Mali č Organisation <- gsub("\u010D", "č", Organisation, fixed = TRUE) # Velik Č Organisation <- gsub("\u010C", "Č", Organisation, fixed = TRUE) # Mali ž Organisation <- gsub("\u017E", "ž", Organisation, fixed = TRUE) # Velik Ž Organisation <- gsub("\u017D", "Ž", Organisation, fixed = TRUE) # Mali š Organisation <- gsub("\u0161", "š", Organisation, fixed = TRUE) # Velik Š Organisation <- gsub("\u0160", "š", Organisation, fixed = TRUE) # Mali đ Organisation <- gsub("\u0111", "đ", Organisation, fixed = TRUE) # Velik đ Organisation <- gsub("\u0110", "Đ", Organisation, fixed = TRUE) } else { Organisation <- " " } # Date of testing if (length(podatki$itime) > 0 & !(podatki$itime %in% junk)) { date <- podatki[["itime"]] # izpis osebe, ki je pripravila poročilo } else { date <- " " } # V primeru da ni podatkov } else { respondent <- " " Organisation <- " " date <- " " } #----------------------------------- PODATKI NA NASLOVNICI ----------------------------------------# #-------------------------------- ZAČNEMO S PRIPRAVO IN SESTAVO PDF DOKUMENTA ---------------------------------# # Sledi del, kjer bomo vse dele sestavili v celoto, torej latex in R kodo ter s pomočjo # tools::texi2pdf generirali PDF poročilo # LATEX KOSI ------------------------------------------------------ #=================================================================# # Najprej s funkcijo scan preberemo latex datoteke # Glava dokumenta, kjer definiram celotno strukturo latex dokumenta tex.glava <- scan( "modules/mod_EVOLI/latexkosi/Pem_meter/glava-PEM_ang.tex", character(0), sep = "\n", quiet = TRUE, encoding = 'UTF-8' ) # Gre kodo ki vsebuje dodatno vsebino in TABELE z vnosnimi formami! podatkovni.okvir <- scan( "modules/mod_EVOLI/latexkosi/Pem_meter/pem_vseb_tabele_ang.tex", character(0), sep = "\n", quiet = TRUE, encoding = 'UTF-8' ) # Ime in priimek respondenta na naslovni strani tex.glava <- gsub( pattern = '!name!', replacement = Hmisc::latexTranslate(respondent), x = tex.glava ) # Organizacija v kateri je zaposlen tex.glava <- gsub( pattern = '!organisation!', replacement = Hmisc::latexTranslate(Organisation), x = tex.glava ) # Ter datum, ko je bil anketiranje izvedeno tex.glava <- gsub( pattern = '!date!', replacement = Hmisc::latexTranslate(date), x = tex.glava ) # Zaključimo dokument: \end{document} tex.noga <- scan( "modules/mod_EVOLI/latexkosi/Pem_meter/pem-noga.tex", character(0), sep = "\n", quiet = TRUE ) #---------------------- //LATEX KOSI// --------------------# #---------- SESTAVA VSEH DELOV V CELOTO ----------# # Posamezne tex.izbor <- c(tex.glava, tex.EQ_lineplot, "\\newpage", podatkovni.okvir, tex.noga) #-------- //SESTAVA VSEH DELOV V CELOTO// --------# #--------- USTREZNO UREDIMO ŠE POTI IN IME KONČNEGA POROČILA ----------# # Nastavimo pot, kamor bomo shranili latex datoteko Rdirektorij <- getwd() setwd(paste(Rdirektorij, "modules/mod_EVOLI/results", sep = "/")) # Zapišemo Tex file s funkcijo cat, saj želimo izpisati # celotno latex codo cat(tex.izbor, file = paste0('PEM-ANG.tex'), sep = '\n') # Tex oziroma file generiran v prejšnjem primeru # Pa nato pretvorimo v PDF tools::texi2pdf(file = paste0("PEM-ANG.tex"), quiet = TRUE, clean = TRUE) # V primeru, da poročilo generiramo večkrat (popravki terstiranje) # Še enkrat nastavimo pot v prvotni direktorij, drugače # bo pot napačna, saj smo jo za potrebe geneiranja latex oz tex. # fila spremenili setwd(Rdirektorij) #------- //USTREZNO UREDIMO ŠE POTI IN IME KONČNEGA POROČILA// --------# #------------------------------ //ZAČNEMO S PRIPRAVO IN SESTAVO PDF DOKUMENTA// -------------------------------#