Skip to content

Instantly share code, notes, and snippets.

@savikko
Last active November 12, 2021 19:18
Show Gist options
  • Save savikko/866fe1097f2c74bbcd42a8e97abd8798 to your computer and use it in GitHub Desktop.
Save savikko/866fe1097f2c74bbcd42a8e97abd8798 to your computer and use it in GitHub Desktop.
Työvuorot Titaniasta Google-kalenteriin

Ohjeet

Tämä ohje pätee, jos käytössä on Titanian "vain luku" -tilassa toimiva uudehko palvelu.

Jos sattuu olemaan niin, että sinulla onkin pääsy vain "vanhanmalliseen" Titaniaan niin katso tämä sivu ensin: https://savikko.github.io/titania-to-gcal/

Alkuvalmistelut

Ota ensin allaoleva titania-to-gcal.js -teksti talteen leikepöydälle ja liitä se vaikkapa Muistio-ohjelmaan. Huomaa, koko teksti pitää olla kopioituna (ensimmäisenä rivinä var calItem.. ja viimeisenä rivinä save_csv(calItem);).

Huomioi, että siinä on alussa ensin ne työvuorokoodit, jotka luokitellaan vapaapäiviksi. Esimerkkinä T, L ja V.

Muokkaa sitä riviä siten, että siinä on oikeat vapaapäiväkoodit. Jos vapaapäiväkoodisi olisivat vaikkapa K ja M niin rivin sisältö olisi:

var dayOffCodes = ["K", "M"];

Tämän jälkeen sinulla on omaan käyttöösi suhteellisen toimiva koodinpätkä. Tallenna se johonkin sopivaan paikkaan.

Käyttö pitkän kaavan mukaan

Hae tämän jälkeen työvuorosi tiedostona:

  1. Avaa Titania ja kirjaudu sisään
  2. Mene sille sivulle (viikko/kuukausi), jonka haluat kalenteriisi
  3. Avaa kehittäjätyökalujen konsoli (Chromessa esimerkiksi Lisää työkaluja -> Kehittäjän työkalut)
  4. Liitä oma koodisi konsoliin ja paina Enter

Lopputuloksena tietokoneellesi tallentuu vuorot.csv -tiedosto.

Tiedoston lataaminen Google Kalenteriin

Avaa Google-kalenterisi, ota sieltä Asetukset ja sieltä Tuo ja Vie. Paina Valitse tiedosto tietokoneelta ja valitse vuorot.csv. Valitse haluamasi kalenteri, johon tapahtumat tuodaan ja paina Tuo.

Huom! Jos tuot saman tiedoston (tai identtisiä työvuoroja sisältäviä) uusiks, on Google Kalenteri niin fiksu, että se ei tuo sieltä duplikaatteja.

Lisääminen kirjanmerkkipalkkiin

  1. Mene sivulle https://mrcoles.com/bookmarklet/
  2. Liitä oma koodisi siihen missä lukee Enter your javascript code here:
  3. Kirjoita nimeksi vaikkapa Titania-GCal
  4. Älä ruksaa mitään valintoja
  5. Paina Convert to bookmarklet
  6. Vedä sininen 'Titania-Gcal' kirjanmerkkipalkkiisi

Tämän jälkeen voit painaa suoraan Titania-GCal työvuorosivulla ja vuorot.csv tallentuu koneellesi.

Huomioita

  • Jokainen työvuoro on "koko päivän tapahtuma" - tämä on todennäköisesti selkeämpää kuin kellonajoille määritelty tapahtuma
  • Yövuorojen kanssa saattaa olla hieman huojuntaa riippuen erilaisista kirjauskäytännöistä
  • Voi olla, että tämä ei toimi Internet Explorerilla. Jos käytät ko selainta, lopeta ja vaihda Chromeen / Firefoxiin tai vastaavaan
var calItem =
"Start Date, Start Time, End Date, End Time, All Day Event, Subject\n";
var result = document.getElementsByClassName("panel");
var weekInfo = angular.element(result).scope().weekInfo;
var dayOffCodes = ["T", "L", "V"];
var noMoreShifts = {};
function parseDate(dateString) {
justDate = dateString.split(" ")[1];
day = justDate.split(".")[0];
month = justDate.split(".")[1];
year = justDate.split(".")[2];
return month + "/" + day + "/" + year;
}
function save_csv(data) {
var hiddenElement = document.createElement("a");
hiddenElement.href = "data:text/csv;charset=utf-8," + encodeURI(data);
hiddenElement.target = "_blank";
hiddenElement.download = "vuorot.csv";
hiddenElement.click();
}
try {
weekInfo.forEach(function(weekItem) {
weekItem.eventsOfPersonByDateList.forEach(function(dayItem) {
startDate = parseDate(dayItem.fullDayDate);
startTime = "00:00";
endDate = parseDate(dayItem.fullDayDate);
endTime = "00:00";
allDayEvent = "True";
calItem =
calItem +
startDate +
"," +
startTime +
"," +
endDate +
"," +
endTime +
"," +
allDayEvent +
",";
dayItem.eventDataList.forEach(function(shiftItem) {
if (shiftItem == null) {
if (shiftItemWasNull == true) {
throw noMoreShifts;
} else {
calItem = calItem + "Nukkumapäivä\n";
shiftItemWasNull = true;
}
} else {
shiftItemWasNull = false;
if (dayOffCodes.includes(shiftItem.tCode)) {
calItem = calItem + "Vapaa (" + shiftItem.tCode + ")\n";
} else {
calItem =
calItem +
shiftItem.beginTime +
" - " +
shiftItem.endTime +
" (" +
shiftItem.tCode +
")\n";
}
}
});
});
});
} catch (e) {
if (e !== noMoreShifts) {
throw e;
} else {
calItem = calItem.replace(/\n.*$/, "");
calItem = calItem.replace(/\n.*$/, "");
}
}
save_csv(calItem);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment