Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Rapoarte
Folosindu-se datele introduse la rezolvarea unei interventii, se pot realiza diverse rapoarte, unele dintre acestea fiind cerute de conducere, altele avand relevanta in organizarea interna a departamentului de suport IT. Astfel au fost indentificate mai multe tipuri de rapoarte:
Raport dupa department;
Raport dupa tipul problemei;
Raport pe om;
Raport data;
La acestea s-a adugat un Raport customizat ce permite alegerea criteriilor dupa care se va face raportul.
Raport dupa departament
Acest raport preinta toate interventiile care au fost efectuate in cadrul unui departamentedivizie.
Cu ajutorul unui drop down list se poate alege deprtamentul asupra caruia se va face raportul. Se obtine apoi un raport de forma:
Acest raport este afisat cu ajutorul un tabel in care se defineste mai intai capul de tabel
echo '<h2>Raport interventii pentru $departament</h2>';
echo '<table border = 1>';
echo '<tr><td><center>Nr.</center></td>';
echo '<td><center>Problema</center></td>';
echo '<td><center>Data introducere</center></td>';
echo '<td><center>Introdus de</center></td>';
echo '<td><center>Descriere</center></td>';
echo '<td><center>Data rezolvare</center></td>';
echo '<td><center>Rezolvat de</center></td>';
echo '<td><center>Descriere</center></td>';
echo '<td><center>Alte mentiuni</center></td></tr>';
Acesta se completaza apoi cu campurile corespunzatoare tuturor intrarilor din baza de date din tabela ISTORICINTERVENTII:
$string = 'select * from $tabela4 where iddivizie = '$iddepartament'';
* $tablela4 reprezinta tabela ISTORICiNTERVENTII, iar $iddepartament id-ul diviziei pentru care se face reportul */
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
while ($i < $n)
echo </table>;
Raportul poate fi download-at si in format csv. Se creaza astfel un fisier local rapoarte/raportdep.csv, raport ce poate fi apoi download-at cu ajutorul unui link:
In raportul in format csv apar detalii ale interventiilor in plus cum ar fi numele si interiorul telefonic al solicitantului. Mai jos se afla codul php prin care se realizeaza acest lucru:
$filename = 'C:Program Files (x86)EasyPHP-5.3.2iwwwinternalaffairsrapoarteraportdep.csv';
if (!$fp = fopen($filename , 'w'))
fputs($fp , 'Raport interventii pentru $departamentn');
$captabel = 'Nr.;Problema;Data introducere; Ora introducere; Introdus de; Descriere problema; Data rezolvare; Ora rezolvare; Rezolvat de; Descriere problema;Altementiunin';
fputs($fp , $captabel);
while ($i < $n)
fclose($fp);
Raport dupa tipul problemei
Acest raport prezinta toate interventiile care au fost de un anumit tip de problema reprezentata de nomenclatorul din tabela PROBLEME. Se poate alege categoria de probobleme cu ajutorul unui drop down list:
Se obtine astfel un raport de forma:
, care, la fel ca in cazul raportului dupa departament, poate fi download-at in format csv (codul php este similar).
Raport pe om
Acest raport permite vizualizarea tuturor interventiilor introduse, dar si rezolvate de un tehnician. In mod similar, se alege username-ul utiliatorului pentru care se face raportul:
Se obtine un raport ca cel de mai jos, raport ce poate fi download-at, de asemenea, in format csv:
Raport data
Acest raport permite vizualizarea tuturor interventiilor ce au avut loc intre doua date (inclusiv aceste doua date). Cele doua date calendaristice se introduc in foromatul (aaaa-ll-zz) in doua textbox-uri.
Raportul obtinut poate si el fi download-at in format csv:
Raport customizat
Acest raport permite realizarea unui raport mai complex, pentru realizarea lui permitandu-se alegerea mai multor criterii (filtre):
Se obtine un raport ce poate fi download-at de asemenea in format csv:
Grafice
Un raport grafic poate fi mai usor de ,citit', relevanta lui fiind mai usor de inteles. De aceea, s-a ajuns la concluzia ca e nevoie si de astfel de rapoarte. Aceste grafice au insa la baza un alt citeriu de reprezentare a problemelor si anume importanta lor. Algoritmul de calcul pentru o interventie va fi explicat printr-un exemplu:
Sa presupunem ca avem introduce 5 interventii, cu detaliile de mai jos:
Conform tabelei PROBLEME, fiecarui tip de probleme ii este asociat o dificultate (importanta), de exemplu, daca apare o problema in functionarea hardware a unui server, acest lucru este mult mai important decat daca ar exista o problema de functionalitate la un calculator al unui redactor. Astfel, categoria Centrala telefonica are importanta 4, Hardware Servere 3, iar Telefoane, Fonturi si Software PC 1 (aceste importante au fost stabilite de departementul de suport IT si au valori de la 1 la 4).
De asemenea, datorita faptului ca pot aparea complicatii la efectuarea unor interventii sau pentru ca categoria problemei in care interventia se incadreaza este mai complexa si s-a dorit o mai corecta evaluare a activitatii tehnicienilor, tuturor interventiilor li s-au asociat si o dificultate a rezolvarii stabilita de tehnicianul care a rezolvat problema (0 - mica, 1- medie si 2 - mare).
Astfel, algoritmul identificat in cadrul departamentului pentru evaluarea dificultatii (importantei) unei intervenitii este:
Dif[i] = dif_problema[i]*dif_tip_problema[i], unde:
dif_problema[i] = 1, daca dificultatea rezolvarii este 0 (mica);
= 5, daca dificultatea rezolarii este 1 (medie)
= 11, daca dificultatea rezolvarii este 2 (mare);
dif_tip_problema[i] = dificultatea (importanta) tipului de problema asa cum este ea asignata in tabela PROBLEME.
O alta notiune ce este asociata unei interventii este cea de vina. Vina unei interventii este cel putin una din urmatoarele:
hardware (codficat cu valoarea 1) - problema a aparut din cauza unei probleme in functionarea din punct de vedere fizic al unui echipament;
- software (codificat cu valoarea 2) - problema a aparut din cauza functionarii defectoase a unei aplicatii software;
- tehnica (codificat cu valoarea 4) - problema a aparut din cauza unei erori a departamentului de suport IT;
- user (codificat cu valoarea 8) - problema a aparut din cauza utilizarii defectoase a user-ului echimpamentului IT;
- furnizor (codificat cu valoarea 16) - problema a aparut din cauza furnizorului echipamentului sau aplicatiei software defectate.
Vina aparitiei unei probleme poate fi multipla, de aceea vina interventiei o reprezinta suma celor 5 vine in parte (valoarea 0 se afla in dreptul acelei vine care nu reprezinta o cauza pentru interventia respectiva). Asocierea cu puteri ale lui 2 (0, 1, 2, 4, 8,16) face mai usoara codificareadecodificarea vinei totale pentru identificarea ulterioara a cauzelor aparitiei problemelor.
Avand toate aceste elemente la dispozitie, s-au identificat urmatoareale rapoarte grafice:
Grafic pe departament
Acest grafic prezinta importanta interventiilor pe departamentedivizii. Importanta unei divizii reprezinta suma tuturor interventiilor efectuate asupra problemelor aparute in divizia respectiva.
Ca intrari, se asteapta datele calendaristice intre care se va efectua graficul, dar si tipul graficului respectiv:
, astfel se va afisa graficul in cele 6 forme:
2.1.1. Vertical bars (bare verticale):
2.1.2. Horizontal bars (bare orzizontale):
2.1.3. Dots (cu puncte):
2.1.4. Lines (cu linii):
2.1.5. Pie (placinta):
2.1.6. Donut (gogoasa, covrig):
La crearea acestor grafice s-a folosit o clasa gasita pe internet, ca free source, la https://www.phpclasses.org (listing-ul clasei se gaseste la finalul proiectului). Ca exemplu de folosire, mai jos se gaseste listing-ul fisierului graficdepartament.php, cea care realizeaza graficele de mai sus:
// se citeste tipul graficului primit prin metoda post
$grafic = $_POST['grafic'];
// se citest cele doua date calendaristice intre care se gasesc interventiile
$data1 = $_POST['data1'];
$data2 = $_POST['data2'];
// se cauta interventiile ce au avut loc intre cele doua date
$string = 'select * from $tabela4 where datastart >= '$data1' and datastart <= '$data2' order by iddivizie';
$result = mysql_query($string);
$n = mysql_numrows($result);
$i = 0;
$nrdep = -1;
$depcrt = -1;
while ($i < $n)
/* se calculeaza dificultatea (importanta) interventiei, luandu-se in calcul atat dificultatea interventiei, cat si dificultatea (importanta) tipului de problema*/
switch ($dificultate)
$i = $i + 1;
// se creaza variabilia PG asa cum va fi folosita de catre clasa class..graphic.php
// titlul graficului
$PG->title = 'Importanta interventii pe departamente';
// denumirea axei 0X
$PG->axis_x = 'Departamente';
// denumirea axei 0Y
$PG->axis_y = 'Importanta interventii';
// tipul graficului: Vertical bars, Horizontal bars, etc
$PG->type = $grafic[0];
$PG->skin = 1;
$PG->credits = 0;
$i = 0;
//valorile de pe axa 0X, cat si 0Y
while ($i <= $nrdep)
// se trimite catre class.graphic.php variabila PG, clasa intorcand o imagine care se afiseaza
echo '<img src='class.graphic.php?' . $PG->create_query_string() . '' border='1' alt='' />';
Grafic interventii pe zile
Acest grafic are ca intrari doua date calendaristice intre care se vor cauta interventiile efectuate:
Se vor afisa numarul de interventii pe fiecare zi in parte (se poate desena graficul in toate cele 6 forme in parte ca si mai sus, folosindu-se aceeasi clasa class.graphic.php:
Grafic cauze probleme
Se asteapta la intrare cele doua date intre care se va efectua raportul, departamentul sau departamentele de interes precum si tipul problemei din tabela PROBLEME:
Se va calcula de aceasta data importanta interventiilor (interventiile efectuate intre cele doua date calendaristice, in departamentele selectate si rezolvand probleme din categoriile selectate) impartita insa pe cele 5 vine principale. Pentru fiecare interventie in parte se va calcula importanta sa conform algoritmului folosit si la primul grafic, dar aceasta adaugandu-se la suma totala calculata pentru fiecare vina in parte (daca o interventie are ,culpa comuna' se va adauga sumei fiecarei vini in parte, insa ca medie).
Graficul va fi afisat doar in forma pie (placinta), folosindu-se aceeasi clasa class.graphic.php:
Grafic cauze pe departmanent (radar)
Graficul asteapta la intrare aceleasi date ca si pentru graficul cauze la general: doua date calendaristice, departementele si categoriile de probleme vizate.
Pentru desenarea acestui grafic se folosesc functiile de desen ale php si se gasesc in fisierul grafica.php (listing-ul se afla la sfarsitul proiectului). Se folosesc functiile php:
$im = imagecreate($dimx , $dimy) - creaza o imagine de dimensiuni dimxXdimy;
$colors[0] = imagecolorallocate($im , 0 , 0 , 0) - aloca o culoare pentru o imagine;
imageline($im , $centrux , $centruy , $centrux , $pas , $colors[1]) - deseneaza o linie de la punctul (centrux, centruy) pana la (centrux, centruy + pas) de culoaea colors[1];
imagestring($im , 2 , $centrux - 22 , 0 , $titluaxa[0] , $colors[1]) - deseneaza un string (tiltuaxa[0]) de culoare(colors[1]) la pozitia (cemtrix-22, 0) cu un font de dimensiune '2';
imagefill($im , $punctx , $puncty , $colors[$i + 2]) - umple o figura cu culoarea colors[i+2], dandu-se un punct interior acelei figuri prin punctul de coordonate (punctx, puncty);
imagejpeg($im) - afiseaza imaginea im in format jpeg;
imagedestroy($im) - ,distruge' imaginea im;
Graficul de data asta asta este tip radar, desi este tot bidimensional, permite citirea mai multor informatii decat graficele precedente: se poate obserca ca vina principala a interventiilor in cauza o reprezinta furnizorul, dar in acelasi timp, ca departamentele afecatate de aceasta cauza sunt Administration, dar si Accounting. De asemnenea, departamentul Accounting este afectat atat de vina Furnizoului, dar si a echipmentelor Hardware.
Grafic cauze pe tip probleme (radar)
Graficul asteapta la intrare aceleasi date ca si pentru cele doua grafice precedente: doua date calendaristice, departementele si categoriile de probleme vizate.
Pentru desenarea acestui grafic se folosesc functiile de desen ale php si se gasesc in fisierul grafica.php (listing-ul se afla la sfarsitul proiectului).
Iata, mai jos, un exemplu de astfel de grafic:
Fisierul bd.php
Acest fisier este folosit pentru a defini constantele aplicatiei si este inclus prin comanda include('bd.php') in toate fisierele php ale aplicatiei. Elementele definite aici sunt:
<?php
// ip-ul masinii pe care se afla baza de date (in cazul de fata, baza de date este stocata local);
$mysql_host='127.0.0.1';
// credentialele folosite pentru conectarea la baza de date;
$mysql_user='root';
$mysql_pass=''
// denumirea bazei de date;;
$baza='itaffairs';
// denumirile tutuor tabelelor din baza de date
$tabela1 = 'users';
$tabela2 = 'probleme';
$tabela3 = 'divizii';
$tabela4 = 'istoricinterventii';
$tabela5 = 'interventii';
$tabela6 = 'wishlist';
$tabela7 = 'indicatii';
$tabela8 = 'problemeunice';
$tabela9 = 'istoricinterventiisterse';
$tabela10 = 'interventiisterse';
/* numarul de intrari ce vor fi afisate pe o pagina in listele de probleme rezolvate, dar si nerezolvate */
$liniipepagina = 18;
/* dimensiunile graficelor de tip radar, precum si pasul cu care se va executa desenarea graficului */
$dimx = 900;
$dimy = 600;
$pas = 10;
?>
Acest fisier ofera posibilitatea de a muta baza de date, schimba denumirea tabelelor din baza de date, schimbarea dimensiunilor graficelor, etc.
Observatii
Aplicatia ofera cateva facilitati utilizatorilor sai:
Interventiile ce sunt recomandate unui utilizator sunt afisate cu o culoare diferita in lista de interventii deschise (interventiile afisate cand se log-eaza utilizatorul user3):
4.2. Listele cu interventii deschise (nerezolvate) si cu interventii inchise pot fi ordonate dupa toate elementele din capetele de tabel.
Lista ordonata dupa user-ul recomandat este cea de la punctul 4.1., iar, mai jos, se afla lista ordonata dupa descrierea problemei:
La afisarea capului de tabel, fiecarui element i se asociaza o functie javascript:
echo '<tr><td><a href = 'interventii.php' onclick = 'javascript:order5()'>Nr.</a></td>';
echo '<td><a href = 'interventii.php' onclick = 'javascript:order1()'>Introducere</a></td>';
echo '<td><a href = 'interventii.php' onclick = 'javascript:order2()'>Problema</a></td>';
echo '<td><a href = 'interventii.php' onclick = 'javascript:order3()'>Descriere</a></td>';
echo '<td><a href = 'interventii.php' onclick = 'javascript:order4()'>User recomandat</a></td>';
, iarl a apasarea unuia dintre capetele de tabel, se seteaza un cookie cu o valoare corespunzatoare fiecarui cap de tabel cu ajutorul acestor functii:
<script language = 'javascript'>
function order1()
function order2()
function order3()
function order4()
function order5()
function order(name , value)
</script>
La reafisarea paginii se testeaza acest acest cookie si in functie de valoarea sa se va face query-ul in baza de date:
$orderint = $_COOKIE['orderint'];
if ($orderint == '1') $stringul = 'select * from $tabela5 order by datastart , orastart';
if ($orderint == '2') $stringul = 'select * from $tabela5 order by idproblema';
if ($orderint == '3') $stringul = 'select * from $tabela5 order by descriereproblema';
if ($orderint == '4') $stringul = 'select * from $tabela5 order by iduserrecomandat';
if ($orderint == '5') $stringul = 'select * from $tabela5 order by id desc';
Pentru tabela INTERVENTII (aceeasi situatie se intalneste si la alte tabele) exista un numar de 5 chei externe (din tabela PROBLEME, din tabela DIVIZIE, dar si 3 din tabela USERS). Teoria bazelor de date impune aplicarea join-urilor in executarea query-urilor, viteza de procesare a motorului MySQL fiind mult mai mare decat cea de procesare a scripturilor php de catre server-ului web. Insa, in primul rand pentru usurarea efectuarii multiplelor calcule ale importantelor (dificultatilor) si pentru o afisare mai comoda a datelor in format html , dar si pentru ca nu este vorba de un volum foarte mare de date, s-a preferat efectuarea select-urilor secvential.
Astfel, un query de forma:
select t1.denumire as a, t2.username as b, t3.denumire as c, t4.descriereproblema as d, t4.interior as e, t4.nume as f, t4.datastart as g, t4.orastart as h from probleme t1, users t2, divizii t3, interventii t4 where t4.iduserrecomandat = 3 and t1.id = t4.idproblema and t2.id = t4.iduser and t3.id = t4.iddivizie order by t4.id
se va transforma in query-uri succesive si apoi:
select idproblema, iduser, iddivizie, descriereproblema, interior, nume, datastart, orastart from interventii where iduserrecomandat = 3 order by id
, apoi urmeaza query-urile:
select denumire from probleme where id = $idproblema;
select username from users where id = $iduser;
select denumire from divizii where id = $iddivizie;
Copyright © 2024 - Toate drepturile rezervate