Lingviinid

From ICO wiki
Jump to navigationJump to search

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

Meeskond

  • Olga Trikk
  • Johanna Kammiste
  • Triin Oja
  • Karin Lepik

XML

XML fail näidisandmetega

<?xml version="1.0" encoding="utf-8" ?>
<Salon>
  <Division id="1" name="products">
    <Item id="1" type="oil">
      <Name><![CDATA[Massaažiõli]]></Name>
      <Description><![CDATA[Sobib suurepäraselt massaažide läbiviimiseks.]]></Description>
      <Amount unit="ml">200</Amount>
      <Price currency="eur">10.00</Price>
      <Stock>3</Stock>
    </Item>
    <Item id="2" type="oil">
      <Name><![CDATA[Kehaõli]]></Name>
      <Description><![CDATA[Sobib igapäevaseks kasutamiseks.]]></Description>
      <Amount unit="ml">200</Amount>
      <Price currency="eur">7.00</Price>
      <Stock>0</Stock>
    </Item>
    <Item id="3" type="cream">
      <Name><![CDATA[Näokreem]]></Name>
      <Description><![CDATA[Sobib igapäevaseks kasutamiseks.]]></Description>
      <Amount unit="ml">200</Amount>
      <Price currency="eur">8.00</Price>
      <Stock>3</Stock>
    </Item>
    <Item id="4" type="cream">
      <Name><![CDATA[Kätekreem]]></Name>
      <Description><![CDATA[Teeb käed siidiselt pehmeks.]]></Description>
      <Amount unit="ml">100</Amount>
      <Price currency="eur">5.00</Price>
      <Stock>2</Stock>
    </Item>
  </Division>
  <Division id="2" name="services">
    <Item id="1" type="massage">
      <Name><![CDATA[Spordimassaaž]]></Name>
      <Description><![CDATA[Sobib hästi lihaste lõdvestamiseks peale tugevat sportimist.]]></Description>
      <Duration unit="min">45</Duration>
      <Price currency="eur">18.00</Price>
      <Employees>
        <Employee>Juta Juurikas</Employee>
      </Employees>
    </Item>
    <Item id="2" type="massage">
      <Name><![CDATA[Seljamassaaž]]></Name>
      <Description><![CDATA[Põhjalik massaaž seljapiirkonnale. Sobib tööpingetest vabastamiseks.]]></Description>
      <Duration unit="h">1</Duration>
      <Price currency="eur">40.00</Price>
      <Employees>
        <Employee>Juta Juurikas</Employee>
        <Employee>Malle Maasikas</Employee>
      </Employees>
    </Item>
    <Item id="3" type="nailjob">
      <Name><![CDATA[Klassikaline maniküür]]></Name>
      <Description><![CDATA[Igapäevaseks.]]></Description>
      <Duration unit="min">45</Duration>
      <Price currency="eur">18.00</Price>
      <Employees>
        <Employee>Kairi Kaalikas</Employee>
        <Employee>Mari Mustikas</Employee>
      </Employees>
    </Item>
    <Item id="4" type="nailjob">
      <Name><![CDATA[Kiirmaniküür]]></Name>
      <Description><![CDATA[Kiireteks aegadeks.]]></Description>
      <Duration unit="min">25</Duration>
      <Price currency="eur">12.00</Price>
      <Employees>
        <Employee>Mari Mustikas</Employee>
        <Employee>Janne Joovikas</Employee>
      </Employees>
    </Item>
    <Item id="5" type="nailjob">
      <Name><![CDATA[Prantsuse maniküür]]></Name>
      <Description><![CDATA[Midagi erilist erilisemateks päevadeks.]]></Description>
      <Duration unit="h">1</Duration>
      <Price currency="eur">21.00</Price>
      <Employees>
        <Employee>Sille Sinikas</Employee>
        <Employee>Vika Vaarikas</Employee>
      </Employees>
    </Item>
    <Item id="6" type="nailjob">
      <Name><![CDATA[Klassikaline pediküür]]></Name>
      <Description><![CDATA[Turgutab keha ja vaimu.]]></Description>
      <Duration unit="h">1.5</Duration>
      <Price currency="eur">28.00</Price>
      <Employees>
        <Employee>Vika Vaarikas</Employee>
        <Employee>Janne Joovikas</Employee>
      </Employees>
    </Item>
  </Division>
</Salon>

XML skeemifail

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Salon">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Division">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="Item">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Name" type="xs:string" />
                    <xs:element name="Description" type="xs:string" />
                    <xs:element minOccurs="0" name="Duration">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:float">
                            <xs:attribute name="unit" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" name="Amount">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:float">
                            <xs:attribute name="unit" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Price">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:float">
                            <xs:attribute name="currency" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" name="Employees">
                      <xs:complexType>
                        <xs:sequence minOccurs="0">
                          <xs:element maxOccurs="unbounded" name="Employee" type="xs:string" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element minOccurs="0" name="Stock" type="xs:unsignedByte" />
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:unsignedShort" use="required" />
                  <xs:attribute name="type" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedByte" use="required" />
            <xs:attribute name="name" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSL 1

<?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>Ilusalongi hinnakiri</title>
        <style>
          h2 
          {
            color: blue;
          }
          table, td, th 
          {
            border: 3px groove ##990099;
            border-collapse: collapse;
            padding: 3px;
            text-align: left
          }
        </style>
      </head>
      <body>
        <h2>Toodete hinnakiri</h2>
        <table>
          <tr>
            <th>Toode</th>
            <th>Kogus</th>
            <th>Hind</th>
          </tr>
          <xsl:for-each select="Salon/Division">
            <xsl:if test="@id = 1">
              <xsl:for-each select="Item">
                <tr>
                  <td>
                    <xsl:value-of select="Name"></xsl:value-of>
                  </td>
                  <td>
                    <xsl:value-of select="concat(Amount, ' ', Amount/@unit)"></xsl:value-of>
                  </td>
                  <td>
                    <xsl:value-of select="concat(Price, ' ', Price/@currency)"></xsl:value-of>
                  </td>
                </tr>
              </xsl:for-each>
            </xsl:if>
          </xsl:for-each> 
        </table>
        <h2>Teenuste hinnakiri</h2>
        <table>
          <tr>
            <th>Teenus</th>
            <th>Kestus</th>
            <th>Hind</th>
          </tr>
            <xsl:for-each select="Salon/Division">
                <xsl:if test="@id = 2">
                  <xsl:for-each select="Item">
                  <tr>
                    <td>
                      <xsl:value-of select="Name"></xsl:value-of>
                    </td>
                    <td>
                      <xsl:value-of select="concat(Duration, ' ', Duration/@unit)"></xsl:value-of> 
                    </td>
                    <td>
                      <xsl:value-of select="concat(Price, ' ', Price/@currency)"></xsl:value-of>
                    </td>
                  </tr>
                  </xsl:for-each>
                </xsl:if>
            </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSL 2

<?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>Ilusalongi pakkumised</title>
          <style>
            table {width: 300px;
                  border: 1px dotted black;}
            table tr {height: 30px;}
            h2 {color: blue;}
            .bold {font-weight: bold;}
            ul {list-style-type: none;
                padding: 0px;
                margin: 0px;}
          </style>
        </head>
        <body>
          <h2>Tooted</h2>
          
            <xsl:for-each select="Salon/Division">
              <xsl:if test="@id = 1">
                <xsl:for-each select="Item">
                  <table >
                    <tr>
                      <td colspan="2" class="bold"><xsl:value-of select="Name"></xsl:value-of><br /></td>
                    </tr>
                    <tr>
                      <td>Kogus: <xsl:value-of select="concat(Amount, ' ', Amount/@unit)"/></td>
                      <td>Laos: 
                        <xsl:choose>
                          <xsl:when test="Stock>0">
                          On
                        </xsl:when>
                          <xsl:otherwise>Ei ole</xsl:otherwise>
                        </xsl:choose>
                      </td>
                    </tr>
                    <tr>
                      <td colspan="2">
                        <xsl:value-of select="Description"></xsl:value-of>
                      </td>
                    </tr>
                  </table>
                  <br/>
                </xsl:for-each>
              </xsl:if>
            </xsl:for-each>
          
          <h2>Teenused</h2>
          <xsl:for-each select="Salon/Division">
              <xsl:if test="@id = 2"> 
                <xsl:for-each select="Item">
                  <table>
                    <tr>
                      <td colspan="2" class="bold"><xsl:value-of select="Name"></xsl:value-of><br /></td>
                    </tr>
                    <tr>
                      <td>Läbiviijad:
                        <ul>
                          <xsl:for-each select="Employees/Employee">
                          <li>
                            <xsl:value-of select="."/>
                          </li>
                          </xsl:for-each>
                        </ul>
                      </td>
                      <td>
                        Kestvus: <xsl:value-of select="concat(Duration, ' ', Duration/@unit)"/>
                      </td>
                    </tr>
                    <tr>
                      <td colspan="2">
                        <xsl:value-of select="Description"></xsl:value-of>
                      </td>
                    </tr>
                  </table>
                  <br/>
                </xsl:for-each>
              </xsl:if>
            </xsl:for-each>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>

Klientrakendus ja veebiteenus

Must have

  1. kasutajatuvastus / sisselogimine
  2. võimalus lisada, vaadata ja hallata isikute andmeid
  3. võimalus lisada, vaadata ja hallata broneeringuid
  4. võimalus lisada, vaadata ja hallata teenuseid

Nice to have

  1. võimalus vaadata ja hallata töögraafikuid
  2. võimalus vaadata ja hallata arveid
  3. võimalus arveid koostada ja välja printida
  4. võimalus vaadata statistikat (broneeringud, arved, töötunnid)

Klientrakendus on mõeldud abistamaks ilusalongi igapäevaseid toimetusi. Rakendusega saab lisada ja kustutada broneeringuid, vaadata oma broneeringuid nädala või päeva kaupa, lisada admebaasi kliente ja kollege, muuta nende andmeid ja neid kustutada. Lisaks saab lisada teenuseid ja teenuste infot, neid muuta ja kustutada.

Klientrakenduse jaoks on kasutatud WPF-i, veebiteenuse jaoks WCF-i.

Rakenduses on võimalik sisse logida kahes rollis: admin ja töötaja.

Admini kontoga saab vaadata ja kustutada kõikide töötajate broneeringuid, lisada/muuta/kustutada kliente ja kolleege.

Töötaja kontoga saab lisada või kustutada ainult enda broneeringuid, teiste omi saab ainult vaadata. Lisaks saab avalehel näha enda broneeringuid, enda andmeid (ka muuta) ja enda kliente (kliente kellel sellele töötajale on vähemalt üks broneering).


Andmebaasi olemi-suhte diagramm

Projekti allalaadimine

Veebiteenus ja klientrakendus ühes solution'is

Klientrakenduse published versioon, mis suhtleb Azure's oleva veebiteenusega (tasuta trial aegub 26.06.2014)

Rakendust avades saab sisse logida kasutajanimega "administrator" ja parooliga "AbRaCaDaBra". Töötaja konto vaatamiseks tuleb see administraatorina kõigepealt tekitada ning siis töötaja kasutajanime ja parooliga sisse logida.