– Anul susținerii – 2018 [609372]
UNIVERSITATEA ”SPIRU HARET” BUCUREȘTI Facultatea de Inginerie, Informatică și Geografie, București SISTEM DE MANAGEMENT AL ORGANIZAȚIILOR LUCRARE DE LICENȚĂ
Coordonator științific: Profesor Universitar Doctor Grigore Albeanu Student: [anonimizat] 2018
Introducere În ziua de astăzi, folosirea internetului și a aplicațiilor software este necesară și benefică pentru orice organizație, asociație sau afacere. Când discutăm despre organizații în general, întâmpinăm multe probleme legate de modul de funcționare al organizației, de resursele disponibile, de numărul și activitățile membrilor și multe altele. Problemele apar în mod natural, dar noi trebuie să le rezolvăm, iar primul pas este să conștientizăm ca avem probleme. Un sistem de management înglobat într-o aplicație software de tip ERP (Enterprise Resource Planning) ne poate ajuta în acest sens, aducându-ne toate avantajele tehnologiei în interiorul organizației: viteză, capacitate de stocare, posibilitate de backup, accesibilitate, multiple funcționalități, control asupra utilizatorilor și permisiunilor acestora, posibilitatea integrării cu multiple sisteme, dar mai ales posibilitatea de a extinde capabilitățile sistemului. De asemenea, un sistem de tip ERP ne poate ajuta să înțelegem organizația din alte perspective, existând posibilitatea prezentării unor rapoarte sau grafice. În acest fel, putem înțelege evoluția organizației și putem observa noi posibilități de dezvoltare pentru aceasta. Există sisteme de tip ERP, destul de generice sau orientate către anumite domenii de activitate, care sunt deja lansate și pot fi folosite în baza unei licențe. În funcție de complexitatea organizației, dar și de disponibilitatea de a transforma un astfel de sistem pentru nucleu pentru funcționarea acesteia, se recomandă dezvoltarea unui astfel de sistem personalizat, în conformitate cu nevoile specifice ale organizației. Această lucrare are scopul de a prezenta avantajele unui astfel de sistem, costurile și implicațiile dezvoltării, menținerii și utilizării acestuia, și de a determina persoanele, responsabile cu administrarea unor organizații, să conștientizeze nevoia utilizării unei astfel de platforme, pentru a avea o organizație adaptată la tehnologia prezentului. Un sistem de tip ERP este util pentru orice fel de organizație, indiferent de mărimea sau scopul ei. Desigur, în cazul unei organizații cu foarte mulți membrii sau angajați, utilitatea unui astfel de sistem este mai pronunțată. În companiile foarte mari, în corporații, numărul mare de angajați generează o mulțime de probleme. Este greu să urmărești evoluția, performanța, prezența și valoarea adusă în firmă de fiecare persoană. Dacă, în condiții normale, gestionarea numerelor mari este o problemă, imaginați-vă cât de greu este să gestionezi un număr mare de angajați într-un moment de criză. Aplicația software dezvoltată de mine, în cadrul acestei lucrări, ajută la rezolvarea unor probleme legate de angajați, atât în situații normale, cât și în situații de criză.
Analizând piața, am observat că există tot mai multe companii și instituții care își instalează sisteme de control al accesului, bazate pe cartele de acces și turnicheți. Tot în urma acestei analize, am observat faptul că există puține sisteme de tip ERP care integrează sistemele de control al accesului sau care generează rapoarte și date adiționale bazate pe informațiile primite de la sistemul de control al accesului. Problemele tratate de această aplicație sunt legate de prezența și pontajul angajaților, pentru a ajuta managerii și celelalte departamente din firmă să-și facă treaba, dar și pentru a ajuta la soluționarea situațiilor de criză. Managerii pot determina cât de eficienți sunt angajații, analizând numărul de ore lucrate de o echipă într-o anumită perioadă și progresul proiectului la care aceștia lucrează. De asemenea, funcționalitățile sistemului ajută și alte departamente să-și facă treaba. Spre exemplu, departamentul de contabilitate ar putea folosi rapoartele legate de pontajul angajaților pentru a calcula salariile acestora. În cazul unui incendiu sau unui cutremur, atât reprezentanții firmei, cât și forțele de ordine, pot folosi anumite rapoarte pentru a determina persoanele care erau prezente în clădire la momentul producerii unui astfel de eveniment. Având o listă cu persoanele evacuate și o listă cu persoanele prezente în clădire, putem determina dacă mai există persoane care au nevoie de ajutor sau despre a căror stare nu știm încă. O astfel de funcționalitate se poate dovedi vitală. Aplicația prezentată are ca obiectiv să ofere posibilitatea de a genera diferite tipuri de rapoarte, pentru a ajuta la gestionarea resurselor umane dintr-o organizație sau companie. Informațiile necesare rapoartelor vor fi extrase din baza de date a unui sistem de control al accesului și vor fi prelucrate în vederea rapoartelor. Baza de date conține informații despre pontajul angajaților pentru o perioadă de timp, ce poate fi selectată de utilizator, iar prin prelucrarea acestor informații putem determina persoanele prezente în clădire la un anumit moment și putem genera o listă cu angajații care absentează. În acest sens, aplicația are următoarele caracteristici: 1. Aplicația are o arhitectură de tipul client-server. Aceasta structură oferă posibilitatea de a implementa aplicația ca un modul adițional la un sistem software deja existent. De asemenea, întreaga responsabilitate asupra securității și calității aplicației va fi în partea de server, care poate fi controlată de dezvoltatori. 2. Interfața grafică este prietenoasă și livrată sub forma unui website. Astfel, utilizatorii nu vor fi nevoiți să instaleze sau să actualizeze aplicația pe mașinile lor locale. Aceștia vor putea accesa aplicația în baza conturilor furnizate de departamentul IT al companiei, conturi ce pot fi limitate în baza unor permisiuni.
3. Aplicația are o structură modulară pentru a putea fi ușor de adaptat, în funcție de cerințele unui potențial client, și ușor de integrat. Integrarea cu un sistem deja existent poate conduce la noi funcționalități: – se poate integra cu sistemele responsabile pentru situațiile de urgență: spre exemplu, ar putea comunica cu centrala anti-incendiu disponibilă în clădire, generând un raport cu persoanele prezente în clădire la momentul declanșării evenimentului și trimițându-l prin e-mail persoanelor responsabile cu gestionarea evenimentului; – poate să ofere posibilitatea generării în mod automat a rapoartelor, la intervale de timp predefinite; – departamentul IT poate avea control asupra conturilor care folosesc aplicația, folosind conturi de Active Directory sau conturi specifice organizației; – departamentul IT poate avea control și asupra permisiunilor pe care le au utilizatorii; – descărcarea rapoartelor este posibilă în formatul PDF; În primul capitol, voi prezenta conceptul de ERP (Enterprise Resource Planning), așa cum este el prezentat de literatura de specialitate și așa cum ar trebui să fie înțeles, în mod corect, de către cei interesați de utilizarea unui astfel de sistem. Primul capitol încearcă să definească acest concept, mai ales pentru cei care nu au mai luat contact cu acesta, pentru a facilita înțelegerea utilității și posibilităților unui astfel de sistem. În cel de-al 2-lea capitol, voi prezenta cele mai cunoscute ERP-uri existente în piață, câteva funcționalități ale acestora, dar și alte detalii legate de acestea. În cel de-al 3-lea capitol, voi prezenta tehnologiile folosite pentru dezvoltarea aplicației ce însoțește această lucrare, dar și avantajele lor. Desigur, pentru dezvoltarea unui astfel de sistem se pot folosi și alte tehnologii, fiecare dezvoltator alegând tehnologiile cu care lucrează, în funcție de preferințele proprii sau ale clientului, dar și de restricțiile infrastructurii sau tehnologiilor prezente. De asemenea, voi prezenta și specificațiile legate de infrastructura necesară pentru a susține o astfel de aplicație. Tot în acest capitol, voi arăta modul de configurare al infrastructurii folosite de mine în cadrul acestui proiect. Cel de-al 4-lea capitol cuprinde funcționalitățile implementate în cadrul aplicației care însoțește această lucrare, prezentând detaliile acestora. În acest capitol voi prezenta funcționalitățile din punct de vedere conceptual, tehnic, dar și beneficiile aduse de acestea. Cel de-al 5-lea capitol reprezintă ultimul capitol al lucrării și prezintă posibilitățile de extindere ale aplicației, sub forma unor idei ce pot fi implementate în viitor.
Capitolul I Enterprise Resource Planning. Definiții, principii și caracteristici Sistemul de planificare a resurselor întreprinderii (abreviat ERP în limba engleză) este instrumentul software care facilitează integrarea tuturor informațiilor dintr-o organizație într-o platformă unică. Scopul ERP este să asigure transparența datelor în cadrul unei organizații și să faciliteze accesul la orice tip de informație utilă în desfășurarea activității. Istoria sistemelor ERP datează din anii 1960 cand acest tip de aplicație software era folosit cu preponderență pentru asistarea procesului de producție. Primul produs de acest tip a fost MRP (Material Resource Planning). Deși utile in activitatea de producție, aceste aplicații nu iși extindeau functionalitățile și spre alte zone de interes pentru o întreprindere, precum contabilitate, resurse umane, vânzări etc. Începând cu anii ’90 sistemele ERP au început să ia forma aplicațiilor actuale. Deși după apariția MRP, funcționalitățile acestui tip de programe au început să se extindă, ERP-ul actual a luat ființă în momentul în care informațiile au putut fi centralizate într-o platformă comună și funcționalitățile sale au fost integrate. Astăzi, sistemele ERP fac un nou pas în dezvoltarea lor prin utilizarea internetului pentru eficientizarea funcționalităților. Clienții de la mii de kilometri distanță pot avea acces la stadiul propriei comenzi sau la stocurile companiei furnizoare prin integrarea facilităților ERP cu aplicațiile WEB. Funcționalități Sistemele ERP, sunt programe modulare, fiecare arie de activitate a companiei fiind acoperită de catre o aplicație specifică. Modulele unui sistem ERP funcționează integrat utilizând o bază de date comună, sau pot funcționa independent. Pot fi enumerate câteva categorii de module care servesc la gestionarea cu eficiență a unei întreprinderi: -Producție: planificarea și urmărirea producției -Gestiune: evidența stocurilor, a furnizorilor, a plaților și încasărilor -Salarii: calculul salariilor și managementul informațiilor referitoare la personal -Contabilitate: evidența financiar-contabilă -Imobilizări: evidența mijloacelor fixe și calculul amortizării -CRM: managementul relațiilor cu clienții -BI: rapoarte, analize, prognoze
Caracteristici ERP este un sistem vast de planificare a resurselor companiei cu funcționalități suplimentare extrem de evoluate și de performante. Caracteristici principale: -organizează procesele și activitățile de afaceri punând la dispoziție informații rapide, concrete și concise; -are abilitatea de a se adapta rapid la schimbările permanente ale mediului comercial cu întreruperi minime ale activităților companiei; -aferă o interfață de utilizare modernă care va crește productivitatea prin scutirea timpului de lucru aferent operării; -va sprijini luarea deciziilor manageriale pe baza unor informații inteligente oferite în timp real; -prin achiziția unui ERP, investiți în instrumente inovatoare, ușor de folosit, adoptați tehnici de afaceri moderne și îmbunătățiți randamentul afacerii; -prin utilizarea unui ERP rămâneți în top într-un mediu de afaceri competițional și mereu schimbător; -compania dumneavoastră va avea de câștigat prin utilizarea aplicației, scutind resurse și timp și reducând costurile; -cu ajutorul unui ERP puteți obține rezultate măsurabile: atribuțiile dumneavoastră sunt îndeplinite cu minim 40% mai repede decât timpul necesar altor sisteme; -activitățile vor fi executate într-un mod mai rapid și mai liniștit ca rezultat al utilizării interfeței ușor de accesat, mecanismelor încorporate pentru planificarea activităților și pentru funcționalitatea și controlul fluxului de lucru; -informația va fi prezentată într-un format gata de utilizat, conform necesităților personalului care utilizează aplicația. Soluția ERP înglobează de asemenea și scenarii de business intelligence, gata de utilizat. Prin urmare, și aspectele problematice, dar și posibilitățile de dezvoltare vor fi mai ușor de identificat și de acționat asupra lor; -activitatea dumneavoastră comercială va dobândi flexibilitatea și energia necesară în piață; -comunicarea dintre companie și clienți va deveni mai rapidă și mai eficientă.
Capitolul II Sisteme ERP disponibile în piață Acest capitol prezintă cele mai cunoscute sisteme ERP disponibile în piață, numărul total al acestor sisteme fiind destul de mare. În România, topul jucătorilor pe piața soluțiilor ERP include nume precum Oracle, SAP, IBM, Microsoft, Senior Software, conform Pierre Audoin Consultants, firmă cu capital privat, specializată în cercetare de piață și consultanță pentru piața de software și servicii IT&C. La nivel mondial, principalii jucători în domeniul sistemelor ERP sunt: 1. NetSuite Inițial proiectat ca un sistem contabil, NetSuite a crescut treptat într-un ERP complet cu CRM, HR și funcționalitatea de business intelligence. Un lider în Cloud ERP, NetSuite susține în prezent mai mult de 20.000 de companii. 2. IQMS EnterpriseIQ Manufacturing ERP Software Produsul pilot IQMS, EnterpriseIQ ERP, este dezvoltat special pentru afacerile mici și mijlocii și producătorii mari din industria aerospațială, industria dispozitivelor medicale, industria automobilelor, alimente și băuturi, produse de consum, industria plastică și ambalare și industria electronică. Soluția IQMS poate fi implementată în infrastructura clientului sau în sistemele de cloud, publice sau private. Soluția oferă funcționalități integrate de planificare a resurselor întreprinderii și operațiuni de producție, inclusiv contabilitate, CRM, achiziționare, EDI (Electronic Data Interchange – schimb electronic de date), raportare și informații de afaceri, planificare și planificare a producției, producție, control în timp real al magazinului, calitate, lanț de aprovizionare și de management. Software-ul EnterpriseIQ ERP oferă instrumente pentru monitorizarea, urmărirea și comunicarea activităților comerciale pe tot parcursul procesului de distribuție. Modulul de estimare și de cotare ajută la crearea unei cote precise de vânzare. Modulul de inventar contribuie la facilitarea conceptelor de management al producției prin construirea unui registru de inventar separat pentru fiecare locație. 3. Acumatica Software Acumatica ERP furnizează soluții de planificare a resurselor unei întreprinderi cu soluții de tip cloud și mobil, cu un model de licențiere a utilizatorilor care permite vizualizarea în timp real a operațiunilor de afaceri în orice moment, de oriunde. Printr-o rețea
globală de parteneri, Acumatica ERP oferă o gamă completă de aplicații integrate de management al afacerii, inclusiv financiar, distribuție, contabilitate și servicii profesionale. Sistemul de gestionare a distribuției de la Acumatica permite utilizatorilor să gestioneze cotații și comenzi, să înregistreze inventar, să automatizeze achizițiile, să îmbunătățească serviciile pentru clienți și este pe deplin integrat cu CRM, financiar, producție și contabilitate de proiect, pentru vizibilitate în întreaga organizație. Proiectul contabil al Acumatica oferă caracteristici necesare pentru gestionarea bugetelor, a foilor de pontaj, a inventarului de proiecte și a facturării complexe. Acesta acceptă instrumente contabile integrate, cum ar fi registrul general, conturile de plătit, conturile de încasat, comenzile de vânzări, comenzile de achiziție, gestionarea inventarului și aplicațiile mobile folosite în vederea timpului și cheltuielilor. Utilizatorii pot compara, de asemenea, costurile reale ale proiectului cu bugetele originale și revizuite. 4. E2 Manufacturing System Sistemul E2 MFG al Shoptech este o soluție complet integrată de planificare a resurselor unei întreprinderi (ERP), concepută pentru producători discreți de toate dimensiunile. Setul de caracteristici E2 MFG System include programarea vizuală a tabloului de bord, graficul Gantt pentru joburi, citarea și estimarea, managementul relațiilor cu clienții (CRM), configuratorul de produse, EDI, managementul calității, MRP și prognozarea indicatorilor cheie de performanță (KPI), rapoarte de afaceri și raportare a costurilor și informații financiare complete. Shoptech Industrial Software vinde și sprijină sistemul E2 MFG direct printr-o rețea națională de birouri regionale și centre de instruire.
Capitolul III Tehnologii utilizate “Sistemul de management al organizațiilor” este dezvoltat în limbajul PHP, folosind framework-ul Laravel, pentru partea de back-end. Pentru partea de front-end am folosit HTML, CSS, Bootstrap, Javascript si jQuery. Ca baze de date, am folosit MongoDB si MySQL. Aplicatia este gazduita pe un server aflat in cloud-ul Digital Ocean, care ruleaza Linux Ubuntu 16.04. Request-urile facute catre server sunt servite prin intermediul webserver-ului Nginx, care este configurat pe server. Codul aplicatiei a fost versionat folosind Git si Bitbucket. III.1. Notiuni generale Arhitectura client-server Arhitectura client-server este o arhitectura care se ocupa cu partajarea de informatii, în care unul sau mai mulți clienți solicită și primesc servicii de la un server. Comunicarea se realizeaza prin intermediul retelelor de calculatoare, clientii si server-ul avand suporturi hardware diferite. Computerele client oferă o interfață care permite utilizatorului să solicite servicii ale serverului și să afișeze rezultatele pe care server-ul le întoarce. Serverul așteaptă cererile clienților, le proceseaza și apoi trimite raspunsurile. Clienții sunt adesea situați pe calculatoare personale sau pe dispozitive mobile personale, în timp ce serverele sunt situate în altă parte a rețelei, de obicei pe mașini mai puternice. Pentru ca in ziua de astazi aplicatiile web sunt extrem de populare si au foarte multi utilizatori, serverele primesc foarte multe cereri. Pentru a putea raspunde tuturor cererilor intr-un timp rezonabil, resursele serverelor trebuiesc scalate in mod corespunzator. Din fericire, arhitectura client-server permite acest lucru, clientul nefiind constient de ceea ce se intampla in partea de server si nici de configuratia acestuia. Cat timp server-ul ruleaza, clientul nu este impactat in niciun fel de modificarile facute server-ului sau partii de server a aplicatiei. El doar trimite o cerere si primeste un raspuns. O aplicatie care este dezvoltata pe arhitectura client-server are doua parti: partea de back-end (partea aplicatiei care se executa pe server) si partea de front-end (partea aplicatiei care se executa pe masina clientului. Partea de front-end ofera o interfata grafica, in general prietenoasa, prin intermediul careia utilizatorul poate trimite cereri catre server si primi raspunsuri de la acesta, prezentate intr-un mod usor de inteles de catre utilizator.
Aplicatii web Aplicatiile web au evoluat foarte mult in ultima perioada si ofera acum functionalitati si performante similare cu cele ale aplicatiilor software traditionale, de tip desktop. Viteza internetului permite schimbul multor mesaje, de dimensiuni din ce in ce mai mari, intre clienti si server. De asemenea, functionarea serverelor in cloud si automatizarea scalabilitatii acestora ofera, in momentul de fata, posibilitatea de a avea oricata putere de procesare avem nevoie. Aplicatiile web ofera multe avantaje fata de aplicatiile de tip desktop, dintre care amintim faptul ca nu necesita instalare (scutind astfel timp si spatiu de stocare pe calculatorul personal), actualizarea se face fara efort din partea utilizatorului, iar detinatorul aplicatiei are un control mai bun asupra acesteia, control care reduce posibilitatea ca un utilizator neautorizat sa foloseasca aplicatia. Principalul dezavantaj pentru utilizator este dat de faptul ca este dependent de o conexiune la internet, dar in ziua de astazi, acest lucru nu mai reprezinta o problema, cel putin nu una majora. Principii de design Pentru a avea succes, un website trebuie sa fie unic si sa se distinga prin elemente de design si continut. Crearea unui design unic si placut garanteaza faptul ca utilizatorii vor retine foarte usor site-ul si vor fi tentati sa-l foloseasca. De asemenea, daca ne construim bine brand-ul, utilizatorii vor asocia elementele asemanatoare cu cele folosite de noi, cu site-ul nostru. In general, partea de front-end are mai multe etape de dezvoltare, care pornesc din afara echipei tehnice. De obicei, o echipa de designeri este insarcinata cu a livra un design placut si intuitiv. Prima etapa a design-ului este cea de planificare. In aceasta etapa se analizeaza functionalitatile pe care trebuie sa le ofere website-ul si se incearca oferirea celei mai simple variante de design, pentru ca website-ul sa fie intuitiv si usor de utilizat. In a doua etapa se stabilesc caracteristicile legate de stil: ce culori folosim, ce fonturi, ce layout, cum trebuie sa arate logo-ul etc. A treia etapa este cea de dezvoltare efectiva a design-ului, etapa la sfarsitul careia echipa trebuie sa livreze imagini sau poze cu aspectul efectiv al website-ului, dar si specificatiile legate de fonturi, dimensiuni, spatii etc. In a patra etapa de dezvoltare a partii de front-end, programatorii dezvolta efectiv interfata grafica astfel incat sa poata fi legata usor de partea de back-end. Pentru interfetele
grafice ale aplicatiilor web, programatorii folosesc in general HTML, CSS (SASS/LESS), Javascript si librarii de Javascript (jQuery, AngularJS, ReactJS etc.). Ultima etapa in dezvoltarea unei interfete grafice o reprezinta popularea acesteia cu continut. Web Framework Un framework web este o unealta care are scopul de a facilita dezvoltarea unui proiect, prin automatizarea functionalitatilor comune dezvoltarii oricarui proiect web. Framework-ul este alcatuit din mai multe clase scrise intr-un anumit limbaj. Cea mai cunoscuta arhitectura de framework, folosita si in cadrul aplicatiei prezentate, este arhitectura MVC (model-view-controller), pe care o vom detalia mai jos. Cele mai comune functionalitati intalnite intr-un framework sunt: -autentificarea -abstractizarea bazei de date -abstractizarea memoriei cache -unelte care ajuta la depanarea aplicatiei MVC MVC-ul (model-view-controller) este un model arhitectural care este utilizat in dezvoltarea software, in special in dezvoltarea aplicatiilor web. El permite dezvoltarea si testarea separata a celor doua parti care compun o aplicatie web, back-end-ul (care ofera functionalitatea aplicatiei) si front-end-ul (care ofera interfata grafica a acesteia). Un MVC este compus din trei elemente: model, view si controller. Modelul se ocupa cu gestionarea datelor sistemului, efectueaza interogari si operatii de modificare a datelor. View-ul este ceea ce vede utilizatorul. El reda modelul intr-o forma care permite interactiunea acestuia cu utilizatorul. Controller-ul face legatura dintre model si view, receptionand actiunile utilizatorului si interogand modelul pentru a putea raspunde. Acest model arhitectural ajuta la o organizare mai buna a proiectului, atat a structurii in sine, cat si a codului.
Baze de date O bază de date este o colecție organizată de date, stocată și accesată electronic. Designerii de baze de date organizează de obicei datele pentru a modela aspecte ale realității într-un mod care să susțină procesele care necesită informații. Un sistem de gestionare a bazelor de date (SGBD) este o aplicație software care interacționează cu utilizatorii finali, alte aplicații și baza de date în sine pentru a capta și analiza date. Uneori, un SGBD este denumit în mod liber o "bază de date". Un SGBD cu scop general permite definirea, crearea, interogarea, actualizarea și administrarea bazelor de date. O bază de date este în general stocată într-un format specific SGBD care nu este portabil, dar diferite SGBD-uri pot partaja date utilizând standarde precum SQL și ODBC sau JDBC. Oamenii de știință din domeniul informaticii pot clasifica sistemele de gestionare a bazelor de date în funcție de modelele bazelor de date pe care le susțin. Bazele de date relaționale au devenit dominante în anii 1980. Acestea modelau datele ca rânduri și coloane într-o serie de tabele, iar marea majoritate utilizează SQL pentru scrierea și interogarea datelor. În anii 2000, bazele de date non-relaționale au devenit populare, numite NoSQL deoarece folosesc limbi de interogare diferite. H T M L HTML (Hypertext Markup Language) este limbajul standard pentru crearea de pagini web și aplicații web. Cu ajutorul CSS-ului (Cascading Style Sheets) și JavaScript, acesta formează o triadă de tehnologii de bază pentru World Wide Web. Browserele web primesc documente HTML de la un server web sau de la un storage local și randeaza documentele în pagini web multimedia. HTML descrie structura semantica a unei pagini web și indicii pentru cum va fi prezentat documentul. Elementele HTML sunt blocurile de bază ale paginilor HTML. Cu ajutorul tag-urilor HTML, imaginile și alte obiecte, cum ar fi formularele interactive, pot fi încorporate în pagina. HTML oferă un mijloc de a crea documente structurate prin desemnarea semanticii structurale pentru text, cum ar fi titluri, paragrafe, liste, linkuri, citate și alte elemente. Elementele HTML sunt delimitate prin etichete, scrise cu paranteze unghiulare. Etichete precum <img /> și <input /> introduc direct conținutul în pagină. Alte etichete, cum ar fi <p>, înconjoară și furnizează informații despre textul documentului și pot include și alte etichete ca subelemente. Browserele nu afișează etichetele HTML, ci le folosesc pentru a interpreta conținutul paginii.
HTML poate încorpora programe scrise într-un limbaj de scripting, cum ar fi JavaScript, care afectează comportamentul și conținutul paginilor web. Includerea CSS-ului definește aspectul și layout-ul conținutului. CSS CSS (Cascading Style Sheets) este un limbaj de foi de stil utilizat pentru descrierea prezentării unui document scris într-un limbaj de markup precum HTML. CSS este o tehnologie de bază a World Wide Web, alături de HTML și JavaScript. CSS este conceput pentru a permite separarea prezentării de conținut, inclusiv aspectul, culorile și fonturile. Această separare poate îmbunătăți accesibilitatea conținutului, poate oferi mai multă flexibilitate și control în specificarea caracteristicilor de prezentare, permite mai multor pagini web să împărtășească formatarea specificând CSS-ul relevant într-un fișier separat cu extensia .css. De asemenea, aceasta separare reduce complexitatea și repetarea conținutului structural. Separarea formatării și a conținutului face posibila prezentarea aceleiași pagini de markup în diferite stiluri pentru diferite metode de randare, cum ar fi pe ecran, prin imprimare, prin voce (prin intermediul browserului bazat pe vorbire sau cititorului de ecran) si dispozitive tactile bazate pe limbajul Braille. CSS are, de asemenea, reguli de formatare alternativă, dacă conținutul este accesat pe un dispozitiv mobil. Un site care isi modifica automat modul de prezentare in functie de dimensiunile ecranului se numeste site responsive. Termenul de “cascadare” provine de la schema de prioritate specificată pentru a determina ce regulă de stil se aplică in cazul in care mai multe reguli se potrivesc cu un anumit element. Această schemă de priorități tip cascadă este previzibilă. În plus față de HTML, alte limbaje de markup susțin utilizarea CSS, inclusiv XHTML, XML simplu, SVG și XUL. Bootstrap Bootstrap, inițial numit Twitter Blueprint, a fost dezvoltat de Mark Otto și Jacob Thornton la Twitter ca un framework pentru a încuraja consistenta între instrumentele interne. Înainte de Bootstrap, s-au folosit diferite biblioteci pentru dezvoltarea interfeței, ceea ce a dus la inconsistenta in cod și la un efort ridicat de întreținere.
Bootstrap este modular și contine o serie de foi de stil Sass care implementează diferitele componente ale toolkit-ului (set de instrumente). Aceste foi de stil sunt, în general, compilate într-un pachet și incluse în paginile web, dar componentele individuale pot fi incluse sau eliminate. Bootstrap oferă o serie de variabile de configurare care controlează lucruri precum culoarea și padding-ul diverselor componente. De la Bootstrap 2, documentația Bootstrap a inclus un “customization wizard” (expert de personalizare) care generează o versiune personalizată a Bootstrap, bazată pe componentele solicitate și pe diverse setări. Inainte de Bootstrap 4, Less era folosit pentru foile de stil. Acum se foloseste Sass. Fiecare componentă Bootstrap este formata dintr-o structură HTML, declarații CSS și, în unele cazuri, este insotita de cod JavaScript. Sistemul de grilă (grid system) și designul responsive vin standard cu un layout cu latimea de 1170 pixeli. Alternativ, dezvoltatorul poate utiliza un aspect cu lățime variabilă. În ambele cazuri, setul de instrumente are patru variante pentru a utiliza diferite rezoluții și tipuri de dispozitive: telefoane mobile, portret și peisaj, tablete și calculatoare cu rezoluție mică și înaltă. Fiecare variație ajustează lățimea coloanelor. Bootstrap 3 acceptă cele mai recente versiuni ale browserelor Google Chrome, Firefox, Internet Explorer, Opera și Safari. Încă de la 2.0, Bootstrap suportă designul web responsive. Aceasta înseamnă că aspectul paginilor web se ajustează dinamic, ținând cont de caracteristicile dispozitivului utilizat (desktop, tabletă, telefon mobil). Începând cu versiunea 3.0, Bootstrap a adoptat o filosofie de care pune in prim-plan dispozitivele mobile, scotand in evidenta designul responsive. Versiunea 4.0 a adăugat suport pentru Sass și Flexbox. In acest moment, Bootstrap se afla la versiunea 4.1.1, lansata pe data de 30 aprilie 2018. JavaScript JavaScript, adesea abreviat ca JS, este un limbaj de programare high-level, interpretat. Este un limbaj dinamic, loosely typed, prototype-based și multi-paradigmă. Alături de HTML și CSS, JavaScript este una dintre cele trei tehnologii de bază ale World Wide Web. JavaScript permite pagini web interactive și, prin urmare, este o parte
esențială a aplicațiilor web. Marea majoritate a website-urilor utilizeaza JavaScript. Toate browserele web majore au un motor dedicat JavaScript, pentru a executa cod JavaScript. Ca limbaj multi-paradigma, JavaScript acceptă stiluri de programare bazate pe evenimente, funcționale și imperative (inclusiv obiecte orientate și prototipuri). Are un API pentru a lucra cu text, matrice, date, expresii regulate și manipulare de bază a DOM (Document Object Model). Inițial, cu ajutorul JavaScript se putea implementa numai partea de client, în browserele web. Motoarele JavaScript sunt acum încorporate în multe alte tipuri de software gazdă, inclusiv în servere web și baze de date și în programe non-web, cum ar fi procesoare de text și software PDF, medii care fac JavaScript disponibil pentru scrierea aplicațiilor mobile și desktop, inclusiv widget-uri desktop. Pentru a dezvolta partea de back-end a aplicatiilor cu ajutorul JavaScript, putem folosi NodeJS. Deși există similitudini puternice între JavaScript și Java in ceea ce priveste numele limbajelor, cele două limbaje sunt distincte și diferă foarte mult. jQuery jQuery este o bibliotecă de JavaScript concepută pentru a simplifica scripting-ul HTML al clientului. jQuery este gratuit, open-source si utilizeaza licența MIT. Analiza web indică faptul că este cea mai răspândită bibliotecă de JavaScript. Sintaxa jQuery este concepută pentru a facilita navigarea intr-un document, selectarea elementelor din DOM, crearea animațiilor, gestionarea evenimentelor și dezvoltarea aplicațiilor Ajax. Abordarea modulară a bibliotecii jQuery permite crearea de pagini web dinamice puternice și de aplicații web. Ultima versiune stabila de jQuery este 3.3.1, lansata pe 20 ianuarie 2018. P H P PHP: Hypertext Preprocessor (sau pur și simplu PHP) este un limbaj de scripting al server-ului, conceput pentru dezvoltarea web, dar folosit și ca limbaj de programare cu scop general. PHP era inițial acronimul pentru Personal Home Page, dar acum reprezintă un acronim recursiv PHP: Hypertext Preprocessor. Codul PHP poate fi încorporat în cod HTML sau poate fi utilizat în combinație cu diferite sisteme de șabloane web, sisteme de gestionare a conținutului web și cadre web. Codul PHP este procesat, de obicei, de un interpret PHP implementat ca un modul în serverul
web sau ca executabil al unei interfețe CGI (Common Gateway Interface). Server-ul web combină rezultatele codului PHP interpretat și executat, care pot fi orice tip de date, inclusiv imagini, cu pagina web generată. Codul PHP poate fi, de asemenea, executat cu o interfață de linie de comandă (CLI) și poate fi folosit pentru a implementa aplicații grafice de sine statatoare. PHP a fost portat la scară largă și poate fi implementat gratuit pe majoritatea serverelor web, pe aproape fiecare sistem de operare. Laravel Laravel este un framework web gratuit, open-source, scris in PHP, creat de Taylor Otwell și destinat dezvoltării de aplicații web după modelul arhitectural MVC (model-view-controller) și bazat pe Symfony. Framework-ul Laravel ofera un sistem modular de ambalare cu un manager de dependinte dedicat, modalități diferite de accesare a bazelor de date relaționale, utilități care ajută la implementarea și întreținerea aplicațiilor. Codul sursă al Laravel este găzduit pe GitHub și licențiat sub termenii licenței MIT. Cateva dintre caracteristicile framework-ului Laravel sunt: -Bundles oferă un sistem modular de ambalare de la lansarea Laravel 3, cu caracteristici gata incluse, disponibile pentru adăugarea ușoară la aplicații. În plus, Laravel 4 folosește Composer ca manager de dependență pentru a adăuga pachete PHP specifice Laravel disponibile in repository; -Eloquent ORM (object-relational mapping) este o implementare PHP avansată a pattern-ului activ de înregistrare, oferind în același timp și metode interne pentru impunerea constrângerilor asupra relațiilor dintre obiectele bazei de date. În urma pattern-ului activ de înregistrare, Eloquent ORM prezintă tabelele de baze de date sub forma de clase, cu obiecte instantiate legate de rândurile unui tabel; -Query builder (instrument de creare a interogărilor), disponibil incepand cu Laravel 3, oferă o alternativă mai directă de acces la baza de date a Eloquent ORM. În loc de a cere ca interogările SQL să fie scrise direct, constructorul de interogări al lui Laravel oferă un set de clase și metode capabile să construiască interogări programabil; -Reverse routing definește o relație între link-uri și rute, făcând posibil ca modificările ulterioare ale rutelor să fie propagate automat în link-urile relevante. Atunci când link-urile sunt create folosind numele rutelor existente, URI-urile corespunzătoare sunt create automat de către Laravel;
-Blade este un templating engine si combină unul sau mai multe template-uri cu un model de date pentru a produce view-uri. Blade oferă, de asemenea, propriul set de structuri de control, cum ar fi instrucțiunile condiționale și buclele, care sunt mapate intern la omoloagele lor din PHP. Mai mult decât atât, serviciile Laravel pot fi chemate din șabloanele Blade, iar templating engine-ul poate fi extins cu directive personalizate; -Migrations furnizează un sistem de control al versiunilor pentru schemele bazei de date, ceea ce face posibilă asocierea modificărilor din codul aplicației și modificările necesare în schema bazei de date. Ca rezultat, această caracteristică simplifică implementarea și actualizarea aplicațiilor bazate pe Laravel; -Database seeding oferă o modalitate de a popula tabelele din baza de date cu date default (implicite) care pot fi utilizate pentru testarea aplicațiilor sau pot fi efectuate ca parte a setării inițiale a aplicației; -Homestead – o mașină virtuală Vagrant care oferă dezvoltatorilor Laravel toate instrumentele necesare pentru a dezvolta Laravel direct, fara alte interventii, inclusiv Ubuntu, Gulp, Bower și alte instrumente de dezvoltare care sunt utile în dezvoltarea de aplicații web la scară largă. Laravel ofera si un CLI (command-line interface) numit Artisan, cu care dezvoltatorii pot rula diverse comenzi utile, deja existente sau definite de ei. Ultima versiune stabila de Laravel este 5.6.24, lansata pe 2 mai 2018. MongoDB MongoDB este un program de baze de date orientat spre documente. MongoDB este disponibil gratuit si open-source. Clasificat ca un program de baze de date de tip NoSQL, MongoDB folosește documente asemănătoare JSON. MongoDB este dezvoltat de MongoDB Inc. și este publicat sub o combinație a licenței GNU Affero General Public și a licenței Apache. MySQL MySQL este un sistem de gestionare a bazelor de date relaționale (SGBDR). El este disponibil open-source. Proiectul de dezvoltare MySQL a făcut ca acest cod sursă să fie disponibil în termenii licentei GNU General Public, precum și în cadrul unei varietăți de acorduri de proprietate. MySQL a fost deținut și sponsorizat de o singură firmă cu scop lucrativ, compania suedeză MySQL AB, deținută acum de Oracle Corporation.
MySQL este o componentă centrală a pachetului open-source pentru aplicații web LAMP (și alte pachete "AMP"). LAMP este un acronim pentru "Linux, Apache, MySQL, Perl / PHP / Python". Aplicațiile care utilizează baza de date MySQL includ: TYPO3, MODx, Joomla, WordPress, Simple Machines Forum, phpBB, MyBB și Drupal. MySQL este, de asemenea, utilizat de numeroase site-uri mari, inclusiv Google (deși nu pentru căutări), Facebook, Twitter, Flickr și YouTube. MySQL este scris în C și C ++. Nginx Nginx (scris si NGINX, NGiX sau nginx) este un server web care poate fi, de asemenea utilizat, ca un reverse proxy, load balancer, mail proxy și memorie cache HTTP. Software-ul a fost creat de Igor Sysoev și publicat pentru prima dată în 2004. O companie cu același nume a fost înființată în 2011 pentru a oferi suport și software-ul plătit, Nginx plus. Nginx este un software gratuit și open-source, lansat sub licența BSD. O mare parte din serverele web utilizează NGINX, de multe ori ca un load balancer. Nginx poate fi instalat pentru a servi conținut dinamic HTTP în rețea folosind modulele FastCGI, SCGI pentru scripturi, servere de aplicații WSGI sau module Phusion Passenger și poate servi ca software de tip load balancer. Nginx folosește o abordare asincronă bazată pe evenimente, mai degrabă decât pe fire de executie, pentru a face față cererilor. Arhitectura modulară bazată pe evenimente a lui Nginx poate oferi performanțe mai predictibile in fata sarcinilor mari. Fișierul de configurare implicit pentru Nginx este nginx.conf, care poate fi extins folosind alte fisiere de configurare, pe care mai apoi le putem include in nginx.conf. Nginx sau Apache? Aceasta intrebare apare mereu cand trebuie instalat un webserver. Nginx a fost scris cu scopul explicit de a depasi performanta webserver-ului Apache. Out of the box, deservește fișiere statice, folosind mult mai puțină memorie decât Apache, și poate gestiona de aproximativ patru ori mai multe cereri pe secundă. Acest impuls de performanță are vine cu un cost de flexibilitate scazuta, cum ar fi capacitatea de a suprascrie setările de acces la sistem pe baza unui fisier (Apache realizează acest lucru cu un fișier .htaccess, în timp ce Nginx nu are o astfel de facilitate încorporată).
G i t Un sistem de versionare este o unealta care se ocupa cu versionarea codului pe perioada dezvoltarii si mentinerii acestuia. El detecteaza automat modificarile din diversele versiuni ale codului. Exista mai multe sisteme de versionare, dintre care amintim SVN, Mercurial si Git. Un sistem de versionare a codului faciliteaza dezvoltarea codului in colaborare cu alti dezvoltatori. Aceasta aplicatie a fost dezvoltata folosind Git. Git este un sistem de control al versiunii pentru urmărirea modificărilor în fișierele pe calculator și coordonarea lucrului asupra acelor fișiere în rândul mai multor persoane. Acesta este utilizat în principal pentru gestionarea codului sursă în dezvoltarea de software, dar poate fi folosit pentru a urmări schimbările în orice set de fișiere. Ca sistem de control revizuit distribuit, acesta vizează viteza, integritatea datelor și suport pentru fluxurile de lucru distribuite, neliniare. Un proiect dezvoltat cu Git este organizat sub forma de repository (o structura de date ce stocheaza metadate despre istoricul fisierelor) cu istoricul mentinut complet de la prima creare a unui fisier. Git a fost creat de Linus Torvalds în 2005 pentru dezvoltarea kernel-ului Linux, alți dezvoltatori de kerneluri contribuind la dezvoltarea sa inițială. Actualul său mentor este Junio Hamano, din 2005. Ca și în majoritatea sistemelor distribuite de control al versiunilor și spre deosebire de majoritatea sistemelor client-server, fiecare director Git de pe fiecare calculator este un depozit cu drepturi depline, cu istorie completă și abilități de urmărire a versiunii complete, independent de accesul la rețea sau de un server central. Git este software gratuit și cu sursă deschisă, distribuit în termenii licenței GNU General Public Version 2. Dintre cele mai importante comenzi de Git amintim: – git init – creaza un nou repository local – git clone /path/to/repository – creaza o copie a unui repository local – git clone username@host:/path/to/repository – cloneaza un repository existent pe un server remote – git add <filename> – adauga un fisier spre a fi indexat – git commit -m "Commit message” – comite modificarile, adaugand un mesaj explicativ – git pull – trage ultimele modificarile existente pe server – git push origin <branchname> – impinge modificarile locale pe server
– git merge <branchname> – realizeaza merge-ul intre un branch dat si branch-ul curent – git checkout -b <branchname> – creaza un nou branch si il face activ – git checkout <branchname> – creaza trecerea de la branch-ul curent la branch-ul solicitat – git diff <filename> – arata modificarile facute unui fisier de la ultima stare indexata Bitbucket Bitbucket face parte din suita de aplicatii Atlassian, din care mai fac parte, printre altele si: -Jira – sistem de organizare a tichetelor de lucru -Bamboo – sistem de build automat -Confluence – sistem de documentare pentru aplicatii -Hip Chat – sistem de comunicare intre membri unei echipe/firme Suita Atlassian este un pachet complet de aplicatii care ajuta la dezvoltarea, mentinerea, versionarea, build-uirea si livrarea unei aplicatii. Toate aplicatiile din suita Atlassian sunt perfect integrabile intre ele. Bitbucket este un serviciu web de gazduire a depozitului de control al versiunilor codului sursa pentru o aplicatie software, detinut de Atlassian. Se poate folosi si pentru proiecte de dezvoltare care folosesc sisteme de control al versionarii de tip Mercurial (incepand cu lansarea) sau Git (din octombrie 2011). Bitbucket oferă atât planuri tarifare comerciale, cât și conturi gratuite. Acesta oferă conturi gratuite cu un număr nelimitat de depozite private (care pot avea până la cinci utilizatori în cazul conturilor gratuite) începând din septembrie 2010. Este similar cu GitHub, care utilizează în primul rând Git. Bitbucket a comercializat în mod tradițional serviciile sale dezvoltatorilor profesioniști cu cod de software privat, mai ales de cand a fost achiziționat de Atlassian în 2010. În septembrie 2016, Bitbucket a anunțat că a ajuns la 5 milioane de dezvoltatori și 900.000 de echipe pe platforma sa. Bitbucket are 3 modele de implementare: Cloud, Bitbucket Server și Data Center. Toate aplicatiile Atlassian pot fi folosite atat din cloud-ul Atlassian, cat si instalate pe server-ul privat al unui dezvoltator sau al unei companii. DigitalOcean DigitalOcean, Inc. este un furnizor american de infrastructură de cloud cu sediul în New York City, cu centre de date din întreaga lume. DigitalOcean oferă dezvoltatorilor
servicii cloud care ajută la implementarea și scalarea aplicațiilor care rulează simultan pe mai multe computere. Începând cu ianuarie 2018, DigitalOcean a fost a treia companie de găzduire din lume în ceea ce privește calculatoarele orientate spre web. DigitalOcean oferă servere virtuale (VPS) sau droplet-uri, asa cum sunt numite de terminologia DigitalOcean, care utilizează KVM ca hypervisor și pot fi create în diferite dimensiuni (împărțite în două clase: standard și optimizat) din aprilie 2018) și cu diferite opțiuni, inclusiv 6 distribuții GNU / Linux și zeci de aplicații cu un singur clic. La începutul anului 2017, DigitalOcean și-a extins setul de funcții prin adăugarea de load balancere in oferta lor. Folosirea DigitalOcean presupune experienta de SysAdmin sau DevOps. Conectarea la un server din DigitalOcean se poate face atat prin consola disponibila in interfata grafica a DigitalOcean, cat si prin SSH. Capitolul IV Sistem de manangement al organizatiilor Aplicația web “Sistem de management al organizatiilor” dezvoltata în Laravel ofera un modul pentru administrarea personalului existent in organizatie. Ea poate fi accesată la adresa: http://178.62.227.41/ folosind contul de utilizator admin@email.com și parola zxczxc. Adresa reprezinta IP-ul static al server-ului inchiriat de la DigitalOcean. Aceasta a fost dezvoltată folosind versiunea 5.3 de Laravel, care reprezinta un important framework scris în PHP. Aplicația se bazează pe o arhitectură de tipul MVC (model-view-controller), permițând dezvoltarea, întreținerea și testarea separată a celor două părti ale sistemului: funcționalitatea aplicației și interfața grafică oferita de aceasta. Aplicația foloseste o bază de date internă MongoDB, care este de tip NoSQL si care administrează colecții de documente de tip JSON. În această bază de date internă sunt stocați utilizatorii aplicației și rapoartele generate de aplicatie. Aplicația oferă posibilitatea de a genera trei tipuri de rapoarte: raportul pentru pontajul angajaților, raportul pentru persoanele prezente în clădire la un anumit moment si un raport ce contine persoanele absente la un anumit moment. Pentru a simula integrarea cu alte sisteme, rapoartele se generează pe baza datelor furnizate de o alta bază de date, care se afla pe acelasi server, dar se poate
stoca si pe un server diferit, de tipul MySQL în care sunt stocate date referitoare la personalul organizatiei/companiei, precum și pe baza informațiilor colectate de la sistemul de control al accesului. Desi rapoartele pot fi folosite de toti membri responsabili de administrarea organizatiei, putem oferi exemple de cum pot fi ele folosite de diverse departamente dintr-o organizatie sau companie. Astfel: – raportul conținând pontajul angajaților poate furniza informații utile departamentului de resurse umane pentru calculul salariului raportat la timpul efectiv de lucru dintr-o lună; raportul conținând persoanele absente la o anumită oră se adresează persoanelor din managementul instituției însărcinate cu controlul condicii; iar raportul cu persoanele prezente în instituție poate fi vital în cazul în care în aceasta izbucnește o situație de urgență – un incediu sau un cutremur. Dezvoltarea aplicației s-a realizat cu ajutorul următoarelor unelte de dezvoltare: •PHPStorm – editor de text pentru PHP; •Vagrant – virtualizarea mediului de lucru; •Git – versionarea codului pentru diferite implementări; •RoboMongo – unealtă pentru managementul bazei de date interne de tip MongoDB; •PHPUnit – testarea aplicației în faza de dezvoltare. Dezvoltarea s-a făcut folosind 3 mașini virtuale rulând sistemul de operare Ubuntu: •Mașina MAIN – pe care au fost instalate PHP&Apache; •Mașina DB – pe care a fost instalat MongoDB; •Mașina Morpho – pe care a fost instalat MySQL, pt simularea unei baze de date externe. Este importantă menționarea dependințelor și a versiunilor folosite în mediul de dezvoltare prin intermediul utilitarului Vagrant: •Ubuntu 16.04 •PHP 7 •Apache2 •MongoDB 3.2 •MySQL Server 5.5
Aceste dependințe au fost instalate și pe server-ul de producție închiriat de la DigitalOcean ce beneficieaza de 1GB memorie RAM și 30GB stocare pe SSD. 3.1.1. Popularea cu date pentru simularea unei baze de date externe Întrucât scopul aplicației este acela de a fi integrată într-un sistem de software deja existent într-o companie, pentru a face posibila dezvoltarea și testarea ei a fost necesară crearea unei baze de date care să simuleaze una de tipul MySQL, întâlnită frecvent în producție. Este de menționat faptul că aplicația de generare a rapoartelor se poate conecta cu ușurință și la o bază de date de tipul Microsoft SQL doar prin schimbarea adaptorului din fișierul de configurare. Migrările în Laravel reprezintă modul prin care se poate construi cu ușurință schema bazei de date a aplicației. De asemenea, ele prezintă avantajul imens că acestea sunt asemenatoare cu sistemele de versionare, astfel încât ne este permis în orice moment să adăugăm sau să modificăm coloane din bazele de date fără a altera datele deja existente. Baza de date care simulează o bază externă (cu care aplicația va interacționa) și pe baza căreia se vor genera rapoartele se numește ‘morpho’ și este de tipul MySQL. Astfel, după instalarea dependințelor pe server-ul de pe care rulează aplicația, este nevoie de conectare prin linia de comandă la serviciul de MySQL cu credentialele furnizate în fișierul de configurare al aplicației. Aici se crează baza de date prin comanda: CREATE DATABASE morpho; După această operațiune, baza de date numită morpho este creată iar următorul pas este cel de rulare a migrărilor prin utilitarul artisan cu comanda: php artisan migrate În acest moment, în baza de date denumită morpho, vor exista 3 tabele: •AccessLog •BiometricDevice •User_ În cele ce urmează sunt detaliate câteva din coloanele minim necesare pentru ca aplicația să ruleze în parametri normali: Tabelul AccessLog – conține date despre acțiunile înregistrate la porțile de acces:
•ID – cheie primară; •MORPHOACCESSID – identificator pentru un utilizator în sistemul de control acces; •LOGDATETIME – data și ora acțiunii (intrare / ieșire). Tabelul BiometricDevice – conține date despre turnicheți / dispozitivele de înregistrare a acțiunilor de la porțile de acces: •ID – cheie primară; •NAME – nume turnichet, se presupune că în locație există mai multe detectoare de amprentă, de exemplu: turnichet de ieșire / turnichet de intrare / turnichet de legătură între clădiri. Tabelul User_ – conține date despre angajații instituției: •ID – cheie primară; •FIRSTNAME – numele utilizatorului din sistemul de control acces; •LASTNAME – prenumele utilizatorului; •JOBTITLE – de exemplu: profesor, director, agent de pază. Este de menționat că în aceste tabele se pot adăuga oricâte coloane, care ulterior vor avea ca scop scalabilitatea aplicației în vederea implementării diferitor tipuri de rapoarte. După crearea bazei de date și a tabelelor este necesară popularea lor, astfel: •AccessLogSeeder – se ocupă de popularea cu date simulate referitoare la acțiunile angajaților înregistrate la porțile de acces; •BiometricDeviceSeeder – se ocupă de popularea cu date referitoare la dispozitivele de înregistrare a acțiunilor de la porțile de acces; •UserSeeder – se ocupă de popularea cu date referitoare la angajații instituției. Metoda insertAccessLog se apelează din AccessLogSeeder și conține următorii parametrii: insertAccessLog($accessLogId, $morphoAccessId, $userId, $logDateTime); unde: •accessLogId – camp null in cazul datelor de test; •morphoAccessId – indentificator primar pentru accessLogsș •userId – identificator pentru utilizatorul din tabela User_, cheie secundară; •logDateTime – data și ora acțiunii;
Metoda insertDevice se apelează din BiometricDeviceSeeder și conține următorii parametrii: insertDevice($deviceId, $deviceName); unde: • deviceId – identificator unic pentru dispozitivul de înregistrare a sistemului de control acces; • deviceName – nume dispozitiv; Metoda insertPerson se apelează din UserSeeder și conține următorii parametrii: insertPerson($userId, $firstName, $lastName, $employeeId, $jobTitle); unde: •userId – identificator unic pentru angajat; •firstName – nume de familie; •lastName – prenume; •employeeId – identificator primar pentru legatura cu tabelul accessLogs, același cu morphoAccessId; •jobTitle – de exemplu: profesor, angajat, manager, agent de pază. 3.2. Module aplicație 3.2.1. Modulul de înregistrare Aplicația de generare a rapoartelor se adresează în special unei instituții / companii. Astfel, s-a luat decizia să nu se ofere o interfață de utilizator, presupunându-se că un administrator din cadrul departamentului de IT va fi responsabil de mentenanța conturilor angajaților. O altă funcționalitate cerută de o majoritate importantă a clienților este aceea de integrare a noilor module în sistemul software deja existent în companie. În acest caz, este foarte frecventă cerința de implementare a servicilor de directoare LDAP, folosită de Microsoft în cadrul sistemelor de operare Windows, numită Active Directory. Aceasta pune la dispoziția admistratorilor de sistem un mediu flexibil cu
efect global pentru asignarea permisiunilor, instalarea programelor, înnoirea securității. Toate aceste operațiuni pot fi aplicate atât la rețele mici, cât și la rețele complexe. Librăria Adldap2 poate fi instalată cu ușurință în Laravel oferind o configurare și o mentenanță facilă pentru autentificarea prin conturile de Active Directory. În această versiune a aplicației crearea de noi utilizatori se va realiza din UserSeeder, prin intermediul metodei createUser aflată în UserRepository. Parametrii metodei sunt: Adresa de email cu care utilizatorul se va autentifica; •Parola acestuia care ulterior poate fi modificată; •Permisiunile utilizatorului – detaliate în capitolul Sistemul de permisiuni. În acest moment, se va rula php artisan db:seed în linia de comandă oferită de utiliarul artisan și specifică Laravel. Orice utilizator definit în UserSeeder va avea acces la funcționalitățile aplicației în funcție de permisunile care i-au fost acordate. De menționat este faptul că din motive de securitate, salvarea parolei în baza de date se va face folosind librăria BcryptHasher bazată pe algoritmul Blowfish, ce are o dimensiune bloc de 64 de biți și o lunigme a cheii variabilă de la 32 de biți până la 448 de biți. 3.2.2. Modulul de permisiuni Aplicația are o structură modulară în ceea ce privește acțiunile permise utilizatorilor. Astfel, la crearea unui nou cont de utilizator, administratorul aplicației poate alege orice combinație de permisiuni dintre: •Permisiune de generare a raportului de pontaj; •Permisiune de generare a raportului cu angajati absenți; •Permisiune de generare a raportului cu persoanele din cladire. Această funcționalitate s-a implementat în urma analizării necesităților diferitelor departamente dintr-o instituție. De exemplu, un angajat aparținând departamentului de
resurse umane va avea permisiuni doar pentru generarea raportului de pontaj, iar un manager va avea acces la detaliile despre angajații absenți la un moment de timp. D.p.d.v. tehnic, Laravel oferă o modalitate simplă de a autoriza acțiuni de utilizator împotriva unei resurse, prin utilizarea porților și a politicilor. Porțile sunt utilizate pentru acțiunile care nu sunt neapărat legate de vreun model și permit o definire costumizabilă în funcție de implementarea din aplicație. Acestea sunt definite în AuthServiceProvider și vor primi întotdeauna o instanță de utilizator ca prim argument: Gate::define('generate-staffTimekeeping', function (User $user) { return in_array('staffTimekeeping', $user->allowedReports); }); Gate::define('generate-staffNotInSchool', function (User $user) { return in_array('staffNotInSchool', $user->allowedReports); }); Gate::define('generate-personsInSchool', function (User $user) { return in_array('personsInSchool', $user->allowedReports); }); În codul de mai sus, se definesc porțile aplicației: •generate-staffTimekeeping – pentru raportul de pontaj; •generate-staffNotInSchool – pentru raportul cu angajații absenți; •generate-personsInSchool – pentru raportul cu persoanele din instituție. Se poate observa că prin intermediul funcției in_array specifică PHP, ce returnează o valoare booleană (true sau false), se verifică dacă în câmpul allowedReports din tabela ce conține stocați utilizatorii, se regasec permisiunile staffTimekeeping, staffNotInSchool sau personsInSchool. Aceste permisiuni se
definesc de către administratorul aplicației la înregistrarea unui nou cont prin apelarea metodei createUser din UserSeeder. Această metodă va primi ca parametrii: •Email; •Parola; •Array conținând permisiuni, dintre cele disponibile enumerate mai sus. Exemplu de creare utilizator cu permisiuni totale: $userRepository->createUser( 'admin@email.com', 'parola', json_encode(['staffTimekeeping','staffNotInSchool','personsInSchool'])); Exemplu de creare utilizator doar cu permisiunea pentru generarea raportului de pontaj: $userRepository->createUser( ‘resurse_umane@email.com', 'parola', json_encode(['staffTimekeeping'])); Similar, se pot defini oricâte permisiuni pe care un utilizator le poate avea în aplicație pentru viitoare funcționalități. În schimb, politicile sunt folosite în momentul în care se dorește autorizarea unei acțiuni pentru un anumit model sau o anumită resursă. De exemplu, o politică regăsită în aplicație este cea din vizualizarea paginii de generare a rapoartelor: @if (\Illuminate\Support\Facades\Auth::user()->can('generate-staffNotInSchool')) C ă s u ț a p e n t r u g e n e r a r e a r a p o r t u l u i d e p e r s o a n e absente @endif Codul de mai sus face referință la modelul de User, utilizator care în momentul în care este autentificat poate vizualiza conținutul numai și numai dacă deține respectiva permisiune. Aplicația se bazează pe faptul că în cazul în care un utilizator are permisiuniuni doar pentru generarea unui anumit tip de raport, nu este nevoie ca acesta să vadă și alte funcționalități ale aplicației, la care oricum nu ar avea acces.
3.2.3. Modulul de autentificare Sistemul de autentificare folosit în această versiune a aplicatiei este cel implicit din Laravel. Framework-ul include un model de User în directorul app. Acesta poate fi folosit cu driver-ul implicit al lui Eloquent. Singura necesitate d.p.d.v. tehnic este aceea că tabelul în care se regăsesc salvați utilizatorii să conțină două coloane: cea în care se va stoca email-ul, precum și cea în care se va stoca parola, cu condiția ca cea din urmă să aibă dimensiunea de minimum 255 de caractere. Controlerul de Login se ocupă de autentificare, iar cel de ResetPassword conține logica pentru a reseta parolele conturilor. Deoarece acestă aplicație se adresează unei instituții în care un singur administrator se ocupă de conturile utilizatorilor, s-a renunțat la controlerele implicite RegisterController, care se ocupă de înregistrarea unui cont nou și la ForgotPasswordController, care se ocupă de trimiterea link-urilor prin email pentru resetarea parolelor.Astfel, înregistrarea unor utilizatori noi va fi posibilă doar prin popularea bazei de date care conține utilizatorii și la care are acces doar administratorul aplicației. În cazul în care se dorește o interfață pentru utilizator, care să permită înregistrarea în aplicație, este de ajuns să fie reactivat RegisterController, astfel făcând posibilă preluarea datelor din formularul de înregistrare și salvarea lor în tabela de User. Din motive de securitate, tabelul ce conține stocați utilizatorii nu include și coloana remember_token ce le permite acestora să selecteze opțiunea “remember me” în momentul autentificării, astfel încât numele de utilizator și parola vor trebuie reintroduse la fiecare sesiune de autentificare. În plus, în aplicație a fost implementată un modul de validare: •Email-ul este unic pentru fiecare utilizator și trebuie să fie de forma: nume@domeniu; •Parola poate conține orice caractere, însă lungimea ei trebuie să fie de minimum 6 caractere. În momentul în care un utilizator deține un cont creat anterior de administratorul aplicației, va introduce email-ul și parola în formularul de autentificare în care este redirecționat automat la accesarea platformei (vezi anexa A).
În cazul în care email-ul introdus nu este de forma nume@domeniu, va apărea o alertă cu textul “introduceti semnul @ în adresa de e-mail”. În cazul în care email-ul sau parola nu au fost completate va apărea o alertă cu textul “campul email/password field este obligatoriu”, deoarece ambele câmpuri sunt obligatorii pentru autentificare. Din motive de securitate, în cazul în care ori email-ul, ori/ (și) parola nu este corect, pe ecran va apărea o alertă cu “Nume de utilizator sau parolă greșită.“ În cazul în care aceste credențiale sunt valide, la apăsarea butonului de logare utilizatorul va fi redirecționat către aplicație. 3.2.4. Modulul de rapoarte După autentificare, utilizatorul este redirecționat pe pagina de Generare Rapoarte (vezi anexa B). În această pagină, sunt regăsite cele 3 tipuri de rapoarte existente: •Raport pontaj angajați – chenar marcat cu culoarea albastru; •Raport angajați absenți – chenar marcat cu culoarea galben; •Raport persoane în instituție – chenar marcat cu culoarea roșu. În funcție de permisiunile utilizatorului, acesta poate vedea un singur tip de raport, oricare două tipuri de rapoarte, sau toate 3. Pentru fiecare tip de raport, după selectarea perioadei sau a momentului de timp pentru care dorește generarea, utilizatorul are la dispoziție două opțiuni: •Descărcarea raportului – în format PDF; •Afișarea raportului – într-o pagină nouă a browser-ului, în format HTML. Doar în cazul în care se alege descărcarea raportului, acesta va fi salvat și în baza de date internă a aplicației, putând fi regăsit ulterior în pagina numită Arhiva de Rapoarte, fără a fi necesară o nouă generare a acestuia. Astfel, o dată generat, raportul poate fi descărcat ori de câte ori este necesar. 3.2.5. Generare raport pontaj angajați Acest tip de raport este destinat în principal departamentului de resurse umane, oferind date concrete despre timpul efectiv de lucru al fiecărui angajat pentru perioada selectată.
Cerințele minimale ce fac posibilă integrarea acestui tip de raport în cadrul oricărei companiei care își desfășoară activitatea în unul sau mai multe sedii, sunt următoarele: •Sistem integrat de control acces dispunând de unul sau mai mulți turnicheți la porțile de acces ale instituției, având rolul de a înregistra orice acțiune de intrare sau de ieșire. Acestea vor fi stocate într-o bază de date separată, furnizată cu sistemul de control acces, care în principiu va permite până la 10 milioane de astfel de înregistrări. •Fiecare angajat să fie înregistrat într-o bază de date internă cu un minim de informații: nume, prenume și o cheie unică ce va avea corespondent și în baza de date a sistemului de control acces. Este foarte important ca această cheie să se regăsească în ambele baze de date, deoarece ea reprezintă singura cheie de legătură dintre un angajat al instituției și acțiunile sale. Pe baza registrului electronic în care sunt stocate orele de intrare, dar și de ieșire ale angajaților (furnizate de turnicheții sistemului de control acces – numite access logs), aplicația calculează fiecare pereche de intrare-ieșire. Astfel se furnizează timpul efectiv pe care fiecare angajat l-a petrecut în clădire, acesta presupunându-se a fi timpul efectiv de lucru. Raportul poate fi generat pe diferite perioade de timp: de la o zi până la maximum de zile ale unei luni, adică 31 de zile. Această limită este dată de dimensiunile mari în lățime ce pot apărea pentru tabelele ce conțin înregistrări pentru mai mult de 31 zile. La click-ul pe căsuța conținând perioada de timp preselectată, coboară un meniu (vezi anexa C) ce va conține în partea din stânga opțiuni predefinite, iar în partea din dreaptă două calendare, reprezentând două luni succesive din an. Se poate naviga la diferite luni din trecut, prin intermediul săgeților stânga-dreapta. Utilizatorul are astfel posibilitatea de a selecta explicit un interval pentru care vrea să genereze raportul apăsând pe o dată din calendar, reprezentând data de start. În acest moment, se poate naviga cu cursorul prin calendar, permițându-i să aleagă și data de final a acestuia, printr-un click. Capetele intervalului selectat vor fi evidențiate cu culoarea albastru închis, iar datele cuprinse între acestea, cu culoarea albastru deschis. În final, pentru aplicarea selecției dorite se va acționa butonul Apply. Pentru a ușura experiența utilizatorului, în partea din stânga se regăsesc câteva selecții de intervale frecvente pentru astfel de rapoarte:
•Ieri; •Ultimile 7 zile; •Ultimile 30 zile; •Luna curentă; •Luna trecută. Dacă se optează pentru selecția unui interval predefinit, nu mai este nevoie de apăsarea butonul Apply, selecția acestuia fiind salvată în mod automat și afișată în căsuța conținând perioada de timp preselectată. În cazul în care utilizatorul a greșit perioada pentru care dorește generarea raportului, se poate relua operațiunea de selectare a intervalului ori de câte ori este nevoie. Utilizatorul poate opta în acest moment fie pentru descărcarea raportului în format PDF, fie pentru vizualizarea lui în browser-ul web în format HTML. Oricare opțiune selectată va afișa același raport, conținând aceleași date. În cazul generării raportului în format PDF, acesta va avea format A4, orientare orizontală și denumirea de “raport-pontaj” concatenată cu data la care s-a generat fișierul. Generarea se va face prin intermediul SnappyPDF, o librărie dezvoltată și pentru Laravel ce convertește la formatul PDF o pagină HTML. Cu toate acestea, în cazul tabelelor ce depășesc o pagină, apar probleme la paginare: capul de tabel nu se repetă pe fiecare pagină, se suprascriu date pe ultimul rând al tabelului din josul paginii, etc. Astfel, a fost necesară repararea unor metode de paginare conținute de această librărie, prin adăugare de funcționalitate necesară generării tabelului cu rapoarte. Raportul generat cuprinde pe prima pagină un tabel general cu toți angajații instituției, ce conține numărul curent, numele și prenumele angajatului, suma orelor lucrate în fiecare zi din intervalul selectat, luna din an a respectivelor zile, precum și totalul de ore al fiecăruia în perioada selectată. În cazul zilelor de weekend (sâmbătă și duminică), coloanele cu zile vor avea culoarea albastră pentru a se diferenția de zilele lucrătoare. În cazul în care nu există înregistrări într-o anumită zi pentru un angajat, în tabel va fi marcat cu o linie orizontală (vezi anexa D). Pe paginile următoare se regăsesc rapoartele detaliate pentru fiecare om din personal în parte. Tabelele conțin numele și prenumele fiecăruia, datele în care acesta
are înregistrări în baza de date, ora de intrare, ora de ieșire și numărul de ore al fiecărei perechi de tipul intrare-ieșire. Cu roșu vor fi marcate erorile (vezi anexa E). Ce reprezintă erorile? Aplicația se bazează doar pe perechi corecte de tipul IN-OUT pe durata unei zile, pornind de la ora 00:00 până la ora 23:59. Orice altă combinație de înregistrări va fi considerată eroare și nu va fi luată în calculul pontajului. •Exemple de erori: Perechi de tipul IN-IN Să prespunem că un angajat ajunge la ora 8 în instituție și marchează acțiunea de intrare. În acest moment, turnichetul trimite către baza de date o inregistrare de tipul IN a angajatului respectiv la ora 8. Tot același angajat, la ora 9, hotărăște să iasă din instituție. Presupunând că bariera turnichetului / ușă la care se află cititorul de amprente este deschisă, acesta uită să înregistreze acțiunea de ieșire. În bază de date nu se va salva nici o înregistrare. La ora 10, același angajat intră pentru a două oară în clădire și marchează acțiunea de intrare. În acest moment, în baza de date vor exista două înregistrări consecutive ale aceluiași angajat de tipul IN. Aplicația nu va putea să calculeze timpul petrecut de acesta în interiorul institiei deoarece nu se cunoaște când a ieșit. Astfel, se va marca cu eroare prima înregistrare de tipul IN, în cazul de față, înregistrarea de la ora 8. Eroarea va fi evidențiată în tabel cu culoarea roșu. Presupunând că ulterior tot același angajat iese la ora 12 din instituție și nu se mai întoarce pe parcursul zilei, timpul lui efectiv de lucru va fi de 2 ore, reprezentând intervalul 10-12, și nu cel 8-12. Perechi de tipul OUT-OUT Să facem o altă presupunere. Același angajat, într-o diferită zi față de cea din exemplu de la perechile de tipul IN-IN, ajunge în instituție la ora 8 și nu marchează acțiunea de intrare. La ora 9 iese din instituție pentru o pauză de țigară, dar de această dată înregistrează la turnichet acțiunea de ieșire. În baza de date va exista o înregistrare de tipul OUT la ora 9.
La ora 9:15, revine în clădire fară a-și înregistra acțiunea de intrare. În continuare, în baza de date va exista o singură înregistrare de tipul OUT, respectiv cea de la ora 9. La ora 12 termină programul de lucru, iese din instituție și își înregistrează acțiunea de ieșire prin intermediul turnichetului. În acest moment, în baza de date vor exista două înregistrări consecutive de tipul OUT, una la ora 9, cealaltă la ora 12. Aplicația nu va putea calcula timpul petrecut în instituție, deoarece nu se cunoaște ora de intrare a acestui angajat. Și această pereche, de tipul OUT-OUT va genera două erori, ce vor fi marcate cu roșu în tabelul detaliat pentru ziua respectivă, timpul lui de lucru fiind 0 ore. Perechi de tipul IN-OUT pe durata a 2 zile Un angajat al instituției ajunge pe data de 1 martie la ora 8, și marchează intrarea prin intermediul turnichetului. Tot acesta, la ora 12 părăsește instutita, fără să marcheze operațiunea de ieșire. În ziua următoare, pe 2 martie, același angajat ajunge la ora 8. De data aceasta nu marchează intrarea. Însă, în această zi, la ora 12 își marchează ieșirea. În acest moment în baza de date vor exista două înregistrări: •1 martie – ora 8 – IN; •2 martie – ora 12 – OUT. Algoritmul va ponta 0 ore și pentru data de 1 martie, dar și pentru data de 2 martie întrucât nu se cunoaște oră de ieșire pe data de 1 martie, și nici ora de intrare pe data de 2 martie. Aceste înregistrări vor fi marcate ca erori în tabel. Perechi de tipul IN-OUT-IN / OUT-IN-OUT Conform algoritmului care calculează orele petrecute de un angajat în instituție, vor fi pontate doar: •în cazul IN-OUT-IN: perechea IN-OUT, ultimul IN reprezentând eroare; •în cazul OUT-IN-OUT: perechea consecutivă IN-OUT, primul OUT reprezentând o eroare. Din punct de vedere tehnic, modulul de generare a pontajului pentru angajați este personalizabil. În funcție de datele stocate și oferite de baza de date a sistemului de control acces, se pot activa funcționalități precum:
•filtrarea după anumite câmpuri – de exemplu, în cazul în care se dorește excluderea pontării personalului aparținând unui anumit departament; •modificarea diferenței de timp pentru perechile de tipul IN-OUT (momentan setată la maximum 24 ore, ce depășește fiind considerată eroare) – de exemplu, se dorește pontarea personalului de pază ce își începe tura la 8 seara și își termină programul la 8 dimineața în ziua următoare; •excluderea anumitor turnicheți din calculul pontajului – de exemplu, turnicheții care fac legătură între două clădiri ale aceleași instituții; •normalizarea orelor la cea locală în momentul afișării orelor de intrare/ieșire – de exemplu, în cazul bazelor de date ale sistemului de control acces, setate pe alt fus orar. Conversia orelor este foarte exactă, librăria Carbon conținută și în Laravel, derivată din clasă DateTime a PHP-ului, dispune de metode ușor de apelat ce returnează diferența în minute / ore între înregistrările de ieșire și cele de intrare. Tot aceasta este responsabilă de afișarea numelui lunii corespunzător zilelor din intervalul selectat în mod dinamic. Este de menționat faptul că este posibilă generarea unui raport conținând un număr infinit de angajați, singura limitare posibilă reprezentând-o o configurație slabă a sistemului de calcul pe care este ținută aplicația. 3.2.6. Generare raport angajați absenți Acest tip de raport este destinat, de regulă, persoanelor din conducerea unei companii/instituții. Astfel, un manager poate solicita generarea unui raport cu angajații absenți la o anumită oră, dintr-o anumită zi. La click-ul pe căsuța conținând momentul de timp preselectat, coboară un meniu ce va conține ora și calendarul. Implicit este preselectat la ora și data curentă, utilizatorului fiindu-i permis să aleagă orice altă oră și zi din trecut pentru care dorește generarea. În cazul în care utilizatorul a introdus eronat un moment de timp, se poate relua operațiunea de selectare a acestuia, ori de câte ori este nevoie. În cazul generării raportului în format PDF, acesta va avea format A4, orientare orizontală și denumirea de “raport-absenti” concatenată cu data la care s-a generat fișierul.
Raportul conține o listă cu personalul care nu se află în clădire, sau nu a marcat acțiunea de intrare la porțile de control acces. Lista conține nume, prenume și gradul fiecărui astfel de angajat (vezi anexa F). Logica din spatele raportului o presupune verificarea existenței unei înregistrări în baza de date ce conține log-urile de acces, în următorul interval: de la începutul zilei selectate, reprezentând ora 00:00 până la ora selectată de utilizatorul aplicației. În acest moment sunt returnate toate persoanele care în ziua respectivă nu au nici o înregistrare, fiind de la sine înțeles că acestea nu au intrat în clădire. La acest array returnat, în plus se adaugă persoanele care au fost pe parcursul zilei respective în clădire, dar până la ora selectată de utilizator, au părăsit instituția marcând la poarta de acces acțiunea de ieșire. Astfel, în intervalul pornind de la începutul zilei și până la ora selectată, acești angajați dețin perechi de intrare-ieșire valide, datate cu un timp mai mic decât cel selectat în generarea raportului, cu condiția că ultima înregistrare să fie una de tipul OUT. De menționat este faptul că și în cazul acestui raport se pot filtra din codul aplicației cu ușurință persoanele de interes ale raportului după gradul acestora (de exemplu: profesor, agent de pază, șef catedră, etc), prin adăugarea sau eliminarea de funcții din array-ul staff regăsit în metoda generateStaffNotInSchool din ActivityRepository. 3.2.7. Generare raport persoane în instituție Acest tip de raport poate fi destinat unui manager al companiei, dar și persoanelor însărcinate cu funcția de supraveghere. Prin generarea lui la un anumit moment de timp se oferă o listă cu persoanele care se află în instituție. Implicit în căsuța de selectare a timpului este preselectat momentul curent, însă acest raport, că și cel al angajaților absenți, se poate genera pentru orice oră și dată din trecut. În cazul generării raportului în format PDF, acesta va avea format A4, orientare orizontală și denumirea de “raport-prezenti” concatenată cu data la care s-a generat fișierul. Raportul conține numărul curent, numele și prenumele fiecărui angajat care la momentul generării s-a aflat în clădire, marcând acțiunea de intrare la poarta de acces.
Logica din spatele generării acestui raport este aceea de a căuta în baza de date a sistemului de control acces toate persoanele care au avut ca ultimă acțiune înregistrată o operațiune de tipul IN. Se caută o astfel de acțiune începând cu ora 00:00 a zilei selectate și până la ora din selecție. Astfel este posibilă returnarea tuturor persoanelor aflate în clădire într-un anumit moment. Cum aplicația se bazează strict pe datele existente în baza de date a sistemului de control acces, nu se poate garanta corectitudinea raportului. O posibilă eroare poate interveni în momentul în care un angajat ajunge la ora 8 în instituție și marchează acțiunea de intrare. Tot el, la ora 9 părăsește instituția fără să marcheze acțiunea de ieșire. Ulterior acestei ore, un manager generează raportul persoanelor din instituție, selectând ora 10. Deoarece angajatul nu a marcat acțiunea de ieșire din clădire la turnichetul de la poarta de acces, acesta va apărea în lista persoanelor prezente în clădire chiar și la ora 10, întrucât în baza de date ultimă lui acțiune a rămas cea de IN. Este de menționat faptul că în comparație cu raportul conținând lista cu persoanele absente, raportul ce generează persoanele prezente în clădire nu poate fi filtrat după gradul angajatului. Acesta va afișa absolut toate persoanele prezente în clădire conform turnicheților de intrare. Această limitare se află de fapt într-o strânsă legătură cu posibila implementare a unui modul pentru situații de urgență din ce în ce mai căutat de clienți. 3.2.8. Modulul pentru situații de urgență Ținând cont că în orice moment de timp, pe baza înregistrărilor de intrare-ieșire stocate în baza de date a sistemului de control acces, se cunosc toate persoanele care sunt prezente în clădire și de faptul că, generarea acestui tip de raport durează sub 10 secunde pentru aproximativ 1000 angajați (conform testelor), se poate implementa modulul situatilor de urgență. Dacă în locație există instalată o centrală anti-incediu, la pornirea alarmei de incediu, aplicația poate declanșa în mod automat generarea raportului cu persoane prezente în locație. Acest raport poate fi trimis mai departe, în mod automat, pe email sau prin sms către toate persoanele din instituție însărcinate cu evacuarea locației în cazul unei situații de urgență. D.p.d.v tehnic este necesară programarea centralei anti-incediu ca în cazul declanșării alarmei să facă o cerere de tipul GET la o rută deja existentă în aplicație și
numită /event/fire. În acest moment, controlerul EventsController va apela metoda triggerFire ce va declanșa un nou Event numit FireEvent. Acesta va fi legat de un Listener care va apela metoda de generatePersonsInSchool din ActivityRepository și astfel se va face generarea raportului cu persoanele prezente. Tot Listener-ul va declanșa unul sau mai mult Job-uri : •sendReportOnSms; •sendReportOnEmail. Aceste job-uri se vor ocupa de trimiterea de de sms-uri și de mail-uri în timp simultan către unul sau mai mulți angajați. Totuși, din cauza limitării unui mesaj text la 160 de caractere, abordarea va fi următoarea: •Prin email se va primi raportul detaliat cu numele și prenumele fiecărui angajat prezent în clădire la momentul declanșării situației de urgență; •Prin SMS se va primi doar numărul total de persoane prezent în clădire la momentul declansării situației de urgență. Persoana care se presupune că în cazul declanșării unui astfel de situații se află la poarta de acces va număra angajații, va verifica numărul total al persoanelor ce se aflau în clădire, număr care este primit prin SMS. În cazul în care, ulterior numărătorii, totalul nu corespunde, reponsabilul va accesa lista primită pe email cu numele și prenumele angajaților care au fost prezenți și va știi exact persoanele care nu sunt prezente la punctul de întâlnire. Este de menționat faptul că în cazul unui exercițiu de incediu sau în lipsa unei centrale anti-incediu, care să declanșeze în mod automat acest proces, se poate declanșa și în mod manual prin accesarea rutei în mod direct. Bineînțeles, această rută poate fi accesată doar de utilizatorii care primesc permisiuni să inițieze o astfel de acțiune. Numerele de telefon și adresele de email la care se vor trimite alertele, se vor declara în fișierul de configurare al aplicației numit .env . Totodată, pentru evitarea situatilor limită, precum inactivitatea server-ului în momentul în care se declanșează un incediu, se poate opta și pentru trimiterea acestor rapoarte în mod automat la diferite intervale de timp. Această operațiune este gestionată de cron. 3.2.9. Generarea rapoartelor la comandă și generarea programată
Artisan este utilitarul de linie de comandă specific Laravel ce oferă comenzi utile pentru dezvoltarea aplicației. S-a amintit în capitolele anterioare de comenzile pentru rularea migratilor și pentru popularea bazei de date: php artisan migrate, php artisan db:seed. În plus, Laravel oferă dezvoltatorului posibilitatea de a-și defini proprile comenzi. Astfel, în directorul app/Console/Commands au fost definite două comenzi specifice aplicației: •report:sins – abreviere de la StaffNotInSchool, specifică raportului conținând persoanele absente; •report:stk – abreviere de la StaffTimekeeping, specifică raportului cu pontajul angajaților. Acestea pot fi rulate manual din linia de comandă prin php artisan nume_comandă – argumente_metodă. Generarea programată, sau rularea acestor comenzi definite de dezvoltator la un anumit interval de timp se poate face prin declararea lor în metoda Schedule din Kernel.php, aflat în directorul app/Console. Aplicația pentru generarea rapoartelor conține două comenzi definite în felul următor: $schedule->command(‘report:snis’)->dailyAt(‘8:16’); $schedule->command(‘report:stk’)->monthlyOn(‘1’); Prima comandă face referire la generarea raportului cu persoane absente în fiecare zi la ora 8:16 și trimiterea lui către o adresă de email definită tot în fișierul de configurare .env . Această oră poate fi modificată după cerințele clientului, însă majoritatea institutilor încep programul de lucru la ora 8:00, iar întârzierea permisă conform principiului “sfertul academic” este cea de 15 minute. A doua comandă face referire la generarea raportului conținând pontajul angajaților în fiecare zi de 1 ale fiecărei luni din an. Raportul generat va conține date referitoare la întreaga lună precedentă și cel mai probabil va fi trimisă pe email departamentului de resurse umane, email ce va fi definit tot în fișierul de configurare .env. Este de menționat că aceste tipuri de rapoarte, fie declanșate în mod manual prin intermediul liniei de comandă, fie generate la o anumită dată și oră în mod automat nu vor apărea în secțiunea Arhiva de Rapoarte din aplicație, dar vor fi stocate
în baza de date locală cu tipul ‘manual’, respectiv ‘cron’ în coloana type a tabelei Reports, din baza de date locală. Tot în fișierul Kernel.php, în cazul activării modului pentru situații de urgență amintit mai sus, se va defini comanda specifică generării raportului conținând persoane în școală: $schedule->command(‘report:pis)->hourly(); unde abrevierea PIS semnifică PersonsInSchool, așa cum este definit acest tip de raport în codul aplicației. Metoda hourly este specifică Laravel și va rula din oră în oră comanda de generare a raportului, pentru a avea date cât mai actualizate în cazul în care server-ul este picat în momentul în care izbucnește un incediu. 3.2.10. Modulul arhivă de rapoarte După cum i spune și numele, în această pagină se vor regăsi toate rapoartele generate vreodată de orice utilizator. Totuși și această secțiune beneficiează de sistemul de permisiuni, astfel: dacă un utilizator are dreptul să genereze doar un singur tip de raport din cele 3 existente, atunci acesta nu va putea să vizualizeze în arhiva rapoartelor și celelalte două tipuri pentru care nu are permisiuni. După cum am menționat și în capitolul trecut, în această listă nu vor fi afișate rapoartele care s-au generat prin intermediul liniei de comandă sau prin cron, la un timp programat. Lista conține numele raportului, data și ora la care s-a generat acesta și un buton Descarcă. Butonul permite utilizatorului să descarce / re-descarce raportul anterior generat de către el, sau de către orice alt utilizator în format PDF (vezi anexa G). La apăsarea butonului, se caută în baza de date a aplicației după identificatorul unic al raportului și se apelează metoda download din Laravel căreia i se specifică directorul din care să descarce fișierul și numele acestuia. 3.2.11. Modulul schimbare parola Orice utilizator are permisiunea de a-și modifica datele de autentificare, introducând parola actuală a contului și cea nouă de două ori.
În controlerul AccountController se regăsește metoda changePasswordAction care este apelată în momentul acționarii butonului Schimba parola. Aceasta se ocupă de verificarea corectitudinii câmpurilor introduse de utilizator, astfel: •sunt obligatorii de completat toate cele 3 câmpuri: parola veche, parola nouă, confirmare parolă nouă; •parola nouă trebuie să conțină minim 6 caractere. În cazul în care parola veche introdusă nu este cea corectă, se va afișa mesajul de eroare având culoarea roșie “Parola veche invalida”, iar utilizatorul va fi redirecționat înapoi spre formularul de schimbare al parolei. În cazul în care parola nouă nu este corect introdusă de două ori, va fi aruncată eroarea de validare specifică Laravel: “The given data failed to pass validation.” . În cazul în care toate câmpurile au fost completate corect, se va afișa mesajul de succes, având culoarea verde: “Parola contului a fost schimbata cu succes.” 3.2.12. Modulul delogare cont Delogarea contului este posibilă prin apăsarea butonului Ieșire din meniul aplicației, aflat în partea stânga a ecranului. Ruta folosită este cea specifică Laravel, apelându-se metoda logout din AuthController. Această metodă va șterge informațile de autentificare din sesiunea utilizatorului. După delogare, utilizatorul va fi redirecționat automat spre pagina de autentificare.
4. CONCLUZII În concluzie, soluția software “Aplicatie web în Laravel pentru generare de rapoarte” își îndeplinește majoritatea obiectivelor propuse, astfel: •Modularitatea acesteia permite integrarea ei în diferite sisteme software deja existente într-o companie; •Interfața grafică este livrată sub forma unei platforme web prietenoasa utilizatorului; •Inregistrea unor conturi noi de utilizator în aplicație poate fi efectuată doar de către administratorul platformei; •Conturile de utilizator au permisiuni granulare în ceea ce privește accesarea funcționalităților aplicației; •Modulele pentru generarea raportului conținând pontajul angajaților pentru un interval selectat, persoanele care au întârziat sau persoanele prezente în instituție la un moment de timp, sunt implementate și testate cu succes folosind o multitudine de seturi de date;
•Algoritmul care prelucrează înregistrările de intrare sau de ieșire poate filtra rezultatele returnate, după oricare câmpuri existente în baza de date a sistemului de control acces; •Rapoartele generate pot fi descărcate în format PDF sau vizualizate în format HTML în fereastra unui browser web; •Modulul pentru generarea programată a rapoartelor și trimiterea acestora prin email la un timp predefinit a fost implementat cu succes; • Modulul pentru listarea arhivei de rapoarte generate ce oferă posibilitatea redescarcarii acestora în orice moment de timp, precum și modulul pentru schimbarea parolei oferă funcționalități adiționale utile utilizatorului; •Raportul conținând persoanele prezente în clădire poate deveni vital în cazurile de urgență, de exemplu la izbucnirea unui incediu. În plus, aceasta va fi livrată la un cost mic pe baza unui abonament lunar sau anual și va suporta modificări în ceea ce privește adăugarea de noi module cu diferite funcționalități.
Bibliografie https://ro.wikipedia.org/wiki/Planificarea_resurselor_%C3%AEntreprinderii https://www.softwareadvice.com/erp/ https://www.britannica.com/technology/client-server-architecture https://en.wikipedia.org/wiki/Database https://en.wikipedia.org/wiki/HTML https://en.wikipedia.org/wiki/Cascading_Style_Sheets https://en.wikipedia.org/wiki/Bootstrap_(front-end_framework) https://en.wikipedia.org/wiki/JavaScript https://en.wikipedia.org/wiki/JQuery https://en.wikipedia.org/wiki/PHP https://en.wikipedia.org/wiki/Laravel https://en.wikipedia.org/wiki/MongoDB https://en.wikipedia.org/wiki/MySQL https://en.wikipedia.org/wiki/Nginx https://en.wikipedia.org/wiki/Git https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html https://en.wikipedia.org/wiki/Bitbucket
1
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: – Anul susținerii – 2018 [609372] (ID: 609372)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
