Ero sivun ”Projektinhallinta/hiekkalaatikko” versioiden välillä

Opasnet Suomista
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)


############ 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)
}


###################################################################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, 6) == "Palkka" # Onko palkkarivi?
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.
palkat <- out[substr(paste(out$Kustannuslaji, "      "), 1, 6) == "Palkka", ]
epäsuorat <- if(sopimus[sopimus$Havainto == "YK-peruste", "Result"] == "Kaikki")
palkat$Kustannuslaji <- "Yleiskustannus"
{out[out$tulomeno == "Menot", ]}
palkat$summa <- palkat$Yleiskustannus
else
out <- rbind(out, palkat)
{out[substr(paste(out$Kustannuslaji, "      "), 1, 5) == "Palkk", ]}
palkat$Kustannuslaji <- "Sivukulu"
epäsuorat$Kustannuslaji <- "Yleiskustannus"
palkat$summa <- palkat$Sivukulu
epäsuorat$summa <- epäsuorat$Yleiskustannus
out <- rbind(out, palkat)
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)
}
}
#out <- budjettilaskenta("Op_fi2682", rahoittaja = "STM", projekti = "Tekaisu", työpaketti = "TP1", työpaketti.add = "TP1", rahoittaja.add = "THL")
#print(xtable(out), type = 'html')


################### 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$summa, out[, jaottelu], sum)))
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"] <- "Summa"
colnames(out)[colnames(out) == "Freq"] <- param
out <- out[!is.na(out$Summa), ]
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)
}


#print(xtable(budjettiyhteenveto(out, jaottelu)), type='html')
#print(xtable(budjettiyhteenveto(out, c(2,6))), type='html')
#out <- budjettiyhteenveto(out, c(3,5))
#out <- out[out$tulomeno == "Tulot", ]
#print(xtable(out), type='html')


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 <- budjettilaskenta("Op_fi2912", 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>
'''Tällä käyttöliittymällä ohjataan budjettilaskentaa:


<rcode variables="
name:kustannuslaji.add|type:selection|default:'Palkka VT7'|options:'Palkka VT6';Palkka VT6;'Palkka VT7';Palkka VT7;'Palkka VT8';Palkka VT8;'Ostopalvelu';Ostopalvelu;'Matka';Matka;'Tarvike';Tarvike|
category:Voit testata budjettia tällä tilapäisellä lisätapahtumalla.|
name:määrä.add|default:0|
name:kuvaus.add|type:text
" include="page:Projektinhallinta|name:budjetti">
budjettilaskenta("Tähän tapahtumatiedot sisältävän sivun tunniste")
</rcode>
</rcode>


==Budjetti==
<t2b index="Obs,Rahoittaja,Laitos,Työpaketti,Kustannuslaji,Vuosi" locations="2012,2013,2014,kuvaus" unit="€, pm">
1|STM|Tuntematon|TP1|Palkka VT5|5|12|12|Kilpailutettava työ: projektikoordinaattori htkk à 7500 (sis sivukulut ja YK)
26|THL|Nordem|TP1|Ostopalvelu|8000|0|0|Mikko Pohjola: Environmental health assessment for use
2|STM|THL|TP1|Palkka VT4|1|1|1|Erikoistutkija Jouni Tuomisto
3|STM|THL|TP1|Tulot|0|0|0|Tuke-rahoitus
4|STM|THL|TP1|Tulot|0|100000|80000|Kaste2-rahoitus
27|STM|THL|TP1|Tulot|35000|0|0|STM:n ympäristöterveyden hankerahoitus (terveydensuojeluohjelma)
5|THL|THL|TP1|Palkka VT4|1|1|1|TULOVASTA: THL:n budjettirahaa omien työntekijöiden palkkoihin (J.T.)
6|THL|THL|TP1|Tulot|1|1|1|TULOLOPUT: THL:n rahoitus puuttuvasta osuudesta
7|STM|THL|TP2|Palkka VT6|3|3|3|Tutkija A.A. (ympäristöterveys)
9|STM|THL|TP2|Palkka VT6|8|6|2|Tutkija N.N. (arviointi ja päätöksenteko)
28|STM|THL|TP2|Palkka VT9|5|0|0|Graduntekijä 2 kpl I.?. ja ?.K.
10|STM|THL|TP2|Ostopalvelu|6000|12000|12000|Muut kulut (mm. ostopalveluna tiedonkeräystä piloteissa)
11|STM|THL|TP2|Tulot|50000|28000|28000|STM:n ympäristöterveyden hankerahoitus (terveydensuojeluohjelma)
12|THL|THL|TP2|Tulot|1|1|1|TULOLOPUT: THL:n budjettirahaa
13|STM|THL|TP3|Tulot|15000|37000|37000|STM:n ympäristöterveyden hankerahoitus (terveydensuojeluohjelma)
14|STM|THL|TP3|Palkka VT4|1|2|2|Erikoistutkija Jouni Tuomisto
15|STM|THL|TP3|Palkka VT5|0.5|0.5|0.5|Asiantuntija T.K.
16|EU|THL|TP3|Palkka VT7|2|3|3|Ympäristöinsinööri M.S., Kuopion edustaja pilotissa
28|EU|THL|TP3|Palkka VT7|1|1|1|TULOVASTA: Ympäristöinsinööri M.S., rahoitus Urgenche-projektista joka palvelee myös tätä työtä
17|THL|THL|TP3|Palkka VT4|1|1|1|TULOVASTA: THL:n budjettirahaa omien työntekijöiden palkkoihin (J.T.)
18|THL|THL|TP3|Tulot|1|1|1|TULOLOPUT: THL:n budjettirahaa
19|STM|THL|TP5|Palkka VT6|0|12|48|Toimintatapojen jalkauttamisprojektin koordinaattori N.N.
20|STM|THL|TP5|Tulot|0|35000|35000|STM:n ympäristöterveyden hankerahoitus
21|STM|THL|TP5|Tulot|1|1|1|TULOLOPUT: STM:n erillismääräraha toimintatapojen jalkauttamiseen
22|STM|THL|TP1|Ostopalvelu|2000|2000|2000|Tiedonkeruuta
23|STM|THL|TP3|Ostopalvelu|2000|2000|2000|Tiedonkeruuta
24|Kuopio|Kuopio|TP1|Palkka VT6|1|4|2|Kuopion kaupungin osallistuminen kartoitukseen
25|Kuopio|Kuopio|TP1|Palkka VT6|1|1|1|TULOVASTA: Kuopion rahoitus virkatyönä tehtävään osallistumiseen
</t2b>
===R-koodit budjetin ajamiseen===
'''Tämä koodi tuottaa vain tapahtumalistauksen ilman yhteenvetoja.
<rcode include="page:Projektinhallinta/hiekkalaatikko|name:budjetti" variables = "
name:työpakettirajaus|description:Tarkasteltava työpaketti|type:selection|options:'Kaikki';Kaikki työpaketit;'TP1';TP1;'TP2';TP2;'TP3';TP3;'TP5';TP5|default:Kaikki|
category:Voit rajata tarkastelusi yhteen työpakettiin tai vuoteen.|
name:vuosirajaus|description:Tarkasteltava vuosi|type:selection|options:'Kaikki';Kaikki vuodet;'2012';2012;'2013';2013;'2014;2014|default:'Kaikki vuodet'
">
out <- budjettilaskenta("Op_fi2912", rahoittaja = "STM", projekti = "Tekaisu", työpaketti = "TP1", työpaketti.add = "TP1", rahoittaja.add = "THL")
if(työpakettirajaus != "Kaikki") {out <- out[out$Työpaketti == työpakettirajaus, ]}
if(vuosirajaus != "Kaikki") {out <- out[out$Vuosi == vuosirajaus, ]}
print(xtable(out), type = 'html')
</rcode>


{{tuloslinkki}}
{{tuloslinkki}}

Nykyinen versio 2. huhtikuuta 2012 kello 14.35


R-koodi

Voit valita näytettävät yksityiskohdat ja myös rajata tarkastelusi yhteen työpakettiin tai vuoteen.

Mitkä jaottelut haluat näyttää yhteenvedossa?:
Projekti
Työpaketti
Vuosi
Laitos
Rahoittaja
Kustannuslaji

Tarkasteltavat työpaketit:
TP1
TP2
TP3
TP5

Tarkasteltava vuosi:

Voit testata budjettia tällä tilapäisellä lisätapahtumalla.

Työpaketti:

Rahoittaja:

Kustannuslaji:

Budjettiin lisättävä summa:

kuvaus.add:

+ Näytä koodi


{{#opasnet_base_link:Op_fi2912}}