Undress Gaver

From ICO wiki
Jump to navigationJump to search

Meeskond ja rollid

  • Marko Koiduste - Projektijuht
  • Jaanus Türnpuu
  • Sergei Fatejev
  • Kaspar Tilk

Idee

Plaan on luua laohaldussüsteem, kus inimesed saaksid esitada tellimusi.

Kasutatav .NET tehnoloogia

C#, Entity Framework, Web-API, AngularJS klientrakenduse loomiseks

Analüüs

On olemas mitmed laod. Inimesed näevad lao hetkeseisu, saavad tellida neile sobivaid tooteid, peale tellimist saavad automaatselt arvet. Meie laos hoitakse erinevaid tooteid, mis on hoitud kategooriate kaupa. Meie kliendid saavad teha meie süsteemis kasutajaid, erinevate rollidega. Igal meie töötajal on erinevate õigustega kasutaja, olenevalt tööpositsioonist. Kõikide tellimuste ja kasutajategevustest on olemas ajalugu (logid).

Rakenduse sisu

Rakenduses on olemas järgmised võimalused (Must have):

  • 1. Kasutajate registreerimise süsteem
  • 2. Kasutajate haldussüsteem
  • 3. Sisse logimine
  • 4. Laoseisu jälgimine
  • 5. Kaupade tellimine
  • 6. Kauba nimekiri erinevates ladudes
  • 7. Tehtud tellimuste vaatamine

Rakenduses võiksid olla lisavõimalused (Could have):

  • 1. Tehtud tellimuste muutmine
  • 2. Laoseisu analüüs - prognoosid
  • 3. Populaarseimate toodete list

Andmebaasiskeem

XML osa

XML-is hoitakse infot arvete kohta. Arvel on muuhulgas arve number, koostaja, tellija, tellitud tooted koos hindadega, arve koostanud ettevõtte juriidiline info, kuupäevad jne. XSLT-fail loob etteantud XML-failist arved, mida ka inimene suudab lugeda ja mõista.

XML Fail

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="Arved.xslt" ?>
<arved>
  <arve number="1337420" kuupäev="20.03.2016">
    <koostaja eesnimi="Kaspar" perenimi="Tilk">
      <kontaktandmed>
        <kontakt väärtus="kaspar.tilk" tüüp="Skype"/>
        <kontakt väärtus="53542343" tüüp="telefon"/>
      </kontaktandmed>
    </koostaja>
    <tellija eesnimi="Mait" perenimi="Poska"/>
    <tarneviis nimetus="kuller">
      <tarnija nimi="DPD"/>
    </tarneviis>
    <tellitudTooted>
      <toode nimi="banaan" kogus="2" ühik="kg" kategooria="puuvili" aktiivne="true">
        <tavahind väärtus="2" valuuta="€"/>
        <soodushind väärtus="1.50" valuuta="€"/>
        <kirjeldus><![CDATA[toores banaan]]></kirjeldus>
      </toode>
      <toode nimi="õun" kogus="3" ühik="kg" kategooria="puuvili" aktiivne="true">
        <tavahind väärtus="1" valuuta="€"/>
        <soodushind väärtus="0.50" valuuta="€"/>
        <kirjeldus><![CDATA[hapu õun]]></kirjeldus>
      </toode>
    </tellitudTooted>
    <käibemaksumäär väärtus="0%"/>
    <summad>
      <käibemaksuta väärtus="3" valuuta="€"/>
      <käibemaksuga väärtus="3" valuuta="€"/>
    </summad>
    <juriidilineInfo ettevõtteNimi="OÜ Puuvili" registrikood="420666" aadress="Keki tn, Keila">
      <pangakontod>
        <pangakonto pangaNimi="Swedbank" kontonr="EE12345678"/>
        <pangakonto pangaNimi="SEB" kontonr="EE87654321"/>
      </pangakontod>
      <kontaktandmed>
        <kontakt väärtus="puu@vili.ee" tüüp="E-mail"/>
        <kontakt väärtus="531337" tüüp="Telefon"/>
      </kontaktandmed>
    </juriidilineInfo>
    <lisainfo><![CDATA[Täname tellimuse eest!]]></lisainfo>
    <tähtaeg kuupäev="21.03.2016"/>
  </arve>

  <arve number="1337420" kuupäev="20.03.2016">
    <koostaja eesnimi="Kaspar" perenimi="Tilk">
      <kontaktandmed>
        <kontakt väärtus="kaspar.tilk" tüüp="Skype"/>
        <kontakt väärtus="53542343" tüüp="Telefon"/>
      </kontaktandmed>
    </koostaja>
    <tellija eesnimi="Andres" perenimi="Käver"/>
    <tarneviis nimetus="kuller">
      <tarnija nimi="DPD"/>
    </tarneviis>
    <tellitudTooted>
      <toode nimi="banaan" kogus="2" ühik="kg" kategooria="puuvili" aktiivne="true">
        <tavahind väärtus="2" valuuta="€"/>
        <soodushind väärtus="1.50" valuuta="€"/>
        <kirjeldus><![CDATA[toores banaan]]></kirjeldus>
      </toode>
      <toode nimi="õun" kogus="3" ühik="kg" kategooria="puuvili" aktiivne="true">
        <tavahind väärtus="1" valuuta="€"/>
        <soodushind väärtus="0.50" valuuta="€"/>
        <kirjeldus><![CDATA[hapu õun]]></kirjeldus>
      </toode>
    </tellitudTooted>
    <käibemaksumäär väärtus="0%"/>
    <summad>
      <käibemaksuta väärtus="3" valuuta="€"/>
      <käibemaksuga väärtus="3" valuuta="€"/>
    </summad>
    <juriidilineInfo ettevõtteNimi="OÜ Puuvili" registrikood="420666" aadress="Keki tn, Keila">
      <pangakontod>
        <pangakonto pangaNimi="Swedbank" kontonr="EE12345678"/>
        <pangakonto pangaNimi="SEB" kontonr="EE87654321"/>
      </pangakontod>
      <kontaktandmed>
        <kontakt väärtus="puu@vili.ee" tüüp="E-mail"/>
        <kontakt väärtus="531337" tüüp="telefon"/>
      </kontaktandmed>
    </juriidilineInfo>
    <lisainfo><![CDATA[Täname tellimuse eest!]]></lisainfo>
    <tähtaeg kuupäev="21.03.2016"/>
  </arve>
</arved>

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="arved">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="128" name="arve">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="koostaja">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="kontaktandmed">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="16" name="kontakt">
                            <xs:complexType>
                              <xs:attribute name="väärtus" type="xs:string" use="required" />
                              <xs:attribute name="tüüp" type="xs:string" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="eesnimi" type="xs:string" use="required" />
                  <xs:attribute name="perenimi" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="tellija">
                <xs:complexType>
                  <xs:attribute name="eesnimi" type="xs:string" use="required" />
                  <xs:attribute name="perenimi" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="tarneviis">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="tarnija">
                      <xs:complexType>
                        <xs:attribute name="nimi" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="nimetus" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="tellitudTooted">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="128" name="toode">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="tavahind">
                            <xs:complexType>
                              <xs:attribute name="väärtus" type="xs:decimal" use="required" />
                              <xs:attribute name="valuuta" type="xs:string" use="required" />
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="soodushind">
                            <xs:complexType>
                              <xs:attribute name="väärtus" type="xs:decimal" />
                              <xs:attribute name="valuuta" type="xs:string" />
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="kirjeldus" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="nimi" type="xs:string" use="required" />
                        <xs:attribute name="kogus" type="xs:unsignedByte" use="required" />
                        <xs:attribute name="ühik" type="xs:string" use="required" />
                        <xs:attribute name="kategooria" type="xs:string" />
                        <xs:attribute name="aktiivne" type="xs:boolean" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="käibemaksumäär">
                <xs:complexType>
                  <xs:attribute name="väärtus" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="summad">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="käibemaksuta">
                      <xs:complexType>
                        <xs:attribute name="väärtus" type="xs:decimal" use="required" />
                        <xs:attribute name="valuuta" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="käibemaksuga">
                      <xs:complexType>
                        <xs:attribute name="väärtus" type="xs:decimal" use="required" />
                        <xs:attribute name="valuuta" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="juriidilineInfo">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="pangakontod">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="32" name="pangakonto">
                            <xs:complexType>
                              <xs:attribute name="pangaNimi" type="xs:string" use="required" />
                              <xs:attribute name="kontonr" type="xs:string" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="kontaktandmed">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="32" name="kontakt">
                            <xs:complexType>
                              <xs:attribute name="väärtus" type="xs:string" use="required" />
                              <xs:attribute name="tüüp" type="xs:string" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="ettevõtteNimi" type="xs:string" use="required" />
                  <xs:attribute name="registrikood" type="xs:unsignedInt" use="required" />
                  <xs:attribute name="aadress" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="lisainfo" type="xs:string" />
              <xs:element name="tähtaeg">
                <xs:complexType>
                  <xs:attribute name="kuupäev" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="number" type="xs:unsignedInt" use="required" />
            <xs:attribute name="kuupäev" type="xs:string" 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>
          <title>Arved</title>
        </head>
        <body>
          <xsl:for-each select="/arved/arve">
            <div>
              <p>
                <b>Arve nr <xsl:value-of select="@number"/></b> Koostatud <xsl:value-of select="@kuupäev"/>
              </p>
              <p>
                Koostaja: <xsl:value-of select="koostaja/@eesnimi"/><xsl:value-of select="koostaja/@perenimi"/>
                <ul>
                  <xsl:for-each select="./koostaja/kontaktandmed/kontakt">
                    <li>
                      <xsl:value-of select="@tüüp"/>: <xsl:value-of select="@väärtus"/>
                    </li>
                  </xsl:for-each>
                </ul>
              </p>
              <p>
                Tellija: <xsl:value-of select="./tellija/@eesnimi"/> <xsl:value-of select="./tellija/@perenimi"/>
              </p>
              <table border="1" cellpadding="4" cellspacing="0">
                <tr>
                  <th>Toote nimetus</th>
                  <th>Kogus</th>
                  <th>Ühik</th>
                  <th>Hind</th>
                </tr>
                <xsl:for-each select="./tellitudTooted/toode">
                  <tr align="center">
                    <td>
                      <xsl:value-of select="@nimi"/>
                    </td>
                    <td>
                      <xsl:value-of select="@kogus"/>
                    </td>
                    <td>
                      <xsl:value-of select="@ühik"/>
                    </td>
                    <td>
                      <xsl:value-of select="./tavahind/@väärtus"/><xsl:value-of select="./tavahind/@valuuta"/>
                    </td>
                  </tr>
                </xsl:for-each>
                <tr>
                  <td colspan="3" align="right">
                    Summa käibemaksuta:
                  </td>
                  <td colspan="1" align="center">
                    <xsl:value-of select="./summad/käibemaksuta/@väärtus"/><xsl:value-of select="./summad/käibemaksuta/@valuuta"/>
                  </td>
                </tr>
                <tr>
                  <td colspan="3" align="right">
                    Käibemaksumäär:
                  </td>
                  <td colspan="1" align="center">
                    <xsl:value-of select="./käibemaksumäär/@väärtus"/>
                  </td>
                </tr>
                <tr>
                  <td colspan="3" align="right">
                    <b>Summa käibemaksuga:</b>
                  </td>
                  <td colspan="1" align="center">
                    <b><xsl:value-of select="./summad/käibemaksuga/@väärtus"/><xsl:value-of select="./summad/käibemaksuga/@valuuta"/></b>
                  </td>
                </tr>
              </table>
              <p>
                <b>Juriidiline info</b>
                <xsl:variable name="info" select="./juriidilineInfo"/>
                <br/>
                Ettevõte: <xsl:value-of select="$info/@ettevõtteNimi"/>
                <br/>
                Aadress: <xsl:value-of select="$info/@aadress"/>
                <br/>
                Registrikood: <xsl:value-of select="$info/@registrikood"/>
                <br/>
                <xsl:for-each select="$info/pangakontod/pangakonto">
                  <xsl:value-of select="@pangaNimi"/>: <xsl:value-of select="@kontonr"/>
                  <br/>
                </xsl:for-each>
                <xsl:for-each select="$info/kontaktandmed/kontakt">
                  <xsl:value-of select="@tüüp"/>: <xsl:value-of select="@väärtus"/>
                  <br/>
                </xsl:for-each>
              </p>
              <p>
                Maksetähtaeg: <b>
                  <xsl:value-of select="./tähtaeg/@kuupäev"/>
                </b>
                <br/>
                <xsl:value-of select="./lisainfo"/>
              </p>
            </div>
          </xsl:for-each>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>