Hrabvariantarevizuita [617426]
ROMÂNIA
MINISTERUL APĂRĂRII NAȚIONALE
ACADEMIA TEHNICĂ MILITARĂ
„FERDINAND I”
FACULTATEA DE SISTEME ELECTRONICE ȘI INFORMATICE MILITARE
Specializarea: Calculatoare și sisteme informatice pentru apărare
și securitate națională
PLATFORMĂ WEB PENTRU
MANAGEMENTUL PERSONALULUI DIN
ACADEMIA TEHNICĂ MILITARĂ “FERDINAND I”
CONDUCĂTOR ȘTIINȚIFIC:
Lt. col. conf. dr. Mihai -Virgiliu TOGAN
ABSOLVENT: [anonimizat] ___________ file
Inventariat sub nr_______
Poziția di n indicator: ____
Termen de păstrare: _____
BUCUREȘTI
2018
NECLASIFIC AT
NECLASIFICAT
din
PAGINA ALBA
NECLASIFIC AT
NECLASIFICAT
din
PAGINA ALBA
NECLASIFIC AT
NECLASIFICAT
din
PAGINA ALBA
NECLASIFIC AT
NECLASIFICAT
din
PAGINA ALBA
NECLASIFIC AT
NECLASIFICAT
din
ABSTRACT
Personal data processing in a military institution can be a complex task .
This is mostly because this type of data is sensitive when it comes to matters of
processing, storage and updating. Therefore, there was a need for an app which
would make these tasks easier for the military staff in charge with human resource
management , within the Academy of Military Techniques ‘Ferdinand I’.
The aim of this project is to develop and implement a web app, meant to
facilitate personal data processing within the Academy of Military Techniques
‘Ferdinand I’. This app will be easy to use by whoever needs it, not only due to
its user -friendly design and clear data processing functions, but also because it
does not require an active internet connection.
The app was developed using several technologies and programming
languages, which are needed for a clear structure and an optimal, carefree
functioning. Data storage and data processing systems were also incorporated in
the app’s design.
The future users of the app were consulted in advance, regarding their
expectations from this app. Their requi rements were successfully integrated into
the app’s structure, easing its use. This aspect is confirmed in the following
project description, through possible usage scenarios.
In the current state, the app successfully fulfills all of the user requirements .
However, the developer believes that more improvements can be made to
facilitate even more the data processing. Nevertheless, it has to be mentioned that
the app can easily be edited and adapted, depending on the needs and
requirements of any military in stitution. The developer reckons that this app will
not only be time efficient, but also cost efficient for its users. This could constitute
a great advantage for any military institution that decides to employ this app for
their personal data processing n eeds.
NECLASIFIC AT
NECLASIFICAT
din
REZUMAT
Prelucrarea datelor cu caracter personal într -o instituție militară poate fi o
sarcină complexă. Acest lucru se datorează faptului că acest tip de date sunt
sensibile la procesare, stocare și actualizare. De aceea, a fost necesară crearea
unei aplicații ca re să ușureze aceste sarcini pentru cadrele militare din cadrul
Academiei de Tehnică Militară ‘Ferdinand I’, responsabile cu managementul
resurselor umane.
Acest proiect are ca scop principal crearea și implementarea unei aplicații
web, care să faciliteze prelucrarea datelor cu caracter personal, specific pentru
angajații Academiei de Tehnică Militară ‘Ferdinand I’. Această aplicație va fi
ușor de utilizat de către oricine are nevoie, atât datorită aspectului aparent simplu,
funcțiilor clare pentru procesar ea datelor, cât și faptului că nu necesită o
conexiune activă la internet.
Aplicația a fost creată folosind tehnologii și limbaje de programare care
sunt necesare pentru o structură clară a aplicației, și o funcționare optimă, fără
complicații. Sisteme de stocare și prelucrare a bazelor de date au fost, de
asemenea, încorporate în structura aplicației.
Viitorii utilizatori au fost consultați cu privire la nevoile lor pentru această
aplicație. Cerințele acestora au fost încorporate cu succes în structura ș i în
funcționarea ușoară a acesteia. Acest lucru este confirmat pe parcursul prezentării
proiectului prin intermediul scenariilor de utilizare.
Funcțiile necesare gestionării unei baze de date într -o astfel de instituție
sunt următoarele: posibilitatea de selecție a tipului de utilizator; Adăugarea și
setarea nivelului de acces la funcționalitățile disponibile; Notificări personalizate;
Generarea și editarea de tabele, cu posibilitatea de export în format Excel și CSV;
Adăugarea și ștergerea utilizatorilor; Generarea de rapoarte, documente și
șabloane personalizate, individual, în baza informațiilor disponibile în baza de
date; Posibilitatea de a vizualiza ultimele modificări făcute în baza de date.
Aplicația în momentul actual îndeplinește cerințele utiliz atorilor, însă din
punctul de vedere al dezvoltatorului aplicației, unele îmbunătățiri pot fi aduse,
pentru a facilita și mai mult gestionarea bazelor de date.
Trebuie de menționat că această aplicație poate fi modificată și adaptată,
în funcție de necesit ăți și cerințe, în cadrul tuturor instituțiilor militare.
Dezvoltatorul consideră că aceasta aplicație va fi eficientă pentru utilizatori, nu
doar din punctul de vedere al timpului consumat pentru gestionarea bazelor de
date, dar și din punct de vedere fin anciar. Acest aspect poate constitui un mare
avantaj pentru instituțiile militare care decid să se folosească de această aplicație.
NECLASIFIC AT
NECLASIFICAT
din
CUPRINS
CAPITOLUL I . INTRODUCERE 11
1.1 Importanța lucrării 11
1.2 Structura lucrării 11
CAPITOLUL II . TEHNOLOGII UTILIZATE 13
2.1 HTML, CSS, JavaScript și JQuery 13
2.2 Bootstrap 15
2.3 AJAX, PHP și MySQL 15
CAPITOLUL III . CERINȚELE APLICAȚIEI 17
3.1 Cerințele utilizatorilor 17
3.2 Cerințele ha rdware 18
CAPITOLUL IV . ARHITECTURA APLICAȚIEI 19
4.1 Front -end 19
4.2 Back -end 21
4.3 Baza de date 23
CAPITOLUL V . PREZENTAREA FUNCȚIONALITĂȚILOR 25
5.1 Pregătirea aplicației în momentul accesării 26
5.2 Pagina de logare 26
5.3 Pagina de start 28
5.4 Gestionarea rapoartelor 30
5.4.1 Generare rapoarte standard 30
5.4.2 Generare rapoarte pe rsonalizate 31
5.4.3 Generare rapoarte personalizate cu reguli 31
5.4.4 Generarea și adăugarea rapoartelor tipizate 32
5.5 Gestionarea datelor din tabele 33
5.5.1 Adăugarea unei persoane 33
5.5.2 Editarea datelor din tabel 33
5.5.3 Adăugarea și ștergerea coloanelor din tabel 34
5.6 Gestionarea șabloanelor 36
5.6.1 Adăugarea unui șablon 36
5.6.2 Generarea unui document pdf pe baza șablonulu i 36
NECLASIFIC AT
NECLASIFICAT
din
5.6.3 Editarea și ștergerea unui șablon 37
5.7 Import, export și backup 38
5.8 Gestionarea utilizatorilor 41
5.9 Gestionarea notificărilor 43
CAPITOLUL VI . PLANUL DE TESTARE AL APLICAȚIEI 45
6.1 Noțiuni teoretice 45
6.2 Testele de acceptare (validare) 45
6.3 Exe mple de testare 46
CAPITOLUL VII . CONCLUZII 49
7.1 Dezvoltări viitoare 49
BIBLIOGRAFIE 51
ANEXE 52
Anexa 1 – Codul sursă meniu pentru utilizator de tip administrator 52
Anexa 2 – Cod sursă pentru generarea raportelor personalizate cu reguli 54
Anexa 3 – Codul sursă pentru modificare datelor din tabel 56
Anexa 4 – Codul sursă pentru salvarea codului HTML pentru conversie în
format PDF și pentru generarea PDF -urilor 57
Anexa 5 – Coudul sursă pentru importul ș i exportul în format Microsoft Excel
59
NECLASIFIC AT
NECLASIFICAT
din
Tabela de figuri
Fig. 2.1 Prezintă cum funcționează AJAX. 15
Fig. 4.1 Pagina de logare 19
Fig. 4.2 Interfața și opțiunile header -ului 20
Fig. 4.3 Prezentarea funcționalităților aflate în sidebar 20
Fig. 4.4 Diagrama claselor 21
Fig. 4.5 Membrii și metodele clasei Templ ate 22
Fig. 4.6 Membrii și metodele clasei User 23
Fig. 4.7 Diagrama tabelelor din baza de date 24
Fig. 5.1 Fluxul aplicației din perspectiva unui utilizator 25
Fig. 5.2 Fluxul aplicației din perspectiva unui administrator 25
Fig. 5.3 Constructorul clasei Template 26
Fig. 5.4 Logarea utilizatorului 27
Fig. 5.5 Afișarea notifi cărilor pe pagina principală 28
Fig. 5.6 Afișarea tabelului de mesaje pe pagina principală 29
Fig. 5.7 Afișarea notificărilor pers onalizate pe pagina principală 29
Fig. 5.8 Afișarea tabelului de activitate pe pagina principală 30
Fig. 5.9 Afișarea raportului sta ndard 31
Fig. 5.10 Selectarea coloanelor pentru un raport personalizat 31
Fig. 5.11 Selectarea coloanelor și setarea regulilor pentr u un raport
personalizat 32
Fig. 5.12 Interfața de gestionare a rapoartelor tipizate 32
Fig. 5.13 Formularul pentru adăugarea pers onalului 33
Fig. 5.14 C ǎsuța de editare a datelor 34
Fig. 5.15 Afișa rea datelor pentru editare 34
Fig. 5.16 Interfața pentru adăugarea unei coloane în tabel 35
Fig. 5.17 Notificarea de success după adăugare 35
Fig. 5.18 Interfața de ștergere a unei coloane din tabel 35
Fig. 5.19 Interfața pentru adăugarea unui șablon 36
Fig. 5.20 Interfața pentru generarea unui șablon 37
Fig. 5.21 Exemplu de șablon generat 37
Fig. 5.22 Interfața pentru gestionarea șabloanelor 38
Fig. 5.23 Interfața pentru editarea șabloanelor 38
Fig. 5. 24 Funcționalitatea de import Excel 39
Fig. 5.25 Pop -up-ul de confirmare a importului 39
Fig. 5.26 Funcționalitatea de export 39
Fig. 5.27 Pop -up-ul de confirmare a exportului pentru vizualizare 40
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.28 Pop -up-ul de confirmare a exportului pentru modificar e 40
Fig. 5.29 Crearea și aplicarea ultimului back -up 41
Fig. 5.30 Aplicarea unui back -up dintr -o data anterioară 41
Fig. 5.31 Interfa ța pentru adăugarea unui utilizator 42
Fig. 5.32 Interfața pentru schimbarea parolei 42
Fig. 5.33 Interfața pentru adăugarea notific ărilor personalizate
standard 43
Fig. 5.34 Interfața pentru adăugarea notificărilor data -range 44
NECLASIFIC AT
NECLASIFICAT
din
CAPITOLUL I
1. INTRODUCERE
1.1 Importanța lucrării
Scopul princi pal al acestui proiect constă în implementarea unei aplicații
web, pentru a fi în ajutorul angajaților Academiei Tehnice Militare care se ocupă
cu prelucrarea datelor personalului aceleași instituții. Aplicația trebuie să conțină
o interfață user – friendl y care să permită unui utilizator să o folosească fără să
aibă cunoștinṭe avansate despre baze de date, sau limbajul de programare pe baza
căruia a fost construită aplicația.
Aplicația web va folosi ca host server un calculator pe care este instalat
sistem ul de operare Ubuntu Server. Acesta va fi conectat în rețeaua locală a
instituției, disponibilă doar cadrelor militare și didactice, fără acces la internet.
1.2 Structura lucrării
Primul capitol reprezintă partea de introducere a lucrării în care este
preze ntată importanța temei alese și o descriere a proiectului, pe capitole.
Capitolul doi cuprinde o scurtă descriere a tehnologiilor folosite pe parcursul
dezvoltării aplicației. Aceste tehnologii sunt HTML, CSS, JavaScript, JQuery,
Bootstrap, AJAX, PHP și My SQL.
Capitolul trei are drept scop prezentarea cerințelor aplicației și cerințele
hardware, necesare funcționării aplicației. Aceste cerințe au fost discutate cu
viitorii utilizatori ai aplicației.
Capitolul patru prezintă arhitectura aplicației împărțită în trei subcapitole:
partea de front -end (prezentarea interfeței), partea de back -end (prezentarea
claselor folosite), și partea de baze de date (prezentarea structurii bazei de date pe
care o folosește aplicația).
Capitolul cinci prezintă funcționalitățil e oferite de aplicație, modul de
utilizare și de implementare al lor.
În capitolul șase este prezentat planul de testare al aplicației pe cazuri și cu
scenarii de utilizare.
În capitolul șapte sunt prezentate concluziile acestei lucrări, dar și anumite
direcții viitoare de dezvoltare ale acestui proiect.
Ultimul capitol include referințele bibliografice ale surselor pentru
documentare folosite în elaborarea acestui proiect.
NECLASIFIC AT
NECLASIFICAT
din
NECLASIFIC AT
NECLASIFICAT
din
CAPITOLUL II
2. TEHNOLOGII UTILIZATE
2.1 HTML, CSS, JavaScript și JQuery
Limbajul HTML sau Hypertext Markup Language este utilizat pentru a
structura și a afișa o pagină web și conținutul acesteia. Conținutul poate fi
structurat într -un set de paragrafe, o listă cu puncte, sau folosind imagini și tabele
de date. Acesta nu este un limbaj de programare, este un limbaj de marcare care
definește structura paginii web. Este alcătuit dintr -o serie de elemente, numite
tag-uri, pe care le închizi sau în care încadrezi diferite părți ale conținutului pentru
a afișa/ a se comporta în modul dorit. [1]
Scheletul unui document HTML trebuie să conțină anumite tag -uri
esențiale, acestea sunt: <!DOCTYPE html> pentru a informa browser -ul că
documentul încărcat este o pagină HTML și trebuie compilat cu standardele
HTML, <html></html> este tag -ul de root al unui document HTML, acesta
încadrează tot conținutul paginii, <head></head> se comportă precum un
container pentru a include elemente, neafișabile pe pagină, precum cuvinte cheie,
descrierea paginii care va apărea în rezultatele de căutare, includerea fiș ierelor
CSS pentru stilizarea conținutului, declarația setului de caractere <meta
charset="utf -8">, titlul paginii <title></title> , iar tot conținutul care se dorește
a fi afișat se încadrează în tag -ul <body></body> .
Împreună cu Cascading Style Sheets ( CSS) și JavaScript, HTML stă la
baza procesului de creare a paginilor web, precum și pentru a crea interfețe pentru
telefoane mobile și aplicații web. HTML poate încorpora script -uri scrise în alte
limbaje, cum ar fi CSS și JavaScript, pentru a defini aspectul și dispunerea de text
și descrie structura unui site web și semantic. În plus, HTML are incluse indicii
pentru prezentarea sau aparența paginilor web, astfel clasificându -se mai mult ca
fiind un limbaj de creare, decât un limbaj de programare.
Limbajul CSS este limbajul folosit pentru descrierea stilului vizual (culori,
font-uri, aspect) al unui document HTML. Acesta permite adaptarea paginii pe
diferite la rezoluții diferite. CSS este independent de HTML și poate fi folosit ca
orice limbaj de mar kup bazat pe Extensible Markup Language (XML) . Separarea
codului CSS de HTML facilitează partajarea stilurilor între pagini. [2]
Avantajele folosirii CSS:
● Reduce din timpul de creare: Un CSS poate fi folosit de mai multe ori pentru mai
multe pagini HTML. Se poate defini un singur stil pentru fiecare element HTML
și refolosi pentru mai multe pagini Web.
● Performanță mai rapidă: Se poate crea un singur tag în CSS care se poate aplica
tuturor obiectelor implicate, spre deosebire de HTML. Astfel, mai puțin cod
înseamnă viteză mai bună de procesare.
NECLASIFIC AT
NECLASIFICAT
din
● Ușor de menținut: Pentru a face o modificare la nivel global de cod, pur și simplu
se schimbă stilul din CSS, și toate elementele corespunzătoare din toate paginile
web vor fi schimbate automat.
● Compatibil cu dispo zitive diferite: CSS oferă posibilitatea de optimizare a
codului pentru mai multe tipuri de dispozitive spre deosebire de HTML care
necesită cod diferit pentru fiecare tip de dispozitiv în parte. [2]
JavaScript este un limbaj de programare orientat pe ob iecte, bazat pe
conceptul prototipurilor. Este folosit pentru introducerea unor funcționalități în
paginile web, codul fiind rulat de către browser. Browserele rețin în memorie o
reprezentare a unei pagini web sub forma unui arbore de obiecte (Document
Object Model sau DOM), apoi pun la dispoziție aceste obiecte script -urilor
JavaScript, pe care le pot citi și manipula.
Avantaje JavaScript:
● Mai puțină interacțiune cu server -ul
● Feedback imediat
● Interactivitate crescută
● Interfețe consistente
Limitări:
● Client – side: JavaScript nu permite citirea sau scrierea în fișiere din
motive de securitate.
● JavaScript nu are suport pentru a putea fi folosit la aplicații de rețea.
● JavaScript nu are capabilități de multithreading sau multiprocesor.
[3]
JQuery este o platformă de dezvoltare JavaScript concepută pentru a ușura
și a îmbunătăți procesele pentru traversarea arborelui DOM în HTML,
managementul inter -browser al evenimentelor, animații și cereri de tip AJAX.
Există două metode pentru a folosi jQuery:
● Prin instalare locală: se poate descărcă librăria jQuery pe propriul computer unde
este inclusă în propriul cod HTML
● Content Delivery Network(CDN) – se poate include librăria jQuery direct în codul
HTML de la CDN. [4]
NECLASIFIC AT
NECLASIFICAT
din
2.2 Bootstrap
Bootstrap este un framework puternic de front -end folosit pentru developare
mai rapidă și mai ușoară pe partea de web. Este o combinație de HTML și CSS
pentru crearea de interfețe complexe cu mult mai puțin efort depus.
Bootstrap poate fi de 3 tipuri:
● bootstrap.css – un framework CSS
● bootstrap.js – un framework JavaScript/JQuery
● glyphicons – un font
Avantajele Bootstrap -ului:
● Varietate largă de opțiuni de creare – Unul din cele mai mari avantaje ale
bootstrapului este un set gratuit de opțiuni pentr u crearea unor interfețe flexibil și
ușor de realizat.
● Economisire timp – Se pot folosi template -uri de Bootstrap predefinite pentru
lucrul de developare.
● Design consistent – Toate componentele Bootstrap au în comun același cod într –
o librărie central, astfel încât interfețele paginilor web să fie cât mai consistente.
● Ușurință în folosire – Oricine cu cunoștințele de bază în HTML și CSS poate
folosi Bootstrap.
● Compatibilitate – Bootstrap este creat pentru a putea fi compatibil cu orice tip de
browser e xistent.
● Open Source – este gratuit pentru ca orice persoană să îl poată folosi. [5] [6]
2.3 AJAX, PHP și MySQL
AJAX, prescurtarea pentru Asynchronous JavaScript și XML, este o
tehnică de programare pentru crearea unor aplicații web interactive, care face c a
paginile web să fie mai rapide prin schimbul în fundal a datelor cu serverul.
Astfel, nu va fi nevoie ca pagina sa fie reîncărcată la fiecare acțiune a
utilizatorului. [7]
NECLASIFIC AT
NECLASIFICAT
din
Fig. 2.1 prezintă cum funcționează AJAX.
Numele PHP este un acronim recursiv PH P: Hypertext Prepprocessor. Este
un limbaj de programare structurat, folosit inițial pentru a produce pagini web
dinamice. Se folosește, în principal, înglobat în codul HTML, dar se poate folosi
și ca linie de comandă (CLI), permițând crearea de aplicații independente. Este
unul din cele mai importante limbaje de programare web open -source și server –
side. Sintaxa limbajului este foarte ușoară și destul de liberă, nu este nevoie de
includere de biblioteci sau directive de compilare.
Una din cele mai importan te facilități ale limbajului PHP este conlucrarea
cu majoritatea bazelor de date relaționale. Poate rula pe majoritatea sistemelor de
operare și poate interacționa cu majoritatea serverelor web. Codul PHP este
interpretat de serverul web generând codul HTM L care va fi văzut de către
utilizator.
Sistemul de gestiune a bazelor de date relaționale, numit MySQL care
utilizează Structured Query Language (SQL), este folosit foarte des împreună cu
limbajul de programare PHP, dar se poate folosi și cu C, C++, Java, Python.
NECLASIFIC AT
NECLASIFICAT
din
CAPITOLUL III
3. CERINȚELE APLICAȚIEI
3.1 Cerințele utilizatorilor
Această categorie de cerințe este determinată de persoanele care vor
interacționa în mod direct cu aplicația.
Actorii din acest cadru sunt angajații Academiei Tehnice Militare care se
ocupă de managementul personalului și al resurselor umane.
Cerințele utilizatorilor sunt:
1. Să conțină o pagină pentru autentificarea utilizatorilor.
2. Conturile de utilizator să fie împărțite în două categorii:
1. Administrator – acces total asupra funcț ionalităților
2. Cadru Personal – accesul este restricționat
3. Trebuie să pună la dispoziția administratorului posibilitatea de adăugare și
setarea nivelului de acces la funcționalitățile oferite de aplicație, unui utilizator
nou, precum și posibilitatea de eliminare a unui utilizator deja existent.
4. Aplicația trebuie să ofere funcția de notificare a utilizatorilor și adăugarea de
notificări personalizate pe baza coloanelor de tip date. Notificarea pentru
expirarea contractului de muncă să fie standard și s ă se genereze un tabel pentru
export în formatul CSV, compatibil cu standardul aplicației „ATM SMS
Gateway” pentru trimiterea de sms -uri pe baza fișierelor CSV.
5. Trebuie să ofere funcționalitatea de adăugare unei persoane noi în baza de date,
să ofere o interfață pentru editarea informațiilor din tabel, precum și posibilitatea
de adăugare și ștergerea coloanelor în tabel.
6. Aplicația trebuie să ofere opțiuni pentru generarea rapoartelor cu datele
personalului instituției. Rapoartele sa fie de tip: standa rd cu toate datele despre
personal, personalizate cu posibilitatea de selecție a datelor pe care le va conține
și tipizate pentru a salva șablonul raportului dorit.
7. Posibilitatea de a descarca rapoartele în format Microsoft Excel.
8. Importarea datelor din format Microsoft Excel.
9. Adăugarea de șabloane pentru documente standard și generarea automată de
documente PDF personalizate, pe baza acestor șabloane pentru o persoană
selectată din baza de date.
10. Tabel pentru vizualizarea ultimelor modificări a supra bazei de date.
NECLASIFIC AT
NECLASIFICAT
din
3.2 Cerințele hardware
Pentru instalarea și funcționarea aplicației sunt necesare minim
următoarele component hardware și software:
1. Server:
Hardware
● Procesor Intel sau AMD la 1200 Mhz
● 1 GB RAM
● Spațiu pe disc 20 GB
● Placă de rețea
Software
● Sistem de operare Ubuntu Server 18.04
● MySQL Server (serviciul de bază de date)
● Apache server (serviciul web)
● PHP (mediul de programare)
● PhpMyAdmin (interfață pentru administrarea bazelor de date)
2. Client:
Hardware
● Procesor Intel sau AMD la 1200 Mhz
● 4 GB RAM
● Placă de rețea
Software
● Sistem de operare Windows sau Linux
● Browser: Internet Explorer, Mozila Firefox sau Google Chrome
NECLASIFIC AT
NECLASIFICAT
din
CAPITOLUL IV
4. ARHITECTURA APLICAȚIEI
4.1 Front -end
Primul contact al utilizatorului cu aplicația va fi făcut cu interfața pagin ii
de logare, care este realizată într -un mod simplist și intuitiv.
Fig. 4.1 Pagina de logare
După logare, utilizatorul intră în contact cu interfața principală oferită de
aplicație, care este structurată pe trei părți: Header, Sidebar și Main Conten t.
În header vom găsi în partea dreaptă setările pentru interfață și opțiunile
utilizatorului pentru cont.
Setările pentru interfață constau în ascunderea sidebar -ului, setarea
meniului de header pentru a fi fix sau mobil, și mărirea spațiului pe care Îl o cupă
Main content în funcție de necesitățile utilizatorului.
Setările pentru utilizator constau în schimbarea parolei și delogarea.
Acestea sunt amplasate intr -un meniu de tipul dropdown -list care se activează
intuitiv la apăsarea numelui de utilizator, în soțit de o săgeată orientate în jos.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 4.2 Interfața și opțiunile header -ului
În sidebar în partea de sus avem sigla aplicației cu link către pagina de
home, iar în continuare este vizibil meniul cu funcționalități al aplicației. Acesta
poate sa fi e ascuns pentru o vizualizare mai bună asupra conținutului principal.
Fig. 4.3 Prezentarea funcționalităților aflate în sidebar
Home – este pagina de început care se deschide automat după
autentificarea cu succes a utilizatorilor, aici vor fi prezenta te notificările, tabelul
pentru export CSV și tabelul cu modificările asupra bazei de date.
NECLASIFIC AT
NECLASIFICAT
din
Rapoarte – oferă posibilitatea de vizualizare în formă tabelară a
informațiilor despre personal cu reguli de selecție sau fără, în funcție de
necesitatea utilizator ului.
Editare Tabele – cu opțiunile de adăugarea unei persoane sub forma unui
formular, modificarea datelor afișate sub formă tabelară și adăugarea sau
ștergerea coloanelor.
Șabloane Doc – pentru adăugarea de șabloane a documentelor, editarea
ulterioară a lor și generarea documentelor personalizate în format PDF.
Import/export/backup – pentru importul informațiilor din fișiere Microsoft
Excel, exportarea lor în același format, generarea de backup în momentul
importului și la cererea utilizatorului, și aplic area acestor backup -uri în cazul
deteriorării datelor.
Panou utilizatori – o funcționalitatea disponibila doar utilizatorilor cu nivel
de acces de tip administrator, oferă posibilitatea adăug ării și ștergerii utilizatorilor
și opțiunea de resetare a parole i.
Panou notificări – la fel ca și funcționalitatea precedent este disponibilă
doar administratorilor, acesta ofer ă posibilitatea adăugarii și ștergerii notificărilor
care se vor afișa pe pagina principală.
În anexa numărul 1 este prezentat codul sursă pentru adăugarea meniului
pentru utilizatorul fără drepturi și în cazul utilizatorului cu drepturi de
administrator.
În main content vor fi afișate paginile selectate de către utilizator din
sidebar. Interfața acestor pagini va fi prezentată în capitolul urm ător.
4.2 Back -end
În partea de back -end sunt folosite concept de programare orientate pe
obiecte și funcționalitățile oferite de limbajul PHP.
În acestă aplicație sunt folosite două clase principale, clasa Template și
clasa User, și două librării folosite p entru a lucra cu fișiere Microsoft Excel și
PDF. [8] [9]
Fig. 4.4 Diagrama claselor
Clasa Template este cea care asigură principalele funcționalități ale
aplicației, crearea template -ului pentru interfață, asigurarea conexiunii la baza de
date și leg ătura cu colecțiile de clase auxiliare. Prezentarea clasei se regăsește În
Fig. 4.5.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 4.5 Membrii și metodele clasei Template
Clasa User este utilizată pentru a stoca informațiile despre utilizatorul
curent pe perioada unei sesiuni active. Membrii clasei și metodele sunt prezentate
în Fig. 4.6.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 4.6 Membrii și metodele clasei User
4.3 Baza de date
Bazele de date sunt folosite pentru a împărți datele comcomitent între
clienți, pentru a le permite editarea și citirea lor simultană.
Pentru a org aniza datele din această aplicație într -un mod eficient am
folosit unsprezece tabele pentru următoarele date:
● Personal – stocarea datelor despre personalul instituției.
● Tabel_col_echiv – stocarea informațiilor despre coloanele existente în
tabelul personal .
● Tabel_user – stocarea informațiilor despre utilizatori
● Tabel_notificari – stocarea notificărilor standard
● Tabel_notif_personalizate – stocarea setărilor pentru afișarea notificărilor
personalizate
● Tabel_mesaje_csv – stocarea mesajelor pentru export CSV
● Tabel_adeverinte – stocarea șabloanelor
● Tabel_activitate_bd – stocarea log -urilor
● Tabel_evidenta_export – stocarea log -urilor exportului
● Tabel_raport_tipizat – stocarea set ǎrilor pentru generarea rapoartelor
tipizate
● Tabel_backup_export – stocarea log -urilo r backup -urilor
NECLASIFIC AT
NECLASIFICAT
din
Fig. 4.7 Diagrama tabelelor din baza de date
NECLASIFIC AT
NECLASIFICAT
din
CAPITOLUL V
5. PREZENTAREA FUNCȚIONALITĂȚILOR
Fig. 5.1 Fluxul aplicației din perspectiva unui utilizator
Fig. 5.2 Fluxul aplicației din perspectiva unui administrator
NECLASIFIC AT
NECLASIFICAT
din
5.1 Pregătirea a plicației în momentul accesării
În momentul accesării aplicației, se încarcă fișierele de configurarea și se
inițializează clasa template. După inițializarea clasei se setează variabilele de
configurarea cu opțiunile template -ului standard.
În momentul in ițializării clasei se apelează constructorul, unde se
inițializează sesiunea prin funcția session_start() și se realizează conexiunea de
tip pdo cu baza de date.
Fig. 5.3 Constructorul clasei Template
5.2 Pagina de logare
Pagina de logare este pagina de index a aplicației. Prin acestă pagina,
utilizatorii se conectează cu ajutorul numelui de utilizator și parolă pentru a putea
folosi funcționalitățile oferite de aplicație.
Procedura de logare constă în verificarea numelui de utilizator și hash -ul
parolei cu cele existente în baza de date. Singura modalitate de a obține acces
pentru această aplicație, este de a fi înregistrat de către un administrator. Aplicația
vine cu un cont de admin preînregistrat.
Interfața de logare a fost prezentată în Fig. 4.1, part ea de cod constă în
aducerea din baza de date a informațiilor pe baza numelui de utilizator, verificarea
are loc dacă avem rezultat pozitiv la interogarea bazei de date și folosind funcția
password_verify din PHP, care verifică hash -ul parolei introduse ce l din baza de
date dacă este disponibil. Aceste verificări se fac în același timp, dacă una din
aceste condiții de verificare este returnată cu valoare de fals, va fi returnat un
mesaj de eroare prin care se anunță utilizatorul că datele pentru logare sunt
greșite, iar dacă condițiile sunt adevărate datele despre utilizator sunt salvate în
variabila $_SESSION[“user”], de tipul User, disponibilă pe durata întregii sesiuni
de activitate a utilizatorului.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.4 Logarea utilizatorului
Tot în acestă par te a aplicației se face și verificarea pentru notificările
standard ce vor fi afișate pe pagina de start, prin funcția get_notification() a clasei
Template. În această funcție se selectează din tabelul personal coloanele
NUME_PTATA_P, CONTRACTUL_EXPIRA_LA_ DATA și
Numar_de_telefon pentru toate intrările din tabel, apoi pentru fiecare persoană se
face diferența dintre data curentă și data din a doua coloană specificată mai sus.
Notificările sunt clasate în funcție de diferență. Sunt patru tipuri de
notificăr i standard, notificările care se încadrează în intervalul de 180 și 120 de
zile numite Basic , cele care se încadrează în intervalul 120 și 90 de zile numite
Info, cele care se încadrează în intervalul 90 și 0 zile numite Avertizare și cele
mai mici de 0 zi le, adică contractele au expirat, se numesc Important .
După verificare și clasare sunt salvate în tabelul tabel_notificari care este
verificat în pagina de start, apoi dacă salvarea este realizată cu succes se crează
mesajul personalizat prin funcția make CsvMessages() din clasa Template,
mesajele sunt salvate în tabelul tabel_mesaje_csv. De exemplu, un mesaj pentru
o notificare Important ar fi de forma „Contractul dumneavoastră a expirat în
data de 2018 -03-30. PersonalATM” .
NECLASIFIC AT
NECLASIFICAT
din
5.3 Pagina de start
În acestă pagină sunt afișate notificările standard și cele personalizate,
tabelul de mesaje cu export în CSV pentru trimis prin aplicația „ATM SMS
Gateway” și tabelul pentru vizualizarea modificărilor asupra bazei de date.
Notificările standard sunt cele generate l a login și salvate în baza de date,
aceste notificări sunt afișate într -un <div></div> care ocupă jumătate din lățimea
disponibilă. Oferă butoane pentru afișarea selectivă în funcție de tipul notificării.
Dacă sunt mai mult de trei notificări noi, blocul v a avea o bară pentru scroll pe
verticală. Design -ul este unul simplu și intuitiv, cu un text care să îi prezinte
situația utilizatorului, fără a putea fi interpretată diferit. Blocul pentru notificări
standard este prezentat în Fig. 5.3.
Fig. 5.5 Afișa rea notificărilor pe pagina principală
Pe același rând cu aceste notificări este tabelul de mesaje, un table simplu
cu două coloane care oferă suport pentru export CSV. Prima coloană fiind
numărul de telefon, iar cea de a doua mesajul de trimis. Pentru afișarea acestui
tabel s -a folosit JavaScriptul DataTable. Tabelul este prezentat în Fig. 5.4.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.6 Afișarea tabelului de mesaje pe pagina principală
Următoarele blocuri afișate vor fi cele pentru notificări personalizate,
adăugate din panoul pentr u notificări. Notificările sunt luate în ordine, din tabelul
tabel_notif_personalizate . Ele sunt generate în momentul încărcării paginii,
pentru a nu încărca baza de date cu multe tabele și pentru a fi mai exacte în cazul
în care se modifică anumite date de care depind aceste notificări în tabelul
personal din baza de date.
Notificările per sonalizate sunt de două feluri, cele normale prin care se
specifică un număr N de luni, și o coloană de tip date făcându -se diferența dintre
data curentă și data din acea coloană adunată cu cele N luni, și data -range prin
care se aleg două coloane de tip d ate și se face diferența dintre cele două.
Fig. 5.7 Afișarea notificărilor personalizate pe pagina principală
NECLASIFIC AT
NECLASIFICAT
din
Ultimul bloc afișat este blocul cu tabelul de activitate asupra bazei de date,
poate fi vizualizat de către toți utilizatorii, nu poate fi ex portat sau modificat.
Modificările sunt afișate în șase coloane, iar fiecare intrare în tabel va avea o
culoare diferită în funcție de tipul activității. Sunt trei tipuri de modificări
afișabile, EDIT se distinge prin culoarea cyan (albastru deschis), DELE TE prin
culoarea roșie și ADD prin culoarea verde.
Fig. 5.8 Afișarea tabelului de activitate pe pagina principală
5.4 Gestionarea rapoartelor
Această funcționalitate este împărțită în patru module, cel de generare
rapoarte standard, generare rapoarte p ersonalizate, generare rapoarte
personalizate și adăugare de reguli, și generarea rapoartelor tipizate.
5.4.1 Generare rapoarte standard
Această funcționalitate oferă o vizualizare completă asupra tabelului
personal din baza de date. Acesta poate fi exportat î n Microsoft Excel, CSV și
copiat în clipboard. Tabelul oferă funcționalitate de căutare în tabel, de paginare
și de selectarea numărului de rânduri ce sunt afișate pe o pagină. Copierea
tabelului se face doar pentru informațiile afișate, iar exportul pentr u tot tabelul.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.9 Afi șarea raportului standard
5.4.2 Generare rapoarte personalizate
Acestă funcționalitate oferă posibilitatea de a selecta coloanele ce se doresc
a fi afișate. Are o interfață simplă, utilizând un select multiplu pentru a selecta
coloanele de care avem nevoie, acestea mutându -se într -un spațiu vizibil, în cazul
în care utilizatorul se răzgândește să o poată debifa. Deasupra acestor spații sunt
scrise în header mesaje intuitive pentru a ajuta un utilizator neexperimentat, care
are pent ru prima dată contact cu acestă aplicație.
Fig. 5.10 Selectarea coloanelor pentru un raport personalizat
5.4.3 Generare rapoarte personalizate cu reguli
Această funcționalitate oferă posibilitatea selectării coloanelor dorite și
aplicarea regulilor de sele cție din baza de date. Pot fi adăugate oricâte reguli
dorim, sau putem sa nu aplicăm nici o regulă. Regulile se aplică pe coloane, iar
tipul casetei în care introducem condiția este setată în funcție de coloana selectată
NECLASIFIC AT
NECLASIFICAT
din
pentru a impune acea regulă. Se ofe ră un text auxiliar pentru a se specifica cum
trebuie introduse aceste reguli. În anexa numarul 2 este prezentat codul sursă .
Fig. 5.11 Selectarea coloanelor și setarea regulilor pentru un raport
personalizat
5.4.4 Generarea și adăugarea rapoartelor tipizate
Funcționalitatea aceasta este cea care permite utilizatorului să salveze un
model de raport pentru utilizări viitoare. Interfața oferă trei opțiuni pentru
utilizator: să utilizeze un model, sa șteargă un model sau să adauge unul nou.
Modelul se salvează î n tabel_raport_tipizat, aici se salvează denumirea lui,
coloanele selectate și regulile transformate în limbaj SQL.
Fig. 5.12 Interfața de gestionare a rapoartelor tipizate
NECLASIFIC AT
NECLASIFICAT
din
5.5 Gestionarea datelor din tabele
5.5.1 Adăugarea unei persoane
Acestă funcționalitate oferă o modalitate dinamică de adăugarea unei
persoane, printr -o interfață de tip formular. Tipul căsuțelor de introducere a
datelor se afișează automat în funcție de tipul coloanei din tabel. În momentul
ștergerii sau adăugării unei coloane noi, se refle ctă acestă schimbare și în acest
formular. Crearea formularului se face prin funcția get_add_row(). Se trimit ca și
parametri, indicatorul de poziție și numele coloanei.
Evidența coloanelor este salvată în tabelul tabel_col_echiv, aici se salvează
numele coloanelor SQL, numele pentru afișare, ordinea pentru afișare în header –
ul tabelului și tipul coloanei cu numărul maxim de caractere.
Fig. 5.13 Formularul pentru adăugarea personalului
După adăugarea unei persoane va fi salvată în tabelul de activita te asupra
bazei de date acestă acțiune.
5.5.2 Editarea datelor din tabel
Această funcționalitate oferă o interfață sub formatul unui tabel ce permite
editarea datelor. Oferă posibilitatea de căutare în tabel pentru a ușura munca
utilizatorilor. Datele din tab el sunt afișate sub formă de link -uri care deschid în
același loc o căsuță pentru editarea datelor. Fig 5. .
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.14 C ăsuța de editare a datelor
Datele sunt trimise prin AJAX pentru modificare și primirea confirmării că
au fost modificate. Câmpuril e fără date au afișat un text specific și o culoare care
iese în evidență.
Fig. 5.15 Afișarea datelor pentru editare
Orice modificare va fi înregistrată în tabela de activitate asupra bazei de
date. Codul sursă se găsește în anexa numărul 3.
5.5.3 Adăugarea și ștergerea coloanelor din tabel
Adăugarea coloanelor constă în prelucrarea datelor introduse de utilizator
și crearea interogării, pentru adăugarea coloanei în tabelul personal, dar și în
tabelul tabel_col_echiv.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.16 Interfața pentru adăugare a unei coloane în tabel
După adăugarea coloanei, aplicația afișează o notificare prin care anunță
utilizatorul că acțiunea s -a realizat cu succes sau că a avut loc o eroare.
Fig. 5.17 Notificarea de succes după adăugare
Ștergerea constă în selectarea coloanei pe care utilizatorul dorește să o
elimine și generarea interogărilor necesare pentru a finaliza acțiunea în ambele
tabele.
Fig. 5.18 Interfața de ștergere a unei coloane din tabel
NECLASIFIC AT
NECLASIFICAT
din
5.6 Gestionarea șabloanelor
Șabloanele sunt texte predefinite pe ntru generarea documentelor
personalizate în format PDF.
5.6.1 Adăugarea unui șablon
Acestă funcționalitate constă în scrierea într -un editor, asemănător cu
Microsoft Word, numit Summernote. Se pot adăuga coloanele din tabelul
personal pentru a genera documente personalizate, în funcție de persoana
selectată.
Pentru a adăuga o coloană care să poată fi interpretată mai departe în cod,
cu acea coloană din tabel se folosește caracterul @ și vor apărea sugestiile de
coloane.
Textul este salvat ca și cod HTML în baza de date, mai exact în tabelul
tabel_adeverinte.
Fig. 5.19 Interfața pentru adăugarea unui șablon
5.6.2 Generarea unui document pdf pe baza șablonului
Acestă funcționalitate generează pe baza șabloanelor adăugate, un PDF
personalizat pentru persoana select ată. Se utilizează plugin -ul dompdf. Înainte de
a trimite conținutul pentru conversie se folosește funcția searchAndReplace() a
clasei Template pentru a înlocui numele coloanelor cu datele despre acea
persoană.
Codul sursă pentru salvarea codului HTML pent ru conversie în format
PDF și pentru generarea PDF -urilor se găsește în anexa numărul 4.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.20 Interfața pentru generarea unui șablon
Fig. 5.21 Exemplu de șablon generat
5.6.3 Editarea și ștergerea unui șablon
Pentru editarea unui șablon existent, se selectează șablonul și se apasă
butonul de editare. Ștergerea necesită aceleași procedură, doar că se termină cu
apăsarea butonului de ștergere.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.22 Interfața pentru gestionarea șabloanelor
Fig. 5.23 Interfața pentru editarea șabloanelor
5.7 Import, export și backup
Prin import, utilizatorul poate încărca un document Microsoft Excel în
baza de date. Tabelul personal va fi golit iar noile date vor fi citite din documentul
încărcat și salvate în baza de date. Documentul importat trebuie sa respec te
header -ul curent al bazei de date pentru a nu exista probleme la inserarea datelor
în tabel.
Opțiunea este disponibilă oricând pentru un administrator, iar pentru un
utilizator doar în momentul efectuării exportului pentru modificare.
În momentul import ului se efectuează un backup asupra tabelului personal
și tabel_col_echiv.
NECLASIFIC AT
NECLASIFICAT
din
Fig. 5.24 Funcționalitatea de import Excel
După apăsarea butonului de import va apărea un pop -up prin care
utilizatorul trebuie să confirme că dorește să realizeze importul și c a documentul
încărcat are extensia unui document Microsoft Excel.
Fig. 5.25 Pop -up-ul de confirmare a importului
Utilizatorul are două modalități de exportare, cel de exportare pentru
vizualizare și cel de exportare pentru modificare.
Fig. 5.26 Fu ncționalitatea de export
NECLASIFIC AT
NECLASIFICAT
din
Exportul pentru vizualizare îi permite utilizatorului să vizualizeze tabelul
din baza de date în format Excel fără să îl poată importa ulterior.
Fig. 5.27 Pop -up-ul de confirmare a exportului pentru vizualizare
Exportul pentru modificare îi permite utilizatorului să descarce tabelul
personal și să îl modifice în format Excel. Acestă opțiune blochează toate celelalte
funcționalități de a edita baza de date și îi activează utilizatorului opțiunea de a
importa fișierul. Administra torul poate opri blocarea editării, în momentul
stopării utilizatorul nu mai poate importa acel fișier pentru a nu exista pierderi de
date.
Fig. 5.28 Pop -up-ul de confirmare a exportului pentru modificare
Coudul sursă pentru importul și exportul în fo rmat Microsoft Excel se
găsește în anexa numărul 5.
NECLASIFIC AT
NECLASIFICAT
din
Backup -ul se crează automat în momentul importului, dar se poate crea și
manual prin apăsarea butonului crează din meniul back -up. Utilizatorul are
posibilitatea de a pune în aplicare ultimul back -up crea t sau de a selecta un back –
up dintr -o dată anterioară.
Back -ul conține fișierele Excel a tabelelor personal și tabel_col_echiv, în
momentul aplicării unui back -up se verifică mai întâi coloanele tabelului personal
care trebuie să fie aceleași cu cele din t abelul tabel_col_echiv. În cazul în care nu
se găsește, se crează o nouă coloană, iar în cazul în care este în plus, acesta se
șterge.
Fig. 5.29 Crearea și aplicarea ultimului back -up
Fig. 5.30 Aplicarea unui back -up dintr -o dat ă anterioară
5.8 Gest ionarea utilizatorilor
Acestă funcționalitate este disponibilă doar utilizatorilor cu acces de
administrator. Aceștia pot adăuga utilizatori din cadrul Departamentului
Administrative prin simpla selectare a persoanei respective. Apoi se selectează
tipul c ontului personal sau administrator. Contul este automat creeat cu datele din
coloana NUMU_PTATA_P din tabelul personal, caracterele sunt transformate în
NECLASIFIC AT
NECLASIFICAT
din
litere mici și iar spațiul se înlocuiește cu punct. Parola inițială a fiecărui cont este
codul numeric personal luat din același tabel.
Fig. 5.31 Interfața pentru adăugarea unui utilizator
Datele utilizatorului sunt salvate în tabelul tabel_user, parola este salvată
sub formă de hash realizat cu funcția password_hash(). Utilizatorul își poate
schimba pa rola ulterior.
Fig. 5.32 Interfața pentru schimbarea parolei
NECLASIFIC AT
NECLASIFICAT
din
Administratorul are opțiunea de a elimina un utilizator deja existent sau de
a reseta parola unui utilizator. Resetarea parolei constă în înlocuirea parolei
existente.
5.9 Gestionarea notificăr ilor
Această funcționalitate este disponibilă doar utilizatorilor cu nivelul de
acces de administrator. Aceștia pot adăuga notificări personalizate vizibile
pentru toți utilizatorii.
Notificările pot fi de două feluri, cele personalizate standard prin ca re
administratorii selectează o coloană de tip date din tabel și introduce numărul de
luni. (Ex: Pentru împuternicirea unui cadru se selectează coloana din tabel
asociată datei de începutul împuternicirii, câte luni cadrele sunt împuternicite,
iar aplicați a va anunța în permanență numărul de zile pe care acest cadru le mai
pentru a fi împuternicit) Fig 5.33.
Fig. 5.33 Interfața pentru adăugarea notificărilor personalizate standard
Notificările de tip data range constau în selectarea a două coloane de t ip date,
acestea fiind data de început, respective data de final, iar aplicația afișează în
NECLASIFIC AT
NECLASIFICAT
din
permanență statusul în care se află acea persoană. Fig 5.34.
Fig. 5.34 Interfața pentru adăugarea notificărilor data -range
NECLASIFIC AT
NECLASIFICAT
din
CAPITOLUL VI
6. PLANUL DE TESTARE AL AP LICAȚIEI
6.1 Noțiuni teoretice
Testarea programelor este un proces dezvoltat aproape simultan cu crearea
acestora, cu scopul de a verifica eficiența și corectitudinea algoritmilor.
Testul presupune o simulare a execuției programului, introducând un set
de date ales conform unor criterii de testare alese anterior, cu scopul de a
determina dacă rezultatul obținut în urma rulării programului cu datele de intrare
alese este cel corect. Rezultatul considerat corect este cel care atestă scopul inițial
al progra mului.
Pe parcursul fiecărui test sunt folosite seturi de date, fiecare corespunzând
unui caz de test. Acesta conține setul de date de intrare, precum și datele de ieșire
pe care ar trebui să le proceseze programul. Fiecărei valori sau fiecărui set de
valori introdus în program, îi corespunde o dată sau un set de date de ieșire
calculate independent de program.Un caz de test poate avea următoarea
structură : introducem valorile x1, x2, x3 în program. Conform specificațiilor
tehnice, valorile produse de pro gram ar trebui să fie y1 și y2. Un exemplu simplu :
dezvoltăm un program care să determine dacă un număr este prim. Testul
presupune introducerea unui set de date de la care așteptăm un anumit rezultat –
data de intrare poate fi numărul 17, despre care ști m că este un număr prim. Dacă
programul nu atestă acest lucru, algoritmul este eronat. Orice rezultat afișat care
nu reflectă o procesare corectă a datelor, conform programării algoritmului, poate
indica o eroare la nivel de cod.
Este importantă alegerea c azurilor de teste care să acopere toate funcțiile
programului. De aceea, sunt recomandate scenarii care pot acoperi verificarea
întregului cod. Pot fi incluse: scenariu cu răspuns clasic, scenarii care depășesc
parametrii datelor de intrare permise de prog ram, caz în care ne putem aștepta la
un mesaj de eroare care să indice utilizatorului cauza erorii. Scopul alegerii
cazurilor de teste este atât să punem în evidență funcționarea corespunzătoare a
programului, cât și de a evidenția potențialele erori.
6.2 Testele de acceptare (validare)
După ce testele de sistem au ajutat la corectarea majorității defectelor,
programul va fi livrat clientului/clienților pentru testele de acceptare. Sunt, de
NECLASIFIC AT
NECLASIFICAT
din
obicei, realizate de clienți, deși pot interveni și alte părți in teresate. Scopul testării
de acceptare este să stabilească încrederea în program. Este, de cele mai multe
ori, testare de validare.
Testarea de acceptare poate fi efectuată în două procese consecutive :
● Testarea alfa – se realizează când partea de dezvolt are/programare se
apropie de sfârșit.Se așteaptă modificări minore după testarea alfa.
● Testarea beta – este cunoscută și ca testare de câmp, deoarece are loc, de
cele mai multe ori, la sediul clientului. Programul este trimis viitorilor
utilizatori și est e utilizat în condiții de funcționare reale.
6.3 Exemple de testare
Cazuri de teste executate doar de interfața pusă la dispoziția utilizatorului
– teste sistem (teste funcționale) și exemple :
Caz 1
Pas 1. Descrierea pasului: Logarea la o aplicaṭi e test cu un cont valid.
Rezultate așteptate: Afișarea paginii de început.
Pas 2: Descrierea pasului : Click pe link -ul de “Delogare” aflat în colțul
din dreapta sus a submeniului utilizatorului.
Rezultate așteptate: Pagina de logare este afișată.
Caz 2
Pas 1. Descrierea pasului : Încărcarea pe aplicației a datelor dorite despre
personal.
Rezultate așteptate: Importarea corectă a datelor în tabelul personal
și afișarea acestora în rapoartele standard.
Pas 2. Descrierea pasului: Generarea rapoar telor personalizate,
personalizate cu reguli și cele tipizate.
Rezultate așteptate: Afișarea datelor în tabele și posibilitatea
exportării lor în format Excel.
Caz 3
NECLASIFIC AT
NECLASIFICAT
din
Pas 1. Descrierea pasului : Adăugarea șablonului pentru generarea unei
adeverințe.
Rezultate așteptate : Salvarea codului în baza de date și afișarea
modelului în meniul pentru generare.
Pas 2. Descrierea pasului : Generarea unei adeverințe personalizate în
format PDF.
Rezultate așteptate : Afișarea documentului PDF în format A4 cu
informațiile din modelul adăugat și cele despre persoana selectată.
Caz 4
Pas 1. Descrierea pasului: Adǎugarea de notificări personalizate.
Rezultate așteptate: Afișarea notificărilor în pagina principală.
NECLASIFIC AT
NECLASIFICAT
din
NECLASIFIC AT
NECLASIFICAT
din
CAPITOLUL VII
7. CONCLUZII
Scopu l acestui proiect a fost de a ușura activitatea personalului care se ocupa
de managementul resurselor umane din Academia Tehnică Militară „Ferdinand
I”.
Aplicația oferă funcționalitățile dorite de utilizatori și îi ajută în rezolvarea mai
rapidă a task -urilor zilnice.
Toate funcționalitățile aplicației au fost testate pe serverul instituției.
Problemele întâmpinate în timpul dezvoltării au fost:
● Salvarea textului cu diacritice în baza de date;
● Importul și exportul Excel;
● Generarea PDF -urilor cu diacritice ;
7.1 Dezvoltări viitoare
Pagină pentru afișare individuală a persoanelor înregistrare în baza de
date;
Generarea statisticelor și a graficelor personalizate;
Gestionarea persoanelor participante la cursuri;
Istoricul cursurilor pentru fiecare persoană.
NECLASIFIC AT
NECLASIFICAT
din
NECLASIFIC AT
NECLASIFICAT
din
BIBLIOGRAFIE
[1] [Online]. Available:
http://www.yourhtmlsource.com/starthere/whatishtml.html.
[2] [Online]. Available: http://www.tutorialspoint.com/css/what_is_css.htm.
[3] [Online]. Available:
http://www.tutorialspoint.com/javascri pt/javascript_overview.htm.
[4] [Online]. Available: http://www.tutorialspoint.com/jquery/jquery –
overview.htm.
[5] [Online]. Available: http://www.tutorialrepublic.com/twitter -bootstrap –
tutorial/bootstrap -introduction.php.
[6] [Online]. Available: ht tps://www.taniarascia.com/what -is-bootstrap -and-
how-do-i-use-it/.
[7] [Online]. Available: http://www.w3schools.com/ajax/ajax_intro.asp.
[8] "dompdf," 6 12 2017. [Online]. Available:
https://github.com/dompdf/dompdf.
[9] "PHPExcel," 25 12 2017. [Onli ne]. Available:
https://github.com/PHPOffice/PHPExcel.
NECLASIFIC AT
NECLASIFICAT
din
ANEXE
Anexa 1 – Codul sursă meniu pentru utilizator de tip administrator
$cb->main_nav = array (
array (
'name' => '<span class="sidebar -mini-hide">Home</span>' ,
'icon' => 'si si-cup',
'url' => 'home.php'
),
array (
'name' => '<span class="sidebar -mini-hide">Rapoarte</span>' ,
'icon' => 'si si-docs' ,
'sub' => array (
array (
'name' => 'Standard' ,
'url' => 'raport_standard.php'
),
array (
'name' => 'Personalizat' ,
'url' => 'raport_personalizat.php'
),
array (
'name' => 'Persona lizat Reguli' ,
'url' => 'raport_personalizat_select.php'
),
array (
'name' => 'Tipizat' ,
'url' => 'raport_tipizat.php'
)
)
),
array (
'name' => '<span class="sidebar -mini-hide">Editare Tabele</span>' ,
'icon' => 'si si-note' ,
'sub' => array (
array (
'name' => 'Adăugare Personal' ,
'url' => 'edit_adaugare_personal.php'
),
array (
'name' => 'Modificare date' ,
'url' => 'edit_modificare_date.php'
),
array (
'name' => 'Adăugare/Ștergere Coloane' ,
'url' => 'edit_adaugare_sterger e_col.php'
)
NECLASIFIC AT
NECLASIFICAT
din
)
),
array (
'name' => '<span class="sidebar -mini-hide">Șabloane doc</span>' ,
'icon' => 'fa fa -file-pdf-o',
'sub' => array (
array (
'name' => 'Adăugare' ,
'url' => 'adaugare_adeverinte.php'
),
array (
'name' => 'Generare' ,
'url' => 'generare_adeverinta_pdf.php'
),
array (
'name' => 'Editare/Ștergere ',
'url' => 'adeverinta_editare.php'
)
)
),
array (
'name' => '<span class="sidebar -mini-hide">Import/Expot/Backup</span>' ,
'icon' => 'si si-layers' ,
'url' => 'import_export_backup.ph p'
)
);
//Adaugarea paginilor exclusiv pentru Administrator
if ( $_SESSION ['user' ]->getUserType ()=='A')
{
array_push( $cb->main_nav ,array (
'name' => '<span class="sidebar -mini-hide">Panou utilizatori</span>' ,
'icon' => 'si si-users',
'url' => 'admin_meniu_utilizatori.php'
));
array_push( $cb->main_nav ,array (
'name' => '<span class="sidebar -mini-hide">Panou notificări</span>' ,
'icon' => 'si si-bell',
'url' => 'panou_notificari.php'
));
}
NECLASIFIC AT
NECLASIFICAT
din
Anexa 2 – Cod sursă pentru generarea raportelor personalizate cu reguli
<form action= "raport_personalizat_generare_select2.php" method= "post"
onsubmit= "submit ">
<div class= "block -content" >
<div class= "row items -push" >
<div class= "col-xl-6">
<div class= "form -group row" >
<label class= "col-12" for="colName[]" >Alegeți Coloanele </label>
<div class= "col-lg-12">
<select class= "js-select2 form -control" id="colName[]" name= "colName[]"
style= "width : 100%;" data-placeholder= "Choose many.." multiple required >
<option></option>
<?php
for($i=0;$i<$nameCount ;$i++)
{?> <option value= "<?=$i+1?>">
<?php
echo $collName [$i];
}
?> </option>
</select>
</div>
</div>
</div>
<div class= "col-xl-6" id="selectAll" >
<div class= "form -group row" id="SelectCol1" >
<label class= "col-12" for="select_col[1][0]" >Regula 1 </label>
<div class= "col-6">
<select class= "js-select2 form -control" id="select_col[1][1]"
name= "select_col[1][1]" style= "width : 100%;" data-placeholder= "Choose one" required
onchange= "getInputLabel (1);">
<option></opti on>
<?php
for($i=0;$i<$nameCount ;$i++) {
$val= (int) $i+1;
echo '<option value="' .$val.'">'.$collName [$i].'</option>' ;
}
?>
</select>
</div>
NECLASIFIC AT
NECLASIFICAT
din
</div>
</div>
<div class= "col-lg-12">
<button type= "button" class= "btn btn -primary min -width -125"
onclick= "getSelectRow ();">Adăugare regulă </button>
<button type= "button" class= "btn btn -primary min -width -125"
onclick= "deleteLastRow ();">Șterge ultima regulă </button>
<button data-toggle= "tooltip" title= "Generare raport" type= "submit" class= "btn btn –
primary min -width -125" style= "align -content : right" >Generare </button>
</div>
</form>
Selectarea tipului de input pentru adăugarea regulilor în
funcție de coloana selectată – JavaScript + AJAX
<script type= "text/javascript" >
var globalCounter= 2;
function getInputLabel (counter) {
var div1= document. createElement ("div" );
div1.className= "col-6";
div1.id = "insert" +counter. toString ();
var name= "select_col[" +counter. toLocaleString ()+"][1]" ;
var value = document. getElementById (name.toString ()).value ;
var name2= "SelectCol" +counter ;
$.ajax({
url: 'row_input.php' ,
data: {id_row : value , counter : counter} ,
type: 'post' ,
success : function (row_php) {
if(document. getElementById ("insert" +counter. toString ()))
{
document. getElementById ("insert" +counter. toString ()).innerHTML=row_php ;
}else {
div1.innerHTML = row_php ;
docu ment. getElementById (name2. toString ()).appendChild (div1) ;
}
}
});
}
function getSelectRow () {
if(globalCounter<= 0)globalCounter= 1;
var div2= document. createElement ("div" );
div2.className = "form -group row" ;
div2.id= "SelectCol" +globalCounter. toString ();
NECLASIFIC AT
NECLASIFICAT
din
$.ajax({
url: 'select_input.php' ,
data: {counter_row : globalCounter} ,
type: 'post' ,
success : function (select_php) {
div2.innerHTML =select_php ;
document. getElementById ("selectAll" ).appendChild (div2)
globalCounter++ ;
}
});
}
function deleteLastRow () {
globalCounter –;
var div = document. getElemen tById ("SelectCol" +globalCounter. toString ());
document. getElementById ("selectAll" ).removeChild (div) ;
}
</script>
Anexa 3 – Codul sursă pentru modificare datelor din tabel
<tbody>
<?php
foreach ($collD as $row ){ $space = ''?>
<tr>
<?php f or ($i = 0; $i < $nameCount ; $i++){ ?>
<td class= "d-none d -sm-table -cell"> <?php
if($i==0) for($j=0;$j<15;$j++) $space =$space .'  ' ;
$SQLQuery = "SELECT `Col_SQL` FROM `tabel_col_echiv` WHERE `Col_tab` LIKE '" .$collName [$i]."'";
$details =$cb->__pdo ->query ($SQLQuery );
$data_name =$details ->fetchAll (PDO:: FETCH_COLUMN , 0);
if($row [$i]!=null) echo '<a href="#" class="data -t" data -type="text" data -pk="' .$row [0].'" data -url="mockajax" data –
name="' .$data_name [0].'" styl e="color: black">' .$row [$i].$space .'</a>' ;
else echo '<a href="#" class="data -t" data -type="text" data -pk="' .$row [0].'" data -url="mockajax" data –
name="' .$data_name [0].'" style="color: red">Gol</a>' ;;
}}?> </td>
</tr>
</tbody>
NECLASIFIC AT
NECLASIFICAT
din
Trimiterea datelor pentru editare – Jquery + AJAX
$(document).ready( function () {
$.fn.editable.defaults.mode = 'inline' ;
$('.data -t').editable({
ajaxOptions: {
url: 'edit_modificare_dt.php' ,
type: 'POST' ,
dataType: 'json' ,
}
});
$.mockjax({
url: '../../edit_modificare_dt.php' ,
responseText: {
status: "OK"
}
}
});
});
Anexa 4 – Codul sursă pentru salvarea codului HTML pentru conversie în
format PDF și pentru generarea PDF -urilor
Extragerea conținutului din editor – JavaScript + AJAX
function toPdfF () {
var textareaValue = $( '#textHtml' ).summernote( 'code' );
//var text= encodeHtmlEntity(textareaValue);
var name = document. getElementBy Id("adev_name" ).value ;
if (name !== '') {
$.ajax({
url: 'adeverinta_adaugare_sql.php' ,
data: {textHtml : textareaValue , name : name} ,
type: 'post' ,
success : function (row_php) {
alert("Șablonul a fost adaugat cu succes!" );
}
});
}
else
alert("Va rugăm să completați numele și conținutul!" )
}
NECLASIFIC AT
NECLASIFICAT
din
Funcția de generarea PDF și funcția de căutare și înlocuire a cuvintelor
cheie cu datele persoanei selecta te – PHP
public function generarePDF ($idAdev , $idPers ){
require_once 'dompdf/lib/html5lib/Parser.php' ;
require_once 'dompdf/lib/php -font-lib/src/FontLib/Autoloader.php' ;
require_once 'dompdf/lib/php -svg-lib/src/autoload.php' ;
require_once 'dompdf/autoload.inc.php' ;
$SQLQuery ="SELECT * FROM `tabel_adeverinte` WHERE `ID`=" .$idAdev ;
$details = $this ->__pdo ->query ($SQLQuery );
$content =$details ->fetchAll ();
$tes= '<font face="DejaVu Sans">' ;
$tes = $tes. $content [0][2];
$tes.= '</font>' ;
// instantiate and use the dompdf class
$options =new \Dompdf \Options() ;
$options ->setDpi (100);
$dompdf = new \Dompdf \Dompdf( $options );
$dompdf ->loadHtml ($this ->searchAndReplace ($tes,$idPers ), 'UTF -8');
// (Optional) Setup the paper size and orientation
$dompdf ->setPaper ('A4', 'portrait' );
// Render the HTML as PDF
$dompdf ->render ();
// Output the generated PDF to Browser
$name =$content [0][1].".pdf" ;
$dompdf ->stream ($name , array ('Attachment' =>0));
}
public function searchAndReplace ($text ,$id){
$SQLQuery ="SELECT `Col_SQL` FROM `tabel_col_echiv` ORDER BY `NUMAR`
ASC" ;
$details =$this ->__pdo ->query ($SQLQuery );
$colHeader =$details ->fetchAll (PDO:: FETCH_COLUMN , 0);
$colCounter =$details ->rowCount ();
$SQLQuery ="SELECT * FROM `personal` WHERE `ID`=" .$id;
$details =$this ->__pdo ->query ($SQLQuery );
$persdetails =$details ->fetchAll ();
NECLASIFIC AT
NECLASIFICAT
din
$newText =$text ;
for ($i=0;$i<$colCounter ;$i++)
{
$string = '@' . $colHeader [$i] . '@';
if($i>0)
{
$newText = str_replace( $string , $persdetails [0][$i], $newText );
}
else {
$newText = str_replace( $string , $persde tails[0][$i], $text );
}
}
return $newText ;
}
Anexa 5 – Coudul sursă pentru importul și exportul în format Microsoft
Excel
public function importDataXlxs ($filePath ){
$this ->__pdo ->query ("TRUNCATE TABLE `personal`" );
require_onc e 'PHPExcel/IOFactory.php' ;
require_once 'PHPExcel/Cell.php' ;
define( 'EOL' ,(PHP_SAPI == 'cli') ? PHP_EOL : '<br />' );
$SQLQuery = "SELECT `IS_NULLABLE`,`COLUMN_NAME` FROM
`INFORMATION_SCHEMA`.`COLUMNS` WHERE
`TABLE_SCHEMA`='personal_web_manage r' AND `TABLE_NAME`='personal'" ;
$details = $this ->__pdo ->query ($SQLQuery );
$rowD = $details ->fetchAll ();
$nameCount = $details ->rowCount ();
try {
$objReader = PHPExcel_IOFactory:: createReader ('Excel2007' );
$objPHPExcel = $objReader ->load($filePath );
$nrRow =0;
foreach ($objPHPExcel ->getWorksheetIterator () as $worksheet ) {
foreach ($worksheet ->getRowIterator () as $row ) {
if ($nrRow > 0) {
$SQLQuery = "INSERT INTO `personal` (" ;
for ($i = 0; $i < $nameCount ; $i++) {
$SQLQuery = $SQLQuery . '`' . $rowD [$i][1] . '`';
if ($i < $nameCount – 1)
$SQLQuery = $SQLQuery . ' , ';
NECLASIFIC AT
NECLASIFICAT
din
else
$SQLQuery = $SQLQuery . ')';
}
$SQLQuery = $SQLQuery . " VALUES ( " ;
$cellIterator = $row ->getCellIterator ();
$cellIt erator ->setIterateOnlyExistingCells (false );
$i = 0;
foreach ($cellIterator as $cell ) {
if (!is_null( $cell ) && $cell ->getFormattedValue ()!="NULL" ) {
if ($this ->verif yIfColIsDate ($i+1) == false )
$SQLQuery = $SQLQuery . "'" . $cell ->getFormattedValue () . "'";
else {
$val=$cell ->getValue ();
if ($val!="") {
if (preg_match( "/^[0 -9]{4} -(0[1-9]|1[0 -2])-(0[1-9]|[1-2][0-9]|3[0 –
1])$/" ,$val)) {
$SQLQuery = $SQLQuery . "'" . $val . "'";
} else {
$SQLQuery = $SQLQuery . "'" . date( "Y-m-
d",PHPExcel_Shared_Date:: ExcelToPHP ($val)) . "'";
}
} else {
$SQLQuery = $SQLQuery . "NULL" ;
}
}
} else
$SQLQuery = $SQLQuery . "NULL" ;
if ($i < $nameCount – 1)
$SQLQuery = $SQLQuery . ' , ';
else
$SQLQuery = $SQLQuery . ')';
$i++;
}
$this ->__pdo ->query ($SQLQuery );
}
$nrRow ++;
}
}
}catch (PHPExcel_Exception $exception )
{
$exception ->getTraceAsString ();
echo $exception ;
}
}
NECLASIFIC AT
NECLASIFICAT
din
public function exportDataXlsx (){
require_once 'PHPExcel/IOFactory. php';
require_once 'PHPExcel.php' ;
ini_set( 'date.timezone' , 'Europe/Bucharest' );
$SQLQuery = "SELECT `Col_Tab` FROM `tabel_col_echiv` ORDER BY
`tabel_col_echiv`.`NUMAR` ASC" ;
$details =$this ->__pdo ->query ($SQLQuery );
$tableHeader =$detail s->fetchAll (PDO:: FETCH_COLUMN , 0);
$headerCount =$details ->rowCount ();
$SQLQuery = "SELECT * FROM `personal`" ;
$details =$this ->__pdo ->query ($SQLQuery );
$tableContent =$details ->fetchAll ();
$columnCount =$details ->rowCount ();
try {
$objPHPExcel = new PHPExcel() ;
$objPHPExcel ->setActiveSheetIndex (0);
$rowCount = 1;
$column = 'A';
for ($i = 0; $i < $headerCount ; $i++) {
$objPHPExcel ->getActiveSheet ()->setCellValue ($column .
$rowC ount,$tableHeader [$i]);
$column ++;
}
$rowCount = 2;
foreach ($tableContent as $row ) {
$column = 'A';
for ($j = 0; $j < $headerCount ; $j++) {
if (!isset($row [$j]))
$value ="";
elseif ($row [$j] != "")
$value = $row [$j];
else
$value = "";
$objPHPExcel ->getActiveSheet ()->setCellValue ($column . $rowCount , $value );
$column ++;
}
$rowCount ++;
}
header( "Pragma: public" );
header( "Expires: 0" );
header( "Cache -Control: must -revalidate, post -check=0, pre -check=0" );
header( "Content -Type: application/force -download" );
header( "Content -Type: application/octet -stream" );
header( "Content -Type: application/download" );
$fileName ="ExportPersonal_" .date( "Y-m-d_H-i-s").".xlsx" ;
NECLASIFIC AT
NECLASIFICAT
din
header( 'Content -Disposition: attachment;filename="' .$fileN ame.'"');
$objWriter = new PHPExcel_Writer_Excel2007( $objPHPExcel );
$objWriter ->save('php://output' );
exit();
}catch (PHPExcel_Exception $e )
{
$e->getTraceAsString ();
echo $e;
}
}
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: Hrabvariantarevizuita [617426] (ID: 617426)
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.
