Screaming Magic Gnomes

From EIK wiki

Kodutöö aines "Võrgurakendused II: hajussüsteemide ehitamine" Aastal 2016.

Meeskond

Märt Häkkinen
Siim Osa
Taavi Kivimaa


Idee

Meie idee on luua juuksuri- ja kosmeetikasalongi broneerimissüsteem, kasutades C# keelt. Klientidel on võimalik valida välja protseduur, ning aeg ja teenindaja. Salongil on võimalik näha ja hallata broneeringuid.


XML

<?xml version="1.0" encoding="UTF-8"?>
<Salong nimi="Kristiine">
<Teenused Tyyp="Juuksehooldus">
  <Teenus Tyyp="Mees" Id="1">
    <Nimi>
      <![CDATA[Peosoeng]]>
    </Nimi>
    <Hind Valuuta="Euro">
      22
    </Hind>
    <Kestvus aeg="Minut">
      60
    </Kestvus>
  </Teenus>
  <Teenus Tyyp="Mees" Id="2">
    <Nimi>
      <![CDATA[Masinlõikus]]>
    </Nimi>
    <Hind Valuuta="Euro">
      8
    </Hind>
    <Kestvus aeg="Minut">
      45
    </Kestvus>
  </Teenus>
  <Teenus Tyyp="Mees" Id="3">
    <Nimi>
      <![CDATA[Värvimine]]>
    </Nimi>
    <Hind Valuuta="Euro">
      36
    </Hind>
    <Kestvus aeg="Minut">
      90
    </Kestvus>
  </Teenus>
    <Teenus Tyyp="Naine" Id="4">
    <Nimi>
      <![CDATA[Peosoeng]]>
    </Nimi>
    <Hind Valuuta="Euro">
      25
    </Hind>
    <Kestvus aeg="Minut">
      90
    </Kestvus>
  </Teenus>
  <Teenus Tyyp="Naine" Id="5">
    <Nimi>
      <![CDATA[Värvimine]]>
    </Nimi>
    <Hind Valuuta="Euro">
      36
    </Hind>
    <Kestvus aeg="Minut">
      90
    </Kestvus>
  </Teenus>
</Teenused>
 
 <Teenused Tyyp="Kosmeetik">
  <Teenus Tyyp="Naine" Id="6">
    <Nimi>
      <![CDATA[Kollageen leht-mask]]>
    </Nimi>
    <Hind Valuuta="Euro">
      35
    </Hind>
    <Kestvus aeg="Minut">
      90
    </Kestvus>
  </Teenus>
</Teenused>
   <Teenused Tyyp="Maniküür">
  <Teenus Tyyp="Mees" Id="6">
    <Nimi>
      <![CDATA[Maniküür]]>
    </Nimi>
    <Hind Valuuta="Euro">
      12
    </Hind>
    <Kestvus aeg="Minut">
      30
    </Kestvus>
  </Teenus>
</Teenused>
 
  <Reserveeringud>
  <Reserveering Id="1" TeenuseId="2">
    <KliendiId>
      37
    </KliendiId>
    <TöötajaId>
      1440
    </TöötajaId>
    <Aeg>
      <Algus>
        2016-04-17T14:00:00
      </Algus>
      <Lõpp>
        2016-04-17T14:45:00
      </Lõpp>
    </Aeg>
        <Makstud>
        true
      </Makstud>
  </Reserveering>
    <Reserveering Id="1" TeenuseId="6">
    <KliendiId>
      24
    </KliendiId>
    <TöötajaId>
      200
    </TöötajaId>
    <Aeg>
      <Algus>
        2016-04-17T14:00:00
      </Algus>
      <Lõpp>
        2002-04-17T15:00:00
      </Lõpp>
    </Aeg>
      <Makstud>
        false
      </Makstud>
  </Reserveering>
  </Reserveeringud>
  </Salong>

XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Salong">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Teenused">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="Teenus">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Nimi" type="xs:string" minOccurs="1" maxOccurs="1"/>
                    <xs:element name="Hind" type="xs:string" minOccurs="1" maxOccurs="1">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedByte">
                            <xs:attribute name="Valuuta" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Kestvus" minOccurs="1" maxOccurs="1">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedByte">
                            <xs:attribute name="aeg" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="Tyyp" type="xs:string" use="required" />
                  <xs:attribute name="Id" type="xs:unsignedByte" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="Tyyp" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element name="Reserveeringud">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="Reserveering">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="KliendiId" type="xs:unsignedByte" />
                    <xs:element name="TöötajaId" type="xs:unsignedShort" />
                    <xs:element name="Aeg">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Algus" type="xs:dateTime" />
                          <xs:element name="Lõpp" type="xs:dateTime" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Makstud" type="xs:boolean" />
                  </xs:sequence>
                  <xs:attribute name="Id" type="xs:unsignedInt" use="required" />
                  <xs:attribute name="TeenuseId" type="xs:unsignedInt" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="nimi" type="xs:string" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT

<?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="/">
    <html>
      <head>
        <title>Kristiine Salong</title>
      </head>
      <body>


        <h1>Teenused</h1>
        <h2>Meestele</h2>
        <!--Kirjutame välja meeste ja naiste teenused, hinnad ja ajalise kestvuse eraldi tabelitesse!-->
        <ul>
          <Table>
            <tr>
              <th>Nimi</th>
              <th>Kestvus</th>
              <th>Hind</th>
            </tr>

            <xsl:for-each select="Salong/Teenused/Teenus">
              <xsl:if test="@Tyyp='Mees'">
                <tr>
                  <td>
                    <xsl:value-of select="./Nimi"/>
                  </td>
                  <td>
                    <xsl:value-of select="./Hind"/>
                  </td>
                  <td>
                    <xsl:value-of select="./Kestvus"/>
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
          </Table>
        </ul>
        <h2>Naistele</h2>
        <ul>
          <Table>
            <tr>
              <th>Nimi</th>
              <th>Kestvus</th>
              <th>Hind</th>
            </tr>

            <xsl:for-each select="Salong/Teenused/Teenus">
              <xsl:if test="@Tyyp='Naine'">
                <tr>
                  <td>
                    <xsl:value-of select="./Nimi"/>
                  </td>
                  <td>
                    <xsl:value-of select="./Hind"/>
                  </td>
                  <td>
                    <xsl:value-of select="./Kestvus"/>
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
          </Table>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
</?xml>

Veebiteenuse analüüs

Meie veebiteenuse eesmärk klientide broneeringuid ja nende kasutajate kontaktandmeid/logineid. Teenus peab võimaldama kasutajal veebirakenduses sisselogida, kasutades emaili aadressi ja parooli. Andmebaasis hoiame me broneeringuid(telefoninr, nimi, kellaaeg, teenus, kas makstud), pakutavaid teenuseid ja kasutajate paroole/emaile (adminid) . Veebiteenus võimaldab meil suhelda veebirakenduse ja andmebaasi vahel,tagastada ja muuta informatsiooni teenuste/broneeringute ja kasutajaandmete kohta. Veebiteenus aitab meil kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes. Samuti peab olema võimalik veebiteenuse poole pöördumiste arvu piiramist ja piirangute haldamist teostada.

Andmebaasiskeem

SMG.png

Rakenduse sisu

Rakenduse funktsionaalsus kliendina:
on võimalik näha olemasolevaid broneeringuid.
on võimalik broneeringuid kustutada.
on võimalik lisada uusi teenuseid (koos hinna, kirjelduse ja kestvusega)


Rakenduse funktsionaalsus tavakasutajana (ilusalongi kliendina):
on võimalik teha broneeringuid ja neid kuni 24h enne broneeringu algust kustutada.
on võimalik näha vabasid aegu.
on võimalik näha pakutavaid teenuseid (hinda, kestvust, kirjeldust).
on võimalik saada 24h enne broneeringu algust meeldetuletus


Rakenduses peaksid olema järgmised võimalused (Must have):
1. Meil on olemas kasutajad, kellega saab sisse logida
2. Broneeringuid on võimalik eemaldada.
3. On võimalik näha pakutavaid teenuseid (hinnakirja, maksuvust, kestvust)
4. On võimalik lisada, eemaldada ja muuta pakutavaid teenuseid
5. Kliendil on võimalik näha vabasid aegu oma soovitud teenusele.

Rakenduses võiksid olla lisavõimalused (Nice to have):
1. Kasutajale saadetakse päev enne broneeringut meeldetuletus
2. Kasutajale saab panna meeldetuletuse, kuna broneerida järgmine juukselõikus (või mõni muu teenus)
3. On võimalik registreerida kasutades sotsiaalmeediat
4. Võimalus registreerida uusi kasutajaid (adminid)
5. Võimalus tellida uus parool oma kasutajale, kui see ununeb (adminid).
6. Võimalus saata kliendile arveid pakutud teenuste eest
7. Kasutaja saab broneerida mitu teenust ühe broneeringuga


Rakendus ja veebiteenus

On võimalik alla tirida siit. [1]