Meeskond Raavo V2™
From ICO wiki
Liikmed
- Peeter Fridolin
- Kristo Leesmann
- Rando Rommot
Idee
Projekti nimi: Garagefy
Projekti eesmärk on luua autoremonditöökodadele broneerimissüsteemi veebiteenus, mida oleks hiljem lihtne klientrakenduses ära kasutada. Veebiteenus peab olema universaalne, et see sobiks erinevatele autoremonditöökodadele kasutamiseks.
Analüüs
Must have
Klient
- Süsteemi registreerimine ja sisse logimine
- Remonditeenuse broneerimine
- Broneeringute ülevaade
- Enda kasutaja andmete muutmine
Töötaja
- Sisse logimine
- Kõikide broneeringute ülevaade
Administraator
- Sisse logimine
- Kasutajate haldamine
- Broneeringute haldamine
Nice to have
- Ühe broneeringuga saab valida mitu remonditeenust korraga
- Broneeringu kinnituse saatmine töötaja meilile
- Broneeringu meeldetuletus kliendi meilile
- Broneeringute põhjal töötajate töögraafiku koostamine
Raskused
- Puuduv eelnev kogemus veebiteenuste loomisel
- Effektiivne ajaplaneerimine ja tööjaotus
- Meeskonnaliikmete vähene aeg, muude kohustuste kõrval
TFS
Link TFS lehele: TFS
Projekt
Link projektile: Projekt
NB! VAATA JUHISEID KUIDAS SEDA KORRALIKULT KÄIVITADA! PROGRAMMI SEES ON README FILE!
XML Projekt
XML file
<?xml version="1.0" encoding="utf-8" ?>
<Bookings>
<Booking id="1" confirmed="false">
<BookinggDate>2018-04-28</BookinggDate>
<BookingTime>12:00:00</BookingTime>
<ApplicationUser id="1" active="true">
<UserName><![CDATA[Maret Püüa]]></UserName>
<UserEmail><![CDATA[maretpuua@gmail.com]]></UserEmail>
<Phone><![CDATA[+3724375873]]></Phone>
<Car id="1">
<Make><![CDATA[BMW]]></Make>
<Model><![CDATA[E36]]></Model>
<ReleaseYear>2001-02-15</ReleaseYear>
<CarType id="1">
<TypeName><![CDATA[Kupee]]></TypeName>
</CarType>
</Car>
</ApplicationUser>
<Garage id="1">
<GarageName><![CDATA[Mihkel Repairs]]></GarageName>
<GarageAddress><![CDATA[Lehola 5]]></GarageAddress>
<GaragePhone><![CDATA[+3729002007]]></GaragePhone>
<Service id="1">
<ServiceName><![CDATA[Õlivahetus]]></ServiceName>
<ServicePrice currency="€">30</ServicePrice>
<Unit><![CDATA[Tund]]></Unit>
<ExtraInfo><![CDATA[Lehola parim õlivahetus]]></ExtraInfo>
<ServiceType id="1">
<ServiceTypeName><![CDATA[Hooldustööd]]></ServiceTypeName>
</ServiceType>
</Service>
</Garage>
</Booking>
<Booking id="2" confirmed="true">
<BookinggDate>2018-06-14</BookinggDate>
<BookingTime>15:15:00</BookingTime>
<ApplicationUser id="4" active="true">
<UserName><![CDATA[Ahto Leemet]]></UserName>
<UserEmail><![CDATA[Leemet@gmail.com]]></UserEmail>
<Phone><![CDATA[+3728463846]]></Phone>
<Car id="7">
<Make><![CDATA[Opel]]></Make>
<Model><![CDATA[Omega]]></Model>
<ReleaseYear>1998-05-11</ReleaseYear>
<CarType id="3">
<TypeName><![CDATA[Universaal]]></TypeName>
</CarType>
</Car>
</ApplicationUser>
<Garage id="3">
<GarageName><![CDATA[Garagefy Pärnu]]></GarageName>
<GarageAddress><![CDATA[Luha 5]]></GarageAddress>
<GaragePhone><![CDATA[+3729002009]]></GaragePhone>
<Service id="4">
<ServiceName><![CDATA[Rehvivahetus]]></ServiceName>
<ServicePrice currency="€">90</ServicePrice>
<Unit><![CDATA[Üks Rehv]]></Unit>
<ExtraInfo><![CDATA[Õnneliku lõpuga rehvivahetus]]></ExtraInfo>
<ServiceType id="2">
<ServiceTypeName><![CDATA[Rehvitööd]]></ServiceTypeName>
</ServiceType>
</Service>
</Garage>
</Booking>
<Booking id="9" confirmed="false">
<BookinggDate>2018-08-12</BookinggDate>
<BookingTime>10:00:00</BookingTime>
<ApplicationUser id="3" active="true">
<UserName><![CDATA[Rondo Ronnot]]></UserName>
<UserEmail><![CDATA[Ronnot@gmail.com]]></UserEmail>
<Phone><![CDATA[+372523933]]></Phone>
<Car id="3">
<Make><![CDATA[Toyota]]></Make>
<Model><![CDATA[Camry]]></Model>
<ReleaseYear>1990-02-15</ReleaseYear>
<CarType id="5">
<TypeName><![CDATA[Coupe]]></TypeName>
</CarType>
</Car>
</ApplicationUser>
<Garage id="4">
<GarageName><![CDATA[Kiirete poiste parandus]]></GarageName>
<GarageAddress><![CDATA[Lehola 12]]></GarageAddress>
<GaragePhone><![CDATA[+3726923123]]></GaragePhone>
<Service id="3">
<ServiceName><![CDATA[Keemiline salongipuhastus]]></ServiceName>
<ServicePrice currency="€">100</ServicePrice>
<Unit><![CDATA[Tund]]></Unit>
<ExtraInfo><![CDATA[Istmed läigivad nagu alles ostetud]]></ExtraInfo>
<ServiceType id="3">
<ServiceTypeName><![CDATA[Salongitööd]]></ServiceTypeName>
</ServiceType>
</Service>
</Garage>
</Booking>
</Bookings>
XML Schema
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Bookings">
<xs:complexType>
<xs:sequence>
<xs:element name="Booking" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:date" name="BookinggDate"/>
<xs:element type="xs:time" name="BookingTime"/>
<xs:element name="ApplicationUser">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="UserName"/>
<xs:element type="xs:string" name="UserEmail"/>
<xs:element type="xs:long" name="Phone"/>
<xs:element name="Car">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Make"/>
<xs:element type="xs:string" name="Model"/>
<xs:element type="xs:date" name="ReleaseYear"/>
<xs:element name="CarType">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="TypeName"/>
</xs:sequence>
<xs:attribute type="xs:integer" name="id" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:integer" name="id" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:integer" name="id" use="required"/>
<xs:attribute type="xs:boolean" name="active" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Garage">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="GarageName"/>
<xs:element type="xs:string" name="GarageAddress"/>
<xs:element type="xs:long" name="GaragePhone"/>
<xs:element name="Service">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="ServiceName"/>
<xs:element name="ServicePrice">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="currency" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element type="xs:string" name="Unit"/>
<xs:element type="xs:string" name="ExtraInfo"/>
<xs:element name="ServiceType">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="ServiceTypeName"/>
</xs:sequence>
<xs:attribute type="xs:integer" name="id" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:integer" name="id" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:integer" name="id" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:integer" name="id" use="required"/>
<xs:attribute type="xs:boolean" name="confirmed" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSLT HTML transformation
<?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"/>
<xsl:template match="/">
<html>
<head>
<title>Broneeringud</title>
</head>
<body>
<h2>Broneeringud</h2>
<ol>
<xsl:variable name="confirmed">true</xsl:variable>
<xsl:for-each select="Bookings/Booking">
<li>
<b>Status: </b>
<xsl:choose>
<xsl:when test="@confirmed = $confirmed">
<b style="color:green;">CONFIRMED</b>
</xsl:when>
<xsl:otherwise>
<b style="color:red;">PENDING</b>
</xsl:otherwise>
</xsl:choose>
<br/>
<b>Klient: </b>
<ul>
<b>Nimi: </b>
<xsl:value-of select="ApplicationUser/UserName"/>
<br/>
<b>Mail: </b>
<xsl:value-of select="ApplicationUser/UserEmail"/>
</ul>
<b>Auto: </b>
<br/>
<ul>
<xsl:for-each select="ApplicationUser/Car">
<xsl:sort select="@id" />
<b>Tüüp: </b>
<xsl:value-of select="CarType/TypeName"/>
<br/>
<b>Mark: </b>
<xsl:value-of select="Make" />
<br/>
<b>Mudel: </b>
<xsl:value-of select="Model"/>
<br/>
<b>Väljalastud: </b>
<xsl:value-of select="ReleaseYear"/>
<br/>
</xsl:for-each>
</ul>
<b>Broneeringu aeg:</b>
<br/>
<ul>
<b>Aeg: </b>
<xsl:value-of select="BookinggDate" /> - <xsl:value-of select="BookingTime"/><br/>
</ul>
<b>Töökoda:</b>
<br/>
<ul>
<xsl:for-each select="Garage">
<xsl:sort select="@id" />
<b>Töökoja nimi: </b>
<xsl:value-of select="GarageName"/>
<br/>
<b>Aadress: </b>
<xsl:value-of select="GarageAddress"/>
<br/>
<b>Telefon: </b>
<xsl:value-of select="GaragePhone"/>
<br/>
</xsl:for-each>
</ul>
<b>Teenus:</b>
<br/>
<ul>
<xsl:for-each select="Garage/Service">
<xsl:sort select="@id"/>
<b>Teenuse nimi: </b>
<xsl:value-of select="ServiceName"/><br/>
<b>Teenuse tüüp: </b>
<xsl:value-of select="ServiceType/ServiceTypeName"/><br/>
<b>Teenuse hind: </b>
<xsl:value-of select="ServicePrice"/>€ - <xsl:value-of select="Unit"/><br/>
<b>Lisainfo: </b>
<xsl:value-of select="ExtraInfo"/><br/>
</xsl:for-each>
</ul>
</li>
<br/>
</xsl:for-each>
</ol>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT XML transformation
<?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="xml" indent="yes"/>
<xsl:template match="/Bookings">
<Bookings>
<xsl:variable name="confirmed">true</xsl:variable>
<xsl:for-each select="Booking">
<Boooking>
<Status>
<xsl:choose>
<xsl:when test="@confirmed = $confirmed">
Confirmed
</xsl:when>
<xsl:otherwise>
Pending
</xsl:otherwise>
</xsl:choose>
</Status>
<Client>
<Name>
<xsl:value-of select="ApplicationUser/UserName"/>
</Name>
<Email>
<xsl:value-of select="ApplicationUser/UserEmail"/>
</Email>
</Client>
<Car>
<xsl:for-each select="ApplicationUser/Car">
<Type>
<xsl:value-of select="CarType/TypeName"/>
</Type>
<Make>
<xsl:value-of select="Make"/>
</Make>
<Model>
<xsl:value-of select="Model"/>
</Model>
<ReleaseDate>
<xsl:value-of select="ReleaseYear"/>
</ReleaseDate>
</xsl:for-each>
</Car>
<BookingDate>
<Date>
<xsl:value-of select="BookinggDate"/>
</Date>
<Time>
<xsl:value-of select="BookingTime"/>
</Time>
</BookingDate>
<Garage>
<xsl:for-each select="Garage">
<Name>
<xsl:value-of select="GarageName"/>
</Name>
<Address>
<xsl:value-of select="GarageAddress" />
</Address>
<Phone>
<xsl:value-of select="GaragePhone"/>
</Phone>
</xsl:for-each>
</Garage>
<Service>
<xsl:for-each select="Garage/Service">
<Name>
<xsl:value-of select="ServiceName"/>
</Name>
<Type>
<xsl:value-of select="ServiceType/ServiceTypeName"/>
</Type>
<Price>
<xsl:value-of select="ServicePrice"/>
</Price>
<Unit>
<xsl:value-of select="Unit"/>
</Unit>
<ExtraInfo>
<xsl:value-of select="ExtraInfo"/>
</ExtraInfo>
</xsl:for-each>
</Service>
</Boooking>
</xsl:for-each>
</Bookings>
</xsl:template>
</xsl:stylesheet>
Blogi
30.03.2018 Meeskonna moodustamine ja analüüsi koostamine
20.04.2018 - 27.05.2018 Projekti koostamine
31.05.2018 XML koostamine