R/sprawdz_skroty_skal.R

Defines functions sprawdz_skroty_skal

Documented in sprawdz_skroty_skal

#' @title Sprawdza poprawnosc i tworzy w bazie brakujace skroty skal
#' @description _
#' @param skroty wektor wartosci id_skrotu
#' @param P połączenie z bazą danych uzyskane z
#'   \code{DBI::dbConnect(RPostgres::Postgres())}
#' @return [logical] TRUE w wypadku powodzenia funkcji
sprawdz_skroty_skal = function(skroty, P){
	skrotyBaza = .sqlQuery(P, "SELECT id_skrotu FROM skroty_skal")[, 1]
	skroty = gsub(',', '.', skroty)
	tmp = unique(skroty[!(skroty %in% skrotyBaza) & !is.na(skroty)])
	tmp = strsplit(tmp, '[|]')
	for(i in tmp){
		idSkrotu = paste(i, collapse = '|')
		i = strsplit(i, '[;]')
		if(length(i) != 2){
			stop(sprintf('"%s" nie jest poprawnym identyfikatorem skrotu skali - nie podano wartosci wyjsciowych', idSkrotu))
		}
		we = suppressWarnings(as.numeric(i[[1]]))
		wy = suppressWarnings(as.numeric(i[[2]]))
		if(length(we) != length(wy)){
			stop(sprintf('"%s" nie jest poprawnym identyfikatorem skrotu skali - rozne liczby wartosci wejsciowych i wyjsciowych', idSkrotu))
		}
		if(any(is.na(we) | is.na(wy))){
			stop(sprintf('"%s" nie jest poprawnym identyfikatorem skrotu skali - co najmniej jedna z wartosci wejsciowych lub wyjsciowych nie jest liczba', idSkrotu))
		}
		.sqlQuery(P, "INSERT INTO skroty_skal (id_skrotu) VALUES ($1)", idSkrotu)
	  zap = "INSERT INTO skroty_skal_mapowania (id_skrotu, wartosc, nowa_wartosc) VALUES ($1, $2, $3)"
		.sqlQuery(P, zap, data.frame(idSkrotu, we, wy))
	}
	return(TRUE)
}
zozlak/ZPDzapis documentation built on Jan. 28, 2024, 3:18 p.m.