Undress Gaver

From ICO wiki
Revision as of 21:07, 20 March 2016 by Ktilk (talk | contribs) (→‎XML osa)
Jump to navigationJump to search

Meeskond ja rollid

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

Idee

Kasutatav .NET tehnoloogia

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

Analüüs

Rakenduse sisu

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

  • 1.
  • 2.
  • 3.

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

  • 1.
  • 2.
  • 3.

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>