Na tomto míst¥ bude ociální zadání va²í práce •
Toto zadání je podepsané d¥kanem a vedoucím katedry,
•
musíte si ho vyzvednout na studijním odd¥lení Katedry po£íta£· na Karlov¥ nám¥stí,
•
v jedné odevzdané práci bude originál tohoto zadání (originál z·stává po obhajob¥ na kated°e),
•
ve druhé bude na stejném míst¥ neov¥°ená kopie tohoto dokumentu (tato se vám vrátí po obhajob¥).
i
ii
eské vysoké u£ení technické v Praze Fakulta elektrotechnická Katedra po£íta£·
Bakalá°ská práce
Softwarová podpora pro fakturaci v maloobchod¥
Stanislav tipl
Vedoucí práce:
Ing. Josef Hlavá£, Ph.D.
Studijní program: Elektrotechnika a informatika, strukturovaný, bakalá°ský
Obor: Výpo£etní technika
2. ledna 2012
iv
v
Pod¥kování D¥kuji Ing. Josefu Hlavá£ovi, Ph.D. za cenné rady a pomoc p°i tvorb¥ bakalá°ské práce. D¥kuji svým rodi£·m za podporu p°i studiu a psaní této práce.
vi
vii
Prohlá²ení Prohla²uji, ºe jsem práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu. Nemám závaºný d·vod proti uºití tohoto ²kolního díla ve smyslu 60 Zákona £. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zm¥n¥ n¥kterých zákon· (autorský zákon).
V Hradci Králové dne 2. 1. 2012
.............................................................
viii
Abstract This thesis deals with solving software support of invoicing process in a small internet shop. It denes requirements for the system and describes existing solutions of the problem. It includes analysis and design of the system. The main goal is implementation if invoicing application in PHP using Nette framework.
Abstrakt Tato bakalá°ská práce se zabývá °e²ením softwarové podpory fakturace v malém internetovém obchod¥. Denuje poºadavky na systém a popisuje existující °e²ení problému. Obsahuje analýzu a návrh systému. Hlavním cílem je implementace faktura£ní aplikace v PHP s vyuºitím frameworku Nette.
ix
x
Obsah 1 Úvod
1
2 Popis problému, specikace cíle
3
2.1
2.2
Poºadavky na systém . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.1
Funk£ní poºadavky . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.2
Nefunk£ní poºadavky . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
Údaje na faktu°e
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.1
Zákonné náleºitosti faktury
. . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.2
Stav faktury . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.3
Zp·sob platby
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.4
Po²tovné
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.5
Fakturované poloºky . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.3
Evidence zboºí
2.4
Evidence uºivatel·
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5
Evidence klient·
5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3 Existující °e²ení
7
3.1
Fakturoid
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2
Uctujte.cz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.3
Ekonomický systém Pohoda . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.4
BambooInvoice
8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Analýza
7
9
4.1
Akté°i v systému
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2
P°ípady uºití
9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
4.2.1
Manipulace s fakturami
4.2.2
Manipulace se zboºím
. . . . . . . . . . . . . . . . . . . . . . . . . .
10
. . . . . . . . . . . . . . . . . . . . . . . . . . .
12
4.2.3
P°ehledy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
4.2.4
Manipulace s uºivatelskými ú£ty
. . . . . . . . . . . . . . . . . . . . .
14
4.3
Volba technologií . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4.4
Výb¥r knihoven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
5 Návrh a implementace
19
5.1
Návrh databáze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2
Zabezpe£ení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
5.2.1
20
Autentizace a autorizace . . . . . . . . . . . . . . . . . . . . . . . . . .
xi
19
xii
OBSAH
5.3
5.2.2
Hesla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.3
Ochrana proti XSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20 20
5.2.4
Ochrana proti CSRF . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
5.2.5
Ochrana proti SQL injection . . . . . . . . . . . . . . . . . . . . . . . .
21
Architektura aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
5.3.1
Model
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
5.3.2
View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
5.3.3
Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
5.4
JavaScript na stran¥ klienta . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
5.5
Uºivatelské rozhraní
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 Testování
25
6.1
Uºivatelské testování . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
6.2
Testování bezpe£nosti
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
6.2.1
Útok XSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
6.2.2
Útok CSRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
6.2.3
Útok SQL injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
Testování p°ístupnosti a pouºitelnosti . . . . . . . . . . . . . . . . . . . . . . .
26
6.3.1
Validace HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
6.3.2
Zobrazení v r·zných prohlíºe£ích
. . . . . . . . . . . . . . . . . . . . .
26
6.3.3
Vypnutí CSS a obrázk·
. . . . . . . . . . . . . . . . . . . . . . . . . .
27
6.3.4
Vypnutí JavaScriptu
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
6.3.5
Kontrola formulá°· . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
6.3
7 Záv¥r
29
A Seznam pouºitých zkratek
33
B Instala£ní p°íru£ka
35
C Uºivatelská p°íru£ka
37
C.1
Obecné funkce
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.2
Práce s fakturami, zboºím a p°ehledy . . . . . . . . . . . . . . . . . . . . . . .
37
C.3
Administrace aplikace
38
D Obsah p°iloºeného CD
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
39
Seznam obrázk· 3.1
Uºivatelské rozhraní nástroje Fakturiod
. . . . . . . . . . . . . . . . . . . . .
8
4.1
Akté°i v systému
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.2
UC správa faktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
4.3
UC správa zboºí
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
4.4
UC p°ehledy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
4.5
UC správa uºivatel·
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
5.1
Databáze systému
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
5.2
Uºivatelské rozhraní
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
6.1
Validace kódu stránky
6.2
Vzhled stránky bez CSS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
D.1
Seznam p°iloºeného CD
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xiii
27
xiv
SEZNAM OBRÁZK
Kapitola 1
Úvod V souvislosti se zvý²ením dostupnosti internetu mezi ²irokou ve°ejností do²lo v uplynulých letech k nár·stu obliby internetových obchod·. Princip nákupu v internetovém obchod¥ je vºdy stejný, bez ohledu na druh nabízeného zboºí. Zákazník si vybere zboºí z nabídky na internetových stránkách, které si následn¥ vyzvedne osobn¥ nebo je mu doru£eno prost°ednictvím po²ty nebo zásilkové sluºby. Ve v²ech vý²e uvedených p°ípadech je nutné zákazníkovi vystavit doklad o zakoupení a zaplacení zboºí. Cílem této bakalá°ské práce je usnadnit vystavování doklad· v malém internetovém obchod¥. Konkrétn¥ se jedná o internetový obchod Chytrásek [8]. Výsledek této práce by m¥l být pouºitelný i v jiných p°ípadech, kdy je nutné vystavovat faktury. V uvedeném obchod¥ se doklady dosud vystavovaly a evidovaly pomocí textového editoru a tabulkového kalkulátoru, kdy kaºdý doklad musel být manuáln¥ vypln¥n podle objednávky v e-shopu. Jedná se o malý obchod, jehoº provozovatel není plátcem DPH. Produkty jsou ur£eny výhradn¥ pro koncové zákazníky. Systém by m¥l umoºnit snadné vystavování doklad·. Doklady by m¥ly být v systému uchovány. Tato práce se skládá z n¥kolika £ástí. Kapitola 2 Popis problému, specikace poºadavk· se zabývá bliº²í specikací funk£ních i nefunk£ních poºadavk· na systém. Zárove¬ jsou zde uvedeny poºadavky dané existující legislativou a podrobn¥j²í popis ostatních poºadavk· vzniklý na základ¥ konzultací s koncovým uºivatelem. Kapitola 3 Existující °e²ení popisuje vlastnosti nalezených existujících °e²ení a analyzuje moºnost jejich vyuºití pro °e²ení problému. Kapitola 4 Analýza obsahuje p°ípady uºití a detailní popis jejich scéná°·. Dále je zde zd·vodn¥na volba pouºitých technologií. V kapitole 5 Návrh a implementace jsou popsány jednotlivé £ásti návrhu °e²ení a implementace poºadovaných funkcí. Kapitola 6 Testování popisuje postup dola¤ování funkcionality ve spolupráci se zadavatelem práce. Dále jsem se v ní zabýval ov¥°ením zabezpe£ení aplikace. Uºivatelská a instala£ní p°íru£ka jsou za°azeny jako p°ílohy této práce. Sou£ástí práce je také CD-ROM médium se zdrojovými kódy, strukturou databáze a obsahem tohoto dokumentu v elektronické podob¥.
1
2
KAPITOLA 1.
ÚVOD
Kapitola 2
Popis problému, specikace cíle Cílem práce je usnadnit vystavování faktur v malém internetovém obchod¥. Jde o jednoduchý systém pro neplátce DPH. Systém by m¥l poskytovat základní funkce s moºností budoucího roz²í°ení. Systém by m¥l fungovat na vlastním serveru, aby se k dat·m nemohly dostat t°etí osoby. Pouºité technologie by m¥ly umoº¬ovat pouºití systému z libovolného po£íta£e se sí´ovým p°ipojením k serveru, kde bude systém nainstalován. Systém nebude závislý na pouºitém hardwaru £i opera£ním systému klientského po£íta£e. D·leºitým poºadavkem je malá po£áte£ní investice a nulové pravidelné poplatky za pouºívání systému.
2.1 2.1.1
Poºadavky na systém Funk£ní poºadavky
1. Vytvá°ení, úprava a uchování faktur. 2. Kopírování faktury (vytvo°ení nové faktury se stejným obsahem). 3. Evidence stavu faktur. 4. Automatický výpo£et po²tovného. 5. Export faktur do formátu PDF. 6. Vkládání, úprava a uchování zboºí. 7. Import zboºí z externího zdroje. 8. Generování p°ehledu prodaného zboºí.
2.1.2
Nefunk£ní poºadavky
1. Cenov¥ dostupné °e²ení bez pravidelných poplatk·. 2. Otev°ený zdrojový kód v£etn¥ pouºitých knihoven. 3. Vyuºití webových a databázových technologií (PHP, JavaScript, MySQL).
3
4
KAPITOLA 2.
POPIS PROBLÉMU, SPECIFIKACE CÍLE
4. Uloºení dat v rela£ní databázi. 5. Moºnost provozu na vlastním serveru. 6. Zabezpe£ení p°ed neoprávn¥ným p°ístupem.
2.2
Údaje na faktu°e
2.2.1
Zákonné náleºitosti faktury
V následujícím textu se budu zabývat pouze doklady vydávanými ºivnostníkem, který není plátcem DPH. Doklad vystavený obchodní spole£ností by se li²il údajem o zápisu do obchodního rejst°íku. Náleºitosti dokladu plátce DPH (da¬ového dokladu) se °ídí Zákonem o DPH a jejich popis by byl nad rámec této práce. Obchodní zákoník [27], £ást první, 13a stanovuje podnikateli povinnost uvád¥t na obchodních listinách (v£etn¥ faktury):
•
údaj o své rm¥, jménu nebo názvu, sídle nebo místu podnikání a identika£ním £ísle,
•
podnikatelé zapsaní v obchodním rejst°íku téº údaj o tomto zápisu, v£etn¥ spisové zna£ky, a podnikatelé nezapsaní v obchodním rejst°íku téº údaj o zápisu do jiné evidence, v níº jsou zapsáni.
Zákon o ú£etnictví [28], £ást druhá, 11 dále uvání povinnost uvést na faktu°e:
•
ozna£ení ú£etního dokladu,
•
obsah ú£etního p°ípadu a jeho ú£astníky,
•
pen¥ºní £ástku nebo informaci o cen¥ za m¥rnou jednotku a vyjád°ení mnoºství,
•
okamºik vyhotovení ú£etního dokladu,
•
okamºik uskute£n¥ní ú£etního p°ípadu, není-li shodný s okamºikem vyhotovení ú£etního dokladu,
•
podpisový záznam podle 33a odst. 4 osoby odpov¥dné za ú£etní p°ípad a podpisový
1
záznam osoby odpov¥dné za jeho zaú£tování .
2.2.2
Stav faktury
Nov¥ vystavená faktura bude oza£ená jako nezaplacená. Fakturu bude moºné ozna£it jako zaplacenou nebo ji stornovat. V p°ípad¥ chybného ozna£ení bude moºné vrátit stav faktury na nezaplaceno. 1
Uvedený podpisový záznam je povinný aº p°i zaú£tování na stran¥ odb¥ratele. Z tohoto bodu nevyplývá
povinnost ozna£ovat faktury razítkem £i podpisem p°i vystavení dodavatelem.
2.3.
EVIDENCE ZBOÍ
2.2.3
5
Zp·sob platby
Systém bude u kaºdé faktury evidovat zp·sob její úhrady. Fakturu bude moºné zaplatit hotov¥, p°evodem na ú£et nebo dobírkou.
2.2.4
Po²tovné
Systém bude provád¥t automatický výpo£et po²tovného. Tento výpo£et bude vycházet z p°edpokladu, ºe zboºí uvedené na jedné faktu°e bude zasláno v jedné zásilce a sou£asn¥ v kaºdé zásilce bude zboºí z práv¥ jedné faktury. Pro kaºdý model zboºí bude v systému uloºeno obvyklé po²tovné. Vzhledem k tomu, ºe v prodávaném sortimentu p°evaºují zásilky standardních rozm¥r· (doporu£ená zásilka, doporu£ený balí£ek) s hmotností do 2 kg [29], pro jednoduchost se nijak nezohled¬ují hmotnost a rozm¥ry jednotlivých kus· ani celé zásilky. Nestandardních zásilek je málo a je jednodu²²í °e²it je ru£n¥. U faktury placené dobírkou nebo p°evodem bude po²tovné za celou fakturu maximem po²tovného ze v²ech model· zboºí uvedených na faktu°e. U faktury s úhradou v hotovosti bude po²tovné nulové. Ve v²ech p°ípadech bude moºné nastavit po²tovné na jinou hodnotu ru£n¥.
2.2.5
Fakturované poloºky
Faktura m·ºe obsahovat libovolný po£et poloºek (zboºí). U kaºdé poloºky se eviduje název zboºí, název modelu, cena za kus, po²tovné a po£et kus·. V p°ípad¥, ºe dojde ke zm¥n¥ ceny nebo jiných údaj· o zboºí, musí údaje na vystavené faktu°e z·stat zachovány.
2.3
Evidence zboºí
Systém bude evidovat zboºí. Kaºdé zboºí má název. Ke kaºdému zboºí m·ºe existovat livolné mnoºství model· zboºí. Kaºdý model má sv·j název, cenu za kus a po²tovné.
2.4
Evidence uºivatel·
V systému budou evidováni jeho uºivatelé. Ke kaºdému uºivateli se budou evidovat údaje pro autentizaci, údaje pro autorizaci a faktura£ní údaje. Konkrétn¥ se bude jednat o:
•
uºivatelské jméno,
•
heslo (v zakódované podob¥),
•
typ uºivatelského ú£tu,
•
faktura£ní adresu,
•
název banky,
•
£íslo ú£tu.
6
2.5
KAPITOLA 2.
POPIS PROBLÉMU, SPECIFIKACE CÍLE
Evidence klient·
Internetový obchod Chytrásek má velký po£et klient·, kte°í v²ak obvykle nakupují v tomto obchod¥ pouze jednou. Nemá smysl je samostatn¥ evidovat, zadávání údaj· do evidence by jen zdrºovalo uºivatele a nic by nep°ineslo. Klient bude vºdy uveden pouze na faktu°e.
Kapitola 3
Existující °e²ení 3.1
Fakturoid
Fakturoid [10] je online nástroj pro tvorbu a tisk faktur. Jedná se o £eský nástroj, který umí vystavovat faktury jak v £e²tin¥ a £eských korunách, tak i v cizích m¥nách a v angli£tin¥. Umí ukládat faktury do PDF a zasílat je e-mailem. Obsahuje statistiky a umí p°es I importovat kontaktní údaje klient·. Podporuje pravidelné a zálohové faktury a umí automaticky zasílat upomínky. Nabízí import bankovních výpis· z vybraných bank. P°i fakturaci do 5 klient· je moºné nástroj pouºivat zdarma, do 20 klient· je cena 150 K£/m¥síc a nad 20 klient· je cena 300 K£/m¥síc. Obrázek 3.1 obsahuje ukázku uºivatelského rozhraní. Aplikace Fakturoid spl¬uje funk£ní poºadavky s výjimkou importu dat o zboºí. Je v²ak zpoplatn¥na p°íli² vysokým m¥sí£ním poplatkem. Zdrojové kódy aplikace nejsou dostupné a aplikace neumoº¬uje pouºití na vlastním serveru.
3.2
Uctujte.cz
Systém Uctujte.cz [6] je zjednodu²enou verzí ekonomického systému FlexiBee, který vychází z ekonomického systému WinStrom. Umoº¬uje p°ístup k dat·m p°es webový prohlíºe£, mobilní telefon £i tablet i desktopovou aplikaci. V základní verzi do 50 doklad· ro£n¥ umoº¬uje pouºívání zdarma. Cena za pouºívání aplikace do 500 doklad· ro£n¥ je 199 K£ m¥sí£n¥ a do 2000 doklad· ro£n¥ 499 K£ m¥sí£n¥. Samotný systém FlexiBee je moºné pouºívat i na vlastním serveru. Cena nejlevn¥j²í verze FlexiBee Mini+, která to umoº¬uje, je 6490 K£. Po£et doklad· ve verzi zdarma není dostate£ný. M¥sí£ní poplatky nebo po°izovací cena vy²²í verze jsou p°íli² vysoké. Systém obsahuje mnoho funkcionality, která není poºadována.
3.3
Ekonomický systém Pohoda
Program Pohoda [26] je komplexní ú£etní a ekonomický software pro malé, st°ední a v¥t²í rmy z °ad fyzických i právnických osob. Umoº¬uje vést ú£etnictví i da¬ovou evidenci a bude vyhovovat plátc·m i neplátc·m DPH. Systém funguje jako desktopová aplikace. Cena základní verze systému Pohoda 2012 Mini je 1 980 K£.
7
8
KAPITOLA 3.
EXISTUJÍCÍ EENÍ
Obrázek 3.1: Uºivatelské rozhraní nástroje Fakturiod
Moºnosti systému spl¬ují funk£ní poºadavky. Systém ale nespl¬uje v¥t²inu nefunk£ních poºadavk·. Nejsou dostupné zdrojové kódy a systém nevyuºívá webových technologií. Základní verzi není moºné provozovat na vlastním serveru. Ve vy²²ích verzích to moºné je, ale je nutné mít na klientských po£íta£ích nainstalovanou desktopovou aplikaci.
3.4
BambooInvoice
BambooInvoice [5] je svobodný software pro tvorbu faktur. Je napsán v PHP a ²í°en pod licencí GPL. Umoº¬uje tvorbu faktur, export do PDF, evidenci zákazník· a tvorbu p°ehled·. Software je moºné provozovat na vlastním serveru. Je poskytován pod vhodnou licencí. Pro jeho pouºití by bylo nutné provést rozsáhlé úpravy, zejména p°izp·sobit evidované údaje a formát výsledné faktury £eským zákon·m a doplnit zcela novou funkci evidence zboºí.
Kapitola 4
Analýza Z p°edchozí kapitoly vyplývá, ºe ºádné z porovnávaných °e²ení nevyhovuje v²em poºadavk·m. Jako nejvhodn¥j²í z uvedených systém· se zdá BambooInvoice, bylo by ov²em nutné provést rozsáhlé úpravy, jejichº náro£nost by byla srovnatelná s tvorbou nového systému. Proto byla zvolena moºnost tvorby vlastního systému, který bude spl¬ovat v²echny funk£ní i nefunk£ní poºadavky. D·leºitou sou£ástí této kapitoly jsou UML diagramy, p°i jejichº tvorb¥ jsem vycházel nástroj
UML 2 a unikovaný proces vývoje aplikací ArgoUML [1].
4.1
Akté°i v systému
z knihy
[7]. Pro kreslení diagram· jsem pouºil
Akté°i nep°edstavují konkrétní osoby, ale uºivatelské role. Jeden uºivatel m·ºe mít (a £asto má) více rolí. Mezi uºivatelskými rolemi m·ºe být vztah generalizace. Platí pravidlo, ºe potomek m·ºe zastoupit p°edka.
Přihlášený uživatel
Správce faktur
Nepřihlášený uživatel
Správce uživatelů
Obrázek 4.1: Akté°i v systému
Obrázek 4.1 ukazuje jednotlivé role uºivatel· v systému.
9
10
KAPITOLA 4.
ANALÝZA
Nep°ihlá²ený uºivatel p°edstavuje uºivatele, který není p°ihlá²en do systému. P°ihlá²ený uºivatel je uºivatel, který je p°ihlá²en do systému. Jeho potomky
jsou
Správce uºivatel· a Správce faktur.
Správce uºivatel· se stará se o vytvá°ení a úpravy dal²ích uºivatel·. Správce faktur vystavuje, upravuje a tiskne faktury, zadává a upravuje údaje o zboºí a zobrazuje p°ehledy.
4.2 4.2.1
P°ípady uºití Manipulace s fakturami
Obrázek 4.2 zobrazuje p°ípady uºití pro manipulaci s fakturami.
UC_0101_Vypsat_faktury UC_0102_Vytvorit_fakturu
Přihlášený uživatel UC_0103_Upravit_fakturu
Správce uživatelů
UC_0104_Zkopírovat_fakturu
Správce faktur
UC_0105_Změnit_stav_faktury
UC_0106_Vygenerovat_PDF
Obrázek 4.2: UC správa faktur
UC0101 Vypsat faktury 1. Uºivatel zvolí funkci Vypsat faktury 2. Systém vypí²e v²echny faktury 3. UC kon£í
4.2.
PÍPADY UITÍ
11
UC0102 Vytvo°it fakturu 1. Uºivatel zvolí funkci Vytvo°it fakturu 2. Systém zobrazí prostor pro zadání údaj· s p°edvypln¥ným £íslem faktury, datem vystavení a datem splatnosti 3. Uºivatel vyplní údaje na faktu°e 4. Systém ov¥°í validitu zadaných údaj· a uloºí je 5. ALTERNATIVA: Pokud údaje nejsou validní, návrat na bod 3 bez uloºení 6. UC kon£í
UC0103 Upravit fakturu 1. Uºivatel vybere fakturu k úprav¥ ze seznamu faktur 2. Pokud je faktura nezaplacená, systém zobrazí údaje o faktu°e a zboºí 3. ALTERNATIVA: Pokud je faktura zaplacená nebo stornovaná, systém neumoºní úpravu faktury, UC kon£í 4. Uºivatel upraví údaje o faktu°e nebo p°idá zboºí a potvrdí 5. Systém zvaliduje zadané údaje a uloºí je do databáze 6. ALTERNATIVA: Pokud údaje nejsou validní, návrat na bod 4 bez uloºení 7. Uºivatel m·ºe znovu p°ejít na bod 4 nebo UC kon£í
UC0104 Zkopírovat fakturu 1. Uºivatel vybere ze seznamu faktur funkci Zkopírovat u konkrétní faktury 2. Systém zkopíruje v²echny údaje a poloºky na faktu°e, vyplní nový variabilní symbol (£íslo faktury), datum vystavení a datum splatnosti 3. UC kon£í
UC0105 Zm¥nit stav faktury 1. Uºivatel vybere ze seznamu faktur funkci Zm¥nit stav faktury 2. Pokud je faktura zaplacená, systém vyplní datum zaplacení a zm¥ní stav na zaplaceno 3. ALTERNATIVA: Pokud je faktura zaplacená nebo stornovaná, systém se zeptá, zda ozna£it fakturu jako nezaplacenou, po potvrzení ji takto ozna£í a smaºe datum zaplacení 4. UC kon£í
12
KAPITOLA 4.
ANALÝZA
UC0106 Vygenerovat PDF 1. Uºivatel zvolí ze seznamu faktur volbu Vygenerovat PDF u konkrétní faktury 2. Systém zobrazí fakturu v PDF 3. UC kon£í
4.2.2
Manipulace se zboºím
Obrázek 4.3 zobrazuje p°ípady uºití pro manipulaci se zboºím.
UC_0201_Zobrazit_seznam_zboží Přihlášený uživatel UC_0202_Přidat_zboží
Správce uživatelů
Správce faktur
UC_0203_Upravit_zboží
UC_0204_Smazat_zboží
UC_0205_Importovat_zboží
Obrázek 4.3: UC správa zboºí
UC0201 Zobrazit seznam zboºí 1. Uºivatel vybere funkci Zobrazit seznam zboºí 2. Systém zobrazí seznam zboºí 3. UC kon£í
UC0202 P°idat zboºí 1. Uºivatel vybere funkci P°idat zboºí 2. Systém zobrazí pole pro zadání názvu zboºí
4.2.
PÍPADY UITÍ
13
3. Uºivatel vyplní název zboºí a potvrdí 4. Systém uloºí údaje o zboºí 5. UC kon£í
UC0203 Upravit zboºí 1. Uºivatel vybere funkci Upravit u konkrétního zboºí 2. Systém zobrazí název zboºí a názvy, ceny a po²tovné jednotlivých model· 3. Uºivatel upraví údaje o zboºí a potvrdí je 4. Systém zvaliduje zadané údaje a uloºí je 5. ALTERNATIVA: Pokud nejsou údaje validní, systém vyzve uºivatele k oprav¥ údaj· a pokra£uje se bodem 3 6. UC kon£í
UC0204 Smazat zboºí 1. Uºivatel zvolí moºnost Smazat u konkrétního zboºí 2. Systém ozna£í zboºí jako smazané. Zboºí z·stane v systému uloºeno, protoºe jiº m·ºe být na fakturách. 3. UC kon£í
UC0205 Importovat zboºí 1. Uºivatel zvolí moºnost Importovat zboºí 2. Systém zobrazí pole pro výb¥r importovaného souboru a formátu 3. Uºivatel zadá soubor a formát a potvrdí import 4. Systém importuje údaje o zboºí 5. ALTERNATIVA: Zadané údaje nejsou validní, import se neprovede, pokra£uje se bodem 3 nebo UC kon£í 6. UC kon£í
4.2.3
P°ehledy
Obrázek 4.4 obsahuje p°ípad uºití pro zobrazení p°ehled·.
14
KAPITOLA 4.
ANALÝZA
Přihlášený uživatel
UC_0301_Zobrazit_přehled Správce uživatelů
Správce faktur
Obrázek 4.4: UC p°ehledy
UC0301 Zobrazit p°ehled 1. Uºivatel zvolí moºnost P°ehledy 2. Systém zobrazí pole pro zadání data za£átku a data konce p°ehledu 3. Uºivatel vyplní pole 4. Systém zobrazí p°ehled v uvedeném £asovém rozsahu 5. ALTERNATIVA: Zadané údaje nejsou validní, p°ehled se nezobrazí, pokra£uje se bodem 3 nebo UC kon£í 6. UC kon£í
4.2.4
Manipulace s uºivatelskými ú£ty
Obrázek 4.5 zobrazuje p°ípady uºití pro manipulaci s uºivatelskými ú£ty.
UC0401 P°ihlásit se 1. Nep°ihlá²ený uºivatel vstoupí do aplikace 2. Systém zobrazí pole pro zadání uºivatelského jména a hesla 3. Uºivatel vyplní uºivatelské jméno a heslo 4. Systém ov¥°í zadané údaje a role uºivatele se zm¥ní na Správce faktur nebo Správce uºivatel· 5. ALTERNATIVA: Zadané údaje nejsou validní, systém zobrazí informaci o této skute£nosti a pokra£uje se bodem 2 6. UC kon£í
4.2.
15
PÍPADY UITÍ
UC_0401_Přihlásit_se Nepřihlášený uživatel
UC_0402_Změnit_heslo
UC_0403_Odhlásit_se Přihlášený uživatel
UC_0404_Vytvořit_uživatele
UC_0405_Zobrazit_seznam_uživatelů Správce faktur
Správce uživatelů UC_0406_Upravit_uživatele
Obrázek 4.5: UC správa uºivatel·
UC0402 Zm¥nit heslo 1. Uºivatel vybere volbu Zm¥nit heslo 2. Systém zobrazí pole pro zadání stávajícího a nového hesla 3. Uºivatel vyplní pole 4. Systém zvaliduje heslo a uloºí jej v zakódované podob¥ 5. ALTERNATIVA: Zadané stávající heslo není v po°ádku, pokra£uje se bodem 2 nebo UC kon£í 6. UC kon£í
UC0403 Odhlásit se 1. Uºivatel zvolí moºnost Odhlásit se 2. Systém odhlásí uºivatele a role se zm¥ní na Nep°ihlá²ený uºivatel 3. UC kon£í
16
KAPITOLA 4.
ANALÝZA
UC0404 Vytvo°it uºivatele 1. Uºivatel vybere moºnost Vytvo°it uºivatele 2. Systém zobrazí pole pro zadání uºivatelského jména, hesla, role, faktura£ní adresy, názvu banky a £ísla ú£tu 3. Uºivatel vyplní údaje 4. Systém zvaliduje zadané údaje a uloºí je 5. ALTERNATIVA: Zadané údaje nejsou v po°ádku, opravou údaj· podle bodu 2 nebo UC kon£í 6. UC kon£í
UC0405 Zobrazit seznam uºivatel· 1. Uºivatel vybere moºnost Zobrazit uºivatele 2. Systém zobrazí seznam v²ech uºivatel· systému 3. UC kon£í
UC0406 Upravit uºivatele 1. Uºivatel vybere u konkrétního uºivatele moºnost Upravit uºivatele 2. Systém zobrazí p°edvypln¥ná pole (uºivatelské jméno, role, faktura£ní adresa, název banky a £íslo ú£tu) a dv¥ prázdná pole pro heslo 3. Uºivatel opraví nebo vyplní poºadované údaje 4. Systém zvaliduje zadané údaje a uloºí je 5. ALTERNATIVA: Zadané údaje nejsou v po°ádku, pokra£uje se bodem 3 nebo UC kon£í 6. UC kon£í
4.3
Volba technologií
Jazyk PHP
V zadání je explicitn¥ uveden jazyk PHP, takºe v tomto jazyce provedu
implementaci práce. Vzhledem k rozsahu projektu povaºuji tento jazyk za nejvhodn¥j²í. Dal²ími moºnostmi jsou nap°íklad jazyky Java, Python nebo Ruby s vyuºitím pat°i£ného frameworku.
HTML a CSS
Pouºití zna£kovacího jazyka HTML a kaskádových styl· (CSS) vyplývá ze
skute£nosti, ºe se bude jednat o webovou aplikaci.
4.4.
17
VÝB
R KNIHOVEN
Databáze MySQL
Data aplikace budou ukládána v rela£ní databázi. Zvolil jsem databá-
zový systém MySQL, s nímº jiº mám zku²enosti z jiných aplikací v PHP. Díky standardizaci jazyka SQL by v²ak po drobných úpravách m¥lo být moºné pouºít i jiný databázový systém.
Webový server Apache
Aplikace bude vyvíjena a testována na webovém serveru Apache,
ale bude moºné ji provozovat i na jiném webovém serveru s podporou PHP.
4.4
Výb¥r knihoven
Nette Framework
Implementaci aplikace provedu ve frameworku Nette [4]. Jedná se
o £eský framework pro tvorbu webových aplikací v PHP. Framework jsem zvolil proto, ºe s ním jiº mám zku²enosti z d°ív¥j²í doby.
Komponenta DataGrid
DataGrid [24] je komponenta pro Nette. Komponenta výrazn¥
zjednodu²uje tvorbu p°ehledových tabulek a zaji²´uje vizuální prezentaci t¥chto dat uºivateli. Umoº¬uje data rychle t°ídit, ltrovat a manipulovat s nimi uºivatelsky denovanými rutinami. V aplikaci bude pouºita upravená verze [22].
Knihovna mPDF
Knihovna mPDF [16] umoº¬uje generovat dokumenty ve formátu PDF.
Je zaloºena na knihovn¥ FPDF. Soubor ve formátu PDF je generován z HTML ²ablony.
Knihovna dibi
Framework Nette obsahuje vlastní vrstvu pro práci s databází [19]. Tato
£ást frameworku, která vychází z knihovny NotORM [9], v²ak byla do frameworku p°idána pom¥rn¥ nedávno a nepovaºuji ji za ov¥°enou a dostate£n¥ stabilní. Dostupná dokumentace je navíc pom¥rn¥ stru£ná. Z t¥chto d·vod· jsem pro práci s databází zvolil knihovnu dibi [2], která usnad¬uje a zp°ehled¬uje zápis SQL dotaz·. Jedná se o tenkou vrstvu pro p°ístup k databázi. Vzhledem k rozsahu projektu povaºuji knihovnu za vhodné °e²ení, pro v¥t²í projekt by bylo vhodn¥j²í pouºít ORM (nap°. Doctrine 2 [13]).
Knihovna jQuery
Knihovna jQuery [14] klade d·raz na interakci mezi JavaScriptem
a HTML. Z velké £ásti eliminuje problémy s r·znou implementací JavaScriptu ve webových prohlíºe£ích. Umoº¬uje snadno vytvá°et stránky vyuºívající AJAX. Srovnatelnou alternativou k jQuery je knihovna Prototype [21].
Knihovna jQuery UI
Knihovna jQuery UI [15] je JavaScriptový framework. Uleh£uje
implementaci pokro£ilých efekt·. V systému bude vyuºita nap°íklad pro zadávání data vystavení, splatnosti a zaplacení faktury.
18
KAPITOLA 4.
ANALÝZA
Kapitola 5
Návrh a implementace 5.1
Návrh databáze
Pro vytvo°ení struktury databáze byl pouºit nástroj
MySQL Workbench
[23]. Jedná se o ná-
stroj p°ímo od rmy Oracle, který je dostupný zdarma pro Windows, Linux a Mac OS pod licencí GPL a komer£ními licencemi. Obrázek 5.1 znázor¬uje strukturu databáze systému.
docs rows id INT(10) name VARCHAR(64) model VARCHAR(64) price DECIMAL(10,2) shipping DECIMAL(10,2) count INT(11) prices_id INT(11) docs_id INT(10) Indexes
id INT(10) number INT(10) date DATE date_pay DATE date_paid DATE customer TEXT shipping DECIMAL(10,2) type INT(11) status INT(11) note TEXT users_id INT(10) Indexes
users id INT(10) login VARCHAR(64) password VARCHAR(64) role VARCHAR(64) address TEXT bank VARCHAR(64) account VARCHAR(64) Indexes
prices id INT(10) goods_id INT(10) model VARCHAR(64) price DECIMAL(10,2) shipping DECIMAL(10,2) Indexes
goods id INT(10) name VARCHAR(64) users_id INT(10) deleted INT(10) Indexes
Obrázek 5.1: Databáze systému
19
20
KAPITOLA 5.
Tabulka users
NÁVRH A IMPLEMENTACE
Obsahem tabulky jsou vlastnosti uºivatel· systému. Jedná se o údaje pro
autorizaci a autentizaci (login, password, role) a faktura£ní údaje (address, bank, account).
Tabulka docs
V tabulce jsou uloºeny hlavi£ky jednotlivých faktur. Jedná se o £íslo fak-
tury (number), datum vystavení, splatnosti a zaplacení (date, date_pay, date_paid), údaje o zákazníkovi (customer), manuáln¥ nastavené po²tovné (shipping), zp·sob úhrady (type), stav faktury (status), poznámku (note) a cizí klí£ na vlastníka faktury (users_id).
Tabulka goods
Obsahem tabulky je zboºí v systému. Jedná se o název zboºí (name),
p°íznak smazání (deleted) a cizí klí£ na vlastníka zboºí (users_id).
Tabulka prices
Obsahem tabulky jsou názvy (model) a ceny (price) jednotlivých model·
zboºí. Tabulka dále obsahuje minimální po²tovné za model zboºí (shipping). K p°i°azení modelu ke zboºí slouºí cizí klí£ na tabulku goods (goods_id).
Tabulka rows
V tabulce jsou uloºeny jednotlivé poloºky faktury. Vzhledem k tomu, ºe
v pr·b¥hu £asu m·ºe dojít ke zm¥n¥ názvu zboºí £i zm¥n¥ názvu, ceny a po²tovného pro model zboºí, obsahuje tabulka hodnoty t¥chto údaj· v dob¥ p°idání zboºí na fakturu (name, model, price, shipping). Dále obsahuje po£et kus· (count), cizí klí£e na fakturu (docs_id) a na model zboºí (prices_id).
5.2 5.2.1
Zabezpe£ení Autentizace a autorizace
P°ihla²ování uºivatel· a ov¥°ování uºivatelských rolí obstarává p°ímo framework Nette bez nutnosti zásahu programátora. P°i prvním p°ístupu na webovou stránku je vygenerováno tzv. Session ID, které je uloºeno jak na stran¥ klienta (ve form¥ cookies), tak na stran¥ serveru. Pomocí tohoto ID se prokazuje, ºe se jedná o stále stejného klienta.
5.2.2
Hesla
Hesla nejsou v databázi uloºena v £istém textu, ale jsou zakódována pomocí algoritmu md5. Pro zvý²ení bezpe£nosti je p°idána tzv. salt, takºe na za£átek kaºdého hesla je p°ed zavoláním algoritmu md5 p°idán °et¥zec znak·.
5.2.3
Ochrana proti XSS
Jednou z nej£ast¥j²ích zranitelností webových aplikací je Cross site scripting (XSS). Útok XSS je zneuºitím neo²et°ených výstup·. Princip útoku spo£ívá v tom, ºe úto£ník podstr£í do stránky vlastní skript. Tento typ útoku se £asto vyskytuje nap°íklad v diskuzních fórech. O ochranu proti XSS se stará p°ímo framework Nette [18].
5.3.
ARCHITEKTURA APLIKACE
5.2.4
21
Ochrana proti CSRF
Útok CSRF (£teno jako sea-surf ) je druh útoku, kdy p°im¥jeme uºivatele nav²tívit stránku, která skryt¥ vykoná p°ístup na webovou aplikaci, ve které je uºivatel práv¥ p°ihlá²en. Uºivatel tak neúmysln¥ a bez svého v¥domí spustí akci na na svém ú£tu v rámci této aplikace. Framework Nette obsahuje vestav¥nou ochranu formulá°· proti CSRF [18].
5.2.5
Ochrana proti SQL injection
Dal²ím druhem útoku je vloºení SQL dotazu z webu, které je známé jako SQL injection. Uºivatel by mohl vloºit dotaz nap°íklad do formulá°e pro p°ihlá²ení nebo do jména zákazníka £i názvu zboºí. Tím by se mohl nep°ihlá²ený i p°ihlá²ený uºivatel dostat k dat·m ostatních uºivatel· nebo provést jejich úpravu £i smazání. Pouºitá databázová vrstva dibi zahrnuje ochranu proti útoku SQL injection [3].
5.3
Architektura aplikace
Aplikace vyuºívá architektury MVC.
5.3.1
Model
Modelová komponenta systému postihuje aplika£ní logiku. Spravuje sv·j vnit°ní stav a je moºné volat jeho metody, kterými lze tento stav m¥nit. Model neví o existenci a stavu View a Controlleru. Framework Nette v pouºité verzi obsahuje obsahuje podporu Dependency injection [17], kterou jsem vyuºil pro práci s instancemi modelových t°íd.
T°ída ModelLoader
V konguraci je nastaveno, ºe se instance této t°ídy vytvo°í jako
sluºba. Do konstruktoru t°ídy je p°edána kongurace databáze. Sluºba je pak dostupná v kaºdém presenteru a jejím prost°ednictvím se vytvá°i instance konkrétních model·, a to aº ve chvíli, kdy je toho t°eba.
T°ída Base
T°ída je spole£ným p°edkem v²ech t°íd modelové £ásti aplikace (s výjimkou
t°ídy ModelLoader). Konstruktor této t°ídy p°ijímá parametr typu \Nette\DI\Container, jehoº instanci si uloºí pro dal²í pouºití. Pomocí metody getUser() je moºné získat p°ihlá²eného uºivatele. Pomocí metody getDatabase() je moºné získat p°ipojení k databázi.
T°ída Users
T°ída implementuje rozhraní Nette\Security\IAuthenticator, aby mohla slou-
ºit k p°ihla²ování uºivatel· v rámci frameworku Nette. Dále obsahuje metody pro vytvo°ení, £tení a úpravu uºivatelských údaj· a metody pro zm¥nu hesla uºivatele.
T°ída Docs
T°ída umoº¬uje £íst, vytvá°et a upravovat faktury a poloºky faktur. Pro
kaºdého uºivatele t°ída umoº¬uje pracovat jen s údaji o jeho vlastních fakturách. To je zaji²t¥no pomocí metody getUser() z rodi£ovské t°ídy Base.
22
KAPITOLA 5.
T°ída Goods
NÁVRH A IMPLEMENTACE
T°ída umoº¬uje £íst, vytvá°et a upravovat zboºí a modely zboºí v£etn¥ cen.
Podobn¥ jako t°ída Docs umoº¬uje kaºdému uºivateli pracovat jen s vlastním zboºím.
T°ída Summary 5.3.2
T°ída obsahuje metody pro získání p°ehledu.
View
Komponenta View p°evádí data do podoby vhodné k interaktivnímu zobrazení uºivateli. V Nette Framework je tvo°ena zejména tzv. Latte ²ablonami. ablonovací systém Latte usnad¬uje tvorbu ²ablon ve srovnání s £istým PHP. Slouºí k tomu makra a helpery. Dále podporuje nap°íklad automatické escapování obsahu prom¥nné.
Makra
Makro v latte se zapisuje mezi závorky { a }. Pokud mezi závorky napí²eme název
prom¥nné, vypí²e se její obsah s vyuºitím escapování.
Helpery
Helper je jednoduchá funkce, jejímº prvním parametrem je obvykle °et¥zec. Dal²í
parametry ur£ují zp·sob, jakým bude °et¥zec zformátován. Funkce vrací °et¥zec, který se vypí²e na výstup. Helpery se pouºívají nap°íklad pro formátování data a £íselných údaj·. V Latte je vestav¥no n¥kolik helper· pro obvyklé pouºití. Krom¥ vestav¥ných helper· je moºné vytvo°it i vlastní helpery. V aplikaci jsou helpery czDate, czMoney, docStatus a docPayment. Ty slouºí k formátování výpisu data v £eském formátu, £ástky v £eských korunách, stavu faktury a zp·sobu platby.
5.3.3
Controller
Obdobou Controller· v Nette jsou Presentery [20]. Presenter je t°ída, která je obvykle potomkem t°ídy \Nette\Application\UI\Presenter. Zpracovává poºadavky uºivatele, na jejich základ¥ volá model a ºádá view o zobrazení dat. Presentery mají n¥kolik druh· metod. Nejd·leºit¥j²í z nich jsou akce, které slouºí k zobrazení stránky, a signály, které slouºí k vykonání operace. Presentery v aplikaci tvo°í hierarchii, která do jisté míry odpovídá uºivatelským rolím.
BasePresenter
Tento presenter je potomkem t°ídy \Nette\Application\UI\Presenter a zá-
rove¬ p°edkem v²ech ostatních presenter· v aplikaci. Jeho úkoly jsou následující:
•
umoº¬uje p°ístup do aplikace pouze p°ihlá²enému uºivateli,
•
na základ¥ role uºivatele vytvá°í odpovídající nabídku (menu),
•
roz²i°uje výchozí Nette formulá°e o DatePicker [25] a vlastní helpery,
•
obsahuje formulá° a zpracování formulá°e pro zm¥nu hesla,
•
obsahuje metody invalidateFormControl a invalidateValue, coº jsou univerzální metody pro AJAX formulá°e.
5.4.
JAVASCRIPT NA STRAN
KLIENTA
SingPresenter
23
Je sou£ástí distribude frameworku a slouºí k p°ihla²ování a odhla²ování
uºivatele.
ErrorPresenter
Je sou£ástí distribude frameworku a slouºí k zobrazování chyb. Pokud se
v aplikaci vyskytne výjimka, tento presenter zobrazí chybovou stránku podle typu výjimky.
DocsPresenter
Slouºí pro práci s fakturami. Je p°ístupný pouze uºivatel·m v roli Správce
faktur. Akce default slouºí k zobrazení seznamu faktur. Akce doc2 slouºí pro vytvo°ení nebo editaci faktury. Akce pdf slouºí k vygenerování faktury ve formátu pdf. Signál pay slouºí k ozna£ení faktury jako zaplacené. Signál renew slouºí k ozna£ení faktury jako nezaplacené. Signál copy slouºí k vytvo°ení kopie faktury. Signály changeModel a changeName slouºí k dynamickým zm¥nám select box· p°i editaci faktury. Továrni£ka createComponentDataGrid slouºí k vytvo°ení komponenty pro výpis seznamu faktur.
GoodsPresenter
Slouºí pro práci se zboºím. Je p°ístupný pouze uºivatel·m v roli Správce
faktur.
SummaryPresenter
Slouºí pro zobrazování p°ehled·. Je p°ístupný pouze uºivatel·m
v roli Správce faktur.
UsersPresenter
Slouºí pro správu uºivatelských ú£t· v£etn¥ zm¥ny hesel. Je p°ístupný
pouze uºivatel·m v roli Správce uºivatel·.
5.4
JavaScript na stran¥ klienta
Ke zprovozn¥ní AJAX je pouºita upravená knihovna [11]. Pro zprovozn¥ní dopl¬ku DatePicker s £eskou lokalizací byl pouºit kód z [12]. JavaScript je dále vyuºit pro validaci formulá°· a pro zprovozn¥ní DataGridu.
5.5
Uºivatelské rozhraní
Pro aplikaci jsem vytvo°il jednoduché uºivatelské rozhraní. Obrázek 5.2 obsahuje jeho ukázku. Navíc je v systému vyuºito originální gracké rozhraní dopl¬k· DatePicker a DataGrid.
24
KAPITOLA 5.
NÁVRH A IMPLEMENTACE
Obrázek 5.2: Uºivatelské rozhraní
Kapitola 6
Testování 6.1
Uºivatelské testování
Testování aplikace probíhalo pr·b¥ºn¥ od po£átku vývoje systému. První fázi testování jsem provád¥l sám p°ímo p°i vývoji. Zárove¬ jsem pr·b¥ºn¥ odstra¬oval chyby. Druhou fázi testování provád¥l p°ímo koncový uºivatel systému. V po£átku vývoje jsem testovací verzi za tímto ú£elem zprovoznil na serveru dostupném na internetu. Pozd¥ji byl systém nainstalován p°ímo na serveru u koncového uºivatele. Hlá²ení chyb probíhalo prost°ednictvím e-mailu. Uvádím n¥kolik p°íklad· chyb, které byly nahlá²eny p°ímo koncovým uºivatelem:
•
po zm¥n¥ po£tu zboºí na faktu°e a stisknutí klávesy enter do²lo k vymazání poloºky,
•
u faktury jde zadat stav zaplaceno, aniº by bylo uvedeno datum zaplacení,
•
v PDF chybí po²tovné a celková £ástka,
•
datum na faktu°e není v £eském formátu,
•
na faktu°e není uveden variabilní symbol a forma úhrady.
V²echny nahlá²ené problémy byly v pr·b¥hu lad¥ní odstran¥ny.
6.2 6.2.1
Testování bezpe£nosti Útok XSS
P°i testování jsem se pokou²el vloºit JavaScriptový kód do ozna£ení zákazníka, názvu zboºí a modelu zboºí. Tento kód v²ak byl vyescaponán ²ablonovacím systémem Latte a ke spu²t¥ní skriptu nedo²lo. Uºivatelem zadané údaje se navíc zobrazí pouze v rámci jeho ú£tu. Z toho vyplývá, ºe pokud by escapování nebylo funk£ní, neohrozilo by to ostatní uºivatele systému.
25
26
KAPITOLA 6.
6.2.2
TESTOVÁNÍ
Útok CSRF
P°i testování jsem se nejd°íve pokusil provést útok na formulá°. Tam nebyl útok úsp¥²ný, protoºe formulá°e ve frameworku Nette obsahují speciální token. Tento token je náhodn¥ vygenerováný a úto£ník jej nem·ºe p°edem znát. Kaºdý token je vyuºit pouze jednou, £ímº se navíc zabrání opakovanému odeslání formulá°e. Narazil jsem v²ak na problém u ostatních akcí. Bylo by moºné, aby úto£ník metodou CSRF ozna£il fakturu jako zaplacenou, nezaplacenou nebo provedl smazání zboºí. Úto£ník by v²ak musel znát formát URL adres v rámci systému a id modikované poloºky v databázi. Nedostatek jsem odstranil p°idáním tokenu pro ochranu proti CSRF i do v²ech akcí.
6.2.3
Útok SQL injection
P°i testování jsem se pokusil vloºit SQL dotaz do formulá°·. Konkrétn¥ jsem do pole Login p°ihla²ovacího formulá°e vloºil °et¥zec:
a '; DELETE FROM users WHERE '1 Pokud by aplikace nebyla chrán¥na proti SQL injection, do²lo by ke spu²t¥ní dotaz·, které mohou potenciáln¥ smazat obsah tabulky users.
SELECT * FROM users WHERE login ='a '; DELETE * FROM users WHERE '1 '; Díky knihovn¥ dibi v²ak dojde k vyescaponání apostrofu, takºe se spustí dotaz v následující podob¥:
SELECT * FROM users WHERE login =' a \ '; DELETE * FROM users WHERE \ '1 '; Tento dotaz patrn¥ vrátí nulový po£et °ádk·, ale nezp·sobí ºádné ohroºení dat v aplikaci.
6.3 6.3.1
Testování p°ístupnosti a pouºitelnosti Validace HTML
Zdrojový kód n¥kolika stránek webu jsem vloºil do validátoru na adrese http://validator.w3c.org/. Stránky jsou validní podle deklarovaného doctype HTML5. Výsledek jednoho z test· ukazuje obrázek 6.1.
6.3.2
Zobrazení v r·zných prohlíºe£ích
Aplikace se b¥ºn¥ pouºívá v prohlíºe£i Mozilla Firefox. V rámci testování jsem ji v²ak zkou²el otev°ít v prohlíºe£ích Internet Explorer (IE) ve verzích 6, 7 a 8, Google Chrome a Opera. Mezi prohlíºe£i byly drobné rozdíly ve vzhledu stránky, ale £itelnost obsahu a pouºitelnost aplikace z·stala zachována.
6.3.
TESTOVÁNÍ PÍSTUPNOSTI A POUITELNOSTI
27
Obrázek 6.1: Validace kódu stránky
6.3.3
Vypnutí CSS a obrázk·
Pokud je struktura stránek aplikace správn¥ navrºena, m¥la by aplikace být pouºitelná i po vypnutí kaskádových styl· a obrázk·. P°i testování jsem provedl vypnutí CSS a obrázk· v prohlíºe£i Mozilla Firefox. Vzhled stránky se zm¥nil, jak ukazuje obrázek 6.2, ale funk£nost v²ech prvk· z·stala zachována.
6.3.4
Vypnutí JavaScriptu
V ideálním p°ípad¥ by aplikace s vypnutým JavaScriptem m¥la poskytovat stejné funkce jako s podporou JavaScriptu. Po£et uºivatel·, kte°í mají JavaScript zcela vypnutý, je v²ak tak malý, ºe se od tohoto °e²ení v praxi ob£as upou²tí. Aplikaci jsem testoval s vypnutým JavaScriptem v prohlíºe£i Mozilla Firefox. Prohlíºení v²ech stránek v£etn¥ generování PDF a zadávání zboºí bylo funk£ní, pouze validace formulá°· probíhala aº na stran¥ serveru. Funk£ní v²ak nebylo p°idávání a úprava poloºek na faktu°e. Vzhledem k tomu, ºe tato funkce je °e²ena dynamickými Select Boxy, není moºné podporu bez JS jednodu²e doplnit.
6.3.5
Kontrola formulá°·
Framework Nette obsahuje ²irokou nabídku nástroj· pro validaci formulá°·. Obsah textových polí je moºné validovat podle p°eddenovaných funkcí nebo pomocí regulárních výraz·. Dále se nap°íklad kontroluje, zda vybraná hodnota v Select Boxu je z mnoºiny povolených hodnot. P°i testování jsem se pokou²el do polí zadávat nepovolené hodnoty. U n¥kterých polí jsem zjistil, ºe jsem zapomn¥l nastavit validaci. Tyto chyby jsem opravil. Pokud byla validace správn¥ nastavena, fungovala bez problém·.
28
KAPITOLA 6.
Obrázek 6.2: Vzhled stránky bez CSS
TESTOVÁNÍ
Kapitola 7
Záv¥r Cílem této práce bylo analyzovat, navrhnout a implementovat softwarovou podporu pro proces vystavování faktur v malém internetovém obchod¥. Z výsledk· uºivatelských test· vyplynulo, ºe systém spl¬uje poºadavky a je p°ipraven k nasazení v ostrém provozu. Systém byl úsp¥²n¥ nasazen v internetovém obchod¥ Chytrásek [8]. Krom¥ toho systém sám vyuºívám pro vystavování faktur za tvorbu internetových stránek. Do budoucna by bylo moºné systém roz²í°it o dal²í funkce, nap°íklad:
•
vystavování p°íjmových pokladních doklad·,
•
da¬ovou evidenci,
•
elektronickou fakturaci,
•
podporu pro plátce DPH.
P°edpokládám, ºe v pouºívání a vývoji systému budu pokra£ovat i po odevzdání práce.
29
30
KAPITOLA 7.
ZÁV
R
Literatura ArgoUML
[1] CollabNet.
[online]. [cit. 15. 12. 2011].
tigris.org/>.
Dibi
[2] David Grudl.
quick-start>. [3] David
Grudl.
Dostupné z:
[online]. [cit. 20. 12. 2011]. Dostupné z:
PhpFashion
[online].
[cit.
28. 12. 2011].
Dostupné
phpfashion.com/category/dibi>. [4] David Grudl.
Nette Framework
nette.org/cs/>. [5] Derek Allard.
z:
[online]. [cit. 20. 12. 2011]. Dostupné z:
BambooInvoice: Simple, Beautiful, Open Source, Online Invoicing [online].
[cit. 21. 12. 2011]. Dostupné z:
.
Ú£tujte.cz
[6] FlexiBee Systems s.r.o.
//www.uctujte.cz>. [7] Ila Neustadt, Jim Arlow.
[online]. [cit. 21. 12. 2011].
Dostupné z:
UML 2 a unikovaný proces vývoje aplikací.
Brno : Computer
Press, 2nd edition, 2007. [8] Ing. Ivana Hlavá£ová, Ph.D.
Chytrásek - obchod s vychytávkami pro d¥ti
[online].
[cit. 21. 12. 2011]. Dostupné z:
. [9] Jakub Vrána.
NotORM - PHP library for simple working with data in the database
[online]. [cit. 18. 12. 2011]. Dostupné z:
. [10] Jan Korbel, Luká² Konarovský.
Fakturoid, robot pro tisk a správu faktur
[online].
[cit. 1. 10. 2011]. Dostupné z:
. [11] Jan Marek.
Ajax s jQuery
[online]. [cit. 28. 12. 2011]. Dostupné z:
nette.org/cs/jquery-ajax>. [12] Jan Tvrdík.
DatePicker
[online]. [cit. 28. 12. 2011].
merxes.cz/date-picker>. [13] Komunita Doctrine.
Dostupné z:
Doctrine - PHP Object Persistence Libraries and More
[online].
jQuery: The Write Less, Do More, JavaScript Library
[online].
[cit. 18. 12. 2011]. Dostupné z:
. [14] Komunita jQuery.
[cit. 18. 12. 2011]. Dostupné z:
.
31
32
LITERATURA
[15] Komunita jQuery UI.
jqueryui.com/>. [16] Komunita mPDF.
com/mpdf/>. [17] Komunita Nette.
jQuery UI
mPDF
[online]. [cit. 18. 12. 2011].
Dostupné z:
[online]. [cit. 18. 12. 2011]. Dostupné z:
Dependency injection
[online]. [cit. 18. 12. 2011]. Dostupné z:
//doc.nette.org/cs/dependency-injection>. [18] Komunita Nette.
Dokonalé zabezpe£ení webových aplikací
[online]. [cit. 28. 12. 2011].
Dostupné z:
. [19] Komunita Nette.
Databáze a ORM
[online]. [cit. 18. 12. 2011].
//doc.nette.org/cs/database>. [20] Komunita Nette.
MVC aplikace a presentery
Dostupné z:
[online]. [cit. 20. 12. 2011].
Dostupné z:
.
Prototype JavaScript framework: Easy Ajax and DOM manipulation for dynamic web applications [online]. [cit. 18. 12. 2011]. Dostupné z:
[21] Komunita Prototype.
//www.prototypejs.org/>. [22] MartyIX.
DataGrid
[online]. [cit. 28. 12. 2011].
MartyIX/nette-datagrid/tree/dev/>. [23] Oracle Corporation.
MySQL Workbench
Dostupné z:
[online]. [cit. 8. 12. 2011]. Dostupné z:
//www.mysql.com/products/workbench/>. [24] Roman Sklená°.
DataGrid
nette.org/cs/datagrid>.
[online]. [cit. 28. 12. 2011]. Dostupné z:
[25] Roman Sklená°, Tomá² Kraina.
DatePicker
[online]. [cit. 28. 12. 2011].
Dostupné z:
. [26] STORMWARE s.r.o.
Ú£etní program POHODA [online]. [cit. 21. 12. 2011].
Dostupné z:
.
[27] Zákon £. 513/1991 Sb., obchodní zákoník, v platném zn¥ní 2011. [28] Zákon £. 563/1991 Sb., o ú£etnictví, v platném zn¥ní 2011. [29] eská po²ta.
Psaní - listovní zásilky
[online]. [cit. 28. 12. 2011].
//www.ceskaposta.cz/sluzby/psani/>.
Dostupné z:
P°íloha A
Seznam pouºitých zkratek AJAX
Asynchronous JavaScript and XML
CSRF
Cross-site request forgery
CSS
Cascading Style Sheets (kaskádové styly)
DOM
Document Object Model
HTML
HyperText Markup Language
MVC
Model View Controller
ORM
Object-relational mapping (objektov¥ rela£ní mapování)
PDF
Portable Document Format (p°enosný formát dokument·)
PHP
PHP: Hypertext Preprocessor, p·vodn¥ Personal Home Page
SQL
Structured Query Language (strukturovaný dotazovací jazyk)
UC XSS
Use Case (p°ípad uºití) Cross-site scripting
33
34
PÍLOHA A.
SEZNAM POUITÝCH ZKRATEK
P°íloha B
Instala£ní p°íru£ka Pro zprovozn¥ní systému není t°eba instalace v obvyklém slova smyslu. Nejprve je nutné mít p°ipravený webový server s podporou PHP ve verzi 5.3 a databázový systém MySQL ve verzi 5. V databázovém systému vytvo°te prázdnou databázi a uºivatele, který má do této databáze p°ístup. Dále nad touto databází spus´te dotazy ze souboru sql/fakturace.sql. Dojde k vytvo°ení v²ech pot°ebných tabulek. V tabulce users jsou jiº zaloºení 2 uºivatelé, admin/admin a fakturace/fakturace. Kongurace p°ipojení k databázi se provádí v souboru app/cong.neon, kam se uvede server, název databáze, uºivatelské jméno a heslo pro p°ístup k databázi. Pro správné fungování je dále t°eba mít v rámci Apache povolený modul rewrite. Do adresá°· temp/ a log/ musí být povolen zápis webovým serverem.
35
36
PÍLOHA B.
INSTALANÍ PÍRUKA
P°íloha C
Uºivatelská p°íru£ka C.1
Obecné funkce
P°ihlá²ení
Do webového prohlíºe£e zadejte adresu, na kterou je aplikace nainstalována.
Do pole Login vypl¬te uºivatelské jméno a do pole Heslo vypl¬te heslo. Za²krtutí volby Zapamatovat na tomto po£íta£i zp·sobí, ºe p°ihlá²ení bude namísto obvyklých 20 minut platné po dobu 14 dn· (p°ípadn¥ do odhlá²ení £i smazání cookies). Klikn¥te na tla£ítko P°ihlásit se.
Zm¥na hesla
Jako p°ihlá²ený uºivatel klikn¥te na poloºku Zm¥na hesla. Ve formulá°i
vypl¬te jednou p·vodní heslo a dvakrát nové heslo a potvr¤te tla£ítkem Uloºit. Pokud je p·vodní heslo správné a ob¥ zadaná nová hesla jsou shodná, nové heslo se uloºí.
Odhlá²ení C.2
Jako p°ihlá²ený uºivatel klikn¥te na poloºku Odhlásit.
Práce s fakturami, zboºím a p°ehledy
Pro v²echny akce v této sekci je t°eba být p°ihlá²en jako Správce faktur.
Vytvo°ení a úprava faktury
Klikn¥ne na poloºku Dokumenty. Pro vytvo°ení nové
faktury klikn¥te na poloºku Nová faktura. Pro úpravu existující faktury klikn¥te na odkaz upravit u konkrétní faktury ze seznamu faktur. Poté je moºné upravovat údaje na faktu°e. Uloºení zm¥n se provede tla£ítkem Uloºit. Pomocí tla£ítka P°idat dal²í °ádek se p°idá dal²í poloºka faktury. P°i vypl¬ování poloºky se automaticky dopl¬uje cena za kus podle vybraného zboºí a modelu. Poloºku je moºné odstranit tla£ítkem X. Stisknutí kteréhokoliv z tla£ítek Uloºit, P°idat dal²í °ádek a X uloºí v²echny zm¥ny provedené ve formulá°i.
Zobrazení seznamu faktur
Klikn¥te na poloºku Dokumenty. Zobrazí se seznam faktur.
Seznam faktur je moºné °adit kliknutím na název sloupce nebo na ²ipky vedle tohoto názvu. Je také moºné jej ltrovat podle £ísla faktury, odb¥ratele, celkové £ástky a stavu tak, ºe vyplníte pole a stistnete tla£ítko Pouºít ltr. Pomocí odkaz· v pravém sloupci je moºné
37
38
PÍLOHA C.
UIVATELSKÁ PÍRUKA
vyvolat dal²í akce nad konkrétní fakturou. Ovládací prvky v dolní £ásti slouºí k ovládání stránkování seznamu faktur.
Vytvo°ení kopie faktury
Pomocí odkazu kopie u konkrétní faktury v seznamu faktur
se vytvo°í její kopie. Kopie bude mít nové £íslo dokladu a bude nezaplacená. Ostatní údaje budou shodné s p·vodní fakturou.
Ozna£ení faktury jako zaplacená, nezaplacená
Pomocí odkaz· zaplatit, resp. ob-
novit u konkrétní faktury je moºné ozna£it fakturu jako zaplacenou, resp. nezaplacenou. V prvním uvedenem p°ípad¥ se jako datum zaplacení vyplní aktuální datum.
Staºení faktury v pdf
Pomocí odkazu pdf u konkrétní faktury je moºné stáhnout tuto
fakturu ve formátu pdf.
P°idání a úprava zboºí
Klikn¥te na poloºku Zboºí. Pro p°idání zboºí vypl¬te jeho
název v dolní £ásti stráky a stistn¥te tla£ítko p°idat. Pro úpravu zboºí klikn¥te na odkaz upravit u konkrétního zboºí ze seznamu. Nyní je moºné upravovat název zboºí i názvy, ceny a po²tovné jednotlivých model·. Pro p°idání nového modelu vypl¬te poslední (prázdný) °ádek. Zm¥ny je t°eba potvrdit tla£ítkem Uloºit. Model zboºí je moºné vymazat tla£ítkem X u konkrétního modelu zboºí.
Zobrazení seznamu zboºí
Klikn¥te na poloºku Zboºí. Zobrazí se seznam zboºí. Pomocí
odkazu upravit je moºné upravit název a dal²í údaje konkrétního zboºí. Pomocí odkazu smazat je moºné ozna£it zboºí jako smazané.
Import zboºí z CSV
Klikn¥te na poloºku Zboºí a poté na Import z CSV. Nyní zadejte
soubor ve formátu CSV a vyberte odd¥lova£ pouºitý v souboru (£árka nebo st°edník). ádky souboru musí být ve formátu Název, Model, Cena, Po²tovné. Bílé znaky p°ed a za poloºkou budou ignorovány. Prázdné °ádky budou ignorovány. Pokud má soubor nesprávný formát, nebude importován ºádný z jeho °ádk·.
Zobrazení p°ehledu
Klikn¥te na poloºku P°ehledy a vypl¬te datum za£átku a konce
p°ehledu. Zobrazí se tabulka s po£tem a sou£tem cen prodaného zboºí a tabulka s celkovou vyfakturovanou £ástkou (bez stornovaných faktur) a celkovou dluºnou £ástkou za zadané období.
C.3
Administrace aplikace
Vytvo°ení a úprava uºivatele
Pro vytvo°ení nebo úpravu uºivatele je t°eba být p°ihlá²en
jako Správce uºivatel·. Pro vytvo°ení nového uºivatele klikn¥te na odkaz nový uºivatel. Pro úpravu existujícího uºivatele klikn¥te na odkaz upravit u konkrétního uºivatele.
P°íloha D
Obsah p°iloºeného CD
Obrázek D.1: Seznam p°iloºeného CD
39