Ero sivun ”Kohdistamo” versioiden välillä

Opasnet Suomista
Siirry navigaatioon Siirry hakuun
(uusi rakenne ja sen mukaiset ovariablet)
(bugs fixed)
Rivi 1: Rivi 1:
{{metodi}}
{{metodi}}
[[op_en:Timetracker]]
[[op_en:Timetracker]]
== Kirjaukset ==


<rcode name="answer" embed=1 showcode=0 label="Tallenna kirjaus" variables="
<rcode name="answer" embed=1 showcode=0 label="Tallenna kirjaus" variables="
Rivi 49: Rivi 51:
opbase.upload(input = out, ident = "Op_fi3948", name = "Kohdistamo", subset = "Kirjaukset2",  
opbase.upload(input = out, ident = "Op_fi3948", name = "Kohdistamo", subset = "Kirjaukset2",  
       obj_type = "variable", act_type = "append", language = "fin", who = wiki_username)
       obj_type = "variable", act_type = "append", language = "fin", who = wiki_username)
  cat("Kirjaus onnistui. Nämä tiedot tallennettiin.\n")
#}


cat("Kirjaus onnistui. Nämä tiedot tallennettiin.\n")
out$Result <- as.character(as.POSIXct(out$Result, origin="1970-01-01 00:00:00"))
out$Result <- as.character(as.POSIXct(out$Result, origin="1970-01-01 00:00:00"))
oprint(out)
oprint(out)
</rcode>
</rcode>
 
    
    
    
    
Rivi 98: Rivi 98:
">
">
library(OpasnetUtils)
library(OpasnetUtils)
library(ggplot2)
#library(ggplot2)
objects.latest("Op_en6007", code_name = "answer") # We need timing
objects.latest("Op_fi3948", code_name = "alusta") # kirjausajat
 
kirjausajat <- EvalOutput(kirjausajat)
result(kirjausajat) <- as.character(as.POSIXct(result(kirjausajat), origin="1970-01-01 00:00:00"))
oprint(kirjausajat@output)
 
#ggplot(kirjausajat, 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()
</rcode>
 
 
 
 
<rcode name="answer" embed=1 showcode=0 label="Poista kirjaus" variables="
name:nro|description:Poistettavan kirjauksen rivinumero (Obs)|type:text|
category:Kirjauksen poisto|
name:syy|description:Poiston syy|type:text
">
 
library(OpasnetUtils)
 
nro <- gsub("\\s", "", unlist(strsplit(nro, ","))) # Pilkotaan pilkusta ja poistetaan alku- ja loppuvälilyönnit
 
dat <- data.frame(
  Timestamp = Sys.time(),
  User = wiki_username,
  Syy = syy,
  Result = nro
)
 
opbase.upload(input = dat, ident = "Op_fi3948", name = "Kohdistamo", subset = "Kirjauspoistot2",
              act_type = "append", language = "fin", who = wiki_username
)
 
cat("Nämä kirjaukset poistettu onnistuneesti.\n")
 
oprint(dat)
 
</rcode>
 
* Katso ohjeita sivulta [[Kohdistamo/Ohje]]
* {{tuloslinkki}}
 
== Alusta muuttujat ==
 
<rcode name="alusta" label="Alusta ovariablet kirjaukset, kirjauspoistot, kirjausajat" embed=1>
# Tämä on koodi Op_fi3948/alusta sivulla [[Kohdistamo]]
 
library(OpasnetUtils)


kirjaukset <- Ovariable(
kirjaukset <- Ovariable(
Rivi 125: Rivi 177:
       "Op_fi3948/alusta", # [[Kohdistamo]]
       "Op_fi3948/alusta", # [[Kohdistamo]]
       "Op_fi3948/alusta", # [[Kohdistamo]]
       "Op_fi3948/alusta", # [[Kohdistamo]]
       NA,NA,NA,NA
       "Op_fi3948/oletukset", # [[Kohdistamo]]
      "Op_fi3948/oletukset", # [[Kohdistamo]]
      "Op_fi3948/oletukset", # [[Kohdistamo]]
      "Op_fi3948/oletukset" # [[Kohdistamo]]
     )
     )
   ),
   ),
   formula = function(...) {
   formula = function(...) {
 
   
     dat <- kirjaukset[-na.omit(result(kirjauspoistot)) , ]
     dat <- kirjaukset[-na.omit(result(kirjauspoistot)) , ]
     if(is.character(alku)) alku <- as.numeric(as.POSIXct(alku))
     alku <- as.numeric(as.POSIXct(alku))
     if(is.character(loppu)) loppu <- as.numeric(as.POSIXct(loppu))
     loppu <- as.numeric(as.POSIXct(loppu))
      
      
     #tuntikirjaus <- opbase.data("Op_fi3950.tuntikirjaus")
     #tuntikirjaus <- opbase.data("Op_fi3950.tuntikirjaus")
Rivi 149: Rivi 204:
     res <- result(dat)
     res <- result(dat)
     dat <- dat[order(dat$Person, res),]
     dat <- dat[order(dat$Person, res),]
     dat$Duration <- c(res[2:length(res)] - res[1:(length(res)-1)], 0) # Tämä pitää tehdä joka henkilölle erikseen.
     dat$Duration <- c(res[2:length(res)] - res[1:(length(res)-1)], 0) / 3600
    # This removes the last entry from each person's duration because that is calculated wrongly.
    dat$Duration[c(match(unique(dat$Person),dat$Person)-1,length(dat$Person))] <- 0
      
      
     if(projekti!="Kaikki") dat <- dat[dat$Work == projekti , ]  
     if(projekti!="Kaikki") dat <- dat[dat$Work == projekti , ]  
     dat <- dat[result(dat) >= alku & result(dat) <= loppu +3600*24 , ]
     res <- result(dat)
      
    dat <- dat[res >= alku & res <= loppu +3600*24 , ]
#    molemmat <- dat[dat$Loppu != "NA" , ]
     if(nrow(dat@output)==0) {
#    työ <- dat[dat$Loppu == "NA" , ]
      warning("No rows to display\n")
#    ulos <- työ[työ$Työ == "Ulos" , ]
      return(dat)
#    työ <- työ[työ$Työ != "Ulos" , ]
     }
    #oprint(työ)
     tyoaika <- aggregate(dat@output["Duration"], dat@output[c("Person","Work")], sum)
    #oprint(ulos)
#    if (length(työ$Työ) > length(ulos$Työ)) {työ <- työ[-((nrow(ulos)+1):nrow(työ)), ]
#    työ$Loppu <- ulos$Aika
#    } else työ$Loppu <- ulos$Alku
   
#    työ <- rbind(työ, molemmat)
      
#    työaika <- (sum(as.numeric(työ$Loppu))-sum(as.numeric(työ$Alku)))
     tyoaika <- aggregate(dat["Duration"], dat["Person"], sum)
#    työaika <- (round(työaika/3600, digits = 2))
   
    cat("Valitulla välillä tehty työaika on yhteensä ", tyoaika, " tuntia. \n")
   
   
    result(dat) <- as.POSIXct(result(dat), origin = "1970-01-01 00:00:00")
    oprint(dat)
    #oprint(työsuunnitelma)
    #oprint(työtehtävät)
   
    #out <- poistot
    #oprint(out)
   
      
      
     #tuntikirjaus <- timing(tuntikirjaus, timecol = c("Aika", "Loppu"), weeks = 6)
     cat("Valitulla välillä tehty työaika yhteensä tunteina: \n")
     #timeline <- makeTimeline(tuntikirjaus)
     oprint(tyoaika[tyoaika$Work!="Ulos",])
    #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()
    #
     return(dat)
     return(dat)
   }
   }
)
)


kirjausajat <- EvalOutput(kirjausajat)
objects.store(kirjaukset, kirjauspoistot, kirjausajat)
result(kirjausajat) <- as.character(as.POSIXct(result(kirjausajat), origin="1970-01-01 00:00:00"))
cat("Ovariablet kirjaukset, kirjauspoistot ja kirjausajat tallennettu.\n")
oprint(kirjausajat@output)
</rcode>
 
#kirjausajat(alku, loppu, tekija, projekti)


<rcode name="oletukset" label="Alusta oletusarvot alku, loppu, tekija, projekti" embed=1>
# Tämä on koodi Op_fi3948/oletukset sivulla [[Kohdistamo]]


#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.
</rcode>
 
 
 
 
<rcode name="answer" embed=1 showcode=0 label="Poista kirjaus" variables="
name:nro|description:Poistettavan kirjauksen rivinumero (Obs)|type:text|
category:Kirjauksen poisto|
name:syy|description:Poiston syy|type:text
">
 
library(OpasnetUtils)
library(OpasnetUtils)


nro <- gsub("\\s", "", unlist(strsplit(nro, ","))) # Pilkotaan pilkusta ja poistetaan alku- ja loppuvälilyönnit
alku <- "2018-06-01"
 
loppu <- "2099-01-01"
dat <- data.frame(
tekija <- "Kaikki"
  Timestamp = Sys.time(),
projekti <- "Kaikki"
  User = wiki_username,
  Syy = syy,
  Result = nro
)
 
opbase.upload(input = dat, ident = "Op_fi3948", name = "Kohdistamo", subset = "Kirjauspoistot2",
              act_type = "append", language = "fin", who = wiki_username
)
 
cat("Nämä kirjaukset poistettu onnistuneesti.\n")
 
oprint(dat)


objects.store(alku, loppu, tekija, projekti)
cat("Vektorit alku, loppu, tekija ja projekti tallennettu.\n")
</rcode>
</rcode>
* Katso ohjeita sivulta [[Kohdistamo/Ohje]]
* {{tuloslinkki}}


== Aikakoneen laskenta ==
== Aikakoneen laskenta ==

Versio 29. kesäkuuta 2018 kello 16.41


Kirjaukset

Työjakson tiedot

Minkä työn haluat kirjata?:

Mitä haluat kirjata?:

Listalta puuttuva työ

Muu työ, mikä?:

Jakson ajoitus

Milloin aloitit?:
..-::

Mihin asti tämä työ jatkui?:
..-::

+ Näytä koodi


Hae kirjauksia

Seurantajakson alku:
..

Seurantajakson loppu:
..

Työntekijän käyttäjätunnus:

Projekti:

+ Näytä koodi



Kirjauksen poisto

Poistettavan kirjauksen rivinumero (Obs):

Poiston syy:

+ Näytä koodi


Alusta muuttujat

+ Näytä koodi

+ Näytä koodi

Aikakoneen laskenta

Tässä on siistitty ja dokumentoitu versio Aikakoneen makeTimeline-funktiosta, joka ottaa sisäänsä työajan alku- ja loppuaikoja ja tuottaa aikajanan. Funktion olennainen lisäarvo on siinä, että sille voi antaa päällekkäisiä ajanjaksoja, ja se korvaa vanhemmat kirjaukset (eli ylempänä taulukossa olevat) uudemmilla, jos niiissä on päällekkäisyyksiä. Toinen lisäarvo on se, että se automaattisesti käsittelee jokaisen henkilön ajankäyttöä erikseen, mutta muiden indeksien suhteen se vain periyttää tiedot aikajanalle. Muita indeksejä voi siis käyttää tarpeen mukaan.

----#: . Kehityskohteita: tarvitaanko koskaan tilannetta, jossa henkilösarakkeita onkin useita? Ei liene tärkeä, vaan tarvittaessa tämä toteutetaan luomalla tämmöinen sarake etukäteen. --Jouni Tuomisto (keskustelu) 15. heinäkuuta 2014 kello 08.28 (UTC) (type: truth; paradigms: science: comment)

+ Näytä koodi