Meeskond "Nämm-nämm"

From ICO wiki
Jump to navigationJump to search

Idee

Meie poolne teenus:

Meie poolt pakutud teenus lubab kohvikupidajatel oma kohvikuid ja seal pakutavaid toite süsteemi registreerida. Süsteemis on võimalik kohvikuid ja nende kaupa ilma sisse logimata kommenteerida ja võibolla ehk isegi hinnata.


Rakendus:

Tuleb üks asp.net veebileht, kus kohvikupidajatel on võimalus sisselogides oma menüüd üles panna/neid muuta/kustutada jne. Kui (tava)kasutaja tuleb lehele, on tal võimalus sisestada oma aadress, mille peale kuvatakse talle lähima kohviku asukoht (kaardi pealt näeb ka teiste kohvikute aadresse). Loomulikult on võimalik vaadata kõigi kohvikute menüüsid ning otsida menüüde seast meelepärast toitu. Mingit otsest sisselogimist pealehelt ei tule, selle jaoks teeb eraldi lehe.

Meeskond

  • Joosep Ilves
  • Kaspar Kallasmaa
  • Siim Aaver

XML

XML

<?xml version="1.0" encoding="utf-8" ?>
<kohvikud>
  <kohvik id="0">
    <nimi>Saiapäts</nimi>
    <aadress laius="59.395515" pikkus="24.664993">
      <riik>Eesti</riik>
      <maakond>Harjumaa</maakond>
      <linnVald>Tallinn</linnVald>
      <indeks>64739</indeks>
      <tanav>pätsi</tanav>
      <maja>5</maja>
    </aadress>   
 
    <lahtiolekuajad>   
      <alates>               <!--nende lahtiolekuaegade kehtivuse alguskuupäev. Saab määrata lahtiolekuajad perioodide kaupa. Näiteks 01.01 alates on ühed, aga 01.06 teised. Seejuures saab igasse perioodi lisada ka erandeid, mil on kohvik suletud või teistel aegadel lahti.-->
        <aasta>2011</aasta>
        <kuu>01</kuu>
        <paev>01</paev>
      </alates>   
      <lahtiolekuaeg>
        <nadalapaev>E</nadalapaev>
        <avamisaeg>
          <tund>08</tund>
          <minut>00</minut>
        </avamisaeg>
        <sulgemisaeg>
          <tund>19</tund>
          <minut>00</minut>
        </sulgemisaeg>
      </lahtiolekuaeg>      
      <lahtiolekuaeg>
        <nadalapaev>T</nadalapaev>
        <avamisaeg>
          <tund>09</tund>
          <minut>30</minut>
        </avamisaeg>
        <sulgemisaeg>
          <tund>10</tund>
          <minut>00</minut>
        </sulgemisaeg>
      </lahtiolekuaeg> 

      <erandid>        <!--lahtiolekuaegade erandid-->
        <erand>
          <kuupaev>
            <aasta>2011</aasta>
            <kuu>02</kuu>
            <paev>24</paev>
          </kuupaev>
          <avamisaeg>
            <tund>suletud</tund>
            <minut></minut>
          </avamisaeg>
          <sulgemisaeg>
            <tund></tund>
            <minut></minut>
          </sulgemisaeg>
        </erand>
        <erand>
          <kuupaev>
            <aasta>2011</aasta>
            <kuu>02</kuu>
            <paev>25</paev>
          </kuupaev>
          <avamisaeg>
            <tund>12</tund>
            <minut>00</minut>
          </avamisaeg>
          <sulgemisaeg>
            <tund>16</tund>
            <minut>20</minut>
          </sulgemisaeg>
        </erand>
      </erandid>      
    </lahtiolekuajad>    
    
    <menüü>
      <kuupaev>                         <!--kuupäev, millal antud menüü kehtib-->
        <aasta>2011</aasta>
        <kuu>02</kuu>
        <paev>24</paev>
      </kuupaev>
      <kategooria>
        <nimetus>suupisted</nimetus>
        <soodustused>                   <!--Igale tootegrupile saab määrata soodustused eraldi. Soodustusi võib olla mitme erineva suurusega-->
          <soodustus>
            <liik>ISIC</liik>
            <suurus>10</suurus>
            <yhik>%</yhik>
          </soodustus>
          <soodustus>                   <!--võimalik on panna ka soodustusi, kus hinnast antakse mingi kindel summa alla, mitte protsent-->
            <liik>kliendikaart</liik>
            <suurus>0.1</suurus>
            <yhik>EUR</yhik>
          </soodustus>
        </soodustused>
        <toit>
          <nimetus>tikuvõileib magushapus kastmes</nimetus>
          <ports>                       <!--ühte toitu võib olla mitmes erinevas suuruses, seejuures saab ka igale suurusele erinevad soodustused anda-->
            <suurus>väike</suurus>
            <saadaval>1</saadaval>      <!--1 - true; 0 - false-->
              <hind>
                <vaartus>9.90</vaartus>
                <valuuta>EUR</valuuta>
              </hind>
          </ports>
          <ports>
            <suurus>suur</suurus>
            <saadaval>0</saadaval>
              <hind>
                <vaartus>9.90</vaartus>
                <valuuta>EUR</valuuta>
              </hind>
          </ports>
        </toit>
      </kategooria>

      <kategooria>
        <nimetus>mittealkoholsed joogid</nimetus>
        ...
      </kategooria>

      <kategooria>
        <nimetus>lisad</nimetus>
        <soodustused></soodustused>
        <toit>
          <nimetus>ahjukartul</nimetus>
          <ports>
            <suurus>suur</suurus>
            <saadaval>1</saadaval>
            <hind>
              <vaartus>0</vaartus>
              <valuuta>EUR</valuuta>
            </hind>
          </ports>
          <ports>
            <suurus>väike</suurus>
            <saadaval>1</saadaval>
            <hind>
              <vaartus>0</vaartus>
              <valuuta>EUR</valuuta>
            </hind>
          </ports>
        </toit>
      </kategooria>

    </menüü>
  </kohvik>
</kohvikud>


XML Schema

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="kohvikud">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="kohvik" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="nimi" type="xs:string" />
              <xs:element name="aadress">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="riik" type="xs:string" />
                    <xs:element name="maakond" type="xs:string" />
                    <xs:element name="linnVald" type="xs:string" />
                    <xs:element name="indeks" type="xs:unsignedShort" />
                    <xs:element name="tanav" type="xs:string" />
                    <xs:element name="maja" type="xs:string" />
                  </xs:sequence>
                  <xs:attribute name="laius" type="xs:decimal" use="required" />
                  <xs:attribute name="pikkus" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="lahtiolekuajad">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="alates">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="aasta" type="xs:unsignedShort" />
                          <xs:element name="kuu" type="xs:unsignedByte" />
                          <xs:element name="paev" type="xs:unsignedByte" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element maxOccurs="unbounded" name="lahtiolekuaeg">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="nadalapaev" type="xs:string" />
                          <xs:element name="avamisaeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:unsignedByte" />
                                <xs:element name="minut" type="xs:unsignedByte" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="sulgemisaeg">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="tund" type="xs:unsignedByte" />
                                <xs:element name="minut" type="xs:unsignedByte" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="erandid">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="erand">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="kuupaev">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="aasta" type="xs:unsignedShort" />
                                      <xs:element name="kuu" type="xs:unsignedByte" />
                                      <xs:element name="paev" type="xs:unsignedByte" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="avamisaeg">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="tund" type="xs:string" />
                                      <xs:element name="minut" type="xs:string" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="sulgemisaeg">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="tund" type="xs:string" />
                                      <xs:element name="minut" type="xs:string" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="menüü" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="kuupaev">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="aasta" type="xs:unsignedShort" />
                          <xs:element name="kuu" type="xs:unsignedByte" />
                          <xs:element name="paev" type="xs:unsignedByte" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element maxOccurs="unbounded" name="kategooria">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="nimetus" type="xs:string" />
                          <xs:element name="soodustused">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element minOccurs="0" maxOccurs ="unbounded" name="soodustus">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="liik" type="xs:string" />
                                      <xs:element name="suurus" type="xs:decimal" />
                                      <xs:element name="yhik" type="xs:string" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element maxOccurs="unbounded" name="toit">
                            <xs:complexType mixed="true">
                              <xs:sequence>
                                <xs:element name="nimetus" type="xs:string" />
                                <xs:element minOccurs="0" maxOccurs="unbounded" name="ports">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="suurus" type="xs:string" />
                                      <xs:element name="saadaval" type="xs:boolean" />
                                      <xs:element name="hind">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="vaartus" type="xs:decimal" />
                                            <xs:element name="valuuta" type="xs:string" />
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedShort" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


XSL

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <xsl:for-each select="kohvikud">
  <h2>Kohvik <xsl:value-of select="kohvik/nimi"/></h2>
  <p>Asukoht: <xsl:value-of select="kohvik/aadress/tanav"/> <xsl:value-of select="kohvik/aadress/maja"/>, 
  <xsl:value-of select="kohvik/aadress/linnVald"/>, <xsl:value-of select="kohvik/aadress/maakond"/>, 
  <xsl:value-of select="kohvik/aadress/riik"/>
  </p>
  
  <p>Lahtiolekuajad: <br />
  <xsl:for-each select="kohvik/lahtiolekuajad/lahtiolekuaeg">
<xsl:value-of select="nadalapaev"/> - 
<xsl:value-of select="avamisaeg/tund"/>:<xsl:value-of select="avamisaeg/minut"/> - 
<xsl:value-of select="sulgemisaeg/tund"/>:<xsl:value-of select="sulgemisaeg/minut"/><br />
  </xsl:for-each>
</p>

 <p>Lahtiolekuaegade erandid: <br />
   <xsl:for-each select="kohvik/lahtiolekuajad/erandid/erand">
<xsl:value-of select="kuupaev/paev"/>/<xsl:value-of select="kuupaev/kuu"/>/<xsl:value-of select="kuupaev/aasta"/>  - 
<xsl:value-of select="avamisaeg/tund"/>:<xsl:value-of select="avamisaeg/minut"/> - 
<xsl:value-of select="sulgemisaeg/tund"/>:<xsl:value-of select="sulgemisaeg/minut"/><br />
  </xsl:for-each>
 </p>
  
<h3><strong>MENÜÜ</strong></h3>

<p><xsl:for-each select="kohvik/menüü/kategooria">
<strong>-- <xsl:value-of select="nimetus"/> -- </strong><br /><br />


SOODUSTUSED: <br />
<table border="1">
<tr>
  <th align="center">Liik</th>
  <th align="center">Suurus</th>
  <th align="center">Ühik</th>
</tr>
<xsl:for-each select="soodustused/soodustus">
<tr>
  <td align="center"><xsl:value-of select="liik"/></td>
  <td align="center"><xsl:value-of select="suurus"/></td>
  <td align="center"><xsl:value-of select="yhik"/></td>
</tr>
</xsl:for-each>

</table> <br /> <br />

<xsl:for-each select="toit">
<strong><xsl:value-of select="nimetus"/></strong> <br />
<xsl:for-each select="ports">
<xsl:value-of select="suurus"/> - <xsl:value-of select="hind/vaartus"/> <xsl:value-of select="hind/valuuta"/><br />
</xsl:for-each>
</xsl:for-each>

   </xsl:for-each></p>
  </xsl:for-each>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

XSLT tulemus

Veebiteenus

Meie veebiteenus on valmistatud WCF baasil. See valik võimaldas teha teenusele formsi põhjal kasutajaliidese ja 'cache', mistõttu teeb teenus andmebaasi suunas vähem päringuid. Teenuse kasutajaliideses on logi, kuhu salvestatakse kõik meetodid ja nende parameetrid, mida kasutaja on väljakutsunud. Lisaks salvestatakse iga sekundi tagant logi ka faili.

Teenus/andmebaas on paindlik:

  • Võimalik on koostada menüüsid erinevatele kuupäevadele. Näiteks saab terve nädala menüü juba ette ära määrata.
  • Soodustused on seostatud kindla toiduga. Seega saab igale toidule määrata erinevad soodustused.
  • Võimalik on ühe toiduga seostada 0 kuni piiramatu arv portse või soodustusi.
  • Iga portsul eraldi on olemas 'saadavuse' väli. Seega on võimalik tekitada olukord, kus näiteks suur ports on otsa lõppenud aga väike veel saadaval.

Public meetodid:

      * List<EntityKohvik> getEntityKohvikList();
      * EntityKohvik getEntityKohvikById(int id);
      * List<EntityKaup> getItemData(int kohvikID, string date);
      * Boolean insertItem(int kohvikID, String kategooria, String nimetus, String kuupaev, List<EntityPorts> portsud, List<EntitySoodustus> soodukad);
      * List<EntityUudis> getEntityUudisList();
      * List<EntityUudis> getEntityUudisListByAmount(int limit);
      * EntityUudis getEntityUudisById(int id);
      * List<EntityLahtiolekuAjad> getEntityLahtiolekuAjadByKohvikId(int kohvikId);
      * List<EntityKommentaar> getEntityKommentaarList();
      * List<EntityKommentaar> getEntityKommentaarFor(KommentaarType kommentaarType, int id);
      * int getCommentCountFor(KommentaarType kommentaarType, int id);
      * bool addKommentaarFor(KommentaarType kommentaarType, int rowIdToAddKommentaarFor, String sisu, String autor);
      * List<EntityValuuta> getCurrency();
      * int login(String user, String pass);



Rakendus ASP.NET baasil

Logi

18. aprill

Töötab toitude lisamise leht. Autocomplete.

16. aprill

Adminni lehel sisselogimine.

7. aprill

Teenus oskab kohvikuid ja nende andmeid puhverdada. Need on ühtlasi ka kõige tihedamini teenuselt küsitavad andmed.

2. aprill

Läksime ASMX teenuse pealt üle WCF teenusele et saaks ka andmete puhverdamise teha.

23. märts

Töötavad kohviku andmete, menüüde ja kommentaaride näitamise vaated.

9. märts

Andmebaas ülesseatud ja lisatud kirjed päringute testimiseks.

8. märts

Tõenäoliselt lõplik versioon andmebaasi disainist.

1. märts

Esialgne andmebaasi disain. Mõned tabelid ja kirjed andmebaasi, et oleks võimalik katsetada.

27. veebruar

XML fail, schema, xsl. Esialgne andmebaasi mudel.

24. veebruar

Google mapsi integreerimine rakendusse.

22. veebruar

SVN ülesseadmine, esialgne rakenduse disain.

21. veebruar

Meeskonna moodustamine, teema valimine.