Föderaalreserv

From ICO wiki
Jump to navigationJump to search

Meeskond

  • Rene Ott

Retsensioonid

  • XML
  • Veebirakendus
  • Klientrakendus

Veebi-ja klientrakendus

Analüüs

Sissejuhatus

Finanzi on rakendus, mis võimaldab kasutajal märkida üles oma igapäevaseid oste, selleks et saada tagasivaatavalt aimu oma igapäevaste kulutuste kohta. Projekti idee on ajendatud minu personaalsest soovist jälgida, mille peale ning kuhu ma oma raha paigutan. Täpsemalt, kui suur osa igapäevastest kulutustest moodustub juhostudest elik šokolaadid, kommid, krõpsud jne ning kui palju ma reaalselt tarbin hädavajalikke tooteid ja teenuseid. Kuigi on olemas analoogsed personaalse rahatarkuse rakendused, siis otsustasin sellise rakenduse realiseerida ise, sest oma arendatud rakendust on hiljem võimalik täiendada lisafunktsionaalsusega vastavalt oma vajadustele.

Andmebaasimudel

Olemite kirjeldus

Shop - Pood, millest sooritatakse ost

  • Id - Identifikaator
  • Name - Nimi (Prisma)
  • Adress - Aadress, kus pood asub


PurchasePeriod - Iga sooritatud ost jääb mingi perioodi sisse (näiteks jaanuari kolmas nädal). Perioodid on kuupõhised, kuid sisaldavad eraldi nädalate kohta käivat infot. Kui üks nädal asub kuu vahetumisperioodis, siis selle tulemusena on baasis kaks kirjet sama nädalanumbriga, kuid erineva kuunumbriga (poolikud nädalad).

  • Id - Identifikaator
  • OpeningDate - Kirje alguskuupäev
  • ClosingDate - Kuu kirje lõppkuupäev
  • InterimWeek - Näitab, kas tegemist on nädalaga, mis jääb kuuvahetusse
  • Month - Mitmes kuu aastas
  • Week Mitmes nädal aastas.


Purchase - Konkreetne ost, mis omakorda on seotud mitme tootega.

  • Id - Identifikaator
  • PurchasePeriodId - Näitab perioodi, millal see ost tehti.
  • PurchaseDate - Ostu kuupäev
  • Cost - Ostu kogukulu, sisaldab antud ostuga soetatud asjade hindade summat. Agregeeritud üle PurchaseProduct’i TotalPrice’i.
  • ShopId - Pood, kust antud ost sooritati.


PurchaseProduct - Ühe ostuga käigus soetatud tooted.

  • Id - Identifikaator
  • PurchaseId - Ost, milega toode on seotud
  • ProductId - Toode, millega ost on seotud.
  • Amount - Soetatud toote kogus.
  • UnitPrice - Soetatud toote ühiku hind.
  • TotalPrice - Kogu tootegrupi hind = amount * UnitPrice


Product - Konkreetne toode, mis sisaldub ühes ostus.

  • Id - Identifikaator
  • Name - Toote nimi
  • Description - Toote kirjeldus

XML, XSD ning XSL

XML

<?xml version="1.0" encoding="UTF-8"?>
<Asjad xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   <Asi onKohtuasi="false" id="1">
      <AsjaNr>166366</AsjaNr>
      <Liik>Väärteoasi</Liik>
     
      <Menetlused kogus="1">
         <Menetlus id="11">
            <MenetluseNr>1666366</MenetluseNr>
            <Liik>Kohtuväline menetlus</Liik>

            <Osalised kogus="2">
               <Osaline id="111" onMenetleja="true">
                  <Liik>Kohtuväline menetleja</Liik>
                  <Isik id="1000">
                     <Nimi>Inspektor Kukeke</Nimi>
                  </Isik>
               </Osaline>
               <Osaline id="112" onMenetleja="false">
                  <Liik>Menetlusalune isik</Liik>
                  <Isik id="1001">
                     <Nimi>Andrus ElBling</Nimi>
                  </Isik>
               </Osaline>
               <Osaline id="113" onMenetleja="false">
                  <Liik>Tunnistaja</Liik>
                  <Isik id="1002">
                     <Nimi>Paks Peeter</Nimi>
                  </Isik>
               </Osaline>
            </Osalised>

            <Toimingud kogus="2">
               <Toiming id="114">
                  <Liik>Kiirmenetluse otsus</Liik>
                  <ToiminguOsalised>
                     <ToiminguOsaline osaliseId="111" />
                     <ToiminguOsaline osaliseId="112" />
                  </ToiminguOsalised>
               </Toiming>
               <Toiming id="115">
                  <Liik>Ülekuulamisprotokoll</Liik>
                  <ToiminguOsalised>
                     <ToiminguOsaline osaliseId="111" />
                     <ToiminguOsaline osaliseId="113" />
                  </ToiminguOsalised>
               </Toiming>
            </Toimingud>
         </Menetlus>
      </Menetlused>
     
      <SeotudAsjad>
         <Asi id="2" />
      </SeotudAsjad>
   </Asi>
  
   <Asi onKohtuasi="true" id="2">
      <AsjaNr>1-3-455</AsjaNr>
      <Liik>Väärteoasi</Liik>

      <Menetlused kogus="1">
         <Menetlus id="21">
            <MenetluseNr>1-3-455(1)</MenetluseNr>
            <Liik>Kohtu I Astme menetlus</Liik>
            <Osalised>
               <Osaline id="211" onMenetleja="true">
                  <Liik>Kohtunik</Liik>
                  <Isik id="1003">
                     <Nimi>Kohtu Mõistja</Nimi>
                  </Isik>
               </Osaline>
               <Osaline id="212" onMenetleja="false">
                  <Liik>Menetlusalune isik</Liik>
                  <Isik id="1001">
                     <Nimi>Andrus ElBling</Nimi>
                  </Isik>
               </Osaline>
            </Osalised>
           
            <Toimingud kogus="2">
               <Toiming>
                  <Liik>Kaebus kohtuvälise menetleja otsuse peale</Liik>
                  <ToiminguOsalised>
                     <ToiminguOsaline osaliseId="211" />
                  </ToiminguOsalised>
               </Toiming>
               <Toiming>
                  <Liik>Kohtuotsus</Liik>
                  <ToiminguOsalised>
                     <ToiminguOsaline osaliseId="211" />
                     <ToiminguOsaline osaliseId="212" />
                  </ToiminguOsalised>
               </Toiming>
            </Toimingud>
         </Menetlus>
      </Menetlused>

      <SeotudAsjad>
         <Asi id="1" />
      </SeotudAsjad>
   </Asi>
  
   <Asi onKohtuasi="false" id="3">
      <AsjaNr>180000</AsjaNr>
      <Liik>Kriminaalasi</Liik>

      <Menetlused kogus="1">
         <Menetlus id="31">
            <MenetluseNr>17554354</MenetluseNr>
            <Liik>Kohtueelne menetlus</Liik>

            <Osalised kogus="2">
               <Osaline id="311" onMenetleja="true">
                  <Liik>Uurija</Liik>
                  <Isik id="1005">
                     <Nimi>Elmar Vaher</Nimi>
                  </Isik>
               </Osaline>
               <Osaline id="312" onMenetleja="true">
                  <Liik>Prokuror</Liik>
                  <Isik id="1006">
                     <Nimi>Lavly Perling</Nimi>
                  </Isik>
               </Osaline>
            </Osalised>
           
            <Toimingud xsi:nil="true" />
         </Menetlus>
      </Menetlused>

      <SeotudAsjad xsi:nil="true" />
   </Asi>

   <Asi onKohtuasi="false" id="4">
      <AsjaNr>170000</AsjaNr>
      <Liik>Kriminaalasi</Liik>

      <Menetlused kogus="1">
         <Menetlus id="41">
            <MenetluseNr>17554355</MenetluseNr>
            <Liik>Kohtueelne menetlus</Liik>

            <Osalised kogus="2">
               <Osaline id="411" onMenetleja="false">
                  <Liik>Uurija</Liik>
                  <Isik id="1005">
                     <Nimi>Elmar Vaher</Nimi>
                  </Isik>
               </Osaline>
               <Osaline id="412" onMenetleja="false">
                  <Liik>Prokuror</Liik>
                  <Isik id="1006">
                     <Nimi>Lavly Perling</Nimi>
                  </Isik>
               </Osaline>
            </Osalised>

            <Toimingud kogus="1">
               <Toiming>
                  <Liik>Kriminaalmenetluse lõpetamise määrus</Liik>
                  <ToiminguOsalised>
                     <ToiminguOsaline osaliseId="412" />
                  </ToiminguOsalised>
               </Toiming>
            </Toimingud>
         </Menetlus>
      </Menetlused>
     
      <SeotudAsjad xsi:nil="true" />
   </Asi>
</Asjad>

XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Asjad">
    <xs:complexType>
      <xs:sequence>
        
        <xs:element name="Asi" minOccurs="1" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              
              <xs:element name="AsjaNr" type="xs:string"/>
              <xs:element name="Liik" type="xs:string"/>
              
              <xs:element name="Menetlused">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Menetlus" minOccurs="1" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          
                          <xs:element name="MenetluseNr" type="xs:string"/>
                          <xs:element name="Liik" type="xs:string"/>
                          
                          <xs:element name="Osalised" maxOccurs="1" nillable="true">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Osaline" minOccurs="1" maxOccurs="unbounded">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="Liik" type="xs:string"/>
                                      <xs:element name="Isik">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="Nimi" type="xs:string"/>
                                          </xs:sequence>
                                          <xs:attribute name="id" type="xs:unsignedInt"/>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="id" type="xs:unsignedInt"/>
                                    <xs:attribute name="onMenetleja" type="xs:boolean"/>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                              <xs:attribute name="kogus" type="xs:int"/>
                            </xs:complexType>
                          </xs:element>
                          
                          <xs:element name="Toimingud" maxOccurs="1" nillable="true">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Toiming" minOccurs="1" maxOccurs="unbounded">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="Liik" type="xs:string"/>
                                      <xs:element name="ToiminguOsalised" maxOccurs="1" nillable="true">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="ToiminguOsaline" minOccurs="1" maxOccurs="unbounded">
                                              <xs:complexType>
                                                <xs:attribute name="osaliseId" type="xs:string"/>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="id" type="xs:unsignedInt"/>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                              <xs:attribute name="kogus" type="xs:unsignedInt"/>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:unsignedInt"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="kogus" type="xs:unsignedInt"/>
                </xs:complexType>
              </xs:element>

              <xs:element name="SeotudAsjad" maxOccurs="1" nillable="true">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Asi" minOccurs="1" maxOccurs="unbounded"/>
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:unsignedInt"/>
                </xs:complexType>
              </xs:element>
              
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedInt"/>
            <xs:attribute name="onKohtuasi" type="xs:boolean"/>
          </xs:complexType>
        </xs:element>
        
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT 1

Kuvab isikute menetlusi, milles nad on osalised üle asjade.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" encoding="UTF-8" />

  <xsl:template match="/">
    <html>
      <head>
        <title>Kuvab kõik isikud ning nendega seotud menetlused.</title>
      </head>
      <body>
        <table border="1">
          <thead>
            <th>Isik</th>
            <th>Menetlus</th>
          </thead>
          <tbody>
            <xsl:apply-templates select="//Isik"/>
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>

  <!--Eraldab kõik erinevad nimed välja -->
  <!-- Kasutame for loopi asemel eraldi template'i -->
  <xsl:template match="//Isik">
    <xsl:if test="Nimi[not(.=preceding::*)]">
    <xsl:variable name="isikuId" select="./@id"/>
      <tr>
        <td>
          <ul>
            <li><xsl:value-of select="Nimi"/> [<xsl:value-of select="$isikuId"/>]</li>
          </ul>
        </td>
        <td>
          <xsl:call-template name="IsikuMenetlused">
            <xsl:with-param name="isikuId" select="$isikuId"/>
          </xsl:call-template>
        </td>
      </tr>
    </xsl:if>
  </xsl:template>

  <!-- Eraldame kõikide isikute menetlused, kasutame alamtemplate'i -->
  <xsl:template name="IsikuMenetlused">
    <xsl:param name="isikuId"/>
    <ul>
      <xsl:for-each select="//Menetlus">
        <xsl:if test="./Osalised/Osaline/Isik/@id=$isikuId">
        <li>
          <xsl:value-of select="./MenetluseNr"/> - <xsl:value-of select="./Liik"/>
        </li>
        </xsl:if>
      </xsl:for-each>
    </ul>
  </xsl:template>

</xsl:stylesheet>

XSLT 2

Kuvab asjadega seotud infot toimingute täpsuseni.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" encoding="UTF-8" />

  <xsl:template match="/">
    <html>
      <head>
        <title>Kuvab kõikide asjadega seotud info</title>
        <!--
        <link rel="stylesheet" type="text/css" href="asjad.css"/>
        -->
        <style>
            .table {
              border-collapse:collapse;
            }
            .inner-table{
              width: 100%;
              padding: 200px;
            }
            tr.equal-width td,
            tr.equal-width th {
              width: 25%;
            }
        </style>
      </head>
      <body>
        <h1>
          Kõik menetluses olevad asjad (<xsl:value-of select="count(Asjad/Asi)"/>)
        </h1>
        <table border="1" style="border-collapse:collapse">
          <thead>
            <th>Asi</th>
            <th>Menetlused</th>
            <th>Seotud asjade number</th>
          </thead>
          <tbody>
            <xsl:apply-templates select="Asjad/Asi"/>
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>

  <!-- Koik menetletavad asjad -->
  <xsl:template match="Asjad/Asi">
    <tr>
      <td>
        <xsl:value-of select="./Liik"/>
        <br/>
        <xsl:value-of select="./AsjaNr"/>
      </td>
      <td>
        <table border="1" class="table inner-table">
          <thead>
            <tr class="equal-width">
              <th>Menetluse liik</th>
              <th>Menetluse number</th>
              <th>Kohtumenetlus</th>
              <th>Toimingud</th>
            </tr>
          </thead>
        <tbody>
          <xsl:apply-templates select="Menetlused"/>
        </tbody>
        </table>
      </td>
      <td><xsl:apply-templates select="SeotudAsjad/Asi"/> </td>
    </tr>
  </xsl:template>
  
  <!-- Asjas olevad menetlused -->
  <xsl:template match="Menetlused">
    <xsl:for-each select="./Menetlus">
      <tr class="equal-width">
        <td><xsl:value-of select="./Liik"/></td>
        <td><xsl:value-of select="./MenetluseNr"/></td>
        <td>
        <xsl:choose >
          <xsl:when test="../../@onKohtuasi='true'">Jah</xsl:when>
          <xsl:otherwise>Ei</xsl:otherwise>
        </xsl:choose>
        </td>
        <td>
          <xsl:apply-templates select="./Toimingud"/>
        </td>
      </tr>
    </xsl:for-each>
  </xsl:template>
 
  <!-- Menetluses olevad toimingud -->
  <xsl:template match="Toimingud">
    <xsl:variable name="toiminguidMenetluses" select="./Toiming"/>
      <xsl:choose>
        <xsl:when test="count($toiminguidMenetluses) != 0">
          <ul>
            <xsl:for-each select="./Toiming">
              <li><xsl:value-of select="./Liik"/></li>
            </xsl:for-each>
          </ul>
          </xsl:when>
          <xsl:otherwise>
            <em>Puuduvad</em>
          </xsl:otherwise>
      </xsl:choose>
  </xsl:template>

  <!-- Asjaga seotud teised asjad -->
  <xsl:template match="SeotudAsjad/Asi">
    <xsl:variable name="seotudAsjaId" select="./@id"/>
        <ul>
          <xsl:for-each select="/Asjad/Asi">
            <xsl:if test="./@id=$seotudAsjaId">
              <li><xsl:value-of select="./AsjaNr"/></li>
            </xsl:if>
          </xsl:for-each>
        </ul>
  </xsl:template>

</xsl:stylesheet>