SHOP: Difference between revisions
(52 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
[[Category: Võrgurakendused II: hajussüsteemide ehitamine]] | |||
==Meeskond== | ==Meeskond== | ||
* Johannes Tamm | * Johannes Tamm | ||
Line 4: | Line 5: | ||
* Martin Betlem | * Martin Betlem | ||
* Merilyn Renser | * Merilyn Renser | ||
==Retsensioonid== | |||
*[https://wiki.itcollege.ee/index.php/Talk:BurgerAce#SHOPi_retsensioon_meeskonnale_BurgerAce XML-ide retsensioon] - [https://wiki.itcollege.ee/index.php/BurgerAce BurgerAce] | |||
==Kasutatavad tehnoloogiad== | |||
*ASP:NET WEB API2 | |||
*AngularJS | |||
*WPF MVVM | |||
*Ninject | |||
*Entity Framework | |||
==PROJEKT== | |||
===Kasutusjuhend=== | |||
Tuleks käima panna veebiteenus. Siis saab kasutada edasi veebirakenduse kui ka WPF-rakenduse. Kui veebiteenus on käivitatud, siis tuleks ka esmalt registreerida kasutaja veebirakenduses automaatselt rolliks (Super admin) luua. | |||
Tõlgi toetuse link: | |||
[https://www.microsoft.com/en-us/translator/apps.aspx https://www.microsoft.com/en-us/translator/apps.aspx] | |||
Tõlgi võti - | |||
Web.config | |||
<appSettings> | |||
<add key="TRANSLATOR_API_KEY" value="...."/> | |||
</appSettings> | |||
Programm tuleb ühendada - | |||
<appSettings> | |||
<add key="BASE_URL" value="http://example.com/" /> | |||
<add key="API_URL" value="http://example.com/api/" /> | |||
<add key="TOKEN_URI" value="Token" /> | |||
</appSettings> | |||
===Veebiteenus=== | |||
Tegime WebApp.Areas.API2 veebiteenuse, milles on kogu informatsioon, mida meie rakenduses vaja läheb. | |||
Olemas on repositooriumid ja ühine unit of work (UOW= mis hõlbustab andmete pärimist andmebaasist.) | |||
===Klientrakendus=== | |||
Klientrakendus sisaldab nii WPF-rakendust kui ka veebirakendust. | |||
===Allalaadimine=== | |||
Lae [http://enos.itcollege.ee/~jtamm/VRII/ siit] - WEB API(veebiteenus), WEB APP(veebirakendus) ja WPF rakendus. | |||
==Näite veebileht== | |||
Super admin: | |||
kasutaja: admin@admin.ee | |||
parool: 123456 | |||
Saate vaadata selle üle. | |||
[http://vs.john.ee/ SIIN] | |||
==XML fail, stiilifail ja skeemifail== | ==XML fail, stiilifail ja skeemifail== | ||
Line 134: | Line 192: | ||
===XSD=== | ===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:complexType name="CatalogsType"> | |||
<xs:choice minOccurs="0" maxOccurs="unbounded"> | |||
<xs:element name="Catalog" type="CatalogsType"> | |||
</xs:element> | |||
</xs:choice> | |||
<xs:attribute name="Name" type="xs:string" use="required" /> | |||
</xs:complexType> | |||
<xs:complexType name="CatalogType"> | |||
<xs:choice minOccurs="0" maxOccurs="1"> | |||
<xs:element name="Catalog" type="CatalogType"> | |||
</xs:element> | |||
</xs:choice> | |||
<xs:attribute name="Name" type="xs:string" use="required" /> | |||
</xs:complexType> | |||
<xs:simpleType name="RatingType"> | |||
<xs:restriction base="xs:integer"> | |||
<xs:minInclusive value="1"/> | |||
<xs:maxInclusive value="5"/> | |||
</xs:restriction> | |||
</xs:simpleType> | |||
<xs:simpleType name="PriceType"> | |||
<xs:restriction base="xs:decimal"> | |||
<xs:minInclusive value="0"/> | |||
</xs:restriction> | |||
</xs:simpleType> | |||
<xs:element name="Items"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="Catalogs"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element maxOccurs="unbounded" name="Catalog" type="CatalogsType" /> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element maxOccurs="unbounded" name="Item"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="Name" type="xs:string" /> | |||
<xs:element name="Catalog" type="CatalogType" /> | |||
<xs:element name="Price"> | |||
<xs:complexType> | |||
<xs:simpleContent> | |||
<xs:extension base="PriceType"> | |||
<xs:attribute name="Currency" type="xs:string" use="required" /> | |||
</xs:extension> | |||
</xs:simpleContent> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="Description" type="xs:string" /> | |||
<xs:element name="Images" minOccurs="0"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element maxOccurs="unbounded" name="Image" type="xs:string" /> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="Availabilities" minOccurs="0"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element maxOccurs="unbounded" name="Availability"> | |||
<xs:complexType> | |||
<xs:simpleContent> | |||
<xs:extension base="xs:string"> | |||
<xs:attribute name="Quantity" type="xs:unsignedInt" use="required" /> | |||
</xs:extension> | |||
</xs:simpleContent> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="Feedbacks" minOccurs="0"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element maxOccurs="unbounded" name="Feedback"> | |||
<xs:complexType> | |||
<xs:simpleContent> | |||
<xs:extension base="xs:string"> | |||
<xs:attribute name="Rating" type="RatingType" use="required" /> | |||
</xs:extension> | |||
</xs:simpleContent> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
<xs:attribute name="Activated" type="xs:boolean" use="required" /> | |||
<xs:attribute name="Id" type="xs:ID" use="required" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:schema> | |||
</source> | |||
===XSLT=== | ===XSLT=== | ||
< | <source lang="xml"> | ||
</ | <?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="@* | node()"> | |||
<html> | |||
<head> | |||
<title>Online shopping</title> | |||
<style> | |||
img {height: 150px;} | |||
table>tbody>tr>td:first-child {vertical-align:top;} | |||
table>tbody>tr:nth-child(odd) {background: #CCC} | |||
table>thead {font-weight: bold;} | |||
table table>tbody>tr>td:first-child{text-align: center;} | |||
.free_space_height {height:50px;} | |||
</style> | |||
</head> | |||
<body> | |||
<h2>Catalog list</h2> | |||
<ul> | |||
<xsl:for-each select="/Items/Catalogs/Catalog"> | |||
<li> | |||
<xsl:value-of select="@Name"/> | |||
</li> | |||
<xsl:if test="Catalog"> | |||
<ul> | |||
<xsl:apply-templates select="Catalog" mode="list" /> | |||
</ul> | |||
</xsl:if> | |||
</xsl:for-each> | |||
</ul> | |||
<h2>All items</h2> | |||
<xsl:for-each select="/Items/Item"> | |||
<xsl:apply-templates select="." /> | |||
</xsl:for-each> | |||
<h2>Selected catalog (Furniture)</h2> | |||
<xsl:for-each select="/Items/Item[Catalog/@Name='Furniture']"> | |||
<xsl:apply-templates select="." /> | |||
</xsl:for-each> | |||
<h2>Selected item with id, whese name is i3</h2> | |||
<xsl:for-each select="/Items/Item[@Id='i3']"> | |||
<xsl:apply-templates select="." /> | |||
</xsl:for-each> | |||
</body> | |||
</html> | |||
</xsl:template> | |||
<xsl:template match="Catalog" mode="list"> | |||
<li> | |||
<xsl:value-of select="@Name" /> | |||
</li> | |||
<xsl:if test="Catalog"> | |||
<ul> | |||
<xsl:apply-templates select="Catalog" mode="list" /> | |||
</ul> | |||
</xsl:if> | |||
</xsl:template> | |||
<xsl:template match="Item"> | |||
<div class="free_space_height"></div> | |||
<table> | |||
<tr> | |||
<td>ID</td> | |||
<td> | |||
<xsl:value-of select="@Id"/> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td>Name</td> | |||
<td> | |||
<xsl:value-of select="Name"/> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td>Catalog</td> | |||
<td> | |||
<xsl:apply-templates select="Catalog" mode="short" /> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td>Price</td> | |||
<td> | |||
<xsl:choose> | |||
<xsl:when test="Price=0"> | |||
<xsl:text>FREE</xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:value-of select="Price"/><xsl:text> </xsl:text><xsl:value-of select="Price/@Currency"/> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td>Description</td> | |||
<td> | |||
<xsl:value-of select="Description"/> | |||
</td> | |||
</tr> | |||
<xsl:if test="Images/Image"> | |||
<tr> | |||
<td>Images</td> | |||
<td> | |||
<xsl:for-each select="Images/Image"> | |||
<img> | |||
<xsl:attribute name="src"> | |||
<xsl:value-of select="."/> | |||
</xsl:attribute> | |||
</img> | |||
</xsl:for-each> | |||
</td> | |||
</tr> | |||
</xsl:if> | |||
<tr> | |||
<td>Availabilities</td> | |||
<td> | |||
<table> | |||
<thead> | |||
<tr> | |||
<td>Quantity</td> | |||
<td>Location</td> | |||
</tr> | |||
</thead> | |||
<xsl:for-each select="Availabilities/Availability"> | |||
<tr> | |||
<td> | |||
<xsl:value-of select="@Quantity"/> | |||
</td> | |||
<td> | |||
<xsl:value-of select="."/> | |||
</td> | |||
</tr> | |||
</xsl:for-each> | |||
</table> | |||
</td> | |||
</tr> | |||
<xsl:if test="Feedbacks/Feedback"> | |||
<tr> | |||
<td>Feedbacks</td> | |||
<td> | |||
<table> | |||
<thead> | |||
<tr> | |||
<td>Rating</td> | |||
<td>Comment</td> | |||
</tr> | |||
</thead> | |||
<xsl:for-each select="Feedbacks/Feedback"> | |||
<tr> | |||
<td> | |||
<xsl:value-of select="@Rating"/> | |||
</td> | |||
<td> | |||
<xsl:value-of select="."/> | |||
</td> | |||
</tr> | |||
</xsl:for-each> | |||
</table> | |||
</td> | |||
</tr> | |||
</xsl:if> | |||
</table> | |||
</xsl:template> | |||
<xsl:template match="Catalog" mode="short"> | |||
<xsl:value-of select="@Name" /> | |||
<xsl:if test="Catalog"> | |||
<xsl:text>-></xsl:text> | |||
<xsl:apply-templates select="Catalog" mode="short" /> | |||
</xsl:if> | |||
</xsl:template> | |||
</xsl:stylesheet> | |||
</source> | |||
Näited asuvad [https://wiki.itcollege.ee/index.php/File:Newn%C3%A4ited.png SIIN] | |||
==Veebiteenuse analüüs== | |||
===Kirjeldus=== | |||
Meeskonna SHOP ideeks on luua veebipood. | |||
'''Külastaja''' | |||
Külastaja saab otsida täpset mudelit ja osta kaupu. Saab vaadata, mitu külastajat vaatasid seda lehte. | |||
'''Kasutaja''' | |||
Kasutaja on veebiteenuse kasutaja, kes saab registreerida konto. Kui on konto, siis saab kiiresti osta kaupu näiteks ei pea uuesti registreerima ja lihtsam on makset sooritada. Kasutaja saab ka soodustusi seotud kaupadelt ja anda tagasidet/hinnet. | |||
'''Super-Administaator''' | |||
Super-Administraator on veebiteenuse administraator kellel on ainsana võimalik muuta/kustutada ära tervet lehte. Näiteks reklaame vahetada ja rolli panna. | |||
'''Administraator''' | |||
Administraator on veebiteenuse administraator kellel on ainult võimalik lisada kaupu müüki ja muutuda hindu. | |||
Moderaator | |||
Moderaator on veebiteenuse moderaator kes saab kontrollida, kas kleindil on makstud. Kui kauba eest on makstud, siis pakitakse see ja viiakse postikontorisse ning paneb tracking-numberi infoks. | |||
===Must Have=== | |||
'''Külastaja''' | |||
*<del>Külastaja saab otsida kaupa mudeli või spesifikatsiooni järgi.</del> | |||
*<del>Ilma registreeringuta külastaja saab osta/tellida internetis (ostukorv).</del> | |||
'''Kasutaja''' | |||
*<del>Kasutaja saab omale konto teha.</del> | |||
*<del>Kasutajale pakutakse erinevaid makseviise.</del> | |||
*Kasutaja saab tagasiside, kui tal on ost sooritatud. | |||
*<del>Kasutaja saab lisada oma firma andmeid.</del> | |||
*<del>Kasutajal on erinevaid aadresse kui ka kontakte.</del> | |||
*<del>Kasutaja saab lisada mitme panga andmed.</del> | |||
*<del>Kasutaja saab lähestada parooli kui unustab parooli. (Saadetakse kinnituskoodi e-meili teel)</del> | |||
*<del>Kasutajale saadetakse kinnituskood e-meili teel, kui ta registeerib</del> | |||
'''Super-Administraator''' | |||
*Administraator saab kustutada ära kasutajaid | |||
*<del>Administraator saab muuta kasutaja rolle</del> | |||
*<del>Administraator saab lisata poodi firmale.</del> | |||
'''Administraator''' | |||
*<del>Administraator saab lisada kaupu (item)</del> | |||
*<del>Administaator saab lisada pilte. (upload-file)</del> | |||
*<del>Administaator saab lisada soodustust itemile või kategooriale</del>. | |||
'''Kaubad''' | |||
*<del>Kaubad on kategooriatesse jaotatud.</del> | |||
*<del>Katalogile on võimalik teha alamkatalog. Nagu menüü.</del> | |||
*<del>On võimalik kustutada või muuta või lisada kataloogi.</del> | |||
*<del>Katalogis on mitu itemi.</del> | |||
*<del>On võimalik lisada itemi.</del> | |||
*<del>Valuuta on võimalik kuvada erinev (ka hind)</del> | |||
*<del>On võimalik kuvada ja muuta erinevat keelt.</del> | |||
'''Keeletoetus''' | |||
*<del>On võimalik tõlkida. Näiteks inglise keelest - eesti keelde. Administraator loob uue itemi (kaup), paneb pealkirjaks teksti inglise keeles. Teisesse tekstisse pakutakse tõlgitud teksti.</del> | |||
'''Maksmine''' | |||
*<del>Käibemaks on võimalik erinev. (näiteks ärikleint ja kleint)</del> | |||
*<del>Makse on võimalik otsemakse või järelemaks.</del> | |||
*<del>Kui kleint tahab järelemaks, siis antakse talle mitu arve, mille tähtajal ta peab maksma.</del> | |||
*<del>On võimalik kuvada, kas arve on makstud või mitte</del> | |||
'''Soodus''' | |||
*<del>Soodus on võimalik katalog või asi. Näiteks jõulusoodus -10% mööbel kataloog.</del> | |||
*<del>Soodus kehtivus on võimalik tähtaeg või tähtajatu.</del> | |||
*<del>Kleint sisestab kupongikoodi, siis soodus saab.</del> | |||
'''Firma''' | |||
*<del>Firma saab erineva pood.</del> | |||
*<del>Firmal on võimalik eraldi.</del> | |||
'''Transport''' | |||
*<del>Transport on võimalik erinev. (näiteks DHL, DPD)</del> | |||
'''Asi''' | |||
*<del>Item saab määrata toote tüüp. (näiteks ASUS, Samsung)</del> | |||
*<del>Item saab kuvada saadaval koht (näiteks kohapeal 100 tk) ja asukoht</del> | |||
*<del>Item saab kuvada selle tehilise andmeid.</del> | |||
*<del>Item saab kuvada pilte.</del> | |||
*<del>Item saab kuvada, mitu inimest vaatab seda hetkel (online-s).</del> | |||
*<del>Item saab kuvada, kui palju maksab soodusega.</del> | |||
===Nice to Have=== | |||
*Kleint saab otsida sõna. | |||
*<del>Kleint saab sorteerida.</del> | |||
*Kleindil on võimalik vaadata transpordi staatust. (Shipped) | |||
*Kasutaja saab saata sõnumi moderaatorile või administraatorile, kui tal tekib küsimus. | |||
*On võimalik kampaania. | |||
*Tehtud tellimuste muutmine. | |||
*TOP toodete list. | |||
*Postituste raporteerimine kui on probleem. | |||
*E-meili aadressi vahetamine | |||
*On võimalik automaatselt arvutada valuuta näiteks (EUR ->USD) | |||
*On võimalik luua arve PDF. | |||
*On võimalik pakkuda hinda. | |||
==LuckyYou veebiteenuse ja klientrakenduse retsensioon== | |||
Meeskond LuckyYou on teinud oma veebiteenusele hea analüüsi, et andmebaas eeldusena on olemas ning olemeid on seal kohe kindlasti paljud kui üheksa. Analüüsis on välja toodud nii „must have“ kui ka „ should have“ asjad, mida toodud teenus peab võimaldama. Rakenduse idee on hea, et antud teenus võiks olla kasutatav ka ärilistel eesmärkidel. Täidatakse “should have” ning võiks olla kasutatav ka ärilistel eesmärkidel. Wiki lehes on hästi koostatud ja informatiivne. Kasutaja saab valida loosimisi kategooria järgi kui tal on soov. Esinevad küll kergesti parandatavaid puudujääke. | |||
Lahendus on kenasti ära jaotatud erinevateks projektideks nagu | |||
*BLL | |||
*DAL | |||
*DALWebAPI | |||
*Domain | |||
*Identity | |||
*WebApp | |||
Kasutatud on ka muud: interface, UOW, Repository, DTO, MVC.<br/> | |||
Hea, et veebirakendus on juba serveris, kuid probleemi sisse logimisega olnud. - Testisime siis töötas, aga keeruliseks teha. Oleks teada, et koosta vajalikult juhendit. On vaja hea ja lihtne juhend. | |||
Kokkuvõtteks võib öelda meie meeskond, et tehtud töö on konkreetne ja hea. Kõik ülesanded on täidetud nõutud punktid ning meeskond on astunud sammu edasi ning tulevikus ootame suuri tegusid. | |||
== Logi == | == Logi == | ||
'''15.veebruar''' | '''15.veebruar''' | ||
Line 148: | Line 627: | ||
'''16.märts''' | '''16.märts''' | ||
*Wiki lehe loomine | *Wiki lehe loomine | ||
'''17.märts''' | |||
*XML faili, stiilifaili ja skeemifaili esitamine | |||
'''27.märts''' | |||
*Retsensiooni esitamine BurgerAce meeskonna XML-ide kohta | |||
'''17.aprill''' | |||
*Andmebaasi mudel [https://wiki.itcollege.ee/images/5/51/Shop_Database_model.png LINGIS] | |||
*Veebiteenuse analüüs | |||
'''29.mai''' | |||
*Lisatud projekti | |||
'''30.mai''' | |||
*Uuendatud andmebaasi mudel [http://enos.itcollege.ee/~jtamm/VRII/Shop_database.pdf PDF] | |||
'''8.juuni''' | |||
*LuckyYou veebiteenuse ja klientrakenduse retsensioon |
Latest revision as of 21:36, 8 June 2016
Meeskond
- Johannes Tamm
- Martin Mägi
- Martin Betlem
- Merilyn Renser
Retsensioonid
Kasutatavad tehnoloogiad
- ASP:NET WEB API2
- AngularJS
- WPF MVVM
- Ninject
- Entity Framework
PROJEKT
Kasutusjuhend
Tuleks käima panna veebiteenus. Siis saab kasutada edasi veebirakenduse kui ka WPF-rakenduse. Kui veebiteenus on käivitatud, siis tuleks ka esmalt registreerida kasutaja veebirakenduses automaatselt rolliks (Super admin) luua.
Tõlgi toetuse link:
https://www.microsoft.com/en-us/translator/apps.aspx
Tõlgi võti - Web.config
<appSettings> <add key="TRANSLATOR_API_KEY" value="...."/> </appSettings>
Programm tuleb ühendada -
<appSettings> <add key="BASE_URL" value="http://example.com/" /> <add key="API_URL" value="http://example.com/api/" /> <add key="TOKEN_URI" value="Token" /> </appSettings>
Veebiteenus
Tegime WebApp.Areas.API2 veebiteenuse, milles on kogu informatsioon, mida meie rakenduses vaja läheb. Olemas on repositooriumid ja ühine unit of work (UOW= mis hõlbustab andmete pärimist andmebaasist.)
Klientrakendus
Klientrakendus sisaldab nii WPF-rakendust kui ka veebirakendust.
Allalaadimine
Lae siit - WEB API(veebiteenus), WEB APP(veebirakendus) ja WPF rakendus.
Näite veebileht
Super admin:
kasutaja: admin@admin.ee
parool: 123456
Saate vaadata selle üle. SIIN
XML fail, stiilifail ja skeemifail
XML
<?xml version="1.0" encoding="utf-8" ?>
<Items>
<Catalogs>
<Catalog Name="Technology">
<Catalog Name="Memory"></Catalog>
<Catalog Name="Protsessor"></Catalog>
<Catalog Name="Storage">
<Catalog Name="Solid-state drive"></Catalog>
<Catalog Name="Hard disk drive"></Catalog>
</Catalog>
<Catalog Name="Computer"></Catalog>
<Catalog Name="Laptop"></Catalog>
</Catalog>
<Catalog Name="Furniture">
<Catalog Name="Chair"></Catalog>
<Catalog Name="Sofa"></Catalog>
<Catalog Name="Bed"></Catalog>
<Catalog Name="Table"></Catalog>
</Catalog>
</Catalogs>
<Item Activated="true" Id="i1">
<Name><![CDATA[Dell XPS 15]]></Name>
<Catalog Name="Technology">
<Catalog Name="Laptop"></Catalog>
</Catalog>
<Price Currency="EUR"><![CDATA[100]]></Price>
<Description><![CDATA[Intel i7 6500U 2.5 GHz (3852p) 16 GB, 512GB SSD Intel HD Graphics 520 (1326p) 13.3" 3200x1800]]></Description>
<Images>
<Image><![CDATA[http://dri1.img.digitalrivercontent.net/Storefront/Company/msintl/images/English/en-INTL-Dell-XPS-15-i5-8gb-256gb-QF9-00100/en-INTL-L-Dell-XPS-15-i5-8gb-256gb-QF9-00100-mnco.jpg]]></Image>
<Image><![CDATA[http://scr.wfcdn.de/12791/Dell-XPS-15-2015-mit-Windows-10-1433327983-0-0.jpg]]></Image>
</Images>
<Availabilities>
<Availability Quantity="5"><![CDATA[Akadeemia 5, Tallinn]]></Availability>
<Availability Quantity="1"><![CDATA[Pikk 20, Tartu]]></Availability>
</Availabilities>
<Feedbacks>
<Feedback Rating="5"><![CDATA[Very good]]></Feedback>
<Feedback Rating="5"><![CDATA[I like it]]></Feedback>
</Feedbacks>
</Item>
<Item Activated="true" Id="i2">
<Name><![CDATA[4GB DDR2]]></Name>
<Catalog Name="Technology">
<Catalog Name="Memory"></Catalog>
</Catalog>
<Price Currency="EUR"><![CDATA[100]]></Price>
<Description><![CDATA[4GB DDR2 800Mhz CL6]]></Description>
<Images>
<Image><![CDATA[http://76.my/Malaysia/4gb-kingston-desktop-pc-ddr2-ram-800mhz-pc-6400-kvr800d2n6-4g-amd-anonymous321-1410-25-Anonymous321@1.jpg]]></Image>
</Images>
<Availabilities>
<Availability Quantity="10"><![CDATA[Akadeemia 5, Tallinn]]></Availability>
<Availability Quantity="1"><![CDATA[Pikk 20, Tartu]]></Availability>
</Availabilities>
<Feedbacks>
<Feedback Rating="5"><![CDATA[Very good]]></Feedback>
<Feedback Rating="5"><![CDATA[I like it]]></Feedback>
</Feedbacks>
</Item>
<Item Activated="true" Id="i3">
<Name><![CDATA[HP DV600]]></Name>
<Catalog Name="Technology">
<Catalog Name="Laptop"></Catalog>
</Catalog>
<Price Currency="EUR"><![CDATA[50]]></Price>
<Description><![CDATA[CPU: T2080, RAM: 4GB, HDD 120GB, 15,3"]]></Description>
<Images>
<Image><![CDATA[http://cnet2.cbsistatic.com/hub/i/r/2010/08/03/7ded434e-bb7a-11e2-8a8e-0291187978f3/thumbnail/770x433/3e631d8f8a16a3a9c6e69e0d98b652a9/32036702-2-440-overview-1.gif]]></Image>
<Image><![CDATA[http://i.ebayimg.com/00/s/NTI5WDcwMA==/z/Je8AAOSwcnpTrAD0/$_32.JPG]]></Image>
</Images>
<Availabilities>
<Availability Quantity="5"><![CDATA[Akadeemia 5, Tallinn]]></Availability>
<Availability Quantity="8"><![CDATA[Pikk 20, Tartu]]></Availability>
</Availabilities>
<Feedbacks>
<Feedback Rating="1"><![CDATA[It is not working well.]]></Feedback>
<Feedback Rating="3"><![CDATA[Videocard is problem]]></Feedback>
</Feedbacks>
</Item>
<Item Activated="true" Id="i4">
<Name><![CDATA[Oak chair]]></Name>
<Catalog Name="Furniture">
<Catalog Name="Chair"></Catalog>
</Catalog>
<Price Currency="EUR"><![CDATA[75]]></Price>
<Description><![CDATA[OAK 100%]]></Description>
<Images>
<Image><![CDATA[http://curtainsandcomfort.com/furniture/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/w/e/westbury-reclaimed-oak-timber-dining-chairs---pair---wsr19.jpg]]></Image>
</Images>
<Availabilities>
<Availability Quantity="8"><![CDATA[Pikk 20, Tartu]]></Availability>
</Availabilities>
<Feedbacks>
<Feedback Rating="5"><![CDATA[I like very]]></Feedback>
</Feedbacks>
</Item>
<Item Activated="true" Id="i5">
<Name><![CDATA[Oak big table]]></Name>
<Catalog Name="Furniture">
<Catalog Name="Table"></Catalog>
</Catalog>
<Price Currency="EUR"><![CDATA[400]]></Price>
<Description><![CDATA[NOW SALES!!!]]></Description>
<Images>
<Image><![CDATA[http://iceinteriors.co.uk/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/c/l/clemence-richard-massive-dining-table_3.jpg]]></Image>
</Images>
<Availabilities>
<Availability Quantity="131"><![CDATA[Punane 12, Tallinn]]></Availability>
</Availabilities>
<Feedbacks>
<Feedback Rating="5"><![CDATA[I like very]]></Feedback>
<Feedback Rating="5"><![CDATA[Cheapest!]]></Feedback>
<Feedback Rating="5"><![CDATA[I love it]]></Feedback>
<Feedback Rating="5"><![CDATA[Thanks!]]></Feedback>
</Feedbacks>
</Item>
</Items>
XSD
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:complexType name="CatalogsType">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Catalog" type="CatalogsType">
</xs:element>
</xs:choice>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="CatalogType">
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element name="Catalog" type="CatalogType">
</xs:element>
</xs:choice>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
<xs:simpleType name="RatingType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="5"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PriceType">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Items">
<xs:complexType>
<xs:sequence>
<xs:element name="Catalogs">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Catalog" type="CatalogsType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" name="Item">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Catalog" type="CatalogType" />
<xs:element name="Price">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="PriceType">
<xs:attribute name="Currency" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" type="xs:string" />
<xs:element name="Images" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Image" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Availabilities" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Availability">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Quantity" type="xs:unsignedInt" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Feedbacks" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Feedback">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Rating" type="RatingType" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Activated" type="xs:boolean" use="required" />
<xs:attribute name="Id" type="xs:ID" 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="@* | node()">
<html>
<head>
<title>Online shopping</title>
<style>
img {height: 150px;}
table>tbody>tr>td:first-child {vertical-align:top;}
table>tbody>tr:nth-child(odd) {background: #CCC}
table>thead {font-weight: bold;}
table table>tbody>tr>td:first-child{text-align: center;}
.free_space_height {height:50px;}
</style>
</head>
<body>
<h2>Catalog list</h2>
<ul>
<xsl:for-each select="/Items/Catalogs/Catalog">
<li>
<xsl:value-of select="@Name"/>
</li>
<xsl:if test="Catalog">
<ul>
<xsl:apply-templates select="Catalog" mode="list" />
</ul>
</xsl:if>
</xsl:for-each>
</ul>
<h2>All items</h2>
<xsl:for-each select="/Items/Item">
<xsl:apply-templates select="." />
</xsl:for-each>
<h2>Selected catalog (Furniture)</h2>
<xsl:for-each select="/Items/Item[Catalog/@Name='Furniture']">
<xsl:apply-templates select="." />
</xsl:for-each>
<h2>Selected item with id, whese name is i3</h2>
<xsl:for-each select="/Items/Item[@Id='i3']">
<xsl:apply-templates select="." />
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="Catalog" mode="list">
<li>
<xsl:value-of select="@Name" />
</li>
<xsl:if test="Catalog">
<ul>
<xsl:apply-templates select="Catalog" mode="list" />
</ul>
</xsl:if>
</xsl:template>
<xsl:template match="Item">
<div class="free_space_height"></div>
<table>
<tr>
<td>ID</td>
<td>
<xsl:value-of select="@Id"/>
</td>
</tr>
<tr>
<td>Name</td>
<td>
<xsl:value-of select="Name"/>
</td>
</tr>
<tr>
<td>Catalog</td>
<td>
<xsl:apply-templates select="Catalog" mode="short" />
</td>
</tr>
<tr>
<td>Price</td>
<td>
<xsl:choose>
<xsl:when test="Price=0">
<xsl:text>FREE</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="Price"/><xsl:text> </xsl:text><xsl:value-of select="Price/@Currency"/>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
<tr>
<td>Description</td>
<td>
<xsl:value-of select="Description"/>
</td>
</tr>
<xsl:if test="Images/Image">
<tr>
<td>Images</td>
<td>
<xsl:for-each select="Images/Image">
<img>
<xsl:attribute name="src">
<xsl:value-of select="."/>
</xsl:attribute>
</img>
</xsl:for-each>
</td>
</tr>
</xsl:if>
<tr>
<td>Availabilities</td>
<td>
<table>
<thead>
<tr>
<td>Quantity</td>
<td>Location</td>
</tr>
</thead>
<xsl:for-each select="Availabilities/Availability">
<tr>
<td>
<xsl:value-of select="@Quantity"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</table>
</td>
</tr>
<xsl:if test="Feedbacks/Feedback">
<tr>
<td>Feedbacks</td>
<td>
<table>
<thead>
<tr>
<td>Rating</td>
<td>Comment</td>
</tr>
</thead>
<xsl:for-each select="Feedbacks/Feedback">
<tr>
<td>
<xsl:value-of select="@Rating"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</table>
</td>
</tr>
</xsl:if>
</table>
</xsl:template>
<xsl:template match="Catalog" mode="short">
<xsl:value-of select="@Name" />
<xsl:if test="Catalog">
<xsl:text>-></xsl:text>
<xsl:apply-templates select="Catalog" mode="short" />
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Näited asuvad SIIN
Veebiteenuse analüüs
Kirjeldus
Meeskonna SHOP ideeks on luua veebipood.
Külastaja
Külastaja saab otsida täpset mudelit ja osta kaupu. Saab vaadata, mitu külastajat vaatasid seda lehte.
Kasutaja
Kasutaja on veebiteenuse kasutaja, kes saab registreerida konto. Kui on konto, siis saab kiiresti osta kaupu näiteks ei pea uuesti registreerima ja lihtsam on makset sooritada. Kasutaja saab ka soodustusi seotud kaupadelt ja anda tagasidet/hinnet.
Super-Administaator
Super-Administraator on veebiteenuse administraator kellel on ainsana võimalik muuta/kustutada ära tervet lehte. Näiteks reklaame vahetada ja rolli panna.
Administraator
Administraator on veebiteenuse administraator kellel on ainult võimalik lisada kaupu müüki ja muutuda hindu. Moderaator Moderaator on veebiteenuse moderaator kes saab kontrollida, kas kleindil on makstud. Kui kauba eest on makstud, siis pakitakse see ja viiakse postikontorisse ning paneb tracking-numberi infoks.
Must Have
Külastaja
Külastaja saab otsida kaupa mudeli või spesifikatsiooni järgi.Ilma registreeringuta külastaja saab osta/tellida internetis (ostukorv).
Kasutaja
Kasutaja saab omale konto teha.Kasutajale pakutakse erinevaid makseviise.- Kasutaja saab tagasiside, kui tal on ost sooritatud.
Kasutaja saab lisada oma firma andmeid.Kasutajal on erinevaid aadresse kui ka kontakte.Kasutaja saab lisada mitme panga andmed.Kasutaja saab lähestada parooli kui unustab parooli. (Saadetakse kinnituskoodi e-meili teel)Kasutajale saadetakse kinnituskood e-meili teel, kui ta registeerib
Super-Administraator
- Administraator saab kustutada ära kasutajaid
Administraator saab muuta kasutaja rolleAdministraator saab lisata poodi firmale.
Administraator
Administraator saab lisada kaupu (item)Administaator saab lisada pilte. (upload-file)Administaator saab lisada soodustust itemile või kategooriale.
Kaubad
Kaubad on kategooriatesse jaotatud.Katalogile on võimalik teha alamkatalog. Nagu menüü.On võimalik kustutada või muuta või lisada kataloogi.Katalogis on mitu itemi.On võimalik lisada itemi.Valuuta on võimalik kuvada erinev (ka hind)On võimalik kuvada ja muuta erinevat keelt.
Keeletoetus
On võimalik tõlkida. Näiteks inglise keelest - eesti keelde. Administraator loob uue itemi (kaup), paneb pealkirjaks teksti inglise keeles. Teisesse tekstisse pakutakse tõlgitud teksti.
Maksmine
Käibemaks on võimalik erinev. (näiteks ärikleint ja kleint)Makse on võimalik otsemakse või järelemaks.Kui kleint tahab järelemaks, siis antakse talle mitu arve, mille tähtajal ta peab maksma.On võimalik kuvada, kas arve on makstud või mitte
Soodus
Soodus on võimalik katalog või asi. Näiteks jõulusoodus -10% mööbel kataloog.Soodus kehtivus on võimalik tähtaeg või tähtajatu.Kleint sisestab kupongikoodi, siis soodus saab.
Firma
Firma saab erineva pood.Firmal on võimalik eraldi.
Transport
Transport on võimalik erinev. (näiteks DHL, DPD)
Asi
Item saab määrata toote tüüp. (näiteks ASUS, Samsung)Item saab kuvada saadaval koht (näiteks kohapeal 100 tk) ja asukohtItem saab kuvada selle tehilise andmeid.Item saab kuvada pilte.Item saab kuvada, mitu inimest vaatab seda hetkel (online-s).Item saab kuvada, kui palju maksab soodusega.
Nice to Have
- Kleint saab otsida sõna.
Kleint saab sorteerida.- Kleindil on võimalik vaadata transpordi staatust. (Shipped)
- Kasutaja saab saata sõnumi moderaatorile või administraatorile, kui tal tekib küsimus.
- On võimalik kampaania.
- Tehtud tellimuste muutmine.
- TOP toodete list.
- Postituste raporteerimine kui on probleem.
- E-meili aadressi vahetamine
- On võimalik automaatselt arvutada valuuta näiteks (EUR ->USD)
- On võimalik luua arve PDF.
- On võimalik pakkuda hinda.
LuckyYou veebiteenuse ja klientrakenduse retsensioon
Meeskond LuckyYou on teinud oma veebiteenusele hea analüüsi, et andmebaas eeldusena on olemas ning olemeid on seal kohe kindlasti paljud kui üheksa. Analüüsis on välja toodud nii „must have“ kui ka „ should have“ asjad, mida toodud teenus peab võimaldama. Rakenduse idee on hea, et antud teenus võiks olla kasutatav ka ärilistel eesmärkidel. Täidatakse “should have” ning võiks olla kasutatav ka ärilistel eesmärkidel. Wiki lehes on hästi koostatud ja informatiivne. Kasutaja saab valida loosimisi kategooria järgi kui tal on soov. Esinevad küll kergesti parandatavaid puudujääke.
Lahendus on kenasti ära jaotatud erinevateks projektideks nagu
- BLL
- DAL
- DALWebAPI
- Domain
- Identity
- WebApp
Kasutatud on ka muud: interface, UOW, Repository, DTO, MVC.
Hea, et veebirakendus on juba serveris, kuid probleemi sisse logimisega olnud. - Testisime siis töötas, aga keeruliseks teha. Oleks teada, et koosta vajalikult juhendit. On vaja hea ja lihtne juhend.
Kokkuvõtteks võib öelda meie meeskond, et tehtud töö on konkreetne ja hea. Kõik ülesanded on täidetud nõutud punktid ning meeskond on astunud sammu edasi ning tulevikus ootame suuri tegusid.
Logi
15.veebruar
- Meeskonna kokkupanek
- Arutlemine
- Plaanimine
- XML loomine
16.märts
- Wiki lehe loomine
17.märts
- XML faili, stiilifaili ja skeemifaili esitamine
27.märts
- Retsensiooni esitamine BurgerAce meeskonna XML-ide kohta
17.aprill
- Andmebaasi mudel LINGIS
- Veebiteenuse analüüs
29.mai
- Lisatud projekti
30.mai
- Uuendatud andmebaasi mudel PDF
8.juuni
- LuckyYou veebiteenuse ja klientrakenduse retsensioon