• No results found

REZERVAČNÍ SYSTÉM TANEČNÍHO STUDIA

N/A
N/A
Protected

Academic year: 2022

Share "REZERVAČNÍ SYSTÉM TANEČNÍHO STUDIA"

Copied!
56
0
0

Loading.... (view fulltext now)

Full text

(1)

REZERVAČNÍ SYSTÉM TANEČNÍHO STUDIA

Bakalářská práce

Studijní program: B2646 – Informační technologie Studijní obor: 1802R007 – Informační technologie Autor práce: Simona Němečková

Vedoucí práce: doc. RNDr. Pavel Satrapa, Ph.D.

(2)

RESERVATION SYSTEM FOR DANCE STUDIO

Bachelor thesis

Study programme: B2646 – Information Technology Study branch: 1802R007 – Information Technology

Author: Simona Němečková

Supervisor: doc. RNDr. Pavel Satrapa, Ph.D.

(3)
(4)
(5)
(6)

Abstrakt

Tato bakalářská práce popisuje návrh, vývoj a implementaci rezervačního systému pro taneční studio, který běží na adrese www.rezervace.poledancejablonec.cz jako webová aplikace.

Zpráva obsahuje srovnání dostupných rezervačních systémů pro fitness centra.

Popisuje výhody a nevýhody vybraných příkladů a vyvozuje závěr z provedeného průzkumu. Kvůli nevyhovujícím požadavkům byla vytvořena vlastní aplikace.

Aplikace poskytuje rozhraní pro běžné uživatele, lektory a administrátory. Běžný uživatel zde spravuje své rezervace na události pořádané v tanečním studiu, zakupuje permanentky a služby hradí ze svého konta na uživatelském účtě. Lektoři studia vyplňují v systému docházku na jednotlivých událostech a mají možnost dobíjet konto zákazníkům převzetím hotovosti. Mohou také spravovat rezervace běžných uživatelů.

Administrátor aplikace spravuje pořádané události, nabízené permanentky, bonusy v rámci věrnostního programu, vyřizuje pohledávky a provádí další činnosti.

Při programování bylo využito programovacího jazyka Python ve spojení s frameworkem Flask. Jako databázový systém aplikace využívá MySQL. Aplikace je naprogramována za pomoci nejnovější verze 5 jazyka HTML společně s jazykem CSS ve verzi 3 pro moderní vzhled. Pro skriptování na straně klienta je aplikován jazyk JavaScript s knihovnou jQuery. S technologií Ajax se systém snaží o maximální efektivitu a uživatelsky přátelské prostředí.

Klíčová slova

webová aplikace, rezervační systém, Python, Flask, dynamická webová stránka

(7)

Abstract

This bachelor thesis describes designing, development and implementation of a reservation system for a dance studio. The system runs as a web application on www.rezervace.poledancejablonec.cz.

The document compares available reservation systems designed for fitness centers. It describes advantages and disadvantages of a few selected examples and concludes a result from the research.

The application provides interfaces for klients, lecturers and administrators.

A common user uses it to manage his reservations for events held by the studio, buys season tickets and pays the services from his account. The lecturers enter attendance of participants on individual events and they are able to take cash from clients and give it to their account in the system. They can also manage reservation by other clients.

An administrator of the application manages organized events, offered season tickets, bonuses within a loyalty program, handles debts and performs other activities.

Python language with Flask framework was used for programming. As a database system, the application uses MySQL. The application was programmed with the help of the newest version of HTML language along with CSS language of version 3 for a modern design. JavaScript language with jQuery plugin is applied to perform scripting on the client side. The system uses Ajax and tries to achieve maximal efficiency and user-friendly design.

Keywords

web application, reservation system, Python, Flask, dynamic web page

(8)

Obsah

Abstrakt...5

Klíčová slova...5

Abstract...6

Keywords...6

Seznam ilustrací...9

Seznam symbolů, zkratek a termínů...10

1 Úvod do problému...11

1.1 Požadované funkce...11

2 Dostupné rezervační systémy...13

2.1 SuperSaaS...14

2.2 Fitness-Rezervace.cz...15

2.3 iSport...15

2.4 Shrnutí...15

3 Tvorba webových stránek...16

3.1 HTTP protokol...16

3.2 Skriptování na straně klienta...17

3.3 Skriptování na straně serveru...17

3.4 Databáze...18

4 Řešení rezervačního systému...20

4.1 Databáze...20

4.2 Základ webové aplikace...22

4.3 Šablona pro index...23

4.4 Knihovny pro webovou aplikaci...24

4.4.1 Simple Python HTML...24

4.4.2 Modul pro práci s databází...25

4.4.3 Modul pro registraci a přihlašování...25

4.4.4 Modul pro práci s doklady...26

4.5 Faktury a doklady...27

4.6 Kalendář...28

4.7 Způsoby rezervace...31

(9)

4.7.1 Klasická rezervace...31

4.7.2 Rezervace lektorem...32

4.7.3 Předrezervace...32

4.7.4 Využití bonusu...33

4.7.5 Náhrada zmeškané kurzové lekce...33

4.8 Zrušení rezervace...34

4.9 Sledování volných míst na události...35

4.10 Registrace, přihlášení a odhlášení...35

4.10.1 Registrace...35

4.10.2 Potvrzení e-mailové adresy...37

4.10.3 Přihlášení...37

4.10.4 Odhlášení...38

4.10.5 Zapomenuté heslo...38

4.11 Profil uživatele...39

4.12 Menu běžných uživatelů...40

4.13 Rozhraní pro lektory...42

4.13.1 Příjem a výdej peněz...42

4.13.2 Docházka...43

4.14 Rozhraní pro administrátory...43

4.14.1 Správa událostí...44

4.14.2 Správa uživatelů...45

4.14.3 Správa bonusů...46

4.14.4 Správa permanentek...47

4.14.5 Správa pohledávek...48

4.15 Úlohy pro Cron...49

5 Vyhodnocení řešení...51

6 Závěr...52

Použitá literatura a zdroje...53

Přílohy...55

(10)

Seznam ilustrací

Ilustrace 1: Databázové schéma...21

Ilustrace 2: Ukázka vystavené zálohové faktury...28

Ilustrace 3: Kalendář událostí na domovské stránce...29

Ilustrace 4: Ukázka detailu události pro běžného uživatele...30

Ilustrace 5: Registrační formulář...36

Ilustrace 6: Přihlašovací formulář...38

Ilustrace 7: Profil uživatele...40

Ilustrace 8: Rozhraní pro administrátory...44

Ilustrace 9: Vytváření nové události...45

Ilustrace 10: Vytváření nového bonusu...47

(11)

Seznam symbolů, zkratek a termínů

HTTP

• HyperText Transfer Protocol

• Internetový protokol pro předávání HTML dokumentů HTML

• HyperText Markup Language

• Značkovací jazyk pro hypertext CSS

• Cascading Style Sheet

• Kaskádové styly URL

• Uniform Resource Locator

• Přesná adresa dokumentu na Internetu Metoda GET

• Metoda dotazování ze strany klienta, při které se data předávají jako součást URL

Metoda POST

• Metoda dotazování ze strany klienta, při které se data předávají v těle dotazu JavaScript

• Interpretovaný programovací jazyk pro webové stránky pracující na straně klienta

jQuery

• Knihovna JavaScriptu pro usnadnění programování Python

• Objektově orientovaný skriptovací jazyk, který navrhl Guido van Rossum Flask

• Webový framework pro Python MySQL

• Multiplatformní databázový systém

(12)

1 Úvod do problému

Cílem práce je nalézt vhodné řešení problému tanečních studií, který spočívá ve výběru rezervačního systému, který bypokryl všechny potřeby studia a jeho majitele.

Hlavním účelem systému je usnadnit provoz studia, a to jak pro zákazníky, tak pro lektory i zaměstnavatele. Měl by poskytnout podporu pro běžné činnosti související s chodem studia. Kvůli specifickým požadavkům a nevelkému rozpočtu konkrétního tanečního studia není vhodné použít jeden z již existujících rezervačních systémů.

1.1 Požadované funkce

Běžným uživatelům je nutné poskytnout možnost rezervovat si místo na jednotlivé události pořádané ve studiu a své rezervace případně rušit. Uživatelé mohou využívat tzv. bonusy, díky kterým získávají slevy na lekce nebo permanentky.

Pro bonusy má každý uživatel na svém účtu konto bonusových bodů – tyto body získává za účast na speciálních lekcích, které mají definován počet bonusových bodů za absolvování. Vedle tohoto konta uživatelé potřebují konto virtuální měny, které by simulovalo klasické konto v korunách českých a sloužilo by k provádění rezervací a zakupování permanentek na více událostí stejného typu. Z právních důvodů nelze použít jako měnu konta koruny české, proto byla pro účely systému vytvořena měna virtuální s názvem invertony. Konto s virtuální měnou se dobíjí přímo ve studiu převzetím ekvivalentní částky v korunách lektorem nebo bankovním převodem na základě vystavené faktury. Vedle těchto specifických požadavků je samozřejmě nutné umožnit uživatelům registraci nového účtu, přihlášení, odhlášení, změnu kontaktních a osobních údajů (jméno, telefonní číslo, e-mailová adresa, heslo a podobně) a řešení v případě zapomenutí hesla.

Lektoři (tj. zaměstnanci) studia potřebují vyplňovat formulář s docházkou klientů na lekce. Dále mohou přijímat peníze od zákazníků a proměňovat je ve virtuální měnu

(13)

a naopak peníze z konta zákazníkům vracet, k tomu pak tisknout doklady. Lektorům by mělo být umožněno přihlašovat klienty na lekce proběhlé i budoucí pro případy, kdy si klienti nebudou moci rezervaci provést sami. Stejně tak je nutné lektorům umožnit rezervace rušit.

V administrátorském rozhraní musí být možné vytvářet, upravovat a mazat události, permanentky a bonusy. Administrátor může udělit uživateli tzv. ban, který mu zakáže přihlášení do systému. Libovolnému uživateli může dále přidělit nebo odebrat roli lektora a zpřístupnit nebo zakázat mu tak lektorské funkce v systému. V neposlední řadě administrátor vyřizuje pohledávky, tedy zadává, zda přijal platbu za vystavenou fakturu.

Nejdůležitější stránkou systému je pro majitele přehlednost a intuitivní ovládání.

Pokud potenciální zákazníci nebudou umět rezervaci provést a využití služby si rozmyslí, taneční studio přijde o zisk. Majitel tanečního studia dále také sleduje cenu systému a náklady na jeho implementaci a provoz. Dalšími z faktorů pro výběr rezervačního systému jsou bezproblémová funkčnost, atraktivita designu a možnost využití sms brány a platební brány.

(14)

2 Dostupné rezervační systémy

Některá taneční studia nepoužívají žádný rezervační systém a rezervace u nich probíhá pouze vyplněním formuláře na webových stránkách studia. Pověřená osoba poté zájemcům odpoví na zadanou e-mailovou adresu, zda je na lekci volné místo a jestli jejich rezervace byla přijata. Tento systém je sice jednoduchý a levný, ale velice neefektivní a pomalý, vyžaduje práci navíc a je náchylný k chybám. Další nevýhodou je, že klienti se často na lekce přihlašují, nezaplatí je předem a poté na ně nedorazí.

Blokují tím místo dalším zákazníkům a studio tak přichází o zisk.

Další používanou variantou je použití systému vytvořeného na zakázku. Výhodou této varianty je přizpůsobení potřebám konkrétního studia a jeho majitele, nevýhodu však představuje cena takového systému. Drobná studia si takový výdaj nemohou dovolit a přiklánějí se spíše k použití již existujícího univerzálního systému pro různé druhy fitness center.

Mezi dostupné univerzální rezervační systémy patří například SuperSaaS, iSport, Reservio nebo Fitness-Rezervace.cz. Každý z těchto systémů běží na serveru svého provozovatele a studio si jej může pouze najmout jako službu. Tyto systémy se liší nabízenými funkcemi a možnostmi i cenou.

Ve většině systémů si uživatel vytvoří účet registrací. Pod svým účtem může poté spravovat své rezervace. V rámci uživatelského účtu někdy mají uživatelé konto, ze kterého rezervace hradí předem. Předchází se tak situaci, kdy klienti blokují místo na lekci, i když ji nemají zaplacenou. Výjimečně nabízejí systémy i konto bonusů, díky kterým je možné vypisovat slevy na jakékoli lekce, permanentky nebo jiné služby studia. Lze tak odměňovat klienty, kteří často využívají služeb studia, udělovat bonusy jako ceny v soutěži vypsané studiem a podobně.

Některé systémy nabízejí možnost automatického posílání sms zpráv uživatelům.

Tato vlastnost se může hodit například v případě, že se zruší lekce a bude nutné informovat o této skutečnosti klienty, kteří jsou na lekci přihlášeni. Samozřejmostí pak bývají podobné notifikace přes e-mail.

(15)

Různé systémy také nabízejí různý počet rezervací, které mohou uchovávat. Toto číslo představuje důležitý faktor pro výběr rezervačního systému a pohybuje se přibližně mezi padesáti a tisícem. Většinou se od něj odvíjí cena systému.

V následující tabulce je zobrazen přehled tří rezervačních systémů s důležitými faktory. Každý systém nabízí různé verze, většinou se liší počtem uchovávaných rezervací nebo podporou některých vlastností. Z nabídky jednotlivých systémů je vždy vybrán ten nejvíce vyhovující (kompromis mezi vlastnostmi a cenou).

Tabulka 1: Srovnání tří vybraných dostupných rezervačních systémů

SuperSaaS Fitness-

Rezervace.cz

iSport Konto (kreditní

systém) ano ano ano

Podpora bonusů ne ne last-minute slevy +

cenové hladiny Počet uchovávaných

rezervací

600 neomezený neomezený

Podpora permanentek

ne ano ano

Platební brána PayPal ano PayPal

Sms notifikace ano ano ano

Cena 450 Kč měsíčně 500 Kč měsíčně 590 Kč měsíčně

2.1 SuperSaaS

Rezervační systém SuperSaaS umožňuje vytvářet a spravovat rezervace, má mimo jiné možnost využití kreditního systému, řeší tedy problém s klienty, kteří rezervaci nezaplatí předem a poté na lekci nepřijdou. Nepodporuje ale jakékoli bonusy a výhody a navíc omezuje počet uchovávaných rezervací, který je předem těžko odhadnutelný.

Při zvýšení tohoto počtu se zvyšuje i měsíční poplatek za provoz systému. [1]

(16)

2.2 Fitness-Rezervace.cz

Mezi výhody rezervačního systému Fitness-Rezervace.cz patří podpora platební brány (možnost platby kartou), permanentek, kreditní systém a automatické odesílání sms zpráv. Splňuje tedy stěžejní požadavky kladené na rezervační systém. Jeho hlavní nevýhodu představují vysoké náklady na jeho použití a integraci. [2]

2.3 iSport

Rezervační systém iSport poskytuje možnost využívat permanentky i posílat uživatelům automaticky sms zprávy. Aplikace využívá také kreditní systém, díky kterému si uživatelé platí lekce předem. Nebýt poměrně vysokých poplatků za provoz tohoto systému, mohl by také vyhovovat požadavkům. [3]

2.4 Shrnutí

Porovnávané rezervační systémy se v mnoha věcech podobají. Jako nejméně vhodný se jeví rezervační systém SuperSaaS, protože i přes nejnižší cenu nepodporuje důležité požadované funkce jako například bonusy. Další dva systémy by bylo možné použít, kdyby jejich cena nebyla stále relativně vysoká, pro takto drobné podnikání téměr nepřijatelná. Z těchto důvodů byla zvolena varianta návrhu vlastního rezervačního systému při nízkých nákladech na jeho provoz.

(17)

3 Tvorba webových stránek

Webové stránky jsou dokumenty, které se interpretují prohlížečem a předává je server. Tyto dokumenty se vyměňují pomocí nestavového protokolu HTTP, popřípadě šifrovaného HTTPS.

Statické dynamické stránky se předávají klientovi vždy stejné a nemění se.

Pro web se používá značkovací jazyk HTML, případně XHTML (založen na XML formátu) a vzhled se upravuje pomocí jazyka CSS.

Dynamická webová stránka je taková stránka, jejíž obsah se mění v závislosti na čase, uživateli, požadavku uživatele a datech v databázi. Generování stránky může probíhat pomocí skriptování na straně klienta (tj. webového prohlížeče) nebo na straně serveru. [4]

3.1 HTTP protokol

Protokol HTTP se používá pro komunikaci mezi webovým serverem a klientem.

HTTP používá protokol TCP obvykle na portu 80. Bezstavovost protokolu HTTP znamená, že každý požadavek je samostatný a nemůže využívat data jiného požadavku.

Tuto vlastnost lze částečně kompenzovat pomocí cookies, dat přenášených mezi klientem a serverem v rámci každého požadavku. Díky cookies lze například identifikovat jednotlivé klienty vytvořením jedinečného identifikačního řetězce pro každého z nich.

Pro webové stránky existuje několik základních metod pro dotazování ze strany klienta. Metoda GET odesílá data jako součást URL za otazníkem, má tedy menší povolenou velikost. Druhá metoda s názvem POST umožňuje posílat serveru metaproměnné a hodí se především pro citlivá nebo rozsáhlá data.

(18)

3.2 Skriptování na straně klienta

Při generování na straně klienta se prohlížeči posílá kód stránky i se skriptem, který pak provádí počítač uživatele. Díky tomu může obsah stránky reagovat například i na pohyb kurzoru myši nebo vstup z klávesnice neodeslaný serveru. Nevýhodou jsou rozdíly v interpretaci v různých prohlížečích. Uživatelé toto skriptování mohou v prohlížeči také vypnout, čímž vznikají problémy s funkčností stránky.

Pro skriptování na straně klienta se nejčastěji používá skriptovací jazyk JavaScript. Pro účely aplikace rezervačního systému byl vybrán proto, že právě jeho oblíbenost připravuje širokou podpůrnou základnu a díky tomu snadnější řešení problémů vyskytujících se při programování.

Vedle JavaScriptu byla vybrána i jeho knihovna s názvem jQuery, která sjednocuje rozdíly mezi prohlížeči a výrazně zjednodušuje programování.

3.3 Skriptování na straně serveru

Pro skriptování na straně serveru se používá program, který generuje stránku podle požadavku klienta, dat v databázi, aktuálního času a dalších parametrů. Tento program představuje některý ze skriptovacích jazyků jako například PHP, Python, Ruby, Perl, Java atd. Server provede skript a vrací pouze výsledek, čehož se využívá nejen k sestavení HTML kódu na základě parametrů, ale také ke skrytí zdrojového kódu programu koncovému uživateli. Zdrojová data jsou izolována na serveru a přístup k nim vede pouze skrze skript v aplikaci nebo přímo skrze alternativní protokoly.

Výběr programovacího jazyka na straně serveru pro aplikaci rezervačního systému probíhal ze tří jazyků: PHP, Python a Java. Při rozhodování se zohledňovala především znalost jazyka programátorem, přehlednost a stručnost syntaxe a aktivita nebo velikost podpůrné skupiny programátorů.

Programovací jazyk PHP poskytuje nejširší podpůrnou základnu z vybraných jazyků v češtině. Je poměrně jednoduchý, specializovaný přímo na webové stránky

(19)

a obsahuje velký počet funkcí již v základní knihovně. Na druhou stranu tyto funkce nemají jednotné názvosloví a to způsobuje horší čitelnost kódu. Jazyk PHP nebyl od začátku plně objektový a řada věcí do něj byla implementována později a někdy nekvalitně, například výjimky jsou dodnes problémovou částí PHP.

Jazyk Python a jeho použití pro web má sice o mnoho menší podpůrnou skupinu, ale základní problémy, se kterými se může programátor při psaní webové stránky v Python setkat, jsou většinou vyřešeny. Tento jazyk je plně objektový a syntaxe je stručná a přehledná, bez zbytečných znaků jako jsou například složené závorky ohraničující tělo funkce. Lze si vybrat z řady frameworků pro web – Django, Flask, Pyramid a mnoho dalších. [4]

Co se týče syntaxe programovacího jazyka Java, kód bývá sice poměrně přehledný, ale někdy až zbytečně dlouhý, což způsobuje především silná zpětná kompatibilita ve spojení se stářím jazyka. Silná typovost jazyka může být na škodu i k užitku v závislosti na preferencích programátora. Slabé místo Javy představuje pomalý, často kritizovaný garbage collector (algoritmus, který vyhledává a uvolňuje již nepoužívané části paměti).

Vzhledem k výše uvedeným vlastnostem byl pro účely rezervačního systému vybrán jazyk Python, který je na vývojovém serveru nainstalován ve verzi 2.7.

Z dostupných frameworků pro Python se rozhodovalo mezi Django a Flask. Framework Django je vysokoúrovňový a poměrně rozsáhlý, bývá doporučován hlavně pro velké projekty. Pro menší jednoduché stránky se hodí spíše Flask, mikroframework kladoucí nevelké požadavky na server. Protože projekt rezervačního systému není příliš rozsáhlý, byl pro jeho účely byl vybrán framework Flask. [5]

3.4 Databáze

Dynamické webové stránky zpravidla používají některé z dostupných databázových úložišť. Mezi nejčastější patří například MySQL, PostgreSQL nebo MariaDB. Při výběru mezi databázemi se zohledňuje hlavně její rychlost, dále také složitost jazyka a podpora funkcí potřebných pro daný typ aplikace. Protože na serveru

(20)

pro rezervační systém běží MySQL server, byl pro tyto účely vybrán. Jeho výhody představuje relativně vysoká rychlost a také široká podpůrná skupina programátorů a řešené problémy na webu.

(21)

4 Řešení rezervačního systému

4.1 Databáze

Na serveru pro vývojovou i pro ostrou verzi běží databázový server MySQL.

Databáze rezervace obsahuje devatenáct tabulek. V příloze se nachází databázové schéma. Tabulky, které obsahují cizí klíče, používají úložiště InnoDB, které podporuje cizí klíče. Ostatní tabulky běží ve výchozím rychlém úložišti MyISAM podporujícím fulltextové vyhledávání. [6]

Pořádané lekce tanečního studia se ukládají do tabulky akce. Uchovává se mimo jiné jméno lektora, který lekci vede, ale atribut se neodkazuje na záznam v tabulce uzivatel, aby lektor nemusel být zaregistrován v systému a mít lektorská oprávnění.

Může tak být vypsána jakákoli lekce s externistou nebo událost bez lektora.

Každá akce může mít jednu nebo více událostí, relace je tedy povinná a její kardinalita se značí výrazem 1:n. Tato relace umožňuje vytvářet kurzy, tedy několik lekcí opakujících se například jednou týdně.

Při provedení rezervace se uživateli vytvoří záznam v tabulce rezervace. Úhrada rezervace může probíhat několika způsoby. Uživatel může z konta zaplatit plnou cenu lekce nebo použít bonus (dostupné bonusy poskytuje tabulka bonus) a uhradit tak část ceny lekce z konta a část z bonusových bodů. Pokud bude uživatel v době lekce přihlášen na jakýkoli kurz, platí pro něj cena pro kurzistky. Dále může k rezervaci použít permanentku. Lektoři mají v některých případech rezervaci zdarma nebo se stejnou slevou jako kurzistky. Údaje o tom, jak byly jednotlivé rezervace uhrazeny, jsou uloženy rovněž v tabulce rezervace.

Zároveň s vytvořením záznamu v tabulce rezervace se musí vytvořit odpovídající počet řádků v tabulce dochazka. Zde lze najít informaci o tom, zda se klient dostavil na lekci. Pokud zákazník zmeškal kurzovou lekci, vzniká mu nárok na bezplatnou náhradu této lekce na tzv. volné hodině. Pokud této možnosti využije, zmeškaná lekce se mu označí jako nahrazená.

(22)
(23)

4.2 Základ webové aplikace

Webová aplikace běží ve vývojové a ostré verzi. Konfiguraci jednotlivých verzí definuje modul config.py. V tomto souboru se nastavuje odesílatel e-mailových zpráv, připojení k databázi a další hodnoty.

Vstupním souborem aplikace je modul web.py. Zde se nastavuje pracovní adresář na ten, ve kterém se nachází aktuální soubor (web.py). Dále se zde importuje třída Flask a vytváří se její instance. Podle toho, který skript se spustí jako první, se vybere konfigurace vývojové nebo ostré verze. V modulu web.py se také nachází dekorátor spust, který se stará o spuštění každé stránky. Dekorátor Flasku s názvem route mapuje URL adresu na metodu a dekorátor spust místo volání metody vytváří instanci třídy a volá její metodu __call__. Díky tomu je možné lépe využívat objektové programování. V tomto modulu musí být importované všechny třídy, které používají směrovací adresu.

Metoda favicon společně s dekorátorem route mapuje adresu /favicon.ico na ikonu umístěnou v adresáři /static/images. Obdobně se směruje soubor definující pravidla pro roboty na adrese /robots.txt. Chybová stránka s číslem 404, která se zobrazí, když se uživatel snaží zobrazit neexistující stránku, je obsloužena metodou pg404 s dekorátorem Flasku errorhandler s parametrem 404.

V modulu page.py je definována abstraktní třída s názvem _Page. Tato třída funguje jako předek všech webových stránek v aplikaci. Třída má několik atributů – atribut db slouží k přístupu k připojené databázi, druhý atribut s názvem cookieuid vrací cookie pro identifikaci přihlášeného uživatele nebo None, pokud není uživatel přihlášen. Informace o přihlášeném uživateli lze číst pomocí atributu uzivatel, kde je jako slovník uložen jeho záznam z databázové tabulky uzivatel. Pro přihlašování, registraci, odhlašování a podobné akce slouží atribut autentif, který vrací instanci třídy Autentif. Obdobně funguje atribut doklady, který poskytuje metody pro práci s fakturami a doklady a vrací instanci třídy Doklady. Ve třídě _Page je také definována konstanta FUNKCEID, která přiřazuje různým funkcím uživatelů (administrátor, lektor a běžný uživatel) celočíselné hodnoty, pomocí kterých se jednoduše ověřují práva přihlášeného

(24)

uživatele. Druhou konstantou třídy _Page je COOKIE_UZIVATEL, jejíž hodnota udává název cookie přihlášeného uživatele.

Vedle těchto atributů má třída _Page metodu pro odeslání e-mailové zprávy, metodu pro zjištění práv přihlášeného uživatele, abstraktní metodu obsah pro vykreslení měnící se části stránky (vše kromě záhlaví, menu a zápatí) a metodu __call__, která se spustí při vytvoření stránky, volá metodu obsah a nakonec uzavírá spojení s databází.

Potomkem _Page je třída Ajax, která slouží k vykreslení pouze části celé stránky pomocí technologie Ajax. Třída Page dědí atributy a metody také od _Page. Metoda __call__ je zde překryta – v případě potřeby modifikuje obsah do unicode sady, poté renderuje stránku pomocí třídní metody _render dosazením proměnných do šablony index.html a nakonec uzavírá spojení s databází. Třída Page navíc obsahuje metodu addCss, která do hlavičky HTML dokumentu přidá odkaz na daný soubor s CSS styly, a metodu addJs vkládající odkaz na daný soubor s JavaScript kódem do hlavičky.

4.3 Šablona pro index

Téměř každá webová stránka v aplikaci používá šablonu index.html. Tento dokument je napsán v jazyce HTML5. Hlavička obsahuje mimo jiné název stránky, popis a klíčová slova kvůli optimalizaci pro vyhledávače. Dále se zde odkazuje na soubory CSS stylů a JavaScript kódů. Jeden ze souborů se skripty je doplněk jQuery stažený z webu v poslední dostupné minimalizované verzi 1.11.1. [7]

Pro pohodlné zadávání data a času uživatelem byl použit jQuery plugin s názvem Date and Time Picker. [8]

V hlavičce se také nachází JavaScript kód pro konfiguraci colorboxu, volně dostupného jQuery pluginu. Nastavují se zde hodnoty jako například maximální šířka boxu, rychlost vykreslení nebo ikona odkazu pro zavření. Pomocí skriptu se colorbox spustí po kliknutí na jakýkoli odkaz se třídou cb. [9]

(25)

Nachází se zde také skript pro spuštění pluginu ToolTip, součásti jQuery UI.

Jedná se o náhradu klasické bublinové nápovědy pod atributem title, kterou lze přizpůsobovat vhodnými styly a skripty. [10]

Pro další odkazy na soubory s CSS styly a JavaScript kódy je zde umístěna proměnná heads, jejíž hodnota se šabloně dynamicky předává při renderování stránky.

Díky tomu je možné například rozdělit CSS styly podle jednotlivých stránek a nemusí se tak vždy načítat všechny styly v aplikaci. Obdobně toto platí i pro skripty.

Tělo dokumentu index.html vyplňuje blokový element, ve kterém se nachází odkaz na domovskou stránku tanečního studia v podobě jeho loga a odkaz na domovskou stránku rezervačního systému. Poté se šabloně předává proměnná v závislosti na tom, zda je uživatel přihlášen nebo není. Vypisuje se zde přihlašovací formulář nebo box s informacemi o přihlášeném uživateli.

Pod touto sekcí šablona vyžaduje hodnotu proměnné menu. Tato proměnná obsahuje odkazy v hlavním menu. Zobrazení jednotlivých odkazů závisí na funkci uživatele (nepřihlášen, přihlášen, lektor, administrátor).

Po naplnění menu se do stránky vypíše konkrétní obsah podle hodnoty proměnné obsah. Zbývá už jen neměnné záhlaví stránky s kontaktem na administrátora a odkazem na stránku s nejčastějšími dotazy.

4.4 Knihovny pro webovou aplikaci

4.4.1 Simple Python HTML

Pro jednodušší generování HTML kódu pomocí jazyka Python byla použita volně dostupná knihovna Simple Python HTML. Tento doplněk umožňuje efektivnější práci s HTML kódem použitím jeho objektů a metod. Tato knihovna navíc provádí escape textu, takže zabraňuje rozpadnutí syntaxe a zároveň znemožňuje útok cross site scripting. [11]

(26)

4.4.2 Modul pro práci s databází

Práci s databází zjednodušuje modul sql.py umístěný v balíčku weblibs. Třída MySQL obsahuje konstruktor, ve kterém se atributy nastavují na výchozí hodnoty.

Atribut connect navazuje spojení s databází, pokud se tak ještě nestalo. Metoda read provádí dotazy výběrového typu a vrací výsledek ve formě generátoru slovníků. Atribut cursor vytvoří kurzor při každém dotazu a naplní jej výsledky dotazu. Pomocí metody write lze do databáze zapisovat, tedy provádět dotazy aktualizačního typu. Tato metoda vrací počet ovlivněných záznamů. Poslední metoda třídy MySQL se nazývá close a slouží k ukončení spojení s databází.

Instance třídy MySQL se vytváří v těle atributu db třídy _Page. Je tedy přístupná jakékoli stránce v aplikaci.

4.4.3 Modul pro registraci a přihlašování

Soubor autentif.py v balíčku weblibs představuje modul pro registraci, přihlašování, odhlašování a ostatní související akce. V modulu jsou definovány různé výjimky přestavující každá jinou chybu – například neexistující účet, telefonní číslo zadané ve špatném tvaru, neúspěšné odeslání registračního e-mailu a podobně.

Vedle těchto výjimek je v modulu definována třída Autentif, která obsahuje konstruktor, ve kterém se nastavují atributy na výchozí hodnoty a zjišťuje se, zda se v databázi nachází záznam o sezení (session) uživatele. V případě, že session existuje a je platná, prodlouží se její platnost o další dvě hodiny.

Další metoda třídy Autentif se nazývá prihlasit a postupně kontroluje, zda už uživatel není přihlášen, zda již potvrdil svou e-mailovou adresu kliknutím na odkaz v registračním e-mailu, zda zadal správné přihlašovací údaje a zda nemá na svém účtě ban, tedy zakázané přihlášení. Pokud nenastane žádná z těchto situací, v databázové tabulce session vytvoří záznam se sezením uživatele. Změní se datum a čas posledního přihlášení uživatele a atribut uzivatel se naplní slovníkem s hodnotami o uživateli (například jméno, příjmení, telefon, funkce atd.). Nakonec se z databáze odstraní

(27)

všechna již neplatná sezení. Pro odhlášení slouží metoda odhlasit, která z databáze odstraní session přihlášeného uživatele.

Metoda registrovat třídy Autentif nejprve kontroluje validitu zadané e-mailové adresy, telefonního čísla, jména, příjmení a hesla. Pokud účet se zadanou e-mailovou adresou již existuje a byl aktivován kliknutím na odkaz v registračním e-mailu, vyvolá se výjimka a metoda je ukončena. Pokud účet existuje, ale ještě aktivován nebyl, změní se údaje o uživateli na nové a uživateli se znovu odešle registrační e-mail. Pokud účet s danou e-mailovou adresou ještě neexistuje, v databázi se vytvoří a na požadovanou adresu se pošle registrační e-mail.

Odkaz pro potvrzení e-mailové adresy se tvoří složením protokolu, doménového jména webu, řetězce potvrzeni-mailu, identifikačního čísla uživatele a haše pro první přihlášení vytvořeného z identifikačního čísla uživatele a kryptografické soli.

Při prvním přihlášení (kliknutí na tento odkaz) se spustí metoda prvniPrihlaseni třídy Autentif. Kontroluje se správnost haše, existence účtu a jestli již nebyl účet aktivován.

Po úspěšné kontrole se provede metoda prihlasit. V případě, že uživatel byl již přihlášen, systém ho odhlásí a přihlásí pod požadovaným účtem.

V situaci, kdy uživatel zapomene heslo ke svému účtu, se provádí metoda zapomnel. Této metodě se předává e-mailová adresa účtu. Pokud účet s touto adresou existuje a byl již aktivován, odešle se na adresu e-mailová zpráva s náhodně vygenerovaným novým heslem. Toto heslo se v hašované podobě následně zapíše do databáze k danému účtu.

4.4.4 Modul pro práci s doklady

O vytváření faktur, příjmových a opravných dokladů se stará třída Doklady v souboru doklady.py v balíčku weblibs. Konstruktor této třídy nastavuje jediný atribut db na předanou hodnotu.

Třída Doklady obsahuje metody pro vytváření faktury, příjmového dokladu a opravného dokladu. Faktura se vystavuje v případě, kdy uživatel chce dobít své konto v rezervačním systému pomocí bankovního převodu. Při vystavování faktury se

(28)

kontroluje, zda už uživatel nemá vystavenou neuhrazenou fakturu. V takovém případě se vyvolá výjimka definovaná v tomto modulu a další faktura se již nevytvoří.

V opačném případě se do databázové tabulky faktura vloží nový záznam s daným odběratelem a na danou částku. Metoda vrací evidenční číslo faktury sestavené podle požadavků.

Pokud si uživatel chce dobít konto v rezervačním systému přímo ve studiu předáním hotovosti, vystaví mu metoda vytvoritPrijmovy příjmový doklad na danou částku. Tato metoda vloží nový řádek do databázové tabulky prij_doklad a vrátí evidenční číslo dokladu.

Obdobně funguje i metoda pro vytvoření opravného dokladu, která se volá, pokud si chce klient vybrat peníze z konta rezervačního systému. Tuto akci bude provádět lektor přímo ve studiu.

4.5 Faktury a doklady

V balíčku templates se vedle souboru index.html nachází i šablony pro zobrazení vystavené faktury, příjmového dokladu a opravného dokladu. Každá z těchto šablon obsahuje v hlavičce název stránky, znakovou sadu a odkazy na soubor s kódem jQuery a na soubor s CSS styly společný pro všechny typy faktur a dokladů. Je zde také prostor pro další kód předaný proměnnou heads. Tělo šablony tvoří záhlaví s nadpisem, logem studia a informacemi o odběrateli předanými do proměnných. Různé šablony poté obsahují různé informace o účelu faktury nebo dokladu. Do zápatí šablony se vkládá kontakt na odpovědnou osobu.

Dosazení proměnných do šablony pro fakturu se provádí pomocí skriptu v modulu faktura.py. Definuje se zde třída Faktura, kterou mapuje dekorátor Flasku route na adresu /faktura s povolením metody GET. Dekorátor spust mapuje třídu na metodu obsah. Při vytvoření stránky s fakturou se spustí metoda __call__, která vyrenderuje šablonu podle parametrů. Metoda obsah zjistí hodnoty potřebných parametrů a vrací je ve formě slovníku.

(29)

Analogicky fungují i moduly pro příjmový doklad, pro opravný doklad z důvodu neuhrazení faktury a pro opravný doklad z důvodu vrácení peněz z konta.

4.6 Kalendář

Obsah domovské stránky vyplňuje kalendář, který je vytvořen za pomoci jQuery pluginu FullCalendar. Tento doplněk zobrazuje události studia, umožňuje nastavit rozdílné styly pro různé druhy událostí, akci po kliknutí na událost a další parametry.

[12]

Při vykreslování domovské stránky se nejprve z databáze zjistí informace o nezaplněných kurzech, které ještě nezačaly. Tyto kurzy se jako odkazy vypíšou

Ilustrace 2: Ukázka vystavené zálohové faktury

(30)

nad kalendářem pro rychlejší orientaci klientů. Vedle každého odkazu se zobrazuje obrázek otazníku a po najetí myši na tento obrázek se objeví ToolTip nápověda s popisem kurzu. Po kliknutí na jeden z těchto odkazů se zobrazí colorbox s detailem tohoto kurzu.

Po výpisu těchto kurzů se provede výběrový dotaz pro získání parametrů všech událostí studia. Podle výsledku tohoto dotazu se pomocí Python knihovny json vytvoří JSON pole s jednotlivými událostmi a jejich názvem, jménem lektora, začátkem a koncem a dalšími potřebnými daty. Toto pole se přidá do pole konfigurace kalendáře a celý tento objekt se mu předá.

Po kliknutí na událost se pomocí technologie AJAX otevře colorbox a metodou GET se předá identifikační číslo události. Z databáze se přečte název události, popis, jméno lektora, začátek a konec události, obsazenost, cena, záloha, počet bonusových

Ilustrace 3: Kalendář událostí na domovské stránce

(31)

bodů za absolvování události, náplň lekce a v případě kurzu také pořadové číslo lekce.

Tyto informace se vypíšou každému uživateli. Pokud je navíc uživatel přihlášen (pokud je naplněna třídní proměnná uzivatel), zobrazí se mu i seznam uživatelů s rezervací na tuto událost. Podle možností přihlášeného uživatele (stav konta, počet bonusových bodů na účtě, počet zmeškaných kurzových hodin klienta a další parametry) se zobrazí tlačítka umožňující vytvoření rezervace místa na danou událost.

Lektorům se v seznamu u každého klienta s rezervací objeví informace o tom, jakým způsobem rezervaci provedl a tlačítko, které umožňuje zrušit tuto rezervaci. Tato funkce se může hodit například v případě, kdy ze zdravotních důvodů bude zákazník potřebovat zrušit rezervaci později než je klasicky povoleno. Dále mají lektoři možnost provést rezervaci klienta na událost výběrem jeho účtu z nabídky. Administrátorům se navíc objeví odkaz pro úpravu události.

Ilustrace 4: Ukázka detailu události pro běžného uživatele

(32)

4.7 Způsoby rezervace

4.7.1 Klasická rezervace

Jedním ze způsobů rezervace místa na událost je uhrazení zálohy a poté celkové ceny události z konta uživatele. Po kliknutí na tlačítko Rezervovat v detailu události, které se zobrazí, pokud má uživatel možnost rezervaci provést, se spustí skript pod adresou /rezervovat. Nejprve se zkontrolují parametry předané metodou GET.

Z databáze se zjistí data o události. Proběhne kontrola, zda zbývá ještě volné místo a jestli již událost nezačala a na rezervaci není pozdě.

Do proměnné zaplatit se vloží záloha na tuto událost. Pokud bude uživatel chodit v době začátku události na kurz, použije se záloha se slevou. Stejná sleva platí i pro lektory a administrátory. V případě, že klient už zálohu zaplatil a přeje si uhradit doplatek, proměnná zaplatit se nastaví na rozdíl celkové ceny a zaplacené zálohy.

Skript dále zjistí, zda uživatel nevlastní aktuálně platnou a nevyčerpanou permanentku na daný typ události. V kladném případě přiřadí do proměnné zaplatit číslo nula a zaznamená identifikační číslo vlastněné permanentky. Události typu Volná hodina a jedna událost typu Kurz jsou pro lektory a administrátory zdarma.

Pokud má zákazník na kontě dostatek peněz, strhne se mu vypočítaná částka v proměnné zaplatit z konta. Tato akce je chráněna proti souběhu kontrolou nezměněné výše konta při strhávání částky. Do tabulky rezervace se vloží záznam o rezervaci s detaily o způsobu, jakým byla provedena. Pokud již uživatel měl uhrazenou zálohu a platí pouze doplatek, nebo pokud si přeje uplatnit předrezervaci (bezplatná rezervace platná pouze pět kalendářních dní) a uhradit zálohu, záznam v tabulce rezervace se přepíše podle požadavků. Tento úkon je chráněn proti souběhu stejným způsobem.

Do tabulky dochazka se vloží záznamy s identifikačním číslem uživatele a číslem události, které bude přepisovat lektor při vyplňování docházky. V poslední řadě se zákazníkovi odešle e-mailová zpráva o provedení rezervace a do tabulky log se zapíše informace o této akci.

(33)

4.7.2 Rezervace lektorem

Rezervaci jakéhokoli uživatele na jakoukoli událost může provést i lektor.

Rezervace probíhá obdobně jako ta klasická, hradí se ale vždy celková cena události z konta uživatele, pouhé zaplacení zálohy není takto možné. Nakonec se klientovi odešle e-mailová zpráva o provedení rezervace lektorem a do tabulky log se tato skutečnost zapíše také.

Existuje zde také možnost uhrazení doplatku lektorem pro případ, kdy uživatel zaplatil pouze zálohu. Lektor může provést uhrazení z klientova konta za něj.

4.7.3 Předrezervace

Pod adresou /predrezervovat se nachází stránka, díky které je možné provést předrezervaci na událost typu kurz. Tato předrezervace platí pouze pět kalendářních dní a je bezplatná. Umožňuje novým klientům zabrat si místo na kurzu do té doby, než si dobijí konto a uhradí zálohu.

Skript nejprve zkontroluje parametry předané metodou GET. Zjistí data o kurzu z databáze a zkontroluje, zda je ještě volné místo, zda již není na předrezervaci pozdě, zda již uživatel na tento kurz nemá místo rezervované a také jestli uživatel nemá na tento kurz předrezervaci zakázanou. Zákaz předrezervace vzniká po uskutečnění jedné předrezervace na daný kurz a ukládá se do tabulky zakaz_predrezervace.

Předchází se tak nekonečnému blokování místa jedním uživatelem bez uhrazení zálohy na kurz.

V případě, že všechny kontroly proběhnou v pořádku, předrezervace se zapíše do databáze s platností pět dní od aktuálního data a času. Proběhne již zmíněný zápis zákazu předrezervace. Nakonec se uživateli odešle e-mailová zpráva o uskutečnění předrezervace a informace o úkonu se uloží do tabulky log.

(34)

4.7.4 Využití bonusu

Další metodou, jakou je možné provést rezervaci, je využití některého z bonusů.

Bonusy definuje administrátor podle vlastního uvážení. Klienti sbírají bonusové body za docházení na události tanečního studia a tyto body mohou poté využít k rezervacím se slevou nebo zakoupením permanentek se slevou.

Při kliknutí na příslušné tlačítko Využít bonus v detailu události se otevře colorbox s provedením příslušné akce a výpisem výsledku. Jako první se zkontrolují parametry předané metodou GET, dále existence volného místa na události, jestli již na rezervaci není pozdě a jestli již uživatel na tuto událost není přihlášen. Částka, která se má zaplatit, se ukládá do proměnné zaplatit a vypočítává z celkové ceny (může být ještě snížena o slevu pro klienty, kteří v době začátku události budou chodit do kurzu) odečtením slevy definované u bonusu.

Pokud má zákazník na účtě dostatek peněz i bonusových bodů, příslušné počty se mu z konta strhnou a rezervace se vloží do databáze spolu s informací, jakým způsobem byla provedena. Do tabulky dochazka se zapíší jednotlivé události pro vyplňování docházky lektorem. Jako poslední se odešle klientovi e-mail o provedení rezervace.

4.7.5 Náhrada zmeškané kurzové lekce

Posledním způsobem, jak si lze rezervovat místo na událost, je bezplatná náhrada zameškané kurzové lekce na některé z lekcí typu Volná hodina. Po kliknutí na příslušné tlačítko v detailu události se provede skript, který nejprve zkontroluje proměnné předané metodou GET. Pokud je žádaná událost typu Volná hodina a není již plně obsazena, systém zjistí, zda má uživatel nárok na bezplatnou náhradu, tedy zda v posledních třech měsících zmeškal nějakou kurzovou lekci. Po vyhodnocení dále proběhne kontrola, jestli událost již nezačala a jestli na ni uživatel již nemá rezervaci.

Pokud všechny kontroly proběhnou v pořádku, zmeškaná lekce se v databázi označí jako nahrazená a do tabulky rezervace a dochazka se vloží záznamy o rezervaci.

(35)

Systém odešle klientovi e-mailovou zprávu o vykonání rezervace a tato skutečnost se také zapíše do databázové tabulky log.

4.8 Zrušení rezervace

Zrušení rezervace může být provedeno přímo uživatelem v systému kliknutím na tlačítko Zrušit rezervaci v detailu události. Pokud jsou parametry předané metodou GET validní, uživatel má na událost skutečně rezervaci a na zrušení rezervace ještě není pozdě, proběhne i kontrola, zda není zrušení rezervace na tuto událost zakázáno.

Tato situace by nastala v případě, kdy administrátor vypíše slevu na kurz pro nalákání posledních klientů, aby se lekce naplnily. Rezervaci na kurz také nelze zrušit, pokud tento kurz byl využit ke slevě pro kurzisty na jinou událost či na permanentku.

Pokud skript projde všemi kontrolami s pozitivním výsledkem, rezervace se smaže z databáze a klientovi se vrátí na konto peníze, popřípadě bonusové body použité k rezervaci. Pokud byla rezervace provedena pomocí permanentky nebo jako náhrada zmeškané kurzové lekce, tyto akce se také invertují. Uživatel nakonec získá e-mailovou zprávu o zrušení rezervace. Obdobným způsobem probíhá i zrušení předrezervace.

Druhou metodou, jak zrušit zákazníkovu rezervaci, je zrušení lektorem. Když lektor klikne na příslušné tlačítko v detailu události, systém zobrazí dotaz, zda si lektor přeje klientovi vrátit peníze, popřípadě bonusové body nebo jiný způsob úhrady rezervace. Po udání odpovědi lektora proběhne kontrola parametrů v poli GET a kontrola existence dané rezervace. Poté dojde k ověření, zda nebyl kurz použit ke slevě pro kurzisty. V případě, že kontroly proběhly v pořádku, rezervace se smaže z databáze spolu s docházkou na události a podle požadavku se úhrada rezervace invertuje nebo ne. Klient, jemuž byla rezervace zrušena, obdrží na svou e-mailovou adresu zprávu o provedení této akce.

(36)

4.9 Sledování volných míst na události

Pokud by si klient přál provést rezervaci na událost, ale ta je již plně obsazena, systém mu nabízí možnost sledovat, zda se nějaké místo neuvolní. Při uvolnění místa systém odešle zákazníkovi sms a e-mailovou zprávu. Sledování zákazník zahajuje kliknutím na příslušné tlačítko v detailu události.

V takovém případě skript nejprve zkontroluje validitu parametrů předaných metodou GET a pokračuje dále v případě, že daná událost ještě nezačala. Poté zjistí, zda přihlášený uživatel již volná místa na tuto událost nesleduje a zda je událost skutečně plně obsazena. Pokud všechny kontroly proběhnou v pořádku, do databázové tabulky sledovani se vloží záznam s identifikačním číslem události a uživatele spolu s údajem, do kdy má sledování probíhat.

Sledování lze zrušit opět kliknutím na tlačítko Zrušit sledování v detailu události.

Po klasické kontrole parametrů v poli GET se z databáze odstraní příslušný záznam o sledování.

4.10 Registrace, přihlášení a odhlášení

Veškeré stránky, které přímo souvisí s uživatelským účtem, se nacházejí v souboru prihlaseni.py.

4.10.1 Registrace

Metoda obsah třídy Registrace je namapována na adresu /registrace. Jedná se o AJAX formulář, který klient vyplňuje svými kontaktními informacemi.

Do příslušných polí zadává své jméno, příjmení, e-mailovou adresu, telefonní číslo (nepovinné pole) a zvolené heslo pro přihlašování do systému zadávané pro kontrolu dvakrát. Po kliknutí na tlačítko Registrovat se data odešlou serveru metodou GET.

(37)

Skript na serveru zkontroluje přítomnost těchto dat. V případě, že některé z povinných polí nebylo vyplněno, zobrazí se znovu registrační formulář s hláškou o absenci požadované informace. Pokud byla zadána všechna data, zavolá se metoda registrovat třídy Autentif. Skript této metody zkontroluje validitu předaných proměnných. E-mailová adresa a telefonní číslo se například porovnává s příslušnými regulárními výrazy, omezuje se také délka jména, příjmení a hesla. Obě zadaná hesla se musí shodovat. Pokud je některé z těchto pravidel porušeno, metoda vyvolá výjimku a systém opět zobrazí registrační formulář a informuje uživatele o tom, které pole není správně vyplněno. V opačném případě se v databázi vytvoří nový uživatelský účet s danými parametry.

Ilustrace 5: Registrační formulář

(38)

4.10.2 Potvrzení e-mailové adresy

Nově vytvořený uživatelský účet je uložen s výchozí hodnotou NULL atributu Posl_prihlaseni, který udává datum a čas posledního přihlášení daného uživatele.

V praxi to znamená, že účet není aktivován a přihlášení není možné, dokud klient nepotvrdí svůj e-mail kliknutím na odkaz ve zprávě, která mu byla odeslána ihned po registraci na zadanou e-mailovou adresu.

Skript stránky, která se nachází pod tímto odkazem, zjišťuje, zda klient již má cookie pro svůj účet. Pokud ji nemá, vytvoří se nová. Systém poté volá metodu prvniPrihlaseni metody Autentif. Pokud nastane některá z definovaných výjimek (například účet neexistuje, už byl aktivován a podobně), uživateli se zobrazí hláška o chybě. Jinak se účet aktivuje (do databáze se zapíše datum a čas posledního přihlášení) a zákazníkovi se zobrazí okno s prvotními potřebnými informacemi o rezervačním systému a o tom, jak jej používat. Tento text se také odesílá klintovi na jeho e-mailovou adresu.

4.10.3 Přihlášení

Zákazníci se přihlašují vyplněním přihlašovacího formuláře, který se objevuje v záhlaví téměř každé stránky. Po kliknutí na tlačítko Přihlásit se provede AJAX skript namapovaný na adresu /prihlasit. Po kontrole předání parametrů se zjišťuje, zda má klient přidělenou cookie. Pokud cookie chybí, systém mu přidělí novou pomocí metody novaCookie třídy Autentif. Dále se volá metoda prihlasit stejné třídy, která může vyvolat některou z definovaných výjimek (například špatné heslo, účet má ban, uživatel je již přihlášen a podobně). Pokud ale žádná výjimka zachycena není, uživatel je přihlášen a klient je přesměrován na aktuální stránku již bez přihlašovacích parametrů.

(39)

4.10.4 Odhlášení

Odhlášení uživatele probíhá pod adresou /odhlasit. Pokud klient má uživatelskou cookie, volá se metoda odhlasit třídy Autentif. Tato metoda smaže aktuální session přihlášeného uživatele z databáze. Po této akci je klient přesměrován na domovskou stránku.

4.10.5 Zapomenuté heslo

V případě, že se zákazník nemůže přihlásit, protože zapomněl své heslo, musí kliknout na příslušný odkaz v záhlaví stránky. Pomocí technologie AJAX se mu v colorboxu objeví formulář s jediným polem pro zadání e-mailové adresy a s tlačítkem pro zaslání nového hesla na zadaný e-mail.

Po odeslání formuláře se provádí skript, který nejprve kontroluje, že uživatel není přihlášen. Poté volá metodu zapomnel třídy Autentif, která uživateli vygeneruje náhodně nové heslo a to mu odešle na e-mail. Pokud je zachycena některá výjimka (například účet s tímto e-mailem neexistuje), vypíše se hláška o této výjimce. Pokud metoda doběhne do konce, klient dostává informaci o tom, že nové heslo mu bylo odesláno na zadanou e-mailovou adresu.

Ilustrace 6: Přihlašovací formulář

(40)

4.11 Profil uživatele

Přihlášeným uživatelům se v menu zobrazuje odkaz Profil uživatele. Pod ním se nachází stránka s údaji o uživateli, jeho docházkou na uplynulé události, zakoupenými permanentkami a dostupnými bonusy.

Mezi údaje o uživateli, které se zde zobrazují, patří jméno a příjmení, e-mailová adresa a telefonní číslo. Tato data lze změnit kliknutím na příslušné odkazy. Vyplněním formuláře pro změnu údaje novou hodnotou a odesláním jej serveru klient vytvoří požadavek na přepis jeho záznamu v databázové tabulce uzivatel. Pokud klient zadal validní data, záznam se aktualizuje a klientovi je vypsán výsledek změny. Stejně funguje i změna hesla, kterou může zákazník provést kliknutím na příslušný odkaz v profilu.

Pod těmito údaji a odkazy se v profilu nachází docházka zákazníka na události za poslední tři měsíce. Dotazem na databázi se zjistí jeho rezervace na události v tomto časovém období. Pokud v posledních třech měsících nebyl na žádnou událost přihlášen, tato sekce se nezobrazuje. Jinak se vytvoří tabulka, která se naplňuje názvem události, datem konání, náplní lekce a informací o tom, zda se klient na událost dostavil nebo nedostavil. V případě, že zmeškal kurzovou lekci, vypíše se ještě, zda si ji nahradil na některé z volných hodin.

Pod tabulkou s docházkou se nachází přehled zakoupených permanentek. Pod ním je odkaz na zakoupení nové. Po kliknutí na něj se otevře colorbox s tabulkou permanentek aktuálně nabízených k prodeji. U každé položky je uveden název permanentky, cena pro kurzisty a pro ostatní klienty, délka platnosti ve dnech a počet možných rezervací na tuto permanentku (může být neomezený). V posledním sloupci se zobrazují odkazy na klasické zakoupení a na zakoupení s využitím bonusu, pokud se na permanentku nějaký vztahuje a uživatel na něj má dostatek peněz i bonusových bodů. Permanentku lze vrátit pouze v případě, že ještě nebyla použita k rezervaci na žádnou událost.

(41)

Poslední tabulka v profilu uživatele zobrazuje přehled bonusů. Ty, na které má uživatel dostatek bonusových bodů, jsou vykresleny černým písmem, ostatní šedým písmem.

4.12 Menu běžných uživatelů

Zákazníci mohou si mohou své rezervace prohlédnout v sekci Mé rezervace. Tato stránka se v aplikaci nachází v modulu me_rezervace.py. Obsahuje třídu, jejíž metoda obsah je namapována na adresu /me-rezervace. Obsah stránky je rozdělen na dvě části, v první se zobrazuje tabulka rezervací na události kurzového typu, tabulku v druhé části vyplňují rezervace na ostatní události.

Ilustrace 7: Profil uživatele

(42)

Tabulka uvádí název události, jméno lektora této události, termín konání, datum provedení rezervace a způsob uhrazení rezervace. Pro každou událost je kliknutím na příslušné tlačítko možné rezervaci zrušit nebo uhradit doplatek, pokud byla zaplacena pouze záloha.

V sekci Mé doklady si uživatelé mohou zobrazit své faktury a doklady vystavené za poslední tři měsíce. Stránka se dělí na část s tabulkou zálohových faktur vystavených přihlášenému uživateli, část s tabulkou jeho příjmových dokladů a poslední část s tabulkou opravných dokladů zákazníka. U každé faktury se vypisuje její evidenční číslo, datum vystavení a splatnosti, částka, na kterou byla vystavena, a stav (zaplacena nebo nezaplacena). Tabulka příjmových dokladů uvádí u každého evidenční číslo, datum vystavení a přijatou částku. Opravné doklady jsou zobrazeny v tabulce s evidenčním číslem, důvodem opravy, datem vystavení a stornovanou částkou.

Po kliknutí na řádek s fakturou se v novém okně (popř. panelu) zobrazí její plná podoba a v tomto formátu ji lze tisknout, pokud klientův prohlížeč podporuje funkci pro tisk stránky. Obdobně fungují odkazy s doklady.

V případě, že klient potřebuje zobrazit faktury nebo doklady starší než tři měsíce, klikne na odkaz Archiv dokladů zobrazený na konci stránky. Pod tímto odkazem se nachází stránka s adresou /archiv, která se načítá stejně jako stránka Mé doklady, pouze bez tříměsíčního časového omezení.

Posledním odkazem v menu, který se zobrazuje běžným uživatelům, je Ceník.

Tato jednoduchá stránka obsahuje základní informace o tom, jak platit rezervace v systému, a tabulku běžných cen jednotlivých typů událostí.

Běžný uživatel má také přístup na stránku FAQ (Frequently Asked Questions), jejíž odkaz se nachází v zápatí téměř každé stránky. Zde jsou zobrazeny nejdůležitější otázky, které mohou klienti na téma rezervačního systému pokládat, spolu s odpověďmi na ně. Tato stránka slouží jako stručná uživatelská nápověda k systému.

(43)

4.13 Rozhraní pro lektory

Pokud je přihlášený uživatel zaměstnancem studia nebo administrátorem, v menu se mu zobrazuje navíc odkaz Lektor. Pod tímto odkazem se nachází stránka, která umožňuje lektorům přijímat a vydávat peníze a vyplňovat docházku na jednotlivé lekce.

4.13.1 Příjem a výdej peněz

Klienti si mohou konto v rezervačním systému dobíjet předáním hotovosti jednomu z lektorů přímo ve studiu. V takovém případě lektor klikne v sekci Lektor na odkaz Přijmout peníze. Zobrazí se mu colorbox s formulářem, který obsahuje pole pro zadání přijaté částky a pole pro výběr daného klienta ze seznamu uživatelů.

Po vyplnění a odeslání formuláře se provede skript pro jeho zpracování.

Tento skript nejprve kontroluje přijetí a validitu povinných parametrů. Pokud je přijatá částka zadána nulová nebo záporná, zobrazí se opět původní formulář spolu s hláškou, že přijatá částka musí být kladné číslo. Po kontrole částky systém z databáze zjistí aktuální stav konta daného klienta. Přijatá částka se zákazníkovi přičte na konto – tato akce je chráněna proti souběhu opětovnou kontrolou stavu konta. Poté se vytvoří příjmový daňový doklad a odkaz na jeho zobrazení se vypíše lektorovi spolu s výsledkem zpracování formuláře. Jako poslední krok se do tabulky pokladna vloží záznam o přijetí peněz.

Obdobně funguje i zpracování formuláře pro vrácení peněz z klientova konta.

Po kontrole předaných parametrů se zjistí, zda má daný uživatel na kontě dostatek peněz, a poté se mu z konta strhne zadaná částka. Vytvoří se opravný daňový doklad z důvodu vrácení peněz z konta a operace se zapíše do databázové tabulky pokladna.

Lektoři si mohou své operace s pokladnou z aktuálního dne zobrazit kliknutím na příslušný odkaz zobrazený v sekci Lektor. Zde systém vypisuje záznamy z tabulky pokladna v podobě pohodlně čitelné člověkem. Za výpisem všech operací se zobrazí celkový součet, který slouží pro kontrolu zůstatku ve fyzické pokladně ve studiu.

(44)

4.13.2 Docházka

Lektoři vyplňují na lekcích docházku klientů s rezervací na danou událost.

Seznam událostí se v podobě tabulky vykresluje na stránce Lektor. Zobrazeny jsou lekce na následující týden a na týden právě uplynulý. Po kliknutí na jeden řádek tabulky se otevře colorbox s tabulkou zákazníků přihlášených na danou událost spolu s formulářem pro zadání jejich přítomnosti či nepřítomnosti. Dalším prvkem v tomto formuláři je textové pole, do kterého lektor zadává náplň lekce – například probírané prvky, variace, typ choreografie a podobně. Klienti, kteří lekci zmeškají, si poté v systému budou moci přečíst, o co přišli a případně se prvky doučit. Po vyplnění docházky lektor odešle formulář serveru.

Na serveru proběhne skript, který zkontroluje validitu parametrů předaných metodou GET. Pokud jsou hodnoty zadány správně, docházka se zapíše do databáze.

Poté se přičtou bonusové body, jejichž počet je definovaný u události, ke kontům klientů, kteří byli na lekci přítomni.

4.14 Rozhraní pro administrátory

Rozhraní pro administrátory lze otevřít kliknutím na odkaz Správa, který se v menu objevuje uživatelům, kteří mají administrátorská práva. Tato stránka je rozdělena na dvě části. Levou část tvoří menu s odkazy pro vytvoření nové události, permanentky, pro správu permanentek a další. Pravá část je vyplněna přehledem událostí, které ještě neskončily.

(45)

4.14.1 Správa událostí

Přehled událostí, které ještě neskončily, je rozdělen na tabulku kurzů a tabulku událostí ostatních typů. V tabulce je vždy uveden název události, jméno lektora, termín první lekce a aktuální obsazenost. Každý řádek tabulek slouží jako odkaz na úpravu dané události. Přehled uplynulých událostí lze zobrazit kliknutím na tlačítko Uplynulé události v menu stránky Správa. Tvoří se zde tabulka událostí uvádějící všechny důležité parametry.

Po kliknutí na událost se otevře colorbox s formulářem, který slouží ke změně názvu, lektora, termínu a podobných údajů o události. Odesílá se kliknutím na tlačítko Změnit. Data z formuláře se poté zkontrolují a příslušné záznamy v databázi se změní.

Pokud správce sníží cenu události, označí se tento úkon jako sleva a všem uživatelům se zakáže zrušení rezervace na tuto událost. Systém tak zabraňuje tomu, aby zákazníci zrušili svou rezervaci na tuto událost a provedli ji znovu za nižší cenu. Nová nižší cena je totiž cílena na klienty, kteří se na událost přihlásí na poslední chvíli.

Jakoukoli událost lze zrušit kliknutím na tlačítko Zrušit v boxu pro její úpravu.

Všechny rezervace, které byly na tuto událost provedeny, se zruší a událost se odstraní z databáze.

Ilustrace 8: Rozhraní pro administrátory

(46)

Box pro změnu události typu kurz navíc obsahuje druhý formulář, který slouží ke zrušení jedné lekce kurzu. Tato funkce se hodí pro svátky a další dny, kdy je nemožné lekce uskutečnit. Administrátor zruší tuto lekci a ta se přesune za poslední lekci kurzu.

Při vytváření nové události správce vyplňuje název události, stručný popis, jméno lektora, kontakt na něj, začátek a konec události. Událost se může opakovat jednou týdně nebo jednou za dva týdny. Administrátor zadá počet opakování nebo datum, do kdy se má opakovat. Dále se zadává maximální a minimální kapacita, cena a záloha pro kurzisty i ostatní uživatele a počet bonusových bodů za absolvování události.

Po odeslání se zkontroluje validita parametrů a událost se zapíše do databáze.

4.14.2 Správa uživatelů

Administrátoři mohou přiřazovat a odebírat lektorskou funkci registrovaným uživatelům. Po kliknutí na odkaz Správa lektorů v menu stránky Správa se otevře colorbox s formulářem pro přijetí nového lektora a formulářem pro propuštění

Ilustrace 9: Vytváření nové události

References

Related documents

Pokud chceme řídit reálný systém, tak v podstatě nikdy není možné změřit všechny vnitřní stavy. V diplomové práci je diskutována regulace SISO systému. Na systému je

Učivo základní školy bylo podle vzdělávacího programu Základní škola rozděleno do tematických celků, které obsahují učivo základní i rozšiřující a jsou vždy zakončeny výstupy,

Nyní po uvedení do problematiky spravování chodu kina, je tedy možné analyzovat strukturu systému, který bude nejen obsluhovat pokladnu a rezervace jako

Po předehřevu bylo zahájeno vlastní měření se zvoleným nominálním zatížením, kdy přístroj po dosažení počáteční měřící vzdálenosti začne měřit v nastavené dráze

První kapitola této práce je zaměřena na teoretické pojmy. Jsou popsány a definovány teorie z oboru projektového řízení, zejména pak přípravy a

Cílem této bakalářské práce je návrh a vývoj Online rezervačního systému pro lékaře a pacienty na platformě Unicorn Universe.. Klíčovou myšlenkou aplikace

Hodnocen´ı navrhovan´ e vedouc´ım bakal´ aˇ rsk´ e pr´ ace: výborně Hodnocen´ı navrhovan´ e oponentem bakal´ aˇ rsk´ e pr´ ace:?. Pr˚ ubˇ eh obhajoby bakal´ aˇ rsk´

Bakalářská práce „Působení Komunistické strany v polistopadovém politickém systému“ se zabývá působením Komunistické strany Československa a zejména