Purgis

From EIK wiki

Kodutöö aines "Võrgurakendused II: hajussüsteemide ehitamine"

Meeskond

  • Märt Lõhmus
  • Kelli Lukas

Analüüs

Üldine kirjeldus

Eesmärk on luua veebirakendus, mis võimaldab restoranide klienditeenindajatel sisestada ning hallata tellimusi. Kokad saavad kiiresti teate uuest tellimusest ning kui täidetud, märgivad nad selle tehtuks. Seejärel saab teenindaja teate valmis tellimusest ning toimetada hõlpsalt klientideni. Antud süsteem kiirendab ning lihtsustab töövoogu restoranides ning seda eriti juhul, kui on kiire aeg ja palju kliente. Andmeid päritakse keskserverilt läbi API.

Tehnoloogiad

C#, ASP.NET WEB-API, Angular&TypeScript

Rakenduse sisu

MUST HAVE:

  • Restorani loomine - laudade arvu defineerimine, nimi
  • Kasutajagrupid – restoran, teenindaja, köök
  • Tellimuse loomine
  • Kokale tellimuse märguande saatmine
  • Tellimusel staatus "tehtud"
  • Teenindaja saab märguande, viib toidu lauda
  • Tellimus läheb arhiivi statistika pidamiseks

NICE TO HAVE:

  • Tellimuse muutmine
  • Laudade broneerimine
  • Vabade laudade nägemine
  • Arve väljastamine lauale/inimesele
  • Lauale automaatselt hõivatud/vaba staatuse määramine

ERD:

PURGIS AB.PNG

XML/XSD/XSLT

XML

<?xml version="1.0" encoding="utf-8" ?>
<restoranid>
  <restoran id="1">
    <menyy>
      <toidud>
        <toit>![CDATA[Kanapraad]]</toit>
        <toit>![CDATA[Seapraad]]</toit>
        <toit>![CDATA[Fetasalat]]</toit>
        <toit>![CDATA[Oasalat]]</toit>
      </toidud>
      <joogid>
        <jook>![CDATA[Apelsinimahl]]</jook>
        <jook>![CDATA[Segumahl]]</jook>
        <jook>![CDATA[Coca-cola]]</jook>
        <jook>![CDATA[Fanta]]</jook>
        <jook>![CDATA[Sprite]]</jook>
      </joogid>
    </menyy>
    <teenindajad>
      <teenindaja id="1">![CDATA[Maali]]</teenindaja>
      <teenindaja id="2">![CDATA[Juhan]]</teenindaja>
      <teenindaja id="3">![CDATA[Juta]]</teenindaja>
    </teenindajad>
    <nimi>![CDATA[NOA restoran]]</nimi>
    <lauad>
      <laud id="1" >
        <tellimused teenindajaId="1">
          <tellimus valmis="false" tellimuseAeg="1702301843" taimneVersioon="true">
	    <jook>![CDATA[Apelsinimahl]]</jook>
	    <toit>![CDATA[Oasalat]]</toit>
	  </tellimus>
          <tellimus valmis="false" tellimuseAeg="1702301844">
	    <jook>![CDATA[Segumahl]]</jook>
	    <toit>![CDATA[Seapraad]]</toit>
	  </tellimus>
          <tellimus valmis="false" tellimuseAeg="1702301846" taimneVersioon="true">
	    <jook>![CDATA[Sprite]]</jook>
	    <toit>![CDATA[Oasalat]]</toit>
	  </tellimus>
          <tellimus valmis="false" tellimuseAeg="1702301847">
	    <jook>![CDATA[Fanta]]</jook>
	    <toit>![CDATA[Fetasalat]]</toit>
	  </tellimus>
        </tellimused>
        <teenindaja>![CDATA[Maali]]</teenindaja>
      </laud>

      <laud id="2" >
        <tellimused teenindajaId="2">
          <tellimus valmis="false" tellimuseAeg="1702301852">
	    <jook>![CDATA[Fanta]]</jook>
	    <toit>![CDATA[Fetasalat]]</toit>
	  </tellimus>
	  <tellimus valmis="false" tellimuseAeg="1702301853">
	    <jook>![CDATA[Coca-cola]]</jook>
	    <toit>![CDATA[Fetasalat]]</toit>
	  </tellimus>
        </tellimused>
        <teenindaja>![CDATA[Juhan]]</teenindaja>
      </laud>
	  
      <laud id="3" >
        <tellimused teenindajaId="3">
          <tellimus valmis="false" tellimuseAeg="1702301903" taimneVersioon="true">
	    <jook>![CDATA[Fanta]]</jook>
	    <toit>![CDATA[Oasalat]]</toit>
	  </tellimus>
	  <tellimus valmis="false" tellimuseAeg="1702301905">
	    <jook>![CDATA[Apelsinimahl]]</jook>
	    <toit>![CDATA[Fetasalat]]</toit>
	  </tellimus>
	  <tellimus valmis="false" tellimuseAeg="1702301906">
	    <jook>![CDATA[Coca-cola]]</jook>
	    <toit>![CDATA[Kanapraad]]</toit>
	  </tellimus>
        </tellimused>
        <teenindaja>![CDATA[Juta]]</teenindaja>
      </laud>
    </lauad>
  </restoran>
</restoranid>

XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="restoranid">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="restoran">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="menyy">
		<xs:complexType>
		  <xs:sequence>
		    <xs:element name="toidud">
		      <xs:complexType>
			<xs:sequence>
			  <xs:element type="xs:string" name="toit" maxOccurs="unbounded" minOccurs="0"/>
			</xs:sequence>
		      </xs:complexType>
		    </xs:element>
		    <xs:element name="joogid">
		      <xs:complexType>
		        <xs:sequence>
			  <xs:element type="xs:string" name="jook" maxOccurs="unbounded" minOccurs="0"/>
			</xs:sequence>
		      </xs:complexType>
		    </xs:element>
		  </xs:sequence>
                </xs:complexType>
                </xs:element>
                <xs:element name="teenindajad">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element type="xs:string" name="teenindaja" maxOccurs="unbounded" minOccurs="0"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
                <xs:element type="xs:string" name="nimi"/>
                <xs:element name="lauad">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="laud" maxOccurs="unbounded" minOccurs="0">
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element name="tellimused">
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element name="tellimus" maxOccurs="unbounded" minOccurs="0">
                                    <xs:complexType>
                                      <xs:sequence>
                                        <xs:element type="xs:string" name="jook"/>
                                        <xs:element type="xs:string" name="toit"/>
                                      </xs:sequence>
                                      <xs:attribute type="xs:boolean" name="valmis" use="required"/>
                                      <xs:attribute type="xs:unsignedInt" name="tellimuseAeg" use="required"/>
			              <xs:attribute type="xs:boolean" name="taimneVersioon"/>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                              <xs:attribute type="xs:int" name="teenindajaId"/>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute type="xs:int" name="id"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:int" name="id"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT

XSLT HTML

Restoranide id

<?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>Order fast/fi</title>
        <h2>
          <xsl:value-of select="/restoranid/restoran/nimi>
        </h2>
      </head>

      <body>
        <ul>
          <xsl:for-each select="/restoranid/restoran">
            <li>
              <xsl:value-of select="@id" />
            </li>

            <ul>
              <xsl:for-each select="toidud/toit">
                <li>
                  <xsl:value-of select="." />
                </li>
              </xsl:for-each>
            </ul>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Restoranide toidud

<?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>Order fast/fi</title>
        <h2>
          <xsl:value-of select="/restoranid/restoran/nimi>
        </h2>
      </head>

      <body>
        <ul>
          <xsl:for-each select="/restoranid/restoran">
            <li>
              <xsl:value-of select="@id" />
            </li>
            
            <ul>
              <xsl:for-each select="teenindajad/teenindaja">
                <xsl:sort select="."/>
                <li>
                  <xsl:value-of select="." />
                </li>
              </xsl:for-each>
            </ul>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSLT 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="xml" indent="yes"/>
 
    <xsl:template match="/">
      <restoranid>
        <xsl:for-each select="/restoranid/restoran">
          <restoran>
            <nimi>
              <xsl:value-of select="nimi"/>
            </nimi>
            <xsl:variable name="tellimusId" select="@id"/>
            <teenindaja>
              <xsl:copy-of select="/restoranid/restoran/teenindajad/teenindaja[@id=$teeenindajaId]" />
            </teenindaja>
            <tellimused>
              <xsl:for-each select="tellimused/tellimus">
                <xsl:variable name="taimneVersioon" select="@taimneVersioon"/>
                <tellimus>
                  <toit>
                    <xsl:value-of select="." />
                  </toit>
                  <xsl:copy-of select="/restoranid/restoran/lauad/laud/tellimused/tellimus[@taimneVersioon=$taimneVersioon]/toit" />
                </tellimus>
              </xsl:for-each>
            </tellimused>
          </restoran>
        </xsl:for-each>
      </restoranid>
    </xsl:template>
  </xsl:stylesheet>