wiki:UseCaseRealizations

UseCaseRealizations

0. Сите

ID 1
Случај на употреба Најава на кориснички профил
  • Се пристапува до почетната страна на апликацијата преку соодветното URL.
  • Се прикажува изгледот кој нуди 3 опции: Најава (како регистриран паркирач), Најава како гостин и Регистрирај се. (слика 1.1).
  • Се внесува емаил адресата и соодветниот пасворд од корисничкиот профил претходно креиран и се притиска на копчето за "Најава".
  • Доколку се работи за корисник кој нема профил, а не сака да се регистрира, во тој случај постои опција за "Најава како гостин" која директно го пушта во системот.
  • Со притискање на копчето за најава преку axios POST повик се праќа барање на /api/login за најава до бекендот.
  • Барањето за најава патува низ филтер chainot каде што е пречекано од нашиот CustomAuthenticationFilter кој од податоците за најава креира authenticationToken кој потоа се предава на authenticationManager да ја потврди точноста на лозинката и емаил адресата кои се наоѓаат во некој од нашите кориснички репозиториуми.
  • Доколку комбинацијата на лозинка и емаил адреса се покаже како валидна CustomAuthentication со повик на методот successfulAuthentication во зависност од типот на корисник кој се логирал ( односно од кој репозиториум се добила потврда за точноста на податоците ) се гради соодветен JsonWebToken кој се праќа до фронтот за авторизација на понатамошни повици до бекендот. Доколку е неуспешна најавата корисникот е вратен на почетната страна со соодветно известување за неуспешната најава.
  • Претходниве чекори 4-6 се идентични за секој тип на корисник освен за Guestot. По успешна најава Workerot и Administratorot се пренасочени на страната со приказ на картички за паркинг зони додека пак Guest и RegisteredUser се пренасочени на мапа со приказ на паркинг зоните и паркинг местата соодветно.


1. Регистриран Паркирач

ID 1
Случај на употреба Регистрација на кориснички профил
  • Се пристапува до почетната страна на апликацијата преку соодветното URL.
  • Се прикажува изгледот кој нуди 3 опции: "Најава" (како регистриран паркирач), "Најава како гостин" и "Регистрирај се". Се кликнува на "Регистрирај се" (слика 1.1)
  • Се отвара форма за регистрација (слика 1.2) со текст полиња во кои треба да се внесат соодветните лични податоци на корисникот за да го креира својот профил на нашата апликација, тоа се: име, презиме, телефонски број, емаил адреса и лозинка.
  • Откако ќе се внесат овие податоци се кликнува на копчето "Регистрирај се".
  • Се испраќа POST барање кое се прифаќа од RegisteredUserController на патеката /registriranParkirac/registration и како @RequestBody се вметнува request-от и се повикува функцијата register од registrationServiceRP која што прима еден аргумент, а тоа е request-от.
  • Во функцијата прво се проверува дали емаилот е валиден, потоа се гради token и се гради мејлот кој треба да се прати на емаил адресата која што корисникот ја навел.
  • Откако ќе се прати мејлот корисникот треба да потврди со кликнување на подвлечениот линкот обоен со сина боја (слика 1.3). Вака се испраќа ново GET барање на патеката /registriranParkirac/registration/confirm со параметар token и се повикува функцијата confirmToken(token) од registrationServiceRP. Во функцијата прво се проверува дали е постоечки токенот, дали веќе постои таа мејл адреса и дали времетрањето на токенот е поминато
  • По поминување на сите овие проверки ќе се постави тој токен со функцијата setConfirmedAtRP(token) од confirmationTokenService и ќе се дозволат привилегиите на регистрираниот паркирач за користење на апликацијата со функцијата enableRegistriranParkirac(confirmationTokenRP.getRegistriranParkirac().getEmail()) од registeredUserService.
  • Корисничкиот профил е успешно креиран и корисникот е редиректиран повторно на почетната страна на апликацијата (слика 1.1) и за да продолжи со користење треба да се најави со емаил адресата и пасвордот од ново креираниот кориснички профил.


слика 1.1


слика 1.2


слика1.3


ID 2
Случај на употреба Пребарување на паркинг место
  • Првично потребно е паркирачот да биде најавен во системот за да може да пребара паркинг зона и паркинг место. (овие чекори се веќе објаснети погоре)
  • Откако успешно ќе се најави паркирачот, му се отвара почетната страна (слика 5.1)
  • Паркирачот може да кликне на хамбургер менито (иконата горе лево) и да му се покажат повеќе опции (почетна го носи на почетната страна, мапа го носи на мапа со паркинг зони и паркинг места, сесија го носи на започнување на сесија, одјави се го одјавува корисникот). Во овој случај паркирачот клика на мапа. (слика 5.2)
  • Се праќа GET барање на патеката /parkingZone и ова барање е пречекано од ParkingZoneController контролерот.
  • Се повикува функцијата getAllParkingZones од сервисниот слој parkingZoneService при што на мапата се покажуваат сите паркинг зони со сите паркинг места соодветно обоени во зелено/црвено доколку се слободни/зафатени. (слика 5.3)
  • Може да се избере конкретна зона за која паркирачот сака да ја провери состојбата со избирање на име на паркинг зона како опција во drop down менито под мапата. (слика 5.4)
  • Откако ќе се избере одредена зона се испраќа GET барање на патеката /parkingZone/{parkingZoneId} каде што parkingZoneId е @PathVariable и претставува ID на паркинг зоната и ова барање е пречекано од ParkingZoneController контролерот.
  • Се повикува функцијата findById(parkingZoneId) од сервисниот слој parkingZoneService и се враќа конкретната паркинг зона со соодветното ИД.
  • Откако ќе се добие паркинг зоната, мапата се фокусира врз нејзиниот центар и се прикажува состојбата на паркинг зоната со преостанати слободни места како и информации за цена од час и работно време на паркинг зоната. (слика 5.5)


слика 5.1


слика 5.2


слика 5.3


слика 5.4


слика 5.5


ID 3
Случај на употреба Паркирање
  • Првично потребно е паркирачот да биде најавен во системот за да може да започне паркинг сесија. (овие чекори се веќе објаснети погоре)
  • Откако успешно ќе се најави паркирачот, му се отвара почетната страна, ова е објаснето погоре. (слика 5.1)
  • Паркирачот може да кликне на хамбургер менито (иконата горе лево) и да му се покажат повеќе опции (почетна го носи на почетната страна, мапа го носи на мапа со паркинг зони и паркинг места, сесија го носи на започнување на сесија, одјави се го одјавува корисникот). Во овој случај паркирачот клика на сесија, ова е објаснето погоре (слика 5.2)
  • Се прикажува поглед за започнување на паркинг сесија. На погледот е прикажано поле за избирање на регистарска таблица како и опција да се додаде регистарска таблица и уште едно поле за избирање на паркинг зона во која ќе го паркира паркирачот своето возило. Исто така има и големо округло дугме "Започни" со кое се започнува паркинг сесија при двојно кликање врз истото копче. (слика 6.1)
  • На копчето "+ Таблица" може да се додаде нова табличка (доколку станува збор за регистриран корисник може да се додадат повеќе таблички, а доколку е guest може само една).
  • Откако ќе се внесе табличка и ќе се кликне на копчето "Сочувај" се праќа PUT барање на патеката /registriranParkirac/{regParkId}/tablici каде што regParkId е @PathVariable и е ID на регистрираниот паркирач, а исто така се праќа Plate plate што е @RequestBody и всушност го претставува објектот регистарска табличка. Ова барање е пречекано од RegisteredUserController. Се повикува функцијата addTablica(regParkId,plate) од сервисниот слој registeredUserService со што се додава регистарската табличка во листа на регистарски таблички на регистрираниот паркирач или како единствена табличка доколку станува збор за guest. (слика 6.2 и слика 6.5)
  • Покрај додавање на регистарска табличка може да се избрише регистарска табличка. Тоа може да се направи доколку од drop drown менито се кликне црвеното копче за бришење што се наоѓа лево од секој број на регистарска табличка. Во позадина се праќа DELETE барање на патеката /registriranParkirac/{regParkId}/tablici/{plate} каде што regParkId е @PathVariable и е ID на регистрираниот паркирач, а plate е @PathVariable и е ID на регистарската табличка. Ова барање е пречекано од RegisteredUserController. Се повикува функцијата deleteTablica(regParkId,plate) од сервисниот слој registeredUserService со што се брише регистарската табличка од листа на регистарски таблички на регистрираниот паркирач или како единствена табличка доколку станува збор за guest. (слика 6.3 и слика 6.4)
  • По додавање и бришење на регистарски таблички, се избира една регистарска табличка и една паркинг зона и со двоен клик се клика на копчето "Започни". Се праќа POST барање на патеката /parkingSession/{parkingZoneName} каде што parkingZoneName е @PathVariable и е име на паркинг зоната, а @RequestParam String tablicka е регистарската табличка на која се однесува започнатата паркинг сесија. Ова барање е пречекано од ParkingSessionController. Се повикува функцијата startParkingSession(tablicka,parkingZoneName) од сервисниот слој parkingSessionService и се започнува паркинг сесија. Со самото креирање на паркинг сесија се зачувува времето на креирање (во конструкторот), како и поставување на статус на паркинг сесијата на STARTED_UNVERIFIED (во конструкторот). (ова е исто така објаснето подолу) (слика 6.6)
  • Откако ќе заврши паркирањето паркирачот може да ја заврши паркинг сесијата со двоен клик на црвеното копче "Заврши". Се испраќа PUT барање на патеката /parkingSession/end. Ова барање е пречекано од ParkingSessionController. Се повикува функцијата endParkingSession() од сервисниот слој parkingSessionService и се завршува паркинг сесија. Се сетира време на завршување на паркинг сесијата како и статус на паркинг сесија преминува во ENDED_UNPAID. (слика 6.6)
  • По завршување на паркинг сесијата потребно е да се плати истата, тоа се прави со кликнување на копчето "Плати" (слика 6.7) при што се отвара прозорец на кој е прикажано вкупното време колку траело паркирањето, вкупната сума која што треба да биде платена за самото паркирање како и опција да се избере соодветниот начин на плаќање (со мобилен или кредитна картичка).
  • Доколку се избере опцијата "Мобилен" плаќањето се извршува преку телефонската сметка од соодветниот оператор на кој што се наоѓа телефонскиот број на паркирачот/guest-от (оваа функционалност не е имплементирана бидејќи е надвор од нашите способности и едноставно правиме некоја симулација) (слика 6.8)
  • Доколку се избере опцијата "Картичка" потребно е дополнително да се впише трансакциската сметка, датумот на истекување на кредитната картичка како и cvv2 код. Датумот на истекување се праќа како @RequestParam(required = false) String expireDate, а cvv2 код не го праќаме бидејќи не знаеме и немаме можност ова да го провериме. (Исто како и за плаќање со мобилен телефон, така и тука оваа функционалност не е имплементирана бидејќи не сме во можност и едноставно правиме некоја симулација.) (слика 6.9)
  • По кликнување на копчето "Плати" се испраќа PUT барање на патеката /parkingSession/pay. Ова барање е пречекано од ParkingSessionController. Се повикува функцијата payParkingSession(expireDate) од сервисниот слој parkingSessionService и се плаќа паркинг сесијата доколку датумот на истекување на картичката е поголем од моменталниот месец, а годината е поголема или иста како и тековната. Се поставува статус на сесијата да е ENDED_PAID. (слика 6.10)


слика 6.1


слика 6.2


слика 6.3


слика 6.4


слика 6.5


слика 6.6


слика 6.7


слика 6.8


слика 6.9


слика 6.10


ID 4
Случај на употреба Ажурирање на кориснички профил
  • Првично потребно е паркирачот да биде најавен во системот за да може да започне паркинг сесија. (овие чекори се веќе објаснети погоре)
  • Откако успешно ќе се најави паркирачот, му се отвара почетната страна (слика 5.1)
  • Паркирачот може да кликне на хамбургер менито (иконата горе лево) и да му се покажат повеќе опции (почетна го носи на почетната страна, мапа го носи на мапа со паркинг зони и паркинг места, сесија го носи на започнување на сесија, одјави се го одјавува корисникот, иконата со силуета и име и презиме на корисникот го носи кон својот профил). Во овој случај паркирачот клика на профилот. (слика 5.2)
  • Се испраќа GET барање на патеката /registriranParkirac/{regParkId} каде што regParkId е @PathVariable и е ID на регистрираниот паркирач и ова барање е пречекано од RegisteredUserController. Се повикува функцијата findById(regParkId) од сервисниот слој registeredUserService и се добиваат информациите за соодветниот регистриран паркирач со соодветното ID. (слика 7.1)
  • За да се променат соодветните атрибути се кликнува на копчето "Уреди" и може да се менуваат: името, презимето, телефонскиот број, мејлот и лозинката. Може да се кликне на "Откажи" за да се откажат промените или "Сочувај" за да се сочуваат промените. (слика 7.2)
  • По кликање на копчето "Сочувај" се испраќа PUT барање на патеката /registriranParkirac/{regParkId} каде што regParkId е @PathVariable и е ID на регистрираниот паркирач, а @RequestBody RegisteredUser regPark е објектот од новиот (ажуриран) профил на паркирачот и ова барање е пречекано од RegisteredUserController. Се повикува функцијата updateRegPark со соодветните параметри од сервисниот слој registeredUserService и по низа проверки се зачувува корисничкиот профил на вработениот и се прикажува порака за успешно ажурирање на податоците. (слика 7.3)


слика 7.1


слика 7.2


слика 7.3


2. Guest

ID 1
Случај на употреба Пребарување на паркинг место
  • Првично потребно е guest да биде продолжи во системот со опцијата "Најава како гостин" на слика 1.1 погоре за да може да пребара паркинг зона и паркинг место. (овие чекори се веќе објаснети погоре)
  • Останатите чекори се идентични како кај регистриран паркирач. (овие чекори се веќе објаснети погоре)
ID 2
Случај на употреба Паркирање
  • Првично потребно е guest да биде продолжи во системот со опцијата "Најава како гостин" на слика 1.1 погоре за да може да пребара паркинг зона и паркинг место. (овие чекори се веќе објаснети погоре)
  • Останатите чекори се идентични како кај регистриран паркирач, само што guest-от не може да додаде повеќе од една регистарска табличка. (овие чекори се веќе објаснети погоре)

3. Вработен

ID 1
Случај на употреба Ажурирање на паркинг места со паркинг сесии
  • Првично потребно е вработениот да биде најавен во системот за да може да ги извршува овие привилегии.
  • Откако успешно ќе се најави се отвара паркинг зоната за која е одговорен вработениот и се листаат сите паркинг сесии за таа паркинг зона. Ова се случува така што се праќа GET барање на патеката /parkingSession/{parkingZoneId} каде што parkingZoneId е @PathVariable и претставува ID на паркинг зоната и ова барање е пречекано од ParkingSessionController контролерот.
  • Се повикува функцијата getAllParkingSessionsFromZone(parkingZoneId) од сервисниот слој parkingSessionService каде што ги враќа сите сесии што не се завршени и платени, односно сесии што го немаат статусот "ENDED_PAID".
  • За појаснување, секоја паркинг сесија може да се наоѓа во 4 состојби:
STARTED_UNVERIFIED - паркинг сесија започната од паркирачот, но вработениот не ја ажурирал во системот со соодветното паркинг место врз основа на паркираното возило (жолта боја).
STARTED_VERIFIED - паркинг сесија на која што вработениот и го ажурирал паркинг местото на кое што се наоѓа паркираното возило (зелена боја).
ENDED_UNPAID - паркинг сесија која што е прекината од паркирачот и времето е завршено (црвена боја).
ENDED_PAID - паркинг сесија која што е платена од страна на паркирачот и е целосно завршена.
  • На сликата 4.1 се наоѓа една паркинг сесија со статус STARTED_UNVERIFIED
  • На сликата 4.2 можеме да забележиме како вработениот ја ажурира паркинг сесијата така што го внесува бројот на паркинг местото на кое што е паркирано возилото на тој паркирач со соодветна регистарска табличка и ја кликнува зелената стрелка десно.
  • Ова се случува со праќање на PUT барање на патеката /parkingSession/verify/{parkingSessionId} каде што parkingSessionId е @PathVariable односно ID на паркинг сесијата, дополнително се праќа и името(бројот) на паркинг местото како параметар @RequestParam String parkingSpaceName, ова барање е пречекано од ParkingSessionController контролерот.
  • Потоа се повикува функцијата verifyParkingSession(parkingSessionId,parkingSpaceName), од сервисниот слој parkingSessionService, каде по проверка дали постои таква сесија идали веќе и е сменет статусот и дали паркинг местото е валидно, се менува статусот на паркинг сесијата во STARTED_VERIFIED и се означува дека паркинг местото е зафатено. слика 4.3
  • Откако корисникот ќе ја заврши сесијата, таа преминува во црвена боја и и се меннува статусот во ENDED_UNPAID и тоа може да се забележи на сликата 4.4
  • Откако корисникот ќе ја плати сесијата (зависно со кредитна картичка или мобилен телефон) таа преминува во статусот ENDED_PAID и соодветно исчезнува од активни сесии за паркинг зоната. слика 4.5
  • Исто така може да се забележат и статистичките податоци кои цело време се менуваат во зависност од состојбите во кои се наоѓаат и во кои преминуваат паркинг сесиите, а тие сe: слободни паркинг места, зафатени паркинг места, активни паркинг сесии, завршени паркинг сесии и неактивни паркинг сесии.


слика 4.1


слика 4.2


слика 4.3


слика 4.4


слика 4.5


4. Administrator

ID 1
Случај на употреба Додавање на нов вработен
  • Првично потребно е администраторот да биде најавен во системот за да може да ги извршува овие привилегии.
  • Откако успешно ќе се најави се кликнува иконата со 2 силуети што се наоѓа лево на странично мени и се прикажува листа на вработени со опција за пребарување, додавање на нов вработен и менување на статус на акаунтот.
  • Се клика на копчето Додади Вработен горе десно(слика 2.1)
  • Се прикажува форма за внес (слика 2.2) со повеќе информации за вработениот, тие се: име, презиме, емаил адреса, телефон, лозинка, потврди лозинка, одговорен за (се избираат зони за кои е одговорен), работен статус на вработениот (работи, не работи, на боледување, на одмор) и состојба на акаунтот (активен/неактивен).
  • По внесување на информациите се кликнува на копчето "Создади Вработен" доле десно.
  • Вака се праќа POST барање на патеката /vraboten и барањето е пречекано од WorkerController и во барањето е ставено @RequestBody од AddUpdateWorker vraboten кој што е изграден од сите внесени информации од претходната форма.
  • Потоа се повикува функцијата addWorker од workerService и му се предаваат сите атрибути од vraboten објектот.
  • Во функцијата се врши проверка дали веќе постои таков вработен со истиот мејл, доколку не станува збор за тоа се проверуваат сите останати атрибути, се поставува статусот на вработениот, се поставува за кои зони е одговорен и се зачувува во workerRepository со функцијата save што го прима новосоздадениот вработен кој всушност се зачувува и во базата на податоци.
  • Потоа следи редиректирање повторно кон страната со листа на сите вработени (слика 2.3)
  • Доколку сака администраторот да го деактивира акаунтот се кликнува на зеленото копче "Активен" и ќе стане "Неактивен" со црвена боја и обратно, соодветно се појавува и нотификација за активноста што била направена од страна на администраторот (слика 2.4)
  • Ова во позадина се одвива на следниот начин: се праќа PUT барање на патеката /vraboten/{vrabotenId} со @PathVariable vrabotenId што го претставува ID на вработениот и ова барање се пречекува исто така од WorkerController и се повикува функцијата lockWorkerAcc(vrabotenId) од сервисниот слој workerService.
  • Во функцијата се прави toggle на статусот како што е наведено горе и пред тоа се прави проверка дали воопшто постои вработен со соодветниот ID.


слика 2.1


слика 2.2


слика2.3


слика2.4


ID 2
Случај на употреба Едитирање на веќе постоечки вработен
  • Првично потребно е администраторот да биде најавен во системот за да може да ги извршува овие привилегии.
  • Администраторот го кликнува редот од табелата од листата на вработени за соодветниот вработен за кој сака да го ажурира неговиот профил (слика 2.1)
  • Потоа се прикажува формата на вработениот со неговите податоци со кои е регистриран во системот (слика 2.2)
  • Администратор соодветно ги менува оние податоци за кои сака да му го ажурира профилот на вработениот и може оваа активност да ја откаже со клик на копчето "Врати се назад" доле лево или да ја потврди активноста со клик на копчето "Создади вработен"
  • По кликнување на копчето "Создади вработен" се праќа PUT барање на патеката /vraboten/{vrabotenId} каде што {vrabotenId} претставува @PathVariable и е ID на вработениот и ова барање се пречекува од WorkerController, а дополнително се праќа и @RequestBody AddUpdateWorker vraboten.
  • Потоа се повикува функцијата updateWorker од сервисниот слој workerService на кој како параметри се праќаат сите атрибути од vraboten.
  • Во функцијата се врши проверка дали веќе постои таков мејл кај некој друг вработен, доколку не станува збор за тоа се проверуваат сите останати атрибути, се поставува статусот на вработениот, се поставува за кои зони е одговорен и се зачувува во workerRepository со функцијата save што го прима ажурираниот вработен кој всушност се зачувува и во базата на податоци.
  • Соодветно пак ќе биде редиректиран кон листата на вработени (слика 2.1)


ID 3
Случај на употреба Додавање и ажурирање на паркинг зона
  • Првично потребно е администраторот да биде најавен во системот за да може да ги извршува овие привилегии.
  • Откако успешно ќе се најави се кликнува иконата со 4 правоаголничиња што се наоѓа лево горе на страничното мени.
    Се праќа GET барање на патеката /parkingZone и ова барање се пречекува од ParkingZoneController и се повикува функцијата getAllParkingZones од сервисниот слој parkingZoneService при што се прикажуваат картички со постоечките паркинг зони, како и опција за сортирање на истите и опција за додавање на нова паркинг зона. (слика 3.1)
  • Се кликнува на белиот правоаголник со зелен плус за додавање на паркинг зона со внесување на називот на зоната (слика 3.2) и се кликнува на зеленото копче "Креирај зона".
  • Се праќа POST барање на патеката /parkingZoneName со @RequestBody String name што е името на зоната и ова барање исто така се пречекува од ParkingZoneController и се повикува функцијата addParkingZoneNameOnly(name) од сервисниот слој parkingZoneService и на овој начин се креира празна паркинг зона само со име и како таква се зачувува во базата.
  • Се прикажуваат повторно сите паркинг зони заедно со ново додадената, исто како втората точка погоре (слика 3.3)
  • Се кликнува картичката што ја претставува ново додадената паркинг зона за да може да се ажурираат податоците за истата. Се испраќа GET барање на патеката /parkingZone/{parkingZoneId} каде што parkingZoneId е @PathVariable односно ID на паркинг зоната и се прикажува соодветно формата за едитирање за таа паркинг зона(слика 3.4)
  • Се пополнуваат соодветните информации за зоната а тоа се: назив, цена од час, работни часови, боја на зона, темиња на центар на зона (објект од класа Location со атрибути латитуда и лонгитуда), темиња на зона (повеќе точки со латитуда и лонгитуда што ги претставуваат граничните точки на зоната), потоа се додаваат одговорни лица од листа на сите вработени, секако доколку постојат и потоа се додаваат паркинг местатa (латитуда, лонгитуда и број на паркинг место). (слика 3.9)
    ParkingZoneLocation е класа што содржи центар на зона (објект од класа Location) и темиња на зона (листа од објекти од класа Location).
  • При клик на копчето зачувај промени се прикажува прозорец за да ја потврдиме/откажеме нашата активност, соодветно кликнуваме на копчето "Да" (слика 3.6). Вака се праќа PUT барање на патеката /parkingZone/{parkingZoneId} каде што parkingZoneId е @PathVariable и е ID на паркинг зоната, а @RequestBody ParkingZoneAdminView parkingZone е новиот-ажуриран објект од паркинг зоната.
    Барањето секако се пречекува од контролерот ParkingZoneController и се повикува функцијата updateParkingZone од сервисниот слој parkingZoneService каде како параметри се предаваат сите атрибути од објектот parkingZone кој е изграден од сите информации кои претходно ги внесовме.
  • По успешно создавање на паркинг зоната се редиректира администраторот назад кон листа од сите паркинг зони и се прикажува ново ажурираната паркинг зона, всушност се прави истиот повик како кај точка 2 (слика 3.7)
  • Доколку сакаме да ја видиме паркинг зоната на мапата тогаш може да се кликне копчето со слика на мапа и да се отвори google maps со исцртаната зона во онаа боја во која што сме избрале (на сликата е црвена), заедно со сите паркинг места во зоната (обоени соодветно со зелено/црвено доколку се слободни/зафатени) (слика 3.8)


слика 3.1


слика 3.2


слика 3.3


слика 3.4


слика 3.5


слика 3.6


слика 3.7


слика 3.8


слика 3.9


5. Систем

ID 1
Функционалност Приказ на мапа
  • Прикажува мапа со означени паркинг зони како и паркинг места во самите зони кои се соодветно означени во зависност од тоа дали се зафатени или не. Ова е достапно за секој тип на корисник.


ID 2
Функционалност Приказ на состојби на паркинг зони
  • За Вработен и Администратор нуди приказ на моменталната состојба на паркинг зоните како вкупен број на места, зафатени места, слободни места.
  • Дополнително секој Вработен има преглед и на тековните паркинг сесии односно време кога се започнати, време кога се завршени (доколку се завршени), паркинг место на кое се одвива сесијата, како и регистарската табличка за која е сесијата.


Last modified 2 years ago Last modified on 02/13/22 12:27:14

Attachments (39)

Note: See TracWiki for help on using the wiki.