Facultatea de Automatică Automatică și Calculatoare Departamentul de Automatică Automatică și Informatică Aplicată
APLI APLICA CAȚIE SOFT SOFTW WARE PENT PENTRU RU UN SERVICE AUTO Lucrar Lucraree de de lice licen n ță
Absolvent: Fărău Lucian Mihai
Coordon Coordonator ator știin tiințific: Ș.l.dr.in .l.dr.ing. g.
Cristi Cristian an VA VAȘA
!IMI !IMIȘ"AA "AA #$%& #$%&
Cuprins %
Introduc Introducere... ere......... ............. .............. .............. ............. ............. .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ................... .................% ....% %.% Conte't. Conte't........ .............. .............. ............. ............. .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ............. ........................% .................% %.#
# *
!ema lucrării de licență.....................................................................................................#
Anali(a Anali(a stadiulu stadiuluii actual )n domeniul domeniul problemei problemei....... .............. .............. ............. ............. .............. .............. ...................... ......................* .......* +a(ele teoretice teoretice....... .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ............. .............. .............. ............. ............. ................ ............, ..., *.% *.#
-latforma -latforma ./!........ ./!............... .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ............. ................... ........................, ............, /! Frame0or1. Frame0or1........ ............. ............. .............. .............. ............. ............. .............. .............. ............. ............. .............. ............. ............. .............. .............. ..........2 ...2
*.* *., *.2 *.&
Argumen Argumente te pentru pentru ./!........ ./!............... ............. ............. .............. ............. ............. .............. .............. ............. ............. .............. .............. ..................2 ...........2 Limba3ul Limba3ul C4.......... C4................. ............. ............. .............. .............. ............. ............. .............. ............. ............. .............. .............. ........................ ...........................& ..........& A5- .et. Conceptul Conceptul Model6Vi Model6Vie06Co e06Contro ntroller ller 7MVC8....... 7MVC8.............. ............. ............. .............. .............. ............. .............& .......& Arhitectu Arhitectura ra n6!ier n6!ier....... ............. ............. .............. ............. ............. .............. .............. ............. ............. .............. .............. ............. ............. .............. ................9 .........9
*. *.9
Implement Implementarea area modelulu modeluluii pe trei trei straturi straturi )n trasabili trasabilitate... tate......... ............. .............. .................... ...........................; ..............; Lin<...... Lin<............. .............. ............. ............. .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ................. .............................% ..................%%%
*.;
Microsoft Microsoft 5=L 5erver..... 5erver........... ............. .............. ............. ............. .............. .............. ............. ............. .............. .............. ............... ......................%# ..............%#
*.%$ Microsoft Microsoft A(ure.... A(ure........... ............. ............. .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ............. ................%, .........%, , 5oluția propusă ......................................................................................................................%& ,.% Arhitectura apl aplicației.......................................................................................................%
2
,.# ,.*
5tratul 5tratul ba(ei de date....... date.............. .............. ............. ............. .............. .............. ............. ............. .............. .............. ............. ..................... .......................%9 ........%9 5tratul 5tratul logic...... logic............ ............. .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ............. .............. ........................#$ .................#$
,.,
5trat >I.......... >I................. .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ............. .............. .............. ............. ...................*9 .............*9
Manual Manual de utili(are. utili(are....... ............. .............. ............. ............. .............. .............. ............. ............. .............. ............. ............. .............. ......................... ........................*; ......*; 2.% Administ Administrato rator...... r............ ............. .............. ............. ............. .............. .............. ............. ............. .............. .............. ............. ................ ............................*; ..................*;
2.# Client.... Client........... .............. .............. ............. ............. .............. ............. ............. .............. .............. ............. ............. .............. .............. ............. ............. ......................, ...............,,, & Conc Conclu lu(i (ii? i? cont contri ribu buții și dire direcc ții de cont contin inua uare re a de(v de(vol oltă tări riii ..................................................2% +ibliografie....................................................................................................................................2# Lista figurilor.................................................................................................................................2*
1 Introducere 11 Conte!t @n conte' conte'tul tul actual actual de cre creștere a cererii cererii pentru pentru servicii servicii calitat calitative ive de de repara repara ție și mentenan mentenanță a autom automobi obilel lelor or?? apare apare necesi necesitat tatea ea de(vol de(voltăr tării ii unei unei aplica aplicații soft0a soft0are re ce poate poate gesti gestiona ona și monito mon itori( ri(aa activita activitatea tea ce are loc )n cadrul cadrul unei servic servicee auto auto și să facili facilite( te(ee )n acela acela și timp programarea clienților pentru opera opera țiunile de reparație și mentenanță. Internetul a devenit? )n (ilele noastre? indispensabil. Aceasta a avut parte? )n ultimi anii? de o evolu evoluție e'ponen e'ponențială datora datorată tă noilor noilor tehnol tehnologii ogii și a dispo(it dispo(itivelo ivelorr de acces. acces. Aceast Aceastaa evolu ție constă constă att att )n creșterea numărulu număruluii de de utili( utili(atori atori?? ct și )n )n cre creșterea terea numărul numărului ui de servi servicii cii și op op țiuni oferite prin intermediul internetului. internetului. Astfel Astfel?? o aplica aplicații soft0 soft0are are dedicat dedicatăă unu unuii servic servicee auto auto ce poate poate să ofere ofere posibi posibilit litate ateaa clientulu clientuluii de a reali(a reali(a progr programări amăriii online online și de a verif verifica ica progre progresul sul opera opera țiunilor iunilor de de repara repara ție și mentenan mentenanță )n timp real 7supraveg 7supraveghere here video video a activității )n timp real de către client8 client8 aduce aduce un real beneficiu beneficiu att att pentru pentru de de ținătorului service6ului ct și clientului. clientului. -entru a acoperii toate cernitele de gestionare ce apar la nivelul unui service auto o aplica aplicație soft0are soft0are trebuie trebuie să permită o coordona coordonare re eficienta a aprovi(i aprovi(ionări onăriii fiecărui fiecărui punct de retail? prin urmărirea flu'ului flu'ului operativ la nivelul nivelul )ntregii organi(a organi(a ții. Aplica Aplicația trebui trebuiee să aibă o structu structura ra modul modulara ara și fle'ibi fle'ibila? la? și să permit permit integra integrarea rea comple'ă comple'ă a datelor datelor )n cadrul unui singur singur sistem. @nregist @nregistrarea rarea rapidă rapidă și e'actă a datelor datelor poate permite reali(area )n orice orice moment de raportări? raportări? statistici? anali(e și urmărirea pe centre de cost si si profit a activității? toate acestea fiind necesare pentru constituirea suportului suportului informa țional? )n scopul adoptării celor mai eficiente deci(ii manageriale )n timp real. Aplicația soft0are pentru un service service auto trebuie să urmărească )ntreaga activitate activitate legată de serviciile serviciile post6v post6vn(are? n(are? service service și piese de schimb? schimb? stocuri? stocuri? stocuri stocuri de siguran siguran ța? comen(i clienți? comen(i furni(ori? furni(ori? etc. precum și reflectarea )ntregului flu' operativ operativ )n contabilitate.
%.
1" Te#a luc lucră rări riii de de lic liceen ță !ema !ema lucrării lucrării de licență constă )n implementa implementarea rea unei aplica aplicații soft0are soft0are care să permită permită eficienti(area flu'ului flu'ului operativ a unui service auto auto prin gestionarea și monitori(area monitori(area activită activită ții ce se desfă desfășoară )ntr6u )ntr6unn service service auto. auto. -rocesul de gestionare gestionare și monitori(are monitori(are constă )n managementul managementul datelor ce au legătură cu clienții? autovehiculele autovehiculele acestora și cu programarea programarea )n service a autovehiculelor autovehiculelor pentru opera ții de de repara reparație și mentenan mentenanță. !ot !otodat odatăă pentru pentru o monit monitori( ori(are are complet completăă se impune impune crearea crearea unei unei solu solu ții ce oferă suport pentru supravegherea supravegherea video a activită ții ce are loc )n cadrul service6ului. Aplicația trebuie să fie accesibilă de oriunde oriunde din lume att pentru pentru administratorul administratorul service6 ului auto auto ct și pentru pentru client. client. Astfel Astfel aplica aplicația pentru pentru service6u service6ull auto trebuie trebuie să fie fie o aplica ție 0eb ce este e'pusă pe internet internet și poate fi accesată de pe o gamă largă de dispo(itive dispo(itive 7calculat 7calculatoare? oare? tablete? telefoane.8. -entr -entruu a pute puteaa fi accesa accesată tă de pe o gamă gamă ct ct ma maii larg largăă de disp dispo( o(it itiv ive? e? inte interf rfaa ța cu utili(ato utili(atorul rul a aplicației trebuie trebuie să fie o interfa interfa ță grafică adaptab adaptabilă. ilă. " interfa interfa ță grafică adaptabi adaptabilă lă este capabilă capabilă să se pre(inte pre(inte )n moduri moduri diferite diferite )n func ție de dimensiu dimensiunea nea ecranului ecranului din cadrul dispo(itivului dispo(itivului cu a3utorul a3utorul căruia este este accesată aplica ția. -entru -entru notificarea notificarea ct mai rapidă rapidă a clienților )n momentul momentul )n care are loc o schimbare schimbare )n progresul operațiunilor? aplica ția implementată se folose ște de un serviciu e'tern de email. Clientul este notificat )n timp real )n momentul )n care apare o schimbare ce are legătură cu autovehiculul său. -rin implemen implementarea tarea specific specificaațiilor iilor menționate ionate mai sus aplica aplicația soft0are soft0are pentru pentru service6u service6uri ri auto auto aduce aduce o reală reală )mbu )mbunăt nătăățire a rela relației dint dintre re clien clientt și servic servicee precum precum și o )mbun )mbunătă ătățire a gestionării și monitori(ării monitori(ării activită ții ce are loc loc )ntr6un )ntr6un service. !otod !otodată ată?? aplica aplicația trebui trebuiee să fie scalabi scalabilă lă și pentru pentru clien clienții care care nu ) și fac progra programăr mării onlin online? e? astfel astfel ingin ingineru erull de servic servicee 7admin 7administ istrat ratoru orull aplica aplica ției8 iei8 pe lngă lngă capabi capabilit litate ateaa de a administra orice programare făcută direct de către client online? acesta poate să adauge utili(atori și programări și pentru
un client offline.
#.
" Anali$a stadiului actual %n do#eniul pro&le#ei Anali(nd activitatea curentă a unor service6uri auto s6a constatat apari ția unor probleme operative de administrare? care cer a fi re(olvate )n așa fel )nct să corespundă scopului reali(ării unei eficiente ma'ime și eliminării tuturor situațiilor conflictuale legate de calitatea serviciilor puse la dispo(iția clienților. -rintre probleme operative de administrare cele mai frecvent constatate au fost lipsa: evidenței clienților și a autovehiculelor acestoraB istoricului complet al opera țiilor de repara ție și mentenanțăB evidenței programării opera țiilor de repara ție și mentenanță pe bo'e? pe (ile și ore accesul global la supravegherea videoB evidenței de eliberare și retur piese din maga(ie la mecanicB evidenței manoperei pentru fiecare mecanicB evidenței tarifelor orare manoperă diferențiate pe tipuri de autovehiculeB rapoartelor de eficiență. Aplicația soft0are implementată ) și propune să re(olve primele patru probleme operative • • • • • • • •
urmnd ca pe viitor și restul problemelor operative să fie re(olvate prin continuarea de(voltării aplicației. Aplicația oferă service6ului posibilitatea de a prelua elegant și u șor pe calculator toate comen(ile primite )ntr6un service auto pentru activitatea de repara ții și )ntre ținere efectuate pentru clienți noi dar și cei vechi. Aceste comen(i se e'ecută pentru orice tip de autoturism )nregistrat )n sistem și validat de către inginerul de service. -rin preluarea comen(ilor lansate )n e'ecuție se urmărește simplificarea muncii conducătorilor de ateliere și echipe? datorita faptului ca toate calculele referitoare la valoarea comen(ii? a manoperei cuvenite echipelor de lucru si centrali(ările care se fac la sfrșit de perioada de prelucrare sunt )nregistrare )n sistem. Clientul are posibilitatea de a vi(uali(a tot procesul de repara ție sau )ntreținere? online? cu a3utorul unui modul de camere de supraveghere? acest lucru oferind clientului un plus de siguran ță și confort.
*.
' (a$ele teoretice '1 Plat)or#a NET -latforma ./! este un cadru 7Frame0or18 de de(voltare soft0are unitară care permite reali(area? distribuirea și rularea att a aplicațiilor des1top indo0s? smartphone indo0s ct și a aplicațiilor /+. !ehnologia ./! pune )mpreună mai multe tehnologii 7A5-? ML? ""-? 5"A-? D5L? >DDI? -F? LI=8 ș i limba3e de programare 7V+? CEE? C4? F48? asigurnd totodată att portabilitatea codului compilat )ntre diferite calculatoare cu sistem indo0s? ct și reutili(area codului )n programe? indiferent de limba3ul de programare utili(at. ./! Frame0or1 este o componentă livrată )mpreună cu sistemul de operare indo0s. 7rime ș? #$$#8 -entru a de(volta aplicații pe platforma ./! este bine să avem * componente esențiale: •
un set de limba3e 7C4? Visual +asic ./!? G4? Managed CEE? 5malltal1? -erl? Fortran? Cobol? Lisp? -ascal etc8?
•
un set de medii de de(voltare 7Visual 5tudio ./!? +lend8?
•
o bibliotecă de clase pentru crearea serviciilor eb? aplicațiilor eb și aplicațiilor des1top indo0s. Când dezvoltăm aplicaț ii .NET, putem utiliza:
•
servere speciali(ate 6 un set de servere /nterprise ./! 7din familia 5=L 5erver #$$9? /'change #$$$ etc.8? care pun la dispo(i ție funcții de stocare a ba(elor de date? email? aplicații +#+ 7+ussiness to +ussiness H comer ț electronic )ntre partenerii unei afaceri8.
•
servicii eb 7)n special comerciale8? utile )n aplicații care necesită identificarea utili(atorilor 7de e'emplu? ./! -assport 6 un mod de autentificare folosind un singur nume și o parolă pentru toate site6urile vi(itate8
•
servicii incluse pentru dispo(itive non6-C 7-oc1et -C -hone /dition? 5martphone? !ablet -C? 5mart Displa? +o'? set6top bo'es? etc.8
,.
'" NET Fra#e*or+ Componenta ./! Frame0or1? a3unsă astă(i la versiunea ,.2 stă la ba(a tehnologiei ./!? este ultima interfață )ntre aplicațiile ./! și sistemul de operare și actualmente conține limba3ele C4? V+./!? CEE și odată cu versiunea #$%$? introduce noul limba3 F4. -entru a fi integrate )n platforma ./! toate aceste limba3e respectă specifica ții ""-? numite Common !pe 5stem 7C!58. /le au ca elemente de ba(ă: clase? interfețe? delegări? tipuri valoare și referință? iar ca mecanisme: moștenire? polimorfism și tratarea e'cepțiilor. -latforma comună de e'ecutare a programelor numită Common Language untime 7CL8? utili(ată de toate cele , limba3e. C!5 face parte din CL. Ansamblul de biblioteci necesare )n reali(area aplicațiilor des1top sau eb? se nume ște Frame0or1 Class Librar 7FCL8. 7iJă? #$$98 Componenta ./! Frame0or1 este formată din compilatoare? biblioteci
și
alte
e'ecutabile utile )n rularea aplicațiilor ./!
'' Ar,u#ente pentru NET @n primul rnd pentru că oferă instrumente pe care le putem folosi și )n alte programe? oferă acces ușor la ba(e de date? permite reali(area desenelor sau a altor elemente grafice. 5pațiul de nume 5stem.indo0s.Forms conține instrumente 7controale8 ce permit implementarea elementelor interfeței grafice cu utili(atorul. Folosind aceste controale? se pot proiecta și de(volta rapid și interactiv? elementele interfeței grafice. !ot ./! oferă clase care efectuea(ă ma3oritatea sarcinilor u(uale cu care se confruntă programele și care plictisesc și fură timpul programatorilor? reducnd astfel timpul necesar de(voltării aplicațiilor. Microsoft Visual 5tudio este un mediu de de(voltare integrat 7ID/8 de la Microsoft. Acesta poate fi utili(at pentru a construi aplica ții consolă? interfa ța grafică? aplicații de tip indo0s Forms? site6uri 0eb? aplica ții 0eb? servicii 0eb ce sunt suportate platformele: Microsoft indo0s? indo0s Mobile? indo0s C/?. /! Frame0or1?. /! Compact Frame0or1 și Microsoft 5ilverlight.
2.
'- Li#&a.ul C/ Limba3ul C4 fost de(voltat de o echipă restrnsă de ingineri de la Microsoft? echipă din care s6a evidențiat Anders Ke3lsberg 7autorul limba3ului !urbo -ascal și membru al echipei care a proiectat +orland Delphi8. C4 este un limba3 simplu? cu circa 9$ de cuvinte cheie? și %# tipuri de date predefinite. /l permite programarea structurată? modulară și orientată obiectual? conform perceptelor moderne ale programării profesioniste. -rincipiile de ba(ă ale programării pe obiecte 7ICA-5>LA/? M"Ș!/I/? -"LIM"FI5M8 sunt elemente fundamentale ale programării C4. @n mare? limba3ul moștenește sinta'a și principiile de programare din CEE. 5unt o serie de tipuri noi de date sau func țiuni diferite ale datelor din CEE? iar )n spiritul reali(ării unor secven țe de cod sigure 7safe8? unele funcțiuni au fost adăugate 7de e'emplu? interfe țe și delegări8? diversificate 7tipul struct8? modificate 7tipul string8 sau chiar eliminate 7mo ștenirea multiplă și pointerii către func ții8. >nele funcțiuni 7cum ar fi accesul direct la memorie folosind pointeri8 au fost păstrate? dar secven țele de cod corespun(ătoare se consideră nesigure. 7Kaertle? #$$;8
'0 ASP Net Conceptul odel2Vie*2Controller 3VC4 Conceptul de design Model6Vie06Controller? )n documenta ția de specialitate folosit și sub forma scurtă de MVC? a apărut ca o necesitate de a transpune metodele tradiționale de gestionare a datelor )n mediul virtual? mai e'act a apărut )n scopul de a uNura modul de lucru al utili(atorilor respectnd aceleași principii de ba(ă și diferențiind prin instrumentele folosite. MVC a fost mai )nti )ntlnit la limba3ul 5malltal1 dar a fost folosit pe scară largă ani mul ți de6a rndul suferind mai multe redefiniri. !otu și principiile de ba(a ale conceptului sunt u șor de )nțeles? )n schimb detalierile sunt )ndea3uns de comple'e )nct să lanse(e multe de(bateri și să se )ntlnească implementări contradictorii. 7Microsoft? #$%&8
&.
-rincipiul care stă la ba(a conceptului Model6Vie06Controller este )mpăr țirea responsabilităților. @ntr6o aplica ție creată astfel )nct să respecte acest concept? partea de model va lucra doar cu starea aplicației și cu logica ei? nu va conta cum este sau va fi repre(entată această stare către utili(ator sau cum interacționea(ă acesta cu aplicația. !ot așa? partea de vie0? este preocupată doar cu crearea interfeței utili(ator )n func ție de datele și mai ales a schimbărilor stărilor acesteia? recepționate de la model. -entru ea nu contea(ă logica aplicației sau cum are loc procesul de input? ci doar repre(entarea ct mai corectă a stării curente a modelului.
Și
)n final?
controller6ul se ocupă cum translatarea ac țiunilor prestate de utili(ator )n update6uri către model? nefiind important la ce va folosi modelul aceste update6uri. Acționarea utili(atorului? modelarea lumii reale? și răspunsul vi(ual al sistemului către utili(ator sunt separate și controlate de obiectele model? vie0port și controller. " vedere pe scurt a ordinii sub care are loc comunicarea )ntre obiecte se poate face astfel: controller6ul interpretea(ă semnalele introduse cu a3utorul Mouse6ului Ni al tastaturii de către utili(ator și furni(ea(ă mai departe 7ca re(ultat8 niște comen(i care sunt trimise către model sauOvie0port pentru a se putea efectua schimbările necesare. Modelul gestionea(ă unul? sau mai multe? elemente ale unei surse de date? furni(nd att un răspuns cu situa ția? starea? e'actă a sistemului? ct Ni posibilitatea de a schimba această stare. Și nu )n ultimul rnd vie0port6ul este partea vi(uală pentru utili(ator a aplica ției? este gestionarul modului sub care sunt pre(entate datele utili(atorului utili(nd totodată o parte grafică NiOsau o vi(uali(are sub formă doar de te't. Model6ul este utili(at la organi(area informației și anunțarea cnd aceasta se modifică. /l conține doar date și funcționalități care sunt legate printr6un scop comun. Dacă ar fi fost ca(ul de a modela date din două grupuri care nu sunt legate intre ele? s6ar fi creat două modele separate. >n model va conține mai mult dect date și funcții care operea(ă pe aceste date. 5copul unui model este de a reali(a o apro'imare? sau abstracti(are? )n mediul informa țional al unor procese sau sisteme din lumea reală. /l nu trebuie să se limite(e la a captura starea unui proces sau sistem? ci chiar la cum acel sistem funcționea(ă? ceea ce face foarte ușoară folosirea modelării din lumea reală la definirea propriilor sisteme.
.
Vie06ul este responsabil de legarea elementelor grafice unui element hard0are. De obicei un vie0 are o coresponden ță unu6la6unu cu suprafa ța unui displa P și știe cum să o folosească. De fapt un vie0 se leagă de un model Ni ne )nfățișea(ă conținutul lui pe un displa? chiar mai mult? cnd modelul se va modifica? vie06ul )n mod automat va redesena partea afectată a imaginii pentru a se vedea acele schimbări. 5e pot adăuga mai multe modele de vie0 la același model? Ni fiecare din aceste vie06uri redau bucăți din model pe displa6uri diferite. 7Microsoft? #$%&8 5epararea codului ce stă la ba(a unei aplicații )n cele trei componente ale conceptului MVC aduce următoarele beneficii directe:
•
permite mai multe repre(entări 7vie0s8 ale aceeași informații 7model8 permite interfețelor utili(ator 7vie0s8 să fie u șor adăugate? )nlăturate sau modificate? )n
•
ambele fa(e? compilare sauOși e'ecuție permite ușoara modificare a răspunsurilor la input6urile utili(atorului 7controller8 att )n
•
timpul compilării ct și )n timpul e'ecu ției promovea(ă reutili(area 7/'emplu: o vi(uali(are 7vie08 poate fi folosită )mpreună cu
•
modele diferite8 permite mai multor de(voltatei să actuali(e(e simultan interfața? logica sau input6ul
•
•
unei aplicații fără a afecta celălalt cod sursă a3ută de(olatorii să se oriente(e? la un moment dat? doar pe un singur aspect al aplica ției
'5 Ar6itectura n2Tier !oate aplicațiile de afaceri de a(i au accesul la ba(ele de date integrată )n funcționalitățile de ba(ă. "dată cu creșterea )n popularitate a serverelor de ba(ă relaționale? care a )nceput cu apro'imativ #2 de ani )n urmă? și industria s6a mutat de la modelul pe un nivel 6 one tier 7mainframe8 la un model client server construit pe două nivele. Aceste doua nivele? erau formate din nivelul client construit pe interfa ța client și ma3oritatea regulilor de validare și nivelul server ce conferea accesul la date? vederi? funcții și proceduri stocate precum și reguli de validare la nivel de server. La )nceputul anilor ;$? acest model s6a rupt )n două și a creat un altul nou? ce se ba(ea(ă pe trei straturi: -resentation Laer? +ussiness Laer si Data Access Laer. 9.
'7 I#ple#entarea #odelului pe trei straturi %n trasa&ilitate !oate proiectele ce constituie soluția de trasabilitate sunt construite avnd la ba(ă modelul de aplicație ba(ată pe trei straturi: nivelul de acces la date? nivelul logic și nivelul de pre(entare 7nivel utili(ator8.
'71 Startul &a$ei de date 5tratul ba(ei de date sau Data Access Laer 7DAL8 este o parte integrantă )n proiectarea oricărei aplicații. Acest strat se ocupă de conectarea la ba(ele de date și implementarea operațiilor de tip C>D 7Create 6 Creare? ead 6 Citire? >pdate 6 /ditare și Delete 6 Ștergere8. Cea de6a doua tehnologie folosită AD" /ntit Frame0or1 este solu ția "M 7"b3ect elational Mapping8 oferită de Microsoft. 7Microsoft? #$%&8
Figură 1. Structura ADO Entity Framework (Lerman, 2010)
La ba(a /ntit Frame0or16ului stă /ntit Data Model 7/DM8. Aceasta se vrea a fi limba3ul comun )ntre structurile de date și modelele de pre(entare. /DM6ul define ște un limba3 menit să descrie datele fără să trebuiască să descrie modul de stocare a acestuia. Deasupra /DM6 ului lucrea(ă un set de servicii care permit manipularea datelor? spre beneficiul )ntregii aplica ții. /DM6ul )nglobea(ă un set de metadate care descriu att modul )n care datele sunt e'puse ;.
aplicației ct și modul )n care datele sunt mapate )n stocul de proveniență. /DM6ul oferă un mecanism de e'punere a datelor )ntr6un model optimi(at pentru consumatori? )n timp ce modelele de mapare sunt optimi(ate )n vederea libertății de a folosi orice fel de structură de date standard. Astfel obținem un mediu )n care nivelul de pre(entare este independent de nivelul de date? ceea ce oferă fle'ibilitate )n e'primarea aplicației. -entru a asigura fle'ibilitate la nivelul structurilor de date /DM6 ul oferă o gamă variată de mapări disponibile standard.
'7" Stratul lo,ic 5tratul logic sau +ussiness Laer este nivelul aplicației care coordonea(ă aplicația? procesea(ă comen(ile primite de la utili(atori și ia deci(ii logice de evaluare și calcul. Aici sunt implementate reguli de validare la nivel de aplicație. Acest strat se ocupă cu transferul și procesarea datelor )ntre cele două straturi care )l )ncadrea(ă. 5copul de a separa logica este dublu. -e deoparte este c știgul de performan ță ob ținut prin lăsarea serverului de date să se ocupe strict de stocarea și e'tragerea datelor? iar de cealaltă parte? ușurăm mentenanța și sporim posibilitatea reutili(ării codului.
'7' Stratul UI 5tratul >I sau -resentation Laer este cunoscut )ntr6o structură pe n straturi ca fiind stratul clientului. /ste format din părți ce compun interfa ța de lucru cu utili(atorul final. /'emple de componente folosite )n acest strat pot include: • • • • •
casete de editareB eticheteB casete de te'tB butoaneB interfețe indo0s sau /+.
Din punct de vedere a tehnologiilor folosite la construc ția acestui strat? putem distinge: •
indo0s -resentation Foundation 7-F8 H a fost de(voltat de Microsoft ca un subsistem grafic ce interpretea(ă 7rendering8 elementele interfe ței utili(ator 7>I H raphical >ser Interface8. 5pre deosebire de indo0s Form? -F folose ște %$.
Direct care este o colecție de interfețe de programare 7A-I8 destinate manipulării sarcinilor legate de multimedia. -F permite creare de interfe țe mai •
bogate )n elemente grafice. A5-./! eb Form H este cadru de aplicații 0eb de(voltate și comerciali(ate de Microsoft și care permite programatorilor de a construi site6uri 0eb ba(ndu6se pe familiarul drag6and6drop. 5uprafa ța de proiectare? sutele de controale componente a3ută
•
și
la construirea rapidă a site6urilor sofisticate și cu acces la
date. A5-./! MVC H oferă o modalitate puternică? ba(ată pe modele? ce permite construirea de site6uri dinamice cu o separare clară )ntre straturi 7Model6Vie06 Control8.
'8 Lin9 @n .et Frame0or1 *.2 este introdus LI=? un mecanism pentru manipularea colec țiilor de obiecte 7selectare? ordonare? filtrare? agregarea pentru afi șarea? modificarea și durabilitatea datelor8. Language Integrated =uer permite interogarea unor seturi de obiecte prin invocarea unor metode care Poglindesc func ționalitatea 5=L. LI= permite accesarea unor tehnologii pe care un de(voltator nu le putea accesa sau le accesa foarte greu: ba(e de date M5
relaționale? nu sunt disponibile )n Compact Frame0or1. 5copul principal al LI= )n Compact Frame0or1 nu este cel ce simplifică accesul la ba(a de date? ci mai degrabă că manipulea(ă colecții. %%.
-e scurt? Lin< : •
•
furni(ea(ă accesul la dateB permite simplificarea căutărilor prin reducerea codului necesar 7nu se mai pierde timp
pentru scrierea metodelor de căutare8B •
interacționea(ă cu toate tipurile de surse de date printr6o abordare comunăB
Folosirea LI= )n de(voltarea aplicațiilor poate spori func ționalitatea cu un minim de cod.
': icroso)t S;L Ser
I. 5=L 5erver #$$$ a fost prima variantă comerciala pentru arhitectura Intel. >ltima versiune apărută este Microsoft 5=L 5erver #$$9. Microsoft 5=L 5ever folose ște o variantă de 5=L numită !65=L? sau !ransact65=L? o implementare de 5=L6;# 7standardul I5" pentru 5=L8 cu unele e'tensii. !65=L )n principal adaugă sinta'a adi țională pentru procedurile stocate și pentru tran(acții. 5tandardele 5=L necesită ACID 6 patru condiții pentru orice tran(ac ție? sinteti(ate prin acronimul ACID: atomicitate? consisten ță? i(olare? durabilitate. M5 5=L 5erver suporta "D+C 7"pen Database Connectivit8. %#.
5=L 5erver oferă suport pentru stocarea datelor multimedia și adăuga noi tipuri de date 7geometr? geograph? hierarch și mult a șteptatul &ate fără &atetime8. Versiunea de 5=L 5erver Management 5tudio inclusă )n 5=L 5erver #$$9 acceptă Intelli5ense pentru 5=L. 7Microsoft? #$%&8 !rebuie preci(at că Microsoft oferă 5=L 5erver /'pess /dition? versiune gratuită a serverului. Cu toate că nu oferă restricții )n ceea ce privește numărul ba(elor de date sau a utili(atorilor concuren ți? este limitată la folosirea unui singur procesor? a % b de memorie și ma'. ,b a fișierelor de date. -utem spune despre Microsoft 5=L 5erver ca este o solu ție integrată de management și anali(ă a datelor? care a3uta organi(ațiile de orice dimensiune să: •
de(volte? implemente(e și administre(e aplicații la nivel de )ntreprindere mai
•
sigure? scalabile și fiabileB ma'imi(e(e productivitatea I! prin reducerea comple'ită ții creării? implementării și administrării aplicațiilor pentru ba(e de dateB
•
parta3e(e date pe mai multe platforme? aplicații și dispo(itive pentru a facilita
•
conectarea sistemelor interne și e'terneB controle(e costurile fără a sacrifica performan ța? disponibilitatea? scalabilitatea sau securitatea.
estionarea serverului se face foarte u șor prin aplica ția 5=L 5erver Management 5tudio 7Figură #. 5=L 5erver Management 5tudio8.
%*.
Figură 2. S%L Ser'er anagement Stu&io
/lementul central al acestei unelte este panelul "b3ect /'plorer? ce permite utili(atorului să răsfoiască? selecte(e sau să )ntreprindă orice alta acțiune asupra obiectelor de pe server.
'1= icroso)t A$ure Microsoft A(ure este o platformă profesională de servicii )n cloud? oferită de Microsoft. Datorită funcționalităților avansate? se pot utili(a mașini virtuale? ba(e de date 5=L? se pot crea copii de re(ervă pentru resursele e'istente și multe altele? fără ca utili(atorul să fie afectat de defecțiuni sau de )nvechirea echipamentelor și a programelor informatice. 7Microsoft? #$%&8 Foarte important este faptul că A(ure susține orice sistem de operare și o gamă largă de limba3e de programare. A(ure oferă acces la servicii integrate? repre(entnd putere de calcul? depo(ite? aplicații? date și rețele? astfel )nct utili(atorul poate gestiona mult mai rapid infrastructura? e'ecutnd un număr mai mare de sarcini și? )n primul rnd poate face economii financiare importante beneficiind de reducerea costurilor de mentenan ță. 7aine? #$%28
%,.
5istemul A(ure este lider )n domeniul performan țelor? permi țnd plasarea pe o singură platformă a serviciilor gestionate și negestionate? iar acest lucru oferă numeroase posibilită ți pentru crearea și implementarea de diferite aplicații. A(ure combină serviciul Iaa5 7infrastructură ca serviciu8 cu -aa5 7platformă ca serviciu8. 5istemul A(ure este un serviciu deosebit de fle'ibil? utili(at )n numeroase domenii I!? astfel )nct este o soluție e'celentă pentru cei mai e'igenți utili(atori. " confirmare o poate repre(enta faptul că 5istemul A(ure poate fi utili(at cu orice sistem de operare? de la indo0s la Linu'? cu o gamă bogată de limba3e de programare? de la C4 la Gava? precum și cu multe instrumente? de la soft0are 5=L 5erver la "racle. 7Microsoft? #$%&8 A(ure a fost create pentru a permite utili(atorului accesul la toate serviciile? ma șinile și aplicațiile? fără teama )ntreruperii accesului. 5istemul A(ure oferă un contract 5LA? care acoperă o funcționare a serviciului de ;;?;2Q? o monitori(are continuă a stării serviciilor și asisten ță tehnică non6stop. A(ure este un cloud de )naltă calitate și? de aceea? accesul la serviciile deținute se poate face de oriunde din lume. @n plus? sistemul se ba(ea(ă pe re țeaua globală a centrelor de date? care se e'tinde )n permanență. " platformă construită )n acest mod permite pornirea aplica țiilor pentru clienți din orice colț al lumii. @n ca(ul )n care utili(atorul dorește să ) și utili(e(e propria infrastructură I! dar are nevoie de soluții de re(ervă? A(ure )i oferă posibilitatea de combina infrastructura I! proprie cu solu ții inovatoare de tip cloud și de a crea un mediu hibrid.
%2.
- Soluția propusă Lucrarea de față abordea(ă problema reali(ării unei aplicații soft0are pentru un service auto? cuprin(nd informati(area li automati(area acestor unită ți? obținndu6se prin aceasta un grad de ocup abilitate ridicat și eficiență sporită? servicii de calitate acordate clien ților? precum și o gestionare corectă a situațiilor apărute pe parcursul derulării activită ții. Aplicația )n 3urul căreia se a'ea(ă )ntreaga discuție permite utili(atorilor gestionarea și monitori(area tuturor parametrilor procesului aflat )n desfă șurare )n interiorul service6ului nostru. Astfel aplicația permite managementul inteligent al utili(atorilor? fiecare utili(ator ) și poate crea cont pentru acces? )și poate adăuga mașinile )n aplicație și )și poate face programări. "dată adăugată o programare? inginerul de service preia solicitarea făcută de către client și ii face un devi( de oferta telefonic. După acceptarea ofertei mașina este programata la reparație. @n timpul reparației? clientul poate vi(uali(a procesul efectuat )n service6ul nostru prin intermediul unor camere video montate )n service. 5oluția actuală )și propune să acopere cu succes cerințele unui segment larg de clien ți? >tili(area sistemului )n cadrul companiei noastre aduce avanta3e certe )ntregii afaceri contribuind semnificativ la eficienti(area și creșterea profitabilității prin urmărirea flu'ului operativ de service? asigurarea stocurilor de siguran ță pentru clien ți? urmărirea comen(ilor de la clien ți? etc. >rmărirea tuturor flu'urilor operative permite regăsirea și raportarea rapida a informa țiilor. Modulele componente a acestui proiect sunt: • • • • • • •
modul )nregistrare utili(atori modul autentificare modul profil client modul vehicule modul programări modul camere modul inginer service 7admin8
%&.
-1 Ar6itectura aplicației
%.
Figură . Arhitectura a"icaț iei
-" Stratul &a$ei de date -"1 Ar6itectura &a$ei de date > dia,ra#a ar6itecturală
%9.
Figură *. Arhitectura +aei &e &ate
%;.
-"" Ta&elele )olosite Datele aplicației sunt stocate )n tabele relaționale după cum urmea(ă: • • • • • • • • • • • • •
• • •
>ser!pe H conține tipurile de utili(atori 7administrator? client? etc8B >ser H conține datele utili(atorilor legate de autentificareB Client H conține datele utili(atorilor pe partea de contactO3uridicaB -age H conține paginile aplicațieiB -age>ser-ermision H conține maparea paginilor cu utili(atorulB -ermission!pe H con ține definirea permisiunilor pentru accesul pe paginiB >ser5tate H conține starea conturilorB 5tate H conține definirea stărilor contuluiB !o1en H conține to1en6urile generate pentru )nregistrareOrecuperare parolăB >serCameraelation H conține date legate despre maparea utili(atorilorOcamereB Camera H conține definirea camerelor din interiorul service6uluiB Appointment H conține datele legate despre programarea autovehiculului )n serviceB -roposedAppointment H conține date legate despre programarea propusa de către inginerul de serviceB Appointment5tate H conține definirea stărilor unei programăriB Vehicle H conține date legate despre autovehiculeB Invoice H conține date legate de preț.
#$.
-' Stratul lo,ic -'1 odulul %nre,istrare utili$atori Acest modul este destinat strict )nregistrării de noi clien ți. -rin intermediul acestui modul? datele introduse de către client )n stratul de >I sunt validate si salvate )n tabelele rela ționate a ba(ei de date. Datele introduse de către utili(ator sunt mapare )ntr6un obiect de tipul >ser după care sunt transmise din controller ca parametru la o metodă dedicată adăugări datelor )n ba(a de date 7RegisterRepository.CreateUser(…)) . "dată adăugate datele cu succes? metoda va returna >serId6ul aferent acestei )nregistrări? )n ca( contrar? dacă introducerea datelor nu se reali(ea(ă cu succes? metoda va returna eroarea iar utili(atorul va fi informat printr6o eroare. !otodată? după adăugarea cu succes a datelor )n ba(a de date? clientul va primi un mail de activare al contului. Datele transmise spre metoda de trimitere de email către client 7EmailService.Send(…))? metodă care va trimite un mail de activare a contului pe ba(a unui to1en6ului generat anterior. Acest to1en se generea(ă automat la adăugarea cu succes a clientului )n ba(a de date 7 TokenRepository.GenerateToken(…)).
•
Implementare -egi!terontroer :
[Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt CreateUser(User"ie'odel %ser") i* (odelState.+s"alid) %ser".UserType+d , - var res%lt , RegisterRepository.CreateUser(apper.apUser"ie'odelToUser(%ser")/ apper.apUser"ie'odelToClient(%ser")/ *alse) i* (res%lt ,, essages.$ail) odelState.#ddodelError(0Email0/ 0Email de1a inregistrat20) ret%rn "ie'(0Register0/ %ser") 3 else var token , TokenRepository.GenerateToken(res%lt) EmailService.Send(%ser".Email/ 0+nregistrare0/ string.$ormat(0Sal%t/ tocmai ti4ai *ac%t %n cont pe 5a 6re*,7-3839:3;token,<37 target,7=&lank7>?359a>/ te asteptam pe site20/ Site@ata.#ctivateAame/ [email protected]/ 0register0/ 0activate0/ token)) ret%rn Redirect(090) 3
#%.
3 else ret%rn "ie'(0Register0/ %ser") 3 3
Implementare -egi!ter-e"o!itory H adăugarea datelor introduse de client )n ba(a de date:
•
p%&lic static int CreateUser(User %ser/ Client client/ &ool createdBy#dmimn) i* (%ser ,, n%ll client ,, n%ll) ret%rn 4- %sing (var d& , ne' #%toSol%tion@B()) var res%lt , d&.Users.$irstDr@e*a%lt(t ,> t.Email ,, %ser.Email) i* (res%lt 2, n%ll) ret%rn ? 3 else d&.Clients.#dd(client) %ser.ass'ordSalt , Generateass'ordSalt() UserState %serState , ne' UserState() State+d , createdBy#dmimn ; (int)StateD*User.#ctive (int)StateD*User.Ae'/ Timestamp , @ateTime.Ao' 3 d&.UserStates.#dd(%serState) %ser.UserState+d , %serState.+d %ser.UserType+d , odels.Constants.UserTypes.User d&.Users.#dd(%ser) 3 d&.SaveC6anges() ret%rn %ser.+d 3 3
Implementare EmaiSer'ice H metoda trimitere email către client:
•
p%&lic static void Send(string email/ string s%&1ect/ string 6tmlage) ailessage mailsg , ne' ailessage()
mailsg.To.#dd(ne' ail#ddress(email)) mailsg.$rom , ne' ail#ddress([email protected]%pportEmail/ [email protected])
mailsg.S%&1ect , s%&1ect mailsg.#lternate"ie's.#dd(#lternate"ie'.Create#lternate"ie'$romString(6tmlage/ n%ll/ ediaTypeAames. TeFt.Html)) SmtpClient smtpClient , ne' SmtpClient(0smtp.sendgrid.net0 / Convert.To+nt:8(I))
##.
System.Aet.Aet'orkCredential credentials , ne' System.Aet.Aet'orkCredential(0%serJaK%re.com0/ 0pass'ord0) smtpClient.Credentials , credentials
smtpClient.Send(mailsg) 3
Implementare /oken-e"o!itory H generarea de to1en pentru user6ul nou creat:
•
p%&lic static G%id GenerateToken(int %ser+d) i* (%ser+d 5 -) ret%rn G%id.Empty %sing (var d& , ne' #%toSol%tion@B()) var tokenG%id , G%id.Ae'G%id() var token , ne' Token() #ctivateGU+@ , tokenG%id/ Timestamp , @ateTime.Ao'/ User+d , %ser+d/ +s"alid , tr%e 3 var res%lt , d&.Tokens.#dd(token) d&.SaveC6anges() ret%rn tokenG%id 3 3
Activarea unui cont nou creat se face astfel: Clientul care s6a )nregistrat prime ște un email cu un lin1 de activare. "dată accesat acest lin1? se va face un apel pe server la metoda #ctivate(…).
-arametrul acestui apel va fi to1en generat la adăugarea datelor )n ba(a de date.
Dacă to1en6ul este )ncă valid 7IsValid8? user6ul va fi activat iar valabilitatea to1en6ului va fi de(activată. După activare? clientul va fi redirecționat pe o pagina de confirmare a activării. @n ca(ul )n care to1en6ul nu mai este valid? clientul va fi redirecționat pe o pagina de eroare. •
Implementare -egi!terontroer H apelul de activare: [HttpGet! p%&lic #ctionRes%lt #ctivate(G%id token) var res%lt , TokenRepository.#ctivateUserByToken(token) i* (res%lt ,, essages.S%ccess) ret%rn "ie'(0Token#ctivated0) else i* (res%lt ,, essages.#lready#ctivated) "ie'Bag.essage , essages.#lready#ctivatedessage ret%rn "ie'(0Token+sAot"alid0) 3 else i* (res%lt ,, essages.UnregisteredToken)
#*.
"ie'Bag.essage , essages.UnregisteredTokenessage ret%rn "ie'(0Token+sAot"alid0) 3 else "ie'Bag.Erroressage , essages.aramA%ll ret%rn "ie'(0Error0) 3 3
Implementare /oken-e"o!itory H activare user și de(activare valabilitate to1en:
•
p%&lic static string #ctivateUserByToken(G%id activationToken) i* (activationToken ,, n%ll) ret%rn essages.aramA%ll %sing (var d& , ne' #%toSol%tion@B()) var %ser , d&.Tokens.+ncl%de(0User0).+ncl%de(0User.UserState0).$irstDr@e*a%lt(t ,> t.#ctivateGU+@ ,, activationToken) i* (%ser ,, n%ll) ret%rn essages.UnregisteredToken else i* (%ser.+s"alid) %ser.+s"alid , *alse %ser.User.UserState.State+d , (int)StateD*User.#ctive d&.SaveC6anges() ret%rn essages.S%ccess 3 else ret%rn essages.#lready#ctivated 3 3 3
#,.
-'" odulul autenti)icare Modulul de autentificare este responsabil pentru validarea autentificării? crearea de coo1ie după autentificare precum și de recuperarea parolei. La autentificare? modulul verifică dacă user6ul introdus de către client e'istă )n ba(a de date și totodată dacă este activat după care verifică dacă parola și numele de utili(ator corespund cu cele salvate )n ba(a de date. Dacă datele introduse corespund? sunt salvate )ntr6un coo1ie local urmnd ca clientul să fi redirecționat pe pagina principală a clien ților.
•
Implementare Loginontroer H metodă apelată după completarea datelor )n >I6ul de autentificare: [Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt Login(Login"ie'odel %ser) i* (odelState.+s"alid) i* (#%t6Repository.User+s#ctivated(%ser.Email)) i* (#%t6Repository.Login+s"alid(%ser.Email/ %ser.ass'ord)) $orms#%t6entication.Set#%t6Cookie(%ser.Email/ %ser.Remem&erLogin) ret%rn RedirectTo#ction(0+ndeF0/ 0Home0) 3 else odelState.#ddodelError(0ass'ord0/ 0User sa% parola incorecta20) 3
3 else odelState.#ddodelError(0ass'ord0/ 0User%l n% a *ost activat20) 3
3 ret%rn "ie'(0Login9Login0/ %ser) 3
•
Implementare Auth-e"o!itory H metodă care verifică dacă user6ul e'istă )n ba(a de date și dacă acesta a fost activat: p%&lic static &ool User+s#ctivated(string email)
#2.
%sing (var d& , ne' #%toSol%tion@B()) ret%rn d&.Users.+ncl%de(0UserState0).#ny(t ,> t.Email ,, email MM t.UserState.State+d ,, (int)StateD*User.#ctive) 3 3
•
Implementare Auth-e"o!itory H metodă care verifică dacă user6ul sau parola introduse de către client corespund cu cele salvate )n ba(a de date: p%&lic static &ool Login+s"alid(string email/ string pass'ord) %sing (var d& , ne' #%toSol%tion@B()) ret%rn d&.Users.#ny(t ,> t.Email ,, email MM t.ass'ord ,, pass'ord) 3 3
@n ca(ul )n care utili(atorul )și uită parola? acesta o poate recupera. Această funcționalitate este implementată tot )n acest modul. >tili(atorul completea(ă adresa de email? aceasta este transmisă mai departe )n controller după care se verifică dacă email6ul introdus de către utili(ator e'ista )n ba(a de date cu a3utorul metodei
#%t6Repository."eri*yEmail(…).
Dacă email6ul introdus
nu e'istă )n ba(a de date? utili(atorul va fi notificat printr6o eroare iar dacă email6ul e'istă )n ba(a de date? se va genera un to1en și se va trimite un email cu instrucțiunile de recuperare.
•
Implementare Authontroer H metodă care verifica email6ul introdus și trimite email de recuperare a parolei dacă email6ul este valid:
[Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt $orgottenass'ord($orgottenass'ord"ie'odel model) i* (odelState.+s"alid) var res%lt , #%t6Repository."eri*yEmail(model.Email) i* (res%lt ,, ?) odelState.#ddodelError(0Email0/ 0Email neinregistrat in sistem.0 ) ret%rn "ie'(0Login9$orgottenass'ord0/ model) 3 else var token , TokenRepository.GenerateToken(res%lt) EmailService.Send(model.Email/ 0Resetare parola0/ string.$ormat(0Sal%t/ tocmai ai cer%t resetarea parolei. 5a 6re*,7-3839:3;token,<37 target,7=&lank7>?359a>0/ [email protected]ass'ord/ [email protected]/ 0a%t60/ 0resetpass'ord0/ token))
#&.
ret%rn Redirect(090) 3 3 else ret%rn "ie'(0Login9$orgottenass'ord0/ model) 3 3
Implementare Auth-e"o!itory H metodă care verifică dacă email6ul introdus e'istă )n
•
ba(a de date: p%&lic static int "eri*yEmail(string email) %sing (var d& , ne' #%toSol%tion@B()) var %ser , d&.Users.$irstDr@e*a%lt(t ,> t.Email ,, email) ret%rn %ser;.+d ;; ? 3 3
@n email6ul primit va fi un lin1 destinat recuperării parolei care are ca parametru de apel un to1en 7>ID8. "dată accesat acest lin1? se va verifica )n ba(a de date dacă to1en6ul este valid. Dacă to1en6ul nu mai este valid se va afi șa o pagina de eroare iar dacă to1en6ul este valid se va afișa un formular )n care utili(atorul va completa parola nouă. La final se va salva noua parolă )n ba(a de date și se va de(activa valabilitatea to1en6ului. •
Implementare Authontroer H implementarea din controller a metodei de resetare a parolei:
[Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt Resetass'ord(Resetass'ord"ie'odel model) i* (odelState.+s"alid) i* (model.ass'ord 2, model.ConNrmass'ord) odelState.#ddodelError(0ass'ord0/ 0arolele n% coresp%nd.0) ret%rn Redirect(ReO%est.UrlRe*errer.ToString()) 3
var res%lt , #%t6Repository.Resetass'ord(model.Resetass'ordToken/ model.ass'ord) i* (res%lt) ret%rn Redirect(090)
#.
3 else odelState.#ddodelError(0ass'ord0/ 0Eroare sc6im&are parola.0) ret%rn Redirect(ReO%est.UrlRe*errer.ToString()) 3
3 else ret%rn "ie'(0Login9Resetass'ord0/ model) 3 3
Implementare Auth-e"o!itory H metodă care resetea(ă parola )n ba(a de date dacă to1en6
•
ul este valid: p%&lic static &ool Resetass'ord(G%id resetToken/ string pass'ord) %sing (var d& , ne' #%toSol%tion@B()) var token , d&.Tokens.$irstDr@e*a%lt(t ,> t.#ctivateGU+@ ,, resetToken MM t.+s"alid ,, tr%e) i* (token ,, n%ll) ret%rn *alse else var %ser+d , token.User+d var %ser , d&.Users.$irstDr@e*a%lt(t ,> t.+d ,, %ser+d) i* (%ser ,, n%ll) ret%rn *alse 3 token.+s"alid , *alse %ser.ass'ord , pass'ord d&.SaveC6anges() ret%rn tr%e
3 3 3
#9.
-'' odulul pro)il client Modulul client este responsabil cu managementul tuturor datelor legate de client. Acest modul oferă clientului posibilitatea de a modifica orice data legata de profilul acestuia 7nume? companie? adresa? etc.8. După modificarea datelor )n stratul >I? datele sunt transmise controllerului. Acesta la va apela metoda
UserRepository.Update(…)
care va face modificările )n
ba(a de date. •
Implementare !erontroer H metodă care este apelata la modificarea datelor unui client: [Httpost! ["alidate#nti$orgeryToken ! p%&lic ne' #ctionRes%lt roNle(User"ie'odel a%t6") i* (odelState.+s"alid) UserRepository.Update(a%t6") ret%rn Redirect(ReO%est.UrlRe*errer.ToString()) 3 else ret%rn "ie'(0Edit0/ a%t6") 3 3
•
Implementare !er-e"o!itory H metoda care face modificarea datelor clientului )n ba(a de date: p%&lic static string Update(User"ie'odel %ser") var %ser , apper.apUser"ie'odelToUser(%ser") %ser.+d , %ser".User+d var client , apper.apUser"ie'odelToClient(%ser") client.+d , %ser".Client+d %sing (var d& , ne' #%toSol%tion@B()) var d&User , d&.Users.$irstDr@e*a%lt(t ,> t.+d ,, %ser.+d) var d&Client , d&.Clients.$irstDr@e*a%lt(t ,> t.+d ,, client.+d) i* (d&User ,, n%ll d&Client ,, n%ll) ret%rn 0E@+T4@#T#4ADT4$DUA@0 3
d&User , Convertor.Convert(%ser/ d&User) d&.SaveC6anges()
#;.
d&Client.#ddress , client.#ddress d&Client.ClientEmail , client.ClientEmail d&Client.CompanyAame , client.CompanyAame d&Client.LastAame , client.LastAame d&Client.6one , client.6one d&Client.$irstAame , client.$irstAame
d&.SaveC6anges() ret%rn essages.S%ccess 3 3
-'- odulul I? clientul ) și poate adaugă autovehicule si ulterior ) și poate face programare )n service pe ba(a datelor introduse de către client la fiecare autovehicul. Implementare ehiceontroer H metodă care este apelata la apăsarea butonului de
•
ștergere a unui
autovehicul.
p%&lic #ctionRes%lt "e6icles(int; ve6icle+d/ string 6ttp#ction) var model , ne' "e6icle"ie'odel() var %ser , UserRepository.GetUserByEmail(User.+dentity.Aame) model.C%rrent"e6icles , %ser.Client."e6icles.ToList() model.Client+d , %ser.Client+d i* (ve6icle+d.Has"al%e MM 6ttp#ction.EO%als(odels.Constants. Http#ctions.@elete)) var remove , "e6icleRepository.Remove(ve6icle+d."al%e) i* (remove.EO%als(odels.Constants.essages.S%ccess)) ret%rn Redirect(ReO%est.UrlRe*errer.ToString()) 3 else odelState.#ddodelError(0Client+d0/ remove) ret%rn "ie'(model) 3 3
ret%rn "ie'(model) 3
*$.
Implementare ehice-e"o!itory H metodă care este apela de către controller pentru a
•
șterge un vehicul din ba(a de date. p%&lic static string Remove(int ve6icle+d) %sing (var d& , ne' #%toSol%tion@B()) i* (2d&.#ppointments.#ny(s ,> s."e6icle+d ,, ve6icle+d)) var ve6icle , d&."e6icles.$irstDr@e*a%lt(s ,> s.+d ,, ve6icle+d) d&."e6icles.Remove(ve6icle) d&.SaveC6anges() ret%rn odels.Constants.essages.S%ccess 3 else ret%rn odels.Constants.essages."e6icleUsed+n#ppointment 3 3
3
La adăugarea unui vehicul )n sistem? clientul va completa datele necesare )n stratul >I după care va apasă butonul adăugare. 5tratul >I va apela stratul logic? si anume controllerul ehiceontroer . Datele vor fi mapate )ntr6un obiect de tipul Vehicule și se vor salva )n ba(a de
date prin apelarea metodei
•
"e6icleRepository.#dd(…).
Implementare ehiceontroer H apelarea de statul >I a metodei din controller pentru a adăuga un autovehicul. [Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt "e6icles("e6icle"ie'odel ve6icle) i* (odelState.+s"alid) "e6icleRepository.#dd(apper.ap"e6icle"ie'odelTo"e6icle(ve6icle)) ret%rn Redirect(ReO%est.UrlRe*errer.ToString().Split(7;7)[?!) 3 else ret%rn "ie'(ve6icle) 3 3
*%.
Implementare ehice-e"o!itory H metodă care este apela de către controller pentru a
•
adăuga un vehicul )n ba(a de date. p%&lic static &ool #dd("e6icle ve6icle) %sing (var d& , ne' #%toSol%tion@B()) d&."e6icles.#dd(ve6icle) d&.SaveC6anges() ret%rn tr%e 3
3
-'0 odulul pro,ra#ări -rin intermediul modulului programări? clientul ) și poate )nregistra o programare )n sistem. Datele introduse de acesta vor fi transferate din stratul >I spre controller 7strat logic8 după care se va apela metoda
#ppointmentRepository.Create(…)
care va introduce date )n ba(a de date.
-rogramările vor fi ulterior validate de către inginerul de service.
•
Implementare A""ointmentontroer H metodă apelată )n controller după completarea datelor )n stratul >I.
[Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt Create(#ppointment"ie'odel appointment") var *ormat , 0dd99yyyy HHmm0 appointment".StartTime , @ateTime.arseEFact(appointment".StartTime#%F/ *ormat/ C%lt%re+n*o.+nvariantC%lt%re) appointment".EndTime , @ateTime.arseEFact(appointment".EndTime#%F/ *ormat/ C%lt%re+n*o.+nvariantC%lt%re) i* (odelState.+s"alid) var appointment , apper.ap#ppointment"ie'odelTo#ppointment(appointment") #ppointmentRepository.Create(appointment) "ie'Bag.essage , essages.#ppointmentRegistered "ie'Bag.essageTitle , essages.#ppointmentRegisteredTitle ret%rn "ie'(0GenericT6ankyo%age0) 3 else var %ser , UserRepository.GetUserByEmail(User.+dentity.Aame) i* (%ser.Client."e6icles 2, n%ll) appointment".Client"e6icles , %ser.Client."e6icles.Select(% ,> ne' SelectList+tem
*#.
TeFt , %.ake P 0 0 P %.odel P 0 0 P %.Qear P 0 0 P %.Licenselate/ "al%e , %.+d.ToString() 3).ToList()
3
ret%rn "ie'(0Create0/ appointment") 3 3
Implementare A""ointment-e"o!itory H metodă apelată din controller pentru a adăuga
•
programarea )n ba(a de date. p%&lic static string Create(#ppointment appointment) try %sing (var d& , ne' #%toSol%tion@B()) appointment.#ppointmentState+d , - d&.#ppointments.#dd(appointment) d&.SaveC6anges() ret%rn odels.Constants.essages.S%ccess 3 3 catc6 (EFception eF) ret%rn odels.Constants.essages.Error 3
3
-'5 odulul ca#ere -entru a putea orice client să )și vadă mașina )n timp real? pe perioada cnd mașina este )n reparație? s6a implementat un controller dedicat afi șării )n timp real a reparației cu a3utorul unei camere aflate )n service. Id6ul camerei se va seta de către inginerul de service atunci cnd acesta va trece programare pe starea R)n lucru. Controller6ul va interoga ba(a de date pentru a afla ce camera i6a fost distribuita clientului de către inginerul service. După identificarea camerei? sistemul va apela metoda
CameraRepository.GetCameraBy+d(…)
care va apela A-I6ul camerei
aflate )n service. Adresele camerelor? user6ul de conectare si parola sunt configurate 7stocate8 )n ba(a de date. După autentificare la A-I6ul camerei? aplicația va prelua cate o imagine la # secunde si o va afișa clientului.
**.
Implementare ameraontroer H implementare controller pentru afi șarea )n timp real a
•
imaginilor din service. p%&lic #ctionRes%lt +ndeF(int; camera+d/ int; appointment+d) var %ser , UserRepository.GetUserByEmail(User.+dentity.Aame) string pageAame , t6is.ControllerConteFt.Ro%te@ata."al%es[ 0controller0!.ToString() var page , agesRepository.GetageByAame(pageAame) i* (2camera+d.Has"al%e MM appointment+d.Has"al%e) i* (ermissionRepository.UserHasReadermision$orage(%ser.+d/ page.+d)) var model , ne' Camera"ie'odel() var %serCamera , CameraRepository.GetCamera$or#ppointment(appointment+d."al%e) i* (%serCamera 2, n%ll) model , apper.apCameraToCamera"ie'odel(%serCamera) model.#ppointment , apper.ap#ppointmentTo#ppointment"ie'odel(#ppointmentRepository.Get(appointment+d."a l%e)) ret%rn "ie'(model) 3 ret%rn Redirect(Redirects.Aoermissions) 3 else ret%rn Redirect(Redirects.Aoermissions) 3 3 else i* (ermissionRepository.UserHasReadermision$orage(%ser.+d/ page.+d) MM %ser.UserType+d ,, UserTypes.S%perUser) var model , ne' Camera"ie'odel() var camera , CameraRepository.GetCameraBy+d(camera+d."al%e) i* (camera 2, n%ll) model , apper.apCameraToCamera"ie'odel(camera) ret%rn "ie'(model) 3 ret%rn "ie'() 3 else ret%rn Redirect(Redirects.Aoermissions) 3 3 3 •
Implementare ameraontroer H metodă care apelea(ă A-I6ul camerei și afișea(ă imaginea preluata de la camera. *,.
p%&lic #ctionRes%lt GetCamera+mage$orUser(string cameraUrl) var 'e&Client , ne' e&Client() 'e&Client.Use@e*a%ltCredentials , tr%e 'e&Client.Credentials , ne' Aet'orkCredential(0p%&lic0/ 0p%&lic-8:<.20 ) try &yte[! image@ata , 'e&Client.@o'nload@ata(cameraUrl) ret%rn $ile(image@ata/ 0image9png0) 3 catc6 (EFception eF) string pat6 , HttpConteFt.Server.apat6(09Content9+mages9camerao.png0 ) var p6oto , System.+D.$ile.Read#llBytes(pat6) ret%rn $ile(p6oto/ 0image9png0) 3 3
-'7 odulul in,iner ser
•
Implementare A&minontroer H adăugarea unui utili(ator din controller6ul de admin.
[Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt CreateUser(User"ie'odel %ser") i* (odelState.+s"alid) %ser".UserType+d , - var %ser+d , RegisterRepository.CreateUser(apper.apUser"ie'odelToUser(%ser")/ apper.apUser"ie'odelToClient(%ser")/ tr%e) i* (%ser+d ,, ?) odelState.#ddodelError(0Email0/ 0Email de1a inregistrat20) ret%rn "ie'(0Users9#dd0/ %ser") 3 ret%rn Redirect(090) 3 else ret%rn "ie'(0Users9#dd0/ %ser") 3
*2.
3
Implementare A&minontroer H ștergerea unui utili(ator din controller6ul de admin.
•
p%&lic #ctionRes%lt @eleteUser(int %ser+d) UserRepository.Remove(%ser+d) ret%rn Redirect(ReO%est.UrlRe*errer.ToString()) 3
•
Implementare A&minontroer H editarea unui utili(ator din controller6ul de admin. [Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt EditUser(User"ie'odel model) i* (odelState.+s"alid) UserRepository.Update(model) ret%rn Redirect(ReO%est.UrlRe*errer.ToString()) 3 else ret%rn "ie'(0Users9Edit0/ model) 3 3
•
Implementare A&minontroer H adăugarea unei programări din controller6ul de admin.
[Httpost! ["alidate#nti$orgeryToken ! p%&lic #ctionRes%lt Create#ppointment(#ppointment"ie'odel appointment") var *ormat , 0dd99yyyy HHmm0 appointment".StartTime , @ateTime.arseEFact(appointment".StartTime#%F/ *ormat/ C%lt%re+n*o.+nvariantC%lt%re) appointment".EndTime , @ateTime.arseEFact(appointment".EndTime#%F/ *ormat/ C%lt%re+n*o.+nvariantC%lt%re) i* (odelState.+s"alid) var appointment , apper.ap#ppointment"ie'odelTo#ppointment(appointment") #ppointmentRepository.Create(appointment) "ie'Bag.essage , essages.#ppointmentRegistered "ie'Bag.essageTitle , essages.#ppointmentRegisteredTitle ret%rn "ie'(0GenericT6ankyo%age0) 3 else var %ser , UserRepository.GetUserByEmail(User.+dentity.Aame) i* (%ser.Client."e6icles 2, n%ll)
*&.
appointment".Client"e6icles , %ser.Client."e6icles.Select(% ,> ne' SelectList+tem TeFt , %.ake P 0 0 P %.odel P 0 0 P %.Qear P 0 0 P %.Licenselate/ "al%e , %.+d.ToString() 3).ToList()
3
ret%rn "ie'(0Create#ppointment0/ appointment") 3 3
•
Implementare A&minontroer H editarea unei programări din controller6ul de admin.
p%&lic #ctionRes%lt Edit#ppointment(int appointment+d) var model , ne' #ppointment"ie'odel () model , apper.ap#ppointmentTo#ppointment"ie'odel(#ppointmentRepository.Get(appointment+d)) var %ser , ne' User() i* (model.Client+d.Has"al%e) %ser , UserRepository.GetUserByClient+d(model.Client+d."al%e) 3 i* (model.User+d.Has"al%e) %ser , UserRepository.GetUserBy+d(model.User+d."al%e) 3
i* (%ser.Client."e6icles 2, n%ll) model.Client"e6icles , %ser.Client."e6icles.Select(% ,> ne' SelectList+tem TeFt , %.ake P 0 0 P %.odel P 0 0 P %.Qear P 0 0 P %.Licenselate/ "al%e , %.+d.ToString() 3).ToList() 3
model.#ppointmentStates , #ppointmentRepository.Get#ppointmentStates().Select(% ,> ne' SelectList+tem TeFt , %.Aame/ "al%e , %.+d.ToString() 3).ToList()
model.Cameras , CameraRepository.Get#ll().Select(% ,> ne' SelectList+tem TeFt , %.Aame/ "al%e , %.+d.ToString()/ 3).ToList() model.StartTime#%F , model.StartTime.ToString(0dd99yyyy 66mm0) model.EndTime#%F , model.EndTime.ToString( 0dd99yyyy 66mm0)
*.
ret%rn "ie'(0#ppointments9Edit0 / model) 3
Implementare A&minontroer H ștergerea unei programări din controller6ul de admin.
•
p%&lic #ctionRes%lt @elete#ppointment(int appointment+d) #ppointmentRepository.Remove(appointment+d) ret%rn Redirect(ReO%est.UrlRe*errer.ToString()) 3
Implementare A&minontroer H afișarea programărilor din controller6ul de admin.
•
p%&lic #ctionRes%lt #ppointments() var model , ne' #dmin"ie'odel() model.Clients#ppointments , #ppointmentRepository.Get#ll() ret%rn "ie'(0#ppointments9List0 / model) 3
Implementare A&minontroer H afișarea clienților din controller6ul de admin.
•
p%&lic #ctionRes%lt Users() var model , ne' User"ie'odel() model.Users , UserRepository.Get#llUsers() ret%rn "ie'(0Users9Users0/ model) 3
-- Strat UI 5tatul >I a fost implementat utili(nd biblioteca Snoc1out și pachetul de elemente grafice +oostrap. Acesta combinație dă caracteristica de adaptabilitate a interfeței cu utili(atorul
*9.
7Snoc1out? #$%&8. Astfel )n func ție de dimensiunile dispo(itivului de pe care este accesată aplicația? interfața cu utili(atorul se adaptea(ă la această dimensiune. 7!0itter? #$%&8
Figură . er!iune cacuator.
Figură 3. er!iune tee#on
*;.
0 anual de utili$are Aplicația de(voltată folosește două roluri care definesc accesul utili(atorilor la resursele aplicației. Ținnd cont de faptul că fiecare rol poate accesa resurse diferite? manual de utili(are este )mpărțit )n două secțiuni 7administrator și client8.
01 Ad#inistrator >tili(atorul de tip administrator are acces la toate resursele aplicației. Acesta poate vi(uali(a datele aferente tuturor clienților? a autovehiculelor acestora și a programărilor ce au fost )nregistrate )n aplica ție. Conturile de tip administrator sunt predefinite din momentul )n care aplicație este instalată. 011 Autenti)icare -entru a se autentifica administratorul va utili(a op țiunea RAutentificare din meniul principal. " dată a3uns pe pagina dedicată autentificări acesta trebuie să ) și introducă adresa de email și parola pentru a6și accesa contul:
Figură 4. Autenti#icare a&mini!trator
,$.
>tili(atorul are opțiunea de a rămne autentificat chiar dacă )nchide bro0ser6ul prin selectarea opțiunii R-ăstrea(ă6mă autentificat.
,%.
01" Ad#inistrare
>tili(atorul de tip administrator are posibilitatea de a gestiona toate datele legate de programări și utili(atorii de tip client. -entru acesta? administratorul are la dispo(i ție )n meniul principal opțiunea RAdmin cu sub op țiunile R-rogramări și R>tili(atori:
Figură 5. A&mini!trator autenti#icat
,#.
5.1.2.1 Administrare programărilor
-entru gestionarea programărilor utili(atorul se va folosi de sec țiunea R-rogramări. >tili(nd acesta secțiune administratorul poate vi(uali(a toate programările. De asemenea poate edita 7schimbarea progresului8 și șterge programările e'istente:
Figură 6. A&mini!trare "rogramări
Figură 10. E&itare "rogramare
,*.
Ad#inistrare utili$atorilor
@n ca(ul )n care trebuie să )nregistre(e )n sistem o programare ce a fost comunicată de către un client telefonic? administratorul poate folosi op țiunea R>tili(atori. -entru a )nregistra o programare ce a fost făcută telefonic? administratorul trebuie să locali(e( clientul )n lista cu utili(atori și să folosească opțiunea R-rogramea(ă:
Figură 11. A&mini!trare utiiatori
Figură 12. A&ăugare "rogramare
,,.
Dacă clientul este un utili(ator nou? administratorul trebuie să )nregistre(e prima dată clientul ca utili(ator de tip client:
Figură 1. 7nregi!trare cient
,2.
0" Client >tili(atorul de tip client are acces la urmărirea progresului serviciului curent și la istoricul serviciilor. Acesta poate vi(uali(a datele aferente contului său și a autovehiculelor. !otodată clientul )și poate urmări mașina aflată )n service )n timp real.
0"1 ?nre,istrare
-entru a se )nregistra clientul va utili(a op țiunea R@nregistrare din meniul principal. "dată a3uns pe pagina dedicată )nregistrării acesta trebuie să ) și introducă datele personale pentru a )și crea un cont nou:
Figură 1*. 7nregi!trare cient
,&.
"dată )nregistrat? utili(atorul va fi notificat printr6un email. /mail6ul con ține un lin1 de activare al contului de client. -entru a finali(a )nregistrarea? clientul trebuie să ) și active(e contul:
Figură 1. on#irmare acti'are cont cient
,.
0"" Autenti)icare
-entru a se autentifica clientul va utili(a op țiunea RAutentificare clien ți din meniul principal. "dată a3uns pe pagina dedicată autentificări acesta trebuie să ) și introducă adresa de email și parola pentru a6și accesa contul:
Figură 13. Autenti#icare cient
>tili(atorul are opțiunea de a rămne autentificat chiar dacă )nchide bro0ser6ul prin selectarea opțiunii R-ăstrea(ă6mă autentificat.
,9.
>tili(atorul )și poate recupera parola prin utili(area op țiunii Recuperea(ă parolă:
Figură 14. -ecu"erare "aroă
0"' @estionare auto
-rima dată clientul trebuie să ) și adauge un autovehicul pentru care dore ște să beneficie(e de servicii de reparați și de mentenanță. -entru aceasta utili(atorul va folosi opțiunea RAutovehiculele mele din meniul principal:
Figură 15. 8e!tionare auto'ehicue
,;.
" dată )nregistrat? autovehiculul va apărea )n lista de autovehicule:
Figură 16. Li!tă 'ehicue
2$.
0"- Pro,ra#ări
-entru a programa un autovehicul )n service utili(atorul va folosi op țiunea R5ervice din meniul principal. " dată a3uns pe pagina R5ervice? utili(atorul va folosi op țiunea RFă6 ți o acum o programare. -entru )nregistrarea unei programări utili(atorul va selecta unul din autovehiculele )nregistrate:
Figură 20. 9rogramare
"dată reali(ată programarea? administratorul de service este anun țat. Acesta va procesa cererea. >tili(atorul )și poate vedea toate programările procesate:
2%.
Figură 21. iuaiare "rogramări
2#.
0"0 Ur#ărire auto
>tili(atorul are posibilitatea de a și urmări ma șina )n timp reala? ct timp aceasta este )n service? cu a3utorul unei camere 0eb prin utili(area opțiunii R>rmărește6ți mașina:
Figură 22. rmărire auto'ehicu
2*.
5 Conclu$ii contri&uții și direc ții de continuare a de$
• • •
am creat o aplicație )n care se pot configura produsele și serviciile service6uluiB pentru fiecare client se pot )nregistra unul sau mai multe autovehiculeB se pot )nregistra programările clien ților pentru repara ții și devi(ele care con țin manopera și piesele de schimbB programul permite și gestiunea clienților si a programărilorB modulul de camera permite vi(uali(area reparației )n timp realB
modulul de programări stochea(ă fiecare programare astfel administratorul poate vedea istoricul fiecărui clientOreparație.
•
2,.
(i&lio,ra)ie rimeș? . 7#$$#8. De'otarea a"ica:iior cu i!ua Stu&io .;E/. +ucurești: !eora. Kaertle? . . 7#$$;8. OO9 cu i!ua ntro&uction. -reluat de pe Snoc1out: http:OO1noc1out3s.comOdocumentationOintroduction.html Lerman? G. 7#$%$8. 9rogramming Entity Framework? ntro&ucerea Bn .;E/ Framework. +ucurești: Agora Media. aine? . 7#$%28. icro!o#t Aure E!!entia!? Aure @e+ A""! #or De'eo"er!. Microsoft. !0itter. 7#$%&8. 8etting !tarte& . -reluat de pe +ootstrap: http:OOgetbootstrap.comOgetting6startedO
22.