Mendelova univerzita v Brně Provozně ekonomická fakulta
Modul pro podporu projekt0vého řízení Bakalářská práce
Vedoucí práce: Ing. Ondřej Popelka, Ph.D.
Michal Ševčík
Brno 2012
Rád bych vyjádřil poděkování panu Ing. Ondřeji Popelkovi, Ph.D. za cenné připomínky a odborné rady během vypracování bakalářské práce.
Prohlašuji, ţe jsem bakalářskou práci jsem vypracoval samostatně a uvedl v seznamu literatury všechny pouţité literární a odborné zdroje. V Brně dne 25. května 2012
__________________
Abstract This thesis aim to analyze possibilities of extending Task Manager software. Then choosing technology and integration of extensions to the system. In second part is to acquaint the reader with the basic concepts of project management. The third part describes the competitive solution tools for creating the project schedule. The fourth part focuses on specific design solutions and used technologies. The fifth part focuses on the small implementation details and the resulting diagram. Keywords Gantt chart, SVG, Task Manager, Project management.
Abstrakt Předmětem práce je analýza moţností rozšíření softwaru Task Manager. Následně zvolení technologií a začlenění daného rozšíření do systému. V druhé části je seznámení čtenáře se základními pojmy z oblasti projektového řízení. Třetí část práce popisuje konkurenční řešení nástrojů pro tvorbu harmonogramu projektu. Ve čtvrté části práce je pozornost zaměřena na návrh konkrétního řešení a pouţité technologie. Pátá část je zaměřena na drobné implementační detaily a výsledný diagram. Klíčová slova Ganttův diagram, SVG, Task Manager, Projektové řízení
Obsah
7
Obsah 1
2
3
4
Úvod a cíl práce
11
1.1
Úvod ......................................................................................................... 11
1.2
Cíl práce ................................................................................................... 11
Základní pojmy
13
2.1
Projekt ...................................................................................................... 13
2.2
Plánování ................................................................................................. 13
2.3
Plán projektu............................................................................................ 13
2.4
Harmonogram projektu........................................................................... 14
2.5
Metody síťové analýzy .............................................................................. 14
2.6
Aplikace Task Manager............................................................................ 15
Systémy s podporou sestavení harmonogramu projektu
17
3.1
Microsoft Project ..................................................................................... 17
3.2
Tom’s planner ..........................................................................................18
3.3
Gantto ...................................................................................................... 19
3.4
TeamGantt .............................................................................................. 20
Návrh řešení
21
4.1
Ganttův diagram ...................................................................................... 21
4.2
Popis systému pro implementaci diagramu ............................................ 21
4.3
Výběr zobrazovací technologie ............................................................... 22
4.4
Pouţité technologie ................................................................................. 24
4.5
Pouţité knihovny .................................................................................... 25
4.5.1 4.6
Databázové schéma pouţitých tabulek ................................................... 26
4.6.1 4.7
Raphaël.js ........................................................................................ 25 Popis tabulek ................................................................................... 26
PHP – class diagram ............................................................................... 30
4.7.1
Abstraktní třída ATask .................................................................... 30
4.7.2
Třída GanttTask ............................................................................... 31
4.7.3
Třída Gantt ...................................................................................... 32
4.8
Vstupní data ............................................................................................ 32
8
Obsah
4.9
Javascriptová část ....................................................................................33
4.9.1
Objekt tm_Gantt..............................................................................33
4.10 Vytvořený strom ......................................................................................34 5
Implementace
35
5.1
Desetinné zaokrouhlování ....................................................................... 35
5.2
Opakování řetězce ...................................................................................36
5.3 Vývojový diagram pro zjištění pozice úkolu při kolizi v Ganttově diagramu ........................................................................................................... 37 5.4
Ukázka kódu pro zjištění pozice úkolu při kolizi v Ganttově diagramu 38
5.5
Výsledný diagram ....................................................................................39
6
Závěr
40
7
Literatura
42
8
Přílohy
46
8.1
Přiloţené CD ........................................................................................... 46
8.2
Class diagram všech pouţitých tříd pro fungování modulu ................... 47
Obsah
9
10
Seznam obrázků
Seznam obrázků Obr. 1
Příklad uzlově ohodnoceného síťového grafu
15
Obr. 2
Logo aplikace Task Manager
15
Obr. 3
Ganttův diagram v programu MS Project
17
Obr. 4
Ukázka aplikace Tom’s planner
18
Obr. 5
Ganttův diagram v aplikaci Gantto
19
Obr. 6
Ganttův diagram v aplikaci TeamGantt
20
Obr. 7
Příklad Ganttova diagramu
21
Obr. 8
Princip fungování architektury MVC
22
Obr. 9
Schéma použitých tabulek s naznačenými vazbami
26
Obr. 10
Class diagram tříd Ganttova diagramu
30
Obr. 12 Vytvoření nové akce renderGantt() v controller TaskController a příslušného view taskGantt.tpl
35
Obr. 11 Vývojový diagram pro zjištění pozice úkolu v Ganttově diagramu
37
Obr. 12
39
Výsledný Ganttův diagram v aplikaci
Úvod a cíl práce
11
1 Úvod a cíl práce 1.1
Úvod
Téma projektového řízení je velmi aktuální, neboť se v dnešní době hojně vyuţívá ve všech druzích podniků. Řízení lidských zdrojů je jedním ze základních stavebních kamenů jakékoli společnosti, která chce uspět na trhu, IT společnosti nevyjímaje. Kvalitní řízení lidského potenciálu přináší nejen konkurenční výhodu, ale přispívá i k celkové spokojenosti a motivaci zaměstnanců. Stejně klíčovou roli hraje řízení lidských zdrojů také v projektovém řízení, kde jedním ze základních problémů je, jak správně přiřazovat zdroje na jednotlivé projekty. A pokud je aţ potud situace relativně jednoduchá a přímočará, začíná být komplikovaná, kdyţ potřebujeme adekvátně sdílet lidské zdroje napříč projekty v rámci našeho portfolia. [41] Projektové řízení slouţí ke koordinaci činností v rámci projektu a umoţňuje sledovat jeho aktuální stav a podle tohoto stavu jednat. Toto téma jsem si vybral proto, ţe při práci s více lidmi v týmu pouţíváme nástroje pro projektové řízení, většinou zahraniční. Zajímalo mě, jakým způsobem mohou být tyto aplikace tvořeny, jakým způsobem je moţné do nich navrhnout nějaké rozšíření a toto rozšíření implementovat. Většina těchto nástrojů ovšem nedisponovala moţností nějakého grafického zobrazení přehledu úkolů a proto jsem se rozhodl toto řešení do jiţ existující aplikace integrovat. Výsledné řešení by mělo být zobrazení úkolů v podobě přehledného harmonogramu a mělo by uţivatelům aplikace dát jasnější představu o tom, v jakém stavu se projekt aktuálně nachází, které úkoly nestíhají svůj termín dokončení nebo které jsou naopak napřed a na základě těchto informací koordinovat řízení projektu.
1.2
Cíl práce
Cílem práce je seznámení se s nástroji pro podporu projektového řízení. Na základě seznámení se s prostředím aplikace Task Manager od společnosti IT Park s.r.o. zhodnotit, vybrat a vytvořit vhodný modul, který graficky zobrazí harmonogram projektu. Následně toto řešení do aplikace Task Manager implementovat a otestovat.
12
Úvod a cíl práce
Základní pojmy
13
2 Základní pojmy 2.1
Projekt
Projekt je časově, finančně a zdroji ohraničená a ucelená sada činností a postupů, jejichţ výsledkem je vytvoření hmotného nebo nehmotného výstupu, či změna něčeho konkrétního. [25] Podle standardů a norem v managementu, jsou definice projektů týkajících se řízení projektů následující: Definice z normy ISO 10006: “Projekt je jedinečný proces sestávající z řady koordinovaných a řízených činností s daty zahájení a ukončení, prováděný pro dosažení cíle, který vyhovuje specifickým požadavkům, včetně omezení daných časem, náklady a zdroji.” [23] Definice ze standardu PMBOK: “Projekt je dočasné úsilí s cílem vytvořit unikátní produkt nebo službu.” [23] Kaţdý projekt se rozděluje do čtyř základních fází: 1. Zahájení (iniciace), 2. Plánovaní (definice), 3. Realizace (implementace), 4. Uzavření (předání). [24]
2.2 Plánování „Vrcholným úkolem podnikového řízení je určování konkrétních podnikových cílů, jejichž prostřednictvím má být dosažen konečný cíl, dlouhodobá maximalizace zisku, a formulace podnikové politiky, tj. ‚pochodové osy„, kterou musí podnik dodržet, aby tyto cíle co nejhospodárněji dosáhl.“ [30] Podstatou plánování je stanovení cílů a způsobu jejich dosaţení. V úvahu jsou přitom brány veškeré vnitřní a vnější faktory ovlivňující úspěšné dosaţení cílů. Před započetím rozsáhlejšího projektu je potřeba události vhodně naplánovat, tzn. zpracovat projekt. Je potřeba vědět co, kde, kdy, jak, kdo a za kolik. Cílem projektového managementu (někdy také projektového řízení) je tedy zajistit správný sled událostí vedoucí k dokončení projektu ve správném čase s dodrţením rozpočtu v poţadované kvalitě. [22]
2.3 Plán projektu Plán projektu je dokument, definující, jakým způsobem je projekt naplánován a jakým způsobem bude jeho realizace prováděna a kontrolována. Existuje mnoho vysvětlení, co je to plán projektu, např.:
14
Základní pojmy
Dle PMBOK: “Plán projektu je formální, schválený dokument, který se používá jako vodítko pro realizaci projektu a projektového řízení. Primárně se plán projektu používá na zdokumentování předpokladů a rozhodnutí, usnadnění komunikace mezi zúčastněnými stranami, a zdokumentování schváleného rozsahu, ceny a harmonogramu. Plán projektu může být pouze souhrnný nebo velmi podrobný.“ [4] Dle PRINCE2: “Plán projektu je prohlášení o tom, jak a kdy má být dosaženo cílů projektu tím, že definuje hlavní produkty, milníky, činnosti a zdroje potřebné na realizaci projektu.” [11] Projektový plán by měl obsahovat ideálně čtyři základní odpovědi na otázky, týkající se projektu a jeho řízení: Co? Co je cílem projektu a jak má vypadat výsledný produkt? Kdo? Kdo na realizaci projektu spolupracuje, jakým dílem a jaké budou jejich dílčí úkoly? Kdy? Jaký je harmonogram projektu? Jaké jsou krizové body při realizaci projektu? Jaký je časový rozsah projektu a jak vypadá jeho časová osa? Je průběţně plněn časový plán? Proč? Proč se projekt realizuje? [22]
2.4 Harmonogram projektu Dá se také nazvat časovým plánem projektu. Harmonogram dovoluje řadit činnosti projektu do jedné časové osy. Obsahuje jednotlivé činnosti, zobrazené podle svých návazností. Podává informace o plánovaném začátku a konci činnosti, a informace o jejich celkovém počtu. [36] Hlavní předností harmonogramů je jejich jednoduchost a přehlednost. Oproti tomu jejich negativní vlastností je, ţe nedávají moţnost sledovat jednotlivé činnosti v jejich vzájemných souvislostech. Harmonogram projektu je obvykle součástí plánu projektu. Harmonogram projektu se můţe během postupu vývoje projektu měnit. Je to přirozená a obvyklá změna při realizaci projektu. [12]
2.5
Metody síťové analýzy
Metoda síťové analýzy je skupina analytických metod, které se pouţívají v případě, kdy existuje několik vzájemně souvisejících prvků a je potřeba závislosti mezi těmito prvky graficky zobrazit. Pouţívají se zejména při řízení projektů. V tomto jsou jednotlivé prvky na sobě nejčastěji časově závislé. [6] Úzce s metodami síťové analýzy souvisí síťový graf. To je zobrazení závislostí v projektu grafickou formou. Síťové grafy staví na základě teorie grafů. Tyto síťové grafy se pouţívají dvěma způsoby:
Základní pojmy
15
Hranově ohodnocené – hrany reprezentují činnosti a uzly jejich návaznosti. Uzlově ohodnocené – uzly představují činnosti a hrany jejich návaznosti. [6]
Obr. 1
Příklad uzlově ohodnoceného síťového grafu
2.6 Aplikace Task Manager
Obr. 2
Logo aplikace Task Manager
Task Manager je aplikace od společnosti IT Park s.r.o., která je jedna z mála ryze českých řešení v oblasti task managementu (řízení úkolů). Task Manager pomáhá z pohledu managementu jednoduchým způsobem zadávat, plánovat a řídit úkoly přiřazeným členům projektu, sledovat vytíţenost a efektivitu jednotlivých pracovníků, odhadnout potřebný čas a případné překáţky pro dokončení úkolu a poskytovat přehled o rozpracovanosti jednotlivých úkolů. Z pohledu realizačních pracovníků pomáhá co nejjednodušeji a nejefektivněji reportovat stav práce bez odvádění pozornosti od práce. Pomáhá udrţo-
16
Základní pojmy
vat přehled nad všemi projekty a zakázkami (nad jejich úkoly) a efektivně komunikovat s Vašimi klienty ohledně rozpracovaných zakázek. Task Manager nabízí řadu funkcí, které pomáhají při realizaci projektů, zejména to jsou správce úkolů, prioritizace, evidence rozpracovanosti úkolů, time tracker (sledování času), analytické nástroje a statistiky, reporting, kalendář, správce projektů a správce uţivatelů. [10]
Systémy s podporou sestavení harmonogramu projektu
17
3 Systémy s podporou sestavení harmonogramu projektu Na české internetové scéně se mnoho hotových řešení s podporou sestavení harmonogramu nenachází. Pokud je ovšem okruh hledání rozšířen i na zahraniční scénu, lze nalézt namátkou několik řešení. Téměř u všech jsem nalezl konečnou grafickou reprezentaci harmonogramu pomocí Ganttova diagramu. Tato řešení mohou poslouţit pro zjištění výhod, nevýhod a různých vlastností, které poté mohou být v modulu vyřešeny jiţ během programování.
3.1
Microsoft Project
Jednou z moţností je desktopový software MS Project, který je součástí balíku MS Office. MS Project slouţí k podpoře projektového řízení, správě úkolů, správě zdrojů a zjišťování aktuálního stavu projektu. [16]
Obr. 3
Ganttův diagram v programu MS Project [29]
18
Systémy s podporou sestavení harmonogramu projektu
3.2 Tom’s planner Prvním zástupcem řešení pomocí internetového prohlíţeče je Tom’s planner [34]. Jedná se o aplikaci, která se ovládá technologií drag&drop, tudíţ správu celého diagramu lze provádět pouze pomocí myši. Vytvoření nového úkolu se provádí klikem pravého tlačítka do prostoru seznamu úkolů skrz poloţku „insert new row―. Nastavení doby trvání úkolu potom analogicky pravým klikem do prostoru kalendáře a volbou „insert new period―. Aplikace je i přesto trošku nepřehledná – zejména obsahuje spoustu obrázků bez popisků. Tam, kde se popisky nacházejí, nedávají moc smysl nebo není na první pohled hned jasné, co dané tlačítko provede za akci.
Obr. 4
Ukázka aplikace Tom’s planner
Systémy s podporou sestavení harmonogramu projektu
19
3.3 Gantto Velmi povedené řešení se skrývá pod názvem Gantto [7]. Kromě tvorby Ganttova diagramu opět formou drag&drop poskytuje i moţnosti jako realtime kolaboraci, zabezpečený přístup a zálohování, prezentaci projektu a kompatibilitu pro všechny prohlíţeče. Tato kompatibilita je z části zajištěna tím, ţe aplikace je flashová. Bohuţel se pouţití flashe odrazilo i na pohodlnosti a rychlosti aplikace. Při zvětšování/zmenšování rozsahu kalendáře nebo posouvání úkolu po časové ose se aplikace nepříjemně seká a obrazovka se dlouho překresluje.
Obr. 5
Ganttův diagram v aplikaci Gantto
20
Systémy s podporou sestavení harmonogramu projektu
3.4
TeamGantt
Jako nejlepší řešení této problematiky jsem našel aplikaci TeamGantt [31]. Aplikace je napsána v HTML a Javascriptu a je velmi rychlá a plynulá. Tvorba nových úkolů probíhá kliknutím na zelený znak +. Přitom se dá vybrat, jestli se jedná třeba o skupinu nebo o mezní bod. Ke kaţdému úkolu se navíc dají psát poznámky či přikládat přílohy. Přiřazení úkolu probíhá najetím myši na daný úkol v kalendáři, poté se napravo od úkolu zobrazí ikonka uţivatele. Po kliku na ni lze vybrat uţivatele, který úkol bude zpracovávat. Úkoly se potom dají elegantně filtrovat pomocí rolovací nabídky.
Obr. 6
Ganttův diagram v aplikaci TeamGantt
Návrh řešení
21
4 Návrh řešení Tento modul bude graficky zobrazovat harmonogram stavu projektu, do nějţ patří dílčí úkoly, přiřazené jednotlivým zaměstnancům. Pro tento typ harmonogramu je nejtypičtějším zástupcem Ganttův diagram. [5] Data z Task Manageru vyhovovala tomu, aby se z nich dal vytvořit Ganttův diagram. Vzhledem k jeho účelu je vhodným řešením a bude proto pouţit pro grafické zobrazení harmonogramu projektu. [5]
4.1
Ganttův diagram
Ganttův diagram je grafické znázornění naplánované posloupnosti činností v čase. Nejčastěji se pouţívá při plánování a monitorování úkolů v projektu nebo při tvorbě plánu a diskuzi nad stavem projektu. [1] Ve sloupcích se zobrazuje časové období, ve kterém je plánováno. V řádcích se potom zobrazují jednotlivé úkoly v pořadí, které odpovídá jejich naplánovanému sledu v projektu. Délka úkolu je potom vztaţena ke sloupcům (časovému období) diagramu. V praxi se pouţívá jednoduchá forma Ganttova diagramu pro grafické znázornění činností v rámci projektu v čase. Sloţitější formy Ganttova diagramu zobrazují i návaznosti projektů (kapacitní, věcné, technologické). [26]
Obr. 7
Příklad Ganttova diagramu
4.2 Popis systému pro implementaci diagramu Systém Task Manager je webová aplikace. Aplikace je napsána v jazyce PHP a vyuţívá databázi MySQL pro uchovávání dat. Uţivatelské prostředí je vytvořeno v jazyce HTML a CSS s pouţitím šablonovacího systému Smarty. V systému
22
Návrh řešení
Task Manager je pouţit Javascript – pro zobrazování poloţek v menu, zobrazení úkolů, filtrování v přehledu úkolů nebo například pro otevření modálního okna při přidávání nebo editaci úkolu. Aplikace pro svůj běh vyţaduje zapnutý Javascript v prohlíţeči. Systém Task Manager je z části postaven na architektuře MVC. Model MVC je architektura, která rozděluje aplikaci do tří nezávislých vrstev: [17] Model – vrstva starající se o komunikaci s databází a předávání dat do Controlleru, View – vrstva starající se o zobrazení dat z Controlleru a o interakci s uţivatelem, Controller – vrstva starající se o získání dat z modelu a jejich předání do View.
Obr. 8
Princip fungování architektury MVC [32]
Při implementaci modulu tedy bude zapotřebí vyuţití všech tří vrstev architektury aplikace. Výsledek bude přitom uţivateli prezentován pomocí nového View a vytvoření nového Controlleru nebo příslušné obsluţné akce do Controlleru.
4.3 Výběr zobrazovací technologie Vybíral jsem mezi čtyřmi moţnostmi vykreslení zvoleného diagramu: pomocí obrázku vytvořeného v jazyce PHP, pomocí HTML a CSS a Javascriptu,
Návrh řešení
23
pomocí Javascriptu a SVG. Pomocí Javascriptu a HTML5 Canvas. Ad 1) Výhodou tohoto řešení by byla přenositelnost. Pokud by se diagram vykresloval pomocí obrázku vytvořeného v PHP, určitě by se na různých operačních systémech, na různých prohlíţečích a na různých rozlišeních zobrazoval naprosto stejně. Nevýhodou ale zůstává fakt, ţe výsledné řešení by byl statický obrázek. Tím by bylo znemoţněno přidání jakékoliv interakce – například zobrazování atributu title, animace v grafech apod. Druhou podstatnou nevýhodou by byla reţie serveru. Obrázek by se při kaţdém poţadavku musel rekonstruovat pomocí PHP a následně posílat klientovi. To by mělo dopad na rychlost zobrazení diagramu a na velikost přenesených dat. Ad 2) Co se týče reţie serveru a velikosti přenesených dat, je řešení pomocí HTML a CSS schůdnější. HTML kód by byl sice stále generován na straně serveru, ale konečná reprezentace HTML kódu uţ je v reţii prohlíţeče. Výhodou by bylo zajištění jisté podpory pro rozsáhlejší interakci za pomocí Javascriptu. V CSS není moţné jednoduše vytvářet sloţitější geometrické tvary. Pro tento účel jsou navrţeny technologie SVG A HTML5 Canvas, ve kterých se nachází kreslící plátno, na které je moţno vytvářet libovolné geometrické prvky. Oproti SVG nebo Canvasu by navíc nebylo moţné ani vykreslovat 3D prvky. Při případných budoucích úpravách by se nezaučená osoba velice špatně orientovala ve zdrojových kódech. Ad 3) Řešení pomocí Javascriptu a SVG se zdá jako nejlepší řešení co se týče reţie serveru, protoţe server se nestará o vykreslení obrázku, pouze klientovi předá vypočítaná data, která jsou zpracována aţ na straně klienta, stejně jako v případě HTML, CSS a Javascriptu. Další výhodou je jednoduchost vykreslení. V PHP se pouze zpracují data a ty se pošlou klientovi, kde se o vykreslení postará prohlíţeč za pomocí Javascriptu a technologie SVG. Prohlíţeč můţe obdrţet data ve formátu SVG nebo JSON. SVG elementy jsou vektorové, mají tedy výhodu, ţe při přiblíţení či oddálení stránky se této změně přizpůsobí. SVG je také vhodnější pro vykreslování grafů oproti HTML5 Canvas. [18] Ad 4) Canvas je rozhraní umoţňující dynamicky generovat a vykreslovat grafiku, grafy, obrázky a animace. Canvas je v zásadě bitmapové plátno a obrázky na něm nakreslené jsou tím pádem finální a není moţné měnit jejich atributy (velikost, barva, pozice, …) tak, jak je to moţné u obrázku SVG. Objekty nakreslené na plátno navíc nejsou součástí modelu DOM stránky, ani ţádného jmenného prostoru, coţ se povaţuje za slabinu. [14] Výkon HTML5 Canvas je při malém počtu objektů niţší, neţ u SVG. Degradace výkonu SVG nastává aţ při větším počtu prvků (řádově stovky). HTML5 Canvas ztrácí výkon při zvětšování plátna, které u Ganttova diagramu můţe být velice široké (časově náročný projekt). Pro Ganttovy diagramy je vhodnější technologie SVG. [28] Na základě výše zmíněných kladů a záporů byly k vykreslení Ganttova diagramu vybrány technologie SVG a Javascript. Díky těmto technologiím bude
24
Návrh řešení
snadné Ganttův diagram v budoucnu upravovat, případně obohacovat o nové doplňky.
4.4 Použité technologie Jako hlavní programovací jazyk aplikace a modulu je pouţito PHP. PHP [21] (PHP: Hypertext preprocessor) je skriptovací programovací jazyk. Pouţívá se především pro tvorbu internetových aplikací. Nativně podporuje mnoho databázových systémů. Pouţít lze však i pro tvorbu konzolových aplikací a pro tvorbu desktopových aplikací. PHP je jazyk interpretovaný (existuje také kompilovaná verze) a poţadavky se zpracovávají na straně serveru. K uţivateli jsou zpět posílány pouze výsledky. PHP je multiplatformní a lze jeho skripty přenášet mezi operačními systémy. Nevýhodou PHP je, ţe při kaţdém poţadavku se aplikace spouští znovu (neudrţuje si kontext), coţ můţe aplikaci zpomalit. Data aplikace Task Manager jsou uloţena v databázi MySQL. MySQL je relační, multiplatformní databázový systém. [19] Komunikace s databází probíhá prostřednictvím jazyka SQL. Díky své jednoduché implementovatelnosti, výkonu a volně šiřitelné licenci se MySQL stalo jedním z velice oblíbených datových úloţišť pro tvorbu aplikací vyuţívajících databáze. Základním stavebním kamenem MySQL databáze jsou tabulky. Řádky těchto tabulek lze chápat jako entity a některé jejich sloupce (atributy) jako cizí klíče. Ty uchovávají informace o vztazích k jiným tabulkám. [9] Nezbytnou součástí aplikace i samotného diagramu je Javascript. Javascript (JS) je prototypově zaloţený, slabě typový, dynamický skriptovací jazyk. Javascript je hlavně pouţíván ve formě skriptů na straně uţivatele, implementovaný jako součást webového prohlíţeče pro zajištění rozšířených uţivatelských rozhraní a dynamických webových stránek. [13] Jako poslední technologie v aplikaci je pouţito SVG (Scalable Vector Graphics) [39], jedná se o škálovatelnou vektorovou grafiku. SVG je aplikací XML pro dvourozměrnou a trojrozměrnou vektorovou grafiku. SVG specifikace je otevřený standard, vyvíjen konsorciem W3C od roku 1999. [33] Obrázky SVG a jejich chování je definováno v textových souborech formátu XML. Znamená to, ţe mohou být vyhledávány, indexovány a v případě potřeby komprimovány. K vytvoření takového souboru postačí obyčejný textový editor. Existuje samozřejmě celá řada vektorových aplikací, ve kterých je moţné SVG objekty kreslit jednoduše pomocí myši a nastavováním atributů v panelech. Plnou nebo alespoň částečnou podporu SVG mají v dnešní době všechny majoritní prohlíţeče a mohou SVG obrázek vykreslit přímo (zahrnuje Mozilla Firefox, Internet Explorer, Google Chrome, Opera, Safari). Dřívější verze Internet Exploreru nativně formát SVG nepodporují, lze však doinstalovat plugin, který umoţní se SVG pracovat.
Návrh řešení
25
Základní typy objektů v SVG: Vektorové tvary (obdélník, mnohoúhelník, kruţnice, elipsa, lomená čára, úsečka, křivka) Textové objekty Rastrové obrazy Všechny objekty těchto tří skupin lze seskupovat a formátovat pomocí kaskádových stylů (CSS) nebo atributů objektů a polohovat je. SVG podporuje skriptování (Javascript), ořezávání obrazů, alfa kanál (průhlednost objektu) a filtraci obrazu (konvoluce, displacement mapping a další).
4.5 Použité knihovny 4.5.1 Raphaël.js Raphaël je knihovna napsaná v Javascriptu, která zjednodušuje práci s vektorovou grafikou na internetových stránkách. Raphaël pouţívá SVG standardy W3C a VML jako základ pro tvorbu grafiky. Hlavním cílem knihovny Raphaël.js [2] je poskytnout jednoduché a jednotné rozhraní pro tvorbu vektorové grafiky s podporou pro všechny majoritní internetové prohlíţeče. Momentálně knihovna Raphaël.js podporuje prohlíţeče Firefox 3.0+, Safari 3.0+, Chrome 5.0+, Opera 9.5+ a Internet Explorer 6.0+. Raphaël.js je základním stavebním pilířem pro vykreslování diagramu v aplikaci Task Manager. Ukázka kódu // Vytvoření kreslícího plátna o rozměrech 320px × 200px na pozici 10px a 50px (10px shora a 50px zleva od levého horního rohu) var paper = Raphael(10, 50, 320, 200); // Vytvoření kruhu na pozici x = 50px, y = 40px, s poloměrem 10px var circle = paper.circle(50, 40, 10); // Nastavení atributu výplně na červenou barvu (#f00) circle.attr("fill", "#f00"); // Nastavení atributu okraj na bílou barvu circle.attr("stroke", "#fff");
26
Návrh řešení
4.6 Databázové schéma použitých tabulek
Obr. 9
Schéma pouţitých tabulek s naznačenými vazbami
Pro vytvoření modulu pro podporu projektového řízení bylo zapotřebí pouţít šest databázových tabulek z aplikace Task Manageru. Všechny tabulky pouţívají datové úloţiště InnoDb. Jedná se o transakční úloţiště a od verze MySQL 5.0 je InnoDb jediné původní úloţiště, které podporuje cizí klíče a uzamykání na úrovni řádku. [27] 4.6.1 Popis tabulek Všechny tabulky v databázi začínají s prefixem tm_*, tento prefix je však volitelný.
Návrh řešení
27
Tabulka tm_item Nejdůleţitější tabulka v Modulu pro podporu projektového řízení a pravděpodobně jedna z nejdůleţitějších tabulek celé aplikace vůbec. Tabulka shromaţďuje informace o všech existujících úkolech (tasks) v aplikaci. Seznam sloupců tabulky s popisy (v první odráţce se nachází sloupce, které nepotřebují komentář, resp. nejsou potřeba pro vykreslení Ganttova diagramu): itemRootId, showPrivate, deadlineNotificationId, deadlineNotificationSent, flag, mailUnassigned, slaId, showInCalendar, created, finishedDate, authorId, deleted, groupId itemId – unikátní identifikátor záznamu projectId – identifikátor projektu, ke kterému je úkol (task) přiřazen, vazba 1:N itemParentId – identifikátor nadřazeného úkolu (rodiče) priority – priorita úkolu, číslováno jako pořadové čísla – tj. priorita 1 je nejvyšší prioritou contextId – identifikátor kontextu, do kterého úkol přísluší (Analýza, Vývoj, Testování…) title – název úkolu description – detailnější popis úkolu deadlineDate – nejzazší termín dokončení úkolu, volitelné expectedDuration – očekávaná doba trvání (pracnost) úkolu, v hodinách memberId – identifikátor uţivatele, kterému byl daný úkol přiřazen ke zpracování assignedDate – datum přiřazení úkolu uţivateli, který úkol zpracovává stateId – identifikátor stavu úkolu
28
Návrh řešení
Tabulka tm_member Tabulka evidující všechny uţivatele systému Task Manager. Rovněţ jedna z nejdůleţitějších tabulek celého systému. Tabulka obsahuje několik pomyslných skupin atributů: Skupinu atributů zaznamenávajících přihlašovací jméno, hash hesla (otisk), email. Skupinu atributů zaznamenávající aktivitu uţivatele. Jedná se o datum posledního přihlášení, datum poslední úpravy účtu, datum vytvoření účtu a datum expirace účtu. Skupinu atributů zaznamenávající osobní údaje o uţivateli – jméno, prostřední jméno, příjmení, bydliště, kontaktní informace. Skupinu atributů s obecnými informacemi o uţivateli Skupinu atributů s údaji o bankovním účtu – číslu účtu, kódu banky, IBAN kód. Skupinu atributů pro nastavení aplikací třetích stran. Popis sloupců tabulky důleţitých pro modul: memberId – unikátní identifikátor uţivatele firstName – křestní jméno uţivatele middleName – prostřední jméno uţivatele lastName – příjmení uţivatele workingHoursNum – kolik hodin můţe uţivatel denně pracovat na úkolech v aplikaci Task Manager (v modulu pouţito v některých případech pro odhad doby trvání úkolu) Tabulka tm_dayoff Tabulka slouţí pro evidenci absencí zaměstnanců. Pro kaţdý den absence zaměstnance je nutno vytvořit jeden záznam do tabulky. Popis sloupců tabulky: memberId – identifikátor uţivatele, který v daný den nebude pracovat dayOffDate – datum, kdy uţivatel nebude pracovat type – typ (důvod) absence, např. dovolená nebo nemoc Tabulka tm_state Tabulka tm_state slouţí k definování moţných stavů dokončenosti, v kterých se dané úkoly mohou nacházet.
Návrh řešení
29
Popis sloupců tabulky: stateId – unikátní identifikátor stavu úkolu name – název stavu priority – priorita stavu Tabulka tm_project Tabulka tm_project slouţí k evidenci všech projektů v systému Task Manager. Popis sloupců tabulky: projectId – unikátní identifikátor projektu name – název projektu description – popis projektu deadLine – nejzazší termín dokončení projektu
30
Návrh řešení
4.7
Obr. 10
PHP – class diagram
Class diagram tříd Ganttova diagramu
Diagram tříd patří do skupiny diagramů struktur. Zobrazuje statický pohled na systém, tj. zejména třídy (class) jako typy objektů, obsah tříd a statické vztahy, které mezi nimi existují. [20] Modul pro podporu projektového řízení se v PHP sestává ze tří tříd – Atask, GanttTask a Gantt. Class diagram všech pouţitých tříd pro fungování modulu se nachází v příloze 8.1. 4.7.1 Abstraktní třída ATask Abstraktní třída ATask je společným předkem pro třídy Gantt a GanttTask. Je tomu tak proto, ţe třída Gantt je sama o sobě kontejnerem úkolů (pouze kořenových) a třída ATask poskytuje právě metodu pro přidávání úkolů – jedná se o metodu ATask::addTask(). Úkoly jsou uloţeny v členském poli ATask::$tasks. Třída ATask obsahuje následující vlastnosti: $tasks – pole s podřízenými úkoly $index – počítadlo indexů úkolů
Návrh řešení
31
Třída ATask obsahuje následující metodu: addTask(GanttTask $task, Gantt $gantt) – přidání úkolu do stromu, tato metoda je volána rekurzivně Proměnná $index ve třídě GanttTask je přidána kvůli JSON parseru. Úkoly jsou do stromu přidávány v určitém pořadí. Pokud by místo indexu vypočítaného z počítadla byl jako index přiřazován identifikátor úkolu, výstupem by byly například indexy 5, 1 a 6. JSON parser bohuţel povaţuje tyto indexy jako pořadové a objekty seřadí vzestupně, tj. 1, 5, 6 a strom by se vykreslil ve špatném pořadí. Pokud je pouţito řešení s počítadlem, tak úkoly s identifikátory 5, 1 a 6 jsou reprezentovány indexy 1, 2, 3 a jsou vykresleny ve správném pořadí. 4.7.2 Třída GanttTask Třída GanttTask je základním stavebním kamenem Ganttova diagramu. Kaţdý úkol je reprezentován jednou instancí třídy GanttTask. Tato třída přebírá pouze nejdůleţitější atributy třídy TaskObject, které jsou následně v konstruktoru aktualizovány za účelem korektní reprezentace úkolu v diagramu s ohledem na své závislosti. Třída GanttTask obsahuje následující vlastnosti: $weekDays – pokud úkol zasahuje do sobot a neděl, je tato informace zaznamenána v tomto poli, pomocí kterého se potom připočítávají dny do dalšího týdne. Jeden úkol můţe zasahovat i do více víkendů. $dayOffs – pole zaznamenávající, které pracovní dny zpracovatel nemůţe na úkolu pracovat, délka úkolu se potom o počet těchto dnů prodlouţí. $id – unikátní identifikátor úkolu $title – název úkolu $description – popis úkolu $memberWorkingHoursNum – počet hodin zpracovávajícího uţivatele, které můţe práci denně věnovat. $assigned_date – datum přiřazení ve formátu unix timestamp $deadline_date – datum dokončení ve formátu unix timestamp $completed – hodnota udává, kolik procent úkolu je hotovo $priority – priorita úkolu $memberId – identifikátor zpracovávajícího uţivatele $member – jméno a příjmení zpracovávajícího uţivatele $contextColor – barva úkolu určená kontextem, do kterého úkol patří $parentId – identifikátor rodiče úkolu $level – úroveň zanoření úkolu
32
Návrh řešení
Třída GanttTask obsahuje následující metody: __construct(TaskObject $task, ATask $parent, $level) – konstruktor objektu, jako vstup dat slouţí objekt TaskObject ze systému Task Manager, reprezentující jednu instanci úkolu, rodiče úkolu a úroveň zanoření checkWeekDays() – kontrola, jestli daný úkol zasahuje do sobot či neděl computeDeadline() – vypočítání doby trvání úkolu updateDeadlineDueToWeekends() – prodlouţení trvání úkolu, pokud zasahuje do víkendu a není nastaven do víkendu explicitně skipOffDays()- prodlouţení trvání doby úkolu na základě pole $offDays 4.7.3 Třída Gantt Třída Gantt je hlavní kontejner všech úkolů. Kromě uchovávání úkolů kontroluje počáteční a koncové datum celého projektu a obsahuje proměnnou s počtem všech úkolů. Třída Gantt obsahuje následující vlastnosti: $time_ranges – pole zaznamenávající počátek a konec projektu $ tasksByUser – pole zaznamenávající všechny úkoly indexované podle identifikátoru uţivatelů $projectDeadline – obsahuje datum deadlinu projektu, pokud je nastaven $staticCounter – celkový počet úkolů v diagramu Třída Gantt obsahuje následující metody: __construct(array $tasks, $currentUser) – konstruktor objektu, jeho argumentem je pole objektů TaskObject a aktuální uţivatel updateTimeRanges(GanttTask $task) – aktualizace pole zaznamenávajícího počátek a konec projektu
4.8 Vstupní data Třída Gantt přebírá jako argument ve svém konstruktoru pole objektů TaskObject. Třída TaskObject je v systému TaskManager třída reprezentující jednu instanci úkolu. Obsahuje celkem 49 atributů, pro vytvoření diagramu je potřeba jen jejich část. Objekty TaskObject jsou předávány konstruktoru třídy GanttTask a následně je celý nový objekt vloţen jako parametr do metody ATask::addTask().
Návrh řešení
33
To znamená, ţe Ganttův diagram následně pracuje s objekty GanttTask, které nově reprezentují úkoly bez zbytečných vlastností navíc.
4.9 Javascriptová část 4.9.1 Objekt tm_Gantt Objekt tm_Gantt v Javascriptu je objekt starající se o vykreslení celého Ganttova diagramu. Vyuţívá metody knihovny Raphaël.js pro efektivní práci se SVG. Objekt tm_Gantt obsahuje následující vlastnosti: listContainer.(width, height) – výška a šířka obdélníku pro vykreslení názvů úkolů taskContainer.(width, height) – výška a šířka obdélníku pro vykreslení úkolů margin.(top, bottom, left, right) – odsazení všech stran plátna od ostatních objektů rowPointer – ukazatel na aktuální řádek, na kterém se bude vykreslovat titulek úkol scale – měřítko diagramu Objekt tm_Gantt obsahuje následující metody: Náhled výsledného grafu, který vypsané funkce generují je k nahlédnutí v kapitole 5.5.
daySize() – funkce pro vrácení šířky dne podle měřítka width () – funkce pro vrácení šířky plátna se započítáním měřítka height() – funkce pro vrácení výšky plátna se započítáním měřítka renderTasks (data, timeRanges, depth) – funkce na vykreslení úkolů určité úrovně, volaná rekurzivně row() – funkce vrací výšku a pozici vykreslení daného úkolu rowHeight() – funkce pro výpočet výšky řádku taskContainer.(getXPosition(), getYPosition()) – funkce pro vrácení pozice levého horního rohu obdélníku s úkoly draw.task() – metoda pro vykreslení obdélníku úkolu draw.dayLines() – metoda pro vykreslení vertikálních linií jednotlivých dnů, přes které se projekt rozprostírá draw.label() – metoda pro vykreslení popisu úkolu draw.actualTimeLine() – metoda pro vykreslení červené vertikální linie znázorňující aktuální čas draw.coverWeekend() – metoda pro vykreslení šrafování přes období víkendu
34
Návrh řešení
draw.projectDeadlineLine() – metoda pro vykreslení vertikální linie deadlinu projektu
4.10 Vytvořený strom Vypsáním proměnné Gantt::$tasks lze získat následující strom vytvořený z objektů GanttTask s následující strukturou. Pole je indexováno podle indexů z počítadla. Hodnotou kaţdého indexu je objekt GanttTask. Na příkladu je zřejmé, ţe v sestaveném stromu jsou do sebe třídy GanttTask (resp. úkoly) zanořovány. K tomu je pouţita členská proměnná $tasks. Počet úrovní zanoření je neomezený. Tuto funkčnost poskytuje jiţ zmíněná abstraktní třída ATask. array(n) { task_index => GanttTask(19) { tasks => array(y) { array(n) { task_id_n => GanttTask(19) { ... } } } weekDays => int[] extendDuration => bool dayOffs => int[] index => int id => int title => string description => string memberWorkingHoursNum => int assigned_date => int deadline_date => int completed => int priority => int memberId => int member => string parentId => int level => int } }
Implementace
35
5 Implementace
Obr. 12 Vytvoření nové akce renderGantt() v controller TaskController a příslušného view taskGantt.tpl
Jak bylo zmíněno v návrhu řešení, bylo pro implementaci diagramu do aplikace Task Manager potřeba vytvořit novou akci (čili metodu) renderGantt() v presenteru TaskController. V této metodě je objekt Gantt inicializován a předán do view vrstvy reprezentované souborem taskGantt.tpl. V tomto souboru se o vykreslení diagramu jiţ postará Javascript. Class diagram by při implementaci v jiném programovacím jazyce vypadal stejně, tato moţnost zde z praktických důvodů odpadá, protoţe programovací jazyk je předem dán a data by se musela mezi platformami sloţitě přenášet. Javascriptový objekt Gantt by byl stejný i v případě pouţití jiného frameworku pro práci s elementy SVG. Objekt Gantt jen rozděluje zpracování vytvořeného stromu do menších logických celků - funkcí. Mírně by se lišila těla těchto funkcí, ale to je při pouţití jiné knihovny samozřejmost.
5.1
Desetinné zaokrouhlování
Při vykreslování diagramu bylo potřeba některé hodnoty zaokrouhlovat směrem dolů s přesností na desetiny, setiny nebo desetitisíciny. Funkce Math.round() v Javascriptu bohuţel zaokrouhluje pouze na celá čísla, takţe jsem našel [37] a
36
Implementace
mírně upravil funkci na zaokrouhlování směrem dolů i s přesností na n desetinných míst. Math.roundP = function(number, precision) { precision = Math.abs(parseInt(precision)) || 0; var coefficient = Math.pow(10, precision); return Math.round(number * coefficient)/coefficient; }
5.2
Opakování řetězce
Javascript v základu nedisponuje funkcí pro opakování řetězce. Při vypisování zanoření úkolů v seznamu je pouţito opakování znaku pomlčky, proto ideálním řešením bylo rozšíření přímo objektu String o vlastní metodu. Metoda String.repeat(num) vytvoří prázdné pole o num + 1 prázdných prvcích a spojí tyto prvky řetězcem, na kterém byla funkce String.repeat(num) volána. String.prototype.repeat = function( num ) { return new Array( num + 1 ).join( this ); }
Implementace
5.3
37
Vývojový diagram pro zjištění pozice úkolu při kolizi v Ganttově diagramu
Obr. 11
Vývojový diagram pro zjištění pozice úkolu v Ganttově diagramu
38
Implementace
5.4 Ukázka kódu pro zjištění pozice úkolu při kolizi v Ganttově diagramu memberId] as $toCompare) { // prvek se nekontroluje sám se sebou if ($this->id != $toCompare->id) { $deadlines[] = $toCompare->deadline_date; // prochází se pouze prvky, které jsou napravo od aktuálního úkolu if ($this->deadline_date < $toCompare->assigned_date) { // procházení prvků, vůči kterým se bude zjišťovat prostor pro úkol foreach (Gantt::$tasksByUser[$this->memberId] as $toCompareAgaints) { // $toCompareAgainst musí začínat později, $než toCompare končí if ($toCompareAgaints->assigned_date > $toCompare->deadline_date) { // je mezera dostatečně velká pro vložení úkolu? if ($duration <= ($toCompareAgaints->assigned_date - $toCompare>deadline_date) ) { // pokud ano, uloží se datum do pole $possibleDates[] = $toCompare->deadline_date; } } } } } // pokud je nalezena mezera (nebo více mezer) v diagramu, použije se ta nejdřívější if (!empty($possibleDates)) { $this->assigned_date = min($possibleDates); $this->deadline_date = $this->assigned_date + $duration; } else { $this->assigned_date = max($deadlines); $this->deadline_date = $this->assigned_date + $duration; } } } ?>
Implementace
5.5
Obr. 12
39
Výsledný diagram
Výsledný Ganttův diagram v aplikaci
Popis výsledného diagramu: 1 2
3
4
5 6 7
V levém sloupci diagramu jsou vypsány jména účastníků a názvy úkolů, v hranaté závorce za názvem úkolu je potom priorita úkolu. Bod 2 ukazuje grafické znázornění úkolů. Zobrazené úkoly mají délku podle své vypočítané délky trvání a barvu kontextu, do kterého jsou zařazeny. V horní třetině úkolu se zobrazuje tmavě šedý obdélník, který naznačuje, jak velká část úkolu je hotova. Nad úkoly jsou vypsána data v rozmezí od začátku do konce projektu doprovázená tečkovanými svislými liniemi, které ohraničují rozmezí jednoho dne. Soboty a neděle jsou vybarveny červeně. Červená vertikální linie se zobrazuje v místě aktuálního data a času – v aplikaci bliká s vteřinovým intervalem. Aby byl ideálně splňován časový plán projektu, měly by všechny tmavě šedé ukazatele dokončenosti úkolu z bodu 2 být zároveň s červenou linií nebo před ní. Bod 5 na obrázku vypisuje informace o začátku projektu, předpokládaném konci projektu a skutečném konci projektu. Období sobot a neděl je vyšrafováno černými diagonálními liniemi, které naznačují nepracovní období. Tučná červená linie zobrazuje zadaný deadline projektu, pokud je zadán. Z diagramu je potom moţné vyčíst, zda je splňován časový plán.
Diagram je pomocí proměnné Gantt.scale (měřítko) v Javascriptu moţno libovolně zvětšovat či zmenšovat, výchozí hodnota této proměnné je 1.5.
40
Závěr
6 Závěr Cílém práce bylo navrhnout a vytvořit rozšíření aplikace o vybranou techniku podpory projektového řízení pro aplikaci Task Manager. Po seznámení se s aplikací Task Manager z uţivatelského hlediska bylo potřeba seznámit se aplikacemi a nástroji s podporou sestavení grafického harmonogramu projektu. Všechny tyto řešení pouţívají pro zobrazení harmonogramu projektu Ganttův diagram. V Ganttově diagramu je velice jednoduché se orientovat a zhodnotit aktuální stav projektu. Proto byl na základě svého účelu, četnosti pouţití a dostupných dat z aplikace TaskManager vybrán jako harmonogram právě Ganttův diagram. Po seznámení se s aplikací Task Manager z uţivatelského hlediska bylo potřeba se seznámit s aplikací zevnitř, tj. z programového hlediska. Po analýze pouţitých technologií bylo vytvořeno několik variant s vytyčením kladů a záporů, pomocí nichţ by se vybraná technika dala implementovat. Jako vhodná varianta implementace byla vybrána moţnost implementace pomocí technologie Javascript a SVG. Javascript je vhodný z hlediska přenesení vykreslovacího procesu ze strany serveru na stranu klienta. SVG bylo vybráno pro svoji jednoduchost, rychlost a kompatibilitu mezi prohlíţeči. Pro vykreslení harmonogramu byly vytvořeny tři třídy v PHP a jeden objekt v Javascriptu, který vyuţívá knihovnu Raphaël.js. Na základě dostupných dat a pouţitých technologií byl vytvořen Ganttův diagram, který přehledně zobrazuje všechny úkoly projektu na časové ose. Kaţdý úkol má v popisu svůj název, jméno zpracovávající osoby a má barvu kontextu, do kterého byl přiřazen. V diagramu je vertikální blikající červená linie, která zobrazuje aktuální čas a datum a tučná červená linie zobrazující deadline projektu. Velice sloţitá operace v celé aplikaci se ukázala v místě, kde se počítá, na které pozici se bude daný úkol vykreslovat. Výpočet probíhá v několika krocích a zahrnuje hledání závislosti úkolu a nalezení případného volného místa v harmonogramu, kde by se dal úkol vykreslit, aby byl diagram co nejefektivnější. Doufám, ţe tento diagram pomůţe při pouţívání aplikace Task Manager projektovým manaţerům poskytovat lepší a jasnější představu o aktuálním stavu projektu a podle jeho výsledků do řízení projektu případně zasahovat.
Závěr
41
42
Literatura
7 Literatura [1] ASQ.com. Gantt Chart [online]. 2006 [cit. 2012-05-23]. Dostupné z: http://asq.org/learn-about-quality/project-planning-tools/overview/ganttchart.html [2] BARANOVSKIY, D. Raphaël—JavaScript Library. Raphaël [online]. 2012 [cit. 2012-05-13]. Dostupné z: http://raphaeljs.com/ [3] CADLE, J., YEATES, D. Project Management for Information Systems, 5th Edition. USA: Prentice Hall, 2007. 464 s. ISBN 0-132-06858-3. [4] DUNCAN, W., PMI Standards committee, director of standards. A guide to the project management body of knowledge. [1996 ed.]. Upper Darby, PA: Project Management Institute, 1995, viii, 176 p. ISBN 18-804-1013-3. [5] EDEN, J. Project management: How to use Gantt charts to plan complex projects. Helium.com [online]. 2011 [cit. 2012-05-23]. Dostupné z: http://www.helium.com/items/2175253-project-management [6] FRIEBELOVÁ, J. SÍŤOVÁ ANALÝZA [online]. 2006 [cit. 2012-05-22]. Dostupné z: http://www2.ef.jcu.cz/~jfrieb/rmp/data/teorie_oa/SITOVA%20ANALYZA .pdf [7]
GANTTO. Gantto http://gantto.com/
[online].
2011
[cit.
2012-05-19].
Dostupné
z:
[8] GROFF, J. R., WEINBERG, P. N. a kol. SQL : kompletní průvodce. 1. vyd. Brno: CP Books, 2005. 936 s. ISBN 80-251-0369-2. [9] HAUZAR, D. Tvorba databází v MySQL - I. In: Abclinuxu.cz [online]. 2003 [cit. 2012-05-13]. Dostupné z: http://www.abclinuxu.cz/clanky/navody/tvorba-databazi-v-mysql-i [10] IT PARK, s.r.o. Systém pro správu úkolů a času. TaskManager [online]. 2011 [cit. 2012-05-13]. Dostupné z: http://taskmanager.cz/ [11] KLUSOŇ, M. PRINCE2, nebo PMI?. SystemOnline [online]. 2010 [cit. 2012-05-22]. Dostupné z: http://www.systemonline.cz/sprava-it/prince2nebo-pmi.htm
Literatura
43
[12] HAUGHEY, D. Project Planning a Step by Step Guide. In: Project Smart [online]. 2008 [cit. 2012-05-22]. Dostupné z: http://www.projectsmart.co.uk/project-planning-step-bystep.html?comments_page=1 [13] KOSS, M. MCKOSS.COM. Object Oriented Programming in JavaScript [online]. 2006 [cit. 2012-05-21]. Dostupné z: http://mckoss.com/jscript/object.htm [41] KRKOŠKA, P. Alokace a řízení zdrojů napříč projekty IT společnosti [online]. Brno, 2011 [cit. 2012-05-23]. Dostupné z: http://is.muni.cz/th/172676/fi_m/thesis.pdf. Diplomová práce. Masarykova Univerzita. Vedoucí práce RNDr. Jaroslav Ráček, Ph.D. [14] LUBBERS, Peter, Brian ALBERS a Frank SALIM. HTML5: programujeme moderní webové aplikace. Vyd. 1. Brno: Computer Press, 2011, 304 s. ISBN 978-80-251-3539-6. [15] MCDONOUGH, M. Examples of Project Schedules. Bright Hub [online]. 2011 [cit. 2012-05-22]. Dostupné z: http://www.brighthub.com/office/projectmanagement/articles/49745.aspx [16] MICROSOFT. Microsoft. Project 2010 [online]. 2010 [cit. 2012-05-19]. Dostupné z: http://www.microsoft.com/project/en-us/projectmanagement.aspx [17] NETTE FOUNDATION. MVC aplikace & presentery [online]. [cit. 2012-0522]. Dostupné z: http://doc.nette.org/cs/presenters [18] MALÝ, M. SVG, nebo Canvas? Vyberte si. Zdroják.cz [online]. 2010 [cit. 2012-05-22]. Dostupné z: http://www.zdrojak.cz/clanky/svg-nebo-canvasvyberte-si/ [19] MYSQL. The world's most popular open source database [online]. 2012 [cit. 2012-05-13]. Dostupné z: http://www.mysql.com/ [20] PAVUS, M. MPavus. OO, UML, analýza, metodologie [online]. 2006 [cit. 2012-05-21]. Dostupné z: http://mpavus.wz.cz/
44
Literatura
[21] PHP Manual [online]. 2001 - 2012 [cit. 2012-05-13]. Dostupné z: http://us.php.net/manual/en/faq.general.php [22] PROJECT MANAGEMENT BASICS. Planning - Introduction - need to answer [online]. 2011 [cit. 2012-05-22]. Dostupné z: http://www.projectmanagementbasics.com/project_management_045_Planning_part_2.shtml [23] RIZENI-PROJEKTU.CZ. Co je projekt a jaké má vlastnosti [online]. 2005 [cit. 2012-05-22]. Dostupné z: http://rizeniprojektu.cz/view.php?cisloclanku=2005091201 [24] RIZENI-PROJEKTU.CZ. Ţivotní cyklus - fáze projektu [online]. 2005 [cit. 2012-05-22]. Dostupné z: http://rizeniprojektu.cz/view.php?cisloclanku=2005091901 [25] RIZENI-PROJEKTU.CZ. Co je projekt a jaké má vlastnosti [online]. 2005 [cit. 2012-05-22]. Dostupné z: http://rizeniprojektu.cz/view.php?cisloclanku=2005091201 [26] ROUSE, M. Gantt chart. SearchSoftwareQuality [online]. 2007 [cit. 201205-22]. Dostupné z: http://searchsoftwarequality.techtarget.com/definition/Gantt-chart [27] SCHWARTZ B., ZAITSEV P., TKACHENKO V., ZAWODNY, J., LENTZ A., BALLING, D., MySQL profesionálně: optimalizace pro vysoký výkon. Vyd. 1. Brno: Zoner Press, 2009, 712 s. Encyklopedie webdesignera. ISBN 978-80-7413-035-9. [28] SMUS, B. Performance of Canvas versus SVG [online]. 2009 [cit. 2012-0522]. Dostupné z: http://smus.com/canvas-vs-svg-performance/ [29] SOLUTIONS REALITY. Solutions Reality. Getting data from MS Project to TA [online]. 2008 [cit. 2012-05-19]. Dostupné z: http://www.solutionsreality.com/blog/?p=135 [30] SYNEK, M., KISLINGEROVÁ, E., Podniková ekonomika. 5., přeprac. a dopl. vyd. Praha: C.H. Beck, 2010, xxv, 445 s. Beckovy ekonomické učebnice. ISBN 978-80-7400-336-3.
Literatura
45
[31] TEAMGANTT. TeamGantt [online]. 2012 [cit. 2012-05-19]. Dostupné z: http://teamgantt.com/ [32] THE WORLD WIDE WENDLICK. MVC for Dummies [online]. 2012 [cit. 2012-05-22]. Dostupné z: http://www.endlick.com/mvc-for-dummies/ [33] TIŠNOVSKÝ, P. Vektorový grafický formát SVG. Root.cz [online]. 2007 [cit. 2012-05-13]. Dostupné z: http://www.root.cz/clanky/vektorovy-grafickyformat-svg/ [34] TOM'S PLANNER. Tom's Planner [online]. 2012 [cit. 2012-05-19]. Dostupné z: http://www.tomsplanner.com/ [35] UNFUDDLE LLC. Unfuddle: Software Project Management [online]. 2006 - 2012 [cit. 2012-05-19]. Dostupné z: https://unfuddle.com/ [36] UYTTEWAAL, E., WOOLF, M. What is a Project "Schedule"? [online]. 2011 [cit. 2012-05-22]. Dostupné z: http://www.projecttimes.com/articles/what-is-a-project-schedule.html [37] VEROU, L. Extend Math.round, Math.ceil and Math.floor to allow for precision. LEA VEROU [online]. 2009 [cit. 2012-05-23]. Dostupné z: http://lea.verou.me/2009/02/extend-mathround-mathceil-andmathfloor-to-allow-precision/ [38] VRÁNA, J., 1001 tipů a triků pro PHP: programování aplikací. Vyd. 1. Brno: Computer Press, 2010, 456 s. ISBN 978-80-251-2940-1. [39] W3C. Scalable Vector Graphics (SVG) 1.2. [online]. 2002 [cit. 2012-05-13]. Dostupné z: http://www.w3.org/TR/2002/WD-SVG12-20021115/ [40] ZANDSTRA, M. PHP Objects, Patterns and Practice (Expert's Voice in Open Source). 3. vyd. New York: Apress, 2010. 536 s. ISBN 978-1-43022925-4.
46
Přílohy
8 Přílohy 8.1
Přiložené CD
Přiloţené CD obsahuje: • zdrojové kódy PHP, HTML, Javascript • JS knihovna Raphaël.js • ER diagram databáze • Class diagram
Přílohy
8.2 Class diagram všech použitých tříd pro fungování modulu
47
48
Přílohy
Přílohy
49