<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tkuuskma</id>
	<title>ICO wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tkuuskma"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Tkuuskma"/>
	<updated>2026-06-22T05:45:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131693</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131693"/>
		<updated>2018-06-20T04:49:02Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
19.06.2018 - seoses ärilise konfidentsiaalsuse nõudega eemaldasime nii andmemudeli kui koodi (kooskõlastatud õppejõuga)&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[ andmemudel eemaldatud 19.06.2018 seoses ärilise konfidentsiaalsuse nõudega; andmemudeli eemaldamine kooskõlastatud õppejõuga ]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1A7cxeK15xlWSww_CPxpksSfj0m10qFQV/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
[ failid eemaldatud seoses ärilise konfidentsiaalsuse nõudega 19.06.2018; failide eemaldamine kooskõlastatud õppejõuga ]&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Retsensioonid =&lt;br /&gt;
1. Veebiteenuse retsensioon grupile &amp;quot;Kuldne Loojang&amp;quot;. Kättesaadav: https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131692</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131692"/>
		<updated>2018-06-20T04:47:53Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Link klientrakendusele ja API-le */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[ andmemudel eemaldatud 19.06.2018 seoses ärilise konfidentsiaalsuse nõudega; andmemudeli eemaldamine kooskõlastatud õppejõuga ]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1A7cxeK15xlWSww_CPxpksSfj0m10qFQV/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
[ failid eemaldatud seoses ärilise konfidentsiaalsuse nõudega 19.06.2018; failide eemaldamine kooskõlastatud õppejõuga ]&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Retsensioonid =&lt;br /&gt;
1. Veebiteenuse retsensioon grupile &amp;quot;Kuldne Loojang&amp;quot;. Kättesaadav: https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131691</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131691"/>
		<updated>2018-06-20T04:47:19Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Andmemudel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[ andmemudel eemaldatud 19.06.2018 seoses ärilise konfidentsiaalsuse nõudega; andmemudeli eemaldamine kooskõlastatud õppejõuga ]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1A7cxeK15xlWSww_CPxpksSfj0m10qFQV/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
[ failid eemaldatud seoses ärilise konfidentsiaalsuse nõudega 19.06.2018 ]&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Retsensioonid =&lt;br /&gt;
1. Veebiteenuse retsensioon grupile &amp;quot;Kuldne Loojang&amp;quot;. Kättesaadav: https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131690</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131690"/>
		<updated>2018-06-20T04:47:02Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Andmemudel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[ andmemudel eemaldatud 19.06.2018 seoses ärilise konfidentsiaalsuse nõudega; andmemudeli eemaldamine kooskõlastatud õppejõuga ]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1A7cxeK15xlWSww_CPxpksSfj0m10qFQV/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
[ failid eemaldatud seoses ärilise konfidentsiaalsuse nõudega 19.06.2018 ]&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Retsensioonid =&lt;br /&gt;
1. Veebiteenuse retsensioon grupile &amp;quot;Kuldne Loojang&amp;quot;. Kättesaadav: https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131687</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131687"/>
		<updated>2018-06-19T17:53:55Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Andmemudel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[ andmemudel eemaldatud 19.06.2018 seoses ärilise konfidentsiaalsuse nõudega ]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1A7cxeK15xlWSww_CPxpksSfj0m10qFQV/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
[ failid eemaldatud seoses ärilise konfidentsiaalsuse nõudega 19.06.2018 ]&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Retsensioonid =&lt;br /&gt;
1. Veebiteenuse retsensioon grupile &amp;quot;Kuldne Loojang&amp;quot;. Kättesaadav: https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131686</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131686"/>
		<updated>2018-06-19T17:52:33Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Link klientrakendusele ja API-le */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1A7cxeK15xlWSww_CPxpksSfj0m10qFQV/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
[ failid eemaldatud seoses ärilise konfidentsiaalsuse nõudega 19.06.2018 ]&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Retsensioonid =&lt;br /&gt;
1. Veebiteenuse retsensioon grupile &amp;quot;Kuldne Loojang&amp;quot;. Kättesaadav: https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131589</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131589"/>
		<updated>2018-06-11T15:18:21Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Meeskond: WatchWinders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2018=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API2/ASP.NET Core 2.0/WCF võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilirakendused/Angularis/reactis loodud klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
* Korraliku arhitektuuriga kirjutatud kood&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - Maagikud &lt;br /&gt;
*15:30 - GoFood&lt;br /&gt;
*15:45 - Raavo V2™&lt;br /&gt;
*16:00 - LearnToDrive&lt;br /&gt;
Sellele päevale rohkem aegu juurde lisada ei saa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allpool olevate päevadele võib vabalt aegasid juurde lisada 15min sammga. Reegel on, et aegu lisame järjest&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;06.06.2018&#039;&#039;&#039;&lt;br /&gt;
*17:00 - Raamaturiiul&lt;br /&gt;
*17:15 - Pakiraam&lt;br /&gt;
*..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - MealPlannerSolo(Triin Oja)&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - &amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
*16:45 - NutriCheck&lt;br /&gt;
*17:00 - JääTuli&lt;br /&gt;
*17:15 - Ophelia&lt;br /&gt;
*17:30 - Kuldne Loojang&lt;br /&gt;
*17:45 - Hammas&lt;br /&gt;
*18:00 - VariousArtists&lt;br /&gt;
*18:15 - Pillar Of Autumn&lt;br /&gt;
*18:30 - Curry&lt;br /&gt;
*18:45 - WatchWinders&lt;br /&gt;
*19:00 - MOT&lt;br /&gt;
*19:15 - AmateurBB&lt;br /&gt;
*19:30 - Autolugu&lt;br /&gt;
*19:45 - VRII2018&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://drive.google.com/open?id=1Pq8Lhrs3G5mGiTje70ww-zMBNB5cXnRh ZIP]&lt;br /&gt;
&lt;br /&gt;
TFS: [https://variousartists.visualstudio.com/VariousArtists/_versionControl/changesets siin]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/VariousArtists#XML siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid: [https://wiki.itcollege.ee/index.php/VariousArtists#Retsensioonid siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse ja klientrakenduse retsensioon tiimile Raavo V2 asub [https://docs.google.com/document/d/1fxmdLa94Do1u5WlmPQjSd4mMmdbDw5WmDne547jqQc4/edit siin]&lt;br /&gt;
&lt;br /&gt;
XML retsensioon tiimile LTD asub [https://docs.google.com/document/d/15rMhpqyG5XHsvOCZJp88ucHkiMa5Non6BbYwBBKT2_Y/edit siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse, klientrakenduse ja XML retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenus ning klientrakendus.&#039;&#039;&#039; [https://www.dropbox.com/s/ugbvx4j4zdlbp68/RaamatuRiiul.7z?dl=0 Zip]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [http://enos.itcollege.ee/~mpolma/vr2/API.zip]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://github.com/karlerikounapuu/autolugu-front]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm (Meeskonnast lahkunud)&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode API ja klientrakendus:&#039;&#039;&#039; [https://github.com/taavip9/Veebirakendused-II Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
Klientrakendus [https://github.com/knaeris/VR2Klient siin] ja veebiteenus [https://github.com/knaeris/VR2Projekt siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 klientrakendusele : [https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam#Retsensioonid Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 veebiteenusele:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://wiki.itcollege.ee/index.php/GoFood#Projektikood lõpptoote leiab siit]&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud:[https://wiki.itcollege.ee/index.php/GoFood#Retsensioon_rühmale_Maagikud  Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekt [https://wiki.itcollege.ee/index.php/LTD#Kood_ise asub siin, kliendina kasutame JustInCaseWPFi]&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
Veebiteenus v2 (05.06): [https://www.dropbox.com/s/4acyvc9c7h08xl6/MiisiiksWS-v2.rar?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus v2 (05.06): [https://www.dropbox.com/s/m6ijv2yyqthebgr/MiisiiksC2-v2.rar?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/Miisiiks#XML_retsensioon  XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode veebiteenus:&#039;&#039;&#039; [https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0 https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kasutusjuhend:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode klient:&#039;&#039;&#039; [https://bitbucket.org/Marjup/bestinshow/ https://bitbucket.org/Marjup/bestinshow/]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML failid:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#XML_failid Schema, XML ja XSLT HTML ja XML transformatsiooniks]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon veebiteenusele: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon klientrakendusele: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-ile: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AssistDesq Meeskond: AssistDesq]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/WatchWinders#Link_klientrakendusele_ja_API-le Link klientrakendusele ja API-le]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view Retsensioon grupi &amp;quot;Kuldne Loojang&amp;quot; veebiteenusele]&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
algselt üles laetud 02.06.2018, bugide parandusi lisatud 04.06.2018&lt;br /&gt;
* [https://www.dropbox.com/s/4h9bvq4k6388fmo/loojang.zip?dl=0 .zip fail rakendus ja klient koos] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-app veebirakenduse repo] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-client klientrakenduse repo] &lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus XML:  link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie tehtud retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Veebiteenusele veebiteenuse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Klientrakendusele klientrakenduse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML-ile XML retsensioon meeskonna Curry tööle.]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/v63fkbjnd5umqqm/Ophelia.zip?dl=0 Lõpptoote link]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#L.C3.B5pptoote_kasutusjuhend Kasutusjuhend(Kaasas ka lõpptootes)]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#XML_.C3.9Clesanne XML Ülesanne]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/SharpRestoVRII#XML Wikis]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML failide retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron (loobus)&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039; [https://drive.google.com/drive/folders/1GIgiG5NvmnnKoQYmWWbfV_9Nhs2dezz8?usp=sharing UCanDo] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse, klientrakenduse ja XML&#039;i retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  [http://enos.itcollege.ee/~pploom/VR2/ link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XML_andmefail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSD: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSD_schema_fail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT1: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_HTML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT2: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_XML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Curry meeskonna veebiteenust, klientrakendust ja XML-i retsenseerib meeskond KuldneLoojang. Curryle kirjutatud retsensioonid [https://wiki.itcollege.ee/index.php/Kuldneloojang#Meie_tehtud_retsensioonid asuvad siin: link]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://ildtest.azurewebsites.net azure]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/lundens/ild-core github]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Hammas#XML wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Veebiteenuse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Klientrakenduse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#XMLi_retsensioon_meeskonnale_MealPlannerSolo MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&#039;&#039;&#039;Veebiteenus:&#039;&#039;&#039; [https://github.com/Tafkinz/AmateurBB/tree/BB-1 GitHub]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakendus:&#039;&#039;&#039; [https://github.com/Tafkinz/frontend GitHub]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/AmateurBB wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&#039;&#039;&#039;[https://wiki.itcollege.ee/index.php/MealPlannerSolo#XML_andmefail XML]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://enos.itcollege.ee/~troja/VRII2018/ Veebiteenus ja klientrakendus]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;br /&gt;
&#039;&#039;&#039;Project:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/irgev5w9ofifg5m/vr2_service-v3.zip?dl=0 Veebiteenus]&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/7kn1u6z2481ligm/WebClient.zip?dl=0 Klientrakendus]&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;XML:&#039;&#039;&#039; TODO&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Retsensioon:&#039;&#039;&#039; TODO&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131588</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131588"/>
		<updated>2018-06-11T15:18:07Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Meeskond: WatchWinders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2018=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API2/ASP.NET Core 2.0/WCF võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilirakendused/Angularis/reactis loodud klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
* Korraliku arhitektuuriga kirjutatud kood&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - Maagikud &lt;br /&gt;
*15:30 - GoFood&lt;br /&gt;
*15:45 - Raavo V2™&lt;br /&gt;
*16:00 - LearnToDrive&lt;br /&gt;
Sellele päevale rohkem aegu juurde lisada ei saa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allpool olevate päevadele võib vabalt aegasid juurde lisada 15min sammga. Reegel on, et aegu lisame järjest&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;06.06.2018&#039;&#039;&#039;&lt;br /&gt;
*17:00 - Raamaturiiul&lt;br /&gt;
*17:15 - Pakiraam&lt;br /&gt;
*..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - MealPlannerSolo(Triin Oja)&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - &amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
*16:45 - NutriCheck&lt;br /&gt;
*17:00 - JääTuli&lt;br /&gt;
*17:15 - Ophelia&lt;br /&gt;
*17:30 - Kuldne Loojang&lt;br /&gt;
*17:45 - Hammas&lt;br /&gt;
*18:00 - VariousArtists&lt;br /&gt;
*18:15 - Pillar Of Autumn&lt;br /&gt;
*18:30 - Curry&lt;br /&gt;
*18:45 - WatchWinders&lt;br /&gt;
*19:00 - MOT&lt;br /&gt;
*19:15 - AmateurBB&lt;br /&gt;
*19:30 - Autolugu&lt;br /&gt;
*19:45 - VRII2018&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://drive.google.com/open?id=1Pq8Lhrs3G5mGiTje70ww-zMBNB5cXnRh ZIP]&lt;br /&gt;
&lt;br /&gt;
TFS: [https://variousartists.visualstudio.com/VariousArtists/_versionControl/changesets siin]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/VariousArtists#XML siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid: [https://wiki.itcollege.ee/index.php/VariousArtists#Retsensioonid siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse ja klientrakenduse retsensioon tiimile Raavo V2 asub [https://docs.google.com/document/d/1fxmdLa94Do1u5WlmPQjSd4mMmdbDw5WmDne547jqQc4/edit siin]&lt;br /&gt;
&lt;br /&gt;
XML retsensioon tiimile LTD asub [https://docs.google.com/document/d/15rMhpqyG5XHsvOCZJp88ucHkiMa5Non6BbYwBBKT2_Y/edit siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse, klientrakenduse ja XML retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenus ning klientrakendus.&#039;&#039;&#039; [https://www.dropbox.com/s/ugbvx4j4zdlbp68/RaamatuRiiul.7z?dl=0 Zip]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [http://enos.itcollege.ee/~mpolma/vr2/API.zip]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://github.com/karlerikounapuu/autolugu-front]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm (Meeskonnast lahkunud)&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode API ja klientrakendus:&#039;&#039;&#039; [https://github.com/taavip9/Veebirakendused-II Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
Klientrakendus [https://github.com/knaeris/VR2Klient siin] ja veebiteenus [https://github.com/knaeris/VR2Projekt siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 klientrakendusele : [https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam#Retsensioonid Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 veebiteenusele:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://wiki.itcollege.ee/index.php/GoFood#Projektikood lõpptoote leiab siit]&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud:[https://wiki.itcollege.ee/index.php/GoFood#Retsensioon_rühmale_Maagikud  Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekt [https://wiki.itcollege.ee/index.php/LTD#Kood_ise asub siin, kliendina kasutame JustInCaseWPFi]&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
Veebiteenus v2 (05.06): [https://www.dropbox.com/s/4acyvc9c7h08xl6/MiisiiksWS-v2.rar?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus v2 (05.06): [https://www.dropbox.com/s/m6ijv2yyqthebgr/MiisiiksC2-v2.rar?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/Miisiiks#XML_retsensioon  XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode veebiteenus:&#039;&#039;&#039; [https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0 https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kasutusjuhend:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode klient:&#039;&#039;&#039; [https://bitbucket.org/Marjup/bestinshow/ https://bitbucket.org/Marjup/bestinshow/]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML failid:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#XML_failid Schema, XML ja XSLT HTML ja XML transformatsiooniks]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon veebiteenusele: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon klientrakendusele: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-ile: TODO retsenseerime projekti WatchWinders&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AssistDesq Meeskond: AssistDesq]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
* Karen Grigorjan&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/WatchWinders#Link_klientrakendusele_ja_API-le Link klientrakendusele ja API-le]&lt;br /&gt;
[https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view Retsensioon grupi &amp;quot;Kuldne Loojang&amp;quot; veebiteenusele]&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
algselt üles laetud 02.06.2018, bugide parandusi lisatud 04.06.2018&lt;br /&gt;
* [https://www.dropbox.com/s/4h9bvq4k6388fmo/loojang.zip?dl=0 .zip fail rakendus ja klient koos] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-app veebirakenduse repo] &lt;br /&gt;
* [https://bitbucket.org/itcollegeprojects/loojang-client klientrakenduse repo] &lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus XML:  link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie tehtud retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Veebiteenusele veebiteenuse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#Klientrakendusele klientrakenduse retsensioon meeskonna Curry tööle.]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML-ile XML retsensioon meeskonna Curry tööle.]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/v63fkbjnd5umqqm/Ophelia.zip?dl=0 Lõpptoote link]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#L.C3.B5pptoote_kasutusjuhend Kasutusjuhend(Kaasas ka lõpptootes)]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#XML_.C3.9Clesanne XML Ülesanne]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/SharpRestoVRII#XML Wikis]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML failide retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron (loobus)&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039; [https://drive.google.com/drive/folders/1GIgiG5NvmnnKoQYmWWbfV_9Nhs2dezz8?usp=sharing UCanDo] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse, klientrakenduse ja XML&#039;i retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  [http://enos.itcollege.ee/~pploom/VR2/ link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XML_andmefail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSD: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSD_schema_fail link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT1: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_HTML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XSLT2: &#039;&#039;&#039;  [https://wiki.itcollege.ee/index.php/Meeskond:Curry#XSLT_transformatsioon:_XML_-.3E_XML link] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Curry meeskonna veebiteenust, klientrakendust ja XML-i retsenseerib meeskond KuldneLoojang. Curryle kirjutatud retsensioonid [https://wiki.itcollege.ee/index.php/Kuldneloojang#Meie_tehtud_retsensioonid asuvad siin: link]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://ildtest.azurewebsites.net azure]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/lundens/ild-core github]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Hammas#XML wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Veebiteenuse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Klientrakenduse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#XMLi_retsensioon_meeskonnale_MealPlannerSolo MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&#039;&#039;&#039;Veebiteenus:&#039;&#039;&#039; [https://github.com/Tafkinz/AmateurBB/tree/BB-1 GitHub]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakendus:&#039;&#039;&#039; [https://github.com/Tafkinz/frontend GitHub]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/AmateurBB wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&#039;&#039;&#039;[https://wiki.itcollege.ee/index.php/MealPlannerSolo#XML_andmefail XML]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://enos.itcollege.ee/~troja/VRII2018/ Veebiteenus ja klientrakendus]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;br /&gt;
&#039;&#039;&#039;Project:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/irgev5w9ofifg5m/vr2_service-v3.zip?dl=0 Veebiteenus]&lt;br /&gt;
&amp;lt;br/&amp;gt;[https://www.dropbox.com/s/7kn1u6z2481ligm/WebClient.zip?dl=0 Klientrakendus]&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;XML:&#039;&#039;&#039; TODO&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Retsensioon:&#039;&#039;&#039; TODO&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131587</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131587"/>
		<updated>2018-06-11T15:15:40Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1A7cxeK15xlWSww_CPxpksSfj0m10qFQV/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Retsensioonid =&lt;br /&gt;
1. Veebiteenuse retsensioon grupile &amp;quot;Kuldne Loojang&amp;quot;. Kättesaadav: https://drive.google.com/file/d/1OtzOCPiWixsrbHcGCcdHgXIgz3_fsC7h/view&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131518</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131518"/>
		<updated>2018-06-09T11:16:09Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Link klientrakendusele ja API-le */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1A7cxeK15xlWSww_CPxpksSfj0m10qFQV/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131493</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131493"/>
		<updated>2018-06-09T08:30:36Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Link klientrakendusele ja API-le */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&amp;lt;br&amp;gt;&lt;br /&gt;
https://drive.google.com/file/d/1N4JDyla7yNXmKTvi_WQxRamFQgHlQCi3/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131492</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131492"/>
		<updated>2018-06-09T08:30:15Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing (nagu logidest näha lisasime selle lingi 08.06.2018, kuid siin on mõned üleliigsed kataloogid)&lt;br /&gt;
https://drive.google.com/file/d/1N4JDyla7yNXmKTvi_WQxRamFQgHlQCi3/view?usp=sharing (09.06.2019 laadisime üles paki, kus on kustutatud kaks ebavajalikku kataloogi, mis võivad tekitada segadust)&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131491</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131491"/>
		<updated>2018-06-09T08:00:39Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Meeskond: WatchWinders */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2018=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API2/ASP.NET Core 2.0/WCF võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilirakendused/Angularis/reactis loodud klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
* Korraliku arhitektuuriga kirjutatud kood&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - Maagikud &lt;br /&gt;
*15:30 - GoFood&lt;br /&gt;
*15:45 - Raavo V2™&lt;br /&gt;
*16:00 - LearnToDrive&lt;br /&gt;
Sellele päevale rohkem aegu juurde lisada ei saa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allpool olevate päevadele võib vabalt aegasid juurde lisada 15min sammga. Reegel on, et aegu lisame järjest&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;06.06.2018&#039;&#039;&#039;&lt;br /&gt;
*17:00 - Raamaturiiul&lt;br /&gt;
*17:15 - Pakiraam&lt;br /&gt;
*..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - MealPlannerSolo(Triin Oja)&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - &amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
*16:45 - NutriCheck&lt;br /&gt;
*17:00 - JääTuli&lt;br /&gt;
*17:15 - Ophelia&lt;br /&gt;
*17:30 - Kuldne Loojang&lt;br /&gt;
*17:45 - Hammas&lt;br /&gt;
*18:00 - VariousArtists&lt;br /&gt;
*18:15 - Pillar Of Autumn&lt;br /&gt;
*18:30 - Curry&lt;br /&gt;
*18:45 - WatchWinders&lt;br /&gt;
*19:00 - MOT&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse ja klientrakenduse retsensioon tiimile Raavo V2 asub [https://docs.google.com/document/d/1fxmdLa94Do1u5WlmPQjSd4mMmdbDw5WmDne547jqQc4/edit siin]&lt;br /&gt;
&lt;br /&gt;
XML retsensioon tiimile LTD asub [https://docs.google.com/document/d/15rMhpqyG5XHsvOCZJp88ucHkiMa5Non6BbYwBBKT2_Y/edit siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse, klientrakenduse ja XML retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenus ning klientrakendus.&#039;&#039;&#039; [https://www.dropbox.com/s/ugbvx4j4zdlbp68/RaamatuRiiul.7z?dl=0 Zip]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm (Meeskonnast lahkunud)&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode API ja klientrakendus:&#039;&#039;&#039; [https://github.com/taavip9/Veebirakendused-II Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
Klientrakendus [https://github.com/knaeris/VR2Klient siin] ja veebiteenus [https://github.com/knaeris/VR2Projekt siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 klientrakendusele : [https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam#Retsensioonid Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 veebiteenusele:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://wiki.itcollege.ee/index.php/GoFood#Projektikood lõpptoote leiab siit]&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud:[https://wiki.itcollege.ee/index.php/GoFood#Retsensioon_rühmale_Maagikud  Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekt [https://wiki.itcollege.ee/index.php/LTD#Kood_ise asub siin, kliendina kasutame JustInCaseWPFi]&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
Veebiteenus v2 (05.06): [https://www.dropbox.com/s/4acyvc9c7h08xl6/MiisiiksWS-v2.rar?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus v2 (05.06): [https://www.dropbox.com/s/m6ijv2yyqthebgr/MiisiiksC2-v2.rar?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/Miisiiks#XML_retsensioon  XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode veebiteenus:&#039;&#039;&#039; [https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0 https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kasutusjuhend:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode klient:&#039;&#039;&#039; [https://bitbucket.org/Marjup/bestinshow/ https://bitbucket.org/Marjup/bestinshow/]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML failid:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#XML_failid Schema, XML ja XSLT HTML ja XML transformatsiooniks]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon veebiteenusele: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon klientrakendusele: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-ile: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/WatchWinders#Link_klientrakendusele_ja_API-le Link klientrakendusele ja API-le]&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
algselt üles laetud 02.06.2018, bugide parandusi lisatud 04.06.2018&lt;br /&gt;
* .zip fail rakendus ja klient koos: https://www.dropbox.com/s/4h9bvq4k6388fmo/loojang.zip?dl=0&lt;br /&gt;
* veebirakenduse repo: https://bitbucket.org/itcollegeprojects/loojang-app&lt;br /&gt;
* klientrakenduse repo: https://bitbucket.org/itcollegeprojects/loojang-client&lt;br /&gt;
* XML: [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/v63fkbjnd5umqqm/Ophelia.zip?dl=0 Lõpptoote link]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#L.C3.B5pptoote_kasutusjuhend Kasutusjuhend(Kaasas ka lõpptootes)]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#XML_.C3.9Clesanne XML Ülesanne]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML failide retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron (loobus)&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039; [https://drive.google.com/drive/folders/1GIgiG5NvmnnKoQYmWWbfV_9Nhs2dezz8?usp=sharing UCanDo] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse, klientrakenduse ja XML&#039;i retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  [http://enos.itcollege.ee/~pploom/VR2/ link] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://ildtest.azurewebsites.net azure]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/lundens/ild-core github]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Hammas#XML wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Veebiteenuse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Klientrakenduse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#XMLi_retsensioon_meeskonnale_MealPlannerSolo MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&#039;&#039;&#039;[https://wiki.itcollege.ee/index.php/MealPlannerSolo#XML_andmefail XML]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://enos.itcollege.ee/~troja/VRII2018/ Veebiteenus ja klientrakendus]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131490</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131490"/>
		<updated>2018-06-09T07:59:52Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Kaugõpe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2018=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API2/ASP.NET Core 2.0/WCF võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilirakendused/Angularis/reactis loodud klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
* Korraliku arhitektuuriga kirjutatud kood&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - Maagikud &lt;br /&gt;
*15:30 - GoFood&lt;br /&gt;
*15:45 - Raavo V2™&lt;br /&gt;
*16:00 - LearnToDrive&lt;br /&gt;
Sellele päevale rohkem aegu juurde lisada ei saa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allpool olevate päevadele võib vabalt aegasid juurde lisada 15min sammga. Reegel on, et aegu lisame järjest&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;06.06.2018&#039;&#039;&#039;&lt;br /&gt;
*17:00 - Raamaturiiul&lt;br /&gt;
*17:15 - Pakiraam&lt;br /&gt;
*..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - MealPlannerSolo(Triin Oja)&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - &amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
*16:45 - NutriCheck&lt;br /&gt;
*17:00 - JääTuli&lt;br /&gt;
*17:15 - Ophelia&lt;br /&gt;
*17:30 - Kuldne Loojang&lt;br /&gt;
*17:45 - Hammas&lt;br /&gt;
*18:00 - VariousArtists&lt;br /&gt;
*18:15 - Pillar Of Autumn&lt;br /&gt;
*18:30 - Curry&lt;br /&gt;
*18:45 - WatchWinders&lt;br /&gt;
*19:00 - MOT&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse ja klientrakenduse retsensioon tiimile Raavo V2 asub [https://docs.google.com/document/d/1fxmdLa94Do1u5WlmPQjSd4mMmdbDw5WmDne547jqQc4/edit siin]&lt;br /&gt;
&lt;br /&gt;
XML retsensioon tiimile LTD asub [https://docs.google.com/document/d/15rMhpqyG5XHsvOCZJp88ucHkiMa5Non6BbYwBBKT2_Y/edit siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse, klientrakenduse ja XML retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenus ning klientrakendus.&#039;&#039;&#039; [https://www.dropbox.com/s/ugbvx4j4zdlbp68/RaamatuRiiul.7z?dl=0 Zip]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm (Meeskonnast lahkunud)&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode API ja klientrakendus:&#039;&#039;&#039; [https://github.com/taavip9/Veebirakendused-II Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
Klientrakendus [https://github.com/knaeris/VR2Klient siin] ja veebiteenus [https://github.com/knaeris/VR2Projekt siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 klientrakendusele : [https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam#Retsensioonid Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 veebiteenusele:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://wiki.itcollege.ee/index.php/GoFood#Projektikood lõpptoote leiab siit]&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud:[https://wiki.itcollege.ee/index.php/GoFood#Retsensioon_rühmale_Maagikud  Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekt [https://wiki.itcollege.ee/index.php/LTD#Kood_ise asub siin, kliendina kasutame JustInCaseWPFi]&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
Veebiteenus v2 (05.06): [https://www.dropbox.com/s/4acyvc9c7h08xl6/MiisiiksWS-v2.rar?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus v2 (05.06): [https://www.dropbox.com/s/m6ijv2yyqthebgr/MiisiiksC2-v2.rar?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/Miisiiks#XML_retsensioon  XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode veebiteenus:&#039;&#039;&#039; [https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0 https://www.dropbox.com/s/j5ixmwmx45kxcyo/BestInShow.zip?dl=0]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Kasutusjuhend:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend https://wiki.itcollege.ee/index.php/BestInShow#Kasutusjuhend]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode klient:&#039;&#039;&#039; [https://bitbucket.org/Marjup/bestinshow/ https://bitbucket.org/Marjup/bestinshow/]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML failid:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BestInShow#XML_failid Schema, XML ja XSLT HTML ja XML transformatsiooniks]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon veebiteenusele: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon klientrakendusele: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-ile: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
[ https://wiki.itcollege.ee/index.php/WatchWinders#Link_klientrakendusele_ja_API-le Link klientrakendusele ja API-le ]&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
algselt üles laetud 02.06.2018, bugide parandusi lisatud 04.06.2018&lt;br /&gt;
* .zip fail rakendus ja klient koos: https://www.dropbox.com/s/4h9bvq4k6388fmo/loojang.zip?dl=0&lt;br /&gt;
* veebirakenduse repo: https://bitbucket.org/itcollegeprojects/loojang-app&lt;br /&gt;
* klientrakenduse repo: https://bitbucket.org/itcollegeprojects/loojang-client&lt;br /&gt;
* XML: [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/v63fkbjnd5umqqm/Ophelia.zip?dl=0 Lõpptoote link]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#L.C3.B5pptoote_kasutusjuhend Kasutusjuhend(Kaasas ka lõpptootes)]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#XML_.C3.9Clesanne XML Ülesanne]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML failide retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron (loobus)&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039; [https://drive.google.com/drive/folders/1GIgiG5NvmnnKoQYmWWbfV_9Nhs2dezz8?usp=sharing UCanDo] &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon: &#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse, klientrakenduse ja XML&#039;i retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  [http://enos.itcollege.ee/~pploom/VR2/ link] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://ildtest.azurewebsites.net azure]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/lundens/ild-core github]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Hammas#XML wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Veebiteenuse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Klientrakenduse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#XMLi_retsensioon_meeskonnale_MealPlannerSolo MealPlannerSolo]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&#039;&#039;&#039;[https://wiki.itcollege.ee/index.php/MealPlannerSolo#XML_andmefail XML]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://enos.itcollege.ee/~troja/VRII2018/ Veebiteenus ja klientrakendus]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131462</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131462"/>
		<updated>2018-06-08T20:22:30Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Palun loe seda readme asemel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda &amp;quot;readme&amp;quot; asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131461</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131461"/>
		<updated>2018-06-08T20:22:20Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Readme asemel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
== Palun loe seda readme asemel ==&lt;br /&gt;
&lt;br /&gt;
1. meie rakenduse implementeeritud skoop lähtub siin lehel (ülal), analüüsi osas defineeritud &amp;quot;Minimum viable product&amp;quot; kriteeriumitest&amp;lt;br&amp;gt; &lt;br /&gt;
2. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
3. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
5. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
6. küsimuste ja raskuste korral kirjuta tiit.kuuskmae@gmail.com (API) ja toomas.juhkov@gmail.com (klient). Vastame esimesel võimalusel.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131460</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131460"/>
		<updated>2018-06-08T20:19:57Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Readme asemel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
== Readme asemel ==&lt;br /&gt;
&lt;br /&gt;
1. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
2. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
3. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
4. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131459</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131459"/>
		<updated>2018-06-08T20:19:35Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Readme asemel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
== Readme asemel ==&lt;br /&gt;
&lt;br /&gt;
1. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
2. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: &amp;quot;http://localhost:[pordinumber]/Swagger&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
3. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
4. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131458</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131458"/>
		<updated>2018-06-08T20:18:59Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
== Readme asemel ==&lt;br /&gt;
&lt;br /&gt;
1. lase API käima, tee andmebaaside migratsioonid ja update-database&amp;lt;br&amp;gt;&lt;br /&gt;
2. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: http://localhost:[pordinumber]/Swagger&amp;lt;br&amp;gt;&lt;br /&gt;
3. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&amp;lt;br&amp;gt;&lt;br /&gt;
4. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131457</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131457"/>
		<updated>2018-06-08T20:18:18Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Terve maikuu oli igapäevane suhtlus üle Skype&#039;i ja fleep.io, mida me ei loginud (liiga tihedaks läks!).&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
== Readme asemel ==&lt;br /&gt;
&lt;br /&gt;
1. lase API käima, tee andmebaaside migratsioonid ja update-database&lt;br /&gt;
2. implementeeritud on kõik teenused, mis on nähtaval Swaggeris aadressil: http://localhost:[pordinumber]/Swagger&lt;br /&gt;
3. kliendirakendus asub kataloogis &#039;WatchWindersClient&#039; ja tegemist on solutioniga, mille võiks käivitada teises Visual Studio aknas&lt;br /&gt;
4. klientrakenduse käivitumiseks tuleks muuta App.config failis muuta ära localhost portide numbrid asendades need enda arvutis oleva localhost pordiga ning lisada kehtiv JWT AccessToken, mille saab Postmaniga aadressilt api/Security/getToken &amp;quot;Email&amp;quot; ja &amp;quot;Password&amp;quot; abil pärast seda kui kasutaja on loodud&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131456</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131456"/>
		<updated>2018-06-08T20:11:08Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
07.05.2018 - osalesime õppejõu Mait Poska korraldatud hackathonil&amp;lt;br&amp;gt;&lt;br /&gt;
08.06.2018 - XML ülesanne, klientrakenduse ja API kood sai wiki lehel avalikuks&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131454</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131454"/>
		<updated>2018-06-08T20:06:48Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Link klientrakendusele ja API-le =&lt;br /&gt;
https://drive.google.com/file/d/1FU3XGGVHbn4BNNHAsOs7DQ4CzpEDwZUt/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131453</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131453"/>
		<updated>2018-06-08T19:12:25Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* IT Management Transformation XML To ML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To XML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131452</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131452"/>
		<updated>2018-06-08T19:10:50Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To ML ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131451</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=131451"/>
		<updated>2018-06-08T19:06:39Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= XML ülesanne =&lt;br /&gt;
Järgnevalt esitame oma XML-ülesande tulemused.&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation XML To ML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;unhandledDevices&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;customers/customer/locations/location/items/item[@isInWorkingCondition=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;device&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;ticket&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket[@isHandled=&#039;false&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;ticket_id&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/ticket_id&amp;gt;&lt;br /&gt;
                &amp;lt;issued_in&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/issued_in&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/ticket&amp;gt;&lt;br /&gt;
          &amp;lt;/device&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/unhandledDevices&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management Transformation HTML ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!--This transformation displays all laptops under our maintenance.&lt;br /&gt;
    Laptops are sorted by &#039;isActive&#039; parameter, inactive items are at the of the list.&lt;br /&gt;
    If there are any tickets issued to the related laptop, they are displayed as well.&lt;br /&gt;
    We use colorcode - light green for handled and light red for unhandled tickets.--&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ItManagement Laptops&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style=&amp;quot;background-color:#F7F7F7&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Computers&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;/customers/customer/locations/location/items/item[@type=&#039;laptopComputer&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@isActive=&#039;false&#039;&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;hr /&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;manufacturer&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Model: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;model&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Serial number: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;serialNumber&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Date of purchase: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;dateOfPurchase&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Operating system: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;operatingSystem&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;b&amp;gt;Is on active list: &amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@isActive&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;br /&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:#E3FAEE&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;i&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;tickets/ticket&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;true&#039;&amp;quot;&amp;gt;                    &lt;br /&gt;
                    &amp;lt;h3&amp;gt;Handled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br /&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:when test=&amp;quot;@isHandled=&#039;false&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:#FDE5E5&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;h3&amp;gt;Unhandled tickets&amp;lt;/h3&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Issued in: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@issuedIn&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Ticket ID: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Description: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                        &amp;lt;b&amp;gt;Solution: &amp;lt;/b&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;solution&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br /&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/i&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XSD ==&lt;br /&gt;
&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;customers&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;customer&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;customerName&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;contactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;e-mail&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;phoneNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;location&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;city&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;address&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localContactPerson&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;localPhone&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;items&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;item&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;manufacturer&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;model&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;serialNumber&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;dateOfPurchase&amp;quot; type=&amp;quot;xs:date&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;operatingSystem&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:attribute name=&amp;quot;version&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ticket&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;solution&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;issuedIn&amp;quot; type=&amp;quot;xs:date&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;isHandled&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isUnderWarranty&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;warrantyInMonths&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;isInWorkingCondition&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;isActive&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;hasManyLocations&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IT Management XML ==&lt;br /&gt;
&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;customers&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;33&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Elamustevaba OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Juhan Pühamees&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;juhan@evaba.com&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+37256565656&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Pikk 7, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[3. korrus -&amp;gt; paremat kätt]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Maiu Piimaauto&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510510&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;1&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Inspiron 3558&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;6FGH5JN&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-07-22&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1709&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI001&amp;quot; issuedIn=&amp;quot;2017-11-21&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Wi-Fi is not working]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wi-Fi card replaced (Under the warranty)]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI256&amp;quot; issuedIn=&amp;quot;2018-05-05&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Computer keeps showing login screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;55&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;60&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Dell&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Latitude E7550&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;8JGR78U&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-06-15&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;store&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Tallinn&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Lai 17, 56401]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[keldrikorrusel]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;localContactPerson&amp;gt;Tanja Õielemb&amp;lt;/localContactPerson&amp;gt;&lt;br /&gt;
        &amp;lt;localPhone&amp;gt;+3726510520&amp;lt;/localPhone&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;83&amp;quot; type=&amp;quot;desktopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ThinkCentre M715&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;IO25689AD54KL&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-12-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Pro&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;12&amp;quot; type=&amp;quot;monitor&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;AOC&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;L456&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;9803987YE54&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2015-05-03&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI126&amp;quot; issuedIn=&amp;quot;2016-01-18&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Doesn&#039;t work, no picture.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Wasn&#039;t plugged in. Technician did it - works again!]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;02&amp;quot; type=&amp;quot;private&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Kessu Sisselasi&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;kessu@tripp.org&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+372555555&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Saue&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kooli 4-8, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[2. korrus. Kitsad koridorid.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;98&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;true&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Aspire 5&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;475YRT89K4&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2018-03-25&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;1803&amp;quot;&amp;gt;Windows 10 Home&amp;lt;/operatingSystem&amp;gt;            &lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;4&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;false&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;36&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Lenovo&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;IdeaPad L530&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2007-08-14&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Windows XP&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;SWI069&amp;quot; issuedIn=&amp;quot;2010-01-28&amp;quot; isHandled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Blue screen.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[Video driver update.]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
  &amp;lt;customer id=&amp;quot;26&amp;quot; type=&amp;quot;company&amp;quot; isActive=&amp;quot;true&amp;quot; hasManyLocations=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customerName&amp;gt;Aktsiaselts OÜ&amp;lt;/customerName&amp;gt;&lt;br /&gt;
    &amp;lt;contactPerson&amp;gt;Gunnar Kuningas&amp;lt;/contactPerson&amp;gt;&lt;br /&gt;
    &amp;lt;e-mail&amp;gt;gunnar@kunn.ee&amp;lt;/e-mail&amp;gt;&lt;br /&gt;
    &amp;lt;phoneNumber&amp;gt;+3726985236&amp;lt;/phoneNumber&amp;gt;&lt;br /&gt;
    &amp;lt;locations&amp;gt;&lt;br /&gt;
      &amp;lt;location type=&amp;quot;office&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;city&amp;gt;Loksa&amp;lt;/city&amp;gt;&lt;br /&gt;
        &amp;lt;address&amp;gt;&amp;lt;![CDATA[Kalda 14, 78965]]&amp;gt;&amp;lt;/address&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&amp;lt;![CDATA[Sissepääs Rimi poolt, helesinine uks]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;items&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;26&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Apple&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Macbook Air&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;258JUY369&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2017-03-01&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;High Sierra&amp;quot;&amp;gt;OS X&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
          &amp;lt;item id=&amp;quot;59&amp;quot; type=&amp;quot;laptopComputer&amp;quot; isActive=&amp;quot;true&amp;quot; isUnderWarranty=&amp;quot;false&amp;quot; warrantyInMonths=&amp;quot;24&amp;quot; isInWorkingCondition=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;manufacturer&amp;gt;Acer&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;Chromebook 11&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;serialNumber&amp;gt;U89TRY765ME&amp;lt;/serialNumber&amp;gt;&lt;br /&gt;
            &amp;lt;dateOfPurchase&amp;gt;2016-04-23&amp;lt;/dateOfPurchase&amp;gt;&lt;br /&gt;
            &amp;lt;operatingSystem version=&amp;quot;&amp;quot;&amp;gt;Chrome OS&amp;lt;/operatingSystem&amp;gt;&lt;br /&gt;
            &amp;lt;tickets&amp;gt;&lt;br /&gt;
              &amp;lt;ticket id=&amp;quot;HWI046&amp;quot; issuedIn=&amp;quot;2010-02-28&amp;quot; isHandled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;&amp;lt;![CDATA[Stripes on screen]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;solution&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&amp;lt;/solution&amp;gt;&lt;br /&gt;
              &amp;lt;/ticket&amp;gt;&lt;br /&gt;
            &amp;lt;/tickets&amp;gt;&lt;br /&gt;
          &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/items&amp;gt;&lt;br /&gt;
      &amp;lt;/location&amp;gt;&lt;br /&gt;
    &amp;lt;/locations&amp;gt;&lt;br /&gt;
  &amp;lt;/customer&amp;gt;&lt;br /&gt;
&amp;lt;/customers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131422</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131422"/>
		<updated>2018-06-07T11:46:52Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Kaitsmisele registreerumine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2018=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API2/ASP.NET Core 2.0/WCF võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilirakendused/Angularis/reactis loodud klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
* Korraliku arhitektuuriga kirjutatud kood&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - Maagikud &lt;br /&gt;
*15:30 - GoFood&lt;br /&gt;
*15:45 - Raavo V2™&lt;br /&gt;
*16:00 - LearnToDrive&lt;br /&gt;
Sellele päevale rohkem aegu juurde lisada ei saa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Allpool olevate päevadele võib vabalt aegasid juurde lisada 15min sammga. Reegel on, et aegu lisame järjest&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;06.06.2018&#039;&#039;&#039;&lt;br /&gt;
*17:00 - Raamaturiiul&lt;br /&gt;
*17:15 - Pakiraam&lt;br /&gt;
*..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - Triin Oja&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - &amp;amp;lt;div&amp;amp;gt;&lt;br /&gt;
*16:45 - NutriCheck&lt;br /&gt;
*17:00 - JääTuli&lt;br /&gt;
*17:15 - Ophelia&lt;br /&gt;
*17:30 - Kuldne Loojang&lt;br /&gt;
*17:45 - Hammas&lt;br /&gt;
*18:00 - VariousArtists&lt;br /&gt;
*18:15 - Pillar Of Autumn&lt;br /&gt;
*18:30 - Curry&lt;br /&gt;
*18:45 - WatchWinders&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse ja klientrakenduse retsensioon tiimile Raavo V2 asub [https://docs.google.com/document/d/1fxmdLa94Do1u5WlmPQjSd4mMmdbDw5WmDne547jqQc4/edit siin]&lt;br /&gt;
&lt;br /&gt;
XML retsensioon tiimile LTD asub [https://docs.google.com/document/d/15rMhpqyG5XHsvOCZJp88ucHkiMa5Non6BbYwBBKT2_Y/edit siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse, klientrakenduse ja XML retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenus ning klientrakendus.&#039;&#039;&#039; [https://www.dropbox.com/s/ugbvx4j4zdlbp68/RaamatuRiiul.7z?dl=0 Zip]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm (Meeskonnast lahkunud)&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
Klientrakendus [https://github.com/knaeris/VR2Klient siin] ja veebiteenus [https://github.com/knaeris/VR2Projekt siin]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 klientrakendusele : [https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam#Retsensioonid Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Retsensioon meeskonna Raavo v2 veebiteenusele:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: [https://wiki.itcollege.ee/index.php/GoFood#Projektikood lõpptoote leiab siit]&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud:[https://wiki.itcollege.ee/index.php/GoFood#Retsensioon_rühmale_Maagikud  Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekt [https://wiki.itcollege.ee/index.php/LTD#Kood_ise asub siin, kliendina kasutame JustInCaseWPFi]&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
Veebiteenus v2 (05.06): [https://www.dropbox.com/s/4acyvc9c7h08xl6/MiisiiksWS-v2.rar?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus v2 (05.06): [https://www.dropbox.com/s/m6ijv2yyqthebgr/MiisiiksC2-v2.rar?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
XML: [https://wiki.itcollege.ee/index.php/Miisiiks#XML_retsensioon  XML]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
Lõpptoode veebiteenus: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Lõpptoode klient: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
XML failid: [https://wiki.itcollege.ee/index.php/BestInShow#XML_failid Schema, XML ja XSLT HTML ja XML transformatsiooniks]&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon veebiteenusele: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon klientrakendusele: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
Retsensioon XML-ile: TODO&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039;&lt;br /&gt;
algselt üles laetud 02.06.2018, bugide parandusi lisatud 04.06.2018&lt;br /&gt;
* .zip fail rakendus ja klient koos: https://www.dropbox.com/s/4h9bvq4k6388fmo/loojang.zip?dl=0&lt;br /&gt;
* veebirakenduse repo: https://bitbucket.org/itcollegeprojects/loojang-app&lt;br /&gt;
* klientrakenduse repo: https://bitbucket.org/itcollegeprojects/loojang-client&lt;br /&gt;
* XML: [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/v63fkbjnd5umqqm/Ophelia.zip?dl=0 Lõpptoote link]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#L.C3.B5pptoote_kasutusjuhend Kasutusjuhend(Kaasas ka lõpptootes)]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Ophelia#XML_.C3.9Clesanne XML Ülesanne]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML failide retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse, klientrakenduse ja XML&#039;i retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://ildtest.azurewebsites.net azure]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/lundens/ild-core github]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Hammas#XML wiki]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Veebiteenuse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon&#039;&#039;&#039; meeskonnale [https://wiki.itcollege.ee/index.php/Hammas#Klientrakenduse_retsensioon_meeskonnale_GoFood GoFood]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon&#039;&#039;&#039; In progress&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&#039;&#039;&#039;[https://wiki.itcollege.ee/index.php/MealPlannerSolo#XML_andmefail XML]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[http://enos.itcollege.ee/~troja/VRII2018/ Veebiteenus ja klientrakendus]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=130926</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=130926"/>
		<updated>2018-05-28T16:02:01Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Minimum Viable Product definitsioon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Ww_andmemudel_06052018.png&amp;diff=130477</id>
		<title>File:Ww andmemudel 06052018.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Ww_andmemudel_06052018.png&amp;diff=130477"/>
		<updated>2018-05-06T07:30:42Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=130476</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=130476"/>
		<updated>2018-05-06T07:30:28Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Andmemudel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ww_andmemudel_06052018.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=130475</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=130475"/>
		<updated>2018-05-06T07:29:16Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
09.04.2018 - silusime andmemudelit (mõningad ebavajalikud viited olid sisse jäänud)&amp;lt;br&amp;gt;&lt;br /&gt;
06.05.2018 - panime uuendatud andmemudeli projekti wiki lehele üles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:TimeBoxLabDbStructure_ver11.2.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129991</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129991"/>
		<updated>2018-03-30T07:19:56Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
30.03.2018 - täiendatud wiki lehte andmemudeli metainfoga&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:TimeBoxLabDbStructure_ver11.2.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129990</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129990"/>
		<updated>2018-03-30T07:18:52Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Andmemudel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu ette antud kriteeriumist, mille järgi andmemudelis on vähemalt 6 põhiolemit (tähistatud tumesinise ja lillaga - meie mudelis 11 tk),&lt;br /&gt;
mille hulgas ei sisaldu kasutajate tabelit (Person). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Põhiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Watch - kell&amp;lt;br&amp;gt;&lt;br /&gt;
* Person - kasutaja/kollektsionäär või firma esindaja&amp;lt;br&amp;gt;&lt;br /&gt;
* Box - kellakarp&amp;lt;br&amp;gt;&lt;br /&gt;
* Organization - tootjad, edasimüüjad, hooldus&amp;lt;br&amp;gt;&lt;br /&gt;
* Settings - kellakarbi seade&amp;lt;br&amp;gt;&lt;br /&gt;
* Offer - pakkumine kollektsionäärile&amp;lt;br&amp;gt;&lt;br /&gt;
* Media - meediafailid kellade ja karpide kohta&amp;lt;br&amp;gt;&lt;br /&gt;
* Address - kasutaja/organisatsiooni aadress&amp;lt;br&amp;gt;&lt;br /&gt;
* ElectronicContact - elektrooniliste kontaktide loend&amp;lt;br&amp;gt;&lt;br /&gt;
* Log - logi&amp;lt;br&amp;gt;&lt;br /&gt;
* Access - paroolid ja kasutajanimed&amp;lt;br&amp;gt;&lt;br /&gt;
* Error - vead&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Type abiolemid:&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchType - kellatüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonType - isikutüübid: admin, kasutaja&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationType - organisatsioonitüübid: tootja, hooldaja, edasimüüja jt&amp;lt;br&amp;gt;&lt;br /&gt;
* ActionType - logi tüübid&amp;lt;br&amp;gt;&lt;br /&gt;
* ContactType - elektroonilise kontakti tüüp: skype, email, telefon jt&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Olekud:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonTypeState - isiku rolli kehtivus ajahetkel (isiku ja tüübi vaheline seos)&amp;lt;br&amp;gt;&lt;br /&gt;
* OrganizationTypeState - organisatsiooni olek(ud) ajahetkel&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kuuluvus:&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonWatch - isikute ja kellade vahelised seosed&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonBox - isiku ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonAccess - isiku ja autentimisandmete vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInBox - kella ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* ErrorInWatch - vea ja kella vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsInBox - seade ja karbi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* WatchInOrganization - kella ja tootja vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* PersonInOrganization - isiku ja ettevõtte/organisatsiooni vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
* SettingsOfWatchType - seade ja kellatüübi vaheline seos&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Abstraktsioonid:&amp;lt;br&amp;gt;&lt;br /&gt;
* Locator - abstraktsioon erinevate kontaktitüüpide jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
* Party - abstraktsioon erinevate inimeste, organisatsioonide jt jaoks&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Kommunikatsioon:&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferToPerson - isikule suunatud pakkumised&amp;lt;br&amp;gt;&lt;br /&gt;
* OfferFromPerson - isikult lähtuv pakkumine&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:TimeBoxLabDbStructure_ver11.2.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:TimeBoxLabDbStructure_ver11.2.png&amp;diff=129924</id>
		<title>File:TimeBoxLabDbStructure ver11.2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:TimeBoxLabDbStructure_ver11.2.png&amp;diff=129924"/>
		<updated>2018-03-29T06:45:55Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: Tkuuskma uploaded a new version of File:TimeBoxLabDbStructure ver11.2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:TimeBoxLabDbStructure_ver11.2.png&amp;diff=129923</id>
		<title>File:TimeBoxLabDbStructure ver11.2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:TimeBoxLabDbStructure_ver11.2.png&amp;diff=129923"/>
		<updated>2018-03-29T06:45:05Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129922</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129922"/>
		<updated>2018-03-29T06:44:44Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Andmemudel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:TimeBoxLabDbStructure_ver11.2.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129921</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129921"/>
		<updated>2018-03-29T06:44:18Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&amp;lt;br&amp;gt;&lt;br /&gt;
23.03.2018 - pikem tiimi hackathon andmemudeli teemal&amp;lt;br&amp;gt;&lt;br /&gt;
29.03.2018 - täiendatud wiki lehte täielikult ringitöötatud andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:watchwindersdb9.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129676</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129676"/>
		<updated>2018-03-22T19:36:48Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:watchwindersdb9.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129675</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129675"/>
		<updated>2018-03-22T19:36:36Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&lt;br /&gt;
22.03.2018 - tiimi sprint koosolek, mis oli pühendatud andmemudeli täiendamisele&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:watchwindersdb9.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=129662</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=129662"/>
		<updated>2018-03-22T07:28:42Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Kaugõpe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2018=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API2/ASP.NET Core 2.0/WCF võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilirakendused/Angularis/reactis loodud klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
* Korraliku arhitektuuriga kirjutatud kood&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129649</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129649"/>
		<updated>2018-03-18T16:51:00Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
18.03.2018 - lisasime olemid &amp;quot;Address&amp;quot;, &amp;quot;AddressU&amp;quot;, &amp;quot;AddressM&amp;quot;, &amp;quot;OfferOfUser&amp;quot;, &amp;quot;MediaInOffer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:watchwindersdb9.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Watchwindersdb9.png&amp;diff=129648</id>
		<title>File:Watchwindersdb9.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Watchwindersdb9.png&amp;diff=129648"/>
		<updated>2018-03-18T16:48:36Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129647</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129647"/>
		<updated>2018-03-18T16:48:06Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Andmemudel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:watchwindersdb9.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129600</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129600"/>
		<updated>2018-03-11T10:48:04Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
08.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WatchWindersdb.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129518</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129518"/>
		<updated>2018-03-06T19:12:08Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek(seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi)&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WatchWindersdb.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129517</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129517"/>
		<updated>2018-03-06T19:11:32Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - tiimi sprint koosolek&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WatchWindersdb.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:WatchWindersdb.png&amp;diff=129515</id>
		<title>File:WatchWindersdb.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:WatchWindersdb.png&amp;diff=129515"/>
		<updated>2018-03-06T07:08:28Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129514</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129514"/>
		<updated>2018-03-06T07:08:13Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Andmemudel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WatchWindersdb.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129513</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129513"/>
		<updated>2018-03-06T07:07:48Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Tegevuste logi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi&amp;lt;br&amp;gt;&lt;br /&gt;
03.03.2018 - alustasime koodi kirjutamisega (tabelid klassideks ja annotatsioonid peale)&amp;lt;br&amp;gt;&lt;br /&gt;
06.03.2018 - täiendasime andmemudelit olemiga &amp;quot;UserTypeState&amp;quot; (et saaks muuta kasutajatüüpi)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WatchWinders3_DB.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129504</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129504"/>
		<updated>2018-03-02T09:44:14Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Minimum Viable Product definitsioon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WatchWinders3_DB.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129503</id>
		<title>WatchWinders</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=WatchWinders&amp;diff=129503"/>
		<updated>2018-03-02T09:29:02Z</updated>

		<summary type="html">&lt;p&gt;Tkuuskma: /* Lahendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Meeskond =&lt;br /&gt;
&lt;br /&gt;
Toomas Juhkov, toomas.juhkov@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Tiit Kuuskmäe, tiit.kuuskmae@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Kunnar Kukk, Kunnar.kukk@gmail.com &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tegevuste logi =&lt;br /&gt;
&lt;br /&gt;
08.02.2018 - meeskonna loomine, kokkuleppe sõlmimine teema osas&amp;lt;br&amp;gt;&lt;br /&gt;
10.02.2018 - õppejõu teavitamine koos esmase andmemudeliga&amp;lt;br&amp;gt;&lt;br /&gt;
15.02.2018 - lõpliku andmemudeli valmimine(versioon 5)&amp;lt;br&amp;gt;&lt;br /&gt;
18.02.2018 - õppejõu kinnitus, et teema ja meeskond kvalifiseeruvad&amp;lt;br&amp;gt;&lt;br /&gt;
22.02.2018 - viki lehe loomine ja analüüsi koostamise alustamine&amp;lt;br&amp;gt;&lt;br /&gt;
26.02.2018 - tiimi lisandus Kunnar Kukk&amp;lt;br&amp;gt;&lt;br /&gt;
01.03.2018 - seoses täiendava tiimiliikme lisandumisega täpsustasime skoopi&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kasutatavad metoodikad =&lt;br /&gt;
&lt;br /&gt;
WatchWinders projektis plaanime kasutada peamiselt kaht metoodikat:&lt;br /&gt;
&lt;br /&gt;
1. läbiv retsenseerimine (üks paariline teeb midagi valmis ja teine teeb sellele ülevaatuse; üksus lisatakse kui ülevaatus on lõplikult läbitud ning osapoolte vahel on saabunud konsensus)&amp;lt;br&amp;gt;&lt;br /&gt;
2. paaris programmeerimine (istume ühe masina taha maha ja kirjutame kolmekesi)&lt;br /&gt;
&lt;br /&gt;
Tulenevalt kaugõppe formaadist saab ülekaalus olema esimene variant. Teist metoodikat kasutame nende osade kirjutamiseks, mille puhul võib arvata, et nende lahendamine on keeruline või et lahenduskäike võib olla väga erinevaid. Püüame jooksvalt siinses vikis kajastada ka seda, millise metoodika järgi üks või teine osa valmis.&lt;br /&gt;
&lt;br /&gt;
= Projekti osad =&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt anname ülevaate projekti osadest: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) andmemudel &amp;lt;br&amp;gt;&lt;br /&gt;
(2) veebiteenuse analüüs &amp;lt;br&amp;gt;&lt;br /&gt;
(3) Minimum Viable Product definitsioon &amp;lt;br&amp;gt;&lt;br /&gt;
(4) Inkrement #1 &amp;lt;br&amp;gt;&lt;br /&gt;
(5) Inkrement #2 &amp;lt;br&amp;gt;&lt;br /&gt;
(6) Inkrement #3 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Projekti osad on meie viki lehel kirjeldatud valmimise järjekorras.&lt;br /&gt;
&lt;br /&gt;
== Andmemudel ==&lt;br /&gt;
&lt;br /&gt;
Andmemudeli koostamisel lähtusime õppejõu poolt ette antud kriteeriumist, mille kohaselt peab olema vähemalt 6 põhiolemit (tähistatud tumesinisega), mille hulgas ei tohi sisalduda kasutajate tabelit. Antud juhul oleme kavandanud luua 7 põhiolemit: &amp;quot;Watch&amp;quot; (mingi konkreetne kell), &amp;quot;Manufacturer&amp;quot; (nii kellade kui karpide tootjad), &amp;quot;TimeLabBoxes&amp;quot; (konkreetsed kellakarbid), &amp;quot;Settings&amp;quot; (karbi seaded, mis on seotud aga konkreetse kellatüübiga), &amp;quot;Media&amp;quot; (kui karbi ühe külje külge kinnitatakse ekraan, siis seal piltide ja videote näitamiseks), &amp;quot;Support&amp;quot; (nii karpide kui kellade parandajad).&lt;br /&gt;
&lt;br /&gt;
Lisaks sellele defineerisime neli abiolemit: &amp;quot;WatchType&amp;quot;, &amp;quot;Error&amp;quot;, &amp;quot;UserType&amp;quot; ja &amp;quot;Offers&amp;quot;. Ülejäänud olemite näol, mis skeemil on märgendatud halliga, on sisuliselt tegemist vahetabelitega.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WatchWinders3_DB.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andmemudel valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
&lt;br /&gt;
Alljärgnevalt esitame kellakarpide infosüsteemi analüüsi järgmistes osades:&lt;br /&gt;
&lt;br /&gt;
(1) toote/teenuse kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(2) probleemi kirjeldus &amp;lt;br&amp;gt;&lt;br /&gt;
(3) lahendus &amp;lt;br&amp;gt;&lt;br /&gt;
(4) süsteemi kasutajad &amp;lt;br&amp;gt;&lt;br /&gt;
(5) loodava API võimalused &amp;lt;br&amp;gt;&lt;br /&gt;
(6) funktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
(7) mittefunktsionaalsed nõuded &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Toote/teenuse kirjeldus ===&lt;br /&gt;
Teenuse eesmärgiks on lahendada probleem, kuidas jälgida kellakarpide kaudu mehhaaniliste käekellade seisundit ning keerata neid automaatselt üles distantsilt, näiteks juhul, kui kellade kollektsionäär ei asu füüsiliselt igapäevaselt oma kellade juures. Teenus võimaldab ka tootjal uuendada kontaktandmeid, saata personaalseid teateid. Administraatorile annab ülevaate platvormis toimuvast.&lt;br /&gt;
 &lt;br /&gt;
=== Probleemi kirjeldus ===&lt;br /&gt;
Mehhaaniliste käekellade kollektsionääride huvi kellakarpide vastu on mitmetahuline. Kollektsionääre huvitab arvepidamine – mitu kella, missuguste omaduste ja eripäradega neil kollektsioonis on. Teisalt soov eksponeerida oma kogusid kolleegidele ja sõpradele. Kellakarpidega täidetud sein või riiulid loovad selleks suurepärase võimaluse. Kolmandaks praktiline vajadus tagada kellavedrude õige vinnastatuse aste. Kaasaja mehhaanilised kellamehhanismid (&#039;&#039;automatic&#039;&#039;) võimaldavad kellakorpuse füüsilisel liigutamisel kellavedru automaatselt vinnastada.&lt;br /&gt;
&lt;br /&gt;
Näiteks piisab kella kinnitamisest käele, et see hakkaks end käe liigutamisel üles keerama. Kuidas keerata aga üles seisvat kella, mis seisab paigal kellakarbis? Selleks on tänapäeva kellakarpides elektrimootor, mis tagab kella liigutamise vastavalt kellatüübile ettenähtud ööpäevase graafiku alusel. Kollektsionääride üheks probleemiks on see, kuidas juhtida sellist karpi ja omada jooksvat ülevaadet kõikidest oma karpidest, nende tehnilisest seadistusest ja kollektsiooni kuuluvatest kelladest olles tööreisil välisriigis?&lt;br /&gt;
&lt;br /&gt;
=== Lahendus ===&lt;br /&gt;
Probleemi lahendamiseks ehitame REST + ASP.NET Core + WebAPI koos kliendiga, mis võimaldab kellakollektsionääridel hallata kellasid karpides, administraatoritel saada ülevaate süsteemist ning tootjatele lisada infot kollektsionääridele. Käesoleva projekti käigus &#039;&#039;&#039;ei tegeleta&#039;&#039;&#039; kahe IoT lahenduse kui terviku seisukohast olulise nüansiga: (i) karbi püsivara (&#039;&#039;firmware&#039;&#039;) loomisega, (ii) klientrakenduse &#039;&#039;frontend&#039;&#039; lõpliku häälestamisega (ilus .css ja pildid).&lt;br /&gt;
&lt;br /&gt;
=== Süsteemi kasutajad ===&lt;br /&gt;
&#039;&#039;&#039;Kollektsionäär&#039;&#039;&#039; - haldab ja muudab infot oma kellade ning oma kellakarpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039; - haldab süsteemi infot, vajadusel eemaldab probleeme. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039; - saab saata süsteemi kollektsionääridele mõeldud infot. &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039; - saab infot hooldamist vajavate kellade ja -karpide kohta. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loodava API võimalused === &lt;br /&gt;
Alljärgnevalt vaatame loodava API võimalusi kasutajagruppide kaupa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Kasutajale/kellakollektsionäärile&#039;&#039;&#039;&lt;br /&gt;
* Saada ülevaade kelladest ja kellakarpidest (lisada, muuta, vaadata).&lt;br /&gt;
* Muuta karbis oleva kella kohta käivat informatsiooni (kella nimi, tootja, tootmise aeg, viitenumber, mehhanism, jõureservi jääk (valikuline), foto kellast, kellarihma liik, muu).&lt;br /&gt;
* Karpe juhtida (keerata automaatselt üles). Näha ja muuta kella üleskeerava mehhanismi liikumise kiirust ja muid detaile (nt liikumise suund).&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
* Näha karbilt saabunud veateateid.&lt;br /&gt;
* Sisestada infot kella seisundist.&lt;br /&gt;
* Suhelda hooldajate ja tootjatega&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootjale&#039;&#039;&#039;&lt;br /&gt;
* Uuendada kontaktandmeid.&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraatorile&#039;&#039;&#039;&lt;br /&gt;
* Näha võrku ühendatud karpide arvu.&lt;br /&gt;
* Näha karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Veateatega karpide arv süsteemis (üldised arvandmed).&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsed nõuded ===&lt;br /&gt;
* Kõik tegevused peavad olema autoriseeritud.&lt;br /&gt;
* REST + ASP.NET Core + WebAPI tagastab infot valideeritud JSON formaadis.&lt;br /&gt;
* API veatöötlus on tehtud, kasutades standardseid veakoode.&lt;br /&gt;
* API-le on tehtud &#039;health check&#039;.&lt;br /&gt;
* Kõik kasutajad peavad saama end autoriseerida.&lt;br /&gt;
* Kasutaja, tootja ja administraatori tegevused logitakse.&lt;br /&gt;
* Logi ei ole muudetav, vaid on kättesaadav.&lt;br /&gt;
* Kasutaja ega tootja ei näe teiste kasutajate ega tootjate infot.&lt;br /&gt;
* API klient on kohanduv mobiilile, tahvlile ja desktoparvutile.&lt;br /&gt;
* Sisendandmed on valideeritud.&lt;br /&gt;
&lt;br /&gt;
=== Mittefunktsionaalsed nõuded ===&lt;br /&gt;
* API-le on lisatud Swagger fail.&lt;br /&gt;
* Teenus ja tehniline lahendus on dokumenteeritud.&lt;br /&gt;
* Süsteemi kood on vabalt ligipääsetav, täiendatav ning allalaetav.&lt;br /&gt;
 &lt;br /&gt;
Esitame töö etappidena, kus kõigepealt defineerime ära Minimum Viable Producti [https://en.wikipedia.org/wiki/Minimum_viable_product] ehk selle miinimumi, mis pakub kasutajale maksimaalset väärtust. See tähendab API loomist ning esmase kliendi loomist kõigile MVP-s defineeritud kasutajagruppidele. Seejärel realiseerime projekti inkrementide ehk tootearenduse sammudena, milles lisame uusi funktsionaalsusi. Ideaalis jõuame realiseerida kõik sammud, kuid kuna teeme nimetatud tööd antud ajaraamis ja koosseisus esmakordselt, siis võtame vabaduse ka realiseerida korralikult niipalju, kui jõuame projekti käigus ära teha.&lt;br /&gt;
&lt;br /&gt;
Võimalik, et meie lõpptulemus erineb mõnes osas esitatud analüüsist. Seda olenevalt sellest kui edukalt meil õnnestub plaanitud funktsionaalsusi realiseerida. Erisusi plaanime käsitleda vastavas &#039;post production&#039; jaotuses, kus loendame ka projektist kogunenud peamised õppetunnid.&lt;br /&gt;
&lt;br /&gt;
Analüüs valmis (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Product definitsioon ==&lt;br /&gt;
* Kasutaja&lt;br /&gt;
* Kasutaja saab süsteemi logida ning välja logida&lt;br /&gt;
* Kasutaja saab lisada uue kellakarbi&lt;br /&gt;
* Kasutaja saab lisada uue kella kellakarpi&lt;br /&gt;
* Kasutaja saab muuta kella infot kellakarbis&lt;br /&gt;
* Kasutaja saab näha ülevaadet oma karpidest&lt;br /&gt;
* Kasutaja saab muuta kellakarbi seadeid&lt;br /&gt;
* Kasutaja saab kustutada kella karbis&lt;br /&gt;
* Kasutaja saab kustutada kellakarbi &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näeb autoriseeritult logisid &lt;br /&gt;
* Tootja&lt;br /&gt;
* Saab lisada kontaktandmeid&lt;br /&gt;
* Saab kontaktandmeid muuta&lt;br /&gt;
&lt;br /&gt;
== Inkrement #1 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Näeb karbilt saabunud veateateid.&lt;br /&gt;
* Saab kellakarpe juhtida.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* IP-aadresside järgi ülevaadet, millistes riikides karpe kasutatakse (üldised arvandmed).&lt;br /&gt;
* Karpidesse paigaldatud kellade nimistut (ilma muude kasutajaandmeteta).&lt;br /&gt;
* Näeb kasutajate statistikat.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saata personaalseid teateid kellakollektsionääridele.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #2 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* Saab saata teate tootjale.&lt;br /&gt;
* Näeb tootja vastust.&lt;br /&gt;
* Näha karbi seisundit, kas karp on hetkel wifiga ühendatud või mitte.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Administraator&#039;&#039;&#039;&lt;br /&gt;
* Näha kellade üleskeeramise mehhanismide arvnäitajaid (madalaim kiirus, keskmine kiirus, tippkiirus; samuti liikumise suundade arvnäitajaid).&lt;br /&gt;
* Näeb tegevuste ajalugu kliendist.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* Saab lugeda kasutaja teadet.&lt;br /&gt;
* Saab vastata kasutajale.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* Saab info hooldamist vajavate kellade kohta.&lt;br /&gt;
&lt;br /&gt;
== Inkrement #3 ==&lt;br /&gt;
&#039;&#039;&#039;Kasutaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tootja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Hooldaja&#039;&#039;&#039;&lt;br /&gt;
* On ehitatud keeletugi.&lt;br /&gt;
&lt;br /&gt;
Inkrementid valmisid (1) metoodika abil, vt lähemalt [[#Kasutatavad metoodikad|projekti metoodikate]] sektsioonist.&lt;br /&gt;
&lt;br /&gt;
= Kasutatud kirjandus ja allikad =&lt;br /&gt;
&lt;br /&gt;
1. Albahari, Joseph, Albari, Ben 2017. C# 7.0 in A Nutshell. Sebastopol: O’Reilly &amp;lt;br&amp;gt;&lt;br /&gt;
2. MariaDB Foundation. MariaDB. Kättesaadav:https://mariadb.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
3. Martin, Robert 2018. Clean Architecture. Boston: Pearson Education &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tkuuskma</name></author>
	</entry>
</feed>