SharpResto

From ICO wiki


Rühmatöö aines Programmeerimine C# keeles

Meeskond

  • Andres Aava - projektijuht
  • Henri Annilo
  • Jaan Koolmeister
  • Lauri Üksti

Lähtekood

Google Drive

Rakendus tuleb kas LocalDB vastu suunata või paluda luua Azurei tulemüüri reegel.

Tehnoloogia

  • C#
  • Azure
  • SQL Server 12.0.2000
  • ASP.NET
  • Blend
  • TFS (Team Foundation Server)

Idee

Rakenduse kirjeldus
Tegemist restoranidele mõeldud tellimuse koostamise ja esitamise rakendusega. Hetkel on enamasti söögikohtades kasutusel POS (ingl point of sale) süsteemid, kus teenindaja esmalt kogub lauast kliendi soovi ning seejärel läheb kassasse neid tellimusi sisestama ning alles seejärel jõuavad need kööki. Meie rakendus laseks menüüd sirvida, tellimust kokku panna, kommentaare lisada ning sööki käikudeks jagada otse lauast või siis teenindajal otse laua kõrvalt. Selleks võetakse kasutusel tahvelarvutid või nutitelefonid, vastavalt teenindajatele ja vajadusel laudadesse. Seadmetesse on arendatud rakendus, milles on võimalik sirvida menüüd, valida saadaval olevate toitude ja jookide vahel ning lisada need ostukorvi. Ostukorvis saab omakorda lisada kommentaarid ning seejärel jaotada vajadusel käikudeks ning esitada tellimuse. Samu toiminguid on võimalik teha nii teenindaja kui ka lauas olevast nutiseadmest. Tellimus ja klient ühendatakse laua numbri abil. Ühest nutiseadmest saab soovikorral ühe ostukorviga teha ka tellimuse mitmele inimesele. Ostukorvis avaneb võimalus valida inimeste arv ning seal siis jagada vastavalt toidud käikude ja inimeste kaupa. Tellimuse esitamisel saadetakse see kööki ning köök saab märkida tellimuse kas tagasilükatud või “valmistamisel”. Kui tellimus lükatakse tagasi, siis märgib köök kommentaari ning klient või teenindaja peab tegema muudatuse. Kui tellimus läheb valmistamisse, siis jääb see avatuks kliendi nutiseadmes, kus on võimalik ka asju juurde lisada. Samuti kui tellimus esitati lauas olevast nutiseadmest, luuakse sama tellimus ka teenindaja rakendusse, kus vastavalt teenindaja saab märkida, et tema tegeleb selle lauaga. Ning kõigil teenindajatel on võimalik ka samas tellimusele asju kliendi soovil juurde lisada. Kui köök saab mõne käigu valmis, tuleb märkida vastavalt tellimuse rida “valmistamisel” pealt “valmis serveerimiseks” ning seejärel tuleb lauda/tellimust teenindavaks märkinud teenindaja seadmesse teavitus. Teenindaja viib road lauda ning märgib vastavalt serveeritud tellimuse read “serveeritud”. Lõpuks, kui kõik tellimuse read on “serveeritud” ning klient on valmis maksma, sooritatakse makse sularahas või tavalise makseterminaliga ning teenindaja ülesanne on märkida “arve makstud”. Kui tellimus tehti kokku, on nüüd võimalus ka teha arved vastavalt soovile pooleks.

Eesmärk
Rakenduse eesmärk on suurendada restoranide tellimuse esitamisel efektiivsust, muuta seda lihtsamaks ning vähendada võimalike vigade arvu. Seejuures ei kao ka tegelikult teenindaja roll vaid pigem suurenebki teenindaja võimekus rohkem kliendiga suhelda ning lisamüüki teha.

Analüüs

Võimalikud probleemid:

  • Võimalik, et meeskonnal jääb tehnilistest oskustest puudu ning rakenduse funktsionaalsust ei saavutata täies mahus.



Funktsionaalsused (sulgudes on märgitud, kas tegemist põhi- või lisafunktsionaalsusega)
VAADE - Pealeht Pealeht (klient, teenindaja, köök) (põhifunktsionaalsus)

  • Kasutajatüübi valimine (põhifunktsionaalsus) - pealehel saab valida, millise kasutajana hakkad rakendust kasutama (klient, teenindaja, köök)
  • Kasutaja ja parooliga sisselogimine (lisafunktsionaalsus) - vajutades soovitud kasutajatüübile, palutakse sisse logida vastavalt kasutajanime ja parooliga.

VAADE - Menüü Menüü (klient, teenindaja, köök) (põhifunktsionaalsus)

  • Menüü sirvimine (põhifunktsionaalsus) - menüüs on kategooriad (nt eelroad, pearoad, magustoit, joogid). Restoran saab enda menüüd muuta ning vastavalt vajadusele ka jooksvalt punaseid ajutisi kommentaare lisada ja valikuid“disabled” märkida. Menüü kuvatakse Toitudele peale vajutades kuvatakse lisainformatsioon (nt kirjeldus, komponendid, kaloraaž). Samuti avanevad toidule vajutades “lisandite võimalused” ning “quantity” ja “add item” nupp.
  • Tellimuse kokku panemine (põhifunktsionaalsus) - võimalik menüüs olevaid asju lisada enda ostukorvi. Mitme inimese jaoks tellimiseks võimalik valida ka kohe kogust. Menüü lehel on olemas nupp “checkout”, kus saab minna edasi järgmisesse vaatesse.
  • Tellimuse ridade kommenteerimine (lisafunktsionaalsus)- peale menüüst asjade valimist on kliendil selles n.ö ostukorvis võimalik lisada veel kommentaare (nt “ei soovi mingit komponenti”).
  • Ühe tellimuse jaotamine mitme inimese peale (lisafunktsionaalsus) “Ostukorvi” vaates on võimalik valida inimeste arvu. Seejärel tekib vaatesse vastavalt valitud inimeste arvule kastikesi. Tellimuse read tuleb tõsta vastavalt inimeste alla (vastavalt kes mille eest maksab). Kui laud on väike, siis pole teenindajal probleemi jätta meelde, kes mida tellis. Suurema laua korral saab tekitada näiteks kohtadele numeratsiooni 1-10 ning teenindaja peab siis enda jaoks mõtlema vastavalt, mis loogika järgi ta kohtadele need numbrid pani (selle vastu, et inimesed kohti vahetavad ei olegi üldjuhul midagi teha...selle jaoks ongi teenindaja). Samas jääb ka üldine kast, milles olevad asjad jaotatakse hiljem arvel võrdselt kõigi vahel.
  • Tellimusridade jaotamine mitmeks käiguks(lisafunktsionaalsus) “Ostukorvi” vaates, Iga inimese kastikeses saab valida soovitavate käikude arvu ning jagada toidud vastavalt soovitud järjekorrale.
  • Tellimuse esitamine(põhifunktsionaalsus) “Ostukorvi” vaates on olemas nupp “esita tellimus”, mis saadab tellimuse köögi kasutajale. Peale esitamist olemasolevaid elemente klient ise enam muuta ei saa. Võimalik on menüüst elemente juurde lisada ning seejärel uuesti tellimust esitada. Sellisel juhul läheb kööki ainult lisatud element.
  • Tagasilükatud tellimuse muutmine nähes köögi kommentaari(lisafunktsionaalsus) - peale esitamist jääb tellimus ootama vastust. Kui tellimus aksepteeritakse, liigub see avatud tellimuste alla. Kui lükatakse tagasi, tuleb teade ning klient või teenindaja saab peale seda tellimust kohandada ning uuesti esitada. (ülejäänud protsess toimib samamoodi)


VAADE - Köögipoolne valideerimine Köögipoolne valideerimine, Tellimused (põhifunktsionaalsus)

  • Tellimuse tagasilükkamine kommentaariga (teenindaja, köök) (lisafunktsionaalsus) - Köök või vajadusel teenindaja saab lisada tellimuse või vajadusel tagasisaata, kus tuleb lisada kommentaar. Samuti saab köök või teenindaja tellimuse aksepteerida. Peale aksepteerimist liigub esimene käik avatud tellimuste alla “tegemisel” ning ülejäänud käigud “ootel” kategooriasse.
  • Tellimuse töösse märkimine (põhifunktsionaalsus) - kui köögile või teenindajale tellimus sobib, saab märkida aksepteeritud.



VAADE - Avatud tellimused Köögipoolne valideerimine, Tellimused(klient, teenindaja, köök)(põhifunktsionaalsus) - selles vaates on näha avatud ja suletud tellimused. Tellimuse ülesed kategooriad on “teenindamist vajavad”, “teenindatavad”, “makstud”, “kõik tellimused”. Alamkategooriad on omakorda seatud tellimuse ridadele: ”ootel”, “tegemisel”, “valmis serveerimiseks”, “serveeritud”, “makstud”. NB! Klient näeb ainult enda tellimust puudutavat infot.

  • Töös oleva tellimuse ilmnemine teenindaja, köögi, kliendi rakendusse(põhifunktsionaalsus)
  • Töös oleva tellimuse teenindatavaks märkimine kindla teenindaja poolt (põhifunktsionaalsus)- kui köök on aksepteerinud tellimuse, mis on otse kliendi rakendusest, näevad teenindajad seda ning saavad märkida tellimuse “teenindatavaks”. Sellega tekivad teenindajatele kindlad lauad, mida nad teenindavad. Igal laual, kus on lahtine arve, peab olema teenindaja, vastasel korral hakkab süsteem teavitusi saatma teenindajatele.
  • Teenindatavate tellimuste staatuse muutuse ning ka uute tellimuste kohta tulevad teenindaja rakendusse märguanded (lisafunktsionaalsus)
  • Tellimuse staatuse muutmise võimalus - teenindajal ja köögil(põhifunktsionaalsus)
  • Arve jagamise võimalus(lisafunktsionaalsus) - kui kõik toidud on serveeritud ja klient on valmis maksma, saab teenindaja “teenindatavate” tellimuste alt initsieerida maksmist. Kliendil avaneb võimalus veel ostukorvis olevat vastavalt inimeste vahel muuta, misjärel teenindaja saab koguda maksed ning märkida tellimuse “makstud”.


MUDEL - Esialgne andmebaasi struktuur

  • Andmebaasi hallatakse MS Azure keskkonna kaudu.


Prototüüp

VAADE - Hinnang
Hetkel peaksime saama maksimaalsed punktid, kuna prototüübiga on täidetud kõik vajalikud põhifunktsionaalsused. Ning rakendus on demotav kliendile. Edasised tegevused on refaktoreerimine, testimine ning optimeerimine (eelkõige andmebaasipäringud...samuti ka rakenduse sünkroniseerimine, kui kasutajaid peaks olema korraga mitmeid).
VAADE - Menüü

Menüü vaade

Menüü vaates on võimalik sirvida menüüd, lisada "+" alt erinevaid toite ostukorvi. Samuti saab filtreerida eelroogasid, pearoogasid, magustoite vastavalt soovile. Lõpuks on võimalik teha "Make Order", mis muudab valitud asjad "IN PROGRESS" staatusesse ning need on nüüd nähtavad "Kitchen View" ja "Waiter View" all. Hetkel menüü vaade täidab kõiki põhifunktsionaalsusi, kuid välimuse ning menüü elementide poole peale vajab veel parendust.
VAADE - Waiter

Waiter vaade

Teenindaja vaates näeme avatud ja lõpetatud tellimusi ning saame neid filtreerida. Samuti saab teenindaja märkida "Update" nupuga vastavalt iga tellimusrea juures staatust järgmisesse faasi. Erinevad tellimurea staatused/faasid on selle rakenduse üheks põhieesmärgiks, et lihtsustada teenindaja tööd. Teenindaja vaade täidab kõiki põhifunktsionaalsusi, kuid tööd vajab veel andmebaasist andmete küsimine (kui peaks tekkima palju tellimusi, et kõike korraga ei küsitaks) ning kasutajaliidese visuaalne pool.
VAADE - Köögipoolne valideerimine

Köögi vaade

Köögi vaade annab ülevaate klientidelt tulnud tellimuste kohta. Seal kajastub tellimuse kohta vajalik info: aeg, kliendi kommentaar, tellimusega seotud valikud. Tellimusi on võimalik filtreerida laudade kaupa ning iga tellimuse kohta on võimalik hüpikakna kaudu saada lisainfot. Toidu valmides saab märkida tellimuse "valmis" staatusesse.

Vaadet avades kogutakse andmebaasist kõik värsked tellimused ning käivitatakse perioodiliselt uuenev taimer, sealjuures uuendatakse ka dünaamiliselt avatud tellimustega laudade valikut ning iga laua avatud tellimuste arvu. Seades tellimus "valmis" olekusse eemaldatakse see loendist.

Edaspidises töös peab tagama, et mitme köögivaates rakenduse vahel ei tekiks konflikte. Lisaks oleks hea hoida hetkel käsil olevaid tellimusi eraldi listis, et oleks lihtsam neid valmis staatusesse viia. UI poolelt on veel vaja nuppude käitumist kohendada, et oleks lihtsam aru saada, mis laud hetkel valitud on.


VAADE - Admin

Admin vaade

Admin vaates saab lisada ja uuendada restorani menüüd. See vaade tekkis lisaks plaanitud põhifunktsionaalsusele ning hetkel veidi poolik veel.
VAADE - Arve koostamine

Bills vaade

Arve vaates saab teenindaja vaadata, milliste laudade tellimused on serveeritud ehk arvet on võimalik koostada. Vaadet avades kogutakse baasist info laudade kohta, mille tellimus on "Serveeritud" staatuses. Vasakul olevate nuppude abil saab filtreerida arveid laudade järgi, nuppu näidatakse alles siis, kui antud laua tellimus on arve koostamiseks vajalikus olekus. Nupu "Generate bill" abil salvestatakse tellimus arvete tabelisse ning tellimuse staatus läheb olekusse "Complete" ehk rakenduses enam sellist tellimust ei kajastata ning vastava laua tellimus kaob lehelt ära.

Vaatel on ka "Pay" nupp, mille taga hetkel veel funktsionaalsust ei ole, kuid tulevikus oleks võimalik selle abil asuda arvet tasuma.

Ajalogi

  • 17.09.2017 - meeskonna kokkupanek ja skype'i grupi loomine
  • 01.10.2017 - esimene koosolek
  • 08.10.2017 - analüüsi versioon 1 ja andmebaasi arhitektuuri koosolek
  • 22.10.2017 - Azure keskkonna seadistamine
  • 17.12.2017 - prototüüp valmis
  • 17.12.2017 - põhifunktsionaalsused täidetud

+ jooksvad arutelud skype'i grupis