% .tex-tiedosto projektin dokumenttien latomiseksi.

% Kirjoitelmaluokka, tässä käytetään projektien projdoc-luokkaa.
\documentclass[twoside]{projdoc}

\usepackage{paralist}
\usepackage{alltt}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{enumitem}
\usepackage{tikz}
\usepackage{gensymb}
\usepackage{comment}
\usetikzlibrary{positioning,shapes,shadows,arrows}

\setlist[enumerate]{leftmargin=2cm}


\newcommand{\note}[1]{\emph{{\bf Huom.:} {\small#1}}}
\newcommand{\transl}[1]{(engl. \emph{#1})}
\newcommand{\refwithpage}[1]{
	\ref{#1}
	\ifthenelse{\equal{\arabic{page}}{\pageref{#1}}}
	{}
	{(s. \pageref{#1})}
}


% Projektin nimi
\project{Kepler}

% Luottamuksellisuus: käytä termiä 'Luottamuksellinen' tai 'Julkinen'
\publicity{Julkinen}

% Versionumero: numerointikäytäntö on projektikohtainen
\version{0.1.0}

% Dokumentin nimi
\title{Vaatimusmäärittely}

% Tekijät: huomaa aakkosjärjestys sukunimen mukaan
\author{Joonas Konki}
    {Anu Koskela}
    {Mikko Kuhno}
    {Henrik Paananen}
    {Atte Räty}
% Puhelinnumerot: tekijöitä vastaava järjestys!
\authorphones{044-9975150}{040-7255948}{040-9105675}{044-5885874}{040-5734898}
% Sähköpostiosoitteet: tekijöitä vastaava järestys!
\authoremails{joonas.konki@jyu.fi}
    {anu.k.koskela@student.jyu.fi}
    {mikko.kuhno@gmail.com}
    {henrik.j.paananen@student.jyu.fi}
    {atte.t.raty@student.jyu.fi}
% Etu- ja sukunimen alkukirjaimet: tekijöitä vastaava järjestys!
\authorinitials{JK}{AK}{MK}{HP}{AR}

% Tiivistelmä dokumentista: tämä ei siis ole tiivistelmä projektista,
% vaan tämän ko. dokumentin tarkoituksesta.
\docabstract{Kepler-projekti kehittää Jyväskylän yliopiston fysiikan laitokselle WWW-sovelluksen oppilaslaboratorion töiden
mittausvuorojen varaamiseen. Vaatimusmäärittelyssä esitetään kehitettävän sovelluksen tarpeita, rakennetta ja vaatimukset.
}

% Tiivistelmä projektista
\projectabstract{Pojekti kehittää oppilaslaboratorion varausjärjestelmän Jyväskylän yliopiston fysiikan laitokselle.}

% Avainsanat: dokumentin sisältöön liittyviä olennaisia asiasanoja: aakkosjärjestys, ensimmäinen sana isolla alkukirjaimella ja piste loppuun.
\keywords{Aikataulu, ajanvaraus, kalenteri, mittausvuoro, oppilaslaboratorio, tietokanta, varausjärjestelmä, WWW-sovellus.}

% Varsinainen tulosteessa näkyvä ladonta alkaa
\begin{document}
\sloppy

% Tämä latoo versiohistorialle ympäristön, sen alapuolelle ladotaan
% versiohistoriataulukko. Esimerkin vuoksi tehty.
\versionhistory

\begin{tabular}{|c|r|p{9.0cm}|p{1.2cm}|}
\hline
\textbf{Versio} & \textbf{Päivämäärä} & \textbf{Muutokset} & \textbf{Tekijät} \\
\hline \hline
\versionrow{0.0.1}{16.2.2015}{Alustava versio vaatimusmäärittelystä luotiin.}{HP}
\versionrow{0.0.2}{24.2.2015}{Vaatimusten prioriteetti- ja tilaikonit lisättiin.}{HP}
\versionrow{0.0.3}{25.2.2015}{Tekstiä ja dokumentin rakennetta muokattiin.}{HP}
\versionrow{0.0.4}{7.3.2015}{Tekstiä ja dokumentin rakennetta muokattiin palautteen mukaan.}{HP}
\versionrow{0.0.5}{9.3.2015}{Vaatimuksia tarkennettiin ja jaettiin useampaan ryhmään.}{HP}
\versionrow{0.0.6}{10.3.2015}{Lisäyksiä termeihin ja korjauksia vaatimuksiin tehtiin.}{HP}
\versionrow{0.1.0}{10.3.2015}{Käyettävien sovelluskehyksien alalukua muokattu, laboratoriotyö lisätty termiksi.}{HP}
\end{tabular}
\newpage


% \projectinfo latoo projektin tiivistelmän.
% Projektin tiivistelmä ja tekijöiden tiedot ladotaan automaattisesti sivun
% alkuun. Eli lisättävä projektiorganisaation tiedot muiden kuin tekijöiden
% osalta sekä tarvittavat yhteystiedot.
\projectinfo


% infotable ympäristö helpottaa hieman henkilö- ja muiden tietojen listausta
\newenvironment{infotable}[1]{
    \textbf{#1:} \\
    \begin{tabular}{p{5cm}p{9cm}}
}{
    \end{tabular}
    \vspace{1truecm}
}

% \infoitem helpottaa henkilö- ja muiden tietojen listausta
\newcommand{\infoitem}[2]{~$\bullet$~~#1 & \texttt{#2}\\}
\newcommand{\infoitemx}[3]{~$\bullet$~~#1 & \texttt{#2} ja\\ \ & \texttt{#3}\\}

\begin{infotable}{Tilaaja}
\infoitem{Sakari Juutinen}{sakari.juutinen@phys.jyu.fi}
\infoitem{Panu Rahkila}{panu.rahkila@jyu.fi}
\end{infotable}

\begin{infotable}{Ohjaajat}
\infoitem{Petri Partanen}{petri.m.partanen@student.jyu.fi}
\infoitem{Jukka-Pekka Santanen}{santanen@mit.jyu.fi}
\end{infotable}

\begin{infotable}{Yhteystiedot}
\infoitemx{Sähköpostilistat:}{keplerit@korppi.jyu.fi}{keplerit\_opetus@korppi.jyu.fi}
\infoitemx{Sähköpostiarkistot:}
    {http://korppi.jyu.fi/kotka/servlet/ list-archive/keplerit/}
    {http://korppi.jyu.fi/kotka/servlet/ list-archive/kepler\_opetus/}
~$\bullet$~~Työhuone: & Agora C226.4, puh. 040-3573826
\end{infotable}

%----------------------------------------------------------------------------
% \mainmatter latoo automaattisesti sisällysluettelon ym. alkusivut, ja
%% sen jälkeen alkaa dokumentin sisällysluettelossa näkyvät luvut.
\mainmatter


%---------------------------------------------
% Johdanto
%---------------------------------------------
\chapter{Johdanto}\label{chptr:johdanto}

Kepler-projekti kehittää kevään 2015 Sovellusprojekti-kurssilla WWW-sovelluksen Jyväskylän yliopiston fysiikan laitoksen
oppilaslaboratorion laboratoriotöiden mittausvuorojen varaamiseen. Uusi varausjärjestelmä tulee korvaamaan edeltävän
Brahe2007-järjestelmän. Brahe on toiminut laitoksen tarpeissa hyvin, ainakin oppilaiden näkökulmasta. Pääkäyttäjän työ
on ollut vaikeampaa johtuen siitä, että järjestelmässä ei ole pääkäyttäjälle omaa näkymää, jonka kautta hallita varauksia
ja töitä.

Uuteen järjestelmään lisättäviä ominaisuuksia ovat opiskelijan ja ohjaajan näkymien ohella aiemmasta järjestelmästä puuttuvat
kalenterinäkymä sekä pääkäyttäjän näkymä. Lisäksi järjestelmän tulee tukea ainakin kahta kieltä: suomi ja englanti.
Mahdollisuuksien mukaan on myös tarkoitus ottaa huomioon muidenkin yliopiston laitosten tarpeita jatkokehitykstä varten.

Dokumentti kuvaa projektissa kehitettävän järjestelmän tarpeita, rakennetta ja vaatimuksia.
Luku \ref{chp:termit} kuvaa projektissa käytettäviä aihealueen, tietojärjestelmän ja toteutustekniikoiden
termejä. Luku \ref{chp:taustaa} kuvaa järjestelmällä tuettavia prosesseja. Luku \ref{chp:kayttajat} esittää järjestelmän
käyttäjät ja kuvaa heidän tarpeitaan. Luvussa \ref{chp:jarjestelma} esitetään järjestelmän kokonaisrakenne ja suhteet
muihin tietojärjestelmiin. Luvussa \ref{chp:vaatimukset} luetellaan järjestelmän toiminnalliset vaatimukset ja luvussa
\ref{chp:rajoitteet} järjestelmän tekniset vaatimukset ja rajoitteet.

Projektin projektisuunnitelmassa \cite{projsuunnitelma} kuvataan projektin läpivientiä, tavoitteita ja taustaa. Lisäksi
projektisuunnitelmassa esitetään tarkemmin kehitettävällä järjestelmällä tuettavia prosesseja.

%---------------------------------------------
% Termit
%---------------------------------------------
\chapter{Termit}\label{chp:termit}

Luvussa kuvataan projektissa ja dokumentissa käytettäviä aihealueen, tietojärjestelmän ja teknisiä termejä.


\section{Aihealueen termejä}
Projektin aihealueen termejä ovat seuraavat:

% Termilistat ladotaan Ventry-ympäristöllä, parametrina pisin termi,
% jolloin sisentyy oikein:
\begin{Ventry}{Oppilaslaboratorio}
\item[Assistentti] on fysiikan laboratoriotöiden ohjaajalle käytetty nimitys. Hän on perus-, aine- ja syventäviin opintoihin liittyvien
kurssien laboratoriotöitä laboratoriovuoron aikana ohjaava henkilö.
\item[Laboratoriotyö] on mittausvuorolla tehtävä johonkin kurssiin liittyvä työ.
\item[Laboratoriovuoro] on yleensä neljän tunnin mittainen assistentin ohjaama tilaisuus, jossa laboratoriotöihin liittyvät mittaukset
voidaan suorittaa.
\item[Mittauslaitteisto] on yhdestä tai useammasta mittalaitteesta koostuva laitteisto, jolla laboratoriotyön mittaukset suoritetaan.
\item[Mittausryhmä] on ihmisjoukko, joka on varannut ajan laboratoriotyön mittaamiselle jollekin ohjatulle laboratoriovuorolle.
\item[Mittausvuoro] on opiskelijan jollekin laboratoriovuorolle varaama aika jonkin tietyn laboratoriotyön mittaamiseen.
\item[Ohjaaja] on assistentin käyttäjäroolin nimi kehitettävässä varausjärjestelmässä.
\item[Opiskelija] on mittausvuoroja varaavan opiskelijan käyttäjäroolin nimi kehitettävässä varausjärjestelmässä.
\item[Oppilaslaboratorio] on fysiikan laitoksen oppilaslaboratorio, jonka vuorojen varaukseen järjestelmä kehitetään.
\item[Pääkäyttäjä] on pääkäyttäjän käyttäjäroolin nimi kehitettävässä varausjärjestelmässä. Pääkäyttäjä on henkilö, joka hallitsee
toisten käyttäjien rooleja ja lisää laboratoriotöitä järjetelmään.
\end{Ventry}


\section{Ohjelmistoja ja teknisiä termejä}
Tässä dokumentissa käytettyjä teknisiä termejä ovat seuraavat:

\begin{Ventry}{WWW-sovelluskehys}
\item[Back end] on ohjelmiston se osa, joka on kauimpana ohjelmiston käyttäjästä. WWW-sovelluksessa se on palvelin puolen ohjelma.
\item[Bootstrap] on WWW-dokumenttien ulkoasun muokkausta helpottava, HTML-kuvauskieltä ja CSS-tyylikieltä käyttävä kirjasto.
\item[CSS] on tyylikieli WWW-dokumenttien ulkoasun määrittämiseen.
\item[Front end] on ohjelmiston se osa, joka on lähimpänä ohjelmiston käyttäjää. Käytännössä front end on siis sovelluksen käyttöliittymä ja
sen toimintalogiikka.
\item[HTML5] on uusin versio WWW-dokumenttien HTML-kuvauskielestä.
\item[ICal] on kalenteritiedostomuoto, jolla kalenteri sovellukset pysyvät vaihtamaan kalenteritietoja keskenään.
\item[JavaScript] on WWW-sovelluksissa käytetty dynaamisesti tyypitetty ohjelmointikieli.
\item[jQuery] on WWW-dokumenttien dynaamisen sisällön käsittelyä helpottava avoimen lähdekoodin lisenssin alainen JavaScript-kirjasto.
\item[JYU-tunnukset] ovat Jyväskylän yliopiston IT-palveluiden käyttäjän henkilökohtaiset käyttäjätunnukset.
\item[Korppi] on Jyväskylän yliopiston opintotietojärjestelmä.
\item[Käyttöliittymä] on ohjelmiston osa, jonka kautta käyttäjä käyttää ohjelmistoa.
\item[OAuth2] on sovelluksessa autentikointiin käytettävä protokolla.
\item[ORM] on tekniikka, jolla tietokannan tietoja pystytään helposti käsittelemään suoraan ohjelmointikielen olioiden kautta.
\item[Pyramid] on Python-ohjelmointikielellä toteutettu WWW-sovelluskehys.
\item[Sovelluskehys] on ohjelman rungon muodostava teknologia.
\item[SQL] on yleisesti käytetty relaatiotietokanta standardi.
\item[SQLAlchemy] on avoimen lähdekoodin SQL- ja ORM-kirjasto Python kielelle.
\item[Tietokanta] on tietovarasto, joka tyypillisesti mallintaa jollain tapaa tiedon yhteyksiä toisiin tietoihin. Tällöin puhutaan relaatiotietokannasta.
\item[WWW-sovellus] on WWW-tekniikoita hyödyntävä ja selaimella käytettävä sovellus.
\item[WWW-sovelluskehys] on sovelluskehys, joka on suunniteltu nopeuttamaan WWW-sovellusten kehittämistä.
\end{Ventry}


%---------------------------------------------
% Taustaa ja tuettava prosessi
%---------------------------------------------
\chapter{Taustaa ja tuettava prosessi}\label{chp:taustaa}

Fysiikan laitoksen kursseihin liittyy usein laboratorio-osuus, jolla sovelletaan kurssilla opittua käytännössä.
Laboratoriossa tehtäviä töitä voi kursilla olla useita, joista osa on vaihtoehtoisia. Oppilaat varaavat mittausvuoron
ja suorittavat laboratoriossa mittauksia yksin tai parin kanssa. Laboratoriotöitä ohjaamassa on laboratorio-ohjaaja.
Kyseinen assistentti on opiskelija, tohtorikoulutettava tai tutkija, joka on itse suorittanut kyseisen työn ja on siten
valmis ohjaamaan toisia työn suorittamisessa.

Laboratoriovuorot alkavat yleensä kello 8.00, 12.00 tai 16.00, ja kestävät neljä tuntia. Laboratoriovuorolla tehtävät
työt on jaettavissa kahdella tapaa: kurssin tason mukaan perusopinto- tai aineopintotyöksi, ja lappu- tai selostustyöksi.
"Lapputyö" on työ, jonka opiskelija suorittaa vuoron aikana täyttäen valmiin kaavakkeen. Vuoron päätteeksi Ohjaava
assistentti tarkistaa kaavakkeen. Selostustyö mitataan vuorolla, jonka jälkeen opiskelija kirjoittaa työstä raportin ja
palauttaa sen työstä vastaavalle assistentille tarkistettavaksi.

Laboratoriovuorojen saatavuudesta päättää fysiikan laitoksen oppilaslaboratoriovastaava, joka on kehitettävän
järjestelmän pääkäyttäjä. Hän lisää laboratoriovuorot varattavaksi ja määrää niille ohjaajat. Pääkäyttäjä pyrkii ottamaan
huomioon opiskelijoiden aikataulun ja kurssien luentojen ajankohdat lisätessään vuoroja järjestelmään. 
%Joskus järjestelmässä olevien töiden tekemistä joudutaan rajoittamaan johtuen rikkoutuneista mittauslaitteistosta.
%Tällöin pääkäyttäjä joutuu muokkaamaan työn tietoja rajoittaen sen varaamista.

Lisätietoja kehitettävällä varausjärjestelmällä tuetuista prosesseista löytyy Kepler-projektin projektisuunnitelmasta \cite{projsuunnitelma}.


%---------------------------------------------
% Järjestelmän käyttäjät
%---------------------------------------------
\chapter{Järjestelmän käyttäjät}\label{chp:kayttajat}

Järjestelmän käyttäjillä on erilaisia rooleja, joiden mukaan heidän oikeutensa eri toimintojen suorittamiseen
järjestelmässä määräytyvät. Alaluvuissa on lueteltu nämä käyttäjäroolit ja heidän suhteensa järjestelmään.

\section{Kaikki käyttäjät}

Kaikille käyttäjille yhteisenä järjestelmässä on imoitustaulu, jonka avulla varausjärjestelmän käyttäjille pystytään
tiedottamaan oppilaslaboratorioon liittyvistä asioista. Ilmoitustaulu on järjestelmän ensimmäinen sivu sisään kirjauksen
jälkeen. Joissain tapauksissa ilmoitustaulusivulla on myös henkilökohtaisia ilmoituksia, joihin käyttäjä pystyy reagoimaan.
Esimerkiksi opiskelijan varaaman mittausvuoron peruuntumisesta näytetään opiskelija viesti ilmoitustaululla. Samoin
ohjaajalle näkyy ilmoitustaululla tieto hänen ohjausvuoronsa peruuntumisesta.

\section{Opiskelija}

Opiskelija on fysiikan laitoksen opinto-oikeuden omaava opiskelija, joka varaa järjestelmästä mittausvuoroja.
Hänen pääasiallisena toimenpiteenään järjestelmässä on siis valita laboratoriotyö ja etsiä kalenterista varattava aika,
jolloin kyseisen työn voi mitata. Opiskelija varaa sopivan ajan, jonka jälkeen hän näkee vuoron omassa järjestelmän
sisäisessä kalenterissaan. Opisekelija pystyy perumaan varaamansa vuoron, jos vuoron alkuun on vielä riittävästi
aikaa. Yleensä peruminen tulee tapahtua vähintään kaksi työpäivää ennen vuoron alkua.

\section{Ohjaaja}

Ohjaaja on henkilö, joka ohjaa opiskelijoita laboratoriovuorolla. Ohjaaja voi olla, ja usein onkin, oppilas. Ohjaajan
perusoikeudet ovat siis samat kuin opiskelijan. Tämän lisäksi ohjaaja pystyy tarkastelemaan kaikkia vuoroja, joilla hän on
ohjaajana. Vuorojen tiedoista ohjaaja pystyy näkemään vuorolle ilmoittautuneiden opiskelijoiden listan. Laboratoriovuoron
jälkeen, jos joku opiskelijoista jättää tulematta vuorolle, pystyy ohjaaja tallentamaan tästä merkinnän järjestelmään.

Koska ohjaajat voivat halutessaan vaihtaa ohjausvuoroja keskenään, täytyy ohjaajan nähdä myös muiden
ohjaajien ohjausvuorot. Ohjaaja pystyy ehdottamaan ohjausvuoron vaihtoa toisen ohjaajan kanssa. Tällöin ehdotus
näkyy sen ohjaajan ilmoitustaululla, jolle toinen ohjaaja ehdotuksen teki. Ilmoituksen kautta ohjaaja pystyy hyväksymään
ohjausvuorojen vaihdon.

\section{Pääkäyttäjä}

Pääkäyttäjä on henkilö, jolla on oikeus hallita järjestelmän laboratoriotöitä, niihin liittyviä resursseja (mittalaitteet),
ja varattavia mittausvuoroja. Pääkäyttäjällä on myös samat oikeudet kuin ohjaajalla.

Pääkäyttäjä pystyy lisäämään, poistamaan ja muokaamaan laboratoriotöitä. Työlle hän määrää sen tason ja kurssin, johon
se liittyy. Hän pystyy lisäämään ja poistamaan työstä sen vaatimia resursseja, joita ovat yleensä mittalaitteet tai työpisteet ja -tilat.

Pääkäyttäjä pystyy myös lisäämään järjestelmään uusia resursseja ja muokkaamaan olemassa olevien resurssien lukumääriä ja statusta.
Status voi olla esimerkiksi "varattavissa", "huollossa" tai "pois käytöstä". Vain resurssit, jotka ovat varattavissa, otetaan huomioon
tietyn laboratoriotyön varausaikoja etsiessä ja varausta tehtäessä.

Pääkäyttäjä lisää järjestelmään varattavaksi laboratoriovuoroja. Vuorolle hän määrittää ohjaajan ja minkä tasoinen
laboratoriovuoro on. Vuoron taso voi olla "perusopinto" tai "aineopinto". Tällöin vuorolle voi varata vain mittausvuoroja
laboratoriotöille, joiden taso on sama kuin laboratoriovuoron.

Pääkäyttäjällä on lisäksi oikeutena muuttaa muiden käyttäjien rooleja ja muokata eri rooleihin liittyviä oikeuksia.
Eri oikeuksia ovat esimerkiksi "vuoron varaus", "perusopintotyön ohjaaja", "aineopintotyön ohjaaja", "laboratoriovuorojen hallinta"
ja "resurssien hallinta".


%---------------------------------------------
% Järjestelmän kuvaus
%---------------------------------------------
\chapter{Kuvaus järjetelmästä}\label{chp:jarjestelma}

Luvussa kuvataan kehitettävän varausjärjestelmän kokonaisrakennetta ja yleisimpiä toteutusratkaisuja.

\section{Järjestelmän rakenne}

Varausjärjestelmä on WWW-sovelluksille tavanomaisesti kolmitasoinen \transl{three-tiered}. Nämä tasot ovat
esitys, ohjelma ja tallennus \transl{presentation, application, storage}. Esitystaso toteutetaan WWW-sovelluksissa
luonnollisesti käyttäen HTML-, CSS- ja JavaScript-tekniikoita. Ohjelmataso on yleensä palvelinsovellus, joka on toteutettu
käyttäen jotain sopivaa teknologiaa ja tallennustaso on toteutettu tietokantana.

Esitystaso vastaa sovelluksen front endiä sisältäen siis käytännössä sen käyttöliittymän ja käyttöliittymälogiikan.
Ohjelma- ja tallennustaso vastaavat sovelluksen back endiä sisältäen ohjelman varsinaista toimintalogiikan.
Kuvassa \refwithpage{fig:rakenne} on esitetty järjestelmän kokonaisrakenne.

\begin{figure}[h!]
\includegraphics[width=\textwidth]{images/kokonaisrakenne.png}
\label{fig:rakenne}
\caption{Kuvassa on kuvattu varausjärjestelmän kokonaisrakenne ja yhteys muihin järjestelmiin.}
\end{figure}

\section{Käytetyt sovelluskehykset ja teknologiat}

Varausjärjestelmä toteutetaan käyttäen Python-kieltä ja Pyramid-nimistä WWW-sovelluskehystä. Pyramid-kehys sisältää kaiken
oleellisen järjestelmän kehittämiseen. Front end -puolella WWW-sivujen laatimista nopeuttavat mallisivut \transl{template},
joiden avulla eri sivuille on helppo saada yhtenäinen ulkoasu ja toiminnallisuus. Back end -puolella Pyramid käyttää
SQLAlchemy-nimistä ORM-kirjastoa, joka helpottaa tietokannan käsittelyä Python koodissa.

Järjestelmän lopullisena tallennustasona toimivaa tietokantaratkaisua ei tarvitse päättää vielä järjestelmän kehityksen alussa, koska
SQLAlchemy pystyy toimimaan useimpien SQL-tietokantaratkaisujen kanssa. Lopullinen valinta voidaan suorittaa vasta, kun
järjestelmä asennetaan käyttöön. Tällöin tulee kuitenkin huomioida eri tietokantaratkaisujen rajoitteet ja poikkeavuudet standardista,
joita ei SQLAlchemyn tasolla pystytä yhtenäisesti toteuttamaan. Toteutuksessa tulisi siis käyttää vain SQL-standardin määrittelemiä
ja kaikkien mahdollisten tietokantaratkaisujen tukemia ominaisuuksia. Tällöin projektin loppu vaiheessa ja järjestelmää asennettauessa
tarvitsee tehdä minimaalinen määrä työtä tietokantaratkaisun valitsemisen yhteydessä.

%Hyviä vaihtoehtoja järjestelmän tietokannaksi ovat esimerkiksi PostgreSQL ja MariaDB. PostgreSQL:n toteutus on hyvin standardia
%seuraava, joten se toimisi järjestelmän kanssa hyvin.

%tietokannan valinnassa, että sen lisenssi on yhteensopiva sekä
%projektin lisenssin kanssa. Projektin kanssa yhteensopivia ovat esimerkiksi PostgreSQL ja MariaDB-tietokannat.

\section{Korppi-integraatio}

Järjestelmän on tarkoitus hyödyntää olemassa olevan Korppi-järjestelmän rajapintoja ainakin käyttäjän autentikointiin ja
kalenterinäkymän toteuttamiseen. Autentikointi tapahtuu käyttäen OAuth2-protokollaa, jonka avulla Korppi-järjestelmästä
saadaan myös tarpeellisia käyttäjän tietoja, kuten nimi ja sähköpostiosoite.

Kalenteri-integraation tarkoituksena olisi pystyä esittämään varausjärjestelmän kalenterissa käyttäjän Korppi-kalenterissa
olevat tapahtumat ja myös tarjota Korppi-kalenterin esitettäväksi varausjärjestelmässä olevat käyttäjän mittausvuorovaraukset.
Tämä on toteutettavissa kaksisuuntaisilla ICal-syötteillä. Tällä hetkellä Korppi tarjoaa kalenteristaan ICal-syötteen, jota
varausjärjestelmä pystyisi hyödyntämään suoraan.

Korppiin ei vielä ole toteutettu mahdollisuutta saada ulkopuolista syötettä näkyviin Korppi-kalenteriin.
Varausjärjestelmään voidaan toteuttaa ICal-syötteen muodostus, jotta se on Korpin käytettävissä heti, kun tuki sille on toteutettu.
Toisaalta varausjärjestelmän tarjoamaa kalenterisyötettä olisi mahdollista tulevaisuudessa käyttää myös muista järjestelmistä,
jotka sitä tukevat.

%\section{Muut järjestelmät ja jatkokehitys}

% !!!!


% Komennot ja laskurit vaatimusten listausta varten
\newcounter{groupcount}
\setcounter{groupcount}{0}
\newcounter{reqcount}
\setcounter{reqcount}{0}

% Vaihtaa vaatimusryhmän numeroa
\newcommand{\newgroup}{
	\setcounter{reqcount}{0}
	\stepcounter{groupcount}
}

% Muokkaa description-ympäristöä vaatimusten esittämistä varten
\renewcommand{\descriptionlabel}{
	\hspace{\labelsep}
	\stepcounter{reqcount}
	\arabic{chapter}.\arabic{groupcount}.\arabic{reqcount}
}

% Komennot vaatimusten tila- ja prioriteettikuvakkeita varten
\newcommand{\prioicon}[1]{\includegraphics[width=1.4em]{images/prio#1.png}}
\newcommand{\progressicon}[1]{\includegraphics[width=1.4em]{images/progress#1.png}}

% Tekee uuden vaatimuksen description-ympäristössä. Ensimmäinen parametri kertoo
% vaatimuksen prioriteetin ja toinen tilan. Molemmat ovat lukuja väliltä 1 - 5.
\newcommand{\req}[2]{
	\item[\prioicon{#1}\progressicon{#2}]
}

\newcommand{\TARK}{\textbf{(tarkennettava)}}


%---------------------------------------------
% Vaatimusten prioriteetit ja tilat
%---------------------------------------------
\chapter{Vaatimusten prioriteetit ja tilat}\label{chp:priotilat}

Seuraavassa luvussa on lueteltu kehitettävän sovelluksen vaatimukset.
Vaatimukset on priorisoitu asteikolla 1--5 seuraavasti:
\begin{list}{}
\item \prioicon{1} Pakollinen
\item \prioicon{2} Tärkeä
\item \prioicon{3} Mahdollinen
\item \prioicon{4} Idea
\item \prioicon{5} Ei toteuteta
\end{list}

Vaatimusten tilat esitetään seuraavasti:
\begin{list}{}
\item \progressicon{5} Hyväksytty
\item \progressicon{4} Testattu
\item \progressicon{3} Toteutettu
\item \progressicon{2} Osittain toteutettu
\item \progressicon{1} Toteuttamatta
\end{list}


%---------------------------------------------
% Vaatimukset
%---------------------------------------------
\chapter{Toiminnalliset vaatimukset}\label{chp:vaatimukset}

Luvussa kuvataan kehitettävän järjestelmän toiminnalliset vaatimukset. Nämä on jaettu eri alalukuihin ohjelman eri
osien ja käyttäjien mukaan.

\section{Käyttäjän toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Käyttäjä pystyy kirjautumaan järjestelmään käyttäen JYU-tunnuksia.
\req{3}{1} Käyttäjä näkee kalenterinäkymässä omat Korppi-kalenterin tapahtumansa.
\end{description}


\section{Opiskelijan toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Käyttäjä pystyy näkemään valitsemaansa kurssiin liittyvien töiden varattavissa olevia vuoroja kalenterinäkymässä.
\req{1}{1} Käyttäjä pystyy varamaan mittausvuoron valitulta laboratoriovuorolta.
\req{1}{1} Käyttäjä ei pysty varaamaan useampia vuoroja samalta laboratoriovuorolta.
\req{1}{1} Käyttäjä ei saa olla ilmoittautuneena useammalle tulevalle mittausvuorolle, jotka liittyvät samaan työhön.
\req{1}{1} Käyttäjän yhdenaikaisten tulevien vuorojen varausten määrä on rajoitettu.
\req{1}{1} Käyttäjä näkee kalenterinäkymästä sekä menneet että tulevat vuorot, joille on ilmoittautunut.
\req{1}{1} Käyttäjä näkee listanäkymästä tulevat vuorot, joille on ilmoittautunut.
\req{1}{1} Käyttäjä pystyy perumaan ilmoittautumisensa vuorolle.
\req{2}{1} Vuorolle ilmoittautumisen perumisella on takaraja, jonka jälkeen ilmoittautumista ei voida perua.
\req{4}{1} Käyttäjä pystyy lähettämään tarkastettavaksi laboratoriomittauksista tehdyn selostuksen.
\end{description}


\section{Mittausryhmän toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{3}{1} Opiskelija pystyy luomaan itselleen mittausryhmän.
\req{3}{1} Opiskelija pystyy lisäämään omaan mittausryhmäänsä toisia käyttäjiä jäseniksi.
\req{3}{1} Mittausryhmän jäsen näkee mittausryhmät, joihin hän kuuluu, erillisestä näkymästä.
\req{3}{1} Mittausryhmän jäsen pystyy poistumaan ryhmästä.
\req{3}{1} Mittausryhmän luoja pystyy poistamaan ryhmän.
\req{3}{1} Mittausryhmän jäsen pystyy varaamaan vuoron mittausryhmälle.
\req{3}{1} Mittausryhmän jäsen ei pysty varaamaan vuoroa, jos vuoron mittaustyötä ei voida suorittaa kyseisellä ryhmällä.
\req{3}{1} Opiskelija pystyy perumaan mittausryhmän vuoron.
\end{description}


\section{Ohjaajan toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Käyttäjä pystyy näkemään ohjaamalleen vuorolle osallistuvien henkilöiden listauksen.
\req{2}{1} Käyttäjä pystyy kirjaamaan järjestelmään, jos vuorolle ilmoittautunut henkilö ei ole saapunut.
\req{2}{1} Käyttäjä pystyy näkemään toisten ohjaajien ohjaamat vuorot kalenterinäkymässä.
\req{2}{1} Käyttäjä pystyy näkemään tulevat ohjausvuoronsa listanäkymässä.
\req{4}{1} Käyttäjä pystyy ehdottamaan ohjausvuorojen vaihtoa toisen ohjaajan kanssa, jos ohjattavien vuorojen opintotaso on sama.
\req{4}{1} Käyttäjä näkee ohjausvuorojen vaihtoehdotuksen etusivun ilmoitustaululla.
\req{4}{1} Käyttäjä pystyy hyväksymään tai hylkäämään ehdotetun ohjausvuorojen vaihdon.
\req{4}{1} Käyttäjä pystyy tarkastamaan laboratoriomittauksista tehdyn selostuksen.
\end{description}


\section{Pääkäyttäjän toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Käyttäjä pystyy lisäämään laboratoriovuoroja.
\req{1}{1} Käyttäjä pystyy perumaan laboratoriovuoroja.
\req{1}{1} Käyttäjä näkee listanäkymässä kaikki tulevat vuorot, joita järjestelmässä on.
\req{1}{1} Käyttäjä pystyy lisäämään uusia laboratoriotöitä.
\req{1}{1} Käyttäjä pystyy poistamaan laboratoriotöitä.
\req{1}{1} Käyttäjä pystyy lisäämään ja poistamaan laboratoriotyön vaatimia resursseja.
\req{2}{1} Käyttäjä pystyy lisäämään uusia resursseja.
\req{2}{1} Käyttäjä pystyy poistamana resursseja.
\req{2}{1} Käyttäjä pystyy muuttamaan resurssien lukumääriä.
\req{2}{1} Käyttäjä pystyy lisäämään käyttäjille uusia rooleja.
\req{2}{1} Käyttäjä pystyy poistamaan käyttäjiltä rooleja.
\req{2}{1} Käyttäjä pystyy lisäämään ilmoituksia järjestelmän etusivun ilmoitustaululle.
\req{4}{1} Käyttäjä pystyy saamaan tilastoja järjestelmästä ja sen käyttäjistä.
\end{description}


\section{Käyttöliittymän vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{2} Käyttöliittymän kieli on vaihdettavissa.
\req{1}{1} Käyttöliittymän kielivaihtoehtoina ovat vähintään suomi ja englanti.
\req{2}{1} Etusivulla on ilmoitustaulu oppilaslaboratorioon liittyvää tiedottamista varten.
\req{2}{1} Käyttöliittymä skaalautuu opiskelijan toiminnallisuuksien osalta mobiililaitteille.
\req{3}{1} Käyttöliittymä skaalautuu ohjaajan ja pääkäyttäjän osalta mobiililaitteille.
\end{description}


\section{Kalenterinäkymän vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Kalenterinäkymässä on viikkokalenteri.
\req{1}{1} Kalenterin eri tapahtumilla ja vuoroilla on selkeä väriteema.
\req{2}{1} Kalenterinäkymässä on viikkopalkki, jonka kautta viikkojen välillä pystyy siirtymään.
\req{3}{1} Vuoron varausnäkymässä viikkopalkissa ne viikot on korostettu, joilla on valitun työn varattavia vuoroja.
\req{3}{1} Pääkäyttäjän peruma laboratoriovuoro näkyy ilmoittautuneiden ja vuoron ohjaajien kalentereissa peruttuna vuorona.
\end{description}


\section{Järjestelmän sähköposti-ilmoitusten vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Vuorolle ilmoittautumisesta lähetetään opiskelijalle sähköposti-ilmoitus.
\req{1}{1} Vuorolle ilmoittautumisen perumisesta lähetetään opiskelijalle sähköposti-ilmoitus.
\req{2}{1} Vuorolle ilmoittautumisesta lähetetään vuoron ohjaajalle sähköposti-ilmoitus.
\req{2}{1} Vuorolle ilmoittautumisen perumisesta lähetetään vuoron ohjaajalle sähköposti-ilmoitus.
\req{2}{1} Jos pääkäyttäjä peruu vuoron, lähetetään vuorolle osallistuville opiskelijoille sähköposti-ilmoitus asiasta.
\req{2}{1} Jos pääkäyttäjä peruu vuoron, lähetetään vuoron ohjaajille sähköposti-ilmoitus asiasta.
\req{3}{1} Mittausryhmän ilmoittautumisesta vuorolle lähetetään ryhmän jäsenille sähköposti-ilmoitus.
\req{3}{1} Mittausryhmän ilmoittautumisesta vuorolle lähetetään vuoron ohjaajalle sähköposti-ilmoitus, jossa on listaus ryhmän jäsenistä.
\req{3}{1} Mittausryhmän vuorolle ilmoittautumisen perumisesta lähetetään ryhmän jäsenille sähköposti-ilmoitus.
\req{3}{1} Mittausryhmän vuorolle ilmoittautumisen perumisesta lähetetään vuoron ohjaajalle sähköposti-ilmoitus, jossa on listaus ryhmän jäsenistä.
\end{description}


\chapter{Tekniset vaatimukset ja rajoitteet}\label{chp:rajoitteet}

Luvussa esitetään kehitettävän järjestelmän tekniset vaatimukset ja rajoitteet.

\setcounter{groupcount}{0}
\section{Järjestelmän rajapintojen vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Autentikointi tapahtuu OAuth2-protokollalla.
\req{2}{1} Kalenterinäkymän tuontiin Korpista käytetään ICal-muotoa.
\end{description}



%---------------------------------------------
% Yhteenveto
%---------------------------------------------
\chapter{Yhteenveto}\label{chp:yhteenveto}

Kepler-projekti kehitää Jyväskylän yliopiston fysiikan laitokselle laboratoriovuorojen varausjärjestelmän.
Dokumentissa esiteltiin varausjärjestelmän eri käyttäjien tarpeita, järjestelmän rakennetta ja sen toteutuksen vaatimuksia.
Kehitettävän järjestelmän käyttäjiä ovat fysiikanlaitoksen opiskelijat ja laboratoriovastaava. Heillä on
järjestelmässä eri käyttäjärooleja, jotka ovat opiskelija, ohjaaja ja pääkäyttäjä. Kehitettävän järjestelmä mahdollistaa
opiskelijoille mittausvuorojen varaamisen ja pääkäyttäjälle uusien varattavien laboratoriovuorojen lisäämisen järjestelmään.



% LÄHTEET
\begin{thebibliography}{1}
%Katso kirjoitusohjeen luku 2.3 ja 2.4.
\bibitem{projsuunnitelma}
  Joonas Konki, Anu Koskela, Mikko Kuhno, Henrik Paananen ja Atte Räty,
  "Kepler-projekti, Projektisuunnitelma",
  saatavilla PDF-muossa
  <URL: \texttt{http://sovellusprojektit.it.jyu.fi/kepler/dokumentit/\\projektisuunnitelma/kepler\_projektisuunnitelma\_1.0.0.pdf}>,
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  X.X.2015.
\end{thebibliography}



% LIITTEET
%\begin{appendix}

%\chapter{Ensimmäinen liite}

%Tänne tarvittaessa liitteitä.

%\end{appendix}

% Dokumentin  lopetus
\end{document}
