Ero sivun ”Kohdistamo” versioiden välillä

Opasnet Suomista
Siirry navigaatioon Siirry hakuun
Ei muokkausyhteenvetoa
(uusi rakenne ja sen mukaiset ovariablet)
Rivi 3: Rivi 3:


<rcode name="answer" embed=1 showcode=0 label="Tallenna kirjaus" variables="
<rcode name="answer" embed=1 showcode=0 label="Tallenna kirjaus" variables="
name:työ|description:Minkä työn haluat kirjata?|type:selection|options:
name:työ|description:Minkä työn haluat kirjata?|type:selection|options:
'Näkemysverkko';Näkemysverkko;
  'Näkemysverkko';Näkemysverkko;
'Maahanmuutto';Maahanmuutto;
  'Maahanmuutto';Maahanmuutto;
'Yhtäköyttä';Yhtäköyttä;
  'Yhtäköyttä';Yhtäköyttä;
'Vesiapina';Vesiapina;
  'Vesiapina';Vesiapina;
'Videoblogi';Videoblogi;
  'Videoblogi';Videoblogi;
'Helsingin energiaratkaisu';Helsingin energiaratkaisu;
  'Helsingin energiaratkaisu';Helsingin energiaratkaisu;
'Yleiset Opasnet-työt';Yleiset Opasnet-työt;
  'Yleiset Opasnet-työt';Yleiset Opasnet-työt;
'Helsingin ilmastokartta 2';Helsingin ilmastokartta 2;
  'Helsingin ilmastokartta 2';Helsingin ilmastokartta 2;
'Oletus';Oletus;
  'Oletus';Oletus;
'Ulos';Ulos;
  'Ulos';Ulos;
'Muu';Muu
  'Muu';Muu
|default:'Näkemysverkko'|
|default:'Näkemysverkko'|
category:Henkilötietoa ei tarvitse antaa, jos olet kirjautuneena Opasnettiin|
category:Työjakson tiedot|
name:jaksoko|description:Mitä haluat kirjata?|type:selection|options:
name:jaksoko|description:Mitä haluat kirjata?|type:selection|options:
FALSE;Annan nykyhetken aloitusajaksi;
FALSE;Annan nykyhetken aloitusajaksi;
TRUE;Annan työn alku- ja loppuhetken käsin|
TRUE;Annan työn alku- ja loppuhetken käsin|
default:FALSE|
default:FALSE|
name:muutyö|description:Muu työ, mikä?|type:text|
name:muutyö|description:Muu työ, mikä?|type:text|
category:Listalta puuttuva työ|category_conditions:työ;'Muu'|
category:Listalta puuttuva työ|category_conditions:työ;'Muu'|
name:aika|description:Milloin aloitit?|type:datetime|
name:alku|description:Milloin aloitit?|type:datetime|
category:Jakson ajoitus|category_conditions:jaksoko;TRUE|
category:Jakson ajoitus|category_conditions:jaksoko;TRUE|
name:loppu|description:Mihin asti tämä työ jatkui?|type:datetime
name:loppu|description:Mihin asti tämä työ jatkui?|type:datetime
">
">
library(OpasnetUtils)
library(OpasnetUtils)


alkutyo <- ifelse(työ == 'Muu', muutyö, työ)
if(jaksoko) {
if(jaksoko) {
alku <- as.character(aika)
  alku <- as.numeric(alku)
loppu <- as.character(loppu)
  loppu <- as.numeric(loppu)
  lopputyo <- "Ulos"
} else {
} else {
alku <- as.character(Sys.time())
  alku <- as.numeric(Sys.time())
loppu <- NA
  loppu <- NULL
  lopputyo <- NULL
}
}


out <- data.frame(
out <- data.frame(
Työ = ifelse(työ == 'Muu', muutyö, työ),
  Timestamp = Sys.time(),
Henkilö = wiki_username,
  Work = c(alkutyo, lopputyo),
Aika = alku,
  Person = wiki_username,
Loppu = loppu,
  Result = c(alku, loppu)
Result = 0
)
)
if (jaksoko && alku > loppu){
cat("Kirjaus epäonnistui, aloitusaika on myöhäisempi kuin lopetusaika.\n")
cat("Tarkasta aika ja yritä uudelleen.")
} else{
opbase.upload(input = out, ident = "Op_fi3948", name = "Kohdistamo", subset = "Kirjaukset",
obj_type = "variable", act_type = "append", language = "fin", who = wiki_username)
cat("Kirjaus onnistui. Nämä tiedot tallennettiin.\n")
}


opbase.upload(input = out, ident = "Op_fi3948", name = "Kohdistamo", subset = "Kirjaukset2",
      obj_type = "variable", act_type = "append", language = "fin", who = wiki_username)
  cat("Kirjaus onnistui. Nämä tiedot tallennettiin.\n")
#}


oprint(out[colnames(out) != "Result"])
out$Result <- as.character(as.POSIXct(out$Result, origin="1970-01-01 00:00:00"))
oprint(out)
</rcode>
</rcode>
 
 
 
 
 
 
<rcode graphics=0 name="output" embed=0 showcode=0 label="Hae kirjauksia" variables="
<rcode graphics=0 name="output" embed=0 showcode=0 label="Hae kirjauksia" variables="
category:Hae kirjauksia|
category:Hae kirjauksia|
name:alku|description:Seurantajakson alku|type:date|default:2014-02-06|
name:alku|description:Seurantajakson alku|type:date|default:2018-06-01|
name:loppu|description:Seurantajakson loppu|type:date|
name:loppu|description:Seurantajakson loppu|type:date|
name:tekijä|description:Työntekijän käyttäjätunnus|type:text|default:Kaikki|
name:tekija|description:Työntekijän käyttäjätunnus|type:text|default:Kaikki|
name:projekti|description:Projekti|type:selection|options:
name:projekti|description:Projekti|type:selection|options:
'Kaikki';Kaikki;
'Kaikki';Kaikki;
'Näkemysverkko';Näkemysverkko:
'Näkemysverkko';Näkemysverkko:
'STM raportointi ja laskutus';STM raportointi ja laskutus;
'STM raportointi ja laskutus';STM raportointi ja laskutus;
'EU raportointi ja laskutus';EU raportointi ja laskutus;
'EU raportointi ja laskutus';EU raportointi ja laskutus;
'TEKES raportointi ja laskutus';TEKES raportointi ja laskutus;
'TEKES raportointi ja laskutus';TEKES raportointi ja laskutus;
'SA raportointi ja laskutus';SA raportointi ja laskutus;
'SA raportointi ja laskutus';SA raportointi ja laskutus;
'ESR/EAKR raportointi ja laskutus';ESR/EAKR raportointi ja laskutus;
'ESR/EAKR raportointi ja laskutus';ESR/EAKR raportointi ja laskutus;
'MUUT  raportointi ja laskutus';MUUT  raportointi ja laskutus;
'MUUT raportointi ja laskutus';MUUT raportointi ja laskutus;
'Budjettirahoitus';Budjettirahoitus;
'Budjettirahoitus';Budjettirahoitus;
'Tilintarkastus';Tilintarkastus;
'Tilintarkastus';Tilintarkastus;
'Yleinen projektinhallinta ja neuvonta';Yleinen projektinhallinta ja neuvonta;
'Yleinen projektinhallinta ja neuvonta';Yleinen projektinhallinta ja neuvonta;
'Kehittäminen';Kehittäminen;
'Kehittäminen';Kehittäminen;
'Koulutus';Koulutus;
'Koulutus';Koulutus;
'Sisäiset palaverit';Sisäiset palaverit;
'Sisäiset palaverit';Sisäiset palaverit;
'Vuosibudjetointi';Vuosibudjetointi;
'Vuosibudjetointi';Vuosibudjetointi;
'Tilinpäätös';Tilinpäätös;
'Tilinpäätös';Tilinpäätös;
'Pneumokokkirokote';Pneumokokkirokote;
'Pneumokokkirokote';Pneumokokkirokote;
'LVM-tulevaisuuskatsaus';LVM-tulevaisuuskatsaus;
'LVM-tulevaisuuskatsaus';LVM-tulevaisuuskatsaus;
'H2O';H2O;
'H2O';H2O;
'Helsingin ilmastokartta';Helsingin ilmastokartta;
'Helsingin ilmastokartta';Helsingin ilmastokartta;
'Helsingin ilmastokartta 2';Helsingin ilmastokartta 2;
'Helsingin ilmastokartta 2';Helsingin ilmastokartta 2;
'Hyvinvointi kestävän kasvun perustana';Hyvinvointi kestävä kasvun perustana;
'Hyvinvointi kestävän kasvun perustana';Hyvinvointi kestävä kasvun perustana;
'IEHIAS';IEHIAS;
'IEHIAS';IEHIAS;
'Avoimen tieteen tiekartta';Avoimen tieteen tiekartta;
'Avoimen tieteen tiekartta';Avoimen tieteen tiekartta;
'Helsingin energiaratkaisu';Helsingin energiaratkaisu;
'Helsingin energiaratkaisu';Helsingin energiaratkaisu;
'Yleiset Opasnet-työt';Yleiset Opasnet-työt;
'Yleiset Opasnet-työt';Yleiset Opasnet-työt;
'Yhtäköyttä';Yhtäköyttä;
'Yhtäköyttä';Yhtäköyttä;
'Maahanmuutto';Maahanmuutto;
'Maahanmuutto';Maahanmuutto;
'Vesiapina';Vesiapina;
'Vesiapina';Vesiapina;
'Oletus';Oletus;
'Oletus';Oletus;
'Muu';Muu
'Muu';Muu
|default:'Kaikki'
|default:'Kaikki'
">
">
library(OpasnetUtils)
library(OpasnetUtils)
Rivi 102: Rivi 101:
objects.latest("Op_en6007", code_name = "answer") # We need timing
objects.latest("Op_en6007", code_name = "answer") # We need timing


kirjausajat <- function(alku, loppu, tekijä, projekti){
kirjaukset <- Ovariable(
dat <- opbase.data("Op_fi3948", subset = 'Kirjaukset')
  "kirjaukset",
poistot <- opbase.data("Op_fi3948", subset = 'Kirjauspoistot')
  ddata = "Op_fi3948", subset="Kirjaukset2",getddata=FALSE
)
# 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])
kirjauspoistot <- Ovariable(
dat <- dat[!1:nrow(dat) %in% pois , colnames(dat) != "Result"]
  "kirjauspoistot",
  ddata="Op_fi3948", subset="Kirjauspoistot2", getddata=FALSE
)


kirjausajat <- Ovariable(
  "kirjausajat",
  dependencies = data.frame(
    Name=c(
      "kirjaukset",
      "kirjauspoistot",
      "alku",
      "loppu",
      "tekija",
      "projekti"
    ),
    Ident=c(
      "Op_fi3948/alusta", # [[Kohdistamo]]
      "Op_fi3948/alusta", # [[Kohdistamo]]
      NA,NA,NA,NA
    )
  ),
  formula = function(...) {


#tuntikirjaus <- opbase.data("Op_fi3950.tuntikirjaus")
    dat <- kirjaukset[-na.omit(result(kirjauspoistot)) , ]
#työtehtävät <- opbase.data("Op_fi3950.tyotehtavat")
    if(is.character(alku)) alku <- as.numeric(as.POSIXct(alku))
#työsuunnitelma <- opbase.data("Op_fi3950.tyosuunnitelma")
    if(is.character(loppu)) loppu <- as.numeric(as.POSIXct(loppu))
#tuntikirjaus <- tuntikirjaus[colnames(tuntikirjaus) != "Obs"]
   
#työtehtävät <- työtehtävät[colnames(työtehtävät) != "Obs"]
    #tuntikirjaus <- opbase.data("Op_fi3950.tuntikirjaus")
#työsuunnitelma <- työsuunnitelma[colnames(työsuunnitelma) != "Obs"]
    #työtehtävät <- opbase.data("Op_fi3950.tyotehtavat")
#colnames(työsuunnitelma)[colnames(työsuunnitelma) == "Result"] <- "Loppu"
    #työsuunnitelma <- opbase.data("Op_fi3950.tyosuunnitelma")
#työsuunnitelma <- data.frame(työsuunnitelma, Henkilö = "Jouni")
    #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"]
if(tekijä!='Kaikki') dat <- dat[dat$Henkilö %in% tekijä , ]
    #colnames(työsuunnitelma)[colnames(työsuunnitelma) == "Result"] <- "Loppu"
    #työsuunnitelma <- data.frame(työsuunnitelma, Henkilö = "Jouni")
   
molemmat <- dat[dat$Loppu != "NA" , ]
    if(tekija!='Kaikki') {
työ <- dat[dat$Loppu == "NA" , ]
      tekija <- gsub("\\s", "", unlist(strsplit(tekija, ",")))
ulos <- työ[työ$Työ == "Ulos" , ]
      dat <- dat[dat$Person %in% tekija , ]
työ <- työ[työ$Työ != "Ulos" , ]
    }
#oprint(työ)
    res <- result(dat)
#oprint(ulos)
    dat <- dat[order(dat$Person, res),]
if (length(työ$Työ) > length(ulos$Työ)) {työ <- työ[-((nrow(ulos)+1):nrow(työ)), ]  
    dat$Duration <- c(res[2:length(res)] - res[1:(length(res)-1)], 0) # Tämä pitää tehdä joka henkilölle erikseen.
työ$Loppu <- ulos$Aika
   
} else työ$Loppu <- ulos$Aika
    if(projekti!="Kaikki") dat <- dat[dat$Work == projekti , ]
    dat <- dat[result(dat) >= alku & result(dat) <= loppu +3600*24 , ]
työ <- rbind(työ, molemmat)
   
#    molemmat <- dat[dat$Loppu != "NA" , ]
#    työ <- dat[dat$Loppu == "NA" , ]
#    ulos <- työ[työ$Työ == "Ulos" , ]
#    työ <- työ[työ$Työ != "Ulos" , ]
    #oprint(työ)
    #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)
    #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()
    #
    return(dat)
  }
)


if (projekti != "Kaikki") työ <- työ[työ$Työ == projekti , ]
kirjausajat <- EvalOutput(kirjausajat)
result(kirjausajat) <- as.character(as.POSIXct(result(kirjausajat), origin="1970-01-01 00:00:00"))
oprint(kirjausajat@output)


työ$Aika <- as.POSIXct(työ$Aika, tz = 'Europe/Helsinki')
#kirjausajat(alku, loppu, tekija, projekti)
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)




Rivi 202: Rivi 216:
# olisi yleispätevä, ja parametrin arvo kerrotaan projektikohtaisessa koodissa.
# olisi yleispätevä, ja parametrin arvo kerrotaan projektikohtaisessa koodissa.
</rcode>
</rcode>
 
 
 
 
 
 
 
 
<rcode name="answer" embed=1 showcode=0 label="Poista kirjaus" variables="
<rcode name="answer" embed=1 showcode=0 label="Poista kirjaus" variables="
name:nro|description:Poistettavan kirjauksen Obs|type:text|
name:nro|description:Poistettavan kirjauksen rivinumero (Obs)|type:text|
category:Kirjauksen poisto|
category:Kirjauksen poisto|
name:syy|description:Poiston syy|type:text
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
nro <- gsub("\\s", "", unlist(strsplit(nro, ","))) # Pilkotaan pilkusta ja poistetaan alku- ja loppuvälilyönnit


dat <- data.frame(Kirjausnro = nro, Syy = syy, Result = 1)
dat <- data.frame(
  Timestamp = Sys.time(),
  User = wiki_username,
  Syy = syy,
  Result = nro
)


opbase.upload(input = dat, ident = "Op_fi3948", name = "Kohdistamo", subset = "Kirjauspoistot",  
opbase.upload(input = dat, ident = "Op_fi3948", name = "Kohdistamo", subset = "Kirjauspoistot2",  
act_type = "append", language = "fin", who = wiki_username
              act_type = "append", language = "fin", who = wiki_username
)
)


Rivi 227: Rivi 246:


</rcode>
</rcode>


* Katso ohjeita sivulta [[Kohdistamo/Ohje]]
* Katso ohjeita sivulta [[Kohdistamo/Ohje]]

Versio 29. kesäkuuta 2018 kello 13.37


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


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