LUCRARE DE LICENȚĂ - profs.info.uaic.roalaiba/pub/absolvire/2016 vara/EmployeeManager.pdf ·...

42
UNIVERSITATEA “ALEXANDRU IOAN CUZA” IAȘI FACULTATEA DE INFORMATICĂ LUCRARE DE LICENȚĂ EMPLOYEE MANAGER Propusă de Dumitriu I. Alexandru Sesiunea:Iulie, 2016 Coordonator științific: Asist. Dr. Vasile Alaiba

Transcript of LUCRARE DE LICENȚĂ - profs.info.uaic.roalaiba/pub/absolvire/2016 vara/EmployeeManager.pdf ·...

UNIVERSITATEA “ALEXANDRU IOAN CUZA” IAȘI

FACULTATEA DE INFORMATICĂ

LUCRARE DE LICENȚĂ

EMPLOYEE MANAGER

Propusă de

Dumitriu I. Alexandru

Sesiunea:Iulie, 2016

Coordonator științific:

Asist. Dr. Vasile Alaiba

UNIVERSITATEA ALEXANDRU IOAN CUZA IAŞI FACULTATEA DE INFORMATICĂ

Employee Manager

Dumitriu I. Alexandru

Sesiunea: Iulie 2016

Coordonator științific:

Asist. Dr. Vasile Alaiba

DECLARAŢIE PRIVIND ORIGINALITATE ŞI RESPECTAREA

DREPTURILOR DE AUTOR

Prin prezenta declar că Lucrarea de licenţă cu titlul „Employee Manager” este scrisă

de mine şi nu a mai fost prezentată niciodată la o altă facultate sau instituţie de învăţământ

superior din ţară sau străinătate. De asemenea, declar că toate sursele utilizate, inclusiv

cele preluate de pe Internet, sunt indicate în lucrare, cu respectarea regulilor de evitare a

plagiatului:

toate fragmentele de text reproduse exact, chiar şi în traducere proprie din altă

limbă, sunt scrise între ghilimele şi deţin referinţa precisă a sursei;

reformularea în cuvinte proprii a textelor scrise de către alţi autori deţine referinţa

precisă;

codul sursă, imaginile etc. preluate din proiecte open-source sau alte surse sunt

utilizate cu respectarea drepturilor de autor şi deţin referinţe precise;

rezumarea ideilor altor autori precizează referinţa precisă la textul original.

Iaşi

Absolvent Dumitriu Alexandru

___________________________

DECLARAŢIE DE CONSIMŢĂMÂNT

Prin prezenta declar că sunt de acord ca Lucrarea de licență cu titlul „Employee

Manager”, codul sursă al programelor şi celelalte conţinuturi (grafice, multimedia, date de

test etc.) care însoţesc această lucrare să fie utilizate în cadrul Facultăţii de Informatică.

De asemenea, sunt de acord ca Facultatea de Informatică de la Universitatea

„Alexandru Ioan Cuza” Iași să utilizeze, modifice, reproducă şi să distribuie în scopuri

necomerciale programele-calculator, format executabil şi sursă, realizate de mine în

cadrul prezentei lucrări de licenţă.

Iaşi

Absolvent Dumitriu Alexandru

_________________________

Cuprins

1 Motivație ______________________________________________________________ 7

2 Contribuții _____________________________________________________________ 8

3 Tehnologii folosite în implementarea aplicației „Employee Manager” _____________ 9

3.1 Java ____________________________________________________________________ 9

3.2 Eclipse __________________________________________________________________ 9

3.3 Maven __________________________________________________________________ 9

3.4 Hibernate ______________________________________________________________ 10

3.5 Spring _________________________________________________________________ 10

3.6 Tomcat_________________________________________________________________ 10

3.7 PostgreSQL (+PgAdmin) ___________________________________________________ 11 3.7.1 Detalii tabele ___________________________________________________________________ 11

3.8 HTML+CSS ______________________________________________________________ 13

3.9 JavaScript (+AngularJS) ____________________________________________________ 14

3.10 Google reCAPTCHA _______________________________________________________ 15

4 Modularizarea proiectului _______________________________________________ 17

5 Setările de configurare __________________________________________________ 18

5.1 Configurări Maven _______________________________________________________ 18

5.2 Configurări bază de date __________________________________________________ 20

5.3 Configurări mail: _________________________________________________________ 22

6 Descriere aplicație ______________________________________________________ 24

6.1 Creare cont _____________________________________________________________ 24

6.2 Autentificare ____________________________________________________________ 26

6.3 Pagina principală _________________________________________________________ 27 6.3.1 Header ________________________________________________________________________ 27 6.3.2 Meniu lateral ___________________________________________________________________ 27 6.3.3 Conținut _______________________________________________________________________ 27

6.3.3.1 Pagina de profil _____________________________________________________________ 28 6.3.3.2 Evenimente ________________________________________________________________ 34 6.3.3.3 Mail ______________________________________________________________________ 37

Dumitriu Alexandru – Employee Manager

6

6.3.3.4 Proiecte ___________________________________________________________________ 38

7 Aplicații similare _______________________________________________________ 39

7.1 LinkedIn ________________________________________________________________ 39

8 Direcții de viitor ________________________________________________________ 40

8.1 Privilegii utilizatori _______________________________________________________ 40

8.2 Pagină dedicată comunicării cu clientul _______________________________________ 40

9 Concluzii ______________________________________________________________ 41

10 Bibliografie __________________________________________________________ 42

Dumitriu Alexandru – Employee Manager

7

1 Motivație

De-a lungul scurtei mele cariere în domeniul IT până în acest moment, am putut

observa în cadrul a două internship-uri, dar și la locul actual de muncă, cât de mult poate

influența organizarea dintr-o firmă productivitatea angajaților săi.

Așadar eu consider că este necesar ca pe intranet-ul fiecărei firme să acționeze un

sistem care să motiveze angajații săi să se ajute între ei, să faciliteze răspândirea anumitor

noutăți, dar și să ajute șefii să analizeze modul în care un angajat este perceput de colegii săi.

Proiectul meu „Employee Manager” își propune să facă exact acest lucru prin:

gestionare date angajați;

Fiecare utilizator va avea un set de detalii ce îi vor ajuta pe cei de la conducere

să-i contacteze și să-i recunoască (Ex: numar de telefon, imagine de profil).

sistem de rating;

Prin acest sistem, fiecare utilizator poate să voteze abilitățile colegilor săi.

Acest fapt ar putea cauza o mai buna comunicare între angajați, deoarece cei care vor

primi ajutor nu vor mai fi atât de reticenți în a-l cere, având posibilitatea de a îi

recompensa pentru ajutorul primit. Totodată, cei care ar fi în masură să ajute pe alții

sunt mai dornici să o facă știind că această activitate va fi remarcată nu doar de către

persoana ajutată, ci și de șefi.

prezența distincțiilor;

Fiecare utilizator va fi motivat să fie mai bun, fiind recompensat cu distincții

pentru fiecare faptă ce merita a fi remarcată.

organizarea evenimentelor și ale proiectelor;

Utilizatorii vor avea acces facil la informații esențiale legate de evenimentele

ce au loc în companie sau ce au legătură cu aceasta, dar și legate de proiectele care

sunt în desfășurare sau au fost la un moment dat.

e-mail intern;

Comunicarea între utilizatorii aplicației este încurajată prin acest sistem intern

în care-și pot transmite ușor nu doar mesaje, ci și imagini și alte tipuri de fișiere.

Dumitriu Alexandru – Employee Manager

8

2 Contribuții

O primă contribuție la realizarea aplicației Employee Manager o reprezintă etapa de

cercetare în vederea descoperirii diferitelor soluții care ar putea să sporească productivitatea

din cadrul unei companii.

Am început prin a mă întreba ce ar putea să mă motiveze, în calitate de angajat, să dau tot

ceea ce am mai bun. Apoi am continuat cu o mică intervievare a colegilor de la locul de

muncă pentru a vedea dacă și ei sunt de acord cu ideile mele.

Prima din soluțiile găsite a fost recompensarea angajaților cu distincții, apoi crearea unui

sistem prin care angajații își puteau vota abilitățile. De asemenea, am realizat că fiecare

angajat are nevoie de acces la o cantitate cât mai mare de informații, într-un mod cât mai facil.

Pentru aceasta, am dedicat atât un sistem de mailing intern cât și paginile în care sunt afișate

proiectele și evenimentele ce au legătură cu compania în care este implementată aplicația

Employee Manager. Nevoia angajaților de a oferi informații este totodată satisfăcută prin

permiterea tuturor utilizatorilor să adauge evenimente.

După ce aceste idei au prins rădăcini, am început sa mă gandesc la următorul aspect:

tehnologiile pe care urmează să le folosesc. Având în vedere ca în Java am cea mai multă

experiență, am ales să expun anumite servicii REST1 folosind acest limbaj. Însă, pentru

modulul WEB doream să lucrez cu o tehnologie nouă. Cercetând acest aspect inițial mă

îndreptasem spre o combinație de HTML și PHP, însă, după cercetarea limbajului JavaScript

și găsirea bibliotecii AngularJS, m-am răzgândit, alegându-le pe acestea.

Am realizat apoi că aceste două module pot fi independente ca și cod, comunicarea dintre

acestea realizându-se pe baza acelor servicii REST expuse.

După ce am început dezvoltarea acestei aplicații am căutat diverse biblioteci/API2-uri cu

licență liberă prin care aș putea să o îmbunătățesc. Pentru un plus de securitate, am folosit

reCAPTCHA oferit de către Google, pentru estetică am folosit Bootstrap, iar pentru o mai

ușoară comunicare cu utilizatorul, am mai folosit încă un API de la Google pentru afișarea

hărților, dar și o bibliotecă Javascript pentru afișarea graficelor.

Așadar, lucrarea reprezintă o soluție a unor probleme de natură organizatorică din cadrul

anumitor companii, realizarea cu succes a acesteia bazându-se atât pe elementele menţionate

mai sus, cât şi pe conceptele practice şi teoretice dobândite în facultate.

1 Representational State Transfer 2 Application programming interface

Dumitriu Alexandru – Employee Manager

9

3 Tehnologii folosite în implementarea aplicației „Employee

Manager”

3.1 Java „Java este un limbaj de programare orientat-obiect publicat în anul 1995 de către Sun

Microsystems”[1] .

Limbajul principal al modulelor ce se ocupă cu expunerea serviciilor REST sunt

implementate în Java deoarece acesta este limbajul în care am cea mai multă experiență și în

care doresc să-mi construiesc o carieră

Java s-a dovedit a fi sigur si practic, acest fapt este demonstrat pur și simplu

observând cât de larg este răspândit în momentul de față. Totodată, acest limbaj nu stagnează,

ci este îmbunătățit periodic. De exemplu în versiunea curentă 1.8, care este folosită și în

Employee Manager, s-au adăugat chiar și elemente ce țineau de programarea

funcțională(expresii Lambda) pe lângă multiple alte îmbunătățiri.

3.2 Eclipse Eclipse este un IDE3

folosit în programare în special pentru Java, dar se poate adapta și

pentru alte limbaje de programare.

Principalele componente sunt spațiul de lucru(workspace-ul) și un sistem extensibil de

plugin-uri prin care se poate personaliza și mai mult mediul.

3.3 Maven Este unul din cele mai utile instrumente care există în acest moment. Acesta ușurează

viața programatorilor datorită faptului că ajută la organizarea dependențelor, dar și la

construirea propriu-zisă a surselor.

Doar prin inserarea a câtorva linii într-un fișier xml este de ajuns pentru ca maven să-și

facă treaba (acesta descarcă automat din depozitul central sau dacă precizăm noi, dintr-o altă

locație, dependențele de care avem nevoie, și le salvează într-o memorie locală) .

3 Integrated Development Environment – Mediu de dezvoltare

Dumitriu Alexandru – Employee Manager

10

3.4 Hibernate Hibernate se ocupă cu persistența datelor într-o bază de date. Cu ajutorul acestui

ORM4 conectez baza de date la entitățile folosite în proiect. Astfel instanțele unor clase DTO5

sunt salvate automat în baza de date, care este specificată printr-un simplu fișier de

configurare.

În cadrul acestui proiect folosesc o versiune mai nouă de Hibernate ce-mi permite să

folosesc adnotări în clasele Java și nu sunt obligat să configurez totul din fișiere xml.

Acesta de asemenea suportă și o gamă destul de variată de configurări și extensii.

3.5 Spring Această bibliotecă oferă “suport pentru injectarea dependențelor, organizarea

tranzacțiilor, aplicații web, accesul la date, testare, etc.” [3] Pentru acest proiect nu folosesc

chiar tot ce poate oferi această bibliotecă însă anumite bucăți sunt destul de folositoare (ex:

injectarea dependențelor).

3.6 Tomcat

Figura 3.6—1 Tomcat Server

Este un server web dezvoltat și întreținut de către Apache Software Foundation.

Printre componentele sale se numără:

Catalina este un container servlet și implementează specificațiile impuse de “Sun

Microsystems”.

Coyote este o componentă “Connector” ce suportă protocolul HTTP ca și server web.

Acesta permite servletului să acționeze ca un server web ce oferă pagini http.

Jasper pentru motorul JSP;

Tomcat oferă totodată un mecanism de clusterizare, dar și alte caracteristici care îl fac să

fie unul din cele mai bune de pe piață atât ca viteză de procesare cât și siguranță și

scalabilitate.

4 Object/Relational Mapping -> Mapare Obiect/Relație

5 Data transfer objects -> Obiecte dedicate transferului datelor

Dumitriu Alexandru – Employee Manager

11

3.7 PostgreSQL (+PgAdmin) PostgreSQL este un ORDBMS6

dezvoltat de PostgreSQL Global Development Group,

ce se concentrează pe extensibilitate, dar și pe standardele de conformitate.

Ca și server principala sa calitate este stocarea datelor în siguranță și asigurarea

returnării acestora, când este necesar. L-am ales pe acesta în detrimentul altor ORDBMS-uri

deoarece mi s-a părut optim pentru proiectul meu, fiind ușor de configurat si oferind totodată

tot ceea ce aveam nevoie, acesta “implementând SQL:2001 , respectând principiile ACID

(atomicitate,consistență, izolare și durabilitate) și având suport pentru evitarea blocării

printr-un sistem bine definit de control multiversionat prin concurență” [7]. De asemenea

suportă proceduri și funcții stocate precum și triggere, view-uri, etc.

3.7.1 Detalii tabele

În această secțiune voi prezenta pe scurt câteva dintre tabelele cele mai importante

folosite de aplicația Employee Manager:

Figura 3.7—1 Tabela account

Pentru un mic plus de securitate, parola aleasă de utilizatori nu se salvează în clar ci se

aplică o funcție hash și rezultatul acesteia se introduce în baza de date. Chiar și serviciului rest

i se trimite doar hash-ul pentru a proteja pe cât posibil datele introduse de utilizatori.

Această tabelă este în strânsă legătură cu tabela Employee, aceasta fiind parțial

completată încă din formularul de înregistrare:

Figura 3.7—2 Tabela Employee

Tabela Avatar este cea în care se salvează poza de profil a fiecărui utilizator pe baza

id-ului acestuia:

Figura 3.7—3 Tabela Avatar

Coloana image are de fapt tipul BLOB în care se salveaza efectiv tot stream-ul de biți

din care este formată acea imagine, iar cea cuid-ul 9999 este una implicită care este folosită

pentru utilizatorii care nu au apucat să-și uploadeze o imagine proprie.

6 Object-Relational Database Management System -> Sistem de organizare al bazei de date obiect/relație

Dumitriu Alexandru – Employee Manager

12

Abilitățile fiecărui angajat sunt stocate în tabela Skills:

Figura 3.7—4 Tabela Skills

Iar voturile asupra acestora sunt legate prin tabela Skill_Evaluation:

de tabela Evaluation:

Figura 3.7—5 Tabela Skill_Evaluation

Figura 3.7—6 Tabela Evaluation

Salvarea proiectelor se face în tabela Project, la care coloana project_description a

fost modificată pentru a putea salva mai mult de 255 de caractere (limita maximă fiind acum

de 1000 de caractere):

Figura 3.7—7 Tabela Project

Event-urile se salvează în tabela Event:

Figura 3.7—8 Tabela Event

Distincțiile se salvează în tabela Achievement:

Figura 3.7—9 Tabela Achievement

Iar mail-urile în tabela email_send:

Figura 3.7—10 Tabela Email_send

Dumitriu Alexandru – Employee Manager

13

Pentru manipularea bazei de date am folosit pgAdmin III.

Figura 3.7—11 Interfața PgAdmin III

Așadar pgAdmin III este o interfață grafică ce ne permite să relaționăm cu baza de

date cu usurință, putând să facem diverse operații complexe prin simpla apăsare a unui buton.

3.8 HTML+CSS HTML7 este un limbaj de marcare utilizat pentru crearea paginilor web ce pot fi afișate

într-un browser” [5]. Acesta trebuie să respecte specificațiile impuse de World Wide Web

Consortium.

Așadar HTML-ul se folosește de etichete pentru a oferi indicații de afișare a unui

anumit document, acestea fiind procesate de browser și afișate corespunzător.

Pentru a stiliza și mai mult aceste documente am folosit atât CSS8-uri, dar și diferite

biblioteci ce sunt gratis și ne faciliteaza munca (Ex:Bootstrap).

7 HyperText Markup Language -> Limbaj de marcare HyperText 8 Cascading Style Sheets

Dumitriu Alexandru – Employee Manager

14

3.9 JavaScript (+AngularJS) “JavaScript este un limbaj de programare orientat obiect folosit mai ales pentru

introducerea unor funcționalități în paginile web, codul Javascript al acestora fiind rulat de

către browser” [9]. Acest limbaj mi se pare foarte atractiv și practic de aceea am ales să fac

modulul WEB utilizându-l împreună cu alte cateva biblioteci. În afara modalităților AJAX

(cereri http asincrone ce nu necesită reîncărcarea întregii pagini ci doar a unei secțiuni) mă

mai folosesc și de o bibliotecă specializată pe aplicații web pe o singură pagină și anume

AngularJS.

Figura 3.9—1 Funcționalități AngularJS [6]

Acestă bibliotecă adaptează și extinde HTML-ul tradițional pentru a prezenta conținut

dinamic prin “two-way data binding”9 care permite sincronizare dinamică între model si view

(toate schimbările din pagina web (ex:formulare) sunt văzute aproape instant în controllerele

din spate, dar și invers).

AngularJS implementează pattern-ul MVC10 pentru a separa prezentarea, logica și

datele propriu-zise. Specific Angular-ului este și cuvântul cheie “scope” ce arată când este

validă o anumită “asociere”.

În Angular se folosesc tipuri de variabile Javascript,metode și directive. O directivă

Angular este de forma ng-[NumeDirectivă]. Câteva din directivele folosite în acest proiect

sunt:

Ng-model: aceasta leagă view-ul de model. Am folosit-o mai ales prin

formulare pentru ușurința cu care se trimit datele în controller-ul din spate,

unde sunt procesate în funcție de necesitate. Dacă nu există o variabilă în spate

de care să se lege atunci se va crea una nouă.

Ng-repeat: aceasta repetă randarea unui anumit element sau set de elemente

pentru fiecare componontă a unei colecții. De exmplu am folosit această

directivă pentru a randa event-urile în pagină la care am adaugat condiția ca să

se afișeze doar un anumit număr din acestea:

Ng-show: aceasta afișează un element doar dacă condiția introdusă este

satisfăcută;

Ng-hide: opusul a ng-show, Ng-click, ng-controller, ng-app, etc.;

9 two-way data binding ->legare date in ambele sensuri(view<->model) 10 model-view-controller

Dumitriu Alexandru – Employee Manager

15

3.10 Google reCAPTCHA

Deși în mod normal această aplicație ar trebui să ruleze doar pe intranetul unei

firme/organizații, pentru un plus de securitate s-a utilizat și un „captcha” pentru a preveni

crearea conturilor de către așa zișii “roboți”.

Dupa ce am cercetat mai multe tipuri disponibile în acest moment pe piață, am ales

să folosesc unul oferit de către google atât datorită apectului plăcut, minimalist, cât si

datorită gradului de securitate oferit de către aceștia.

Figura 3.10—1 Google reCAPTCHA

Deoarece aplicația rulează pe localhost apare și o mică avertizare cu roșu, însă acest

lucru este irelevant, având în vedere faptul că își păstreaza funcționalitatea.

Acesta este mult mai atractiv pentru utilizatori față de cele în care trebuie să

introduci textul afișat într-o imagine.

Așadar după ce utilizatorul bifează căsuța din dreptul textului “I’m not a robot”, i se

va afișa o mică fereastră în care trebuie să selecteze imagini ce conțin anumite elemente

apoi să apese pe butonașul “Verify”.

Figura 3.10—2 reCAPTCHA ferestre de verificare

Dumitriu Alexandru – Employee Manager

16

Acesta mai verifică și pe baza altor criterii, de exemplu dacă utilizatorul este conectat

pe un cont de Gmail nu i se va afișa tot timpul această fereastră ci va primi aprobarea direct,

la fel și dacă a trecut o dată de testul reCAPTCHA, în viitorul apropiat nu va mai fi testat din

nou.

În cazul în care utilizatorul alege imaginile potrivite, căsuța se va completa cu o bifă verde:

Figura 3.10—3 reCAPTCHA verificare cu succes

În cazul în care acesta greșeste, i se vor oferi alte modalități de a dovedi că este

utilizator uman:

Figura 3.10—4 reCAPTCHA diferite metode de verificare

Dumitriu Alexandru – Employee Manager

17

4 Modularizarea proiectului

Pentru acest proiect funcționalitățile sunt împărțite astfel încât codul de pe modulul

WEB sa fie independent de modulele Java în care se efectuează efectiv comunicarea directă

cu baza de date

Comunicarea dintre aceste două componente se face prin intermediul unor servicii

REST.

Proiectele ce se ocupă efectiv cu expunerea serviciilor sunt cele scrise în Java:

Figura 3.10—1 Module Java

Iar partea de WEB este formată din modulul următor:

Figura 3.10—2 Modulul WEB

Am ales să separ în acest fel deoarece având în vedere viteza cu care această industrie

evoluează, tehnologiile folosite pe partea de web, deși în momentul de față sunt destul de noi,

la un moment dat pot să devină demodate/impractice în comparație cu ceea ce o sa apară pe

piață.

Așadar dacă se dorește schimbarea unei componente nu e necesar să se reînceapă de

la 0, modulele fiind complet independente.

Dumitriu Alexandru – Employee Manager

18

5 Setările de configurare

5.1 Configurări Maven

Pentru a putea folosi Maven este nevoie de fișierul intitulat pom.xml. În primul rând

în acesta se definesc id-ul, numele, versiunea, modul în care se doreste împachetarea (în

exemplul de mai jos este pom, dar pentru modulul WEB este de tipul war).

Figura 5.1—1 Exemplu configurări atribute pom.xml

Datorită separării în module a fost necesară folosirea a 5 fișiere de acest gen, fiecare

însă fiind legate între ele. Principalul se află în employee-manager-root, iar celelalte fac

referință la acesta prin:

Figura 5.1—2 Exemplu conectare cu pom-ul părinte

Tot în aceste fișiere se definesc un set de proprietăți de genul:

Figura 5.1—3 Exemplu proprietăți pom.xml

Dumitriu Alexandru – Employee Manager

19

Acestea pot fi referențiate mai jos astfel încât dacă la un moment dat se dorește de

exemplu folosirea unei alte versiuni jdk, nu trebuie modificat în 100 de locuri ci este de ajuns

modificarea unei singure linii din acest fișier.

O altă entitate ce se configurează în acest fișier sunt dependențele fiecărui modul în

parte. Acestea pot fi interne, adică un alt modul ce aparține aplicației Employee Manager:

Figura 5.1—4 Exemplu dependență internă

Dar pot fi și externe, iar în acest caz maven-ul se ocupă cu descărcarea și organizarea

dependenței respective:

Figura 5.1—5 Exemplu dependență externă

Totodată, se permite excluderea elementelor nedorite din anumite dependențe:

Figura 5.1—6 Exemplu excludere din dependență

Pe lângă acestea se mai pot configura diferite elemente, de exemplu cum se face build-

ul, profilul, modulele prezente,etc.

O altă caracteristică foarte importantă a acestor fișiere este faptul că pom-urile copil

pot moșteni proprietăți de la părinte. De exemplu se poate omite precizarea unei versiuni în

cazul în care aceasta este precizată în părinte.

Figura 5.1—7 Exemplu preluare versiune de la părinte

Dumitriu Alexandru – Employee Manager

20

Există totuși cazuri în care se dorește folosirea unei alte versiuni față de cea din

părinte. Nu este nici o problemă deoarece dacă se precizează și aici, atunci aceasta va

suprascrie pe cea din părinte.

Un alt element care se poate preciza acestor dependențe este momentul în care

avem nevoie de ele, prin atributul scope.

Figura 5.1—8 Exemplu setare scope

De exemplu, în cazul prezentat mai sus, această dependență este procesată doar în

etapa de testare a aplicației Employee Manager. Acest aspect cauzeaza o creștere

semnificantă a performanței.

5.2 Configurări bază de date

Figura 5.2—1 Fișiere de configurare BD

În aceste două fișiere se definesc o serie de bean-uri, adică obiecte ce sunt

instanțiate, asamblate și manageriate de către containerul Spring IoC11:

Figura 5.2—2 Spring Container[3]

11 Inversion of Control

Dumitriu Alexandru – Employee Manager

21

Configurațiile din metadata pot fi reprezentate atât în XML, cât și în adnotări Java.

Așadar unul din aceste bean-uri din fișierul employee-manager-db-config.xml este

următorul:

Figura 5.2—3 BD -> Configurare DataSource

Dupa cum puteți observa se precizează diferite proprietăți prin care să poată să comunice cu

serverul PosgreSQL și anume: uitilizator, parolă, driver, adresă, etc.

Pe lângă acesta, se mai definește și o listă de proprietăți:

Figura 5.2—4 Proprietăți hibernate

Acestea oferă hibernate-ului detalii cu privire la modul în care se dorește ca acesta să

acționeze.

De exemplu proprietatea “hibernate.show_sql” îi indică faptul că se dorește ca toate

operațiunile ce se fac în baza de date să se afișeze în consolă.

O altă proprietate interesantă este „hibernate.hbm2ddl.auto”. În momentul de față

este setat pe update, deci trebuie să facă doar actualizarea bazei de date și implicit tabelelor

acesteia. O altă valoare ce s-a mai folosit de-a lungul dezvoltării acestei aplicații este create-

drop: aceasta șterge tabelele și le crează din nou, fiind utilă atunci când au avut loc

schimbări în structura tabelelor, însă dezavantajul este că se pierd datele din aceste tabele.

În fișierul “employee-manager-model-config.xml” pentru ca bean-ul și lista de

propietăți enunțate mai sus să fie disponibile trebuie mai întâi ca fișierul ce le conține să fie

importat prin:

Dumitriu Alexandru – Employee Manager

22

Figura 5.2—5 Import proprietăți

Apoi se pot folosi în crearea bean-ului „entityManagerFactory”:

Figura 5.2—6 EntityManagerFactory

Așadar pe langă clasa de bază si id-ul, se precizează atât dataSource-ul și proprietățile

jpa definite mai sus, dar și pachetul în care am clasele DTO cu adnotările Hibernate.

5.3 Configurări mail:

Pentru a putea trimite un mail din aplicația Employee Manager a fost necesar ca mai

întâi în fișierul pom.xml să se adăuge urmatoarea dependență:

Figura 5.3—1 Dependență javax.mail

Apoi în fișierul employee-manager-services-config.xml se creează bean-ul “mailSender”

ce asociază detaliile unui cont Gmail, dar și alte proprietăți cu clasa “JavaMailSenderImpl”:

Figura 5.3—2 Proprietăți mail

Dumitriu Alexandru – Employee Manager

23

Acesta fiind folosit mai apoi în crearea următorului bean, prin care se leagă clasa

„Mail”de aceste proprietăți:

Figura 5.3—3 Conectare proprietăți mail

Însă, se pare că aceste configurări nu sunt suficiente. Atunci când se încearcă

trimiterea primului mail folosind configurările de mai sus, Gmail-ul nu va permite acest lucru,

având un sistem de Securitate ce împiedică accesul unor aplicații nesigure la anumite servicii,

cum ar fi cel de autentificare.

Figura 5.3—4 Gmail -> mesaj de avertizare

Din fericire cei de la Google au implementat și o metodă prin care se poate dezactiva

această măsură de securitate în plus din setările contului.

Figura 5.3—5 Gmail -> setări de securitate

După toate aceste configurări, serviciul de mail poate fi folosit cu success.

Dumitriu Alexandru – Employee Manager

24

6 Descriere aplicație

6.1 Creare cont

Pentru ca utilizatorii să se poată autentifica în aplicația Employee Manager este

nevoie ca mai întâi să-și facă un cont. Acesta este scopul următorului formular:

Figura 6.1—1 Formular creare cont

Acesta conține doar câmpuri obligatorii ce reprezintă informațiile de bază pe care

oricare angajat ar trebui să le aibă atunci când se autentifică pentru prima dată. Pentru un

Dumitriu Alexandru – Employee Manager

25

plus de securitate s-a adăugat și google reCAPTCHA pentru a împiedica accesul asa-zișilor

roboți.

Fiecare câmp conține validări, care, dacă nu sunt respectate vor menține starea

butonului Register inactivă. Imediat ce un câmp a fost alterat, i se vor oferi utilizatorului

indicații cu privire la modul în care acesta trebuie completat.

Validări:

Deoarece toate câmpurile sunt obligatorii, în cazul în care utilizatorul îl va lăsa

necompletat, următorul mesaj de avertizare va fi afișat:

Deoarece nu există încă o modalitate de a valida toate tipurile de email-uri

existente, acest câmp verifică existența unui „@” precedat si urmat de cel

puțin o literă. În caz contrar următorul mesaj va fi afișat:

Numărul de telefon introdus trebuie să conțină între 10 si 14 cifre, orice altă

combinație introduse cauzând apariția următorului mesaj de avertizare:

Parola trebuie să aibă minimum 6 caractere:

Confirmarea parolei trebuie să corespundă cu cea introdusă mai sus:

Dumitriu Alexandru – Employee Manager

26

6.2 Autentificare

După ce utilizatorul și-a creat un cont, acesta poate accesa Employee Manager

autentificându-se prin următorul formular:

Figura 6.2—1 Formular Autentificare

Și acesta conține diverse validări ca și formularul de înregistrare.

Figura 6.2—2 Exemplu validare

Dacă combinația uitilizator-parolă nu este validă se va afișa un mesaj mai general

pentru a nu ajuta eventualul atacator să afle dacă acel cont chiar există sau alte informații ce

l-ar putea ajuta:

Figura 6.2—3 Combinație uitilizator-parolă incorectă

În cazul în care utilizatorul introduce de mai mult de 3 ori consecutiv o combinație

uitilizator-parolă incorectă atunci va fi nevoit să treacă și de testul “captcha” explicat mai

sus:

Figura 6.2—4 reCAPTCHA pe formularul de autentificare

Dumitriu Alexandru – Employee Manager

27

6.3 Pagina principală

După autentificare utilizatorul va fi redirectat spre pagina de profil a aplicației

Employee Manager.

De la acest punct site-ul este împartit în 3 secțiuni:

6.3.1 Header

Figura 6.3—1 Header Employee Manager

Acesta va fi afișat în partea de sus a paginii. În momentul în care utilizatorul va

poziționa cursorul deasupra numelui, o mică fereastră va apărea din care se va putea

deconecta:

Figura 6.3—2 Pop-up deconectare

6.3.2 Meniu lateral

Figura 6.3—3 Meniu

Acest meniu este plasat în partea stângă și ne ajută la navigarea între diferitele pagini

ale aplicației Employee Manager.

6.3.3 Conținut

În funcție de opțiunea selectată din meniu în partea central-dreaptă se vor afișa

diverse informații ce sunt prezentate în cele ce urmează.

Dumitriu Alexandru – Employee Manager

28

6.3.3.1 Pagina de profil

Aceasta e pagina în care sunt prezente diferite detalii aferente uitilizatorului

autentificat. În primul rând i se afișează o imagine de profil:

Figura 6.3—4 Imagine de profil

Dacă nu a uploadat nici o altă poză, atunci i se va afișa o poză generică ca în

Figura 6.3—5, pe care o poate schimba prin apăsarea butonului atașat.

Apoi este afișat un formular în care sunt prezente atât detaliile introduse la crearea

contului, cât si detalii suplimentare:

Figura 6.3—6 Detalii utilizator

Dumitriu Alexandru – Employee Manager

29

Inițial câmpurile nu pot fi modificate, însă dacă angajatul dorește să facă acest lucru

este suficientă apăsarea butonului Edit, câmpurile devenind editabile:

Figura 6.3—7 Detalii utilizator editabile

Pentru anularea modificărilor se apasă butonul “Cancel”, iar dacă se dorește salvarea

acestora, utilizatorul trebuie să apese pe butonul “Save”. Un scurt mesaj se va afișa pentru

câteva secunde pentru a anunța utilizatorul dacă operațiunea s-a executat cu succes:

Figura 6.3—8 Mesaj de notificare la salvarea detaliilor

Dumitriu Alexandru – Employee Manager

30

O alta secțiune a paginii „My Profile” este cea de Distincții. Pentru că fiecare angajat

ar trebui sa fie motivat să dea tot ce e mai bun, în unele firme se încurajează acest aspect

prin oferirea anumitor distincții/premii.

Deoarece un angajat poate să aibă un numar mare de distincții, am decis ca inițial să

afișez doar două dintre ele:

Figura 6.3—9 Distincții

Prin apăsarea butonului “Show More” se vor afișa încă două, până ce sunt afișate

toate aferente acestui angajat. Dacă sunt afișate toate distincșiile, butonașul „Show More”

nu și-ar mai avea rostul, așa că nu va mai fi afișat în pagină:

Figura 6.3—10 Comportament buton "Show More"

Prin apăsarea butonul “Add achievement” un mic formular va fi afișat dedesubt:

Figura 6.3—11 Adăugare distincție

Dumitriu Alexandru – Employee Manager

31

După ce se introduc datele, va apărea și butonul „Save”, care nu va putea însă fi

apăsat decât dacă informațiile introduse sunt valide. Câmpul “Description” are o limita de

1000 de caractere, pentru eventualele cazuri în care este nevoie de o descriere mai pe larg.

Figura 6.3—12 Limita extinsă a câmpului "Description"

Aceste distincții au un efect psihologic destul de mare și ar trebui sa se dea cât mai

des și pentru motive variate. De exemplu pentru cele mai multe ore suplimentare în această

săptămână sau pentru că a ajutat juniorii din firmă și a fost cel mai lăudat de către aceștia,

etc.

Urmează apoi două secțiuni strâns legate între ele, Skills si Evaluation:

Fiecare angajat are anumite abilități, așadar acestea ar trebui sa apară pe pagina de

profil a acestuia. În aplicația Employee Manager afișarea acestora se face în așa fel încât să

motiveze lucrul în echipă și socializarea cât mai mult în compania care implementează acest

sistem. Am făcut puțină cercetare asupra acestui aspect și m-am gândit în final să fac ceva

asemănător cu LinkedIn, astfel angajatii ce utilizeaza aplicația să-și poată vota abilitățile

reciproc în funcție de activitatea prestată.

Rezultatul final este următorul:

Figura 6.3—13 Îndeletniciri angajat

Așadar, abilitățile ce apar în partea stângă au ca și corespondent o notă de la 1 la 5

reprezentată prin steluțe. Nota finală se calculează pur și simplu făcând media tuturor

notelor primite de la colegi pe o abilitate.

Pentru a aduce un plus acestui sistem, notele finale sunt afișate și sub forma unui

grafic folosind o bibliotecă Javascript.

Dumitriu Alexandru – Employee Manager

32

Figura 6.3—14 Grafic îndeletniciri angajat

Adăugarea unei alte abilități se face prin apăsarea butonul “Add Skill”, un mic

formular fiind afișat dedesubt:

Figura 6.3—15 Adăugare îndeletnicire

Opțional, se poate adăuga si o descriere a unei abilități, însă aceasta nu va fi afișată în

grafic. La apăsarea butonului „Save” noua abilitate va fi adăugată și va putea fi votată

imediat de către colegi.

După cum puteți observa nu se afișează nicăieri în aplicație angajatul care a votat,

deci se pastreaza anonimitatea votului. Acest lucru este necesar pentru a nu influența

veridicitatea votului. Dacă nu ar fi fost așa, acest sistem nu doar că nu ar mai fi evidențiat

adevarata valoare a unei abilități, ci ar putea chiar și stârni dispute între angajați dacă unul

din aceștia consideră că nota primită este sub ceea ce merită.

Ultima secțiune din această pagină se folosește pentru a vota îndeletnicirile colegilor:

Dumitriu Alexandru – Employee Manager

33

Figura 6.3—16 Evaluare angajat

Utilizatorul trebuie sa selecteze numele colegului a cărui skill dorește să-l voteze apoi

să apăse pe butonul „Give Evaluation”.

Așa cum se vede în Figura 6.3—18, se vor afișa toate abilitățile angajatului selectat,

acestea putând fi votate cu note de la 1 la 5.

Trebuie să mai precizez faptul că acest formular implementează și un sistem anti

trișat. Un utilizator nu poate să-și voteze propriile abilități, și am luat în considerare și

eventualele persoane care ar dori să crească sau să scadă rating-ul altora, votând de mai

multe ori una din abilitățile unui anumit angajat. Pentru a împiedica acest lucru, notele

oferite vor suprascrie notele mai vechi date de către același angajat aceleiași abilități ale

colegului. Asta poate fi un avantaj și pentru că la un moment dat ne putem răzgandi:

De exemplu un coleg m-a ajutat mai demult să repar o bucățică de cod JavaScript ce

avea o problemă cu un grad de dificultate ridicat. La acel moment am crezut că el cunoaște

foarte bine această tehnologie și am decis să-i dau nota maxima acestei abilități. Totuși, pe

parcurs tot același coleg a integrat pe mai multe fișiere JavaScript pe care lucrasem și eu, o

sumedenie de BUG-uri. Așadar, m-am răzgândit cu privire la nota pe care ar merita-o asa că

mai votez o dată cu o altă notă, ce va suprascrie nota mea inițială.

Figura 6.3—17 Evaluare îndeletniciri angajat

Dumitriu Alexandru – Employee Manager

34

6.3.3.2 Evenimente

În fiecare companie există periodic anumite evenimente la care pot participa

angajatii. Acestea pot fi atât interne cât și externe, la care este nevoie de invitație, sau au

intrarea liberă.

Așadar, această aplicație oferă o modalitate prin care angajații să poată fi la curent cu

evenimentele ce au legătură cu compania.

Figura 6.3—19 Detalii de bază eveniment

Având în vedere că majoritatea evenimentelor sunt promovate prin filmulețe, am

considerat că este necesar să putem atașa și noi unul în descrierea acestuia:

Figura 6.3—20 Filmuleț de prezentare eveniment

Dumitriu Alexandru – Employee Manager

35

Pentru adăugarea filmulețelor, se permit link-uri youtube variate. De exemplu merge

atât inserarea unui filmuleț dintr-un playlist ce are link-ul în felul următor:

https://www.youtube.com/watch?v=VbQGMnioKWQ&index=5&list=LLFrlkwukvO_L7E7LX4a

5xCA” , dar și link-uri de genul „https://www.youtube.com/watch?v=gMbPVEsaH90” sau

embedded ca în exemplul din Figura 6.3—21.

Fiecare event poate avea și o anumită locație atașată:

Figura 6.3—22 Coordonate eveniment

Pentru a ajuta utilizatorul să găsească mai ușor locația evenimentului, aplicația

Employee Manager se folosește de “Google Maps API”. Așadar la apăsarea butonului “Show

Directions” se va afișa:

Figura 6.3—23 Afișare drum până la destinație

Coordonatele pot fi atât sub forma unei adrese, ca în exemplul de mai sus, dar

și sub forma unor coordonate geografice latitudine,longitudine. Cu cât adresa este mai

precisă cu atât locația căutată va fi detectată mai cu o marjă de eroare mai mică.

Pe hartă va fi așadar afișat drumul pănă la această locație, punctul de pornire

putând fi detectat din browser, atâta timp cât nu este blocată detectarea locației. Traseul

este în mod mașină, aceasta fiind cea mai folosită metodă de deplasare.

Dumitriu Alexandru – Employee Manager

36

Harta, la fel ca pe Google Maps permite atât scroll-ul, cât și zoom-ul, și chiar și

celebrul Street View.

Aceste evenimente sunt limitate inițial la două pe pagină, însă prin apăsarea butonul

“Show More” alte două vor fi afișate, până la afișarea tuturora, butonașul dispărând în acest

punct.

Prin apăsarea butonului “Add Event” de la începutul paginii se adaugă un nou

eveniment:

Figura 6.3—24 Formular adăugare eveniment

În aplicația Employee Manager fiecare utilizator are dreptul să adauge un eveniment,

acesta devenind accesibil tuturor colegilor. Nu s-a restricționat acest drept, deoarece s-a

considerat că fiecare utilizator poate dispune de o informație ce merită transmisă mai

departe.

Dumitriu Alexandru – Employee Manager

37

6.3.3.3 Mail

Această aplicație conține și o modalitate prin care angajații să transmită informații între

ei într-un mod rapid și eficient printr-o pagină destinată trimiterii mail-urilor.

Aceasta conține câmpuri obligatorii pe care orice mail ar trebui să le conțină (destinatar,

subiect, mesaj):

Figura 6.3—25 Câmpuri obligatorii mail

Putem totodata trimite și imagini prin câmpul:

Figura 6.3—26 Câmp imagine

Pe lângă acesta există și posibilitatea trimiterii altor tipuri de fișiere:

Figura 6.3—27 Câmp atașament

Primele 3 tipuri sunt mandatorii, iar celelalte două sunt opționale. După ce informațiile

au fost inserate, este suficientă apăsarea butonului si mail-ul va fi trimis.

Dumitriu Alexandru – Employee Manager

38

6.3.3.4 Proiecte

Fiecare companie din IT trebuie să aibă un set de proiecte la care a lucrat sau lucrează în

acest moment, așadar este necesară o pagină prin care pot fi adăugate și vizionate ușor toate

proiectele companiei respective.

Figura 6.3—28 Proiecte

Deoarece un angajat poate fi interesat doar de un singur proiect, acesta nu ar trebui să fie

obligat să vizualizeze detaliile tuturor celorlalte proiecte. Așa cum se vede în imaginea de mai

sus, pe pagina de proiecte se afișează inițial doar titlul, dar în cazul în care se dorește

vizualizarea completă, prin apăsarea butonului Show Details vor fi afișate detalii

suplimentare (descriere, data de început, data de sfârșit, status):

Figura 6.3—29 Detalii proiect

Orice proiect poate fi editat, iar modificările vor fi reținute în baza de date la apăsarea

butonului “Save”.

Utilizatorul are totodată și posibilitatea de a adăuga un nou proiect prin apăsarea

butonului “Add Project”.

Dumitriu Alexandru – Employee Manager

39

7 Aplicații similare

7.1 LinkedIn

Una din aplicațiile asemănătoare existente pe piață în acest moment este LinkedIn.

Aceasta e o platforma de socializare, care spre deosebire de facebook, twitter sau Instagram,

este orientată spre mediul de afaceri.

Figura 7.1—1 LinkedIn

Acesta permite utilizatorilor sa-și facă un profil pe baza căruia poți fi contactat în

vederea obținerii unei slujbe, sau dacă-ți faci cont din postura de angajator, îți va permite să

cauți potențialii candidați.

LinkedIn implementează un sistem de „endorsement” prin care abilitățile tale pot fi

recomandate de către prietenii tăi.

Unul din dezavantajele acestei aplicații este acela că este una publică, iar pentru a

avea un sistem de gestiune al angajaților corespunzător, acesta ar trebui să ruleze doar pe

intranet-ul companiei.

Un alt dezavantaj este că spre deosebire de aplicația mea, unde poți efectiv să dai o

notă ablităților unui coleg, pe linkedIn poti doar să le recomanzi.

Un alt avantaj al aplicației mele este acela că tratează si evenimentele din companie,

dar și proiectele pe care le manageriază.

Dumitriu Alexandru – Employee Manager

40

8 Direcții de viitor

8.1 Privilegii utilizatori

Una din îmbunătățirile pe care le poate suferi aplicația Employee Manager este adaugarea

unui sistem de privilegii ale utilizatorilor.

Prin acesta ar putea să existe utilizatori care să fie simpli angajați care să nu aibă

posibilitatea să adauge de exemplu evenimente sau proiecte, dar și utilizatori care să aibă

acest privilegiu.

Un alt tip de utilizator ar trebui sa fie admin-ul. Acesta ar trebui să aibă acces la o pagină

suplimentară care să-i arate informații confidențiale pentru restul utilizatorilor. De exemplu

acesta ar trebui să poată nu doar să vizualizeze media notelor primite de un anumit utilizator

asupra unei îndeletniciri, ci să poată vedea efectiv de la cine a primit voturile, precum și ce

voturi a oferit și cui. Analizând toate acestea, el ar putea să afle tot felul de informații despre

angajați, putând acționa în consecință pentru un o mai bună organizare în firmă.

Totodată, un admin ar putea să detecteze acele voturi nepotrivite care ar trebui să-i dea de

gândit asupra persoanei care a dat acel vot.

De exemplu să zicem că anumiți angajați au aproximativ 50 de note de 4 sau 5 (pe o scară

de la 1 la 5) pe anumite ablități. Admin-ul observă însă că aceștia au primit însă si cate o notă

de 1 pe aceleași îndeletniciri de la un singur angajat. Având în vedere această discrepanță,

câteva semne de întrebare ar putea sp apără în legatură cu persoana care a oferit aceste voturi.

8.2 Pagină dedicată comunicării cu clientul

O altă posibilă îmbunătățire a acestei aplicații ar putea fi crearea unei pagini pentru clienți

în care aceștia ar putea atât să primească informații utile, dar și să le ofere.

Ar putea să existe o secțiune în care clienții să comunice direct cu angajații, în care să

poată să-și prezinte anumite idei noi, ce ar dori să fie implementate, sau în care să anunțe ce

schimbări ar dori să se facă pe proiectul aflat în derulare.

Astfel, s-ar ușura comunicarea între client și companie, putându-se ajunge la un consens

mai ușor în privința anumitor chestiuni, iar fiecare utilizator ce are drepturile necesare va

putea fi la curent cu toate noutățile.

Dumitriu Alexandru – Employee Manager

41

9 Concluzii

Având în vedere cele prezentate mai sus, cred că aplicația Employee Manager este

capabilă să crească productivitatea din compania în care ar fi implementată prin diferitele

sisteme pe care le implementează:

Motivația angajaților de a se ajuta reciproc și efectiv comunicarea și

socializarea între colegi ar trebui să fie îmbunătățită prin sistemul de votare al

ablităților;

Analizarea de către admini a diferitelor calități sau defecte ale angajaților,

ajutându-i să ia anumite decizii în privința acestora;

Comunicarea între angajați ar fi de asemenea ușurată prin sistemul de mail

intern prin care se pot transmite atât mesaje, cât și imagini sau alte atașamente.

Altă sursă de motivare a angajaților ar putea fi răsplătirea acestora cu distincții;

Utilizatorii au acces ușor la informații, aceștia putând oricând să vadă

evenimentele care au avut loc, sau care vor avea loc în companie, precum și

proiectele la care se lucrează sau s-a lucrat la un anumit moment în aceasta.

Utilizatorii au posibilitatea să ofere informații colegilor, putând să adauge

evenimente sau proiecte, care sunt publice.

Un alt beneficiu al aplicației este că în cazul în care s-ar dori doar schimbarea

modulului WEB nu este nevoie să se schimbe și partea de comunicare cu baza de date,

serviciile REST încă putând fi folosite fară probleme.

Dumitriu Alexandru – Employee Manager

42

10 Bibliografie

[1] Oracle Corporation, What is Java technology and why do I need it?

https://java.com/en/download/faq/whatis_java.xml

[2] Tech Target, Tomcat

http://searchsoa.techtarget.com/definition/Tomcat

[3] TutorialsPoint, Spring - IoC Containers

http://www.tutorialspoint.com/spring/spring_ioc_containers.htm

[4] Google Inc., reCAPTCHA

https://developers.google.com/recaptcha/

[5] W3schools, HTML Introduction

http://www.w3schools.com/html/html_intro.asp

[6] Dan Wahlin, AngularJS in 60 Minutes

http://fastandfluid.com/publicdownloads/AngularJSIn60MinutesIsh_DanWahlin_May

2013.pdf

[7] Wikipedia, PostgreSQL

https://en.wikipedia.org/wiki/PostgreSQL

[8] Cristian Frăsinaru, Curs practic de Java

http://web.info.uvt.ro/~iordan/P_III/Cristian_Frasinaru-Curs_practic_de_Java.pdf

[9] About Tech, What Is JavaScript?

http://javascript.about.com/od/reference/p/javascript.htm