Realizarea Unei Aplicatii In Java Pentru Sistemul de Operare Android Pentru Vizualizat Datele Angajatilor Dintr O Firma

Realizarea unei aplicații în Java pentru sistemul de operare Android pentru vizualizat datele angajaților dintr-o firmă

CUPRINS

Cap. 1. STUDIUL ȘI ANALIZA SISTEMULUI EXISTENT

1.1 – Prezentarea succintă a unității economico-sociale

1.2 – Principalele activități desfășurate în unitatea economică

1.3 – Studiul sistemului de conducere

1.4 – Studiul sistemului condus

1.5 – Studiul sistemului informațional

1.5.1 – Schema fluxului informațional aferent temei

1.5.2 – Descrierea circuitului informațional aferent temei

1.5.3 – Descrierea documentelor utilizate. Modelul conceptual al datelor (MCD).

1.5.5 – Analiza critică a sistemului actual și identificarea neajunsurilor existente în funcționarea sistemului existent

1.5.6 – Direcții de perfecționare a sistemului actual

Cap. 2. TEHNOLOGIILE UTILIZATE PENTRU DEZVOLTAREA APLICAȚIEI

2.1 – Scopul aplicației

2.2. Platforma hardware și software destinată aplicației

2.3. Tehnologiile software utilizate pentru dezvoltarea aplicației

Java (limbaj de programare)

Medii de dezvoltare integrate ale Java

Android Studio (IDE)

Cap. 3. PROIECTAREA DE DETALIU A APLICAȚIEI INFORMATICE

3.1 Definirea obiectivelor aplicației informatice

3.2 Proiectarea sistemului de codificare a datelor în aplicație

3.3 Proiectarea bazei de date a aplicației

3.4 Proiectarea interfeței aplicației

ANEXE

ANEXA NR. 1 – Secvențe din codul sursă

JAVA

XML

BIBLIOGRAFIE

INTRODUCERE

În această lucrare vom vorbi despre dezvoltarea unei aplicații pentru vizualizat datele angajaților si adăugare a angajaților dintr-o firmă, realizată pentru sistemul de operare Android, în limbajul de programare Java.

Aplicația a fost realizată inițial pentru uz intern în firma Altex SRL, dar poate fi utilizată de către orice firmă.

Scopul aplicației este acela de a facilita vizualizarea datelor angajaților dintr-o firmă și introducerii datelor acestora cu ușurință. În această aplicație putem introduce și regăsi numele și prenumele, adresa, numărul de telefon, adresa de e-mail, numărul angajatului, precum și rangul/funcția tuturor angajaților pe care îi dorim adăuga și ale căror date le dorim cunoaște.

Aplicația a fost realizată în Android Studio. Interfața a fost realizată in fișiere .xml (Extensible Markup Language), adaptate pentru Android, iar programarea efectivă (codul sursă) a fost realizat în limbajul de programare Java și a fost împărțit in fișiere .class (Java Class), fiecare ocupându-se cu o anumită parte a codului sursă. Datele angajaților sunt stocate într-o bază de date integrată în aplicație.

Cap. 1. STUDIUL ȘI ANALIZA SISTEMULUI EXISTENT

1.1 – Prezentarea succintă a unității economico-sociale

Denumirea firmei pentru care s-a realizat studiul se numește S.C. ALTEX IMPEX S.R.L.

Domeniul de activitate al firmei este retail-ul.

Firma are 2 sedii, și anume :

Piatra Neamț, Jud. Neamț, Str. Ștefan cel Mare, numărul 6, telefon 0233/210671, fax 0233/230817

București, Sector 1, Piața Montreal nr. 10, WTC intrarea F, etaj 3

Codurile firmei sunt următoarele :

Registrul Comerțului – J40/8039/2013

CUI – 2864518

Forma juridică a firmei este societate cu răspundere limitată cu capital integral privat.

Capital social al firmei în anul 2013 a fost de 111.785.638 lei.

Cifra de afaceri a firmei după ani:

2012: 254 milioane euro

2010: 195 milioane euro

2009: 180 milioane euro

2008: 344 milioane euro

2007: 317 milioane euro

Profitul net pentru anul 2013 a fost de aproximativ 13 milioane de lei. (profit)

Obiectul de activitate, în conformitate cu Legea nr. 31/1991, a fost înregistrat cu Cererea de Înscriere de Mențiuni nr. 123227/14.02.1992.

Domeniul de activitate :

Comerț cu amănuntul – prestări servicii în garanție.

Import și distribuție de produse electronice și electrocasnice și totodată distribuitor exclusiv al mărcilor Sanyo, Grundig, Rotel, Ariete, Cata, Petra, Iner.

Scurt istoric

La 14 februarie 1992 – ia naștere firma Altex și se demarează un program de comercializare și service pentru televizoare la mâna a doua aduse din Elveția care erau vândute magazinelor second-hand. Era momentul în care repartițiile guvernamentale pentru posturi de ingineri fuseseră sistate, iar Dan Ostahie, proaspăt absolvent de facultate încerca să gasească o soluție de a „face bani“. Investiția inițială a fost de 100.000 lei (mai puțin de 10.000 USD la cursul din acea dată).

În 1993 – Pentru prima dată in interiorul firmei se face distincția : comerț retail – prestări servicii în garanție. Se naște conceptul de magazine specializate de produse electronice – electrocasnice.

În 1994 – Se înființează primul magazin Altex la Piatra Neamț.

Între 1995 – 1997 – Anii poate cei mai fructuoși, dezvoltare cu o viteză deosebită. Altex se dezvoltă practic in toate orașele țării, deschizându-se peste 50 de magazine.

Între 1997 – 1999 – Piața românească iși arată primele neajunsuri (inflație, dobânzi bancare excesive). Se impune o restructurare a afacerii – conducere pe principiile rentabilității, analiza pe centru de profit și pierderi. Altex îngloba activități de retail, wholesaler, transporturi, service etc.

Între 2001 – 2004 – Încep să se vadă primele efecte ale restructurării. Altex are resurse proprii și deschide 22 de magazine noi, mult mai elaborate.

1.2 – Principalele activități desfășurate în unitatea economică

Altex este o companie din România, cu sediul la Piatra Neamț, care are ca obiect de activitate vânzarea de produse electrocasnice, electronice și produse IT&C. În mai 2011, compania deținea 89 de magazine, dintre care 13 erau unități Media Galaxy).

Altex România este acționar majoritar la companiile Complet Electro Serv, firmă producătoare de echipamente IT, și Cometex SA, companie de imobile. Din grupul Altex mai face parte și compania de credite de consum Credex, în care aproximativ 30% dintre acțiuni sunt deținute de către Raiffeisen Bank ( în ianuarie 2009).

Principalii concurenți ai companiei sunt eMag, Flanco și Domo.

Grupul de firme Altex

În grupul de firme Altex există în acest moment urmatoarele entități:

Altex – rețeaua de magazine ce comercializează produse electronice și electrocasnice.

8TIM – firma de logistică și transport (fosta ITSAIA) provenită din programul de privatizare (firma a fost înființată în anul 1999). 8TIM este o fostă întreprindere de stat (in realitate un parc de camioane vechi) care a fost schimbat integral. În acest moment 8TIM este un operator de transport intern și internațional, având un parc auto propriu format din 35 de tiruri marca Mercedes și Volvo (dintre care 23 Euro 3 si 12 Euro 2) și 25 camionete de tonaj mai mic. Cifra de afaceri realizată de 8TIM in 2004 a fost de 4 milioane euro.

ITALROMTEX – firma de distribuție si vânzari en-gros (firma a fost înființată în anul 2001). Italromtex este defapt importatorul și distribuitorul mărcilor Sanyo, Grundig, Panasonic, Electrolux, Zanussi, Arctic, Rowenta și Tefal. Italromtex asigură livrarea gratuită către magazinele diverșilor detailiști de articole electronice și electrocasnice în maxim 48 de ore, fără a percepe taxe suplimentare de transport, asigurând în același timp toată gama de consumabile și accesorii pentru mărcile distribuite. Italromtex a realizat o cifră de afaceri de 8 milioane euro in anul 2004.

Putem considera un avantaj existența și împărțirea diverselor atribuții între firmele din grup, deoarece prin creșterea cerințelor uneia dintre firme către celelalte, este forțat progresul general și îmbunătățirea serviciilor, rezultând astfel o competitivitate sporită. Astfel, în anul 2004, Altex s-a situat pe locul 77 in topul publicat de Camera de Comerț pe profilul comercial și este reteaua cu cifra de afaceri cea mai mare din domeniu pentru 2004. În mai 2011, compania avea 89 de magazine.

1.3 – Studiul sistemului de conducere

Conducerea societății este asigurată de către domnul Dan Ostahie, care ocupă funcția de director general al Grupului de firme Altex, dânsul fiind totodată si acționarul majoritar al companiei.

Procedura organizatorică și de gestiune

Altex își conduce activitatea prin 2 sedii regionale : unul la Piatra Neamț (pentru zona de nord a țării) și unul la București (pentru zona de sud a țării). Fiecare zonă are un grad ridicat de autonomie și o proprie organigramă. Există astfel centre de distribuție în ambele orașe, de unde se face expediția de marfă către magazinele din țară. Se evită astfel crearea problemelor de logistică datorită aglomerării cererilor către un singur centru.

A.     Organigrama Nord – Piatra Neamț

B.     Organigrama Sud – București

Aceste două entități sunt controlate de către top-managementul firmei, cu sediul în București.

Managementul este alcătuit din 12 persoane, toate cu studii superioare, cu vârste cuprinse între 25 si 40 ani. Componenta staff-ului este următoarea:

Director General

Director Marketing + asistenți de marketing

Director de Vânzări

Director Financiar

Director IT + ingineri IT

Director Logistică

Referent de rate

Printre funcțiile de conducere în cadrul companiei, amintim :

Director Resurse Umane ALTEX

Domeniul: Vânzari

Responsabilități:

– reorganizarea activităților Departamentului de Resurse Umane la nivelul tuturor companiilor din Grupul ALTEX cu focus pe dezvoltarea resurselor umane din organizaie și pe imbunătățirea continuă a serviciilor, plus valoare către clienții interni și externi;

– planificarea, coordonarea și supervizarea proceselor de selecție, recrutare, integrare, evaluare, training, dezvoltare, administrare personal și salarizare;

– stabilirea strategiei de dezvoltare managerială, dezvoltarea liderilor locali, adoptarea unei culturi organizaționale pro calitate care să fie transmisă tuturor angajaților;

– cristalizarea echipei;

– stabilirea strategiei de training, planificarea bugetelor și a datelor de desfășurare a training-urilor, negocierea și semnarea contractelor cu firmele specializate;

– conceperea de politici de salarizare, bonusuri și beneficii pentru angajații grupului de firme ALTEX, atât pentru sediu cât și pentru angajații rețelelor de magazine ALTEX și MEDIAGALAXY;

– crearea și implementarea de proceduri specifice activității de resurse umane;

– conceperea și implementarea sistemului de evaluare a performanțelor angajaților cu accent pe atitudine, pe conștiință profesională ce poate fi transformată in cultură organizațională;

– consilierea angajaților și managerilor în probleme de resurse umane;

– stabilirea și actualizarea structurii de personal, previziunilor de personal care să raspundă nevoilor de angajare;

– elaborarea de fișe post pentru angajații companiei;

– elaborarea regulamentului intern;

– elaborarea și gestionarea bugetelor anuale pentru departamentul de resurse umane (peste 20mil Euro/ an);

– identificarea furnizorilor, derularea negocierilor, încheierea contractelor;

– implementarea politicilor de administrare flotă autoturisme de serviciu și integrarea acestora în pachetul de compensații și beneficii ale angajaților;

– implementarea unui nou soft de salarizare, administrare, evaluare, evidență training și dezvoltare carieră pentru toate companiile din grupul ALTEX;

– participarea la luarea deciziilor în Board-ul Director;

Trade Manager ALTEX (Manager vânzări București)

Domeniul: Vânzări

Responsabilități:

– coordonarea, conducerea și supervizarea activității magazinelor ALTEX din punct de vedere comercial și administrativ;

– dezvoltarea rețelei de magazine ALTEX;

– realizarea rebranding-ului la magazinele existente;

– asigurarea atingerii obiectivelor bazate pe indicatorii de performanță si balanță P&L;

– optimizarea profitabilității magazinelor pană la nivel de categorie de produs;

– asigurarea unei grile de produse, dinamică, pe fiecare magazine, pe fiecare categorie;

– elaborarea de proceduri pentru imbunatățirea activității;

– optimizarea activității de aprovizionare cu marfă, stabilirea graficului de aprovizionare;

– organizarea activității de livrare marfă către client,rea și gestionarea bugetelor anuale pentru departamentul de resurse umane (peste 20mil Euro/ an);

– identificarea furnizorilor, derularea negocierilor, încheierea contractelor;

– implementarea politicilor de administrare flotă autoturisme de serviciu și integrarea acestora în pachetul de compensații și beneficii ale angajaților;

– implementarea unui nou soft de salarizare, administrare, evaluare, evidență training și dezvoltare carieră pentru toate companiile din grupul ALTEX;

– participarea la luarea deciziilor în Board-ul Director;

Trade Manager ALTEX (Manager vânzări București)

Domeniul: Vânzări

Responsabilități:

– coordonarea, conducerea și supervizarea activității magazinelor ALTEX din punct de vedere comercial și administrativ;

– dezvoltarea rețelei de magazine ALTEX;

– realizarea rebranding-ului la magazinele existente;

– asigurarea atingerii obiectivelor bazate pe indicatorii de performanță si balanță P&L;

– optimizarea profitabilității magazinelor pană la nivel de categorie de produs;

– asigurarea unei grile de produse, dinamică, pe fiecare magazine, pe fiecare categorie;

– elaborarea de proceduri pentru imbunatățirea activității;

– optimizarea activității de aprovizionare cu marfă, stabilirea graficului de aprovizionare;

– organizarea activității de livrare marfă către client, transportul gratuit al mărfii vândute la domiciliu clientului;

– stabilirea planului/ prospectul de vânzări, pentru fiecare magazin în parte;

– lichidarea mărfurilor care au rotație slabă și rezolvarea problemelor de service;

– analizarea competiției și contracararea ei;

– analiza rezultatelor lunare ale fiecărui magazin în ceea ce privește menținerea costurilor în limitele de costuri stabilite de companie, stabilirea planului de profit/magazine;

– îmbunătățirea condițiilor contractuale aferente fiecărui magazin;

Branch Manager (Director sucursala ALTEX zona Vest cu sediul la Oradea)

Domeniul: Vanzări

Responsabilități:

– stablirea strategiei la nivel de sucursală în concordanță cu obiectivele pe termen mediu și lung ale companiei;

– conceperea politicilor de organizare, coordonarea și supervizarea operațiunilor;

– elaborarea de proceduri specifice în vederea atingerii obiectivelor propuse;

– elaborarea planului de afaceri și a bugetelor pentru departamentele retail, achiziții, economic, resurse umane, logistică & transport din cadrul sucursalei Altex Vest;

– realizarea indicatorilor de performanță și stabilirea corecțiilor necesare (P/L, rotația stocurilor, vânzări/margine);

– verificarea lunară a încadrării în bugetele previzionate pe fiecare departament;

– aprobarea cheltuielilor neprevizionate în bugetul anual;

– aprobarea și semnarea facturilor care decurg din contractele încheiate în folosul magazinelor (chirii, utilități, etc);

– respectarea condițiilor stabilite în toate contractele încheiate la nivel de sucursală (contractele de închiriere a spațiilor în care functionează magazinele, contractele de închiriere a spațiilor în vederea deschiderii de noi magazine, contractele de furnizarea serviciilor);

– aprobarea structurii organizatorice și organigramele magazinelor bazate pe alocarea optimă a resurselor;

– participarea la deciziile privind campaniile de promovare prin intermediul cataloagelor de produse (layout, număr de produse, mesaj, prețuri);

Trade Manager (Manager Zonal)

 Domeniul: Vânzări

Responsabilități:

– coordonarea, conducerea și supervizarea activității magazinelor ALTEX din punct de vedere comercial și administrativ;

– dezvoltarea rețelei de magazine ALTEX;

– realizarea rebranding-ului la magazinele existente;

– asigurarea atingerii obiectivelor bazate pe indicatorii de performanță și balanță P&L;

– optimizarea profitabilității magazinelor până la nivel de categorie de produs;

– asigurarea unei grile de produse, dinamică, pe fiecare magazine, pe fiecare categorie;

– elaborarea de proceduri pentru imbunatățirea activității;

– optimizarea activității de aprovizionare cu marfă, stabilirea graficului de aprovizionare;

– organizarea activității de livrare marfă către client, transportul gratuit al mărfii vândute la domiciliu clientului;

– stabilirea planului/ prospectul de vânzări, pentru fiecare magazin în parte;

– lichidarea mărfurilor care au rotație slabă și rezolvarea problemelor de service;

– analizarea competiției si contracararea ei;

– analiza rezultatelor lunare ale fiecărui magazin în ceea ce privește menținerea costurilor în limitele de costuri stabilite de companie, stabilirea planului de profit pe magazine;

– îmbunatățirea condițiilor contractuale aferente fiecărui magazin.

Product Manager Electrocasnice ALTEX

 Domeniul: Vânzări

Responsabilități:

– achiziționarea de produse electrocasnice în baza contractelor cu furnizorii categoriei de produse;

– întocmirea planului de achiziții (lunar, trimestrial, anual) pentru familiile de produse electrocasnice;

– verificarea corectitudinii prețurilor de pe factura de achiziție vs prețurile agreate în contractele cu furnizorii;

– urmărirea realizării targetelor de achiziții și încasarea bonusurilor de volum contractuale;

– definirea produselor pentru oferta promoțională periodică (leaflet) și pentru alte activități de

 marketing;

– furnizarea departamentului de marketing de informații necesare comunicării, beneficiile produselor și alte argumente necesare vânzării.

1.4 – Studiul sistemului condus

Societatea comercială ALTEX IMPEX SRL are peste 2000 de angajați, media de vârstă situându-se în jurul a 35 de ani. Această medie de vârstă, relativ scazută, permite aplicarea unor metode moderne de management. Politica de personal este una de fidelizare a angajaților, pornind de la viziunea că experiența câstigată în timp este un factor important în servirea rapidă și eficientă a clienților. Totuși, remarcăm și aici existența câtorva probleme legate de resursele umane, datorate în principal dezvoltării foarte rapide a companiei fără lărgirea corespunzătoare a numărului de angajați, în acest moment existând în cadrul companiei o situație de sub-dimensionare a personalului.

Comunicarea în cadrul companiei se bazează pe echipamente și sisteme moderne de comunicații (e-mail, centrale telefonice de ultimă generație, echipament pentru video sau tele-conferință, etc).

Se poate totuși remarca o ușoară disfuncționalitate a comunicării datorită responsabilităților disproporționate între membrii staff-ului. Există astfel membri cu un număr foarte ridicat de atribuții care nu pot face față în timp util întregului volum de cerințe, apărând astfel așa-numitele bottle-neck-uri.

1.5 – Studiul sistemului informațional

Prin sistemul informațional se înțelege ansamblul datelor, informațiilor, circuitelor informaționale, fluxurilor informaționale, procedurilor și mijloacelor de tratare a informațiilor, care au drept scop să contribuie la fundamentarea, stabilirea și realizarea obiectivelor întreprinderii.

Rolul sistemului informațional este de a transmite informația între diferite elemente. La S.C. ALTEX IMPEX S.R.L, rolul sistemului informațional este acela de a asigura persoanele din conducere cu informații necesare pentru luarea diferitelor decizii economice sau de altă natură.

În sistemul informațional se regăsesc: informația vehiculată, documentele purtătoare de informații, personalul, mijloace de comunicare, sisteme de prelucrare a informației. Printre activitățile desfașurate în acest sistem, pot fi enumerate: achiziționarea de informații din sistemul de bază, completarea documentelor și transferul acestora între diferite compartimente, centralizarea datelor, etc.

1.5.1 – Schema fluxului informațional aferent temei

1.5.2 – Descrierea circuitului informațional aferent temei

CIRCUITUL INFORMAȚIONAL aferent temei este următorul :

In interfața programului sunt introduse următoarele date despre persoană (o vom numi contact, așa este definită în program) pe care o dorim adăuga în agendă : nume, număr de telefon, adresă, adresă de e-mail;

Prin introducerea datelor aferente persoanei pe care o dorim adăuga în aplicație, datele sunt introduse in baza de date a aplicației care este actualizată.

În aplicație avem o listă cu toate contactele agendei, acestea fiind afișate în aceasta din baza de date a aplicației;

1.5.3 – Descrierea documentelor utilizate. Modelul conceptual al datelor (MCD).

Documentele utilizate în cadrul firmei sunt următoarele :

1. Registrul-jurnal 

Registrul-jurnal (cod 14-1-1) este un document contabil obligatoriu în care se înregistrează cronologic toate operațiunile economico-financiare. Operațiunile de aceeași natură, realizate în același loc de activitate (atelier, secție etc.), pot fi recapitulate într-un document centralizator, denumit jurnal auxiliar, care stă la baza înregistrării în Registrul-jurnal. Printre jurnalele auxiliare care pot fi întocmite se numără: jurnalul privind operațiunile de casă și bancă, jurnalul privind decontările cu furnizorii sau situația încasării-achitării facturilor.

Orice inregistrare în Registrul-jurnal trebuie să cuprindă informații despre:

felul, numărul și data documentului justificativ;

explicații privind operațiunile efectuate, precum și conturile sintetice debitoare și creditoare în care s-au înregistrat sumele corespunzătoare respectivelor operațiuni.

Registrul-jurnal se întocmește lunar prin înregistrarea cronologică a documentelor în care se reflectă mișcarea elementelor de activ și de pasiv ale unității. Tot lunar se totalizează sumele debitoare și sumele creditoare.

Unitățile care utilizează jurnale auxiliare pot înregistra in Registrul-jurnal totalul lunar al fiecăruia dintre jurnalele auxiliare.

2. Registrul-inventar

Registrul-inventar (cod 14-1-2) este un document contabil obligatoriu în care se înregistrează toate elementele de activ și de pasiv, grupate în funcție de natura lor, inventariate de unitate. Elementele înscrise in Registrul-inventar au la bază listele de inventariere sau alte documente care justifică conținutul acestora la sfârșitul exercițiului financiar.

Registrul-inventar se întocmește, pe baza inventarierii faptice, în mai multe situații:

la înființarea unității;

cel puțin odată pe an pe parcursul funcționarii unității;

cu ocazia fuziunii, divizării sau încetării activității;

alte situații prevăzute de lege.

În acest registru se înscriu, într-o formă recapitulativă, elementele inventariate după natura lor, suficient de detaliate pentru a putea justifica conținutul fiecărui post al bilanțului. Documentul se întocmește într-un singur exemplar, după ce a fost numerotat, șnuruit, parafat și înregistrat în evidența unității. Acest registru se arhivează la compartimentul financiar-contabil, împreună cu documentele justificative care au stat la baza întocmirii lui.

3. Cartea mare 

Cartea mare (cod 14-1-3) este un registru contabil obligatoriu în care se înregistrează lunar și sistematic, prin regruparea conturilor, mișcarea și existența tuturor elementelor de activ și de pasiv, la un moment dat.

Acesta este un document contabil de sinteză și sistematizare, care cuprinde toate conturile sintetice și contine:

simbolul contului debitor și al conturilor creditoare corespondente;

rulajul debitor și creditor;

soldul contului.

Registrul Cartea mare poate contine câte o filă pentru fiecare cont sintetic utilizat de unitate. De asemenea, documentul poate fi inlocuit cu Fișa de cont pentru operațiuni diverse.

4. Registrul de casă 

Registrul de casă (Cod 14-4-7A si Cod 14-4-7bA) servește ca:

document de înregistrare operativă a încasărilor și plăților în numerar, efectuate prin casieria unității, pe baza actelor justificative;

document de stabilire, la sfârșitul fiecărei zile, a soldului de casă;

document de înregistrare în contabilitate a operațiunilor de casă.

Acesta se întocmește zilnic, în două exemplare, de către persoanele care au calitatea de casier, pe baza actelor justificative de încasări și plăți. Un exemplar este arhivat la casierie, iar al doilea exemplar, la compartimentul financiar-contabil pentru o perioadă de 10 ani.

Din punct de vedere al informațiilor pe care le conține, registrul de casă trebuie să cuprindă cel puțin:

denumirea unității;

denumirea și data (ziua, luna, anul) întocmirii formularului;

numărul curent;

numărul actului de casă;

explicații;

încăsari;

plăți;

report/sold ziua precedentă;

semnături: casier și compartiment financiar-contabil. Casierul semnează pentru confirmarea înregistrării operațiunilor efectuate, iar persoana din compartimentul financiar-contabil semnează pentru verificarea exactității datelor înscrise, pentru primirea exemplarului 2 al Registrului și a actelor justificative anexate.

5. Statul de salarii

Statul de salarii servește atât ca document pentru calculul drepturilor bănești cuvenite salariaților și al contributiilor și al altor sume datorate, cât și ca document justificativ de înregistrare în contabilitate. 

Se întocmește lunar (pe secții, ateliere, servicii, etc.), într-un exemplar sau în două, după caz. La baza lui stau, printre altele, documentele care atestă timpul lucrat efectiv, listele de avans, de concedii de odihnă sau certificatele medicale.

De asemenea, statele de salarii trebuie să includă plățile făcute în cursul lunii, cum sunt: avansul, lichidările, indemnizațiile de concediu, astfel încât să ofere o imagine cuprinzătoare asupra întregii sume a salariilor calculate și a reținerilor legale din perioada de decontare respectivă.

Statul de salarii trebuie să conțină, în mod obligatoriu, cel putin informații despre:

denumirea unității, secției, serviciului etc.;

denumirea formularului; întocmit pentru luna, anul;

numele ți prenumele;

venitul brut;

contribuția individuală de asigurări sociale;

contribuția individuala la bugetul asigurărilor pentru șomaj;

contribuția pentru asigurări sociale de sănătate;

cheltuieli profesionale;

venitul net;

deducere personală de bază;

deduceri suplimentare;

venitul bază de calcul;

impozitul calculat și reținut;

salariul net.

Totodată, statul de salarii trebuie semnat, pentru confirmarea exactității calculelor, de către persoana care îl întocmește.

Documentul se arhivează, timp de 50 de ani, la compartimentul financiar contabil și, dacă este cazul să fi fost întocmit în dublu exemplar, și la compartimentul care a întocmit statele de salarii.

6. Registrul de evidență fiscală (acesta este reglementat de Ordinul Ministerului Finanțelor nr.870/2005)

Registrul de evidență fiscală se întocmește de către contribuabilii care sunt înregistrați ca plătitori de impozit pe profit și are ca scop înscrierea tuturor informațiilor care au stat la determinarea profitului impozabil și a calculului impozitului pe profit cuprins în declarația privind obligațiile de plată la bugetul general consolidat. Documentul se pătrează la domiciliul fiscal al contribuabilului și trebuie prezentat organelor de inspecție fiscală de cate ori este nevoie.

Informațiile înscrise în acest registru sunt înregistrate în ordine cronologică și trebuie să corespundă cu operațiunile fiscale și cu datele privind impozitul pe profit din declarația privind obligațiile de plată la bugetul general consolidat.

Registrul de evidență fiscală se eliberează contra cost de către unitățile fiscale, pe baza unei cereri, însoțită de anumite documente (copie CUI societate, copie Certificat Constatator și Hotărâre Judecătorească de înființare a societății comerciale, copie după actul de identitate al persoanei delegate să depună solicitarea și să ridice registrul). Cererea pentru achiziționarea registrului trebuie depusă în maxim 30 de zile de la înregistrarea unei societăți (numai dacă firma este plătitoare de impozit pe profit).

Modelul conceptual al datelor

Datele bazei de date din aplicație sunt următoarele :

(Entitate : Atribute)

Angajați : ID_Angajat (Cheie primară), Nume și prenume, Telefon, Adresă, E-mail, Număr angajat, Rang

1.5.5 – Analiza critică a sistemului actual și identificarea neajunsurilor existente în funcționarea sistemului existent

Politica de personal a firmei este una de fidelizare a angajaților, pornind de la viziunea că experiența câstigată în timp este un factor important în servirea rapidă și eficientă a clienților. Totuși, remarcăm și aici existența câtorva probleme legate de resursele umane, datorate în principal dezvoltării foarte rapide a companiei fără lărgirea corespunzătoare a numărului de angajați, în acest moment existând în cadrul companiei o situație de sub-dimensionare a personalului.

Se poate remarca o ușoară disfuncționalitate a comunicării datorită responsabilităților disproporționate între membrii staff-ului. Există astfel membri cu un număr foarte ridicat de atribuții care nu pot face față în timp util întregului volum de cerințe, apărând astfel așa-numitele bottle-neck-uri.

1.5.6 – Direcții de perfecționare a sistemului actual

Strategia de dezvoltare a lanțului de magazine Altex este atât una extensivă (deschiderea de noi magazine) cât și intensivă (modernizarea unora dintre magazinele existente).

In decursul ultimilor 10 ani au fost deschise sau reamenajate magazine Altex în Brăila, Galați, Miercurea Ciuc, Buzău, Iași, Alba Iulia, Giurgiu, Timișoara, Drobeta Turnu Severin, Târgu Jiu, Târgu Mureș și Oradea.

Pentru atragerea clienților, Altex se axează în principal pe oferirea de accesorii și servicii post-vânzare, în condițiile în care concurența prin preț pe piața de produse electronice și electrocasnice este practic imposibilă.

Deși sursa principală de venituri este comercializarea cu amănuntul de produse electronice și electrocasnice, vânzarile cu ridicata si serviciile de logistică si transport au o importanță din ce în ce mai mare în cadrul grupului de firme. Altex pregătește de asemenea lansarea unei afaceri în domeniul bunurilor imobiliare și dezvoltarea unui sistem propriu de finanțare a sistemului de rate.

Conducerea societății își propune o cifră de afaceri pentru anul 2015 de 300 milioane Euro (o crestere de aproximativ 5-10%) si de asemenea o creștere a suprafeței comerciale cât mai mare. (în acest moment suprafața comercială Altex însumează aproximativ 100.000 mp).

Pentru dezvoltarea rețelei, Altex are ca obiectiv pentru anul 2015 creșterea numărului de magazine din țară la un total de peste 100 de magazine care să acopere toate orașele țării cu minim 40.000 locuitori.

Cap. 2. TEHNOLOGIILE UTILIZATE PENTRU DEZVOLTAREA APLICAȚIEI

2.1 – Scopul aplicației

Scopul aplicației este acela de a facilita vizualizarea datelor angajaților dintr-o firmă și introducerii datelor acestora cu ușurință. În această aplicație putem introduce și regăsi numele și prenumele, adresa, numărul de telefon, adresa de e-mail, numărul angajatului, precum și rangul/funcția tuturor angajaților pe care îi dorim adăuga și ale căror date le dorim cunoaște.

Aplicația a fost realizată în Android Studio, probabil cea mai bună alegere de IDE (Integrated Development Environment) pentru realizarea aplicațiilor pentru sistemul de operare Android. Interfața a fost realizată in fișiere .xml (Extensible Markup Language), adaptate pentru Android, iar programarea efectivă (codul sursă) a fost realizat în limbajul de programare Java și a fost împărțit in fișiere .class (Java Class), fiecare ocupându-se cu o anumită parte a codului sursă. Datele angajaților sunt stocate într-o bază de date integrată în aplicație.

2.2. Platforma hardware și software destinată aplicației

Aplicația este destinată dispozitivelor mobile (telefoanelor mobile și tabletelor) cu sistemul de operare Android de la Google.

Versiunea minimă a sistemului de operare necesară rulării aplicației este Android 4.1.2 (Android Jellybean).

Inițial, aplicația era destinată doar dispozitivelor cu versiunea de Android 5.0+ (Android Lollipop), dar datorită implementării și utilizării unor biblioteci de compatibilitate pentru versiunea de Android 4.1.2+ în proiect în Android Studio, aplicația este compatibilă cu o gamă mai variată de dispozitive.

Pe scurt, anumite elemente grafice sunt specifice funcționale doar pe dispozitivele mobile cu versiunea sistemului de operare Android 5.0+ (Android Lollipop), însă cu aceste biblioteci de compatibilitate aceste elemente grafice sunt posibile și pe versiuni mai vechi ale sistemului de operare.

2.3. Tehnologiile software utilizate pentru dezvoltarea aplicației

Aplicația a fost realizată în Android Studio, probabil cea mai bună alegere de IDE (Integrated Development Environment) pentru realizarea aplicațiilor pentru sistemul de operare Android.

Interfața a fost realizată in fișiere .xml (Extensible Markup Language), adaptate pentru Android.

Codul sursă a fost realizat în limbajul de programare Java și a fost împărțit in fișiere .class (Java Class), fiecare ocupându-se cu o anumită parte a codului sursă.

Datele angajaților sunt stocate într-o bază de date integrată în aplicație.

Java (limbaj de programare)

Java este un limbaj de programare orientat-obiect, puternic tipizat, conceput de către James Gosling la Sun Microsystems (acum filială Oracle) la începutul anilor ʼ90, fiind lansat în 1995.

Cele mai multe aplicații distribuite sunt scrise în Java, iar noile evoluții tehnologice permit utilizarea sa și pe dispozitive mobile gen telefon, tabletă, agenda electronică, palmtop etc.

În felul acesta se creează o platformă unică, la nivelul programatorului, deasupra unui mediu eterogen extrem de diversificat. Acesta este utilizat în prezent cu succes și pentru programarea aplicațiilor destinate intranet-urilor.

Limbajul împrumută o mare parte din sintaxă de la C și C++, dar are un model al obiectelor mai simplu și prezintă mai puține facilități de nivel jos.

Un program Java compilat, corect scris, poate fi rulat fără modificări pe orice platformă care e instalată o mașină virtuală Java (engleză Java Virtual Machine, prescurtat JVM).

Acest nivel de portabilitate (inexistent pentru limbaje mai vechi cum ar fi C) este posibil deoarece sursele Java sunt compilate într-un format standard numit cod de octeți (engleză byte-code) care este intermediar între codul mașină (dependent de tipul calculatorului) și codul sursă.

Mașina virtuală Java este mediul în care se execută programele Java. În prezent, există mai mulți furnizori de JVM, printre care Oracle, IBM, Bea, FSF. În 2006, Sun a anunțat că face disponibilă varianta sa de JVM ca open-source.

Există 4 platforme Java furnizate de Oracle:

Java Card – pentru smartcard-uri (carduri cu cip)

Java Platform, Micro Edition (Java ME) — pentru hardware cu resurse limitate, gen PDA sau telefoane mobile,

Java Platform, Standard Edition (Java SE) — pentru sisteme gen workstation, este ceea ce se găsește pe PC-uri,

Java Platform, Enterprise Edition (Java EE) — pentru sisteme de calcul mari, eventual distribuite.

Scurt istoric al versiunilor

23 ianuarie 1996, JDK 1.0 – versiunea inițială;

19 februarie 1997, JDK 1.1;

8 decembrie 1998, J2SE 1.2;

8 mai 2000, J2SE 1.3;

6 februarie 2002, J2SE 1.4;

30 septembrie 2004, J2SE 5.0, numărul de versiune 1.5 este păstrat ca număr intern de versiune;

11 decembrie 2006, Java SE 6;

14 februarie 2012, Java SE 7;

18 martie 2014, Java SE 8;

Medii de dezvoltare integrate ale Java

(IDE – Integrated Development Environment)

Un IDE (engleză Integrated Development Environment) este un mediu de lucru care permite dezvoltarea de aplicații folosind anumite limbaje de programare (cele suportate de IDE, adică cele pentru care a fost creat acel IDE).

Pentru Java sunt folosite următoarele IDE-uri :

JCreator – uz gratuit JCreator LE;

Eclipse – uz gratuit;

NetBeans – uz gratuit;

BEA Workshop;

BlueJ – uz gratuit;

CodeGuide – uz comercial;

DrJava – uz gratuit;

IntelliJ IDEA – uz gratuit Idea Community Edition (Android Studio se bazează pe acest IDE)

JBuilder – uz comercial;

JDeveloper – uz comercial, platformă multiplă;

KDevelop – uz gratuit (platformă GNU/Linux, Cygwin);

Android Studio (IDE)

Android Studio este un IDE (Integrated Development Environment – mediu integrat de dezvoltare), utilizat pentru dezvoltarea aplicațiilor pe platforma Android.

Acesta a fost anunțat pe data de 16 Mai, 2013, la conferința Google I/O, de către Ellie Powers, Product Manager la Google.

Android Studio este disponibil gratuit sub licența Apache 2.0.

Android Studio a fost în faza de early access (variantă de preview) începând cu versiunea 0.1 în Mai 2013, apoi a intrat în faza de beta începând cu versiunea 0.8, care a apărut în luna iunie 2014.

Fiind bazată pe software-ul IntelliJ IDEA de către JetBrains, Android Studio a fost realizat în mod specific pentru dezvoltarea de aplicații pentru platforma Android.

Acesta este disponibil pentru descărcare pentru sistemele de operare Windows, Mac OS X și Linux.

Ultima versiune stabilă a Android Studio este versiunea 1.2, apărută pe data de 30 aprilie 2015.

Cap. 3. PROIECTAREA DE DETALIU A APLICAȚIEI INFORMATICE

3.1 Definirea obiectivelor aplicației informatice

Obiectivele aplicației informatice sunt de a facilita vizualizarea datelor angajaților dintr-o firmă și introducerii datelor acestora (pentru a le vizualiza în listă) cu ușurință.

În această aplicație informatică putem introduce numele și prenumele, adresa, numărul de telefon, adresa de e-mail, numărul angajatului, precum și rangul/funcția tuturor angajaților pe care îi dorim adăuga în listă și ale căror date le dorim cunoaște.

De asemenea, putem vizualiza datele fiecărui angajat într-o listă, sub forma unei „cărți de joc”, pentru fiecare angajat, aceasta conținând datele acestora precum și o poză a acestora.

Aplicația este utilă în cazul în care dorim să cunoaștem cu ușurință datele unui angajat din firma în care lucrează.

3.2 Proiectarea sistemului de codificare a datelor în aplicație

Sistemul de codificare al datelor a fost realizat în limbajul de programare Java.

Partea de Java a programării aplicației a fost împărțită în mai multe fișiere .class, fiecare dintre ele având un anumit rol si ocupându-se cu o diferită parte a aplicației.

Cele mai importante dintre acestea sunt :

LoginActivity.class

Se ocupă cu partea de login a aplicației. Există un nume de utilizator și o parolă specială pentru administrator, care are acces, pe langă la vizualizarea listei cu angajați, la adăugarea a noi angajați în listă. Utilizatorul obișnuit se poate loga cu orice username și parolă, având acces doar la lista de angajați, neputând face modificări la aceasta.

MainActivity.class și MainActivity2.class

Clasele principale ale aplicației, conțin metode folosite pentru inițializarea listei cu angajați și a „creatorului” de angajați;

De asemenea, fac legătura între partea de bază de date a aplicației, partea de programare în Java și partea de interfață (fișierele .xml).

Employee.class

Partea de bază de date a aplicației. Aceasta inițializează entitatea angajat și atributele acesteia : ID(Cheie primară), Nume și prenume, Adresă, Număr de telefon, Adresă e-mail, Număr Angajat, Rang, precum și o poză cu angajatul.

DatabaseHandler.class

Se ocupă cu administrarea bazei de date.

Pentru codul sursă al părții de programare în Java, vizitați anexa 1.

3.3 Proiectarea bazei de date a aplicației

Partea de bază de date a aplicației a fost realizată în fișierele Employee.class și DatabaseHandler.class, în limbajul de programare Java.

Fișierul Employee.class reprezintă baza de date efectivă, în timp ce DatabaseHandler.class reprezintă partea care administrează baza de date (o inițializează la rularea aplicației, etc).

În fișierul Employee.class este inițializată entitatea Employee (Angajat), care are următoarele atribute :

_id

ID-ul angajatului în baza de date, reprezintă cheia primară a entității Angajat;

_name

Numele complet al angajatului;

_phone

Numărul de telefon al angajatului;

_email

Adresa de e-mail al angajatului;

_address

Domiciliul angajatului;

_imageURI

Poza angajatului.

_employeeid

Numărul angajatului în firma respectivă;

_employeerank

Rangul (Funcția) angajatului în firmă.

3.4 Proiectarea interfeței aplicației

Interfața aplicației a fost realizată în fișiere .xml. Fiecare fișier .xml se ocupă cu afișarea unui anumit element în interfață.

Cele mai importante fișiere .xml sunt următoarele :

Activity_main.xml și Activity_main2.xml

Reprezintă interfața activității principale ale aplicației. Primul este folosit pentru administrator și afișează lista de angajați, cât și interfața prin care se adaugă angajați noi în listă; al doilea este folosit pentru utilizatorul obișnuit, non-administrator, și afișează doar lista de angajați;

Activity_login.xml

Reprezintă interfața ecranului de login al aplicației;

Listview_item.xml

Constituie interfața modului în care este afișat fiecare angajat în lista de angajați.

Fiecare angajat este afișat ca o „carte de joc”, cu poza angajatului, peste care se află informațiile scrise despre acesta : Numele și Prenumele, Adresa, Numărul de Telefon, Adresa de E-mail, Numărul Angajatului, precum și Rangul (Funcția) acestuia.

În momentul deschiderii aplicației, suntem întâmpinați de ecranul de login :

Aici trebuie să introducem numele de utilizator și parola pentru a putea accesa aplicația propriu-zisă, adică lista de angajați și interfața prin care adăugăm angajați noi în listă.

Dacă dorim să avem acces la amândouă dintre acestea, trebuie să ne logăm cu numele de utilizator și parola contului de administrator (admin și 1234), altfel ne putem loga cu orice nume de utilizator și parolă, însă vom avea acces doar la lista de angajați, neputând face modificări acesteia.

Dacă ne logăm cu contul de administrator (numele de utilizator admin și parola 1234), vom fi întâmpinați de următorul ecran :

Deoarece în listă nu a fost adăugat niciun angajat, lista este goală. Să rezolvăm această problemă. Să apăsăm pe tabul unde scrie “ADAUGARE ANGAJATI”. Vom fi întâmpinați de acest ecran :

Aici putem introduce datele angajatului pe care-l dorim adăuga în lista de angajați.

Pentru a adăuga un angajat în listă, facem următoarele : Selectăm o poză pentru angajat, apăsând pe silueta gri. Va apărea un ecran care ne permite să alegem și să folosim o poză din memoria telefonului drept poză pentru angajat.Pentru a introduce date text în fiecare dintre câmpurile text (Nume, Adresă, etc.), apăsăm pe acestea.

După ce adăugăm datele angajatului, ecranul va arăta așa :

Tot ce mai rămâne de făcut este să apăsăm pe butonul rotund, roz, cu un plus alb pe el, din partea de jos a ecranului, și datele angajatului o să fie adăugate în listă.

Ca să revenim la lista de angajați, apăsăm pe tab-ul unde scrie “LISTA DE ANGAJATI”. Lista de angajați va arăta așa după ce adăugăm câțiva angajați în aceasta :

Lista este de tipul scroll, deci putem mișca degetul pe ecran în sus și în jos pentru a vizualiza datele fiecărui angajat.

Cum am menționat mai sus, mai devreme ne-am logat cu contul de administrator. Dacă ne logăm cu orice alt nume de utilizator, vom avea acces doar la lista de angajați, neputând face modificări acesteia, tab-ul pentru adăugat angajați în listă neexistând :

În concluzie, aplicația are utilitate deoarece ne permite să vizualizăm datele angajaților și să adăugam datele noilor angajați în aceeași listă cu ușurință.

ANEXE

ANEXA NR. 1 – Secvențe din codul sursă

JAVA

MainActivity.class :

package com.vladsapps.employeesmanager;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ActionBarActivity {
EditText nameTxt, phoneTxt, emailTxt, addressTxt, employeeIdTxt, employeeRankTxt;
ImageView employeeImageImgView;
List<Employee> Employees = new ArrayList<Employee>();
ListView employeeListView;
Uri imageUri = Uri.parse("android.resource://com.vladsapps.employeesmanager/drawable/no_user_logo.png");
DatabaseHandler dbHandler;

private Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

nameTxt = (EditText) findViewById(R.id.txtName);
phoneTxt = (EditText) findViewById(R.id.txtPhone);
emailTxt = (EditText) findViewById(R.id.txtEmail);
addressTxt = (EditText) findViewById(R.id.txtAddress);
employeeIdTxt = (EditText) findViewById(R.id.txtEmployeeId);
employeeRankTxt = (EditText) findViewById(R.id.txtEmployeeRank);
employeeListView = (ListView) findViewById(R.id.listView);
employeeImageImgView = (ImageView) findViewById(R.id.imgViewEmployeeImage);
dbHandler = new DatabaseHandler(getApplicationContext());

TabHost tabHost = (TabHost) findViewById(R.id.tabHost);

tabHost.setup();

TabHost.TabSpec tabSpec = tabHost.newTabSpec("list");
tabSpec.setContent(R.id.tabEmployeeList);
tabSpec.setIndicator("Lista de angajati");
tabHost.addTab(tabSpec);

tabSpec = tabHost.newTabSpec("creator");
tabSpec.setContent(R.id.tabCreator);
tabSpec.setIndicator("Adaugare angajati");
tabHost.addTab(tabSpec);

for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(getResources().getColor(R.color.tabtextcolor));
}

final ImageButton addBtn = (ImageButton) findViewById(R.id.btnAdd);

addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Employee employee = new Employee(dbHandler.getEmployeesCount(), String.valueOf(nameTxt.getText()), String.valueOf(phoneTxt.getText()), String.valueOf(emailTxt.getText()), String.valueOf(addressTxt.getText()), String.valueOf(employeeIdTxt.getText()), String.valueOf(employeeRankTxt.getText()), imageUri);
if (!employeeExists(employee)) {
dbHandler.createEmployee(employee);
Employees.add(employee);
Toast.makeText(getApplicationContext(), "Angajatul cu numele " + String.valueOf(nameTxt.getText()) + " a fost adaugat in lista!", Toast.LENGTH_SHORT).show();
nameTxt.setText("");
phoneTxt.setText("");
emailTxt.setText("");
addressTxt.setText("");
employeeIdTxt.setText("");
employeeRankTxt.setText("");
imageUri = Uri.parse("android.resource://com.vladsapps.employeesmanager/drawable/no_user_logo.png");
return;
}
Toast.makeText(getApplicationContext(), "Angajatul cu numele " + String.valueOf(nameTxt.getText()) + " exista deja in lista. Va rugam sa introduceti alt nume.", Toast.LENGTH_LONG).show();
}
});

nameTxt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
addBtn.setEnabled(String.valueOf(nameTxt.getText()).trim().length() > 0);
}

@Override
public void afterTextChanged(Editable editable) {

}
});

employeeImageImgView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Selectati poza angajatului"), 1);
}

});

if (dbHandler.getEmployeesCount() != 0)
Employees.addAll(dbHandler.getAllEmployees());

toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);

populateList();

}

private void populateList()
{
ArrayAdapter<Employee> adapter = new EmployeeListAdapter();
employeeListView.setAdapter(adapter);
}

private boolean employeeExists(Employee employee) {
String name = employee.getName();
int employeeCount = Employees.size();
for (int i = 0; i < employeeCount; i++) {
if (name.compareToIgnoreCase(Employees.get(i).getName()) == 0)
return true;
}
return false;
}

public void onActivityResult(int reqCode, int resCode, Intent data) {
super.onActivityResult(reqCode, resCode, data);
if (reqCode == 1)
if (resCode == RESULT_OK) {
imageUri = data.getData();
employeeImageImgView.setImageURI(data.getData());
}
}

private class EmployeeListAdapter extends ArrayAdapter<Employee> {
public EmployeeListAdapter() {
super (MainActivity.this, R.layout.listview_item, Employees);
}

@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null)
view = getLayoutInflater().inflate(R.layout.listview_item, parent, false);

Employee currentEmployee = Employees.get(position);

TextView name = (TextView) view.findViewById(R.id.employeeName);
name.setText(currentEmployee.getName());
TextView phone = (TextView) view.findViewById(R.id.phoneNumber);
phone.setText(currentEmployee.getPhone());
TextView email = (TextView) view.findViewById(R.id.emailAddress);
email.setText(currentEmployee.getEmail());
TextView address = (TextView) view.findViewById(R.id.cAddress);
address.setText(currentEmployee.getAddress());
TextView employeeid = (TextView) view.findViewById(R.id.employeeid);
employeeid.setText(currentEmployee.getEmployeeId());
TextView employeerank = (TextView) view.findViewById(R.id.employeerank);
employeerank.setText(currentEmployee.getEmployeeRank());
ImageView ivEmployeeImage = (ImageView) view.findViewById(R.id.ivEmployeeImage);
ivEmployeeImage.setImageURI(currentEmployee.getImageURI());

return view;
}

}

}

MainActivity2.class :

package com.vladsapps.employeesmanager;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity2 extends ActionBarActivity {
EditText nameTxt, phoneTxt, emailTxt, addressTxt, employeeIdTxt, employeeRankTxt;
ImageView employeeImageImgView;
List<Employee> Employees = new ArrayList<Employee>();
ListView employeeListView;
Uri imageUri = Uri.parse("android.resource://com.vladsapps.employeesmanager/drawable/no_user_logo.png");
DatabaseHandler dbHandler;

private Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

nameTxt = (EditText) findViewById(R.id.txtName);
phoneTxt = (EditText) findViewById(R.id.txtPhone);
emailTxt = (EditText) findViewById(R.id.txtEmail);
addressTxt = (EditText) findViewById(R.id.txtAddress);
employeeIdTxt = (EditText) findViewById(R.id.txtEmployeeId);
employeeRankTxt = (EditText) findViewById(R.id.txtEmployeeRank);
employeeListView = (ListView) findViewById(R.id.listView);
employeeImageImgView = (ImageView) findViewById(R.id.imgViewEmployeeImage);
dbHandler = new DatabaseHandler(getApplicationContext());

TabHost tabHost = (TabHost) findViewById(R.id.tabHost);

tabHost.setup();

TabHost.TabSpec tabSpec = tabHost.newTabSpec("list");
tabSpec.setContent(R.id.tabEmployeeList);
tabSpec.setIndicator("Lista de angajati");
tabHost.addTab(tabSpec);

for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(getResources().getColor(R.color.tabtextcolor));
}

if (dbHandler.getEmployeesCount() != 0)
Employees.addAll(dbHandler.getAllEmployees());

toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);

populateList();

}

private void populateList()
{
ArrayAdapter<Employee> adapter = new EmployeeListAdapter();
employeeListView.setAdapter(adapter);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

return super.onOptionsItemSelected(item);
}

public void onActivityResult(int reqCode, int resCode, Intent data) {
super.onActivityResult(reqCode, resCode, data);
if (reqCode == 1)
if (resCode == RESULT_OK) {
imageUri = data.getData();
employeeImageImgView.setImageURI(data.getData());
}
}

private class EmployeeListAdapter extends ArrayAdapter<Employee> {
public EmployeeListAdapter() {
super (MainActivity2.this, R.layout.listview_item, Employees);
}

@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null)
view = getLayoutInflater().inflate(R.layout.listview_item, parent, false);

Employee currentEmployee = Employees.get(position);

TextView name = (TextView) view.findViewById(R.id.employeeName);
name.setText(currentEmployee.getName());
TextView phone = (TextView) view.findViewById(R.id.phoneNumber);
phone.setText(currentEmployee.getPhone());
TextView email = (TextView) view.findViewById(R.id.emailAddress);
email.setText(currentEmployee.getEmail());
TextView address = (TextView) view.findViewById(R.id.cAddress);
address.setText(currentEmployee.getAddress());
TextView employeeid = (TextView) view.findViewById(R.id.employeeid);
employeeid.setText(currentEmployee.getEmployeeId());
TextView employeerank = (TextView) view.findViewById(R.id.employeerank);
employeerank.setText(currentEmployee.getEmployeeRank());
ImageView ivEmployeeImage = (ImageView) view.findViewById(R.id.ivEmployeeImage);
ivEmployeeImage.setImageURI(currentEmployee.getImageURI());

return view;
}

}

}

LoginActivity.class :

package com.vladsapps.employeesmanager;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends MainActivity {

private EditText etUsername;
private EditText etPassword;
private Button btnLogin;
private Button btnCancel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

etUsername = (EditText)findViewById(R.id.username);
etPassword = (EditText)findViewById(R.id.password);
btnLogin = (Button)findViewById(R.id.login_enter);
btnCancel = (Button)findViewById(R.id.exit_app);

btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Verificarea datelor de logare
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();

if(username.equalsIgnoreCase("ADMIN") && password.equals("1234")) {
Intent loginIntent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(loginIntent);
Toast.makeText(getApplicationContext(), "Bun venit, " + String.valueOf(etUsername.getText()) + "!", Toast.LENGTH_LONG).show();
}
else {
if(username.equalsIgnoreCase("ADMIN") && !password.equals("1234")) {
Toast.makeText(getApplicationContext(), "Parola pentru utilizatorul " + String.valueOf(etUsername.getText()) + " este incorecta. Va rugam sa verificati parola.", Toast.LENGTH_LONG).show();
}
if(!username.equalsIgnoreCase("ADMIN")) {
Intent loginIntent = new Intent(LoginActivity.this, MainActivity2.class);
startActivity(loginIntent);
Toast.makeText(getApplicationContext(), "Bun venit, " + String.valueOf(etUsername.getText()) + "!", Toast.LENGTH_LONG).show();
}
}
}
});

btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}}

Employee.class

package com.vladsapps.employeesmanager;

import android.net.Uri;

public class Employee {

private String _name, _phone, _email, _address, _employeeid, _employeerank;
private Uri _imageURI;
private int _id;

public Employee (int id, String name, String phone, String email, String address, String employeeid, String employeerank, Uri imageURI) {
_id = id;
_name = name;
_phone = phone;
_email = email;
_address = address;
_imageURI = imageURI;
_employeeid = employeeid;
_employeerank = employeerank;
}

public int getId() { return _id; }

public String getName() {
return _name;
}

public String getPhone() {
return _phone;
}

public String getEmail() {
return _email;
}

public String getAddress() {
return _address;
}

public String getEmployeeId() { return _employeeid; }

public String getEmployeeRank() { return _employeerank; }

public Uri getImageURI() { return _imageURI; }
}

DatabaseHandler.class :

package com.vladsapps.employeesmanager;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;

import java.util.ArrayList;
import java.util.List;

public class DatabaseHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;

private static final String DATABASE_NAME = "employeeManager",
TABLE_EMPLOYEES = "employees",
KEY_ID = "id",
KEY_NAME = "name",
KEY_PHONE = "phone",
KEY_EMAIL = "email",
KEY_ADDRESS = "address",
KEY_EMPLOYEEID = "employeeid",
KEY_EMPLOYEERANK = "employeerank",
KEY_IMAGEURI = "imageUri";

public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_EMPLOYEES + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT," + KEY_PHONE + " TEXT," + KEY_EMAIL + " TEXT," + KEY_ADDRESS + " TEXT," + KEY_EMPLOYEEID + " TEXT," + KEY_EMPLOYEERANK + " TEXT," + KEY_IMAGEURI + " TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_EMPLOYEES);

onCreate(db);
}

public void createEmployee(Employee employee) {
SQLiteDatabase db = getWritableDatabase();

ContentValues values = new ContentValues();

values.put(KEY_NAME, employee.getName());
values.put(KEY_PHONE, employee.getPhone());
values.put(KEY_EMAIL, employee.getEmail());
values.put(KEY_ADDRESS, employee.getAddress());
values.put(KEY_EMPLOYEEID, employee.getEmployeeId());
values.put(KEY_EMPLOYEERANK, employee.getEmployeeRank());
values.put(KEY_IMAGEURI, employee.getImageURI().toString());

db.insert(TABLE_EMPLOYEES, null, values);
db.close();
}

public Employee getEmployee(int id) {
SQLiteDatabase db = getReadableDatabase();

Cursor cursor = db.query(TABLE_EMPLOYEES, new String[] { KEY_ID, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS, KEY_EMPLOYEEID, KEY_EMPLOYEERANK, KEY_IMAGEURI }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);

if (cursor != null)
cursor.moveToFirst();

Employee employee = new Employee(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), Uri.parse(cursor.getString(7)));
db.close();
cursor.close();
return employee;
}

public void deleteEmployee(Employee employee) {
SQLiteDatabase db = getWritableDatabase();
db.delete(TABLE_EMPLOYEES, KEY_ID + "=?", new String[] { String.valueOf(employee.getId()) });
db.close();
}

public int getEmployeesCount() {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_EMPLOYEES, null);
int count = cursor.getCount();
db.close();
cursor.close();

return count;
}

public int updateEmployee(Employee employee) {
SQLiteDatabase db = getWritableDatabase();

ContentValues values = new ContentValues();

values.put(KEY_NAME, employee.getName());
values.put(KEY_PHONE, employee.getPhone());
values.put(KEY_EMAIL, employee.getEmail());
values.put(KEY_ADDRESS, employee.getAddress());
values.put(KEY_EMPLOYEEID, employee.getEmployeeId());
values.put(KEY_EMPLOYEERANK, employee.getEmployeeRank());
values.put(KEY_IMAGEURI, employee.getImageURI().toString());

int rowsAffected = db.update(TABLE_EMPLOYEES, values, KEY_ID + "=?", new String[] { String.valueOf(employee.getId()) });
db.close();

return rowsAffected;
}

public List<Employee> getAllEmployees() {
List<Employee> employees = new ArrayList<Employee>();

SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_EMPLOYEES, null);

if (cursor.moveToFirst()) {
do {
employees.add(new Employee(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), Uri.parse(cursor.getString(7))));
}
while (cursor.moveToNext());
}
cursor.close();
db.close();
return employees;
}
}

XML

Activity_login.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:background="#ffebebeb">

<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:padding="16dp"
tools:context="com.vladsapps.employeesmanager.LoginActivity">

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/welcometitle"
android:text="Angajați"
android:textSize="24dp"
android:gravity="center_horizontal"
android:layout_marginBottom="96dp"/>

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/welcomebox"
android:text="Vă rugăm să vă logați pentru a avea acces la aplicație."
android:layout_below="@id/welcometitle"
android:paddingLeft="2dp"
android:textSize="16dp"
android:gravity="center"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/username"
android:layout_marginTop="32dp"
android:hint="Utilizator"
android:textColorHighlight="#FB8C00"
android:layout_below="@+id/welcomebox"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/password"
android:layout_marginTop="20dp"
android:hint="Parolă"
android:layout_below="@+id/username"
android:textColorHighlight="#FB8C00"/>

<Button
android:id="@+id/login_enter"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="#ffcecece"
android:text="Logare"
android:layout_below="@+id/password"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"/>

<Button
android:id="@+id/exit_app"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="#ffcecece"
android:text="Ieșire"
android:layout_below="@+id/login_enter"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/versionnumber"
android:text="v1.03 – Test"
android:textSize="14dp"
android:gravity="end|bottom"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" />

</RelativeLayout>
</LinearLayout>

Activity_main.xml :

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffebebeb">

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.vladsapps.employeesmanager.MainActivity">

<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />

<TabHost
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tabHost"
android:layout_below="@id/app_bar"
android:layout_gravity="center_vertical">

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
android:showDividers="none" >
</TabWidget>

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<LinearLayout
android:id="@+id/tabEmployeeList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView"
android:layout_gravity="center"/>

<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listView"
android:layout_gravity="center"
android:divider="#ffebebeb"
android:dividerHeight="-4dp"
android:isScrollContainer="true"/>
</LinearLayout>

<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/tabCreator"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/lblCreatorTitle"
android:layout_gravity="center"
android:layout_marginTop="10dp"/>

<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:id="@+id/imgViewEmployeeImage"
android:layout_gravity="center|center_horizontal"
android:layout_marginTop="10dp"
android:src="@drawable/no_user_logo"
android:contentDescription="Employee Photo"
android:layout_below="@id/lblCreatorTitle"
android:layout_centerHorizontal="true"
android:layout_centerInParent="false"
android:scaleType="centerCrop"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/txtName"
android:layout_marginTop="20dp"
android:hint="Numele și prenumele"
android:layout_below="@+id/imgViewEmployeeImage"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:ems="10"
android:id="@+id/txtPhone"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Număr de telefon"
android:layout_below="@+id/txtName"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/txtEmail"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Adresă de e-mail"
android:inputType="textEmailAddress"
android:layout_below="@+id/txtPhone"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/txtAddress"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Adresă domiciliu"
android:inputType="textPostalAddress"
android:layout_below="@+id/txtEmail"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/txtEmployeeId"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Număr angajat"
android:inputType="text"
android:layout_below="@+id/txtAddress"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/txtEmployeeRank"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Funcție/Rang"
android:inputType="text"
android:layout_below="@+id/txtEmployeeId"/>

<ImageButton
android:id="@+id/btnAdd"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="end|bottom"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:background="@drawable/oval_ripple"
android:elevation="1dp"
android:src="@android:drawable/ic_input_add"
android:stateListAnimator="@anim/button_elevation"
android:tint="@android:color/white"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
tools:ignore="RtlCompat"/>
</RelativeLayout>
</ScrollView>
</FrameLayout>
</LinearLayout>
</TabHost>

</RelativeLayout>

<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.vladsapps.employeesmanager.NavigationDrawerFragment"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>

Activity_main2.xml :

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.vladsapps.employeesmanager.MainActivity2">

<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />

<TabHost
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tabHost"
android:layout_below="@id/app_bar"
android:layout_gravity="center_vertical">

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
android:showDividers="none" >
</TabWidget>

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<LinearLayout
android:id="@+id/tabEmployeeList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView"
android:layout_gravity="center"/>

<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listView"
android:layout_gravity="center"
android:divider="#ffebebeb"
android:dividerHeight="-4dp"
android:isScrollContainer="true"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>

</RelativeLayout>

<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.vladsapps.employeesmanager.NavigationDrawerFragment"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>

Listview_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="6dp"
card_view:cardBackgroundColor="#ffebebeb"
card_view:cardElevation="6dp"
card_view:cardUseCompatPadding="true"
card_view:contentPadding="-12dp"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">

<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:padding="4dp"
android:background="#ffebebeb">

<ImageView
android:id="@+id/ivEmployeeImage"
android:layout_width="fill_parent"
android:scaleType="centerCrop"
android:layout_height="450dp"
android:contentDescription="Photo"/>

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="200dp"
android:background="#7fffffff"
android:layout_gravity="bottom"
android:layout_alignParentBottom="true">

<TextView
android:id="@+id/employeeName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Employee's Name"
android:textSize="24dp"
android:textStyle="bold"
android:gravity="center_horizontal"/>

<TextView
android:id="@+id/employeerank"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Employee Rank"
android:textSize="16dp"
android:layout_below="@+id/employeeName"
android:paddingTop="4dp"
android:textStyle="bold"/>

<TextView
android:id="@+id/phoneNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Phone Number"
android:textSize="16dp"
android:layout_below="@+id/employeerank"
android:paddingTop="12dp"/>

<TextView
android:id="@+id/emailAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="E-mail Address"
android:textSize="16dp"
android:layout_below="@+id/phoneNumber"
android:paddingTop="4dp"/>

<TextView
android:id="@+id/cAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Home Address"
android:textSize="16dp"
android:layout_below="@+id/emailAddress"
android:gravity="center_horizontal"
android:paddingTop="4dp"/>

<TextView
android:id="@+id/employeeid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Employee ID"
android:textSize="16dp"
android:layout_below="@+id/cAddress"
android:paddingTop="4dp"/>

</RelativeLayout>
</FrameLayout>
</android.support.v7.widget.CardView>

BIBLIOGRAFIE

Cornelia Botezatu – Proiectarea sistemelor informatice. Metode sistemice. Editura ProUniversitaria, Buc, 2007

Virgil Chichernea, G.Garais – Baze de date. Sistemul FoxPro vol.II, Editura

Prouniversitaria, 2006

M. Moise – Sisteme informatice cu baze de date, Editura Pro-Universitaria,

București, 2008

Daniela Crisan – Limbajul C / C++. Fundamente, Vol. 1, Editura

PROUNIVERSITARIA, 2006

Daniela Crisan – Limbajul C / C++. Programare orientata obiect, Vol.2, Editura UNIVERSITARA, 2006

Botezatu Cezar, George Căruțașu, Doru Chetrariu – Arhitectura calculatoarelor personale și sisteme de operare specifice, Editura Universul Juridic, București, 2005

Ionel Iacob SGBD Oracle – Ghid aplicativ pentru realizarea

solutiilor informatice, Editura ProUniversitaria, 2007, pag 11-195

Ionel Iacob ORACLE 10g – Proiectarea și realizarea aplicațiilor cu

baze de date utilizând limbajul SQL*PLUS, Ed. ProUniversitaria 2009

Smeureanu, I. Ivan, M. Dârdală – Structuri și obiecte în C/C++, Ed. CISON, București, 2000, pag. 8-40, 72-127

I. Mușlea – C/C++ pentru avansați, Ed. Microinformatica, Cluj,

1995, pag. 9-150

Site-uri :

http://floresor.blogspot.ro/2011/10/registre-obligatorii-srl.html

http://www.scrigroup.com/management/marketing/Prezentarea-generala-a-firmei-81664.php

http://en.wikipedia.org/wiki/Android_Studio

http://www.github.com/

BIBLIOGRAFIE

Cornelia Botezatu – Proiectarea sistemelor informatice. Metode sistemice. Editura ProUniversitaria, Buc, 2007

Virgil Chichernea, G.Garais – Baze de date. Sistemul FoxPro vol.II, Editura

Prouniversitaria, 2006

M. Moise – Sisteme informatice cu baze de date, Editura Pro-Universitaria,

București, 2008

Daniela Crisan – Limbajul C / C++. Fundamente, Vol. 1, Editura

PROUNIVERSITARIA, 2006

Daniela Crisan – Limbajul C / C++. Programare orientata obiect, Vol.2, Editura UNIVERSITARA, 2006

Botezatu Cezar, George Căruțașu, Doru Chetrariu – Arhitectura calculatoarelor personale și sisteme de operare specifice, Editura Universul Juridic, București, 2005

Ionel Iacob SGBD Oracle – Ghid aplicativ pentru realizarea

solutiilor informatice, Editura ProUniversitaria, 2007, pag 11-195

Ionel Iacob ORACLE 10g – Proiectarea și realizarea aplicațiilor cu

baze de date utilizând limbajul SQL*PLUS, Ed. ProUniversitaria 2009

Smeureanu, I. Ivan, M. Dârdală – Structuri și obiecte în C/C++, Ed. CISON, București, 2000, pag. 8-40, 72-127

I. Mușlea – C/C++ pentru avansați, Ed. Microinformatica, Cluj,

1995, pag. 9-150

Site-uri :

http://floresor.blogspot.ro/2011/10/registre-obligatorii-srl.html

http://www.scrigroup.com/management/marketing/Prezentarea-generala-a-firmei-81664.php

http://en.wikipedia.org/wiki/Android_Studio

http://www.github.com/

ANEXE

ANEXA NR. 1 – Secvențe din codul sursă

JAVA

MainActivity.class :

package com.vladsapps.employeesmanager;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ActionBarActivity {
EditText nameTxt, phoneTxt, emailTxt, addressTxt, employeeIdTxt, employeeRankTxt;
ImageView employeeImageImgView;
List<Employee> Employees = new ArrayList<Employee>();
ListView employeeListView;
Uri imageUri = Uri.parse("android.resource://com.vladsapps.employeesmanager/drawable/no_user_logo.png");
DatabaseHandler dbHandler;

private Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

nameTxt = (EditText) findViewById(R.id.txtName);
phoneTxt = (EditText) findViewById(R.id.txtPhone);
emailTxt = (EditText) findViewById(R.id.txtEmail);
addressTxt = (EditText) findViewById(R.id.txtAddress);
employeeIdTxt = (EditText) findViewById(R.id.txtEmployeeId);
employeeRankTxt = (EditText) findViewById(R.id.txtEmployeeRank);
employeeListView = (ListView) findViewById(R.id.listView);
employeeImageImgView = (ImageView) findViewById(R.id.imgViewEmployeeImage);
dbHandler = new DatabaseHandler(getApplicationContext());

TabHost tabHost = (TabHost) findViewById(R.id.tabHost);

tabHost.setup();

TabHost.TabSpec tabSpec = tabHost.newTabSpec("list");
tabSpec.setContent(R.id.tabEmployeeList);
tabSpec.setIndicator("Lista de angajati");
tabHost.addTab(tabSpec);

tabSpec = tabHost.newTabSpec("creator");
tabSpec.setContent(R.id.tabCreator);
tabSpec.setIndicator("Adaugare angajati");
tabHost.addTab(tabSpec);

for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(getResources().getColor(R.color.tabtextcolor));
}

final ImageButton addBtn = (ImageButton) findViewById(R.id.btnAdd);

addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Employee employee = new Employee(dbHandler.getEmployeesCount(), String.valueOf(nameTxt.getText()), String.valueOf(phoneTxt.getText()), String.valueOf(emailTxt.getText()), String.valueOf(addressTxt.getText()), String.valueOf(employeeIdTxt.getText()), String.valueOf(employeeRankTxt.getText()), imageUri);
if (!employeeExists(employee)) {
dbHandler.createEmployee(employee);
Employees.add(employee);
Toast.makeText(getApplicationContext(), "Angajatul cu numele " + String.valueOf(nameTxt.getText()) + " a fost adaugat in lista!", Toast.LENGTH_SHORT).show();
nameTxt.setText("");
phoneTxt.setText("");
emailTxt.setText("");
addressTxt.setText("");
employeeIdTxt.setText("");
employeeRankTxt.setText("");
imageUri = Uri.parse("android.resource://com.vladsapps.employeesmanager/drawable/no_user_logo.png");
return;
}
Toast.makeText(getApplicationContext(), "Angajatul cu numele " + String.valueOf(nameTxt.getText()) + " exista deja in lista. Va rugam sa introduceti alt nume.", Toast.LENGTH_LONG).show();
}
});

nameTxt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
addBtn.setEnabled(String.valueOf(nameTxt.getText()).trim().length() > 0);
}

@Override
public void afterTextChanged(Editable editable) {

}
});

employeeImageImgView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Selectati poza angajatului"), 1);
}

});

if (dbHandler.getEmployeesCount() != 0)
Employees.addAll(dbHandler.getAllEmployees());

toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);

populateList();

}

private void populateList()
{
ArrayAdapter<Employee> adapter = new EmployeeListAdapter();
employeeListView.setAdapter(adapter);
}

private boolean employeeExists(Employee employee) {
String name = employee.getName();
int employeeCount = Employees.size();
for (int i = 0; i < employeeCount; i++) {
if (name.compareToIgnoreCase(Employees.get(i).getName()) == 0)
return true;
}
return false;
}

public void onActivityResult(int reqCode, int resCode, Intent data) {
super.onActivityResult(reqCode, resCode, data);
if (reqCode == 1)
if (resCode == RESULT_OK) {
imageUri = data.getData();
employeeImageImgView.setImageURI(data.getData());
}
}

private class EmployeeListAdapter extends ArrayAdapter<Employee> {
public EmployeeListAdapter() {
super (MainActivity.this, R.layout.listview_item, Employees);
}

@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null)
view = getLayoutInflater().inflate(R.layout.listview_item, parent, false);

Employee currentEmployee = Employees.get(position);

TextView name = (TextView) view.findViewById(R.id.employeeName);
name.setText(currentEmployee.getName());
TextView phone = (TextView) view.findViewById(R.id.phoneNumber);
phone.setText(currentEmployee.getPhone());
TextView email = (TextView) view.findViewById(R.id.emailAddress);
email.setText(currentEmployee.getEmail());
TextView address = (TextView) view.findViewById(R.id.cAddress);
address.setText(currentEmployee.getAddress());
TextView employeeid = (TextView) view.findViewById(R.id.employeeid);
employeeid.setText(currentEmployee.getEmployeeId());
TextView employeerank = (TextView) view.findViewById(R.id.employeerank);
employeerank.setText(currentEmployee.getEmployeeRank());
ImageView ivEmployeeImage = (ImageView) view.findViewById(R.id.ivEmployeeImage);
ivEmployeeImage.setImageURI(currentEmployee.getImageURI());

return view;
}

}

}

MainActivity2.class :

package com.vladsapps.employeesmanager;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity2 extends ActionBarActivity {
EditText nameTxt, phoneTxt, emailTxt, addressTxt, employeeIdTxt, employeeRankTxt;
ImageView employeeImageImgView;
List<Employee> Employees = new ArrayList<Employee>();
ListView employeeListView;
Uri imageUri = Uri.parse("android.resource://com.vladsapps.employeesmanager/drawable/no_user_logo.png");
DatabaseHandler dbHandler;

private Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

nameTxt = (EditText) findViewById(R.id.txtName);
phoneTxt = (EditText) findViewById(R.id.txtPhone);
emailTxt = (EditText) findViewById(R.id.txtEmail);
addressTxt = (EditText) findViewById(R.id.txtAddress);
employeeIdTxt = (EditText) findViewById(R.id.txtEmployeeId);
employeeRankTxt = (EditText) findViewById(R.id.txtEmployeeRank);
employeeListView = (ListView) findViewById(R.id.listView);
employeeImageImgView = (ImageView) findViewById(R.id.imgViewEmployeeImage);
dbHandler = new DatabaseHandler(getApplicationContext());

TabHost tabHost = (TabHost) findViewById(R.id.tabHost);

tabHost.setup();

TabHost.TabSpec tabSpec = tabHost.newTabSpec("list");
tabSpec.setContent(R.id.tabEmployeeList);
tabSpec.setIndicator("Lista de angajati");
tabHost.addTab(tabSpec);

for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(getResources().getColor(R.color.tabtextcolor));
}

if (dbHandler.getEmployeesCount() != 0)
Employees.addAll(dbHandler.getAllEmployees());

toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);

populateList();

}

private void populateList()
{
ArrayAdapter<Employee> adapter = new EmployeeListAdapter();
employeeListView.setAdapter(adapter);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

return super.onOptionsItemSelected(item);
}

public void onActivityResult(int reqCode, int resCode, Intent data) {
super.onActivityResult(reqCode, resCode, data);
if (reqCode == 1)
if (resCode == RESULT_OK) {
imageUri = data.getData();
employeeImageImgView.setImageURI(data.getData());
}
}

private class EmployeeListAdapter extends ArrayAdapter<Employee> {
public EmployeeListAdapter() {
super (MainActivity2.this, R.layout.listview_item, Employees);
}

@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null)
view = getLayoutInflater().inflate(R.layout.listview_item, parent, false);

Employee currentEmployee = Employees.get(position);

TextView name = (TextView) view.findViewById(R.id.employeeName);
name.setText(currentEmployee.getName());
TextView phone = (TextView) view.findViewById(R.id.phoneNumber);
phone.setText(currentEmployee.getPhone());
TextView email = (TextView) view.findViewById(R.id.emailAddress);
email.setText(currentEmployee.getEmail());
TextView address = (TextView) view.findViewById(R.id.cAddress);
address.setText(currentEmployee.getAddress());
TextView employeeid = (TextView) view.findViewById(R.id.employeeid);
employeeid.setText(currentEmployee.getEmployeeId());
TextView employeerank = (TextView) view.findViewById(R.id.employeerank);
employeerank.setText(currentEmployee.getEmployeeRank());
ImageView ivEmployeeImage = (ImageView) view.findViewById(R.id.ivEmployeeImage);
ivEmployeeImage.setImageURI(currentEmployee.getImageURI());

return view;
}

}

}

LoginActivity.class :

package com.vladsapps.employeesmanager;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends MainActivity {

private EditText etUsername;
private EditText etPassword;
private Button btnLogin;
private Button btnCancel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

etUsername = (EditText)findViewById(R.id.username);
etPassword = (EditText)findViewById(R.id.password);
btnLogin = (Button)findViewById(R.id.login_enter);
btnCancel = (Button)findViewById(R.id.exit_app);

btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Verificarea datelor de logare
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();

if(username.equalsIgnoreCase("ADMIN") && password.equals("1234")) {
Intent loginIntent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(loginIntent);
Toast.makeText(getApplicationContext(), "Bun venit, " + String.valueOf(etUsername.getText()) + "!", Toast.LENGTH_LONG).show();
}
else {
if(username.equalsIgnoreCase("ADMIN") && !password.equals("1234")) {
Toast.makeText(getApplicationContext(), "Parola pentru utilizatorul " + String.valueOf(etUsername.getText()) + " este incorecta. Va rugam sa verificati parola.", Toast.LENGTH_LONG).show();
}
if(!username.equalsIgnoreCase("ADMIN")) {
Intent loginIntent = new Intent(LoginActivity.this, MainActivity2.class);
startActivity(loginIntent);
Toast.makeText(getApplicationContext(), "Bun venit, " + String.valueOf(etUsername.getText()) + "!", Toast.LENGTH_LONG).show();
}
}
}
});

btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}}

Employee.class

package com.vladsapps.employeesmanager;

import android.net.Uri;

public class Employee {

private String _name, _phone, _email, _address, _employeeid, _employeerank;
private Uri _imageURI;
private int _id;

public Employee (int id, String name, String phone, String email, String address, String employeeid, String employeerank, Uri imageURI) {
_id = id;
_name = name;
_phone = phone;
_email = email;
_address = address;
_imageURI = imageURI;
_employeeid = employeeid;
_employeerank = employeerank;
}

public int getId() { return _id; }

public String getName() {
return _name;
}

public String getPhone() {
return _phone;
}

public String getEmail() {
return _email;
}

public String getAddress() {
return _address;
}

public String getEmployeeId() { return _employeeid; }

public String getEmployeeRank() { return _employeerank; }

public Uri getImageURI() { return _imageURI; }
}

DatabaseHandler.class :

package com.vladsapps.employeesmanager;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;

import java.util.ArrayList;
import java.util.List;

public class DatabaseHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;

private static final String DATABASE_NAME = "employeeManager",
TABLE_EMPLOYEES = "employees",
KEY_ID = "id",
KEY_NAME = "name",
KEY_PHONE = "phone",
KEY_EMAIL = "email",
KEY_ADDRESS = "address",
KEY_EMPLOYEEID = "employeeid",
KEY_EMPLOYEERANK = "employeerank",
KEY_IMAGEURI = "imageUri";

public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_EMPLOYEES + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT," + KEY_PHONE + " TEXT," + KEY_EMAIL + " TEXT," + KEY_ADDRESS + " TEXT," + KEY_EMPLOYEEID + " TEXT," + KEY_EMPLOYEERANK + " TEXT," + KEY_IMAGEURI + " TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_EMPLOYEES);

onCreate(db);
}

public void createEmployee(Employee employee) {
SQLiteDatabase db = getWritableDatabase();

ContentValues values = new ContentValues();

values.put(KEY_NAME, employee.getName());
values.put(KEY_PHONE, employee.getPhone());
values.put(KEY_EMAIL, employee.getEmail());
values.put(KEY_ADDRESS, employee.getAddress());
values.put(KEY_EMPLOYEEID, employee.getEmployeeId());
values.put(KEY_EMPLOYEERANK, employee.getEmployeeRank());
values.put(KEY_IMAGEURI, employee.getImageURI().toString());

db.insert(TABLE_EMPLOYEES, null, values);
db.close();
}

public Employee getEmployee(int id) {
SQLiteDatabase db = getReadableDatabase();

Cursor cursor = db.query(TABLE_EMPLOYEES, new String[] { KEY_ID, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS, KEY_EMPLOYEEID, KEY_EMPLOYEERANK, KEY_IMAGEURI }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);

if (cursor != null)
cursor.moveToFirst();

Employee employee = new Employee(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), Uri.parse(cursor.getString(7)));
db.close();
cursor.close();
return employee;
}

public void deleteEmployee(Employee employee) {
SQLiteDatabase db = getWritableDatabase();
db.delete(TABLE_EMPLOYEES, KEY_ID + "=?", new String[] { String.valueOf(employee.getId()) });
db.close();
}

public int getEmployeesCount() {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_EMPLOYEES, null);
int count = cursor.getCount();
db.close();
cursor.close();

return count;
}

public int updateEmployee(Employee employee) {
SQLiteDatabase db = getWritableDatabase();

ContentValues values = new ContentValues();

values.put(KEY_NAME, employee.getName());
values.put(KEY_PHONE, employee.getPhone());
values.put(KEY_EMAIL, employee.getEmail());
values.put(KEY_ADDRESS, employee.getAddress());
values.put(KEY_EMPLOYEEID, employee.getEmployeeId());
values.put(KEY_EMPLOYEERANK, employee.getEmployeeRank());
values.put(KEY_IMAGEURI, employee.getImageURI().toString());

int rowsAffected = db.update(TABLE_EMPLOYEES, values, KEY_ID + "=?", new String[] { String.valueOf(employee.getId()) });
db.close();

return rowsAffected;
}

public List<Employee> getAllEmployees() {
List<Employee> employees = new ArrayList<Employee>();

SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_EMPLOYEES, null);

if (cursor.moveToFirst()) {
do {
employees.add(new Employee(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), Uri.parse(cursor.getString(7))));
}
while (cursor.moveToNext());
}
cursor.close();
db.close();
return employees;
}
}

XML

Activity_login.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:background="#ffebebeb">

<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:padding="16dp"
tools:context="com.vladsapps.employeesmanager.LoginActivity">

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/welcometitle"
android:text="Angajați"
android:textSize="24dp"
android:gravity="center_horizontal"
android:layout_marginBottom="96dp"/>

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/welcomebox"
android:text="Vă rugăm să vă logați pentru a avea acces la aplicație."
android:layout_below="@id/welcometitle"
android:paddingLeft="2dp"
android:textSize="16dp"
android:gravity="center"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/username"
android:layout_marginTop="32dp"
android:hint="Utilizator"
android:textColorHighlight="#FB8C00"
android:layout_below="@+id/welcomebox"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/password"
android:layout_marginTop="20dp"
android:hint="Parolă"
android:layout_below="@+id/username"
android:textColorHighlight="#FB8C00"/>

<Button
android:id="@+id/login_enter"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="#ffcecece"
android:text="Logare"
android:layout_below="@+id/password"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"/>

<Button
android:id="@+id/exit_app"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="#ffcecece"
android:text="Ieșire"
android:layout_below="@+id/login_enter"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/versionnumber"
android:text="v1.03 – Test"
android:textSize="14dp"
android:gravity="end|bottom"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" />

</RelativeLayout>
</LinearLayout>

Activity_main.xml :

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffebebeb">

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.vladsapps.employeesmanager.MainActivity">

<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />

<TabHost
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tabHost"
android:layout_below="@id/app_bar"
android:layout_gravity="center_vertical">

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
android:showDividers="none" >
</TabWidget>

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<LinearLayout
android:id="@+id/tabEmployeeList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView"
android:layout_gravity="center"/>

<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listView"
android:layout_gravity="center"
android:divider="#ffebebeb"
android:dividerHeight="-4dp"
android:isScrollContainer="true"/>
</LinearLayout>

<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/tabCreator"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/lblCreatorTitle"
android:layout_gravity="center"
android:layout_marginTop="10dp"/>

<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:id="@+id/imgViewEmployeeImage"
android:layout_gravity="center|center_horizontal"
android:layout_marginTop="10dp"
android:src="@drawable/no_user_logo"
android:contentDescription="Employee Photo"
android:layout_below="@id/lblCreatorTitle"
android:layout_centerHorizontal="true"
android:layout_centerInParent="false"
android:scaleType="centerCrop"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/txtName"
android:layout_marginTop="20dp"
android:hint="Numele și prenumele"
android:layout_below="@+id/imgViewEmployeeImage"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:ems="10"
android:id="@+id/txtPhone"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Număr de telefon"
android:layout_below="@+id/txtName"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/txtEmail"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Adresă de e-mail"
android:inputType="textEmailAddress"
android:layout_below="@+id/txtPhone"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/txtAddress"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Adresă domiciliu"
android:inputType="textPostalAddress"
android:layout_below="@+id/txtEmail"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/txtEmployeeId"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Număr angajat"
android:inputType="text"
android:layout_below="@+id/txtAddress"/>

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/txtEmployeeRank"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:hint="Funcție/Rang"
android:inputType="text"
android:layout_below="@+id/txtEmployeeId"/>

<ImageButton
android:id="@+id/btnAdd"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="end|bottom"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:background="@drawable/oval_ripple"
android:elevation="1dp"
android:src="@android:drawable/ic_input_add"
android:stateListAnimator="@anim/button_elevation"
android:tint="@android:color/white"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
tools:ignore="RtlCompat"/>
</RelativeLayout>
</ScrollView>
</FrameLayout>
</LinearLayout>
</TabHost>

</RelativeLayout>

<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.vladsapps.employeesmanager.NavigationDrawerFragment"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>

Activity_main2.xml :

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.vladsapps.employeesmanager.MainActivity2">

<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />

<TabHost
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tabHost"
android:layout_below="@id/app_bar"
android:layout_gravity="center_vertical">

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
android:showDividers="none" >
</TabWidget>

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<LinearLayout
android:id="@+id/tabEmployeeList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView"
android:layout_gravity="center"/>

<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listView"
android:layout_gravity="center"
android:divider="#ffebebeb"
android:dividerHeight="-4dp"
android:isScrollContainer="true"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>

</RelativeLayout>

<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.vladsapps.employeesmanager.NavigationDrawerFragment"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>

Listview_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="6dp"
card_view:cardBackgroundColor="#ffebebeb"
card_view:cardElevation="6dp"
card_view:cardUseCompatPadding="true"
card_view:contentPadding="-12dp"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">

<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:padding="4dp"
android:background="#ffebebeb">

<ImageView
android:id="@+id/ivEmployeeImage"
android:layout_width="fill_parent"
android:scaleType="centerCrop"
android:layout_height="450dp"
android:contentDescription="Photo"/>

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="200dp"
android:background="#7fffffff"
android:layout_gravity="bottom"
android:layout_alignParentBottom="true">

<TextView
android:id="@+id/employeeName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Employee's Name"
android:textSize="24dp"
android:textStyle="bold"
android:gravity="center_horizontal"/>

<TextView
android:id="@+id/employeerank"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Employee Rank"
android:textSize="16dp"
android:layout_below="@+id/employeeName"
android:paddingTop="4dp"
android:textStyle="bold"/>

<TextView
android:id="@+id/phoneNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Phone Number"
android:textSize="16dp"
android:layout_below="@+id/employeerank"
android:paddingTop="12dp"/>

<TextView
android:id="@+id/emailAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="E-mail Address"
android:textSize="16dp"
android:layout_below="@+id/phoneNumber"
android:paddingTop="4dp"/>

<TextView
android:id="@+id/cAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Home Address"
android:textSize="16dp"
android:layout_below="@+id/emailAddress"
android:gravity="center_horizontal"
android:paddingTop="4dp"/>

<TextView
android:id="@+id/employeeid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Employee ID"
android:textSize="16dp"
android:layout_below="@+id/cAddress"
android:paddingTop="4dp"/>

</RelativeLayout>
</FrameLayout>
</android.support.v7.widget.CardView>

Similar Posts