Ero sivun ”Projektinhallinta/hiekkalaatikko” versioiden välillä
Siirry navigaatioon
Siirry hakuun
pEi muokkausyhteenvetoa |
(→R-koodi: ALV- ja sivukululaskentaa korjattu, pieniä bugeja vielä) |
||
(8 välissä olevaa versiota samalta käyttäjältä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
[[Luokka:Projektinhallinta]] | |||
===R-koodi=== | ===R-koodi=== | ||
<rcode name="budjetti" variables=" | <rcode name="budjetti" include="page:OpasnetBaseUtils|name:generic|page:Projektinhallinta|name:budjetti" variables=" | ||
name:jaottelu|description:Mitkä jaottelut haluat näyttää yhteenvedossa?|type:checkbox|options:1;Projekti;2;Työpaketti;3;Vuosi;4;Laitos;5;Rahoittaja;6;Kustannuslaji|default:2;3| | name:jaottelu|description:Mitkä jaottelut haluat näyttää yhteenvedossa?|type:checkbox|options:1;Projekti;2;Työpaketti;3;Vuosi;4;Laitos;5;Rahoittaja;6;Kustannuslaji|default:2;3| | ||
category:Voit valita näytettävät yksityiskohdat ja myös rajata tarkastelusi yhteen työpakettiin tai vuoteen.| | category:Voit valita näytettävät yksityiskohdat ja myös rajata tarkastelusi yhteen työpakettiin tai vuoteen.| | ||
Rivi 17: | Rivi 19: | ||
library(xtable) | library(xtable) | ||
###################################################################33 | |||
####Budjettilaskenta: suunnitelluista palkka- ja muista menoista lasketaan kokonaisbudjetti. | ####Budjettilaskenta: suunnitelluista palkka- ja muista menoista lasketaan kokonaisbudjetti. | ||
Rivi 34: | Rivi 27: | ||
budjettilaskenta <- function(page, laitos = "THL", vuosi = "2012", rahoittaja = "Suomen Akatemia", | budjettilaskenta <- function(page, laitos = "THL", vuosi = "2012", rahoittaja = "Suomen Akatemia", | ||
projekti = "Projekti", työpaketti = "Työpaketti", työpaketti.add = "Työpaketti", vuosi.add = "2012", laitos.add = | projekti = "Projekti", työpaketti = "Työpaketti", työpaketti.add = "Työpaketti", vuosi.add = "2012", laitos.add = | ||
"THL", rahoittaja.add = "Suomen Akatamia", kustannuslaji.add = "Palkka VT7", määrä.add = 0, kuvaus.add = "") { | "THL", rahoittaja.add = "Suomen Akatamia", kustannuslaji.add = "Palkka VT7", määrä.add = 0, kuvaus.add = "", series_id = NULL) { | ||
# Haetaan budjettidata ja lisätään siihen kaikki ne sarakkeet joita taulussa ei ole. | # Haetaan budjettidata ja lisätään siihen kaikki ne sarakkeet joita taulussa ei ole. | ||
out <- op_baseGetData("opasnet_base", page)[, -c(1,2)] | out <- op_baseGetData("opasnet_base", page, series_id = series_id)[, -c(1,2)] | ||
if(!"Projekti" %in% colnames(out)) {out <- cbind(out, data.frame(Projekti = projekti))} | if(!"Projekti" %in% colnames(out)) {out <- cbind(out, data.frame(Projekti = projekti))} | ||
if(!"Työpaketti" %in% colnames(out)) {out <- cbind(out, data.frame(Työpaketti = työpaketti))} | if(!"Työpaketti" %in% colnames(out)) {out <- cbind(out, data.frame(Työpaketti = työpaketti))} | ||
Rivi 60: | Rivi 53: | ||
Rahoittaja = rahoittaja.add, Kustannuslaji = kustannuslaji.add, määrä = määrä.add, kuvaus = kuvaus.add) | Rahoittaja = rahoittaja.add, Kustannuslaji = kustannuslaji.add, määrä = määrä.add, kuvaus = kuvaus.add) | ||
out <- rbind(out, temp) | out <- rbind(out, temp) | ||
# Haetaan ALV-prosentit ja lasketaan ne relevanteille riveille. | |||
alv <- tidy(op_baseGetData("opasnet_base", "Op_fi2913")) | |||
alv <- merge(out, alv) # ALV laitetaan joka riville, joille se on määritelty. | |||
alv$määrä <- alv$määrä * alv$Result | |||
alv$Kustannuslaji <- "ALV" | |||
alv <- alv[colnames(out)] | |||
# Haetaan Projektisopimus eli sopimuskohtaiset tiedot ja sovelletaan niitä yleiskustannuksen ja ALV:n laskemiseen. | |||
sopimus <- tidy(op_baseGetData("opasnet_base", "Op_fi2916")) | |||
sopimus <- sopimus[sopimus$Projekti == projekti, ] | |||
print(sopimus) | |||
# Jos on erillislaskutus, ALV lisätään rahoittajan osuuteen. Jos ei, lisätään | |||
if(sopimus[sopimus$Havainto == "ALV-laskutus", "Result"] != "Erillislaskutus") | |||
{alv$Rahoittaja <- laitos} | |||
# Tästä jää nyt erottelematta se, maksaako laitos ALVit budjetti- vai projektirahoista. | |||
out <- rbind(out, alv) | |||
# Haetaan sivukulu- ja yleiskustannuskertoimet Opasnetistä, siistitään ja yhdistetään budjettiin. | # Haetaan sivukulu- ja yleiskustannuskertoimet Opasnetistä, siistitään ja yhdistetään budjettiin. | ||
kertoimet <- op_baseGetData("opasnet_base", "Op_fi2704")[, 3:8] | kertoimet <- op_baseGetData("opasnet_base", "Op_fi2704")[, 3:8] | ||
Rivi 105: | Rivi 117: | ||
# Lasketaan sivukulut ja yleiskustannukset ja merkitään joka rivi joko tuloksi tai menoksi. | # Lasketaan sivukulut ja yleiskustannukset ja merkitään joka rivi joko tuloksi tai menoksi. | ||
test <- substr(paste(out$Kustannuslaji, " "), 1, | test <- substr(paste(out$Kustannuslaji, " "), 1, 5) == "Palkk" # Onko palkkarivi? | ||
out$htkk <- ifelse(test | substr(paste(out$kuvaus, " "), 1, 4) == "TULO", out$htkk, 0) | out$htkk <- ifelse(test | substr(paste(out$kuvaus, " "), 1, 4) == "TULO", out$htkk, 0) | ||
out$Sivukulu <- ifelse(test, out$Sivukulu * out$summa, 0) | out$Sivukulu <- ifelse(test, out$Sivukulu * out$summa, 0) | ||
Rivi 111: | Rivi 123: | ||
out$tulomeno <- ifelse(out$Kustannuslaji == "Tulot" | substr(paste(out$kuvaus, " "), 1,4) == "TULO", "Tulot", "Menot") | out$tulomeno <- ifelse(out$Kustannuslaji == "Tulot" | substr(paste(out$kuvaus, " "), 1,4) == "TULO", "Tulot", "Menot") | ||
# Lisätään omat rivit sivukuluille ja yleiskustannuksille. | # Lisätään omat rivit sivukuluille ja yleiskustannuksille, yhteisnimellä epäsuorat. | ||
epäsuorat <- if(sopimus[sopimus$Havainto == "YK-peruste", "Result"] == "Kaikki") | |||
{out[out$tulomeno == "Menot", ]} | |||
else | |||
out <- rbind(out, | {out[substr(paste(out$Kustannuslaji, " "), 1, 5) == "Palkk", ]} | ||
epäsuorat$Kustannuslaji <- "Yleiskustannus" | |||
epäsuorat$summa <- epäsuorat$Yleiskustannus | |||
out <- rbind(out, | out <- rbind(out, epäsuorat) | ||
epäsuorat$Kustannuslaji <- "Sivukulu" | |||
epäsuorat$summa <- epäsuorat$Sivukulu | |||
out <- rbind(out, epäsuorat) | |||
# Menot merkitään negatiivisiksi, jotta voidaan laskea tulot ja menot yhteen. | # Menot merkitään negatiivisiksi, jotta voidaan laskea tulot ja menot yhteen. | ||
Rivi 136: | Rivi 151: | ||
return(out) | return(out) | ||
} | } | ||
################### Budjettiyhteenveto laskee erilaisia summatauluja budjettilaskennan tuottamasta taulusta, jossa on jokainen tapahtuma eritelty. | ################### Budjettiyhteenveto laskee erilaisia summatauluja budjettilaskennan tuottamasta taulusta, jossa on jokainen tapahtuma eritelty. | ||
budjettiyhteenveto <- function(budjettitaulu, jaottelu = c(1,2,3)) { | budjettiyhteenveto <- function(budjettitaulu, jaottelu = c(1,2,3), param = "summa") { | ||
out <- budjettitaulu | out <- budjettitaulu | ||
# Kaikki palkat muutetaan samanlaisiksi. | # Kaikki palkat muutetaan samanlaisiksi. | ||
Rivi 150: | Rivi 161: | ||
jaottelu <- c("tulomeno", c("Projekti", "Työpaketti", "Vuosi", "Laitos", "Rahoittaja", "Kustannuslaji")[jaottelu]) | jaottelu <- c("tulomeno", c("Projekti", "Työpaketti", "Vuosi", "Laitos", "Rahoittaja", "Kustannuslaji")[jaottelu]) | ||
out <- as.data.frame(as.table(tapply(out | out <- as.data.frame(as.table(tapply(out[, param], out[, jaottelu], sum))) | ||
# Tyhjät rivit poistetaan ja otsikoita parannetaan. | # Tyhjät rivit poistetaan ja otsikoita parannetaan. | ||
colnames(out)[colnames(out) == "Freq"] <- | colnames(out)[colnames(out) == "Freq"] <- param | ||
out <- out[!is.na(out | out <- out[!is.na(out[param]), ] | ||
return(out) | return(out) | ||
} | } | ||
############################# htkk | |||
# parametrit: budjettitaulu: budjettilaskenta-funktion tuottama data.frame. | |||
# jaottelu: ne selitteet, jotka eritellään (Projekti, Työpaketti, Vuosi, Laitos, Rahoittaja, Kustannuslaji) | |||
htkk <- function(budjettitaulu, jaottelu = c(1,2,3)) { | |||
out <- budjettitaulu | |||
out <- out[substr(paste(out$Kustannuslaji, " "), 1, 6) == "Palkka" & out$tulomeno == "Menot", ] | |||
out <- budjettiyhteenveto(out, param = "htkk") | |||
return(out) | |||
} | |||
###########################################################################################3 | |||
############ tidy4: a function that cleans the tables from Opasnet Base. Uses S4 class. | |||
# data is a table from op_baseGetData function | |||
tidy4 <- function (data) { | |||
data$Result <- ifelse(!is.na(data$Result.Text), as.character(data$Result.Text), data$Result) | |||
if("Observation" %in% colnames(data)){test <- data$Observation != "Description"} else {test <- TRUE} | |||
if("Havainto" %in% colnames(data)){test <- data$Havainto != "kuvaus"} | |||
data <- data[test, !colnames(data) %in% c("id", "obs", "Result.Text")] | |||
if(sum(is.na(as.numeric(as.character(data$Result)))) == 0) {data$Result <- as.numeric(as.character(data$Result))} | |||
return(data) | |||
} | |||
out <- budjettilaskenta("Op_fi2682", rahoittaja = "STM", projekti = "Tekaisu", työpaketti = "TP1", työpaketti.add = työpaketti.add, rahoittaja.add = rahoittaja.add, kustannuslaji.add = kustannuslaji.add, määrä.add = määrä.add, kuvaus.add = kuvaus.add) | |||
out <- out[out$Työpaketti %in% työpakettirajaus, ] | out <- out[out$Työpaketti %in% työpakettirajaus, ] | ||
if(vuosirajaus != "Kaikki") {out <- out[out$Vuosi == vuosirajaus, ]} | if(vuosirajaus != "Kaikki") {out <- out[out$Vuosi == vuosirajaus, ]} | ||
print(xtable(out), type = 'html') | |||
print(xtable(budjettiyhteenveto(out, jaottelu)), type='html', html.table.attributes="class='sortable'") | print(xtable(budjettiyhteenveto(out, jaottelu)), type='html', html.table.attributes="class='sortable'") | ||
print(xtable(budjettiyhteenveto(out[out$tulomeno == "Tulot", ], jaottelu)), type='html', html.table.attributes="class='sortable'") | print(xtable(budjettiyhteenveto(out[out$tulomeno == "Tulot", ], jaottelu)), type='html', html.table.attributes="class='sortable'") | ||
print(xtable(budjettiyhteenveto(out[out$tulomeno == "Menot", ], jaottelu)), type='html', html.table.attributes="class='sortable'") | print(xtable(budjettiyhteenveto(out[out$tulomeno == "Menot", ], jaottelu)), type='html', html.table.attributes="class='sortable'") | ||
print(xtable(htkk(out, jaottelu)), type = 'html', html.table.attributes="class='sortable'") | |||
tulot <- budjettiyhteenveto(out, c(3,5)) | tulot <- budjettiyhteenveto(out, c(3,5)) | ||
Rivi 193: | Rivi 220: | ||
print(xtable(out), type='html', html.table.attributes="class='sortable'") | print(xtable(out), type='html', html.table.attributes="class='sortable'") | ||
</rcode> | </rcode> | ||
{{tuloslinkki}} | {{tuloslinkki}} |