MOT

From ICO wiki

Meeskond

  • Merike Meizner
  • Helen Oppar (loobus)
  • Hardi Tiitus

Veebiteenus ja klientrakendus

Veebiteenus ja klientrakendus on saadavad aadressilt: http://enos.itcollege.ee/~mmeizner/MOT/

Analüüs

Kirjeldus

MOT on võistluste infosüsteem, kust saab infot võistluste kohta ja neile registeerida. Kasutajad saavad süsteemi registreeruda kahes rollis: korraldajana või osalejana. Korraldajad saavad lisada süsteemi uusi spordialasid, võistlusi, toimumiskohti, neid hallata, vaadata infot enda korraldatavale võistlusele registreerunud kasutajate kohta ning pärast võistlust lisada tulemusi. Tulemusi saab sisestada ka võistlejate kohta, kes ei ole võistlusele eelregistreerinud, vaid registreerivad võistlusel kohapeal. Osaleja rollis kasutaja saab ennast võistlustele kirja panna. Võistlusele registreeruda on võimalik nii üksikvõistleja kui meeskonnana. Meeskonna registreerimisel registreerib üks kasutaja terve meeskonna. Kasutaja võib võistlusele registreerida ka teise inimese, sisestades tema andmed. Meeskonna andmeid saavad hallata kõik meeskonna liikmed. Võistluste üldinfo (toimumisaeg, -koht jms) on kättesaadav kõigile. Lisaks on süsteemi peale üks administraatori õigustega kasutaja, kes saab hallata kõiki võistlusi ja kasutajaid.

Korraldajad saavad vaadata enda korraldatud ürituste statistikat: kui palju on mingil võistlusel osalejaid, millistes vanusegruppides on osalejad jms. Osalejad näevad statistikat enda osalemiste kohta: kui palju nad on võistlustel osalenud, milliseid tulemusi nad on saavutanud. Administraator näeb eelnevale lisaks ka üldist kasutusstatistikat: kui palju on registreeritud korraldajaid, kui palju osalejaid, kui palju on mingil ajaperioodil tehtud võistlustele registreeringuid.

Kasutajad

  • Administraator
  • Korraldajad
  • Osalejad
  • Registeerimata kasutaja

Infosüsteemi funktsionaalsus

Must have

  • Peab saama registreerida kasutajaid korraldaja või osaleja rollis

  • Korraldaja saab lisada võistluse toimumiskohti
  • Korraldaja saab lisada võistlusi
  • Korraldaja saab muuta enda lisatud võistluse andmeid
  • Korraldaja saab kustutada enda lisatud võistlusi
  • Korraldaja näeb võistlejate nimekirja ja nende andmeid
  • Korraldaja saab muuta enda kui kasutaja andmeid
  • Korraldaja saab lisada uusi spordialasid

  • Osaleja näeb sisestatud võistlusi
  • Osaleja näeb, kui palju on mingile võistlusele osalejaid registreeritud
  • Osaleja saab otsida võistlusi toimumiskoha ja -aja järgi
  • Osaleja saab registreeruda võistlustele
  • Osaleja näeb võistlusi, kuhu ta on registreerunud
  • Osaleja saab oma registreeringu tühistada
  • Osaleja saab muuta enda kui kasutaja andmeid
  • Osaleja saab registreerida võistlusele meeskonda
  • Osaleja saab registreerida võistlusele teise isiku

  • Meeskonna liige saab muuta meeskonna liikmeid
  • Meeskonna liige saab muuta meeskonna andmeid
  • Meeskonna liige saab vaadata meeskonna tulemusi

  • Registeerimata kasutaja näeb sisestatud võistlusi
  • Registeerimata kasutaja näeb, kui palju on mingile võistlusele osalejaid registreeritud
  • Registeerimata kasutaja saab otsida võistlusi toimumiskoha ja -aja järgi

  • Administraator saab teha kõike eelnevat
  • Administraator saab kustutada/muuta/lisada kasutajaid

Nice to have

  • Kasutaja näeb statistikat enda möödunud võistluste tulemuste kohta
  • Võistluste eest on võimalik läbi süsteemi tasuda
  • Korraldaja saab lisada võistluse tulemusi

Andmemudeli kirjeldus

  • Isik - hoitakse isikute andmeid
  • Kasutaja - hoitakse kasutajate andmeid
  • Kasutajagrupp - sõnastik erinevatest rollidest (admin, korraldaja, osaleja)
  • Meeskond - hoitakse meeskonna andmeid
  • Isik meeskonnas - hoitakse andmeid isikute kuulumisest meeskonda
  • Võistlus - hoitakse andmeid võistluste kohta
  • Registreerimine - hoitakse andmeid isikute/meeskondade võistlusele registreerumise kohta
  • Osalemine - hoitakse andmeid võistlustel osalemise kohta (sh tulemused)
  • Võistluse tüüp - hoitakse andmeid erinevate võistlusalade kohta
  • Võistluskoht - hoitakse andmeid võistluskohtade kohta
  • Võistlus võistluskohas - hoitakse andmeid võistluste toimumise kohta võistluskohtades
  • Maakond - sõnastik maakondadest, kus asuvad võistluskohad

XML

XML

<?xml version="1.0" encoding="utf-8" ?>
<competitions>
  <competition id="1">
    <name><![CDATA[SEB maraton]]></name>
    <competitionType id="3" hasPoints="false" hasTime="true" isIndividual="true">
      <name><![CDATA[jooksmine]]></name>
    </competitionType>
    <competitionPlace id="2" county="Harjumaa">
      <name><![CDATA[vanalinn]]></name>
      <address><![CDATA[Vabaduse väljak, kesklinn, Tallinn]]></address>
      <comment><![CDATA[Tulge soovitatavalt ühistranspordiga]]></comment>
    </competitionPlace>
    <time>2018-05-12</time>
    <comment><![CDATA[Numbri kätte saamine kiriku kõrvalt]]></comment>
    <registrations>
      <person id="3" personalIdCode="38712098765">
         <firstName><![CDATA[Peeter]]></firstName>
         <lastName><![CDATA[Pihlakas]]></lastName>
      </person>
      <person id="4" personalIdCode="38712568754">
        <firstName><![CDATA[Jaan]]></firstName>
        <lastName><![CDATA[Jalakas]]></lastName>
      </person>
      <person id="5">
        <firstName><![CDATA[Jüri]]></firstName>
        <lastName><![CDATA[Juurikas]]></lastName>
      </person>
    </registrations>
  </competition>
  <competition id="2">
    <name><![CDATA[Pärnu volley]]></name>
    <competitionType id="3" hasPoints="true" hasTime="false" isIndividual="false">
      <name><![CDATA[võrkpall]]></name>
    </competitionType>
    <competitionPlace id="4" county="Pärnumaa">
      <name><![CDATA[Pärnu rand]]></name>
      <address><![CDATA[Pärnu linn, Pärnu rand]]></address>
    </competitionPlace>
    <time>2018-07-17</time>
    <registrations>
      <team id="1">
        <name><![CDATA[Mõmmikud]]></name>
        <people>
          <person id="6" personalIdCode="38909127865">
            <firstName><![CDATA[Volli]]></firstName>
            <lastName><![CDATA[Mõmmik]]></lastName>
          </person>
          <person id="7" personalIdCode="38506126787">
            <firstName><![CDATA[Sulev]]></firstName>
            <lastName><![CDATA[Mõmmik]]></lastName>
          </person>
        </people>
      </team>
      <team id="2">
        <name><![CDATA[Karvikud]]></name>
        <people>
          <person id="8" personalIdCode="38212097854">
            <firstName><![CDATA[Kalle]]></firstName>
            <lastName><![CDATA[Karvik]]></lastName>
          </person>
          <person id="9" personalIdCode="48504128854">
            <firstName><![CDATA[Malle]]></firstName>
            <lastName><![CDATA[Karvik]]></lastName>
          </person>
        </people>
      </team>
    </registrations>
  </competition>
</competitions>

XML skeem

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="competitions">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="competition">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string" />
              <xs:element name="competitionType">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="name" type="xs:string" />
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:int" use="required" />
                  <xs:attribute name="hasPoints" type="xs:boolean" use="required" />
                  <xs:attribute name="hasTime" type="xs:boolean" use="required" />
                  <xs:attribute name="isIndividual" type="xs:boolean" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="competitionPlace">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="name" type="xs:string" />
                    <xs:element name="address" type="xs:string" />
                    <xs:element minOccurs="0" name="comment" type="xs:string" />
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:int" use="required" />
                  <xs:attribute name="county" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="time" type="xs:date" />
              <xs:element minOccurs="0" name="comment" type="xs:string" />
              <xs:element name="registrations">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" maxOccurs="unbounded" name="team">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="name" type="xs:string" />
                          <xs:element name="people">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="person">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="firstName" type="xs:string" />
                                      <xs:element name="lastName" type="xs:string" />
                                    </xs:sequence>
                                    <xs:attribute name="id" type="xs:int" use="required" />
                                    <xs:attribute name="personalIdCode" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:int" use="required" />
                      </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" maxOccurs="unbounded" name="person">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="firstName" type="xs:string" />
                          <xs:element name="lastName" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:int" use="required" />
                        <xs:attribute name="personalIdCode" type="xs:string" use="optional" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:int" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT to HTML

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/competitions">
    <html>
      <head>
        <title>Competitions</title>
      </head>
      <body>
        <h1>Võistlused</h1>
        <xsl:for-each select="competition">
          <h2>
            <xsl:value-of select="name" />
          </h2>

          <b>Võistlustüüp: </b>
          <xsl:value-of select="competitionType/name"/>

          <h4>Asukoht</h4>
          <ul>
            <li>
              <xsl:value-of select="competitionPlace/name"/>
            </li>
            <li>
              <xsl:value-of select="competitionPlace/address"/>
            </li>
            <xsl:if test="competitionPlace/comment">
              <li>
                <xsl:value-of select="competitionPlace/comment"/>
              </li>
            </xsl:if>
          </ul>

          <h4>Osalejad</h4>
          <xsl:choose>
            <xsl:when test="competitionType/@isIndividual='true'">
              <ul>
                <xsl:for-each select="registrations/person">
                  <li>
                    <xsl:value-of select="firstName"/>
                    <xsl:text>        </xsl:text>
                    <xsl:value-of select="lastName"/>
                  </li>
                </xsl:for-each>
              </ul>
            </xsl:when>
            <xsl:otherwise>
              <ul>
                <xsl:for-each select="registrations/team">
                  <li>
                    <xsl:value-of select="name"/>
                  </li>
                </xsl:for-each>
              </ul>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSLT to XML

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/competitions">
    <xsl:element name="competitions">
      <xsl:element name="individual">
        <xsl:for-each select="competition">
          <xsl:if test="competitionType/@isIndividual='true'">
            <xsl:element name="competition">
              <xsl:attribute name="id">
                <xsl:value-of select="@id"/>
              </xsl:attribute>
              <xsl:attribute name="hasPoints">
                <xsl:value-of select="competitionType/@hasPoints"/>
              </xsl:attribute>
              <xsl:attribute name="hasTime">
                <xsl:value-of select="competitionType/@hasTime"/>
              </xsl:attribute>
              <xsl:element name="name">
                <xsl:value-of select="name"/>
              </xsl:element>
              <xsl:element name="place">
                <xsl:value-of select="competitionPlace/name"/>
                <xsl:text>, </xsl:text>
                <xsl:value-of select="competitionPlace/address"/>
              </xsl:element>
              <xsl:element name="comment">
                <xsl:value-of select="comment"/>
              </xsl:element>
            </xsl:element>
          </xsl:if>
        </xsl:for-each>
      </xsl:element>
      <xsl:element name="team">
        <xsl:for-each select="competition">
          <xsl:if test="competitionType/@isIndividual='false'">
            <xsl:element name="competition">
              <xsl:attribute name="id">
                <xsl:value-of select="@id"/>
              </xsl:attribute>
              <xsl:attribute name="hasPoints">
                <xsl:value-of select="competitionType/@hasPoints"/>
              </xsl:attribute>
              <xsl:attribute name="hasTime">
                <xsl:value-of select="competitionType/@hasTime"/>
              </xsl:attribute>
              <xsl:element name="name">
                <xsl:value-of select="name"/>
              </xsl:element>
              <xsl:element name="place">
                <xsl:value-of select="competitionPlace/name"/>
                <xsl:text>, </xsl:text>
                <xsl:value-of select="competitionPlace/address"/>
              </xsl:element>
              <xsl:element name="comment">
                <xsl:value-of select="comment"/>
              </xsl:element>
            </xsl:element>
          </xsl:if>
        </xsl:for-each>
      </xsl:element>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

Retsensioonid

Meie kirjutatud veebiteenuse, klientrakenduse ja XML'i retsensioon: Team Raavo V2

Tegevuste logi

11.02.2018 Meeskonna moodustamine.
29.03.2018 Projekti teemas kokku leppimine, analüüsiga alustamine, wiki-lehe loomine.
31.03.2018 Analüüsi lõpetamine, andmemudeli kirjelduse koostamine.