Undress Gaver
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, hallata neid, muuta andmeid. Igal meie töötajal on erinevate õigustega kasutaja, olenevalt tööpositsioonist. Kõikidest tellimustest ja kasutajategevustest on olemas ajalugu (logid), mille alusel saavad kliendid näha kõige populaarsemaid tooteid ning ka töötajad saaksid prognoosida, mis tooteid oleks vaja rohkem tellida ning milliseid vähem.
Rühma projektiks on lüüa laohaldussüsteem, mida on võimalik erinevatele ladudele rakendada st tehakse mitmeid üldistusi. Kliendid saavad näha laoseisu ning peale sobivate toodete tellimist saavad nad automaatselt genereeritud arve. Laos olevad tooted on jaotatud kategooriate kaupa. Rakenduse kasutajatele on võimalik määrata erinevaid rolle, rollid on seotud õigustega - näiteks admin saab hallata kõiki kasutajaid, muuta nende andmeid ning süsteemi uusi kasutajaid lisata. Tava kasutaja saab aga ainult tellimusi vormistada. Olulisel kohal on ka logifailid, proovime logides hoida kõiki kasutajate ja lao haldusega seotud toiminguid - uute kasutajate loomisi, andmete muutmisi jne. Toodete logid on olulised, et saaks prognoosida, millist kaupa tellida .. kõige aktiivsemad/tellitumad kaubad proovime välja tuua, et oleks kohe näha, mille järgi turul suur nõudlus on.
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>
Logi
- 20.03 - Lehe loomine ja XML osa esitamine