Talupood: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Ttilk (talk | contribs)
Ttilk (talk | contribs)
 
(24 intermediate revisions by 2 users not shown)
Line 12: Line 12:


==XML==
==XML==
===XML===
<source lang="xml">
<source lang="xml">
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<Ostukorvid>
<Ostukorvid>
Line 24: Line 25:
       <Aadress>Tallinn, Raja 4c</Aadress>
       <Aadress>Tallinn, Raja 4c</Aadress>
       <Telefon Tüüp="home">33333333</Telefon>
       <Telefon Tüüp="home">33333333</Telefon>
       <Soodustus></Soodustus>
       <Soodustus>25</Soodustus>
       <ArveSaaja>Kalle</ArveSaaja>
       <ArveSaaja>Kalle</ArveSaaja>
       <ArveAadress>Tallinn, Raja 4c</ArveAadress>
       <ArveAadress>Tallinn, Raja 4c</ArveAadress>
Line 72: Line 73:
       <Aadress>Tallinn, Raja 4c</Aadress>
       <Aadress>Tallinn, Raja 4c</Aadress>
       <Telefon Tüüp="work">555555555</Telefon>
       <Telefon Tüüp="work">555555555</Telefon>
       <Soodustus></Soodustus>
       <Soodustus>0</Soodustus>
       <ArveSaaja>Peeter</ArveSaaja>
       <ArveSaaja>Peeter</ArveSaaja>
       <ArveAadress>Peetriküla</ArveAadress>
       <ArveAadress>Peetriküla</ArveAadress>
Line 96: Line 97:
       <Aadress>Pärnu, Raja 4</Aadress>
       <Aadress>Pärnu, Raja 4</Aadress>
       <Telefon Tüüp="home">555555555</Telefon>
       <Telefon Tüüp="home">555555555</Telefon>
       <Soodustus>0.1</Soodustus>
       <Soodustus>10</Soodustus>
       <ArveSaaja>Malle</ArveSaaja>
       <ArveSaaja>Malle</ArveSaaja>
       <ArveAadress>Pärnu, Raja 4</ArveAadress>
       <ArveAadress>Pärnu, Raja 4</ArveAadress>
Line 129: Line 130:
   </Ostukorv>
   </Ostukorv>
</Ostukorvid>
</Ostukorvid>
</source>


===XML schema (XSD)===
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Ostukorvid">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Ostukorv">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Andmed">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Kuupäev" type="xs:string" />
                    <xs:element name="Kasutaja">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="KasutajaNimi" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="Id" type="xs:integer" use="required" />
                        <xs:attribute name="Külaline" type="xs:boolean" use="required" />
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Aadress" type="xs:string" />
                    <xs:element name="Telefon">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedInt">
                            <xs:attribute name="Tüüp" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Soodustus" type="xs:decimal" />
                    <xs:element name="ArveSaaja" type="xs:string" />
                    <xs:element name="ArveAadress" type="xs:string" />
                    <xs:element name="Märkus" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Tooted">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="Toode">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:choice maxOccurs="unbounded">
                            <xs:element name="Talu">
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="TaluNimi" type="xs:string" />
                                </xs:sequence>
                                <xs:attribute name="Id" type="xs:integer" use="required" />
                              </xs:complexType>
                            </xs:element>
                            <xs:element name="TellitavKogus" type="xs:decimal" />
                            <xs:element name="Yhik" type="xs:string" />
                            <xs:element name="TooteYhikuHind" type="xs:decimal" />
                          </xs:choice>
                        </xs:sequence>
                        <xs:attribute name="Id" type="xs:integer" use="required" />
                        <xs:attribute name="TooteNimi" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="Id" type="xs:integer" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
</source>
</source>


===Teema===
===XSLT===
===XML===
 
<?xml version="1.0" encoding="utf-8" ?>
<source lang="xml">
<Ostukorvid>
<?xml version="1.0" encoding="utf-8"?>
   <Ostukorv Id="1">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     <Andmed>
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
       <Kuupäev>17.03.2017</Kuupäev>
  <xsl:output method="html" indent="yes"/>
       <Kasutaja Id="1" Külaline="false">
   <xsl:template match="/">
        <KasutajaNimi>Kalle</KasutajaNimi>
     <html>
      </Kasutaja>
       <head>
      <Aadress>Tallinn, Raja 4c</Aadress>
        <link href="mystyle.css" rel="stylesheet" type="text/css" />
      <Telefon Tüüp="home">33333333</Telefon>
      </head>
      <Soodustus></Soodustus>
       <body>
      <ArveSaaja>Kalle</ArveSaaja>
        <xsl:for-each select="Ostukorvid/Ostukorv">
      <ArveAadress>Tallinn, Raja 4c</ArveAadress>
 
      <Märkus>Lisa info tellimuse kohta</Märkus>
          <h1>
    </Andmed>
            Tellimus nr:
    <Tooted>
            <xsl:value-of select="@Id"/>
      <Toode Id="1" TooteNimi="Kartul">
          </h1>
        <Talu Id="1">
          <h3>
          <TaluNimi>Juhani</TaluNimi>
          <xsl:choose>
        </Talu>
            <xsl:when test="Andmed/Kasutaja/@Külaline = 'true'">
        <TellitavKogus>10.5</TellitavKogus>
              <xsl:text>KÜLALINE </xsl:text>
        <Yhik>kg</Yhik>
            </xsl:when>
        <TooteYhikuHind>1.0</TooteYhikuHind>
            <xsl:when test="Andmed/Kasutaja/@Külaline = 'false'">
      </Toode>
              <xsl:text>REG KASUTAJA </xsl:text>
      <Toode Id="1" TooteNimi="Kartul">
            </xsl:when>
        <Talu Id="1">
            <xsl:otherwise>
          <TaluNimi>Juhani</TaluNimi>
              <xsl:text>ADMIN</xsl:text>
        </Talu>
            </xsl:otherwise>
        <TellitavKogus>10.5</TellitavKogus>
          </xsl:choose>
        <TooteYhikuHind>1.0</TooteYhikuHind>
          </h3>
        <Yhik>kg</Yhik>
          <br/>
      </Toode>
          <table id="table1">
      <Toode Id="2" TooteNimi="Tomat">
            <xsl:variable name="Kuupäev" select="Andmed/Kuupäev"/>
        <Talu Id="1">
            <xsl:variable name="Tellija" select="Andmed/ArveSaaja"/>
          <TaluNimi>Juhani</TaluNimi>
            <xsl:variable name="Aadress" select="Andmed/ArveAadress"/>
        </Talu>
            <xsl:variable name="Isik" select="Andmed/Kasutaja/KasutajaNimi"/>
        <TellitavKogus>1</TellitavKogus>
            <xsl:variable name="Telefon" select="Andmed/Telefon"/>
        <Yhik>tk</Yhik>
            <xsl:variable name="Märkus" select="Andmed/Märkus"/>
        <TooteYhikuHind>2.5</TooteYhikuHind>
            <tr>
      </Toode>
              <td width="40%">
      <Toode Id="4" TooteNimi="Sibul">
                Kuupäev:
        <Talu Id="3">
              </td>
           <TaluNimi>Jaani</TaluNimi>
              <td>
        </Talu>
                <xsl:value-of select="$Kuupäev"/>
        <TellitavKogus>2</TellitavKogus>
              </td>
        <Yhik>kg</Yhik>
            </tr>
        <TooteYhikuHind>0.5</TooteYhikuHind>
            <tr>
      </Toode>
              <td width="40%">
    </Tooted>
                Tellija:
  </Ostukorv>
              </td>
  <Ostukorv Id="2">
              <td>
    <Andmed>
                <xsl:value-of select="$Tellija"/>
      <Kuupäev>18.03.2017</Kuupäev>
              </td>
      <Kasutaja Id="1" Külaline="true">
            </tr>
        <KasutajaNimi>Peeter</KasutajaNimi>
            <tr>
      </Kasutaja>
              <td>Aadress:</td>
      <Aadress>Tallinn, Raja 4c</Aadress>
              <td>
      <Telefon Tüüp="work">555555555</Telefon>
                <xsl:value-of select="$Aadress"/>
      <Soodustus></Soodustus>
              </td>
      <ArveSaaja>Peeter</ArveSaaja>
            </tr>
      <ArveAadress>Peetriküla</ArveAadress>
            <tr>
      <Märkus></Märkus>
              <td>Kontaktisik:</td>
    </Andmed>
              <td>
    <Tooted>
                <xsl:value-of select="$Isik"/>
      <Toode Id="2" TooteNimi="Tomat">
                <xsl:text>, Tel:  </xsl:text>
        <Talu Id="1">
                <xsl:value-of select="$Telefon"/>
          <TaluNimi>Juhani</TaluNimi>
              </td>
        </Talu>
            </tr>
        <TellitavKogus>1</TellitavKogus>
          <tr>
        <Yhik>tk</Yhik>
              <td colspan="2" >
        <TooteYhikuHind>2.5</TooteYhikuHind>
                <xsl:text>Märkused:  </xsl:text>  
      </Toode>
                <xsl:value-of select="$Märkus"/></td>
    </Tooted>  
            </tr>
  </Ostukorv>
          </table>
  <Ostukorv Id="3">
           <h2></h2>
    <Andmed>
          <table>
      <Kuupäev>18.03.2017</Kuupäev>
            <!-- Temp Kogusumma arvutamiseks -->
      <Kasutaja Id="2" Külaline="true">
            <xsl:variable name="Summa">
        <KasutajaNimi>Malle</KasutajaNimi>
              <xsl:variable name="SummaTemp">
      </Kasutaja>
                <xsl:for-each select="Tooted/Toode">
      <Aadress>Pärnu, Raja 4</Aadress>
                  <number>
      <Telefon Tüüp="home">555555555</Telefon>
                    <xsl:value-of select="TellitavKogus * TooteYhikuHind"/>
      <Soodustus>0.1</Soodustus>
                  </number>
      <ArveSaaja>Malle</ArveSaaja>
                </xsl:for-each>
      <ArveAadress>Pärnu, Raja 4</ArveAadress>
              </xsl:variable>
      <Märkus></Märkus>
              <xsl:value-of select="sum(msxsl:node-set($SummaTemp)/number)"/>
    </Andmed>
            </xsl:variable>
    <Tooted>
            <xsl:variable name="Soodustus" select ="Andmed/Soodustus"/>
      <Toode Id="1" TooteNimi="Kartul">
            <tr>
        <Talu Id="1">
              <th colspan="7" bgcolor="#848484">Valitud tooted</th>
          <TaluNimi>Juhani</TaluNimi>
            </tr>
        </Talu>
            <tr>
        <TellitavKogus>10.5</TellitavKogus>
              <th>Nr</th>
        <Yhik>kg</Yhik>
              <th>Talu</th>
        <TooteYhikuHind>1.0</TooteYhikuHind>
              <th>Kaup</th>
      </Toode>
              <th>Ühik</th>
      <Toode Id="4" TooteNimi="Sibul">
              <th>Kogus</th>
        <Talu Id="3">
              <th>Hind</th>
          <TaluNimi>Jaani</TaluNimi>
              <th>Summa</th>
        </Talu>
 
        <TellitavKogus>2</TellitavKogus>
            </tr>
        <Yhik>kg</Yhik>
            <xsl:for-each select="Tooted/Toode">
        <TooteYhikuHind>0.5</TooteYhikuHind>
              <xsl:sort select="Talu/TaluNimi"/>
      </Toode>
              <tr>
          <Toode Id="5" TooteNimi="Liha">
                <td>
        <Talu Id="1">
                  <xsl:value-of select="position()"/>
          <TaluNimi>Nöpri</TaluNimi>
                </td>
        </Talu>
                <td>
        <TellitavKogus>1</TellitavKogus>
                  <xsl:value-of select="Talu/TaluNimi"/>
        <Yhik>kg</Yhik>
                </td>
         <TooteYhikuHind>2.5</TooteYhikuHind>
                <td>
       </Toode>
                  <xsl:value-of select="@TooteNimi"/>
     </Tooted>
                </td>
   </Ostukorv>
                <td>
</Ostukorvid>
                  <xsl:value-of select="Yhik"/>
                </td>
                <td>
                  <xsl:choose>
                    <xsl:when test="Yhik = 'kg'">
                      <xsl:value-of select="format-number(TellitavKogus, '0.00')"/>
                    </xsl:when>
                    <xsl:when test="Yhik = 'tk'">
                      <xsl:value-of select="format-number(TellitavKogus, '0')"/>
                    </xsl:when>
                    <xsl:otherwise>
                      <xsl:value-of select="format-number(TellitavKogus, '0.00')"/>
                    </xsl:otherwise>
                  </xsl:choose>
                </td>
                <td>
                  <xsl:value-of select="format-number(TooteYhikuHind, '0.00')"/>                
                </td>
                <td>
                  <xsl:value-of select="format-number(TellitavKogus * TooteYhikuHind, '0.00')"/>
                </td>
              </tr>
            </xsl:for-each>
            <tr>
              <td colspan="5" rowspan="5"></td>
            </tr>
            <tr>
              <td>Summa</td>
              <td>
                <xsl:value-of select="format-number($Summa, '0.00')"/>
              </td>
            </tr>
            <tr>
              <td>Soodustus</td>
              <td>
                <xsl:value-of select="format-number(($Soodustus div 100) * $Summa, '0.00')"/>
              </td>
            </tr>
            <tr>
              <td>20%:</td>
              <td>
                <xsl:value-of select="format-number($Summa * 0.2, '0.00')"/>
              </td>
            </tr>
            <tr>
              <td>Kokku:</td>
              <td>
                <xsl:value-of select="format-number($Summa * (1 - ($Soodustus div 100)) * 1.2, '0.00')"/>
              </td>
            </tr>
          </table>
         </xsl:for-each>
       </body>
     </html>
   </xsl:template>
</xsl:stylesheet>
</source>


===XML schema (XSD)===
=== HTML LAYOUT ===
===XSLT 1===
[[Image:Tellimus.PNG|1000px]]
===XSLT 2===


=Retsensioonid=
=Retsensioonid=
Retsensioon meeskonnale KartKicker: [https://wiki.itcollege.ee/index.php/Talk:PC_KartKicker Talk:PC_KartKicker]
<br>
<br>
=Veebiteenus=
==Idee==
Tegemist on online talutoodete poega. Rakenduse eesmärgiks on võimaldada ühelt poolt kasutajal sooritada talutoodete tellimusi ühest või mitmest talust ning teisalt taluomanikel müüa ja hallata müügilaos olevaid tooteid ning tellimusi.
Tavakasutajal on võimalus teostada järgnevaid tegevusi:
* Toodete nimekirja sirvimine tootest lähtuvalt
* Toodete nimekirja sirvimine talust lähtuvalt
* Ostukorvi koostamine erinevate toodete lisamise teel
* Ostukorvi vaatamine ja muutmine
* Ostukorvi tellimuseks muutmine
* Kasutajakonto loomine
* Sisselogimine, et tellimust esitada
Taluomanikul ehk tootjal on võimalus teostada järgnevaid tegevusi:
* Toodete lisamine
* Toodete koguste haldamine
* Tellimuste vaatamine
* Kasutajakonto loomine
* Talude haldamine
==Rakendus==
Rakenduses kasutatavad tehnoloogiad:
* ASP.NET MVC Web API
* Entity Framework 6.x
* MSSQL
* JSON veebiteenused
==Andmemudel==
Vajalik andmemudel rakenduse toimimiseks:
[[https://my.vertabelo.com/doc/gNWPrQXbTzGUklJEDj6T2yEW3j2UfW5G Vertabelo]]
<gallery mode="packed-hover" heights="350">
File:talupood.png|Andmebaasi skeem
</gallery>
Andmemudel koosneb järgnevatest tabelitest:
1. Talu
* Tabel hoiab endas andmeid tooteid müüvate talude kohta.
2. Talu_toode
* Tabel hoiab endas iga talu toodete nimekirja.
3. Talu_kasutaja
* Tabel hoiab endas seoseid talude ja kasutajate vahel.
* Kasutajal võib olla mitu hallatavat talu.
* Ühel talul on üks kasutaja.
4. Kasutaja
* Tabel hoiab endas erinevate kasutajate andmeid.
5. Toode
* Tabel hoiab endas erinevate unikaalsete toodete nimekirja.
6. Tellimus_kasutaja
* Tabel hoiab endas tellimuse teinud kasutaja andmeid juhul, kui tellimust ei esitanud anonüümne kasutaja (sisselogimata kasutaja).
7. Tellimus
* Tabel hoiab endas tellimuste nimekirja ning ajalugu.
8. Tellimus_toode
* Tabel hoiab endas konkreetse tellimusega seotud toote andmeid.
==Funktsionaalsus==
===Põhifunktsionaalsus===
* Toodete nimekirja sirvimine tootest lähtuvalt
* Toodete nimekirja sirvimine talust lähtuvalt
* Ostukorvi koostamine erinevate toodete lisamise teel
* Ostukorvi vaatamine ja muutmine
* Ostukorvi tellimuseks muutmine
* Toodete lisamine
* Toodete koguste haldamine
* Tellimuste vaatamine
* Talude haldamine
* Sisselogimine, ülal mainitud tegevuste sooritamiseks
===Lisafunktsionaalsus===
* Kasutajakonto loomine
* Tellimuse vormistamine külalisena
* Tegevuste logimine
* Kasutusstatistika
===Kasutajalood===
=====Registreeritud ja registreerimata ostjad=====
Toodete sirvimine:
*Kasutajal on võimalik tooteid otsida talude ja toodete järgi.
*Neis vaadetes ei kuvata tooteid, millel laoseis puudub.
*Nimekiri kuvatakse galeriina.
Toodete ostukorvi lisamine:
*Toodete ostukorvi lisamiseks peab kasutaja olema toodete nimekirja lehelt toote valima.
*Kasutajal on võimalus osta ka mitu sama tüüpi toodet.
Ostukorvi haldamine:
*Ostukorvis kuvatakse varem ostukorvi lisatud tooted ja valitud kogused.
*Koguseid saab vajadusel suurendada/vähendada või toodet ostukorvist eemaldada.
*Ostukorvi tellimuse vormistamiseks, peab klient ostukorvi sisu kinnitama.
*Selle tulemusel koostatakse tellimused taludele.
*Ostukorvi on võimalik puhastada, vajutades "Tühjenda" nuppu.
=====Müüjad (talupidajad)=====
Talude haldamine:
*Talusid on võimalik lisada ja muuta.
*Andmete sisestamise järgselt toimub andmete valideerimine ja selle õnnestumise korral andmed salvestatakse.
Toodete haldamine:
*Tooteid saab lisada.
*Igale tootele saab määrata sobivad ühikud ja muud parameetrid.
*Tooteandmete salvestamisel valideeritakse andmed ning selle õnnestumisel andmed salvestatakse.
*Toote laoseisu muutmiseks tuleb avada vastava toote leht ning uuendada kogust ja tegevus salvestada.
Tellimuste haldamine:
*Tellimuste haldamiseks tuleb avada "Tellimused" lehekülg.
*Tellimuste nimekirjas kuvatakse tellimused koos andmetega.
*Tellimuste vaatamiseks tuleb konkreetne tellimus avada.
*Tellimuse lehel kuvatakse tellimusega seotud toodete andmed ning tellija andmed.
==Lõpptoode==
'''Lõpptoode:'''
[http://enos.itcollege.ee/~ttilk/VR2/Projekt/ Lõpptoode]

Latest revision as of 13:50, 14 June 2017

Meeskond

Mihkel Matson
Taavi Tilk

Idee

Jätkame C# aines alustatud ideed, milleks oli talutoodete tellimise keskkond (sarnane epoele). Idee täpsemalt on pakkuda kvaliteetseid ja värskeid talude saadusi otse tootjalt läbi selleks ettenähtud veebirakenduse. Klient saab veebilehel valida tooteid, vormistada tellimusi ning talunik omalt poolt hallata tooteid, tellimusi ja kliente.


Projekt

XML

XML

<?xml version="1.0" encoding="utf-8" ?>
<Ostukorvid>
  <Ostukorv Id="1">
    <Andmed>
      <Kuupäev>17.03.2017</Kuupäev>
      <Kasutaja Id="1" Külaline="false">
        <KasutajaNimi>Kalle</KasutajaNimi>
      </Kasutaja>
      <Aadress>Tallinn, Raja 4c</Aadress>
      <Telefon Tüüp="home">33333333</Telefon>
      <Soodustus>25</Soodustus>
      <ArveSaaja>Kalle</ArveSaaja>
      <ArveAadress>Tallinn, Raja 4c</ArveAadress>
      <Märkus>Lisa info tellimuse kohta</Märkus>
    </Andmed>
    <Tooted>
      <Toode Id="1" TooteNimi="Kartul">
        <Talu Id="1">
          <TaluNimi>Juhani</TaluNimi>
        </Talu>
        <TellitavKogus>10.5</TellitavKogus>
        <Yhik>kg</Yhik>
        <TooteYhikuHind>1.0</TooteYhikuHind>
      </Toode>
      <Toode Id="1" TooteNimi="Kartul">
        <Talu Id="1">
          <TaluNimi>Juhani</TaluNimi>
        </Talu>
        <TellitavKogus>10.5</TellitavKogus>
        <TooteYhikuHind>1.0</TooteYhikuHind>
        <Yhik>kg</Yhik>
      </Toode>
      <Toode Id="2" TooteNimi="Tomat">
        <Talu Id="1">
          <TaluNimi>Juhani</TaluNimi>
        </Talu>
        <TellitavKogus>1</TellitavKogus>
        <Yhik>tk</Yhik>
        <TooteYhikuHind>2.5</TooteYhikuHind>
      </Toode>
      <Toode Id="4" TooteNimi="Sibul">
        <Talu Id="3">
          <TaluNimi>Jaani</TaluNimi>
        </Talu>
        <TellitavKogus>2</TellitavKogus>
        <Yhik>kg</Yhik>
        <TooteYhikuHind>0.5</TooteYhikuHind>
      </Toode>
    </Tooted>
  </Ostukorv>
  <Ostukorv Id="2">
    <Andmed>
      <Kuupäev>18.03.2017</Kuupäev>
      <Kasutaja Id="1" Külaline="true">
        <KasutajaNimi>Peeter</KasutajaNimi>
      </Kasutaja>
      <Aadress>Tallinn, Raja 4c</Aadress>
      <Telefon Tüüp="work">555555555</Telefon>
      <Soodustus>0</Soodustus>
      <ArveSaaja>Peeter</ArveSaaja>
      <ArveAadress>Peetriküla</ArveAadress>
      <Märkus></Märkus>
    </Andmed>
    <Tooted>
      <Toode Id="2" TooteNimi="Tomat">
        <Talu Id="1">
          <TaluNimi>Juhani</TaluNimi>
        </Talu>
        <TellitavKogus>1</TellitavKogus>
        <Yhik>tk</Yhik>
        <TooteYhikuHind>2.5</TooteYhikuHind>
      </Toode>
    </Tooted>    
  </Ostukorv>
  <Ostukorv Id="3">
    <Andmed>
      <Kuupäev>18.03.2017</Kuupäev>
      <Kasutaja Id="2" Külaline="true">
        <KasutajaNimi>Malle</KasutajaNimi>
      </Kasutaja>
      <Aadress>Pärnu, Raja 4</Aadress>
      <Telefon Tüüp="home">555555555</Telefon>
      <Soodustus>10</Soodustus>
      <ArveSaaja>Malle</ArveSaaja>
      <ArveAadress>Pärnu, Raja 4</ArveAadress>
      <Märkus></Märkus>
    </Andmed>
    <Tooted>
      <Toode Id="1" TooteNimi="Kartul">
        <Talu Id="1">
          <TaluNimi>Juhani</TaluNimi>
        </Talu>
        <TellitavKogus>10.5</TellitavKogus>
        <Yhik>kg</Yhik>
        <TooteYhikuHind>1.0</TooteYhikuHind>
      </Toode>
      <Toode Id="4" TooteNimi="Sibul">
        <Talu Id="3">
          <TaluNimi>Jaani</TaluNimi>
        </Talu>
        <TellitavKogus>2</TellitavKogus>
        <Yhik>kg</Yhik>
        <TooteYhikuHind>0.5</TooteYhikuHind>
      </Toode>
          <Toode Id="5" TooteNimi="Liha">
        <Talu Id="1">
          <TaluNimi>Nöpri</TaluNimi>
        </Talu>
        <TellitavKogus>1</TellitavKogus>
        <Yhik>kg</Yhik>
        <TooteYhikuHind>2.5</TooteYhikuHind>
      </Toode>
    </Tooted>
  </Ostukorv>
</Ostukorvid>

XML schema (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="Ostukorvid">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Ostukorv">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Andmed">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Kuupäev" type="xs:string" />
                    <xs:element name="Kasutaja">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="KasutajaNimi" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="Id" type="xs:integer" use="required" />
                        <xs:attribute name="Külaline" type="xs:boolean" use="required" />
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Aadress" type="xs:string" />
                    <xs:element name="Telefon">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedInt">
                            <xs:attribute name="Tüüp" type="xs:string" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Soodustus" type="xs:decimal" />
                    <xs:element name="ArveSaaja" type="xs:string" />
                    <xs:element name="ArveAadress" type="xs:string" />
                    <xs:element name="Märkus" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Tooted">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="Toode">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:choice maxOccurs="unbounded">
                            <xs:element name="Talu">
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="TaluNimi" type="xs:string" />
                                </xs:sequence>
                                <xs:attribute name="Id" type="xs:integer" use="required" />
                              </xs:complexType>
                            </xs:element>
                            <xs:element name="TellitavKogus" type="xs:decimal" />
                            <xs:element name="Yhik" type="xs:string" />
                            <xs:element name="TooteYhikuHind" type="xs:decimal" />
                          </xs:choice>
                        </xs:sequence>
                        <xs:attribute name="Id" type="xs:integer" use="required" />
                        <xs:attribute name="TooteNimi" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="Id" type="xs:integer" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </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>
        <link href="mystyle.css" rel="stylesheet" type="text/css" />
      </head>
      <body>
        <xsl:for-each select="Ostukorvid/Ostukorv">

          <h1>
            Tellimus nr:
            <xsl:value-of select="@Id"/>
          </h1>
          <h3>
          <xsl:choose>
            <xsl:when test="Andmed/Kasutaja/@Külaline = 'true'">
              <xsl:text>KÜLALINE </xsl:text>
            </xsl:when>
            <xsl:when test="Andmed/Kasutaja/@Külaline = 'false'">
              <xsl:text>REG KASUTAJA </xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <xsl:text>ADMIN</xsl:text>
            </xsl:otherwise>
          </xsl:choose>
          </h3>
          <br/>
          <table id="table1">
            <xsl:variable name="Kuupäev" select="Andmed/Kuupäev"/>
            <xsl:variable name="Tellija" select="Andmed/ArveSaaja"/>
            <xsl:variable name="Aadress" select="Andmed/ArveAadress"/>
            <xsl:variable name="Isik" select="Andmed/Kasutaja/KasutajaNimi"/>
            <xsl:variable name="Telefon" select="Andmed/Telefon"/>
            <xsl:variable name="Märkus" select="Andmed/Märkus"/>
            <tr>
              <td width="40%">
                Kuupäev:
              </td>
              <td>
                <xsl:value-of select="$Kuupäev"/>
              </td>
            </tr>
            <tr>
              <td width="40%">
                Tellija:
              </td>
              <td>
                <xsl:value-of select="$Tellija"/>
              </td>
            </tr>
            <tr>
              <td>Aadress:</td>
              <td>
                <xsl:value-of select="$Aadress"/>
              </td>
            </tr>
            <tr>
              <td>Kontaktisik:</td>
              <td>
                <xsl:value-of select="$Isik"/>
                <xsl:text>, Tel:  </xsl:text>
                <xsl:value-of select="$Telefon"/>
              </td>
            </tr>
          <tr>
              <td colspan="2" >
                <xsl:text>Märkused:  </xsl:text> 
                <xsl:value-of select="$Märkus"/></td>
            </tr>
          </table>
          <h2></h2>
          <table>
            <!-- Temp Kogusumma arvutamiseks -->
            <xsl:variable name="Summa">
              <xsl:variable name="SummaTemp">
                <xsl:for-each select="Tooted/Toode">
                  <number>
                    <xsl:value-of select="TellitavKogus * TooteYhikuHind"/>
                  </number>
                </xsl:for-each>
              </xsl:variable>
              <xsl:value-of select="sum(msxsl:node-set($SummaTemp)/number)"/>
            </xsl:variable>
            <xsl:variable name="Soodustus" select ="Andmed/Soodustus"/>
            <tr>
              <th colspan="7" bgcolor="#848484">Valitud tooted</th>
            </tr>
            <tr>
              <th>Nr</th>
              <th>Talu</th>
              <th>Kaup</th>
              <th>Ühik</th>
              <th>Kogus</th>
              <th>Hind</th>
              <th>Summa</th>

            </tr>
            <xsl:for-each select="Tooted/Toode">
              <xsl:sort select="Talu/TaluNimi"/>
              <tr>
                <td>
                  <xsl:value-of select="position()"/>
                </td>
                <td>
                  <xsl:value-of select="Talu/TaluNimi"/>
                </td>
                <td>
                  <xsl:value-of select="@TooteNimi"/>
                </td>
                <td>
                  <xsl:value-of select="Yhik"/>
                </td>
                <td>
                  <xsl:choose>
                    <xsl:when test="Yhik = 'kg'">
                      <xsl:value-of select="format-number(TellitavKogus, '0.00')"/>
                    </xsl:when>
                    <xsl:when test="Yhik = 'tk'">
                      <xsl:value-of select="format-number(TellitavKogus, '0')"/>
                    </xsl:when>
                    <xsl:otherwise>
                      <xsl:value-of select="format-number(TellitavKogus, '0.00')"/>
                    </xsl:otherwise>
                  </xsl:choose>
                </td>
                <td>
                  <xsl:value-of select="format-number(TooteYhikuHind, '0.00')"/>                  
                </td>
                <td>
                  <xsl:value-of select="format-number(TellitavKogus * TooteYhikuHind, '0.00')"/>
                </td>
              </tr>
            </xsl:for-each>
            <tr>
              <td colspan="5" rowspan="5"></td>
            </tr>
            <tr>
              <td>Summa</td>
              <td>
                <xsl:value-of select="format-number($Summa, '0.00')"/>
              </td>
            </tr>
            <tr>
              <td>Soodustus</td>
              <td>
                <xsl:value-of select="format-number(($Soodustus div 100) * $Summa, '0.00')"/>
              </td>
            </tr>
            <tr>
              <td>20%:</td>
              <td>
                <xsl:value-of select="format-number($Summa * 0.2, '0.00')"/>
              </td>
            </tr>
            <tr>
              <td>Kokku:</td>
              <td>
                <xsl:value-of select="format-number($Summa * (1 - ($Soodustus div 100)) * 1.2, '0.00')"/>
              </td>
            </tr>
          </table>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

HTML LAYOUT

Retsensioonid

Retsensioon meeskonnale KartKicker: Talk:PC_KartKicker



Veebiteenus

Idee

Tegemist on online talutoodete poega. Rakenduse eesmärgiks on võimaldada ühelt poolt kasutajal sooritada talutoodete tellimusi ühest või mitmest talust ning teisalt taluomanikel müüa ja hallata müügilaos olevaid tooteid ning tellimusi.


Tavakasutajal on võimalus teostada järgnevaid tegevusi:

  • Toodete nimekirja sirvimine tootest lähtuvalt
  • Toodete nimekirja sirvimine talust lähtuvalt
  • Ostukorvi koostamine erinevate toodete lisamise teel
  • Ostukorvi vaatamine ja muutmine
  • Ostukorvi tellimuseks muutmine
  • Kasutajakonto loomine
  • Sisselogimine, et tellimust esitada


Taluomanikul ehk tootjal on võimalus teostada järgnevaid tegevusi:

  • Toodete lisamine
  • Toodete koguste haldamine
  • Tellimuste vaatamine
  • Kasutajakonto loomine
  • Talude haldamine


Rakendus

Rakenduses kasutatavad tehnoloogiad:

  • ASP.NET MVC Web API
  • Entity Framework 6.x
  • MSSQL
  • JSON veebiteenused


Andmemudel

Vajalik andmemudel rakenduse toimimiseks: [Vertabelo]


Andmemudel koosneb järgnevatest tabelitest:

1. Talu

  • Tabel hoiab endas andmeid tooteid müüvate talude kohta.

2. Talu_toode

  • Tabel hoiab endas iga talu toodete nimekirja.

3. Talu_kasutaja

  • Tabel hoiab endas seoseid talude ja kasutajate vahel.
  • Kasutajal võib olla mitu hallatavat talu.
  • Ühel talul on üks kasutaja.

4. Kasutaja

  • Tabel hoiab endas erinevate kasutajate andmeid.

5. Toode

  • Tabel hoiab endas erinevate unikaalsete toodete nimekirja.

6. Tellimus_kasutaja

  • Tabel hoiab endas tellimuse teinud kasutaja andmeid juhul, kui tellimust ei esitanud anonüümne kasutaja (sisselogimata kasutaja).

7. Tellimus

  • Tabel hoiab endas tellimuste nimekirja ning ajalugu.

8. Tellimus_toode

  • Tabel hoiab endas konkreetse tellimusega seotud toote andmeid.

Funktsionaalsus

Põhifunktsionaalsus

  • Toodete nimekirja sirvimine tootest lähtuvalt
  • Toodete nimekirja sirvimine talust lähtuvalt
  • Ostukorvi koostamine erinevate toodete lisamise teel
  • Ostukorvi vaatamine ja muutmine
  • Ostukorvi tellimuseks muutmine
  • Toodete lisamine
  • Toodete koguste haldamine
  • Tellimuste vaatamine
  • Talude haldamine
  • Sisselogimine, ülal mainitud tegevuste sooritamiseks


Lisafunktsionaalsus

  • Kasutajakonto loomine
  • Tellimuse vormistamine külalisena
  • Tegevuste logimine
  • Kasutusstatistika

Kasutajalood

Registreeritud ja registreerimata ostjad

Toodete sirvimine:

  • Kasutajal on võimalik tooteid otsida talude ja toodete järgi.
  • Neis vaadetes ei kuvata tooteid, millel laoseis puudub.
  • Nimekiri kuvatakse galeriina.


Toodete ostukorvi lisamine:

  • Toodete ostukorvi lisamiseks peab kasutaja olema toodete nimekirja lehelt toote valima.
  • Kasutajal on võimalus osta ka mitu sama tüüpi toodet.


Ostukorvi haldamine:

  • Ostukorvis kuvatakse varem ostukorvi lisatud tooted ja valitud kogused.
  • Koguseid saab vajadusel suurendada/vähendada või toodet ostukorvist eemaldada.
  • Ostukorvi tellimuse vormistamiseks, peab klient ostukorvi sisu kinnitama.
  • Selle tulemusel koostatakse tellimused taludele.
  • Ostukorvi on võimalik puhastada, vajutades "Tühjenda" nuppu.


Müüjad (talupidajad)

Talude haldamine:

  • Talusid on võimalik lisada ja muuta.
  • Andmete sisestamise järgselt toimub andmete valideerimine ja selle õnnestumise korral andmed salvestatakse.


Toodete haldamine:

  • Tooteid saab lisada.
  • Igale tootele saab määrata sobivad ühikud ja muud parameetrid.
  • Tooteandmete salvestamisel valideeritakse andmed ning selle õnnestumisel andmed salvestatakse.
  • Toote laoseisu muutmiseks tuleb avada vastava toote leht ning uuendada kogust ja tegevus salvestada.


Tellimuste haldamine:

  • Tellimuste haldamiseks tuleb avada "Tellimused" lehekülg.
  • Tellimuste nimekirjas kuvatakse tellimused koos andmetega.
  • Tellimuste vaatamiseks tuleb konkreetne tellimus avada.
  • Tellimuse lehel kuvatakse tellimusega seotud toodete andmed ning tellija andmed.

Lõpptoode

Lõpptoode: Lõpptoode