Meeskond:DamageReport

From ICO wiki

Meeskond

Liikmed:

  • Tiina Pukk
  • Lea Tuberik (projektijuht)
  • Ülari Kalamees

Idee

DamageReport on WPF rakendus reisikulude jagamiseks.

Rakendus on mõeldud seltskonnale reisikaaslastele reisiga seotud kulude haldamiseks ja omavahel õiglaselt jagamiseks. Rakendus võimaldab sisestada erinevaid kulutüüpe (poes käigud, restorani arved jmt) ning mis kõige tähtsam, inimese, kes arve tasus. Süsteem jagab automaatselt arve kaaslaste vahel ning reisi lõpuks on täpne ülevaade, palju on reisi jooksul kokku kulutusi ning kes on need kinni maksnud.


Projekti analüüs

Probleemi püstitus ja töö eesmärgid

Probleem

Reisides seltskonnaga, kellega ei ole ühine rahaott, tuleb ette olukordi, kus on mõistlik tasuda arveid ühel inimesel ning hiljem jagada summa omavahel ära. Tihti tuleb selliseid olukordi reisi jooksul rohkesti ette ning reisi lõppedes võib olla raske ja kindlasti tüütu hakata uuesti meenutama, kes kellele ja palju võlgu on.

Projekti ülevaade

DamageReport on veebipõhine rakendus reisikulude arvestuse pidamiseks ning lõplikuks jagamiseks reisiseltskonna liikmete vahel. Reisi jaoks luuakse kasutajate grupp. Rakendus võimaldab sisestada põhiinfo reisi kohta: toimumise aeg, sihtkoht, transiitriigid, võimalik kulude valuuta. Igal kasutajal on võimalik lisada rakendusse enda poolt grupi huvides kantud kuluühikuid, märkides ära summa, kulu lühikirjelduse (restoran, takso, laevapiletid vm) ja milliste grupi liikmete vahel läheb kulu jagamisele (default kõigi). Kuluühiku sisestamise kuupäev on tuvastatav. Kuluühiku juurde on võimalik lisada foto kuludokumendist, näiteks mobiiliga pildistatud restoranitsekk vms. Rakendus liidab jooksvalt kulud kokku ning arvestab välja sisestatud summade jaotuse grupi liikmete vahel. Iga grupi liige näeb enda ja teiste n.ö jooksvat saldot.

Projekti raames loodava rakenduse funktsionaalsed eesmärgid jagunevad kaheks:

  • Baasfunktsionaalsus (must have) - kursuse raames reaalselt töötava lahenduse näol implementeeritavad rakenduse omadused.
  • Laiendatud funktsionaalsus (nice to have) - piisava ajaressursi olemasolul loodavad lisavõimalused.

Kasutajarollid

Rakenduse kasutamiseks peab isik end registreerimisvormi alusel süsteemi kasutajaks registreerima. Rakenduses eristatakse kolm erinevat rolli:

Osaleja

  • rakendusse sisse logida ei saa
  • omab administraatori poolt loodud profiili

Kasutaja

  • võib rakendusse sisse logida
  • võib muuta oma profiili andmeid
  • võib luua ja salvestada uusi kulukandeid
  • näeb ülevaadet reisikulude hetkeseisu kohta
  • saab kustutada ja muuta enda sisestatud kuluridu

Administraator

  • võib teha kõike, mida saab teha kasutaja
  • võib lisada / muuta / kustutada valuutakursse
  • võib genereerida kasutajale uue salasõna

Kulude jagamise algoritm

Iga inimese jaoks luuakse eraldi konto. Makstud summa järgi arvutatakse, kui palju iga inimene peab maksma (kulu/osalejate arv). Iga inimese jaoks registreeritakse see väärtus negatiivse kuluna. Järgmiseks salvestatakse kulu, mis iga inimene on arvet tasudes maksnud, lisades see summa tema kasutaja kontole. Selliselt on inimestel, kes on arveid rohkem tasunud (laenuandjad) on positiivne saldo, ja inimesed, kes ei ole arveid tasunud (laenuvõtjad), on negatiivsed saldod. Kui kõik kontod on nullid, on kõik võrdselt maksnud.

Kasutatavad andmebaaside tabelid

  • Kasutajad - administraatori, kasutajate ja osalejate andmed
  • Kululiigid - mis liiki kulu on: transport, majutus, söök, meelelahutus jne
  • Kulukanded - kasutajate poolt lisatud kulukanded
  • Logi - kes mida millal tegi
  • Reisid - erinevad reisi-projektid
  • Valuutakursid - administraatori poolt koostatav tabel erinevate valuutakursside haldamiseks
  • (Kulutüübid - võimalik on valida isiklik kulu või grupi huvides tehtud kulu)

Must have funktsionaalsus

Uue reisi sisestamine

  • Administraator peab saama algatada uut reisi-projekti.

Reisiprojekti loomisel peab saama määrata:

  • reisi algus ja lõpp
  • reisil osalejad
  • reisi sihtkoht
  • käibiv valuuta(d)
  • teiste kasutajate õigused

Kasutajahaldus

  • Administraatoril peab olema võimalus sisestada uusi kasutajaid või reisil osalejaid.

Uue kasutaja lisamisel saab sisestada järgmised andmed:

  • email (kasutaja nimi)
  • eesnimi
  • perenimi
  • parool
  • isikukood
  • pangakonto
  • passi / ID kaardi number
  • roll

Kohustuslikud väljad on email, eesnimi, parool, roll.

Kulukannete sisestus

  • Kasutajal peab olema võimalus sisestada kulukandeid ning sinna juurde märkida:
    • milliste inimeste vahel kulukanne jagamisele läheb (kas kõigi või valitud nimede)
    • kulu hetk
    • kulu kirjeldus
    • kulu suurus
    • kulu valuuta
    • kulu liik (meelelahutus, transport, söömine, öömaja, ...)
    • kes kulu maksis (üks või mitu inimest)
    • palju maksis
    • kulu valuuta
    • (kulu tüüp (ühiskulu, erakulu, laen, ...))

Reisiülevaade

  • Kasutajal peab olema võimalus igal hetkel näha ülevaadet reisikulude hetkeseisu kohta. Ülevaates peab kajastuma kõikide reisil osalejate kulude hetkeseis (kes on omadega plussis, kes on miinuses).

Lõppraport

  • Lõppraport kuvab reisiülevaate ning arvutab välja, kes kellele palju maksma peab.

Logi

  • Süsteem peab pidama logi, kes millal, mida tegi.

Nice to have

Kuludokumendi üleslaadimine

  • Kasutajal võiks olla võimalus kuludokument ka üles laadida, kas pildi, pdf või muu faili näol.

Off-line kasutusvõimalus

  • Veebijuurdepääsu puudumisel saab iga kasutaja oma kulusid ikka sisestada ja esimesel veebikontaktil arvestatakse vahepeal sisestatud kulud juurde.

Filtreeritav reisiülevaade

  • Kasutajal võiks olla võimalus reisiülevaadet filtreerida vastavalt huvipakkuvale kulutüübile, kasutajale, valuutale või ajavahemikule.

Tööjaotus

  • Tiina - front end
  • Lea - andmebaas
  • Ülari - back end

Ohukohad

Loome selle veebilahendusena, mis tähendab, et eeldame reisiseltskonnal veebiühenduse olemasolu. See võib esialgu kasutust piirata. Probleemseks võib osutuda erinevate valuutade ümberarvestamiseks optimaalse lahenduse leidmine.

Tehniline dokumentatsioon

Lahenduse kirjeldus

Rakenduse realiseerimiseks valisime WPF-tehnoloogia kasutades vaate poolel MVVM arendusmustrit. Andmebaasiühenduseks kasutame EntityFramework-i ning selle poolt pakutavaid võimalusi. Ühegi välise andmebaasiga seotud ei ole.

Rakenduse põhieesmärk ehk kulude arvestus toimub järgnevalt. Iga kasutaja on kohta on maksete arvestus ja kulude arvestus. Makse tähendab seda, et üks reisiline on tasunud kuskil ka ühe või mitme kaasreisija eest. Kulu sisestamisel jagab rakendus selle esialgu kõigi reisil osalejate vahel võrdselt. Juhul, kui kulu kandmises on erisusi, siis saab seda manuaalselt iga reisilise kohta teha. Maksete ja kulude tulp annab kasutajale ülevaate, kui palju on ta reisi jooksul väljaminekuid teinud ning mis on tema kulud reisi jooksul. Teoreetiliselt on võimalik, et üks reisiline maksab terve reisi vältel kogu seltskonna eest, mille tulemusel on tal maksete tulbas pirakas summa, aga kulude tulbas väiksem summa, sest teised hüvitavad talle hiljem proportsionaalse osa kuludest. Samuti on võimalik, et reisiseltskonnas jagatakse kõik kulud kõigi vahel võrdselt, aga üks reisiline ei maksa reisi ajal ühegi kulu eest. Sellisel juhul on tal maksete tulbas rasvane null ning kulude tulbas summa, mille ta peab hiljem maksjatele hüvitama.

Arendusprotsess - kes mida tegi

Projekti jooksul korraldati mitu grupikoosolekut, kus tehti ühiselt ära järgnevad projekti osade mustandid: vaadete kujundus ja funktsionaalsus, andmebaasi koostamine, rakenduse kihtide paika panemine. Palju suhtlust toimus loomulikult ka e-posti ja Skype teel. Osa koodist kirjutatud ühiselt (üks tegi, teine täiendas/parandas).

Individuaalne panus:

  • Lea pani üles esialgse lahenduse andmebaasist ja tegeles newTrip, currency ja transType loomisega ja testimisega.
  • Tiina visualiseeris ühise nägemuse vaadetest, täiendas andmebaasi, tegeles useri loomise, vaadete kujunduse ja testimisega.
  • Ülari tegeles esialgse analüüsiloogika parendamisega, payment, cost, traveller, log ja transactioni loomisega ning pani kogu rakenduse tööle.

Projekti eest saadavad punktid on järgmised:

  • Lea 100%
  • Tiina 100%
  • Ülari 100%

Prototüüp

Prototüübi saab alla laadida siit

Lõpptoode

Lõpptoote saab alla laadida siit

Kasutusjuhend

DamageReport on mugav rakendus reisiseltskonnale reisikulude ülesmärkimiseks ning omavaheliseks jagamiseks.

Avaleht

Avalehel on vaade kõikidele rakendusse lisatud reisidele. Iga reisi kohta on toodud sihtkoht, algus- ja lõppkuupäev. Valides soovitud reisi ja vajutades nuppu „Ava reis“ liigub kasutaja edasi konkreetse reisi lehele (reisi vaade).

Vasakul on menüü on nuppudega „Lisa uus kululiik“, „Lisa uus kasutaja“ ja „Halda valuutasid“.

Vasakul üleval olev „Ava Reisid“ nupp viib kasutaja alati tagasi avalehe vaatele. Kogu menüü on kasutajatele nähtav ja ligipääsetav rakenduse igas vaates.

Uue reisi lisamine

Uue reisi lisamiseks tuleb avalehel vajutada nuppu „Lisa uus reis“. Kasutajale avaneb uus leht, kus tuleb täita väljad reisi sihtkoha, algus- ja lõppkuupäeva (kalendrivalik) ja reisi valuuta kohta, mis võetakse aluseks kulude jagamisel. Kuvatud tabel kõigi rakenduse kasutajate nimekirjaga ning nimekirjas isiku peal klõpsamisel lisatakse see kasutaja reisil osalejate hulka – tema nimi liigub parempoolsesse tulpa. Kasutaja eemaldamiseks reisil osalejate hulgast tuleb klõpsata selle kasutaja nimel parempoolses „Reisil osalejad“ nimekirjas. Juhul, kui soovite lisada täiesti uue kasutaja, siis selleks valige vasakult menüüst nupp „Lisa uus kasutaja“.

„Lisa uus reis“ nuppu vajutades luuakse uus reis ja kasutaja viiakse tagasi avalehele, kust nähtub ka juba uus reis. Reisil ja „Ava reis“ nupul klõpsates on võimalik see avada ja liikuda edasi konkreetse reisi lehele.

Reis ja reisijad

Konkreetsel reisil ja „Ava reis“ nupul klõpsates avaneb reisi koondvaade. Lehe üleval jääb kasutajale nähtavaks, millise reisi vaates ollakse. Koondvaates on tabel kõigi reisil osalejate nimede ning nende poolt reisi jaoks tehtud maksete ning kantud kulutustega.

Saldo tulbas on igal reisil kas + või – märgiga saldo seis.

+ märgiga summa tähendab, et reisija on maksnud reisi jaoks rohkem, kui on olnud tema kulutused ning teised reisijad peavad talle + summa ulatuses kulusid hüvitama.

– märgiga summa tähendab, et teised on maksnud selle reisijaga seotud kulutusi ning see reisija peaks – märgiga summa ulatuses hüvitama + märgiga reisijatele oma kulusid.

Pane tähele, et reisi vaates on kõik summad kuvatud reisi valuutas!

Valides tabelist konkreetse reisija ning vajutades allpool nuppu „Vaata reisijat“ avaneb uus leht, kus on tabel kõikide selle reisijaga seotud maksete ja kulude kohta. Tabeli iga rida kirjeldab ühte kulukannet, näidates ära selle kuupäeva ning kirjelduse. Kui reisija oli see, kes kulu eest maksis, siis tuleb makstud summa kohta vastav kirje tulpa „Makstud“. Kui reisija ainult maksis, aga seda ise kuluna reisijatega ei jaga (st maksis teiste eest ehk teisisõnu – laenas raha), siis tulpa „Kulu“ tuleb tal 0. Kui konkreetne reisija maksis kas osaliselt või terves ulatuses endaga seotud kulu, siis ilmub vastava summa kohta kirje ka tulpa „Kulu“.

Pane tähele, et reisija vaates on kõik summad kuvatud kulukandele valitud valuutas. Ümber arvestamine reisi valuutasse toimub reisi vaates.

Vaatelt saab kohe lisada reisi alla uue kulukande, vajutades allpool nuppu „Lisa uus kanne“.

Uue kulukande lisamine

„Reisi“ vaates saab kasutaja lisada uue kulu kande, vajutades nuppu „Lisa uus kanne“. Kasutajale avaneb uus leht, kus vasakpoolses sektsioonis „makse“ tuleb täita ära väljad: kulu tegemise kuupäev (kalendervalik), valida tehingu liik (rippmenüüst), maksja (rippmenüüst), kulu summa, valuuta ja kirjeldus. Kulu valuuta ei pea olema reisi valuuta. Kui te ei leia rippmenüüst sobivat valuutat, siis vt palun allpool valuuta.

Vajutades nuppu „Jaga kulu“ jagatakse summa kõigi reisil osalejate vahel võrdselt. Kasutaja näeb kulude jaotumist reisijate vahel parempoolses sektsioonis „kulud“.

Kui makstud summat ei soovita jagada kõigi reisijate vahel võrdselt, siis on võimalik seda muuta. Selleks tuleb kasutajate loetelu väljal klõpsata iga kasutaja peal ja „kulud“ sektsiooni üleval olevates väljades manuaalselt muuta ära konkreetse reisija kulu suurus, vajutades nuppu „Muuda“. Pärast muutmisi peab reisijatele märgitud kulude summa võrduma „makse“ sektsioonis märgitud summaga; vastasel juhul uue tehingu lisamine ei õnnestu (kasutajat teavitatakse sellest).

Kui kõik kulu andmed on sisestatud ja kulu reisijate vahel jagatud, siis tuleb vajutada nuppu „Lisa tehing“.

Uue kululiigi lisamine

Põhimenüüst nupu „Lisa uus kululiik“ vajutamisel avaneb kasutajale leht, kust saab lisada kululiike. Eesmärk on kulude grupeerimine hiljem parema ülevaate saamiseks, näiteks kulud söögile, kulud joogile, kulud transpordile jne. Kõik lisatud kululiigid avanevad rippmenüüst uue kulukande lisamisel.

Uue kasutaja lisamine

Põhimenüüst nupu „Lisa uus kasutaja“ vajutamisel avaneb kasutajale leht, kust saab lisada rakendusele uusi kasutajaid. Kasutaja täidab selleks eesnime ja perekonna nime väljad ning vajutab nuppu „Lisa kasutaja“. Kõik olemasolevad kasutajad on kuvatud väljade all; palun kontrolli, et isik, keda lisama hakkad, ei ole juba olemasolevate kasutajate hulgas.

Pane tähele, et kasutajateks on kõik rakenduse kasutajad, kes on või ei ole ühe või enama reisiga seotud. Konkreetse reisi juurde valitud kasutajaid nimetatakse rakenduses reisijateks.

Valuutad

Kuna reisid võivad viia riikidesse, kus käibevaluutaks ei ole euro, siis võimaldab rakendus lisada kulukandeid ka muudes valuutades, mis arvestatakse ümber reisi valuutasse. Tegutsemisjärjekord oleks järgmine. Avalehel nuppu „Halda valuutasid“ vajutades kirjuta lahtrisse „valuuta nimi“ soovitud valuuta, mis ei ole euro, ning lahtrisse „kurss“ sisestatud valuuta kurss euro suhtes. Kõik rakenduses olemasolevad valuutad on kuvatud samal lehel nimekirjas. Sisestatud valuutaga seotud andmete muutmiseks klõpsa nimekirjas vastava valuuta peal ning muuda lahtritesse kuvatud andmeid.

Uut reisi luues valitakse valuuta, milles hakatakse pidama kogu reisikulude arvestust. Kulukandeid võib teha ka teistes rakendusse sisestatud valuutades ning need arvestatakse automaatselt ümber reisi valuutasse. Palun arvesta, et reisija kulusid vaadates kuvatakse reisija iga kulu „kulu valuutas“, reisi vaates on saldod esitatud „reisi valuutas“.

MÕNUSAID REISE JA VALUTUT ARVELDAMIST!

DamageReport tiim

Retsensioonid

Retsensioonid teiste tiimi töödele asuvad siin

Logi

22.10.2014 Arutlus idee üle

24.10.2014 Wiki loomine

25.10.2014 TFS ülespanek (kutse õppejõule saadetud)

1.11.2014 Tehtud analüüs meeskonnale E-rent

13.11.2014 Meeskonna koosolek - andmebaasi tabelite läbi vaatamine, vaadete arutamine

23.11.2014 Meeskonna skype koosolek - vaadete kommentaaride läbivaatamine ja muudatuste tegemine

Meie live blogi on koondnud Skype grupivestluseks ja kahetsusväärselt ei kajastu need siin korrektselt. Teen mõned tagantjärgi sisestused

05.12.2014 Kohtusime, et rakenduse ülesehitus kokku leppida. Vaated ja funktsionaalsus (algsega võrreldes veidi kärbitud kujul) läksid lukku. Üheskoos katsetasime kuidas me Visual Studiot kasutama hakkame, kuidas versioonihaldus käima peaks jne. Ülari ütles kuulsa lause "siit edasi köki-möki". Lisaks jagasime ära töölõigud: Lea peale jäi teha reisi lisamisega seotud vaated ning kulude liikidega seonduv, Tiina peale jäi kasutajatega seotud vaated ning Ülari anus endale matemaatikat puudutavat. Tulime talle vastu.

29.12.2014-31.12.204 Ülari aheldas end kolmeks päevaks arvuti külge, et lahendada andmetabelite ja andmete töötlemise matemaatilis-loogilisi probleeme ning neid koodiks kirjutada. Lea oli testija rollis, sest VS-i ja tehnikat üldse me ei usalda. Mitu korda tunnis sai Lea zip faili ja Ülari tagasi kriitikarahe. Igaks õhtuks oli asi parem kui varem. Tiina vaatas hirmunult loengusalvestusi ja skype's toimuvat.

2.01.2015 Meeskonna koosolek - projekti ülevaade. Viidud sisse muudatused tulude jaotamise loogikas (transactions, transaction types), lisatud traveller tabel. Osad vaated puudu. Target - prototüübi kaitsmine 9.01.

7.01.2015 Ülari lammutas päeval viimaste põhiliste matemaatiliste küsimustega, mis olid seotud logi kokkupanemisega. Lea ja Tiina kohtusid õhtul rakenduse igakülgseks testimiseks ja koodi kommenteerimiseks. Kuigi kõik lingid ja nupud töötasid, siis nii mõneski kohas ilmnes vajadus andmeid rohkem kuvada ja ligipääsetavamaks teha. Põhifunksionaalsusest on puudu ainult matemaatika - kuidas reisi lõpus nõudeid-kohustusi jagada, et kõik nulli saaks.

8.01.2014 Istume jälle kolmekesi koolis. Ülari silub vigu, mis Lea ja Tiina eelmine õhtu leidsid. Lea ja Tiina alustavad retsensioonide kirjutamist.

9.01.2014 Prototüüp kommenteerimiseks üleva! Retsensioon ERent prototüübile olemas. Kuna rakendus tundus olevat väga poolik, siis igaks juhuks paneme selle homme uuesti tööle ja vaatame retsensiooni uuesti üle, et ERent tiimile liiga ei teeks. Samuti on üleval nüüd rakenduse kasutusjuhend. Prototüüp kaitstud. M kihi kaotamise ja logi genereerimise kaugusel lõpptoote kaitsmisest.

11.01.2014 E-Rent prototüübi retsensioon üle vaadatud.

14.01.2014 Pizzafy lõpptoote retsensioon sisestatud. Olemas wikis kogu tehniline dokumentatsioon rakendusele.

15.01.2014 Viimased parandused rakendusele - täna on lõpptoote kaitsmine :)