Realizarea Unei Aplicatii Pentru Domeniul Resurselor Umane

CUPRINS

Introducere

Resursele umane constituie principala resursă actuală și de perspectivă a organizației, cea care îi determină hotărâtor potențialul de acțiune. HR este acronimul pentru Resurse Umane (Human Resources) și se referă atât la domeniul Resurselor Umane, cât și la angajatul care lucrează în acest domeniu, HR-ul.

HR-ul este mediatorul între angajat și angajator și se confruntă cu două mentalități:

– Cea a angajatului: “Eu sunt cel mai bun produs al meu, pe care trebuie să îl vând cât mai scump”

– Cea a angajatorului: “Omul este cea mai importantă resursă a unei firme”

În funcție de obiectivele urmărite, granițele Resurselor Umane pot fi mai lărgi său mai restrânse, cuprinzând său lăsând în afară analizei anumite aspecte său elemente ce compun natură specifică a conceptului Resurselor Umane.

Fără oameni nu se pot face afaceri. De aceea, toate celelalte resurse – materiale, financiare, informaționale, au o importanță secundară. Resursă umană e singură resursă inepuizabilă de creativitate atât sub aspect economic cât și spiritual și științific. Ea este unică în ce privește potențialul de creștere, dezvoltare și învingere a propriilor limite.

Fiind preocupați de îmbunătățirea vieții în general și a vieții profesionale în special, oamenii au o mare disponibilitate de a se adapta la un mediu aflat într-o permanentă schimbare. Astfel, se mărește gradul de implicare și valorificare a capacității resurselor umane, acestea fiind singurele capabile să producă și să reproducă toate celelalte resurse aflate la dispoziția unei organizații.

Oamenii sunt una dintre cele mai importante investiții ale unei organizații, fiind primă resursă strategică ce poate garantă supraviețuirea companiei, asigurându-i competitivitatea și viitorul. Eficacitatea utilizării tuturor celorlalte resurse aflate la dispoziția organizației depinde într-o mare măsură de eficacitatea folosirii resurselor umane.

Rolul resurselor umane este de a-și mări sferă de cuprindere, înglobând pe lângă salariați și stakeholderi: acționari, clienți, furnizori, distribuitori, consultanți. Chiar dacă nu în aceeași măsură, și stakeholderii au un impact deosebit asupra companiei, influențându-i funcționarea și competitivitatea.

Se poate spune că Managementul Resurselor Umane e definit că ansamblul activităților de ordin strategic și operațional (planificarea, recrutarea și menținerea personalului), precum și crearea unui climat organizațional corespunzător, care permite asigurarea cu Resurse Umane necesare îndeplinirii obiectivelor organizaționale.

In aceasta lucrare, ideea aplicației este una foarte simplă și foarte necesară în același timp. În orice întreprindere există termenul de ‘task’, astfel TimeSpent devine o unealtă simplă atât pentru angajat, cât și pentru angajator pentru a superviza activitatea zilnică la locul de muncă.

TimeSpent este o aplicație desktop dezvoltată în limbajul C#, folosind mediul de dezvoltare Visual Studio 2012. Se utilizează o bază de date MS-SQL pentru stocarea datelor aplicației.

In introducere se precizeaza obiectivul lucrarii si structura ei.

Nu se dau definitii. Atentie definitiile de unde le-ai luat, se pun intre “ “” si se preciezeaza sursa.

1. Descrierea problemei economice

1.1. Prezentarea firmei

GfK este o firma infiintata in 1934 in Germania, la Nurenberg. Reprezinta cel mai mare institut german de cercetare de piata din Romania, dar si unul dintre primele 5 pe plan mondial.

GfK România este de mai bine de 12 ani, numarul 1 in domeniul de cercetare de piata cu o cifra de afaceri de aproximativ 19 milioane euro in 2013. Institutul are 100 de angajați și o rețea națională de aproximativ 700 operatori de interviu. Societatea ofera servicii de calitate pentru ramurile economiei, pune pret pe standardele de etica si procedure de la niveul occidental in vederea angajamentului fata de clientii sai. Reprezinta un izvor de informatii relevante despre piata si despre consumatori, iar companiile cu care colaboreaza, le este mai usor sa ia masurile cele mai potrivite.

Cu ajutorul tehnologiilor inovatoare si a abilitatii de a lucra cu cifrele, institutul Gfk transforma datele din studii in insight-uri actionabile. Astfel, clientii isi pot optimiza referintele despre datele de tip retail si media, printr-un proces de convertire al analizelor de research intr-unul de luare a deciziilor. Un insight il reprezinta o modalitate de rezolvare al problemelor, care tine mai mult de intelegerea intuitiva a unei anumite situatii. Aceasta metoda apare atunci cand oamenii recunosc relatii, si fac legaturi intre obiecte si actiuni pentru a solutiona o problema.

Societatea este împărțita în două sectoare: Consumer Choices și Consumer Experiences. Acestea funcționează foarte bine împreună peste tot în lume ca “One GfK”.

In prezent, se afla peste 13.000 de experti pasionati in cercetarea de piata, din 100 de țări și mai bine de 80 de ani de experiență, iar în anul 2011 a avut vânzări în jur de 1.4 miliarde euro.

Industriile pe care se axează societatea: auto, bunuri de larg consum, modă, servicii financiare, sănătate, mass-media și divertisment, servicii profesionale, servicii publice, retail, tehnologie, turism.

1.2. Prezentarea departamentelor firmei

Top of Form

Departamentul de Cercetare și Dezvoltare

Departamentul adoptă o combinație unică de date despre consumatori, retail și media. Conexiunea acestora se realizează utilizând tehnologii inovatoare și experiența în lucrul cu datele, schimband în timp real analizele de research într-un proces de luare a deciziilor. 

Astfel, în cadrul acestei instituții putem remarca următoarele ramuri de bază:

1. Retail – Departamentul retail, oferă clienților rapoarte retail in privinta evaluarii consumatorilor, sansa clientilor de a negocia cu furnizorii, dar si posibilitatea de a-si stabilii propriile preturi. In mare parte, acest departament este responsabil cu convertirea datelor in insight-uri de piata, monitorizarea vanzarilor in retail, dar si cu analizele regionale, la nivel de produs sau de magazin.

2. Mass-media și divertisment – Acest departament este responsabil de urmărirea tuturor canalelor media pentru a stabili profilul audienței. Acestea consta in analizarea comportamentului consumatorilor, pentru a percepe corect schimbarea tiparelor de consum. Consumatorii au propriile lor canale favorite si au reactii diferite la interactiunea cu ceea ce se intampla la radio, in presa scrisa sau in mediul online. De asemenea, eficienta media si succesul comunicarii prin diferite canale tin de masurarea audientei, testarea eficientei campaniilor publicitare sau de experienta consumatorilor in vederea gradului de satisfactie si loialitate.

3. Tehnologie – Departamentul tehnologie este responsabil cu analiza si trimiterea insight-urilor desper pietele globale de retai, anticipand cererea din piata. De asemenea, acest departament se mai ocupa cu studiul perceptiei marcii clientului si a competitorilor, portofolii de produse, performanta vanzarilor.

4. Auto – In cadrul acestui departament, scopul este acela a indruma clientii in vederea cresterii profitabilitatii. Acest lucru se poate realiza prin identificarea posibilitatilor din piata, cercetarea amanuntita a produsului, dar si perceptia clientului asupra marcii. Departamentul auto este responsabil cu multitudinea de informatii pe care le colecteaza, in vederea alegerii unui automobile, dar si cu intelegerea comportamentului de cumparare care duc la alegerea acestora.

5. Bunuri de larg consum – Activitatea acestui departament este responsabilă cu integrarea informațiilor de pe toata durata procesului de cumpărare. Acest departament, ofera rapoarte de monitorizare a vanzatorilor din retail, si acoperă fiecare canal, online, in-store, word-of-mouth, social media sau aplicații mobile. Colectarea datelor si optimizarea rapoartelor din fiecare etapa ofera clientilor posibilitatea de a-si pozitiona corect pe piata, marcile si produsele detinute.

6. Moda – Departamentul este responsabil pentru urmărirea pieței modei și a produselor de lux: îmbrăcăminte, încălțăminte sau accesorii. Departamentul se mai ocupa cu monitorizarea produselor pentru casă, dar și a articolelor sportive sau de marochinărie. Specialistii departamentului sunt pusi la curent cu totul ceea ce se intampla in fiecare punct de lucru despre marca, produs sau serviciul respective.

7. Servicii financiare – Scopul acestui departament este acela de a ajuta clientii sa isi optimizeze produsele si serviciile oferite. În cadrul acestui departament, se analizează percepția mărcii clientului de către publicul țintă și ce factori îi influențează cel mai mult. Acest departament oferă o expertiză detaliata în industriile de servicii financiare. Printre acestea putem enumera: carduri de credit și plăți, investiții bancare, asigurări de viață si de sănătate.

8. Sănătate – Acest departament determina fiecare aspect al produslui de la pre-lansare pana la post-lansare. Specialistii acestui departament cunosc foarte bine prioritatile si nevoile partilor incluse, astfel cauta cele mai recente inovatii de produs si cum influenteaza acestea piata activa.

9. Servicii publice – Scopul acestui departament consta in intelegerea comportamentului opiniei publice pe teme strategice de interes local, national sau mondial. Analizeaza grupuri tinta, realizeaza esantioane de mari dimensiuni la nivel national.

10. Turism – Acest departament analizează rezervările de călătorie actuale pentru a îmbunătăți produsele clienților, destinațiile și planificarea zborurilor. Cu ajutorul acestora, clientii iși pot maximiza procesul de stabilire a prețurilor și a canalelor de vânzare.

Bottom of Form ???? ai preluat de pe site-ul firmei si apare ca plagiat

1.3. Prezentarea activităților firmei

Activitatile GfK Romania sunt structurate  in 2 sectoare principale:

În sectorul Consumer Choices se colecteaza informații despre vânzarile din retail a bunurilor de consum tehnologice și date despre consumul media. 

Consumer Choices monitorizeaza media online și offline, dar și canalele principale de vânzări și informare.  Fosta divizie Retail and Tehnology și cea de Media se afla acum in sectorul Consumer Choices.

Sectorul Consumer Experiences este specializat în probleme de marketing operațional și strategic în toate industriile și piețele.

Acesta se orientează către atitudinile, percepțiile și comportamentul consumatorilor. Fosta divizie Custom Research, dar și cea de cercetare ad-hoc în Media fac parte din sectorul  Consumer Experiences.

1.4. Prezentarea activității care va fi informatizată

Această lucrare are ca scop informatizarea și supervizarea activității zilnice la locul de muncă ale tuturor angajaților dintr-o instituție.

De ce este necesară o monitorizare task-urilor a angajaților?

Conform studiilor statistice în medie, în România un angajat muncește productiv doar 5 ore zilnic. O gestiune a workflow-ului nu ar fi neapărat o metodă de a obliga angajatul să își contorizeze timpul petrecut la birou, ci o soluție pentru că angajatorul să centralizeze situațiile angajaților. Astfel angajatorul poate să îți planifice pe viitor task-urile și echipele pentru a obține un randament mai mare.

De ce TimeSpent?

TimeSpent este o aplicație cu o interfață simplă care oferă angajatorului posibilitatea de a-și gestiona angajații și task-urile pentru aceștia. Termenul de ‘task’ este vag spus. Un task reprezintă o activitate pe care urmează să o execute unul sau mai mulți angajați. Task-ul poate avea o perioadă estimată sau poate acumula o perioadă de timp adunată în urma pontării fiecărui angajat. Se pot adăuga angajați noi în baza de date a aplicației, realizată pentru o mai ușoară evidentă a activității firmei. De asemenea conducerea poate vedea rapoarte despre clienți, angajați, task-urile realizate sau timpul efectiv de lucru al acestora.

Pe parcursul acestei lucrări, punerea în evidență a necesității unei astfel de aplicații va reflectă și avantajele oferite de această aplicație.

2. Tehnologii informatice utilizate

2.1. Microsoft SQL Server Management Studio

Utilizatorul depozitează- va stoca în baza de date informațiile pe care dorește să le stocheze. Colecția dintr-o bază de date este organizată în tabele, fiecare tabelă este organizată în rânduri și coloane, fiecare rând dintr-o tabelă este considerat o înregistrare, iar înregistrările pot conține mai multe informații. Fiecare coloană dintr-o tabelă corespunde uneia dintre aceste componente.

SQL Server este un sistem de gestiune a bazelor de date, care favorizează realizarea aplicațiilor client-server, iar acesta poate gestiona baze de date foarte mari.

Pentru a dezvolta aplicații cu baza de date, acestea necesita limbaje de programare cât mai flexibile cu care utilizatorul să implementeze un set mare de funcții și de algoritmi de programare. Limbajul SQL reprezintă un mediu optim pentru a satisface aceste cerințe. Prin intermediul acestui limbaj, obiectele și înregistrările din baza de date pot fi manipulate. Limbajul SQL prezintă și un dezavantaj. Acesta nu include instrucțiuni condiționale (IF) sau instrucțiuni prin intermediul cărora pot fi repetate anumite secțiuni de cod (While).

SQL Server Management Studio permite efectuarea de operațiuni:

backup/restore;

crearea/modificarea de obiecte (baze de date, tabele, indexări poate index, etc);

scrierea/modificarea/executarea de fraze SQL;

SQL Server Management Studio este un mediu integrat pentru accesare, configurare, gestionare, administrare și dezvoltare.

Bazele de date pot fi relaționale, multidimensionale sau hibride.

Funcția de bază este acela de a permite accesul rapid și securizat la informații, și de a le lega într-un mod logic. Datele stocate, procesarea tranzacțiilor, pregătirea informațiilor, crearea, administrarea bazelor de date și conectarea de la distanță la informațiile conținute, toate aceste aspecte sunt gestionate de SQL Server prin intermediul internetului.

Depozitarea datelor se realizează într-o bază de date. Aceasta reprezintă o colecție de tabele cu coloane de un anumit tip.

SQL Server suporta diferite tipuri de date:

Integer, Float, Char, Decimal – reprezintă tipuri de date pentru numere și caractere ;

Varchar10 – reprezintă tipuri de date pentru secvențele de caractere sau stringuri, de dimensiune variabilă;

text – reprezintă tipuri de date pentru date sub formă de text;

binar – reprezintă tipuri de date pentru BLOB-uri nestructurate de date.

Cu ajutorul SQL Server Management Studio putem crea baze de date sau reconstrui schema bazei de date, updatând sau adăugând noi tabele. Acesta oferă unelte de configurare, gestionare și de administrare a componentelor. Reformuleaza frazele, incearca sa sintetizezi.

2.2. Microsoft visual studio 2012

Pentru crearea structurii bazei de date am folosit Microsoft Visual Studio. Acesta este un mediu de dezvoltare integrat (integrated development environment – IDE) de la Microsoft. Acesta poate fi folosit pentru a dezvolta aplicații consolă și aplicații cu interfață grafică pentru toate platformele suportate de Microsoft Windows (ex. .NET Framework, Windows Mobile etc).

Visual Studio 2012 oferă utilizatorului posibilitatea de a scrie și cod C# și de a realiza librării statice și dinamice (DLL-uri și LIB-uri).

Microsoft Visual Studio oferă editor, compilator/debugger și mediu de proiectare (designer) pentru mai multe limbaje de programare. Limbaje de programare incluse: Microsoft Visual C++, Microsoft Visual C#, Microsoft Visual Basic, Microsoft Visual Web Developer, Team Foundation Server.

Limbaje anterioare: Visual FoxPro (eliminat în 2007), Visual SourceSafe (întrerupt începând cu Visual Studio 2008), Microsoft Visual J++/ Microsoft Visual J # (întrerupt începând cu Visual Studio 2008), Visual InterDev (înlocuit cu Microsoft Visual Web Developer).

Pe lângă limbajele amintite anterior, Microsoft Visual Studio oferă suport și pentru alte limbaje, cum ar fi M, Python, Ruby. De asemenea, sprijină XML/XSLT, HTML/XHTML, JavaScript și CSS.

Visual Studio include un set complet de instrumente de dezvoltare pentru generarea de aplicații ASP.NET, Servicii Web XML, aplicații desktop și aplicații mobile. Visual Basic, Visual C++, Visual C# și Visual J# toate folosesc același mediu de dezvoltare integrat (IDE) care le permite partajarea instrumentelor și facilitează crearea de soluții folosind mai multe limbaje de programare. Aceste limbaje permit să beneficieze de caracteristicile .NET Framework care oferă acces la tehnologii cheie care simplifica dezvoltarea de aplicații web ASP și XML Web Services cu Visual Web Developer.

2.3. Limbajul C#

C# este un limbaj de programare orientat-obiect conceput de Microsoft la sfârșitul anilor 90. A fost conceput ca un concurent pentru limbajul Java. Ca și acesta, C# este un derivat al limbajului de programare C++.

Simplitatea limbajului este dată de absența pointerilor, moștenirea facilităților de „garbage collection” și managementul automat al memoriei datorită integrării pe platformă .NET, iar operațiile nesigure precum manipularea directă a memoriei nu sunt premise.

Modernitatea limbajului: C# este conceput pentru construirea de operații scalabile, robuste și interoperabile. Include un suport “built în” pentru transformarea componentelor în serviciu web pentru un acces mai ușor.

Orientat pe obiecte: suporta încapsularea datelor. Interfețele, moștenirea și polimorfismul. A introdus structurile (structs) pentru a permite tipurilor primitive să devină obiecte.

Type safe: nu se execută cast-uri nesigure, tablourile sunt neindexate și verificate, depășirea tipurilor este verificabila, tipurile primitivelor sunt inițializate cu zero și tipurile de referință cu null în mod automat de către compilator.

Interoperabilitate: C# include suport pentru COM, permite utilizarea cu restricții a pointerilor, componente din VB.net și din alte limbaje pot fi folosite direct în C#.

Portabilitate: Codul C# poate rula pe mai mult de 2,2 miliarde de dispozitive cu Windows, iOS, Android, Linux. C# este portabil într-o gamă largă de medii cum ar fi telefonia mobilă, Embedded, desktop și servere de calcul.

2.4. .NET Framework

NET Framework este o platformă de dezvoltare a aplicațiilor lansată de Microsoft, oferă suport pentru instalarea și rularea unor aplicații, unele fără o anumită versiune de .net framework neputând fi instalate.

Una dintre cele mai mari probleme era complexitatea creării unor sisteme informaționale stabile fără a fi supuse erorilor. A doua problemă la fel de importantă era compatibilitetea sistemului cu alte platforme sau sisteme.

Cele mai importante beneficii oferite de .NET Framework sunt:

– Interoperabilitate totală cu codul existent – Common Language Runtime – oferă un strat de abstractizare peste sistemul de operare.

– Integrarea totală a limbajelor – Base Class Libraries – cod pre-construit pentru activități obișnuite de programare low-level.

– Un model cu adevărat simplu de desfășurare/amplasare – Sub .NET Framework nu este nevoie să se înregistreze o bibliotecă binară în registrul sistemului de operare.

.NET Framework este formată din compilatoare, biblioteci și alte executabile în rularea aplicațiilor .NET.

CLR este cea mai importantă componentă a lui .NET Framework. Se ocupa cu managementul și execuția codului scris în limbajele .NET aflat în format CIL. Common Language Runtime se ocupa cu instantierea obiectelor, face verificări de securitate, depune obiectele în memorie, realizează spațiu în memorie prin garbage collection. Fișierele cu extensia exe care rezultă în urma compilării unei aplicații nu este un executabil portabil Windows, ci un executabil portabil .NET. Nefiind un executabil nativ se va rula de către CLR așa cum un fișier class este rulat de JVM. Pentru compilare se folosește tehnologia JIT-este o implementare de mașina virtuală unde o metodă sau o funcție este tradusă în cod mașină în momentul primei apelări. Codul tradus este pus într-un cache pentru evitarea recompilarii ulterioare. Sunt cunoscute trei tipuri de compilatoare JIT:

Normal JIT – în momentul primei apelări metodele sau funcțiile folosite sunt traduse în cod mașină

Pre-JIT – se compilează întregul cod în cod nativ o singură dată; este folosit la instalări

Econo-JIT – compilează codul CIL bit cu bit pentru a elibera resursele folosite de codul nativ stocat în cache; se folosește pentru dispozitivele cu resurse limitate

Compilatoarele JTI se folosesc pentru a îmbunătăți performanta execuției, ca alternativă la compilarea în repetate rânduri a aceleiași bucăți de cod atunci când se pune problema unei apelări multiple. Printre avantajele sistemului JTI se număra acela al executării codului, în urma compilării, pe diverse procesoare dacă mașina virtuală este adaptată bine la platformă. Astfel codul beneficiază de toate optimizările fără a mai fi nevoie de o compilare ulterioară ca în cazul C++.

Majoritatea aplicațiilor distribuite salvează, prezintă și procesează date și informații utilizând baze de date. În acest caz, .NET Framework are propria tehnologie de acces la date, numită ADO.NET, ce constă într-un set de clase prin intermediul cărora aplicațiile .NET se pot conecta la bazele de date sau surse de date (baze de date aflate pe servere sau fișiere locale), pot executa comenzi (în regim normal sau tranzacțional) sau gestiona și procesa date în mod deconectat (local în aplicație)

ADO.NET a fost conceput pentru a întâmpina nevoile de programare ale acestui model: arhitectura de date deconectată, integrare solidă cu XML, reprezentarea de date comună cu posibilitatea de a combina date din surse multiple, și facilități optimizate pentru integrarea cu bazele de date, toate acestea fiind native pachetului . NET Framework.

Tipuri de obiecte orientate pe legătura cu sursa de date: command, connection, datareader și data adapter.
Tipuri de obiecte orientate orientate pe conținut pentru date eterogene: dataset, datatable, datarow.

Obiectele ADO sunt folosite pentru accesul și prelucrarea datelor ce sunt memorate pe un server de baza de date. Aceasta colecție este integrată în multe medii de dezvoltare unde se pot efectua aplicații client.

2.5. Limbajul SQL

SQL (Structured Query Language) este un limbaj de programare specific pentru manipularea datelor în sistemele de manipulare a bazelor de date relaționale (RDBMS), iar la origine este un limbaj bazat pe algebra relațională.

Acesta are ca scop inserarea datelor, interogații, actualizare și ștergere, modificarea și crearea schemelor, precum și controlul accesului la date. A devenit un standard în domeniu (standardizat ANSI-ISO), fiind cel mai popular limbaj utilizat pentru creearea, modificarea, regăsirea și manipularea datelor de către SGBD-urile (Sistemele de Gestiune a Bazelor de Date) relaționale.

Există 3 metode de bază privind implementarea limbajului SQL: apelare directă (Direct Invocation): constă în introducerea instrucțiunilor direct de la prompter ; modulară (Modul Language): folosește proceduri apelate de programele aplicație; încapsulată (Embedded SQL): conține instrucțiuni încapsulate în codul de program

Instrucțiunile SQL pot fi:

instrucțiuni de definire a datelor, care permit descrierea structurii BD

instrucțiuni de manipulare a datelor: adaugă, șterge, modifică înregistrări

instrucțiuni de selecție a datelor, care permit consultarea BD

instrucțiuni de procesare a tranzacțiilor

instrucțiuni de control al cursorului

instrucțiuni pivind controlul accesului la date

În limbajul SQL standardizat de ISO se folosesc termenii tabel, coloană, rând.

SQL permite atât accesul la conținutul bazelor de date, cât și la structura acestora.

Se va reformula tot capitolul, din nou atentie de unde ai luat informatiile

3 Analiza si proiectarea sistemului informatic

3.1. Specificarea cerințelor sistemului informatic

Folosesti conceptul de sistem informational care difera de sistemul informatic. Reformuleaza , pune accentul pe cerintele pe care treb sa le indeplineasca sistemul informatic dezv de tine

Sistemul informațional permite cunoașterea situație existente într-o întreprindere, a situației trecute și anticiparea evoluției viitoare a acesteia, contribuind astfel al elaborarea și îndeplinirea obiectivelor stabilite. Prin intermediul său se obțin informațiile necesare fundamentării deciziilor, implementării acestora precum și cele necesare adaptării continue a întreprinderii comerciale la schimbările interne și externe.

Sistemul informațional cuprinde date, informații, circuite și fluxuri informaționale, proceduri și mijloace de tratare a informațiilor din cadrul firmei, având ca scop să asigure suportul informațional pentru îndeplinirea obiectivelor stabilite.

În ziua de azi, majoritatea firmelor și instituțiilor își desfășoară activitatea economico-financiara pe baza fluxurilor de date din sistemul informațional, iar corectitudinea și claritatea informațiilor care circulă în acest circuit reprezintă un factor foarte important, de aceea multe întreprinderi adopta un sistem sotfware de performanță pentru a asigura integritatea și securitatea informațiilor.

Proiectarea unui sistem informațional eficient se face având la bază o serie de principii, a căror respectare îi condiționează funcționalitatea și eficientă, de aceea pentru realizarea aplicației software având în vedere informatizarea activității departamentului de Resurse Umane, s-a recurs la următoarele cerințe:

crearea unei baze de date care să cuprindă toate informațiile necesare despre personalul firmei;

corelarea sistemului informațional??? cu sistemul decizional și structura organizatorică a firmei;

principiul asigurării unității metodologice a tratării informațiilor;???la ce te referi?

asigurarea flexibilității sistemului informațional???, astfel încât să fie posibilă adaptarea rapidă și ușoară în funcție de necesități, modificările ulterioare asupra datelor privind angajații firmei, precum actualizarea sau ștergerea informațiilor;

afișarea datelor referitoare la angajați existențe în bază de date;

căutarea informațiile referitoare la un angajat specific;

afișarea rapoarte cu privire la timpul estimat în vederea sarcinii realizate;

sarcinile stabilite de angajator pot avea o perioadă estimată sau pot acumula o perioadă de timp adunată în urma pontării fiecărui angajat;

angajatorul are posibilitatea de a-și gestiona angajații și task-urile pentru aceștia;

Interfața simplă care oferă angajatorului posibilitatea de a-și gestiona angajații și task-urile pentru aceștia. O gestiune a workflow-ului nu ar fi neapărat o metodă de a oblige angajatul să își contorizeze timpul petrecut la birou, ci o soluție pentru că angajatorul să centralizeze situație angajaților.Astfel angajatorul poate să îți planifice pe viitor task-urile și echipele pentru a obține un randament mai mare.

3.2.Analiza sistemului existent

3.2.1. Identificarea entităților și a caracteristicilor acestora

Cand faci o analiza, precizezi: ce faciliati ofera sistemul informatic existent, care sunt tehnologiile utilizate, care sunt sursele de date utilizate, care sunt lipsurile/dezavantajele SI existent

De ce trebuie sa realizezi un alt SI , ce se doreste sa se obtina cu un nou SI

Entitatile modeleaza clase de obiecte concrete sau abstracte despre care se colecteaza informatii, au existenta independenta si pot fi identificiate in mod unic.

Atributul este o caracteristică prin care se exprimă starea unei entități sau asocieri. Modeleaza proprietati atomice distincte ale entitatilor.

Asocierea este legătura logică între două sau mai multe entități. Modeleaza interdependentele dintre clasele de obiecte reprezentate prin entitati.

În urma analizei sistemului informatic existent au fost identificate urmatoarele entități:

Tabela Companies – retine informatiile privind angajatii dintr-o firma:

Tabela Employees – contine informatii privind datele angajatiilor:

Tabela EmployeeTypes – reține informații referitoare la datele personale ale postului ocupat de angajați:

Tabela TaskEmployees conține informațiile referitoare despre angajați angrenați în task-urile primite:

Tabela TaskItems contine informatiile referitoare despre angajati angrenati in task-urile primite:

Tabela Tasks – contine informatii privind sarcinile primite de angajati:

Tabela TaskTypes – reține informații referitoare la tipului de sarcini primite de angajați:

3.3. Identificarea procedurilor necesare

Securitatea și accesul la entități este restricționată, astfel încât doar administratorul și angajatorii pot avea acces la informațiile referitoare ale tuturor angajaților sau superiorilor din firma.

Comenzile de prelucrare cele mai des foloite sunt: insert, select, update și delete.

Căutarea unei anumite informații într-o bază de date relaționala trece prin etapa în care, informațiile din tabele sunt puse în corespondența pe baza unor chei, iar rezultatul este prezentat sub forma unui alt tabel care combina informații din celelalte. Tabelele inițiale trebuie să conțină cel puțin o coloană, un câmp, numită cheie. Operația update înseamnă o actualizare perpetuă a bazei de date. Operația de creare introduce în tabelă o înregistrare nouă ce conține atributele obiectului pe care dorim să îl efectuăm.

Calculul indicatorilor reprezintă sursa datelor de ieșire. În aplicația realizata putem calcula indicatorul pentru timpul efectiv de lucru în care angajatul urmează să își exercite sarcina primită de la angajator.

Folosim operații de adăugare, modificare, ștergere, vizualizare atat pentru angajați sau pentru tipurile de task-uri.

???? neclar acest paragraf

3.4. Proiectarea noului sistem

3.4.1. Schema bazei de date.

O baza de date, reprezinta un mod de a stoca informatiile si datele pe un dispozitiv de stocare extern. Proiectarea unei baze de date permite accesul la informatii exacte, actualizate. Bazele de date sunt manipulate cu ajutorul unui SGBD. Pentru o proiectare corecta este foarte important ca activitatea de modelare a datelor sa se realizeze independent de un SGBD. Procesul de proiectare al unei baze de date consta in anumite principii: informatiile redundante consuma mult spatiu si mareste probabilitatea producerii de erori, iar baza de date trebuie sa contina informatii corecte deoarece toate rapoartele care extrag informatii din baza respectiva, trebuie sa fie corecte.

Proiectarea unei baze de date inseamna:

– impartirea informatiilor in tabele pentru scaderea datelor dublate ( redundante);

– asista si asigura acuratetea si integritatea datelor;

– modeleaza si adapteaza necesitatile de procesare a datelor;

Realizarea procesului de proiectare al structurii BD este alcatuita din urmatorii pasi:

– determinarea scopului si alegerea corespunzatoare a unui SGBD pentru implementarea si manipularea bazei de date;

– stabilirea și gestionarea informațiilor necesare consta in colectarea tipurilor de informatii inregistrate in baza de date;

– impărțirea informațiilor în entitati sau subiecte, urmand ca fiecare subiect sa devina tabel. Tipurile de legături între tabele sunt “unul-la-mai-multi”, in care cheia primară din tabela “părinte” se adaugă în tabela “copil” sub formă de cheie externă;

– fiecare element devine un camp afisat sub forma de coloana in tabel;

– pentru alegerea unei chei primare pentru fiecare tabel, trebuie specificata o valoare care nu se va schimba, deoarece folosirea unei chei primare careia nu i se va schimba valoarea, reduce sansele de desincronizare intre tabele;

– asocierea datelor dintr-un tabel cu datele din celelalte tabele presupune clarificarea relațiilor din tabel;

– eliminarea erorilor;

– aplicarea regulilor de normalizare pentru a verifica structura corecta a tabelelor;

Schema bazei de date:

– fiecare tabelă cu coloanele sale și relațiile care se stabilesc între cheile acestora;

– o relație poate avea mai multe chei, acestea pot fi de două feluri: cheie primară și cheie externă;

– o cheie primară este un câmp sau un set de câmpuri din tabel care furnizează cu un identificator unic pentru fiecare rând;

– o cheie externă este cheia primară a unui alt tabel.

Baza de date este formată din 7 tabele:

Figura 1. Tabele TimeSpent

Figura 1.2 Tabela Companies

Figura 1.3 Tabela Employees

Figura 1.4 Tabela EmployeeTypes

Figura 1.5 TaskEmployees

Figura 1.6 Tabela TaskItems

Figura 1.7 Tabela TaskTypes

Schema bazei de date :

Figura 2 Schema Bazei de Date

4 Dezvoltarea si implementarea sistemului informatic

4.1. Proiectarea prelucrărilor

Pentru prelucrarea datelor, în aplicație am folosit o interfață dezvoltată în C#, iar pentru efectuarea prelucrării asupra datelor s-au utilizat metodele de acces pentru citire, inserare, actualizare și ștergere.

Fișier de configurare care realizează conexiunea la bază de date:

<connectionStrings>

<add name="TimeSpent.Properties.Settings.testConnectionString"

connectionString="Data Source=GIANNI-PC;Initial Catalog=test;Integrated Security=True"

providerName="System.Data.SqlClient" />

</connectionStrings>

</configuration>

4.2 Implementarea aplicatiei

Pentru a implementarea aplicației a fost necesară parcurgerea unor etape. În primul rând, trebuie să stabilim scopul aplicației și a metodelor implementate, pe urmă vom alege obiective principale ale aplicației.

Realizarea interfeței aplicației se realizeaza după crearea bazei de date si a tabelelor.

Interfața aplicației se realizează astfel:

Creare meniu principal;

Populare baza de date;

Construirea schemei conceptuale ai cui; ????

Aplicației propriu-zisa are ca scop:

Definirea metodelor de acces la baza de date;

Crearea metodelor de realizare a funcționalităților.

Pentru gestionarea activității unei firme avem nevoie de o aplicație care să acopere o plajă importantă de activități, pentru a valorifica atât timpul, cât și munca personalului.

Accesul la baza de date din cadrul aplicației TimeSpent, se realizează astfel:

Folosirea a doua label-uri: user și parola, 2 text box-uri și un buton. La apăsarea butonului ”Login”, se verifică dacă există utilizatorul în baza de date.

namespace TimeSpent

{

public partial class FormLogin : Form

{

public FormLogin()

{

InitializeComponent();

}

private void btnLogin_Click(object sender, EventArgs e)

{

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

try

{

Employee employee = dc.Employees.FirstOrDefault(x => x.Email == tbEmail.Text && x.Password == tbPassword.Text);

if (employee == null)

{

MessageBox.Show("User not found");

return;

}

else if (employee.IsDeleted)

{

MessageBox.Show("Your account is disabled by admin");

return;

}

if (employee.EmployeeTypeId == 1000)

{

FormMainAdmin main = new FormMainAdmin();

main.loggedEmployee = employee;

main.ShowDialog();

Close();

}

else

{

FormMainEmployee main = new FormMainEmployee();

main.loggedEmployee = employee;

main.ShowDialog();

Close();

}

}

catch (Exception ex)

{

}

}

private void tbPassword_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyData == Keys.Enter)

{

btnLogin_Click(btnLogin, new EventArgs());

}

}

private void FormLogin_Load(object sender, EventArgs e)

{

}

}

}

Figura. 3 Login

Pentru gestionarea sarcinilor angajaților se va afișa pe ecranul form-ul din figura 4. La acțiunea primului buton din fereastră “main”, se pot adăuga angajați, cărora li se pot atribui noi task-uri sau se poate vedea și progresul acestora.

Figura.4 Main

Pentru gestionarea sarcinilor angajaților se va afișa pe ecranul form-ul din figura 5. La acțiunea butonului “Save” se vor salva detaliile despre angajat, dar și statusul sarcinii primite de către acesta.

Figura 5. Manage task

Pentru gestionarea sarcinilor angajaților se va afișa pe ecranul form-ul din figura 6. La acțiunea primului buton din fereastră “add new member” se face o redictionare către fereastră de add new member. Butonul “delete member” șterge angajatul din cadrul sarcinii primite.

private void btnAddNewMember_Click(object sender, EventArgs e)

{

FormAddMemberToTask form = new FormAddMemberToTask();

form.currentTask = currentTask;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowTaskMembers();

}

private void lbTaskMembers_SelectedIndexChanged(object sender, EventArgs e)

{

btnDeleteMember.Enabled = true;

}

private void btnDeleteMember_Click(object sender, EventArgs e)

{

try

{

if (-1 != lbTaskMembers.SelectedIndex)

{

Employee employee = this.lbTaskMembers.Items[this.lbTaskMembers.SelectedIndex] as Employee;

if (employee != null)

{

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

TaskEmployee te = dc.TaskEmployees.FirstOrDefault(x => x.EmployeeId == employee.EmployeeId && x.TaskId == currentTask.TaskId && !x.IsDeleted);

if (te != null)

te.IsDeleted = true;

dc.SubmitChanges();

ShowTaskMembers();

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

Figura. 6 Manage Task Members

Pentru a vedea detalii despre task-ul inițializat sau pentru a vedea statusul task-ului referitor la timpul estimat sau afectat, se va deschide fereastra din figura 7. Butonul “add comment “, angajatorul poate adăuga detalii pentru orice task se dorește a fi îmbunătățit.

Figura.7 Task Details

În cadrul acestei ferestre ”Account settings”, orice utilizator își poate schimba adresa de mail sau parola curentă. La acțiunea butonului “Save” se va salva detaliile stabilite de utilizator.

Figura .8 Account settings

În tabela Employee, angajatorul poate schimba sau inițializa detaliile referitoare la task-urile atribuite angajaților. Când butonul ”Save” este apăsat, se salvează toate detaliile în baza de date angajatul cu numele introdus în textbox.

Figura.9 Employee

Pentru tabela ”Add comment”, form-ul arata astfel: 2 text box-uri , 1 rich text box, 2 label-uri și 1 buton. La acțiunea butonului “Afișează” se vor completă datele din form cu datele din baza de date. La apăsarea butonului “Save” datele task-ului în aflat în desfășurare sunt salve în baza de date.

Figura .10 Add comment

În această fereastră se vor alege angajații în cadrul sarcinilor stabilite.

Figura.11 Add member to task

Pentru a usura munca, pe parcursul dezvoltării aplicatiei am realizat mai multe rapoarte, unde putem scoate in evidenta timpul efectiv al unei sarcini, cate persoane sunt angrenate in sarcina respectiva, si timpul estimativ de lucru pentru task-urile aflate in curs.

Figura 12 Raportari Task-uri

Concluzii

Resursele umane sunt puternic marcate de factorul timp, necesare schimbãrii mentalităților, comportamentelor, obiceiurilor, etc. Oricât de puternicã ar fi rezistenta, schimbãrile de mentalitate și comportament sunt inevitabile o datã cu schimbãrile survenite în sistemul de valori umane.

Pornind de la această idee, am încercat să dezvolt o aplicație pentru administrarea și gestionarea task-urilor în cadrul unei firme.

Aceasta aplicație, este una destul de complexă, ce permite gestionarea unei baze de date cu informații specifice angajaților unei firme, facilitează munca departamentului de resurse umane cu ajutorul rapoartelor, dar și angajatorul poate să îți planifice pe viitor task-urile și echipele pentru a obține un randament mai mare.

Un avantaj al acestei aplicații este interfața prietenoasă și ușor de manevrat, iar timpul de introducere și de prelucrare al datelor este mult mai scăzut.

Avantaje în utilizare:

Economie de timp și de resurse;

Gestionarea workflow-ului;

Centralizarea situațiilor angajaților;

Eliminarea erorilor de calcul;

Securizarea datelor.

Prin îmbunătățiri aduse la nivelul interfeței, prin adăugarea a mai multor rapoarte și grafice, sunt de părere că aceasta aplicație ar putea trezi interesul a mai multor firme.

1. Dpdv al structurii lucrarii, este o “varza” , nu faci analiza sistemului existent, nu vad care sunt cerintele noului sistem informatic comparative cu cel existent,

2. faci confuzie intre sistem informational si sistem informatic

3. trebuie sa refaci astfel:

1. Analiza sistemului informatic existent- tehnologii utilizate, facilitati oferite, lipsuri/dezavantaje, de ce se impune crearea unui nou sistem. Nu este clar cu taskurile – ce tipuri de taskuri se definesc, cum se asociaza angajatilor, deci o descriere a procesului (o diagrama a procesului de gestiune a taskurilor). Pana la urma aplicatia ta se rezuma la managementul taskurilor)

2. Proiectarea sistemului informatic- proiectarea bazei de date (ce apare in plus fata de cea existenta), proiectarea interfetei ( ce tipuri de rapoarte se vor genera, etc)

3. dezv aplicatiei ( aici se pun tehnologiile IT utilizate, scriptul de creare a structurii BD, codul asociat unor elemente ale interfetei, etc)

4. se va reface bibliografia corespunzator si se vor pune referiri in text , unde ai utilizat aceasta bibliografie, daca nu apar, lucrarea poate fi rejectata

5. concluziile se vor rezuma la ce ai realizat tu, avantajele aplicatiei dezvoltate

Bibliografie

[1] Jeffrey Richter – „Microsoft .NET Framework”, editura Teora

[2] Richard Grimes – „Dezvoltarea aplicațiilor cu Visual Studio .NET”, editura Teora

[3] Dusan Petkovic – „Microsoft SQL Server 2008”, editura Mcgraw-Hill Education – Europe

[4] Onete B. Sisteme informațice, Editura A.S.E București, București, 2000- nu ai gasit o carte scrisa de prof de la Informatica Ec despre sisteme informatice, mai noua?

[5] Thomas Connolly, Caroly Beeg – Database Systems. A practical Approach to Design, implementation & management. Fourth Edition, Ed. Addison Wesley, 2005

[6] Radu EMILIAN –„Managementul resurselor umane „ ,Editura ASE, anul

[7] Microsoft Corp. – "Programarea Orientată pe Obiecte și Programarea Vizuală – .NET Framework"

[8] msdn.microsoft.com

[9] www.csharp-station.com

[10] Lungu I, Bâră A, Andronie M – „Administrarea bazelor de date”, Editura ASE, 2008

[11] http://w3schools.com/ – Learn C#

[12] http://w3schools.com/ – Learn SQL

[13] Chris Sells – Windows Forms Programming în C Sharp, Addison-Wesley Professional, 2004

[14] www.codeproject.com

[15] www.wikipedia.com

[16] www.stackoverflow.com

Se precizeaza exact linkul , nu generic, efectiv ce informatii ai utilizat, si trebuie sa apara referiri in text , altfel nu se trec in bibliografie

De exe:

[Ambler, 2003] Scott Ambler, Agile database techniques: effective strategies for the agile software developer, Wiley Application Development, published by Wiley Publishing.Inc, 2003, pp. 3-18

[Beck, 2001] Kent Beck, James Grenning, ș.a, “Principles behind the Agile Manifesto”, 2001, valabil on-line la adresa: www.agilemanifesto.org/ principles.html, accesat februarie, 2013

White paper, “WP-QlikView-Architectural-Overview-EN”, 2014 valabil on-line la adresa: http://www.qlik.com/us/ explore/resources/whitepapers/qlikview-architectural-overview, accesat iulie 2014

ANEXE

Script de creare al unei tabele:

CREATE TABLE [dbo].[Companies](

[CompanyId] [int] IDENTITY(1,1) NOT NULL,

[Name] [varchar](200) NOT NULL,

[Details] [text] NOT NULL,

[IsDeleted] [bit] NOT NULL,

CONSTRAINT [PK_Companies] PRIMARY KEY CLUSTERED

(

[CompanyId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

Script de inserare:

INSERT INTO [timespent].[dbo].[Employees]

([Name]

,[CompanyId]

,[Details]

,[IsDeleted]

,[EmployeeTypeId]

,[Email]

,[Password]

,[IsActive])

VALUES

(<Name, varchar(200),>

,<CompanyId, int,>

,<Details, text,>

,<IsDeleted, bit,>

,<EmployeeTypeId, int,>

,<Email, varchar(100),>

,<Password, varchar(100),>

,<IsActive, bit,>)

GO

Script de interogare:

SELECT [CompanyId]

,[Name]

,[Details]

,[IsDeleted]

FROM [timespent].[dbo].[Companies]

GO

Script de actualizare:

UPDATE [timespent].[dbo].[Employees]

SET [Name] = <Name, varchar(200),>

,[CompanyId] = <CompanyId, int,>

,[Details] = <Details, text,>

,[IsDeleted] = <IsDeleted, bit,>

,[EmployeeTypeId] = <EmployeeTypeId, int,>

,[Email] = <Email, varchar(100),>

,[Password] = <Password, varchar(100),>

,[IsActive] = <IsActive, bit,>

WHERE <Search Conditions,,>

GO

Cod sursa al meniului adminului:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TimeSpent

{

public partial class FormMainAdmin : Form

{

public Employee loggedEmployee;

public FormMainAdmin()

{

InitializeComponent();

}

private void btnAddNewEmployee_Click(object sender, EventArgs e)

{

FormEditEmployeeDetails form = new FormEditEmployeeDetails();

form.currentEmployee = null;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowEmployees();

}

private void ShowEmployees()

{

try

{

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

listBoxEmployees.Items.Clear();

listBoxEmployees.DisplayMember = "Name";

listBoxEmployees.ValueMember = "EmployeeId";

foreach (Employee employee in dc.Employees.Where(x => x.CompanyId == loggedEmployee.CompanyId && !x.IsDeleted).OrderBy(x=>x.Name))

{

listBoxEmployees.Items.Add(employee);

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void ShowTasks()

{

try

{

btnManageTaskMembers.Enabled = btnViewProgress.Enabled = false;

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

lbTasks.Items.Clear();

lbTasks.DisplayMember = "Name";

lbTasks.ValueMember = "TaskId";

foreach (Task task in dc.Tasks.Where(x => x.CompanyId == loggedEmployee.CompanyId && !x.IsDeleted).OrderBy(x => x.TaskTypeId))

{

lbTasks.Items.Add(task);

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void FormMainAdmin_Load(object sender, EventArgs e)

{

lbWelcome.Text = "Wellcome " + loggedEmployee.Name;

ShowEmployees();

ShowTasks();

}

private void listBoxEmployees_MouseDoubleClick(object sender, MouseEventArgs e)

{

try

{

if (-1 != listBoxEmployees.SelectedIndex)

{

Employee employee = this.listBoxEmployees.Items[this.listBoxEmployees.SelectedIndex] as Employee;

if (employee != null)

{

FormEditEmployeeDetails form = new FormEditEmployeeDetails();

form.currentEmployee = employee;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowEmployees();

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void button1_Click(object sender, EventArgs e)

{

FormManageTask form = new FormManageTask();

form.currentTask = null;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowTasks();

}

private void lbTasks_MouseDoubleClick(object sender, MouseEventArgs e)

{

try

{

if (-1 != lbTasks.SelectedIndex)

{

Task task = this.lbTasks.Items[this.lbTasks.SelectedIndex] as Task;

if (task != null)

{

FormManageTask form = new FormManageTask();

form.currentTask = task;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowTasks();

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void button2_Click(object sender, EventArgs e)

{

try

{

if (-1 != lbTasks.SelectedIndex)

{

Task task = this.lbTasks.Items[this.lbTasks.SelectedIndex] as Task;

if (task != null)

{

FormManageTaskMembers form = new FormManageTaskMembers();

form.currentTask = task;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowTasks();

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void lbTasks_MouseClick(object sender, MouseEventArgs e)

{

btnManageTaskMembers.Enabled = false;

try

{

if (-1 != lbTasks.SelectedIndex)

{

Task task = this.lbTasks.Items[this.lbTasks.SelectedIndex] as Task;

if (task != null)

{

btnManageTaskMembers.Enabled = true;

btnViewProgress.Enabled = true;

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void btnViewProgress_Click(object sender, EventArgs e)

{

try

{

if (-1 != lbTasks.SelectedIndex)

{

Task task = this.lbTasks.Items[this.lbTasks.SelectedIndex] as Task;

if (task != null)

{

FormManageTaskDetails form = new FormManageTaskDetails();

form.currentTask = task;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowTasks();

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void lbWelcome_Click(object sender, EventArgs e)

{

}

private void button2_Click_1(object sender, EventArgs e)

{

FormEditAccountSettings form = new FormEditAccountSettings();

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

loggedEmployee = dc.Employees.FirstOrDefault(x => x.EmployeeId == loggedEmployee.EmployeeId);

lbWelcome.Text = "Wellcome " + loggedEmployee.Name;

}

private void listBoxEmployees_SelectedIndexChanged(object sender, EventArgs e)

{

}

}

}

Cod sursa meniu angajati:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TimeSpent

{

public partial class FormMainEmployee : Form

{

public Employee loggedEmployee;

public FormMainEmployee()

{

InitializeComponent();

}

private void FormMainEmployee_Load(object sender, EventArgs e)

{

lbWelcome.Text = "Wellcome " + loggedEmployee.Name;

ShowTasks();

}

private void ShowTasks()

{

try

{

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

dgvTasks.DataSource = new BindingSource

{

DataSource = dc.Tasks.Where(x => x.CompanyId == loggedEmployee.CompanyId && !x.IsDeleted && x.TaskEmployees.Any(z => z.EmployeeId == loggedEmployee.EmployeeId)).OrderBy(x => x.TaskTypeId).

ToList().Select(sel =>

new

{

id = sel.TaskId,

name= sel.Name,

status= sel.TaskType.Name

})

};

if (dgvTasks.Columns.Count > 1)

{

dgvTasks.Columns["id"].Visible = false;

dgvTasks.Columns["name"].Width = 400;

dgvTasks.Columns["name"].HeaderText = "Task name";

dgvTasks.Columns["status"].Width = 100;

dgvTasks.Columns["status"].HeaderText = "Status";

}

else

{

dgvTasks.DataSource = null;

}

//lbTasks.Items.Clear();

//lbTasks.DisplayMember = "Name";

//lbTasks.ValueMember = "TaskId";

//foreach (Task task in dc.Tasks.Where(x => x.CompanyId == loggedEmployee.CompanyId && !x.IsDeleted && x.TaskEmployees.Any(z=>z.EmployeeId==loggedEmployee.EmployeeId)).OrderBy(x => x.TaskTypeId))

//{

// lbTasks.Items.Add(task);

//}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void lbTasks_MouseDoubleClick(object sender, MouseEventArgs e)

{

/* try

{

if (-1 != lbTasks.SelectedIndex)

{

Task task = this.lbTasks.Items[this.lbTasks.SelectedIndex] as Task;

if (task != null)

{

FormManageTaskDetails form = new FormManageTaskDetails();

form.currentTask = task;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowTasks();

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}*/

}

private void dgvTasks_MouseDoubleClick(object sender, MouseEventArgs e)

{

}

private void dgvTasks_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)

{

try

{

if (e.RowIndex >= 0)

{

if (dgvTasks.SelectedRows.Count != 0)

{

DataGridViewRow row = this.dgvTasks.SelectedRows[0];

int taskId = Convert.ToInt32(row.Cells["id"].Value);

// MessageBox.Show(taskId.ToString());

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

Task task = dc.Tasks.FirstOrDefault(x => x.TaskId == taskId);

if (task != null)

{

FormManageTaskDetails form = new FormManageTaskDetails();

form.currentTask = task;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowTasks();

}

}

}

}

catch (Exception ex)

{

}

}

private void button1_Click(object sender, EventArgs e)

{

FormEditAccountSettings form = new FormEditAccountSettings();

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

loggedEmployee = dc.Employees.FirstOrDefault(x => x.EmployeeId == loggedEmployee.EmployeeId);

lbWelcome.Text = "Wellcome " + loggedEmployee.Name;

}

private void dgvTasks_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

}

}

}

Cod sursa meniu task-uri:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TimeSpent

{

public partial class FormManageTask : Form

{

public Task currentTask;

public Employee loggedEmployee;

public FormManageTask()

{

InitializeComponent();

}

private void btnSave_Click(object sender, EventArgs e)

{

try

{

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

if (tbName.Text.Length < 5)

{

MessageBox.Show("name is too short");

tbName.Focus();

return;

}

if (tbDetails.Text.Length < 5)

{

MessageBox.Show("please enter more detatails");

tbDetails.Focus();

return;

}

if (currentTask == null)

{

Task task = new Task();

task.CompanyId = loggedEmployee.CompanyId;

task.Name = tbName.Text;

task.Details = tbDetails.Text;

task.IsDeleted = false;

task.AddedDate = DateTime.Now;

task.TaskTypeId = ((TaskType)cbStatus.SelectedItem).TaskTypeId;

task.AddedEmployeeId = loggedEmployee.EmployeeId;

dc.Tasks.InsertOnSubmit(task);

}

else

{

Task task = dc.Tasks.FirstOrDefault(x => x.TaskId == currentTask.TaskId);

task.Name = tbName.Text;

task.Details = tbDetails.Text;

task.TaskTypeId = ((TaskType)cbStatus.SelectedItem).TaskTypeId;

}

dc.SubmitChanges();

Close();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void FormManageTask_Load(object sender, EventArgs e)

{

cbStatus.DisplayMember = "Name";

cbStatus.ValueMember = "TaskTypeId";

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

cbStatus.Items.Clear();

foreach (TaskType type in dc.TaskTypes)

{

cbStatus.Items.Add(type);

}

if (currentTask == null)

{

tbName.Text = tbDetails.Text = "";

cbStatus.SelectedIndex = 0;

}

else

{

tbName.Text = currentTask.Name;

tbDetails.Text = currentTask.Details;

cbStatus.Text = currentTask.TaskType.Name;

}

}

private void tbDetails_TextChanged(object sender, EventArgs e)

{

}

}

}

Cod sursa meniu gestionare sarcini angajati:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TimeSpent

{

public partial class FormManageTaskMembers : Form

{

public Task currentTask;

public Employee loggedEmployee;

public FormManageTaskMembers()

{

InitializeComponent();

}

private void FormManageTaskMembers_Load(object sender, EventArgs e)

{

if (currentTask == null)

{

Close();

return;

}

tbTaskName.Text = currentTask.Name;

ShowTaskMembers();

}

private void ShowTaskMembers()

{

try

{

btnDeleteMember.Enabled = false;

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

lbTaskMembers.Items.Clear();

lbTaskMembers.DisplayMember = "Name";

lbTaskMembers.ValueMember = "EmployeeId";

foreach (TaskEmployee taskEmployee in dc.TaskEmployees.Where(x => x.TaskId == currentTask.TaskId && !x.IsDeleted).OrderBy(x => x.TaskEmployeeId))

{

lbTaskMembers.Items.Add(taskEmployee.Employee);

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void btnAddNewMember_Click(object sender, EventArgs e)

{

FormAddMemberToTask form = new FormAddMemberToTask();

form.currentTask = currentTask;

form.loggedEmployee = loggedEmployee;

form.ShowDialog();

ShowTaskMembers();

}

private void lbTaskMembers_SelectedIndexChanged(object sender, EventArgs e)

{

btnDeleteMember.Enabled = true;

}

private void btnDeleteMember_Click(object sender, EventArgs e)

{

try

{

if (-1 != lbTaskMembers.SelectedIndex)

{

Employee employee = this.lbTaskMembers.Items[this.lbTaskMembers.SelectedIndex] as Employee;

if (employee != null)

{

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

TaskEmployee te = dc.TaskEmployees.FirstOrDefault(x => x.EmployeeId == employee.EmployeeId && x.TaskId == currentTask.TaskId && !x.IsDeleted);

if (te != null)

te.IsDeleted = true;

dc.SubmitChanges();

ShowTaskMembers();

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

}

}

Cod sursa task progres:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using Microsoft.Reporting.WinForms;

namespace TimeSpent

{

public partial class FormRaportTaskProgress : Form

{

public FormRaportTaskProgress()

{

InitializeComponent();

}

private void FormRaportTaskProgress_Load(object sender, EventArgs e)

{

// TODO: This line of code loads data into the 'TimeSpentDataSet.TaskItems' table. You can move, or remove it, as needed.

this.TaskItemsTableAdapter.Fill(this.TimeSpentDataSet.TaskItems);

this.reportViewer1.RefreshReport();

return;

TimeSpentDataSet emDS = new TimeSpentDataSet();

ReportParameter[] param = new ReportParameter[2];

param[0] = new ReportParameter("date1", "pl1");

param[1] = new ReportParameter("date2", "pl2");

//string path = Directory.GetCurrentDirectory();

//string replace = path.Replace("\\bin\\Debug", "") + "\\App_Data\\"+"ReportExtraMove.rdlc";

// var ret = emDS.TaskProgressT("1");//.extraMove(d1, d2);

// ReportDataSource rds = new ReportDataSource("extraMove", ret.ToArray());

// this.reportViewer1.LocalReport.DataSources.Add(rds);

//this.reportViewer1.LocalReport.ReportPath = replace;

this.reportViewer1.LocalReport.ReportEmbeddedResource = "NavisReportLoader.App_Data.ReportExtraMove.rdlc";

this.reportViewer1.LocalReport.SetParameters(param);

this.reportViewer1.RefreshReport();

}

private void reportViewer1_Load(object sender, EventArgs e)

{

}

}

}

Cod sursa account details:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TimeSpent

{

public partial class FormEditAccountSettings : Form

{

public Employee loggedEmployee;

public FormEditAccountSettings()

{

InitializeComponent();

}

private void FormEditAccountSettings_Load(object sender, EventArgs e)

{

tbName.Text = loggedEmployee.Name;

tbEmail.Text = loggedEmployee.Email;

tbCurrentPassword.Text = tbNewPassword.Text = tbConfirmPassword.Text = "";

}

private void btnLogin_Click(object sender, EventArgs e)

{

try

{

if (tbName.Text.Length < 5)

{

MessageBox.Show("name is too short");

tbName.Focus();

return;

}

if (tbEmail.Text.Length < 5)

{

MessageBox.Show("email is too short");

tbEmail.Focus();

return;

}

if (!IsValidEmail(tbEmail.Text))

{

MessageBox.Show("email is invalid");

tbEmail.Focus();

return;

}

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

Employee employee = dc.Employees.FirstOrDefault(x => x.EmployeeId == loggedEmployee.EmployeeId);

if (employee != null)

{

employee.Name = tbName.Text;

employee.Email = tbEmail.Text;

if (tbCurrentPassword.Text.Length > 0)

{

if (tbCurrentPassword.Text.Length == 0)

{

MessageBox.Show("password is too short");

tbCurrentPassword.Focus();

return;

}

if (tbNewPassword.Text.Length < 5)

{

MessageBox.Show("password is too short");

tbNewPassword.Focus();

return;

}

if (tbConfirmPassword.Text.Length < 5)

{

MessageBox.Show("password is too short");

tbConfirmPassword.Focus();

return;

}

if (tbNewPassword.Text != tbConfirmPassword.Text)

{

MessageBox.Show("passwords do not match");

tbConfirmPassword.Focus();

return;

}

if (tbCurrentPassword.Text != employee.Password)

{

MessageBox.Show("the password is not correct");

tbNewPassword.Focus();

return;

}

employee.Password = tbNewPassword.Text;

}

dc.SubmitChanges();

}

Close();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

bool IsValidEmail(string email)

{

try

{

var addr = new System.Net.Mail.MailAddress(email);

return addr.Address == email;

}

catch

{

return false;

}

}

}

}

Cod sursa detalii angajati:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TimeSpent

{

public partial class FormEditEmployeeDetails : Form

{

public Employee currentEmployee;

public Employee loggedEmployee;

public FormEditEmployeeDetails()

{

InitializeComponent();

}

private void FormEditEmployeeDetails_Load(object sender, EventArgs e)

{

cbTypes.DisplayMember = "Name";

cbTypes.ValueMember = "EmployeeTypeId";

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

cbTypes.Items.Clear();

foreach (EmployeeType type in dc.EmployeeTypes)

{

cbTypes.Items.Add(type);

}

if (currentEmployee == null)

{

tbName.Text = tbDetails.Text = tbEmail.Text = "";

cbTypes.SelectedIndex = 0;

}

else

{

tbName.Text = currentEmployee.Name;

tbDetails.Text = currentEmployee.Details;

tbEmail.Text = currentEmployee.Email;

cbTypes.Text=currentEmployee.EmployeeType.Name;

}

}

private void btnSave_Click(object sender, EventArgs e)

{

try

{

TimeSpentDCDataContext dc = new TimeSpentDCDataContext();

if (tbName.Text.Length < 5)

{

MessageBox.Show("name is too short");

tbName.Focus();

return;

}

if (tbDetails.Text.Length < 5)

{

MessageBox.Show("please enter more details");

tbDetails.Focus();

return;

}

if (!IsValidEmail(tbEmail.Text))

{

MessageBox.Show("email is invalid");

tbEmail.Focus();

return;

}

if (currentEmployee == null)

{

Employee employee = new Employee();

employee.CompanyId = loggedEmployee.CompanyId;

employee.Name = tbName.Text;

employee.Details = tbDetails.Text;

employee.Email = tbEmail.Text;

employee.IsDeleted = false;

employee.Password = "123";

employee.EmployeeTypeId = ((EmployeeType)cbTypes.SelectedItem).EmployeeTypeId;

employee.IsActive = false;

dc.Employees.InsertOnSubmit(employee);

}

else

{

Employee employee = dc.Employees.FirstOrDefault(x => x.EmployeeId == currentEmployee.EmployeeId);

employee.Name = tbName.Text;

employee.Details = tbDetails.Text;

employee.Email = tbEmail.Text;

employee.EmployeeTypeId = ((EmployeeType)cbTypes.SelectedItem).EmployeeTypeId;

}

dc.SubmitChanges();

Close();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

bool IsValidEmail(string email)

{

try

{

var addr = new System.Net.Mail.MailAddress(email);

return addr.Address == email;

}

catch

{

return false;

}

}

private void tbDetails_TextChanged(object sender, EventArgs e)

{

}

}

}

Formatare:

Justify, times roman , 12, line spacing: single

Similar Posts