+ Näytä koodi- Piilota koodi
library(OpasnetUtils)
library(ggplot2)
objects.latest("Op_en6007", code_name = "answer") # We need timing
kirjausajat <- function(alku, loppu, tekijä, projekti){
dat <- opbase.data("Op_fi3948", subset = 'Kirjaukset')
poistot <- opbase.data("Op_fi3948", subset = 'Kirjauspoistot')
# pois <- as.numeric(as.character(poistot$Kirjausnro)) # Varoitus nousee tästä, kun yritetään muuttaa numericiksi ei-numeerinen.
# Varoitus tulee arvosta k1 mutta tällä ei ole käytännön merkitystä. Varoitus ei ole virhe eikä toiminta keskeydy.
#
# pois <- subset(pois, pois > 0)
# dat <- dat[-pois , colnames(dat) != "Result"] # Tässä kohti voisi käyttää %in%iä, mutta dat[dat %in% poistot$Kirjausnro , ]
# # ei ainakaan toiminut. En siis tiedä, miten kutsua dat:in rivinumerosaraketta.
#
# dat on data.frame ja siksi et voi käyttää sitä vertailussa vektoriin. Sen sijaan 1:nrow(dat) tuottaa juoksevan rivinumeroinnin dat:lle.
# Kirjausnro puolestaan pitää muuttaa numeroiksi, jotta sitä voi verrata rivinumeroihin. Suositeltavampi tyyli on tämä:
pois <- as.numeric(levels(poistot$Kirjausnro)[poistot$Kirjausnro])
dat <- dat[!1:nrow(dat) %in% pois , colnames(dat) != "Result"]
#tuntikirjaus <- opbase.data("Op_fi3950.tuntikirjaus")
#työtehtävät <- opbase.data("Op_fi3950.tyotehtavat")
#työsuunnitelma <- opbase.data("Op_fi3950.tyosuunnitelma")
#tuntikirjaus <- tuntikirjaus[colnames(tuntikirjaus) != "Obs"]
#työtehtävät <- työtehtävät[colnames(työtehtävät) != "Obs"]
#työsuunnitelma <- työsuunnitelma[colnames(työsuunnitelma) != "Obs"]
#colnames(työsuunnitelma)[colnames(työsuunnitelma) == "Result"] <- "Loppu"
#työsuunnitelma <- data.frame(työsuunnitelma, Henkilö = "Jouni")
dat <- dat[dat$Henkilö %in% tekijä , ]
molemmat <- dat[dat$Loppu != "NA" , ]
työ <- dat[dat$Loppu == "NA" , ]
ulos <- työ[työ$Työ == "Ulos" , ]
työ <- työ[työ$Työ != "Ulos" , ]
if (length(työ$Työ) > length(ulos$Työ)) {työ <- työ[-((nrow(ulos)+1):nrow(työ)), ]
työ$Loppu <- ulos$Aika
} else työ$Loppu <- ulos$Aika
työ <- rbind(työ, molemmat)
if (projekti != "Kaikki") työ <- työ[työ$Työ == projekti , ]
työ$Aika <- as.POSIXct(työ$Aika, tz = 'Europe/Helsinki')
työ$Loppu <- as.POSIXct(työ$Loppu, tz = 'Europe/Helsinki')
työ <- työ[
työ$Aika >= as.POSIXct(alku, tz = 'Europe/Helsinki') &
työ$Aika <= as.POSIXct(loppu, tz = 'Europe/Helsinki') +3600*24 ,
]
työaika <- (sum(as.numeric(työ$Loppu))-sum(as.numeric(työ$Aika)))
työaika <- (round(työaika/3600, digits = 2))
cat("Valitulla välillä tehty työaika on yhteensä ", työaika, " tuntia. \n")
työ$Aika <- as.character(työ$Aika)
työ$Loppu <- as.character(työ$Loppu)
oprint(työ)
#oprint(työsuunnitelma)
#oprint(työtehtävät)
#out <- poistot
#oprint(out)
#tuntikirjaus <- timing(tuntikirjaus, timecol = c("Aika", "Loppu"), weeks = 6)
#timeline <- makeTimeline(tuntikirjaus)
#timeline <- timeline[order(timeline$Time) , ]
#timeline$Time[nrow(timeline)] <- max(timeline$Time, na.rm = TRUE)
#for(i in 1:(nrow(timeline)-1)) {timeline$end[i] <- timeline$Time[i+1]}
#timeline[nrow(timeline), "end"] <- NA
#timeline$end <- as.POSIXct(timeline$end, origin = "1970-01-01")
#ggplot(timeline, aes(
# xmin = Time, # as.Date(as.character(Start))
# xmax = end, # as.Date(as.character(End)) + 2
# ymin = as.numeric(Henkilö),
# ymax = as.numeric(Henkilö) + 1,
# fill = Työ)) + geom_rect()
#
}
if (tekijä != "Kaikki") tekijä <- gsub("\\s", "", unlist(strsplit(tekijä, ","))) else tekijä <- c("Sharp", "Heta", "Pauli", "Jaakko", "Mori", "Julia")
kirjausajat(alku, loppu, tekijä, projekti)
#objects.store(output, kirjausajat)
# Periaatteena on kaksi koodia: initiate luo funktiot, ovariablet ja muut yleiskäyttöiset oliot ja tallentaa ne serverille.
# Käyttökoodi answer kutsuu noita olioita ja suorittaa niillä tapauskohtaisia toimenpiteitä. Koska tämä on tapauskohtainen
# koodi, ei kannata tallentaa olioita (ethän kutsu niitä missään). Kunhan koodi on vakiintunut, kannattaa se jakaa
# yleiseen ja projektikohtaiseen. Esimerkiksi tekijöiden tunnukset kannattaa ottaa funktioon parametriksi, jotta funktio
# olisi yleispätevä, ja parametrin arvo kerrotaan projektikohtaisessa koodissa.
| |