Aplicatie Web Pentru Gestiunea Stocurilor
Aplicație web pentru gestiunea stocurilor
Introducere
Tema aleasă de mine în cadrul lucrării de disertație surprinde nevoia unei inovații la nivelul aplicațiilor de tipul ghid de calatorie pentru rețeaua RATB București oferind o gamă de funcționalități noi, pe lângă cele de bază întâlnite și în cadrul altor aplicații, precum redarea rezultatelor căutărilor sub formă audio și selectarea opțiunilor privind călătoria dorită cu ajutorul vocii. Această implementare va putea satisface nevoile unei game largi de utilizatori de aplicații pentru dispozitivele mobile, întrucât va fi destinată dispozitivelor ce au instalat ca sistem de operare Android cu versiuni peste 4.0, însumând aproximativ 90% dintre utilizatorii de dispozitive Android la momentul conceperii aplicației. Sistemul RATB dispune de tramvaie, troleibuze, autobuze, autobuze de noapte si linii preorășenești, majoritatea dintre ele întinzându-se până în zonele limitrofe ale Bucureștiului, însă există și un număr restrâns de linii care ies din capitală. Pentru fiecare dintre ele va exista o reprezentare de tip asociere stație-adresă-linie care va identifica în mod unic o anumită stație de pe unul din traseele disponibile ale RATB.
Aplicația este disponibilă în limba română pentru utilizatorii români putând fi setată și în limba engleză fiind astfel utilă și utilizatorilor străini rezidenți în București sau turiștilor aflați în trecere prin capitală.
Aplicația Android poartă numele RATB Assistant când aplicația este setată în limba engleză, iar echivalentul în română Asistent RATB dacă limba aplicației a fost schimbată în română la pornirea aplicației sau în timpul utilizării acesteia. Numele indică faptul la nivelul aplicației sunt mai multe opțiuni care pot fi de folos atât pentru determinarea unor rute optime cât și facilitării gestiunii rezultatelor la nivel de aplicație. Aplicația va avea la dispoziție metode de stocare și redarea ultimelor căutări sub forma de cautări favorite și ultimele căutări.
În scopul evidențierii raporturilor dintre aplicațiile deja existente, lucrarea va surprinde ultimele versiuni ale aplicațiilor active , va descrie funcționalitățile aferente lor și în implementarea aplicației se vor introduce o mare parte dintre acestea, dar se va introduce elementul de nou prin funcționalități precum adăugarea de noi limbi deja existente in pachetul de instalare, posibilitatea de a utiliza atât online cât și offline aplicația, gestiunea opțiunilor de căutare la nivelul aplicației cu ajutorul vocii. “Rețeaua RATB este a patra ca întindere din Europa, transportând 2.26 milioane călători pe zi, punând la dispoziție 112 linii de autobuz, 15 linii de troleibuz și 24 linii de tramvai(incluzând și o linie de metrou ușor)”.
Motivul pentru care am ales această temă este utilitatea aplicației sub formă de pachet pentru dispozitivele mobile, care va reuni toate avantajele prelucrării rapide, în format electronic, modern a unor soluții la nevoi deja cunoscute și implementate în unele aplicații de pe piață. Aceasta va suplini și alte nevoi prin funcționalități noi menite să faciliziteze căutările și să poată fi manevrată cu minimum de efort și prin intermediul vocii. De asemenea, va încerca să redea în format vocal, în mai multe limbi rezultatele căutărilor pentru a asigura posibilitatea utilizării aplicației și de persoane cu dizabilități vizuale sau cu dispozitive cu ecran de dimensiuni reduse. Am identificat nevoia de o aplicație nouă în această direcție pe baza experienței proprii, lovindu-mă de lipsuri și inexactități prezente în următoarele cazuri: accesul pentru prima oară a aplicației este întâmpinat de un ghid incomplet sau uneori acesta lipsea, accesul în altă limbă decât limba română, accesul în altă limbă decât limba dispozitivului, neconcordanțe între orele afișate în aplicație și ora sosirii mijloacelor de transport în stații, nevoia de metode eficiente și inteligente pentru gestionarea rezultatelor, împărtășirea lor cu alți utilizatori etc.
Aplicația va permite simplului utilizator accesul prin identificare cu parolă, iar drepturile pe care le primește utilizatorul îi vor permite să acceseze de la o gamă minimă până la întreaga gamă de informații și facilități ale aplicației devenind astfel liber să utilizeze interfața, baza de date, sistemul de stocare al căutărilor, setările aplicației etc.
Observ cum activitatea omului din ziua de astăzi este din ce în ce mai complexă și se îmbină cu tehnologia, dispozitivele mobile făcând parte din ea, iar prin aplicația creată doresc să elimin o serie consistentă de neajunsuri întâlnite în momentul utilizării mijloacelor de transport în comun bucureștene. Astfel doresc să centralizez nevoile și să le acopăr pe cele principale prin funcționalitățile oferite de aplicația ce va fi creată, iar pornind de la acestea, versiuni viitoare ce se pot dezvolta din această aplicație să acopere o gamă din ce în ce mai mare de probleme intâlnite ca nevoi reale prezente la nivelul rețelei de transport din capitală.
Capitolul I – Descrierea problemei economice
Prezentarea domeniului abordat
În cadrul lucrării de licență am ales să abordez situația transportului în comun din București. Dinamica acestui sector, dar și numărul foarte mare de călători m-au determinat sa îmi îndrept atenția către aceasta ramură.
În București se găsește cea mai mare rețea de transport în comun din România și totodată a patra din Europa. Ea este compusă dintr-un sistem de metrou și metode de transport la suprafață precum tramvaie, troleibuze și autobuze.
Sistemul de Metrou este administrat de compania Metrorex și este compusă din patru magistrale: M1, M2, M3, M4 pe o lungime de 63 km având de-a lungul ei 45 de stații, distanța medie între stații fiind de 1.5 km.
Transportul la suprafață este administrat
În 2007 s-au introdus biletele de călătorie comune, administrate de ambele companii de transport Metrorex și RATB. Astăzi, insă ele circulă cu bilete de tip diferit.
Astfel gândit, procesul de producție trebuie să uzeze de toți acești factori, iar piața de desfacere trebuie organizată încât să satisfacă nevoile clienților, nevoi ce corespund în mod direct cu nivelul cererii curente. În acest scop, trebuie creată o strategie de penetrare pe piață, o infrastructură fizică, dar și informațională cât mai bună și departamente decizionale eficiente.
Referitor la evoluția cheltuielilor clienților de produse și servicii electronice, dintre acestea, în 2003, cheltuielile IT realizate în România, au reprezentat 1,4% din Produsul Intern Brut al țării, comparativ cu alte țări est-europene precum Cehia cu o cotă de 4,8%, Ungaria cu o cotă de 3,9% și Polonia cu 2,6%. În 2005, contribuția industriei IT&C la Produsul Intern Brut al României, a ajuns la 9%, ca în 2011, aceasta să atingă 11%.
”Tot în 2005, se înregistrau peste 8100 de întreprinderi care activează în domeniul tehnologiei informației și telecomunicațiilor, având în componență peste 86000 de angajați. Cifra de afaceri a acestora este de 3370 milioane euro, un profit net de circa 335 milioane euro.”
Pe piața bunurilor electronice din România, astăzi, se regăsesc circa 964 de întreprinderi care se ocupă cu fabricarea calculatoarelor și a produselor electronice și optice, cu un număr de salariați de 24855 și cu o cifra de afaceri de 12056 milioane lei prețuri curente, înregistrând o creștere față de suma de 8648 milioane lei prețuri curente înregistrată în anul anterior. (* sumele se referă la anul 2010 ca an curent, fiind ultimele informații înregistrate de acest gen.)
Această creștere a cifrei de afaceri obținută de la an la an, se datorează numărului mare al companiilor producătoare sau importatoare de electronice în țara noastră, dar și afinitatea clienților din România pentru produse și servicii de acest gen au adus condus la asemenea evoluții pe piața de desfacere din România.
În 2012, sectoarele Telecom, Imprimante și Multifuncționale și Electronice au înregistrat cele mai mari vânzări din trimestrul 3 de pe piața de electronice din România. Dinamica pieței se reflectă și în creșterea valorii totale a pieței de telefoane mobile clasice și de ultima generație, comparativ cu aceeași perioadă a anului 2011, cu 12,3 %, însumând 53 milioane de euro.
Atât tarifele, cât și perioada dintre aparițiile unor noi modele și tehnologii, se vor diminua cu timpul, iar profitul va fi în creștere, atâta timp cât se are în vedere, ca piața acestor produse sa beneficieze de o strategie puternică de creștere pe piață și de o eficiență cât mai ridicată. Cu scopul satisfacerii reciproc, atât a cererii clienților ce aspiră către astfel de produse, cât și a obiectivelor firmelor de profil din țara noastră, este nevoie de o organizare peste măsură realistă și aplicarea acesteia fără excepție, în orice condiții.
Ideea de a reprezenta la scara largă acest domeniu, luând ca obiect de studiu întreprinderea fictivă ”Depozitul X”, activă în acest sector, al electronicelor, m-a motivat să-mi susțin lucrarea pe această temă.
Descrierea companiei
Organizarea dintr-o firmă, în contextul economiei moderne, înseamnă mai mult decât a însemnat în perioada dinainte, în economia tradițională, sau comparativ cu sistemele centralizate, la care contau cantitățile produse, pentru a li se căuta mai apoi o piață de desfacere, cu potențiale pierderi financiare, fără a se lua în seamă potențialele riscuri și consecințele lor. Astăzi, se ține cont de o serie de obiective, generale sau particulare, distribuite unor compartimente, ierarhizate, create special pentru tipul respectiv de activitate, aranjate după funcționalitate pe departamente.
Când ne referim la existența unor scheme, planuri generale, sau particulare per domeniu de activitate sau per firmă, trebuie să acceptăm că ”vorbim despre schemele organizatorice, dar trebuie să fim convinși ca, de fapt, nu există scheme universal valabile! Există, cel mult, cadre, coordonate, exemple, din care ne putem inspira. În rest – fiecare firmă poate fi considerată un unicat în materie de organizare.
Organizarea este procesul de dezvoltare și de administrare a unei organizații – indiferent de tip, misiune și obiective – pentru asigurarea efectivă a funcționării sale.”
Cum se afirmă și mai sus, când vorbim despre un plan general valabil, o schemă aplicabilă identic tuturor firmelor, ne dăm seama cum că acestea sunt nerealizabile. Această problemă se aplică și firmelor din același domeniu, precum și celor cu aceleași obiective sau obiective similare, adiacente.
”Organigrama, o redare schematică (grafică) în toate detaliile a organizării, a subordonării și a legăturilor dintre compartimente din cadrul unei întreprinderi sau al unei instituții”, face referire la structura organizatorică a unei firme, la gradul de integrare și structurare pe compartimente, precum și relațiile existente între ele cu scopul de a îndeplini eficient obiectivele propuse.
Departamentul X, întreprindere ce se ocupă cu asamblarea și distribuția de produse electronice și componente de același tip prezintă o schemă organizatorică structurată astfel:
Director
Producție
Cercetare – Dezvoltare
Marketing
Planificare de marketing și servicii ajutătoare
Planificarea produselor
Publicitate
Promovarea vânzărilor
Previziunea vânzărilor
Gestiunea stocurilor
Politica de preț
Distribuția fizică
Vânzări
Conducerea vânzărilor
Urmărirea și administrarea
Servicii
Finanțe
Personal
În continuare voi prezenta în detaliu departamentul de Cercetare – Dezvoltare cu ajutorul metodei SMART.
*Teste pentru compatibilitate electromagnetică
Tabelul 1.1. Metoda SMART
Departamentul pe care am ales sa-l analizez în cadrul acestei lucrări este Gestiunea stocurilor.
Ofertele existente de aplicații
În cadrul acestei lucrări am ales să prezint ”Depozitul X”, întreprindere ce se ocupă cu asamblarea și distribuția de produse electronice și accesorii și vânzarea acestora pe internet, nou-intrată pe domeniul electronicelor. Ca și departament, mi-am îndreptat atenția către ”Gestiunea stocurilor”, considerându-l unul dintre cele mai solicitate departamente, fără a lua în considerare în mod special caracteristicile tehnologice ale produselor sau integrarea firmei pe piața de specialitate.
Conform modelului lui Porter cu referire la analiza mediului concurențial, se iau in considerare următoarele criterii:
Intensitatea rivalității. Cum cererea de produse se intensifică când vine vorba de comenzi realizate prin intermediul internetului, consider ca potențiali rivali următoarele companii: eMAG cu o cotă de piață de 70%, CEL cu 9,1% din piață, PC Garage și PC Fun cu 5,4%, respectiv 4,4% din întreaga piață.
Amenințare noi intrați. După ce se vor concretiza ofertele companiei reprezentată pe piață de magazinul ”Depozitul X” în legătură cu produsele electronice și accesorii, așteptările referitor la cota de piață și la rezultatul planificat, profitul vor crește. Cum piața de specialitate este imprevizibilă, a lua în calcul o serie de apariții de noi firme de profil este indispensabil, precum inevitabile ale unor firme mai mici cu o cotă de piață nesemnificativă la momentul actual, care printr-o politică de marketing adecvată vor avea ca obiectiv expansiunea economică. În acest sens am luat în considerare ca potențiale amenințări magazinele Market Online și F64 Studio care se ocupă cu vânzări de electrocasnice, componente PC, software și accesorii.
Puterea de negociere a furnizorului. Având în vedere o posibilă creștere a cote de piață în imediata perioadă prin numărul de comenzi, trebuie luată în considerare o gamă extinsă de produse cu prețuri mici, sporind astfel crearea unei bune imagini despre firma analizată. Pentru a putea fi concretizată această cerere propusă, care să aducă profit încă de la începutul activității, trebuie să se ia în considerare ca factor influent puterea de negociere a furnizorului.
Cererea și oferta. Aceste două aspecte ale pieței sunt legate de dimensiunile pieței. Cum cererea în cadrul acesteia este foarte mare, iar creșterea se realizează într-un ritm alert (Piața online din România a cumulat 109,5 milioane de euro în anul 2007, 250 milioane euro în 2008 )
Amenințarea produselor de substituție. În România, piața de electronice s-a diversificat, iar cererea este tot mai mare, si variază, de la produsele cu preț redus, până la cele de renume, din topul furnizorilor de tehnologie. Depozitul X, va contracara efectele politicilor celorlalți actori de pe piață prin propriile politici, printre care, soluția de omogenizare a gamei de produse prin preț și prin caracteristici, astfel se vor elimina produsele învechite de pe piață, la fel și cele de ultimă generație, încă foarte scumpe,ce nu vor fi introduse în catalogul produselor curente al magazinului în perioada imediat următoare.
Pentru a asigura o politică economică sănătoasă și funcționarea corespunzătoare a tuturor compartimentelor firmei, am luat în considerare factorii prezenți în Modelul lui Porter și prezentați mai sus.
În continuare voi descrie, folosindu-mă de analiza SWOT, caracteristicile activității firmei de electronice Depozitul X.
Tabelul 1.2. Analiza SWOT
Prezentarea activității care va fi informatizată
În lucrarea mea voi surprinde activitatea aferentă departamentului specializat în Gestiunea stocurilor. Din punct de vedere economic, voi sublinia aspectul dinamic, strict necesar al relației dintre firma Depozitul X și celelalte componente, mai ales prin intermediul surprinderea variației cantității de stocuri, dar și a celorlalte fluxuri prezente aici.
Voi încerca ca, în lucrarea mea, prin aplicația creată, să depășesc multe dintre piedicile puse în activitatea zilnica, de multitudinea de sarcini existente, pentru atingerea obiectivelor. Pentru acestea, voi implementa o serie de operații de bază ale aplicației, în conexiune cu unele noi, care să aducă inovația împreună cu eficiența pe primul plan. Dintre cele standard, strict necesare funcționării în parametrii normali a întreprinderii Depozitul X, dar și pentru facilitatea și organizarea eficace a sarcinilor, amintesc:
Voi pune în aplicare o serie de metode prin care, după preluarea informațiilor din baza de date unde sunt înmagazinate, acestea vor fi prelucrate și afișate ca date din fluxul întreprinderii sub forma unei tabele. Voi face în așa fel încât toate datele să fie aduse la o formă simplificată, urmând ca acestea să fie deduse din celelalte, dacă se necesită, iar afișajul lor să fie cât mai personalizat, după preferințele și la îndemâna utilizatorului.
Accesul pe platforma oferită de aplicație împreună cu toate facilitățile sale, vor fi puse sub restricție atât pentru utilizatorii obișnuiți fără drepturi de prelucrare, cât și prin acordarea de privilegii gestionarilor întreprinderii. Aceste privilegii vor servi, de asemenea, în scopul monitorizării acestora și a activității acestora. Aplicația va conține diverse modalități de gestionare a parolelor utilizate pe cont.
Voi crea posibilitatea introducerii de la tastatură, în momentul ales de gestionar (utilizatorul cu drepturi de manipulare a datelor de pe pagina de internet și din baza de date) a noi date, memorarea lor pe diferite medii (baza de date, fișierul) și redarea lor pe ecran în diferite formate. De asemenea, voi crea drepturi pentru anumiți utilizatori, cu posibilitatea de a modifica și/sau șterge înregistrări din baza de date și implicit din tabelul afișat.
Pentru situațiile în care se cere o analiză a datelor existente și o interpretare a acestora, voi crea funcționalitatea de generare de rapoarte, prin care să se descrie detalii dintr-unul sau mai multe domenii și structurarea lor pe diferite criterii.
Vor exista mijloace de realizare a calculelor tabelare asupra seturilor de date de intrare existente, posibilitatea executării de scenarii de tipul What-If, ce se vor ocupa cu previzionarea și anticiparea de valori cu semnificație economică, precum și crearea de tabele pivot.
Vor fi implementate și posibilitatea de căutare rapidă a informațiilor din baza de date, pe baza unui criteriu definit în aplicație, sau pe baza unui cuvânt cheie stabilit de utilizator.
Salvarea atât a datelor cât și a rapoartelor în diferite formate precum: Microsoft Excel, PDF, TXT.
Posibilitatea de comparare a datelor, din diferite momente de timp, cu opțiune de importare din baza de date sau din fișier extern.
Păstrarea și posibilitatea de a verifica, afișa și prelucra, de către persoane cu drepturi în acest sens, statistici referitoare la utilizatorii înregistrați în cadrul platformei (Număr de utilizatori, timp petrecut pe zi, per sesiune, data creării de înregistrări, număr și volum de date modificate , data ultimei modificări, structura acestor modificări ).
Generarea de grafice referitoare la aceste statistici, formularea într-o formă standard a concluziilor și eventualelor avertismente cu privire la acestea.(Dacă e necesar/ Unde este posibil).
În acest mod voi reuși să aduc în prim-plan o serie de probleme, nevoi din cadrul unei întreprinderi, în cazul meu, Depozitul X, firmă ce se ocupă cu asamblarea, și comercializarea pe internet de produse electronice și componente, nevoie pe care voi încerca să le rezolv prin aplicația pe care va urma s-o creez. Pe lângă acestea, voi încerca să vin cu funcționalități noi, ce țin de inovație, atât prin concept și originalitate, cât și prin utilitatea acestora, pentru a susține o activitate în cadrul firmei, bine organizată și eficientă.
Capitolul II – Tehnologii informatice utilizate
2.1 MySQL
Pentru crearea aplicației mele, am ales să folosesc tehnologia MySQL, care permite lucrul cu bazele de date.
MySQL este un sistem de gestiune a bazelor de date relațional, produs de compania suedeză MySql AB. Este cel mai popular SGBD open-source la ora actuală , fiind folosit adesea împreună cu limbajul de programare PHP. De asemenea se pot construi cu acesta aplicații în orice limbaj major, cum ar fi: C, C++, C#, Java, Perl, Python, FreeBasic.
O bază de date poate fi definită ca o colecție de date, referitoare la un domeniu de activitate particular, în care proprietățile datelor precum și relațiile semantice dintre date sunt specificate utilizând concepte propuse de un anumit model. Un model se poate defini ca o reprezentare abstracta a informației și eventual, a operatorilor pentru manipularea informației.
Între baza de date fizică (adică datele așa cum sunt ele memorate pe suport) și utilizatorii sistemului există un nivel de software, numit sistem de gestionare a bazelor de date. Acesta este numit sistem relațional, atunci când intervin relații între entitățile din baza de date și operații cu aceste operații.
Avantajele MySQL sunt: viteza mare de prelucrare, este distribuit gratuit, sau cu preț redus, distribuit sub licență comercială, este ușor de configurat și utilizat, iar gama de aplicații existente pe piață sunt în proporție mare create cu baza de date MySQL, fiind folosit de marile companii: Wikipedia, Google, Facebook, Twitter, Flickr, Nokia.com etc.
Inițial, serverul de baze de date MySQL a fost dezvoltat pe platforma Linux, încât și astăzi utilitarele MySQL rulează cel mai bine pe aceasta.
Astăzi, platformele pe care poate rula MySQL includ Windows și Linux, iar licența de tip open-source permite dezvoltarea codului și distribuirea gratuită a modificărilor realizate. Printre avantajele privind securitatea, ale MySQL amintesc siguranța sporită în momentul accesării bazelor de date prin autentificarea utilizatorului, sistem de parolare flexibil și sigur, traficul pentru conectarea la server și autentificarea sunt criptate. Modelul care se ocupă de securitate datelor din bazele de date MySQL include nume de utilizator, parolă, nume server (hostname) sau adresă ip și privilegii, asemeni sistemului folosit de sistemele Unix.
Privilegiile sunt operațiuni ce sunt sau nu permise asupra bazei/bazelor de date, tabelelor sau indecșilor, exemple: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP.
Datele reprezintă obiectul operațiilor ce privesc prelucrarea, oferite de sistemele de gestiune a bazelor de date.
Cea mai utilizată metodă ce include interfață grafică pentru manipularea datelor din MySQL este PHPMyAdmin. Prin aceasta se poate realiza și importul facil al altor baze de date și exportul sub forma fișierelor sql.
În mare parte, un câmp se caracterizează prin:
Numele câmpului (nume simbolic prin care câmpul se poate identifica)
Tipul câmpului (pentru reprezentarea tipului de date care pot fi stocate în câmpul respectiv)
Lungimea câmpului(numărul maxim de caractere care pot fi stocate în câmpul respectiv).
Tipurile de date din MySql includ:
tipuri numerice: BIT(0/1 maxim 64 biți), TINYINT (-128,127), BOOL/BOOLEAN similar cu TINYINT(1), SMALLINT, MEDIUMINT, INT, INTEGER, BIGINT, SERIAL, DECIMAL, DEC, FLOAT, DOUBLE, dintre care, tipul INT poate fi folosit împreună cu opțiunea de auto_increment pentru a defini o cheie într-o tabelă. Cheia primară se definește ca un câmp care face posibilă identificarea unică a fiecărei înregistrări dintr-o tabelă, de regulă un câmp numeric, care va fi incrementat la fiecare operație de adăgare.
Tipuri de câmpuri dată/oră: DATE(format AAAA-LL-ZZ cu valori cuprinse între 1000-01-01), DATETIME(AAAA-LL-ZZ HH:MM:SS cu valori între 1000-01-01 00:00:00 și 9999-12-31 23:59:59), TIMESTAMP(stocat ca număr de milisecunde trecute de la 1970-01-01 00:00:00), TIME(HH:MM:SS), YEAR(YY sau YYYY cuprinse între 1901 și 2155).
Tipuri șiruri de caractere: BINARY, VARBINARY, TINYBLOB, BLOB, TINYTEXT, TEXT, MEDIUMBLOB, LONGBLOB, LONGTEXT, ENUM(enumerare de valori constante, din care doar una poate fi deținută de un obiect), SET(colecție de valori, dintre care, mai multe pot fi selectate ca valori ale unui obiect).
Serverul pentru baze date MySQL, este inclus în pachetul XAMPP, o soluție open-source, disponibilă pentru mai multe platforme printre care Microsoft Windows, Linux și Apple Macintosh. Acesta conține pe lângă serverul MySQL și serverul Apache și intepretori pentru limbajul PHP și Perl. Acest pachet vine cu o platformă online, creată în limbajul PHP, pentru manipularea bazelor de date, funcționabilă cu ajutorul serverului de baze de date.
Apache, este un server HTTP, de tip open-source, care, în prezent susține mai mult de jumătate din paginile web existente, aducând până în ziua de azi o contribuție importantă în dezvoltarea internetului. Aplicația creată de compania Apache Software Foundation, este disponibilă pe mai multe sisteme de operare, printre care Unix, FreeBSD, Linux, Solaris, Novell NetWare, Mac OS X, Microsoft Windows și OS/2.
2.2 Java
Limbajul de programare folosit pentru construirea aplicației mele, care va reuni elemente din domeniul gestiunii stocurilor, este limbajul Java.
Java, ca limbaj de programare, este orientat-obiect și a fost creat de compania Sun Microsystems(acum filială Oracle) la începutul anilor 1990, fiind lansat mai târziu, în anul 1995. Utilizarea limbajului este una foarte largă, gama dispozitivelor pe care acesta poate rula aplicații extinzându-se la cele mobile precum telefon, agendă electronică, palmtop, smartphone-uri. Utilizarea sa atinge dimensiuni de proporții, fiind folosit și în contextul intranet-urilor, prin diverse tehnologii proprii, creându-se astfel, un mediu vast, eterogen de dispozitive și scopuri de utilizare.
Creatorii limbajului Java, s-au inspirat foarte mult din C și C++, împrumutând o parte din sintaxa acestuia, dar simplificând modelul obiectelor și reducând numărul de facilități de nivel scăzut.
Cea mai importantă cerință pentru ca un program Java, corect scris, să fie compilat și executat, fără probleme, este prezența unei mașini virtuale Java (așa numita Java Virtual Machine – JVM). Această portabilitate, mult diferită și avantajoasă față de cea a limbajului C și C++ se datorează formatului standard de compilare, numit cod de octeți (în engleză byte-code), format intermediar între codul mașină, dependent de tipul calculatorului și codul sursă. Varianta de mașină virtuală a celor de la Sun Microsystems a fost făcută publică și anunțată ca open-source, în 2006, apărând între timp alte versiuni, ale celor de la IBM, Bea, Oracle, FSF.
Limbajul Java cuprinde trei platforme de lucru, care sunt tehnologii dedicate rezolvării unor anumite tipuri de probleme, din diverse categorii; acestea includ seturi de biblioteci scrise în limbajul Java, programe utilitare și se regăsesc sub denumirile:
J2SE (Standard Edition). Este platforma standard de lucru, care include suport pentru crearea de aplicații independente, cu interfață grafică și de appleturi. Un applet este o aplicație Java ce poate rula cu ajutorul browserului, integrată în acesta.
J2ME (Micro Edition). Aceasta presupune programarea la nivelul dispozitivelor mobile, oferind suportul necesar scrierii de astfel de programe.
J2EE (Enterprise Edition). Această platformă vine cu API-ul necesar dezvoltării aplicațiilor mai complexe, ale căror componente pot rula în medii diferite, ca locație și având o structură diferită, lucrând cu date stocate în bazele de date.
În continuare, în lucrarea mea, voi aborda platforma Java Enterprise Edition, fiind cea pe care o voi utiliza și eu în formarea aplicației mele.
Ultima versiune de Java Enterprise Edition este JavaEE 6, care a apărut în decembrie 2009. Aceasta aduce îmbunătățiri, printre care o serie completă de adăugiri de funcționalitate la tehnologiile integrate, precum JavaServer Faces și JavaServer Pages, îmbunătățiri în nucleul web al tehonologiei Servlet, în logica de business, introducându-se o versiune nouă Enterprise JavaBeans Lite și extinderea API-urilor de tranzacții (Java Transaction API) și al persistenței (Java Persistence API).
Un API reprezintă interfața destinată programării unui anume tip de aplicații, care cuprinde mijloacele software, programe și biblioteci utile realizării aplicațiilor.
Java Enterprise Edition sau Java EE, tehnologie deținută în prezent de compania Oracle, conține mediul de execuție și testare pentru programele pentru mediile de afaceri, inclusiv internet și servicii web și aplicații la scară largă, multi-straturi, flexibile și securizate. Java EE este o extindere a platformei standard, iar programele necesare acestuia, sunt scrise tot în limbajul Java.
Specificațiile de dezvoltare ale API-ului Java EE privesc printre altele accesul la tehnologiile: JDBC, RMI, e-mail, JMS, alte servicii web și XML și definește modul de coordonare al acestora. API-ul Java EE este însoțit și de specificații clare și unice cu privire la tehnologiile Enterprise JavaBeans, conectori, servlet-uri, JavaServer Pages etc. Aceste specificații mențin standardele privind portabilitatea și capacitatea de modificare a aplicațiilor.
În continuare, în acest capitol voi descrie tehnologiile și conceptele cu care conlucrează, platforma Java Enterprise Edition și pe care le voi include în aplicația mea.
Java Servlet este o clasă a limbajului Java, utilizată în programare, folosită pentru a extinde capacitățile unui server. Rolurile acestor clase, numite servlet-uri sunt: procesarea și stocarea datelor care au fost înaintate de la un formular HTML, să furnizeze dinamic rezultate ale interogărilor asupra bazelor de date, să organizeze informații, pe care protocolul HTTP nu le poate stoca, precum coșuri de cumpărături și altele. Altfel spus, un servlet este o clasă Java conținută în protocolul Java EE, ce funcționează conform specificațiilor API-ului Java Servlet, specificații cu ajutorul cărora se poate răspunde la solicitări. Conținutul general, este cel mai adesea în format HTML, dar poate fi și de tip XML. Starea anumitor parametrii din cadrul aplicației se poate păstra în variabile de sesiune, cookie-uri sau editare de adresă de localizare (URL). Pentru ca un servlet să poată rula, este nevoie de un container web, componentă care este responsabilă cu interacțiunea cu servletul, organizarea și desfășurarea ciclului de viață al acestuia, mascarea adresei de localizare (URL) unui anumit servlet.
Java Server Pages (JSP) . Este o tehnologie utilă dezvoltatorilor de software pentru crearea de pagini web generate dinamic, bazate pe HTML, XML sau alte tipuri de documente. A fost lansat în 1999 de către Sun Microsystems, fiind similar cu fișierele de tip PHP, cu precizarea că folosește limbajul de programare Java. Pentru a rula pagini de tip JSP, este nevoie de un server, compatibil cu un container servlet , precum Apache Tomcat sau Jetty. Paginile de tip JSP pot fi privite ca o abstractizare a servleturilor Java. La momentul execuției, JSP-urile sunt transpuse în servleturi, iar servletul fiecărui JSP este memorat și reutilizat, până JSP-ul original este modificat.
JSP-ul poate funcționa independent, sau ca parte componentă a șablonului model-view-controller, drept componentă view, pe lângă care, ca model se folosește o clasă JavaBeans și o clasă servlet drept controller. Rolul acestei tehnologii este de a livra componente HTML sau XML și de a combina elemente statice din pagină cu partea dinamică susținută prin limbajul Java.
XML. Definit ca un limbaj ce susține un set de reguli de codificare a documentelor, într-un format care poate fi înțeles atât de om cât și de mașină. Acest limbaj este definit în specificațiile XML, versiunea 1.0, produse de W3C și în alte câteva specificații înrudite. Scopul lui este de a accentua simplitatea, generalitatea, utilitatea pe internet. Este un format de reprezentare a datelor de tip text cu suport puternic, grație Unicode, pentru toate limbile lumii. Deși arhitectura XML se concentrează pe documente, este folosit frecvent pentru reprezentarea structurilor de date arbitrare, ca de exemplu, în serviciile web. Din ce în ce mai multe aplicatii, folosesc pentru dezvoltarea lor formatul XML, ca de exemplu: RSS, Atom, SOAP, XHTML. De asemenea, produsele software, pentru uzul de birou se folosesc în mod implicit de formatul XML, exemple: Microsoft Office, OpenOffice.org, LibreOffice și Apple iWork.
În plus pe lângă cele de mai sus , voi folosi și elemente statice de tip HTML și CSS.
HTML – HyperText Markup Language. Este principalul limbaj care utilizează etichete pentru crearea de pagini de internet și alte informații care pot fi afișate într-un browser web. Baza limbajului HTML este constituită din elemente HTML, descrise de etichete(tag-uri), înconjurate de paranteze unghiulare, în interiorul conținutului din pagina web. De cele mai multe ori, etichetele HTML vin în perechi, <nume_eticheta></nume_eticheta>, dar există și unele tag-uri cunoscute ca element neîmperecheate. Sarcina de a citi conținutul paginilor HTML și a le compune în elemente vizibile sau auditive este a browserului web. Acesta interpretează fiecare element HTML, pentru a reda conținutul paginii.
CSS – Cascading Style Sheets. Reprezintă un limbaj pentru foi de stiluri care descriu semantica prezentării unui document scris într-un limbaj cu etichete. Utilitatea cea mai întâlnită este de a stiliza pagini scrise în format HTML sau XHTML, dar limbajul poate fi aplicat și altor tipuri de documente de tip XML, precum plain XML, SVG și XUL. Scopul principal al CSS este de a separa conținutul documentului, scris în HTML sau limbaj similar bazat pe etichete și înfățișarea documentului, care include elemente precum scheme de amplasare, culori și fonturi. Efectele de pe urma separației, pot include îmbunătățirea accesibilității conținutului, flexibilitatea sporită și controlul privind specificațiile caracteristicilor prezentării, permisiunea de a împărți sarcina formatărilor între mai multe pagini și reducerea complexității și a repetiției în conținutul documentelor.
Pentru dinamicitatea în pagină, voi folosi elemente de tip JavaScript.
JavaScript. Este un limbaj de programare orientat obiect, folosit mai ales pentru introducerea de noi funcționalități în paginile web, codul JavaScript, putând fi rulat de către browser. Scopul lui este de a ajuta la construirea site-urilor web, dar și pentru accesul la obiectele încorporate în alte aplicații.
Pentru facilitarea creării site-ului, dar și pentru câteva funcționalități în plus, am decis să integrez și un framework. Acesta este dezvoltat de către compania Apache Foundation și se numește Struts 2.
Apache Struts este un framework open-source pentru aplicațiile web, pentru dezvoltarea de aplicații web Java EE. Folosește și extinde API-ul Servletului Java, pentru a încuraja dezvoltatorii să adopte o arhitectură model-view-controller(MVC). Scopul framework-ului Struts este de a separa model-ul, care menține logica aplicației care interacționează cu baza de date, de view, pagini HTML afișate la nivel de client, și de controller, entitate care pasează informație între view și model. Struts furnizează controllerul, sub forma unui servlet, cunoscut ca ActionServlet și facilitează scrierea de șabloane template, sau de layer-e de prezentare, de cele mai multe ori în JSP, dar și în XML/XSLT sau Velocity. Programatorul trebuie să scrie codul pentru model și să creeze un fișier central de configurare struts-config.xml, care să lege împreună model-ul, view-ul și controller-ul. Cererile, de la client, sunt trimise controller-ului sub formă de ”Acțiuni”, definite în fișierul de configurare. Când controllerul primește un astfel de apel, cheamă ”Acțiunea” corespunzătoare, care interacționează cu codul model-ului aplicației.
Un IDE (Integrated development evironment) este un mediu de lucru care permite dezvoltarea de aplicații folosind anumite limbaje de programare. Pentru Java, există următoarele, cele mai folosite:
JCreator, Eclipse, Netbeans, BEA Workshop, BlueJ, CodeGuide, DrJava, IntelliJ IDEA, JBuilder, JDeveloper, KDeveloper.
În scopul dezvoltării aplicației, am ales, Oracle JDeveloper. Acesta este un IDE cu licență de tip freeware, oferit de compania Oracle. Oferă caracteristici pentru dezvoltarea în Java, XML, SQL, PL/SQL, HTML, JavaScript, BPEL și PHP. Susține o serie de activități complementare precum: proiectarea paralel cu scrierea codului, depanare, optimizare și creare de profiluri pentru trimiterea în execuție a aplicației. Rularea JDeveloper necesită existența unei mașini virtuale Java în sistemul respectiv, este disponibil pe următoarele versiuni ale sistemului de operare Windows: Vista, 7, Server 2003 R2, XP-Service Pack 2.
Capitolul III – Analiza și proiectarea sistemului informatic
3.1 Specificarea cerințelor sistemului informatic
Aplicația creată de mine poate fi văzută ca un sistem ce reunește mijloace de reprezentare moderne ale informațiilor. Ea permite introducerea de date de la tastatura, necesare construirii temeliei aplicației, pe baza cărora se vor crea legături, se vor lua decizii și se vor reprezenta in diverse variante rezultatele obținute în urma lor.
Datele de intrare vor fi constituite din descrieri utile pentru identificare precum numele sau seria, data si ora sau din informații numerice, spre exemplu prețul, cantitățile de marfă, precum și din câmpuri auxiliare, utile interpretării situației existente ca statusul, starea etc. Prin intermediul perifericului de intrare tastatura, ele vor fi introduse în formulare, ca apoi, la apăsarea butonului ”Introduce” , sa fie păstrate în sistem și preluate pentru a fi afișate, etc.
Introducerea datelor va fi tratată de situațiile inaccesibile sau total greșite precum introducerea de caractere în câmpurile dedicate datelor numerice, împărțirea unui număr la 0, introducerea de date cu o lungime peste tipul acceptat de limbaj și/sau de baza de date, Asignarea unui câmp cu caracterul spațiu, ce ulterior va reprezenta cheie de căutare în baza de date, neintroducerea de date în formulare în anumite rubrici, lăsarea formularului complet gol, șamd. De asemenea , se vor lua în considerare și situațiile de natură logică, greșite, inadecvate, sau considerare în măsură să eșueze la un moment dat. Pentru exemplificare amintesc controlarea numărului de facturi, permițând o singură factură (Nu exemplare) per comandă, notificarea în cazul anulării unei comenzi, controlul fluxului de operații asupra unui articol, restricționarea lor în funcție de dreptul, rolul sau funcția deținută de utilizatorul autentificat, restricționarea dreptului de scriere și modificare a câmpurilor cu valoare implicită pentru diferite cazuri.
În funcție de rolul deținut de utilizator, datele ce vor putea fi introduse diferă. Astfel, un administrator va putea introduce chiar el însuși noi mărci de produse, noi categorii și chiar noi produse. De asemenea, aplicația ii permite extinderea activității și a dimensiunii sistemului prin adăugarea de noi clienți și furnizori ce vor lua parte la tranzacții specifice de tip achiziție/vânzare, dar și întreprinderea de activități normale la nivelul interfeței, precum crearea de comenzi, atribuirea unor subiecți aferenți comenzilor, inserarea de produse pentru fiecare comandă și eliberarea de factură pentru acestea . În schimb, un gestionar va putea doar ultimele acțiuni amintite, și anume jonglarea cu comenzi, produse și facturarea lor. Ownerul, va putea realiza tot ceea ce am amintit mai sus, referitor la administratori și gestionari; În plus aplicația ii va permite înregistrarea de noi utilizatori,cu opțiunea învestirii acestora fie cu rol de administrator, fie ca simpli gestionari.
Un produs va putea fi adăugat doar în situația în care există deja cel puțin o marcă și o categorie de produs, care vor putea fi alese pentru a face parte din descrierea acestuia. Identic, și pentru clienți și furnizori care vor contribui la adăugarea de noi comenzi prin intermediul interfeței grafice. Ulterior, comenzii i se vor atașa o serie de produse, cu informațiile aferente acestora, și se vor preciza cantitățile și prețul unitar al fiecărui produs ales. Toate operațiile amintite, vor constitui baza creării unei facturi, pentru fiecare din cele două tipuri de comenzi, și anume de achiziție sau de vânzare. Facturile vor putea fi vizualizate și manipulate în interfața grafică a aplicației de către gestionar. În adaos, se pot adăuga comentarii personalizabile, la nivelul fiecărei pagini, pentru citirea lor la momentul navigării site-ului , iar cele mai vechi de o o lună , se vor regăsi în arhive grupate pe subiect. Fiecare acțiune întreprinsă în cadrul aplicației va fi preluată sub formă de notă de jurnal și păstrată pentru un eventual control și interpretare a situației deja existente. La fel, fiecare accesare a platformei, va fi contorizată, iar datele rezultate se vor păstra permanent în sistem.
Datele de ieșire au ca formă principală raportul, putând fi vizualizate fie în pagina de internet a browserului, sau la cerere exportate în diferite formate pentru citit sau sub aspect tabelar. Acestor forme li se alătură și statistici referitoare la date, fluxul de date, operațiile executate la nivelul aplicației și utilizatorii au executat operațiile.
Aplicația realizează persistența acestei funcționalități prin intermediul bazei de date și asigură privilegiile și fluxul prezent cu ajutorul limbajului de programare.
3.2 Analiza sistemului existent
3.2.1 Identificarea entităților și a caracteristicilor acestora
Identificarea procedurilor necesare
Mediul de lucru, numit și Struts2 Framework, în care va fi dezvoltată aplicația, are drept principiu, fragmentarea funcțiilor și procedurilor în acțiuni, care sunt metode ce returnează un mesaj specific, care fac redirecționarea către o parte anume a aplicației și care conțin o funcționalitate specifică. Aplicația mea are la bază aproximativ 50 de astfel de acțiuni-metode, de aceea amintesc și descriu doar o serie, reprezentativă prin formă și funcționalități.
Procedura care realizează autentificarea pe site are următoarea formă:
public String Connect(){
boolean okConnect=false;
try{
InitialContext context = new InitialContext();
SessionEJBBGDN sessionEJBBGDN = (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
String numeIUser = request.getParameter("codUtilizatorC");
String parolaUseri = request.getParameter("parolaR");
List<Useri> useri = sessionEJBBGDN.getUserByCod(numeIUser);
for(Useri u:useri){
if(u.getParola().equals(request.getParameter("parolaC"))){
request.getSession(false).setAttribute("user", u);
okConnect = true;
}
}
}catch(Exception e){
e.printStackTrace();
}
if(okConnect==true){
return SUCCESS;
}else return "otherResult";
}
Antetul procedurii are în componență modificatorul de acces ”public” care permite apelul acesteia de oriunde din aplicație, returnează un șir de caractere de control și poartă numele ”Connect”
După conectarea la baza de date prin sesiunea ” SessionEJBBGDN”, se preia codul utilizatorului ”codUtilizatorC” din formular. Pentru acesta, se preia din baza de date o lista cu utilizatorii denumiți astfel. Pentru fiecare dintre aceștia, se verifică parola cu cea din formular ”parolaC” și în cazul în care s-a găsit, se setează un obiect cu datele utilizatorului autentificat la nivel de sesiune și se populează o variabilă de control cu valoarea ‘true’. În funcție de valoarea variabilei, se returnează un șir de caractere de control ce direcționează pagina către o anumită locație.
Corpul procedurii conține și un bloc try-catch pentru prinderea excepțiilor apărute în program.
Procedura care realizează înregistrarea pe site .
public String Register(){
boolean notOkRegister=false;
SessionEJBBGDN sessionEJBBGDN=null;
try{
InitialContext context = new InitialContext();
sessionEJBBGDN = (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
String numeUser = request.getParameter("numeR");
String prenumeUser = request.getParameter("prenumeR");
String parolaUseri = request.getParameter("parolaR");
String codUseri = request.getParameter("codUserR");
String functieUseri = request.getParameter("adminCheck");
List<Useri> useri = sessionEJBBGDN.getUserByCod(codUseri);
if(useri.size()>0){
notOkRegister = true;
}
if(notOkRegister!=true){
if(functieUseri!=null)
sessionEJBBGDN.persistUseri(new Useri(0,numeUser,prenumeUser,functieUseri,parolaUseri,codUseri));
else
sessionEJBBGDN.persistUseri(new Useri(0,numeUser,prenumeUser,"Gestionar",parolaUseri,codUseri));
}
userList = sessionEJBBGDN.getUseriFindAll();
}catch(Exception e){
}
if(notOkRegister!=true){
return SUCCESS;
}else return "otherResult";
}
Procedura ”Register” are ca rol introducerea datelor din formular, în cazul negăsirii unor corespondente în baza de date. După conectarea la baza de date și preluarea datelor din baza de date, se selectează din aceasta înregistrările cu cod utilizator identic cu cel găsit în formular. Dacă lista returnată în urma interogării este vidă, în funcție de valoarea reținută din căsuța ‘Administrator’, cu ajutorul unei variabile de control, se introduce utilizatorul ”Administrator” sau ”Gestionar” și se redirecționează pagina.
Procedura de delogare.
public String LogOut(){
if(request.getSession(false).getAttribute("user")!=null)
{
request.getSession(false).removeAttribute("user");
}
if(request.getSession(false).getAttribute("user")==null){
return SUCCESS;
}else return "otherResult";
}
Această procedură se apelează atunci când vrem să părăsim site-ul și să încheiem sesiunea de lucru. În cazul în care la nivel de sesiune există variabila ”user”, ce deține datele referitoare la utilizatorul curent. Se elimină din context. În cazul în care s-a reușit operațiunea, procedura va redirecționa aplicația la pagina de autentificare.
Procedura de calcul a sumei totale a facturii și de umplere automată a câmpurilor cu valoarile standard aferente câmpurilor Emitent/Semnatar.
public String veziSumaMethod(){
SessionEJBBGDN sessionEJBBGDN=null;
try{
InitialContext context = new InitialContext();
sessionEJBBGDN= (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
swapTables = 3;
comenziList = sessionEJBBGDN.getComenziFindAll();
facturiList = sessionEJBBGDN.getFacturaFindAll();
if(facturaId!=null)
{
factura = sessionEJBBGDN.getFacturaById(facturaId);
}
comanda = sessionEJBBGDN.getComandaById(comandaId);
linieComenziList=sessionEJBBGDN.getLinieComandaByIdComanda(comandaId);
sumaFacturaVar =0;
for(Liniecomanda c : linieComenziList){
double sumV = c.getCantitate()*(c.getPretVanzare()*(1-c.getDiscount()/100));
sumaFacturaVar+=sumV;
}
if(comanda.getFurnizori()==null){facturaEmitentVar="Depozitul X";}
else
if(comanda.getClienti()==null){facturaSemnatarVar="Depozitul X";}
}catch(Exception e){
e.printStackTrace();
}
return SUCCESS;
}
După efectuarea conexiunii la baza de date, se preiau din aceasta listele cu comenzi, facturi și linii comenzi necesare afișării în pagină. Identic se construiesc și obiectele factură și comandă reprezentând factura și comanda curentă.
Pentru comanda selectată în pagină, se parcurg liniile de comandă, și se calculează suma totală aferentă, prin formula Suma = Cantitate * (Pret * (1 – Discount / 100)). În cazul în care comanda este una de vânzare, atunci nu va avea furnizor personalizat, deci acesta va fi tocmai unitatea servită de această aplicație ”Depozitul X”, iar dacă va fi destinată achiziției de produse, atunci câmpul semnatar va fi populat cu textul ”Depozitul X”, semnatar fiind tocmai compania de electronice prezentată mai sus.
//Poate revin cu ceva proceduri legate de Exporturi in diferite formate : CSV, PDF etc si/sau ceva de rapoarte.
Proiectarea noului sistem
3.3.1 Proiectarea schemelor bazei de date
Baza de date se numește ”bogdanionutmusatlicenta2013” și conține treisprezece tabele.
Fiecare tabelă din baza de date curentă deține cheie primară artificială, dată de atributul ”id”, cu proprietatea de autoincrement, însemnând că în absența specificării cheii primare la adăugarea în baza de date a unei înregistrări, aceasta va primi valoarea cheii ultimei înregistrări adăugate plus unu. În plus dețin și restricțiile de unicitate și nu permit valori nule.
Reprezentarea atributelor s-a făcut prin tipurile de date oferite de baza de date MySQL. Transformarea tipurilor de date de la capitolul 3.2.1 s-a făcut în felul următor:
Schema bazei de date a aplicației arată în felul următor:
Între oricare două tabele din baza de date s-au putut realiza legături, prin intermediul unui atribut adițional, numit cheie externă, care face parte dintr-o tabelă, și se leagă de cheia primară dintr-o altă tabelă.
După cum se poate vedea, tabela Produse conține trei astfel de chei externe, ele numindu-se ”idBrand”, ”idCategorie” și ”idFurnizor”, între cele trei tabele și tabela Produse realizându-se o legătură de unu-la-mulți. Explicația acestor legături este clară, dat fiind că o marcă, o categorie sau un furnizor poate fi existent pe descrierea mai multor produse. Identic se întâmplă și cu tabelele clienti și comenzi, un client deținând mai multe comenzi, useri și logs sau useri și istoric – un utilizator poate genera mai multe înregistrări în jurnal sau în istoric , sau useri și comentarii. Între tabelele comenzi și produse, se găsește un caz deosebit, de asemenea și între tabelele factură și produse, între ele existând relația de mulți-la-mulți. Pentru a trata acest caz, s-a recurs la crearea unei tabele noi de legătură, liniecomanda în primul caz și stocuriprodus în cel de-al doilea. Aceste tabele conțin printre alte atribute, chei externe către tabelele principale, realizându-se între fiecare tabelă principală și tabela adițională câte o legătură de unu-la-mulți.
În prezent se regăsesc 17 astfel de legături unu-la-mulți între tabelele din baza de date.
Proiectarea prelucrărilor
Aplicația are în vedere atât gestiunea stocurilor cât și a utilizatorilor care se ocupă de aceasta.
De prima parte, se ocupă în special tabelele ”comenzi”, ”factura” și ”produse” împreună cu tabelele de legătură ”liniecomanda” și ”stocuriprodus”.
Un produs va putea intra în gestiune doar după ce i se va specifica furnizorul de la care provine, numele mărcii pe care o poartă și categoria din care face parte. Aceste informații se vor adăuga în tabele tot prin intermediul interfeței grafice de către utilizatori.
La crearea unei comenzi, va fi nevoie de un client sau un furnizor deja existent, în funcție de tipul comenzii (achiziție sau vânzare) și totodată vor intra înregistrări ce vor conține atât cheia primară a tabelei comenzi, cât și cea din tabela produse în tabela de legătură liniecomanda. Înregistrările vor conține și informații noi precum cantitatea și prețul fiecărui produs, pentru cantitatea vizată.
La facturare, pe lângă câmpurile de interes din cadrul acestui proces, se vor înregistra și variații ale stocurilor. Astfel, vor fi adăugate noi rânduri în tabela stocuriprodus care conțin cantitățile inițiale și cele curente, rezultate în urma achiziției sau vânzării, pentru fiecare produs regăsit pe comanda făcută.
Înregistrările din jurnal ale tabelei logs, precum și comentariile, se vor lega ambele atât de tabela useri cât și de stocuriprodus, indicând informații cu privire la acestea, generate automat de către sistem, cât și de către utilizator, ambele în format text însoțite de data la care s-au generat.
Tabela istoric conține date despre fiecare utilizator, înregistrând data de intrare și data de ieșire, precum și parola la intrare a acestuia, pentru generarea pe viitor de rapoarte.
Tabele istoric, jurnal și logs, se vor ocupa de cea de-a doua parte, a gestiunii utilizatorilor, în special la îndemâna administratorilor de sistem, care vor putea manipula conturile utilizatorilor existenți și vor putea vizualiza sau genera rapoarte privind statistici la nivelul acestora.
Capitolul IV – Realizarea aplicației informatice
4.1 Implementarea aplicației
Din punct de vedere tehnic, realizarea aplicației presupune:
Instalarea bazei de date. Pentru păstrarea datelor într-un mediu persistent, rapid s-a folosit baza de date MySQL. Aceasta se regăsește în pachetul XAMPP de la Apache disponibil la adresa http://www.apachefriends.org/en/xampp.html.
Pachetul mai conține pe lângă produsul MySql și un server web numit Apache HTTP Server capabil să susțină interfața grafică pentru manipularea datelor din baza de date
Figura 4.1. Pagina principală apachefriends.org
Pentru aplicația curentă s-a folosit varianta XAMPP pentru Windows.
Figura 4.2. Secțiunea de descărcare a XAMPP a apachefriends.org împreună cu cerințele de funcționare
Important de precizat este că pachetul funcționează doar daca preinstalat se regăsește pe mașina de calcul Microsoft Visual C++ 2008. Nu a mai fost nevoie a-l instala, acesta regăsindu-se în suita de librării furnizate gratuit de Microsoft Windows 7 prin soluția ”actualizări automate” (Automatic updates).
După instalare, se pornește pachetul, iar cele două servicii, serverul web și baza de date se activează automat.
După pornirea celor două servicii, în bara de adrese a browserului se poate scrie http://localhost/phpmyadmin pentru a lua contact cu interfața de manipulare a schemelor din baza de date și a tabelelor.
Figura 4.3 Panoul de lucru XAMPP cu cele două servicii active.
Figura 4.4 Interfața PHPMyAdmin
Instalarea mediului de dezvoltare Oracle JDeveloper.
JDeveloper este componenta care printre multe alte funcții pe care le deține, asigură suportul pentru scrierea codului, ajută la interpretarea și corectarea sintaxei la momentul rulării și livrarea proiectului pe server.
Descărcarea programului se face de pe site-ul Oracle, la secțiunea ”downloads” : http://www.oracle.com/technetwork/developer-tools/jdev/downloads/index.html.
Figura 4.5 Structura arborescentă a paginii de descărcare Oracle JDeveloper
Descărcarea programului presupune acceptarea unor condiții prevăzute în licență. Există mai multe formate de JDeveloper, însă cea recomandată este cea completă numită și Studio Edition. Ca versiune, pentru aplicația prezentă am ales ultima versiune, Oracle Jdeveloper 11g(11.1.2.4.0).
Figura 4.6. Versiuni Oracle Jdeveloper pe pagina de descărcare Oracle.
În Jdeveloper se pot integra mai multe tipuri de fișiere, de lucru cu partea vizuală, de logică a aplicației sau care conțin funcțiile propriu-zise în cod Java. Acestea sunt prezentate într-o structură arborescentă în fereastra Application Navigator. Foile de lucru sunt structurate în file ce pot fi selectat prin dublu-click în arborele de navigare, sau pentru a le schimba prin click pe titlul fiecăreia în partea de centru-sus a ecranului. Interfața programului conține și o consolă pentru mesajele scrise de programator, sau autogenerate de mediul de dezvoltare în anumite momente de timp ale rulării aplicațiilor.
Figura 4.7 Interfața grafică a mediului de dezvoltare Oracle JDeveloper.
Instalarea mediului de lucru Struts2.
Lucrul în limbajul de programare Java presupune îmbinarea sintaxei furnizată de limbaj cu elemente vizuale de tip HTML , foi de stiluri, pagini de script etc. Într-o filă de lucru, intercalarea acestora dă rezultatul dorit, însă nu au o estetică plăcută din punct de vedere al programatorului sau echipei de programatori și nu sunt ușor de adaptat pe alte platforme, din cauza probabilității sporite cu care pot apărea erorile în pagină. Ca soluție, s-au dezvoltat medii de lucru care, după principii unice, sintetizează paginile și regrupează fluxul aplicației la nivelul codului, încât entitățile din cod să funcționeze cu cel puțin aceeași eficiență, dacă nu și mai eficient.
Adresa de descărcare a Struts2 este http://struts.apache.org/development/2.x/ , de pe pagina de internet a companiei Apache.
Figura 4.8 Pagina de descărcare a mediului Apache Struts2
După integrarea celor trei elemente, aplicația poate fi scrisă și poate interacționa cu entitățile din baza de date.
Pentru pornirea aplicației scrisă în cod Java se apasă click-dreapta pe FirstPage.html și se alege comanda Run. După timpul acordat compilatorului, în navigatorul web, se deschide pagina de pornire a aplicației la adresa http://127.0.0.1:7101/Application1-ViewController-context-root/menu.action .
Figura 4.9 Pagina de pornire a aplicației Gestiunea Stocurilor.
4.2 Prezentarea aplicației
La accesul pe platforma aplicației, utilizatorul este întâmpinat de un ecran pentru conectare pe pagină. După ce introduce datele, acestea sunt verificate, iar utilizatorul are acces la funcționalitățile de pe site. Utilizatorii sunt de trei tipuri: owner-ul, administratorii și gestionarii. Primii doi au și drept asupra introducerii de noi date auxiliare pe site, importante, precum clienții sau furnizorii, dar numai ownerul are dreptul de a înregistra alți utilizatori. Gestionarii, ca și ceilalți utilizatori din primele două categorii enumerate anterior pot înregistra comenzi și / sau atașa facturi acestora, dar și a emite rapoarte cu privire la datele existente pe site.
Aplicația ”Gestiunea stocurilor” se ocupă cu înregistrarea datelor de diverse tipuri, permite modificarea acestora sau ștergerea definitivă a acestora. Datele ce se pot introduce de la tastatură sunt: mărcile de produse, categoriile, clienți, furnizori, articole de produse. Acestea se vor afișa în pagină la scurt timp după introducere într-un tabel.
Pe baza acestor date se pot înregistra comenzile, care sunt de două tipuri: comenzi de achiziție și comenzi de vânzare. Formatul de afișare a acestora este bazat tot pe reprezentarea de tip tabel. Comenzilor li se vor atașa rânduri de articole împreună cu câmpurile numerice necesare: prețul – care este preluat automat din tabela produse, ca preț de vânzare, cantitatea, discount-ul – în cazul comenzilor de vânzare.
După ce comenzile au fost înregistrate, ele rămân cu statusul nefacturate, până în momentul când li se atribuie o factură. Valoarea de pe factură este calculată automat de către aplicație pe baza produselor din comandă. Aplicația ține cont de stocurile de produse din acel moment, permițând vânzările doar în cazul în care produsul se află pe stoc, altfel alertând utilizatorul cu un mesaj specific.
Referitor la datele cu privire la mărcile de produse, categoriile de produse, clienții, furnizorii și articolele înregistrate pe site, se pot emite rapoarte, în format PDF sau Microsoft Word. Acestea pot cuprinde și evidențe ale comenzilor cu prețul/cantitatea maximă/minimă. Fișierele ce conțin rapoartele sunt denumite în funcție de momentul exportului lor, conținând numărul de milisecunde curent, astfel păstrându-se ordinea acestora.
Cu ajutorul acestei aplicații s-a reușit manipularea și afișarea facilă a datelor introduse, utilizând o bază de date ce permite interogări într-un timp foarte scurt.O serie de caracteristici și avantaje ale sale sunt:
Sistemul de facturare, ce poate fi modificat și îmbunătățit, permite la momentul actual o evidență a intrărilor și ieșirilor de produse eficientă. Pe de altă parte, comenzile și facturile se fac la momente de timp diferite, pentru a se permite gestiunea și în situațiile în care facturarea și intrarea în stoc nu se petrec în același timp.
Sistemul de autentificare este extins la trei roluri: owner, administrator și gestionar, sub o structură arborescentă, cu drepturi diferite în funcție de operațiile ce se efectuează.
Interfața grafică prietenoasă, ușor de folosit, simplă, care permite modificarea, ștergerea și accesarea altor pagini într-un mod rapid.
Sistemul de mesaje trimise tuturor, de tip camera de conversații, pentru a comunica facil și pentru a putea raporta problemele de interes comun, celorlalți.
Platforma de mesaje către administrator sau owner, pentru sesizarea anumitor probleme apărute pe parcursul operării pe site, sau diverse cereri administrative.
Pagina de export permite atât selectarea unui singur format, cât și pe ambele, în care să se afișeze rapoartele extrase.
Alte aplicații din gama prelucrărilor stocurilor de produse , precum ”Facturis” , au în vedere și suma de plată în valută, sau calcularea automată a TVA-ului, însă nu permit exportul de rapoarte în formate electronice. Fiecare program de acest gen, în funcție de direcția în care s-a dezvoltat, a primit și nuanțe contabile, economico-financiare, etc.
Unele avantaje sunt comune, realizând o paralelă între aplicația dezvoltată în cadrul lucrării și softul Facturis, precum lucrul simultan din mai multe puncte ale unei companii cu aceeași bază de date. De asemenea se pot extrage rapoartele pentru diverse perioade de timp, extinzându-se până la un întreg anul curent.
Noi direcții de dezvoltare a aplicației provin atât din diferențele programului dezvoltat față de altele din aceeași gamă, cât și din dorința de a aduce noutăți. Alte adăugiri ar mai fi: rapoarte privind utilizatorii, privind produsele achiziționate, vândute, privind istoricul, valoarea calculată în monedele de circulație internațională, noi documente de ordin financiar introduse în sistem, vânzare prin programul de facturare și altele.
Concluzii
Măsura în care au fost îndeplinite obiectivele stabilite înainte de a începe lucrul la aplicație este dată de funcționalitățile curente, prezente în aplicație. Ele au fost în mare parte atinse. Dintre acestea, le amintesc în special pe cele privind schematizarea și controlul fluxului de date, cât și pe cele de securitate, prin autentificare și trimitere de mesaje cu destinație controlată. Ușurința cu care se reușesc introducerea datelor în sistem și modificarea acestora, scurtează timpul petrecut înregistrând clienți și furnizori în baza de date, sau datele auxiliare precum mărcile și categoriile de produse.
Sistemul de înregistrare a comenzilor simplifică modul în care se aprovizionează și se dau spre vânzare produsele. În acest fel, se pot păstra ca înregistrări simplele comenzi până la momentul facturării și scoaterii lor din stoc.
Rapoartele privind mărfurile intrate în gestiune implică selectarea anumitor criterii din formular, ce indică perioada pe care se extinde raportul, tipul și/sau criteriul pe baza căruia se construiește acesta. Formatele de afișare a rapoartelor sunt PDF și Microsoft Word și în special se bazează pe descrieri în format tabelar a datelor existente.
Comunicarea pe platformă poate fi extinsă eventual cu o funcționalitate de tip mesagerie în rețea, conversațiile scrise cu destinatar fix, pot primi o altă formă, spre exemplu se pot trimite mesaje pe baza arborelul ierarhic al utilizatorilor de jos în sus, de la gestionari la administratori și de la administratori la owner. De asemenea, comunicarea la comun poate fi extinsă prin introducerea sortării mesajelor pe subiecte, a ordonării acestora în funcție de subiect sau de momentul la care s-a făcut trimiterea mesajului.
Pe baza celor precizate, pot afirma că, o ulterioară dezvoltare este necesară, în special pentru a ține pasul cu celelalte produse asemănătoare de pe piață. Printre funcționalitățile ce se pot adăuga variantei curente, amintesc înregistrarea datelor împreună cu valoarea TVA- ului, a cursului de schimb valutar, formate și criterii multiple de export a rapoartelor, noi documente tipizate introduse în sistem, sistem de plăți pe loc.
Aplicația creată, după părerea mea, își poate găsi locul imediat pe piața de desfacere ca program de aprovizionare și înregistrare a mărfurilor de desfacere, iar prin extinderile de rigoare, poate căpăta o formă care să o coteze pe aceasta, printre aplicațiile de top deja existente.
Anexe
import java.util.Map;
import java.util.TreeMap;
import javax.naming.InitialContext;
import javax.servlet.http.HttpServletRequest;
import model.Branduri;
import model.Categorii;
import model.Clienti;
import model.Comentarii;
import model.Comenzi;
import model.Factura;
import model.Furnizori;
import model.Liniecomanda;
import model.Produse;
import model.SessionEJBBGDN;
public class Actions extends ActionSupport implements ServletRequestAware {
private int nrOfBranduri;
private List<Branduri> branduri;
private transient HttpServletRequest request;
public String nume;
public Useri user;
public void setServletRequest(HttpServletRequest httpServletRequest){
this.request = httpServletRequest;
}
public HttpServletRequest getRequest(){
return request;
}
public String addCategorieMethod(){
SessionEJBBGDN sessionEJBBGDN=null;
try{
InitialContext context = new InitialContext();
sessionEJBBGDN = (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
String categorieNameV = request.getParameter("categorieName");
String categorieDescriptionV = request.getParameter("categorieInformation");
if(categorie==null){
sessionEJBBGDN.persistCategorii(new Categorii(categorieDescriptionV,0,categorieNameV));
}else{
Categorii categorie2 = sessionEJBBGDN.getCategorieByNume(categorieaux.getNume());
categorie2.setNume(categorie.getNume());
categorie2.setDescriere(categorie.getDescriere());
categorie = sessionEJBBGDN.mergeCategorii(categorie2);
categorie=null;
}
swapTables=1;
categoriiList = sessionEJBBGDN.getCategoriiFindAll();
}catch(Exception e){
}
return SUCCESS;
}
public String editeazaCategorie(){
SessionEJBBGDN sessionEJBBGDN=null;
try{
InitialContext context = new InitialContext();
sessionEJBBGDN = (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
categorie = sessionEJBBGDN.getCategorieById(categorieId);
swapTables=1;
categoriiList = sessionEJBBGDN.getCategoriiFindAll();
}catch(Exception e){
}
return SUCCESS;
}
public String stergeCategorie(){
SessionEJBBGDN sessionEJBBGDN=null;
try{
InitialContext context = new InitialContext();
sessionEJBBGDN = (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
categorie = sessionEJBBGDN.getCategorieById(categorieId);
sessionEJBBGDN.removeCategorii(categorie);
swapTables=1;
categoriiList = sessionEJBBGDN.getCategoriiFindAll();
categorie=null;
}catch(Exception e){
}
return SUCCESS;
}
public void setCategorie(Categorii categorie) {
this.categorie = categorie;
}
public Categorii getCategorie() {
return categorie;
}
Bibliografie
Regia Autonomă de Transport București (sursa: http://ro.wikipedia.org/wiki/Regia_Autonom%C4%83_de_Transport_Bucure%C8%99ti)
Discuție : Tehnologia informației (sursa: http://ro.wikipedia.org/wiki/Discu%C8%9Bie:Tehnologia_informa%C8%9Biei)
INS – Activitatea Întreprinderii/Enterprise activity , Anuarul statistic, 2011, paginile 482, 500
Niculaie A. – Management. Organizarea , Universitatea ”Transilvania” Brașov, 2005, pag. 35
Academia Română, Institutul de Lingvistică ”Iorgu Iordan” – Dicționarul explicativ al limbii române, ediția a II-a, Editura Univers Enciclopedic, 1998.
Date preluate din sursa online Wikipedia (http://ro.wikipedia.org/wiki/List%C4%83_de_magazine_online_de_electronice_%C8%99i_IT_din_Rom%C3%A2nia)
Despre MySQL. (Sursa : http://ro.wikipedia.org/wiki/MySQL)
Ilie Tamaș, Mirela Gheorghe, Ofelia Aleca, Dragoș Mangiuc, Victoria Stanciu, Valerica Mareș, Alexandru Gavrilă, Baze de Date – Access 2007 – Proiectare și realizare Pas cu Pas, Editura Infomega, 2010, Capitolul I – Concepte privind bazele de date și sistemul de gestiune al bazelor de date (Sursa: http://www.cig.ase.ro/prof/tamas/resurse/BAZE-DATE_CONCEPTE%20SI%20%20ALGEBRA%20RELATIONALA.pdf)
Pagina de internet a MySql – (Sursa: http://dev.mysql.com/doc/refman/5.0/en/data-types.html)
Apache – Server (Sursa: http://ro.wikipedia.org/wiki/Apache_(server))
Java – limbaj de programare (Sursa: https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare))
Cristian Frăsinaru – Curs practic de Java, Universitatea ”Al. I. Cuza”, Iași, România, pag. 12-13
Java Servlet – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/Java_Servlet)
Java Server Pages – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/JavaServer_Pages)
XML – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/XML)
HTML – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/HTML)
Cascading Style Sheets – Wikipedia.org (Sursa: https://en.wikipedia.org/wiki/Cascading_Style_Sheets)
Javascript – Wikipedia.org (Sursa: http://ro.wikipedia.org/wiki/JavaScript)
Apache Struts – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/Apache_Struts)
Java (limbaj de programare) – Wikipedia.org (Sursa: https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare))
Site oficial Oracle (Sursa: http://docs.oracle.com/cd/E16764_01/install.1111/e13666/ojdig.htm#BDCDAGAH) și JDeveloper (Sursa: http://en.wikipedia.org/wiki/JDeveloper)
Bibliografie
Regia Autonomă de Transport București (sursa: http://ro.wikipedia.org/wiki/Regia_Autonom%C4%83_de_Transport_Bucure%C8%99ti)
Discuție : Tehnologia informației (sursa: http://ro.wikipedia.org/wiki/Discu%C8%9Bie:Tehnologia_informa%C8%9Biei)
INS – Activitatea Întreprinderii/Enterprise activity , Anuarul statistic, 2011, paginile 482, 500
Niculaie A. – Management. Organizarea , Universitatea ”Transilvania” Brașov, 2005, pag. 35
Academia Română, Institutul de Lingvistică ”Iorgu Iordan” – Dicționarul explicativ al limbii române, ediția a II-a, Editura Univers Enciclopedic, 1998.
Date preluate din sursa online Wikipedia (http://ro.wikipedia.org/wiki/List%C4%83_de_magazine_online_de_electronice_%C8%99i_IT_din_Rom%C3%A2nia)
Despre MySQL. (Sursa : http://ro.wikipedia.org/wiki/MySQL)
Ilie Tamaș, Mirela Gheorghe, Ofelia Aleca, Dragoș Mangiuc, Victoria Stanciu, Valerica Mareș, Alexandru Gavrilă, Baze de Date – Access 2007 – Proiectare și realizare Pas cu Pas, Editura Infomega, 2010, Capitolul I – Concepte privind bazele de date și sistemul de gestiune al bazelor de date (Sursa: http://www.cig.ase.ro/prof/tamas/resurse/BAZE-DATE_CONCEPTE%20SI%20%20ALGEBRA%20RELATIONALA.pdf)
Pagina de internet a MySql – (Sursa: http://dev.mysql.com/doc/refman/5.0/en/data-types.html)
Apache – Server (Sursa: http://ro.wikipedia.org/wiki/Apache_(server))
Java – limbaj de programare (Sursa: https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare))
Cristian Frăsinaru – Curs practic de Java, Universitatea ”Al. I. Cuza”, Iași, România, pag. 12-13
Java Servlet – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/Java_Servlet)
Java Server Pages – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/JavaServer_Pages)
XML – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/XML)
HTML – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/HTML)
Cascading Style Sheets – Wikipedia.org (Sursa: https://en.wikipedia.org/wiki/Cascading_Style_Sheets)
Javascript – Wikipedia.org (Sursa: http://ro.wikipedia.org/wiki/JavaScript)
Apache Struts – Wikipedia.org (Sursa: http://en.wikipedia.org/wiki/Apache_Struts)
Java (limbaj de programare) – Wikipedia.org (Sursa: https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare))
Site oficial Oracle (Sursa: http://docs.oracle.com/cd/E16764_01/install.1111/e13666/ojdig.htm#BDCDAGAH) și JDeveloper (Sursa: http://en.wikipedia.org/wiki/JDeveloper)
Anexe
import java.util.Map;
import java.util.TreeMap;
import javax.naming.InitialContext;
import javax.servlet.http.HttpServletRequest;
import model.Branduri;
import model.Categorii;
import model.Clienti;
import model.Comentarii;
import model.Comenzi;
import model.Factura;
import model.Furnizori;
import model.Liniecomanda;
import model.Produse;
import model.SessionEJBBGDN;
public class Actions extends ActionSupport implements ServletRequestAware {
private int nrOfBranduri;
private List<Branduri> branduri;
private transient HttpServletRequest request;
public String nume;
public Useri user;
public void setServletRequest(HttpServletRequest httpServletRequest){
this.request = httpServletRequest;
}
public HttpServletRequest getRequest(){
return request;
}
public String addCategorieMethod(){
SessionEJBBGDN sessionEJBBGDN=null;
try{
InitialContext context = new InitialContext();
sessionEJBBGDN = (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
String categorieNameV = request.getParameter("categorieName");
String categorieDescriptionV = request.getParameter("categorieInformation");
if(categorie==null){
sessionEJBBGDN.persistCategorii(new Categorii(categorieDescriptionV,0,categorieNameV));
}else{
Categorii categorie2 = sessionEJBBGDN.getCategorieByNume(categorieaux.getNume());
categorie2.setNume(categorie.getNume());
categorie2.setDescriere(categorie.getDescriere());
categorie = sessionEJBBGDN.mergeCategorii(categorie2);
categorie=null;
}
swapTables=1;
categoriiList = sessionEJBBGDN.getCategoriiFindAll();
}catch(Exception e){
}
return SUCCESS;
}
public String editeazaCategorie(){
SessionEJBBGDN sessionEJBBGDN=null;
try{
InitialContext context = new InitialContext();
sessionEJBBGDN = (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
categorie = sessionEJBBGDN.getCategorieById(categorieId);
swapTables=1;
categoriiList = sessionEJBBGDN.getCategoriiFindAll();
}catch(Exception e){
}
return SUCCESS;
}
public String stergeCategorie(){
SessionEJBBGDN sessionEJBBGDN=null;
try{
InitialContext context = new InitialContext();
sessionEJBBGDN = (SessionEJBBGDN)context.lookup("SessionEJBBGDN#model.SessionEJBBGDN");
categorie = sessionEJBBGDN.getCategorieById(categorieId);
sessionEJBBGDN.removeCategorii(categorie);
swapTables=1;
categoriiList = sessionEJBBGDN.getCategoriiFindAll();
categorie=null;
}catch(Exception e){
}
return SUCCESS;
}
public void setCategorie(Categorii categorie) {
this.categorie = categorie;
}
public Categorii getCategorie() {
return categorie;
}
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: Aplicatie Web Pentru Gestiunea Stocurilor (ID: 149492)
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.
