VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky
Webová aplikace účetnictví a daňové evidence bakalářská práce
Autor: Petr Šimeček Vedoucí práce: PaedDr. František Smrčka, Ph.D. Jihlava 2012/2013
Vloţit papír
Anotace Tato bakalářská práce je zaměřena na vedení účetnictví pomocí webové aplikace, která se skládá z výběru daňové evidence pro běţného uţivatele a podvojného účetnictví pro podnikatele. V práci jde o celkový návrh a realizaci aplikace, která umoţňuje uţivateli kdykoliv změnu typu účtování, avšak minimálně jeden typ musí mít uveden ve svém profilu. Aplikace dále umoţňuje uchovávat uţivatelem vloţené účetní záznamy, upravovat a mazat záznamy uţivatele, provádět výpočty na základě uţivatelem zadaného období a následným ukládáním jejich výsledků do databáze, přidávat nové informace o účetních případech atd. Aplikace je realizována pomocí technologie ASP.NET s vyuţitím Razor View Engine, jazyka C#, architektura MVC, T-SQL.
Klíčová slova Daňová evidence, Podvojné účetnictví, historie, MVC, Razor View Engine, LINQ, T-SQL, webová aplikace
Abstract This thesis focuses on the accounting by the web application, which includes a variety of tax records for the average user and double-entry bookkeeping for entrepreneurs. In the work for the overall design and implementation of an application that allows the user to change the type of billing anytime, but at least one type must be specified in your profile. The application also allows the user to store the inserted records, edit and delete users, perform calculations based on user-specified time period and then storing the results in a database, adding new information on accounting transactions, etc. The application is implemented using ASP.NET using Razor View Engine, C #, MVC architecture, T-SQL.
Keywords Tax accounting, double-entry bookkeeping, history, MVC, Razor View Engine, LINQ, T-SQL, web application
Poděkování: Rád bych poděkoval svému vedoucímu práce panu PaedDr. Františku Smrčkovi, Ph.D za jeho vedení, pod kterým jsem tuto práci zrealizoval. Dále bych rád poděkoval kantorům Vysoké Školy Polytechnické v Jihlavě za předání cenných znalostí a zkušeností, které jsem při psaní této bakalářské práce vyuţil.
Prohlašuji, ţe předloţená bakalářská práce je původní a zpracoval jsem ji samostatně. Prohlašuji, ţe citace pouţitých pramenů je úplná, ţe jsem v práci neporušil autorská práva (ve smyslu 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ů, v platném znění, dále téţ „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím uţitím k výuce nebo k vlastní vnitřní potřebě VŠPJ. Byl jsem seznámen s tím, ţe na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, ţe VŠPJ má právo na uzavření licenční smlouvy o uţití mé bakalářské práce a prohlašuji, ţe s o u h l a s í m s případným uţitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom toho, ţe uţít své bakalářské práce či poskytnout licenci k jejímu vyuţití mohu jen se souhlasem VŠPJ, která má právo ode mne poţadovat přiměřený příspěvek na úhradu nákladů, vynaloţených vysokou školou na vytvoření díla (aţ do jejich skutečné výše), z výdělku dosaţeného v souvislosti s uţitím díla či poskytnutím licence. V Jihlavě dne 14. 12. 2012 ...................................................... Podpis
Obsah
1
Úvod.......................................................................................................................... 9
2
Účetnictví ................................................................................................................ 10 2.1
Význam a funkce účetnictví ............................................................................. 10
2.1.1 2.2
Informace, které musí účetnictví poskytovat ................................................... 11
2.3
Historie ............................................................................................................. 11
2.3.1
Rozdělení účetních knih............................................................................ 12
2.3.2
Vývoj účetnictví ........................................................................................ 12
2.4 3
4
Rozdělení funkcí ....................................................................................... 11
Způsoby vedení evidence podnikatelské činnosti ............................................ 13
Vývojová prostředí ................................................................................................. 14 3.1
MS Visual Studio 2010 Express ...................................................................... 14
3.2
Microsoft SQL Server 2008 R2 Express .......................................................... 14
3.3
GIMP ................................................................................................................ 15
3.4
SmartDraw7 ..................................................................................................... 15
Vyuţité technologie ................................................................................................ 16 4.1
C# ..................................................................................................................... 16
4.2
HTML .............................................................................................................. 17
4.3
JavaScript ......................................................................................................... 17
4.3.1
jQuery ....................................................................................................... 17
4.4
CSS................................................................................................................... 17
4.5
LINQ ................................................................................................................ 18
4.6
T-SQL .............................................................................................................. 18
4.7
ASP.NET.......................................................................................................... 18
4.7.1
ASP.NET MVC ........................................................................................ 19
4.7.2
Model ........................................................................................................ 20
4.7.3
View .......................................................................................................... 20
4.7.4
Controller .................................................................................................. 21
4.7.5
ASP.NET MVC vs. ASP.NET WebForms ............................................... 21
4.7.6 5
6
Analýza a návrh implementace ............................................................................... 23 5.1
Porovnání podobných aplikací na internetu ..................................................... 23
5.2
Poţadavky běţného uţivatele .......................................................................... 23
5.3
Případy uţití ..................................................................................................... 24
5.4
Návrh ER-Diagramu ........................................................................................ 26
5.5
Transformace E-R modelu do RMD ................................................................ 30
5.6
Ověření normality schématu ............................................................................ 30
5.7
Funkční analýza ............................................................................................... 31
Implementace .......................................................................................................... 32 6.1
7
Triggery .................................................................................................... 32
6.1.2
Skladové procedury databáze ................................................................... 33
6.1.3
Funkce ....................................................................................................... 34
6.1.4
Databázová View ...................................................................................... 34
6.2
Propojení LINQu to SQL ................................................................................. 36
6.3
Model ............................................................................................................... 38
6.4
View ................................................................................................................. 40
6.5
Controller ......................................................................................................... 42
6.6
Grafické rozvrţení aplikace a celkový webdesign ........................................... 44
Testování ................................................................................................................. 46 Porovnání aplikace s konkurenčními projekty ................................................. 46
Závěr ....................................................................................................................... 47 8.1
9
Realizace databáze ........................................................................................... 32
6.1.1
7.1 8
Razor View Engine pro ASP.NET ........................................................... 21
Moţnosti a plány pro rozšíření aplikace .......................................................... 47
Seznam pouţité literatury ....................................................................................... 48
10 Seznam pouţitých obrázků ..................................................................................... 50 11 Seznam obrázků ...................................................................................................... 51 12 Seznam zkratek ....................................................................................................... 52
1 Úvod Cílem mé bakalářské práce je alespoň se přiblíţit drahým placeným webovým aplikacím se zaměřením na účetnictví, které se vyskytují v dnešní době na internetu. Tyto aplikace mají pro nezkušeného uţivatele, který ne aţ tak moc ovládá účetnictví, sloţitější a více detailnější rozhraní. Proto nejsou pro běţného uţivatele aţ tak moc pohodlné jako pro uţ zkušeného uţivatele, který si jiţ pár let vede účetnictví. Díky své dlouholeté zkušenosti s účetnictvím vím a mám jiţ vytvořen názor, jak by měl vypadat vstup člověka do světa účtování. A také proto chci v tomto duchu aplikaci realizovat. Aplikace nahradí dennodenní starosti s nošením spousty papírů, knih a dokladů. Uţivatel si je sice musí fyzicky uchovávat po určitou dobu, ale ve webové aplikaci se uţivateli otevírají větší moţnosti. Uţivatel si bude moci z jakéhokoliv místa, kde je přístup k internetu, zadávat účetní případy, kontrolovat a mazat záznamy, zobrazovat výsledky formou obyčejných přehledových tabulek nebo grafů. Pro tvorbu webové aplikace jsem pouţil vývojové prostředí Microsoft Visual Studio 2010 Express Edition, které je volně ke staţení a pro nekomerční vyuţití zcela zdarma. Aplikace je realizována pomocí technologie ASP.NET s vyuţitím Razor View Engine, programovacího jazyka C# a systémové třívrstvé architektury Model-View-Controller. Jako úloţiště dat jsem v této bakalářské práci pouţil Microsoft SQL Server 2008 R2 Express, který je taktéţ ke staţení zdarma. V databázi je pouţit dotazovací jazyk Transact-SQL, coţ je proprietální rozšíření do SQL, který se pouţívá pro práci s daty v relačních databázích. Konečné propojení samotné aplikace s databází nám řeší nástroj LINQ přinášející nový způsob dotazování nad různými daty a jejich správu. Díky realizaci aplikace na webu ji můţeme vyuţívat na různých platformách (Windows, Linux, Mac OS X), ovšem je zapotřebí mít alespoň nějaký nainstalován internetový prohlíţeč.
9
2 Účetnictví Účetnictví je písemné zaznamenávání informací o hospodářských jevech podniku, a to v peněţních jednotkách. Účetnictví svými písemnými záznamy „rozšiřuje paměť podnikatele“, neboť není moţné, aby si při velkém rozsahu činností pamatoval všechny informace. V účetnictví se eviduje například nákup materiálu, zboţí, strojů, prodej výrobků, zboţí, sluţeb, vznik pohledávek a závazků vůči obchodním partnerům (odběratelům, dodavatelům), zaměstnancům, finančním orgánům, peněţním ústavům apod. [1]
2.1 Význam a funkce účetnictví Účetnictví poskytuje informace důleţité pro řízení a rozhodování. Základní funkcí účetnictví je porovnávat stav majetku podniku zanesený v účetnictví se stavem skutečným. Dále pak poskytovat uţivatelům základní informace, jak je daný podnik ekonomicky schopný, jaká je finanční situace podniku, jaké jsou hospodářské výsledky za určité časové období apod. Tyto údaje se pouţívají především při tvorbě finančních poznatků, finančních analýz, rozborů apod. Informace o stavu účetnictví jsou určeny pro pracovníky podniku, dále pro jiné externí pracovníky a uţivatele, kteří se o podnik zajímají. Uţivatelům jsou informace o finanční stránce podniku předkládány formou účetních výkazů. Tyto informace musí být především hodnověrné, srozumitelné, srovnatelné a správné. [2]
10
2.1.1 Rozdělení funkcí Účetnictví tak plní především tyto funkce:
Informační funkci, tzn., ţe poskytuje informace o stavu podniku
Registrační funkce
Důkazní funkce tj. je prostředkem při vedení různých sporů
Kontrolní funkce - tato funkce umoţňuje především kontrolu stavu majetku a hospodaření
Slouţí k vyměření daňové povinnosti
2.2 Informace, které musí účetnictví poskytovat Informace o stavu a pohybu majetků a závazků: Podnikatel musí mít přehled o stavu peněţních prostředků, o tom, kolik Kč má dostat zaplaceno od odběratelů a naopak, kolik Kč dluţí dodavatelům atd. Dále informace o nákladech, výnosech a s tím souvisejícím zjištění hospodářského výsledku: Při jakémkoliv podnikání je potřeba mít přehled o výši prostředků do podnikání
vloţených
a
o
dosaţených
výsledcích
podnikatelské
činnosti,
aby podnikatel věděl, zda se mu vyplatí provozovat podnikatelskou činnost či nikoliv. [1]
2.3 Historie Vznik účetnictví nelze přesně datovat. Nejstarší dochovaná forma podvojného účetnictví byla popsána v 15. století. Účetnictví, pouţívané v malých obchodních podnicích ve středověkých Benátkách, zaznamenal italský matematik a ekonom L. Pacioli (1445
- 1510) ve svém spisu „Tractatus de computis et scripturis“
(1494 v Benátkách). Lze však předpokládat, ţe se v praxi pouţívalo, postupně vyvíjelo a zdokonalovalo v italských městských státech jiţ po dvě století před uvedeným datem. [3]
11
2.3.1 Rozdělení účetních knih V účetnictví se pouţívalo tří účetních knih - memoriálu, deníku a hlavní knihy. Do memoriálu nanečisto zapisovali jednotliví zaměstnanci podrobně všechny účetní případy, ke kterým docházelo. Z memoriálu se tyto účetní případy přepisovaly jiţ načisto do deníku (ţurnálu) v chronologickém uspořádání a ve stručnější podobě. Hlavní kniha měla podobu dvoustranných účtů, na nichţ se kaţdý účetní případ zaznamenával podvojně. Šlo o dnešní analytickou evidenci, protoţe kaţdý druh zboţí a dokonce kaţdá dodávka měly svůj samostatný účet. [3]
2.3.2 Vývoj účetnictví Od konce 18. století se objevují pokusy o vylepšení podvojného účetnictví či o vytvoření systémů nových. Jedním z takových pokusů bylo tzv. Zlepšené podvojné účetnictví, jehoţ cílem bylo zavedení rozpočtu do systému účetních knih. Jeho tvůrcem byl v roce 1770 Adam von Heinfeld. Umoţňovalo nejen zjistit stav majetku a výsledek hospodaření, ale bylo moţno také sledovat rozdíl mezi předpokládanými a skutečnými náklady a výnosy. Významným přínosem bylo účetnictví tabulkové (tabelátní), jehoţ tvůrcem byl Edmond Degrange. [3]
Obrázek 1: LuccaPacioli [1]
12
2.4 Způsoby vedení evidence podnikatelské činnosti V současné době lze evidenci podnikové činnosti rozdělit do dvou způsobů: a) Daňová evidence -je určena pro ty subjekty, které nejsou účetní jednotkou ve smyslu Zákona o účetnictví č. 563/91 Sb. Daňovou evidenci vedou fyzické osoby, které se nestaly účetní jednotkou, jejich obrat nepřekročil za minulý kalendářní rok 25 mil. korun, není účastníkem sdruţení a není zapsán v Obchodním rejstříku, jinak přecházejí na podvojné účetnictví. [1] a) Podvojné účetnictví - je upraveno zákonem o účetnictví. Účetnictví vedou právnické osoby (o.s., s.r.o., a.s., atd.) a fyzické osoby, které se staly účetní jednotkou. V podvojném účetnictví je kaţdá poloţka na účtu spárovaná s poloţkou na jiném účtu, ale na opačné straně (Má dáti nebo Dal). [1]
13
3 Vývojová prostředí 3.1 MS Visual Studio 2010 Express Microsoft Visual Studio je vývojové prostředí od Microsoftu. Můţe být pouţito pro vývoj konzolových aplikací a aplikací s grafickým rozhraním spolu s aplikacemi Windows Forms, webovými stránkami, webovými aplikacemi a webovými sluţbami jak ve strojovém kódu, tak v řízeném kódu na platformách Microsoft Windows, Windows Mobile, Windows CE, .NET, .NET Compact Framework a Microsoft Silverlight. Visual Studio obsahuje editor kódu podporující IntelliSense a refaktorování. Integrovaný debugger pracuje jak na úrovni kódu, tak na úrovni stroje. Další vestavěné nástroje zahrnují designer formulářů pro tvorbu aplikací s GUI, designer webu, tříd a databázových schémat. Je moţné přidávat rozšíření, coţ vylepšuje funkčnost na téměř kaţdé úrovni - od doplnění podpory pro verzovací systémy (jako Subversion a Visual SourceSafe) po nové nástroje jako editory a vizuální designer pro doménově specifické jazyky nebo nástroje pro další aspekty návrhu programu (jako klient Team Foundation Serveru Team Explorer). Verze Express je sada produktů zdarma, která má základní funkce, zjednodušené rozhraní a základní moţnosti, které se zaměřují na poskytování nástroje, které potřebujete
pro
vytváření
aplikací
pro
jednu
platformu
např. Visual C# 2010 Express je součástí aplikace Visual Studio 2010 Express rodiny, bezplatné sady nástrojů systému Windows vývojáři na libovolné úrovni lze pouţít k vytvoření vlastních aplikací pomocí nastavení základní a odborné. Visual C# je určen pro vytváření různých aplikací spuštěných na .NET frameworku. Visual C# je jednoduchý, výkonný, typově bezpečný a objektově orientovaný. S mnoha inovacemi Visual C# umoţňuje rychlý vývoj aplikací a také zachovává Expresivita a eleganci C-style jazyků.[4][5]
3.2 Microsoft SQL Server 2008 R2 Express Microsoft SQL Server je relační databázový a analytický systém pro e-obchody, byznys a řešení datových skladů vyvinutý společností Microsoft. Pomáhá sniţovat celkové
14
náklady na vlastnictví a zvyšovat efektivitu vaší organizace prostřednictvím správy podnikových dat a práce s obchodními informacemi (business intelligence). [6] Ve verzi Microsoft SQL Server 2008 R2, která je pouţita v bakalářské práci se přidávají některé funkce (např. správa kmenových dat systému (Master Data Services), centralizované konzoly slouţící ke spravování více instancí SQL Serveru s podporou více neţ 64 logických procesorů) k verzi Microsoft SQL Server 2008, která jiţ obsahuje mnoho funkcí a nástrojů, pro pouţití na rozvoj a správu vašich databází a jejich řešení.
3.3 GIMP GIMP neboli GNU Image Manipulation Program („GNU program pro úpravy grafiky“) je svobodná multiplatformní aplikace pro úpravu a vytváření rastrové grafiky. Pouţívá se zejména pro úpravy fotografií, tvorbu webové grafiky a podobné účely. Kromě široké škály rastrových nástrojů obsahuje i některé vektorové funkce, které jsou uţitečnou pomůckou při práci s rastrovou grafikou (cesty, písma atd.). GIMP je dnes oficiální součástí projektu GNU. GIMP je dostupný zdarma včetně zdrojových kódů pod licencí GPL. [8]
3.4 SmartDraw7 Šikovný nástroj pro vytváření vektorové grafiky. Usnadňuje tvorbu různých plánů a náčrtů, schémat, vývojových nebo plánovacích diagramů, organizačních grafů atd. Obsahuje více neţ 1000 předkreslených symbolů a mnoho různých šablon pro usnadnění práce. Moţnost exportu přímo do PDF formátu. Základní tvorba grafů a diagramů, obsahuje 1000 grafických symbolů. Instalátor si stahuje potřebné soubory z Internetu.[9]
15
4 Využité technologie 4.1 C# C# je vysokoúrovňový objektově orientovaný programovací jazyk vyvinutý firmou Microsoft zároveň s platformou .NET Framework. Microsoft zaloţil C# na jazycích C++ a Java (a je tedy nepřímým potomkem jazyka C, ze kterého čerpá syntaxi). C# lze vyuţít k tvorbě databázových programů, webových aplikací a stránek, webových sluţeb, formulářových aplikací ve Windows .
V C# neexistuje vícenásobná dědičnost - to znamená, ţe kaţdá třída můţe být potomkem pouze jedné třídy. Toto rozhodnutí bylo přijato, aby se předešlo komplikacím a přílišné sloţitosti, která je spojena s vícenásobnou dědičností. Třída můţe implementovat libovolný počet rozhraní.
Neexistují ţádné globální proměnné a metody. Všechny funkce a metody musí být deklarovány uvnitř tříd. Náhradou za ně jsou statické metody a proměnné veřejných tříd.
V Objektově orientovaném programování se z důvodu dodrţení principu zapouzdření často pouţívá vzor, kdy k datovým atributům třídy lze zvenčí přistupovat pouze nepřímo a to pomocí dvou metod get (accessor) a set (mutator). V C# lze místo toho definovat tzv. Property, která zvenčí stále funguje jako datový atribut, ale uvnitř Property si můţeme definovat get a set metody. Výhodou je jednodušší práce s datovým atributem při zachování principu zapouzdření.
C# je typově bezpečnější neţ C++. Jediné výchozí implicitní konverze jsou takové, které jsou povaţovány za bezpečné jako rozšiřování Integerů (např. z 32 bitového na 64 bitový) nebo konverze z odvozeného typu na typ rodičovský. Neexistuje implicitní konverze z typu Integer na Boolean, ani mezi výčtovým typem enum a typem Integer.
C# neobsahuje a ani nepotřebuje předběţnou deklaraci - není důleţité pořadí deklarace metod.
Jazyk C# je case sensitive - to znamená, ţe rozlišuje mezi velkými a malými písmeny, Identifikátory "hodnota" a "Hodnota" tedy nejsou na rozdíl od VB.NET ekvivalentní. [7] 16
4.2 HTML HTML (HyperText Markup Language), je značkovací jazyk pro hypertext. Je jedním z jazyků pro vytváření stránek v systému World Wide Web, který umoţňuje publikaci dokumentů na Internetu. [10]
4.3 JavaScript JavaScript je objektový, multiplatformní programovací jazyk. Je převáţně vyuţíván ke zpracování dat na straně klienta ve webových stránkách. Jednoduchým příkladem jeho pouţití je validace formulářů, například vyţádání vyplnění políčka s heslem při přihlášení do aplikace. [11]
4.3.1 jQuery jQuery je lehká, malá javascriptová knihovna, která klade důraz na interakci mezi JavaScriptem a HTML. Byla vydána Johnem Resigem v lednu 2006 na newyorském BarCampu. jQuery stejně jako CSS oddělují „zobrazovací“ charakteristiky od struktury HMTL,
jQuery odděluje
„chování“
od
struktury
HTML.
Například
místo
přímé specifikace on-click události přímo v HTML kódu tlačítka by stránka řízená jQuery napřed našla vhodný element tlačítka a potom změnila jeho manipulátor události. Takovéto oddělení chování od struktury se také často nazývá jako princip nevtíravého JavaScriptu. [12]
4.4 CSS Kaskádové styly (v anglickém originále Cascading Style Sheets se zkratkou CSS) je jazyk pro popis způsobu zobrazení stránek napsaných v jazycích HTML, XHML nebo XML. Jazyk byl navrţen standardizační organizací W3C, autorem prvotního návrhu byl Håkon Wium Lie. Byly vydány zatím dvě úrovně specifikace CSS1 a CSS2, dne 7. Června 2011 byla dokončena revize CSS 2.1a pracuje se na verzi CSS3. Hlavním smyslem je umoţnit návrhářům oddělit vzhled dokumentu od jeho struktury a obsahu. Původně to měl umoţnit uţ jazyk HTML, ale v důsledku nedostatečných standardů a konkurenčního boje výrobců prohlíţečů se vyvinul jinak. Starší verze HTML obsahují 17
celou řadu elementů, které nepopisují obsah a strukturu dokumentu, ale i způsob jeho zobrazení. Z hlediska zpracování dokumentů a vyhledávání informací není takový vývoj ţádoucí. [13]
4.5 LINQ LINQ (anglicky Language Integrated Query), je integrovaný jazyk pro dotazování, který byl představen spolu s jazyky C# 3.0 a Visual Basic 9, spolu s .NET Frameworkem 3.5. LINQ přináší nový způsob pro dotazování nad jakýmikoliv daty, usnadňuje jejich tvorbu, třídění, jejich propojování i vyhledávání v nich. [14]
4.6 T-SQL Transact-SQL (T-SQL), je proprietární rozšíření pro SQL od společností Microsoft a Sybase. Microsoft tento jazyk pouţívá ve svých produktech Microsoft SQL Server. T-SQL poskytuje širokou škálu funkcionality pro programátory nebo databázové administrátory. Transact SQL umoţňuje řízení SQL dotazů, podmíněné zpracování konstrukcemi IF, ELSE, CASE, nebo WHILE, vyuţití zabudovaných funkcí MSSQL serveru, nebo také sekvenční zpracování pomocí kurzorů. Velká síla T-SQL je v uloţených procedurách, díky nimţ mohou programátoři definovat dávky SQL a znovu vyuţívat kód, definovat triggery, nebo například řešit část aplikační logiky uţ na databázovém serveru. Administrátoři mnoho pomocí systémových uloţených procedur administrovat server, systémové procedury totiţ umoţňují pomocí T-SQL nastavovat velkou škálu parametrů SQL serveru, vytvářet databáze, zálohovat, nastavovat práva atd.. [15]
4.7 ASP.NET ASP.NET je součást .NET Frameworku pro tvorbu webových aplikací a sluţeb. Je nástupcem technologie ASP (Active Server Pages) a přímým konkurentem JSP (Java Server Pages). Ačkoliv název ASP.NET je odvozen od starší technologie pro vývoj webů ASP, obě technologie jsou velmi odlišné. ASP.NET je zaloţen na CLR (Common Language Runtime), který je sdílen všemi aplikacemi postavenými na .NET Frameworku. Programátoři tak mohou realizovat své projekty v jakémkoliv jazyce podporujícím 18
CLR, např. Visual Basic.NET, JScript.NET, C#, Managed C++, ale i mutace Perlu, Pythonu
a
další.
Aplikace
zaloţené
na
ASP.NET
jsou
také
rychlejší,
neboť jsou před kompilovány do jednoho či několika málo DLL souborů, na rozdíl od ryze skriptovacích jazyků, kde jsou stránky při kaţdém přístupu znovu a znovu parsovány. [16]
4.7.1 ASP.NET MVC ASP.net MVC od společnosti Microsoft je technologie pro vývoj webových aplikací s ohledem na návrhové vzory, testovatelnost a agilní způsoby vývoje. Umoţňuje dobré oddělení vzhledu a funkčního kódu aplikace pro lepší udrţovatelnost. Také se snaţí pouţívat nejnovější webové standardy. Základem ASP.NET MVC je návrhový vzor (někdy se také říká architektonický vzor, protoţe jde spíše o architekturu aplikace) Model View Controller.Tento vzor poprvé popsalTrygve Reenskaug v roce1979 a poprvé byl pouţit v jazyce Smalltalk. Architektura Model View Controller se, jak je z názvu vidět, skládá ze tří částí:
Obrázek 2: Vyvolání řadiče akcí, která očekává hodnotu parametru
Model o Implementace business logiky o Persistence dat
View o Uţivatelské rozhraní
Controller o Zpracování poţadavků o Pouţití modelu o Navigace mezi View 19
Obrázek 3: Interakce s uživatelem [2]
Princip je takový, ţe uţivatel provede nějakou akci na uţivatelském rozhraní, Controller obdrţí oznámení o této akci z uţivatelského rozhraní (View) a následně Controller přistoupí k modelu a v případě potřeby ho zaktualizuje na základě provedené akce. Model je pouze jiný název pro doménovou vrstvu, doménová logika zpracuje změněná data a View získá data přímo z modelu a model o View nemá ţádné informace. Uţivatelské rozhraní pak čeká na další akci uţivatele, které celý cyklus zahájí znovu. [17]
4.7.2 Model V MVC M znamená Model a to je nejdůleţitější částí aplikace. Model je reprezentace reálných objektů, procesů a pravidel, které definují předmět známé jako doménové naší aplikace. Model, často označován jako doménový model obsahující C # objekty (známé jako doménové objekty), které tvoří vesmír naší aplikace a metody, které umoţňují nám manipulovat s nimi. Pohledy a kontroléry pak odhalí doménu pro naše klienty odpovídajícím způsobem. Dobře navrţená MVC aplikace se spustí s dobře navrţeným modelem, který je pak ústředním bodem aţ přidáme kontroléry a pohledy. [18]
4.7.3 View View je komponenta, která zobrazuje uţivatelské rozhraní, které je často vytvořeno na základě struktury dat Modelu, který například načte tabulku zaměstnanců a View ji nějak zobrazí (skutečně jen zobrazí, o akce uţivatele se uţ nestará). [19]
20
4.7.4 Controller Výhodou MVC je to, ţe usnadňuje vytváření aplikací tím, ţe vývojáři téměř „přikazuje“ kam
má
který
kód
dát.
Kromě
toho
je
jednodušší
testování
aplikací
neţ třeba u standardních WebForms. Tam se totiţ často dohromady míchá vzhled i práce s daty v jedné třídě. Napsat si například testovací třídu můţe být sloţitější, protoţe se jednoduše musíme zaobírat i tím, co nás zrovna příliš nezajímá. Do třetice tato architektura téměř svádí k paralelnímu vývoji. Díky nezávislosti jednotlivých komponent můţe jeden programátor pracovat na Modelu, druhý na Controlleru a tak dále. [19]
4.7.5 ASP.NET MVC vs. ASP.NET WebForms V ASP.NET MVC máme tedy alternativu k ASP.NET Webforms, jaké jsou tedy mezi nimi rozdíly?
Web forms
Vyuţívá Page controller pattern
Post back
ViewState
Server controls
MVC
Vyuţívá Model View Controller pattern
Poţadavky směřují na controllery
Controllery jsou separovány od view
ASPX stránky slouţí jako šablony na data
4.7.6 Razor View Engine pro ASP.NET Při zavedení nové verze ASP.NET MVC 3, byl zaveden alternativní view-engine nazvaný jako Razor, který byl koncipován tak, aby zjednodušil stávající syntaxi na webových stránkách v ASP.NET. Razor view-engine nahrazuje tradiční bloky znakem @. Nový zápis lze rychleji psát a rychleji sestavit neţ starý view-engine. Má také poměrně flexibilnější řešení a umoţňuje lepší jednotkové testy. 21
Většina webových stránek s technologií ASP.NET mají bloky kódu v jazyce C # nebo VB ve stejném místě jako HTML. A proto je v některých případech tato kombinace velice nepříjemná pro psaní a vymezení zdrojového kódu. Abychom se tomuto problému vyhnuli, byl Razor navrţen tak, aby se dobře učil a view engine byl kompaktní a expresivní, coţ následně umoţňuje proměnlivý kódovací postup. Razor není nový programovací jazyk sám, ale pouţívá syntaxi C # nebo Visual Basic. Přípona souboru je "cshtml" pro jazyk C #, a "vbhtml" pro jazyk Visual Basic.
22
5 Analýza a návrh implementace V dnešní době kdy je trh práce přesycen, vzniká čím dál víc ţivnostníků, kteří si jiţ vedou nebo budou vést účetnictví, pokud ovšem nechtějí platit za sluţby účetní jednotce. Nabízejí se hned dvě řešení v případě, kdyţ si osoba chce vést účetnictví sama a to:
online ve webové aplikaci, kde má uţivatel přístup odkudkoliv, kde se nachází přístup k internetu
v programu, který je nainstalován na nějaké platformě (např. Windows). I kdyţ toto řešení obyčejnému uţivateli brání v pohodlnosti a funkčnosti přenášení dat, či samotné aplikace na jiný počítač
Rozhodl jsem se tedy pro webovou aplikaci. V analýze jsem se snaţil zohlednit veškerá moţná řešení daného témata. Uzpůsobit vzhled a funkčnost co nejvíce uţivateli začínajícímu s účetnictvím.
5.1 Porovnání podobných aplikací na internetu Před začátkem provádění samotné analýzy jsem se musel seznámit s podobným řešením, které se běţně nalezne na internetu při zadání do vyhledávajícího okna některého ze serverů k tomu určených v internetovém prohlíţeči. Na internetu jsem narazil na mnoho placených komerčních aplikací, které jsem nemohl celé prozkoumat. Avšak byli zde i webové aplikace, které byli jen zčásti placené, coţ ve většině případů znamenalo pouze vyzkoušení dané aplikace na jednom příkladu a dost. Nikde jsem, ale nenašel webovou aplikaci zcela zdarma. Proto jsem si stáhl z internetových stránek http://www.money.cz/money-s3/ účetní program MONEY S3 na platformu Windows, který i v základu nabízí mnoho moţností a funkcí pro vedení účetnictví.
5.2 Požadavky běžného uživatele Na základě vlastního průzkumu na internetových fórech jsem se rozhodl aplikaci realizovat co moţná nejjednodušeji. Hlavně přehledně zobrazovat veškeré formuláře a data tak, aby uţivateli bylo hned jasné, kde a co má vyplnit, kde zobrazit data a jak je také zpětně nalézt. 23
Dále bylo nutné myslet na provádění zpětných reportů, kde si uţivatel bude moci rozdíly dvou deníků, zaloţit počáteční rozvahu a konečnou rozvahu podle uţivatelova účetního období. Webová aplikace vyţaduje kontrolu přístupu, aby se náhodou nestalo, ţe neregistrovaný uţivatel bude vyuţívat sekci aplikace pro registrované uţivatele (podvojné účetnictví a daňová evidence). Neregistrovanému uţivateli se budou zobrazovat pouze stránky s veřejnými daty a registrovanému uţivateli se budou zobrazovat stránky podle své volby při registraci, v jakém typu chce účtovat, který ale můţe kdykoliv změnit. Kontrola správnosti zadávaných údajů doprovázející s textovou nápovědou. Nápověda pro celou danou problematiku s účtováním. Neměl by chybět ani uţivatelský manuál samotné aplikace.
5.3 Případy užití Jedním ze způsobů jak nejlépe sestavit případy uţití, je pouţít use case diagram. Use case diagram je součástí UML jazyka, který se pouţívá pro vizuální návrh softwarů. V diagramu, který je znázorněn níţe (obrázek č. 4) jsou vyobrazené základní činnosti v aplikaci. Aktéři znázorňují veškeré typy uţivatelů, kteří budou moci do systému vstoupit a provádět základní činnosti, které budou moci ve webové aplikaci provádět.
24
Obrázek 4: Use case diagram
25
5.4 Návrh ER-Diagramu V návrhu jsem pouţil ISA hierarchii z několika důvodů
- menší počet tabulek,
neduplikování určitých údajů. Tímto mi, ale vzniká rozhodnutí mezi několika variantami jak ISA hierarchii transformovat do databáze.
Obrázek 5: varianty pro transformaci ISA hierarchie do databáze [3]
Zvolil jsem variantu, kde tabulky Evidence osoba a Účetnictví osoba se sloučí s tabulkou Osoba, ve které jsem zavedl dva rozlišovací atributy:
Evidence (bit)
Ucetnictvi (bit)
ER model bude obsahovat 10 tabulek, které jsou:
Osoba - Je to nad typ dvou tabulek Evidence osoba a Účetnictví osoba, které dědí její atributy a kaţdá pod-entita je identifikována výhradně tímto předkem. Entita obsahuje atributy ID_U - identifikační číslo osoby, Jméno, Heslo a E-mail.
Účetnictví osoba - Tabulka slouţí na archivaci a práci s informacemi uţivatele, kde jeho další vztahy s ostatními tabulkami budou směřovány pro podvojné 26
účetnictví. Tato tabulka je podtypem Entity „Osoba“ kde dědí její atributy ID_U (uniqueidentifier), Jméno (varchar(50)), Heslo (varchar(50)) a E-mail (varchar(50)).
Evidence osoba - Tabulka slouţí na archivaci a práci s informacemi uţivatele, kde jeho další vztahy s ostatními tabulkami budou směřovány pro daňovou evidenci. Tato tabulka je podtypem Entity „Osoba“ kde dědí její atributy ID_U (uniqueidentifier),
Jméno
(varchar(50)),
Heslo
(varchar(50))
a E-mail(varchar(50)).
Deník - V této tabulce se budou uchovávat veškerá data o účetním deníku, kde jeden uţivatel můţe vést více deníků (za kaţdý jeho účetní období jiný deník). Jeho Atributy jsou: ID_D(uniqueidentifier) - unikátní označení deníku, Deník (varchar(50)) - pojmenování deníku, Cena (varchar()) - rozdíl příjmů a výdajů, Datum (date)
- datum a cena se budou aktualizovat manuálně
při kaţdém
vyhodnocení
přidaném
hospodaření
jednoho
deníku,
kterému záznamy připadají, a automaticky se bude aktualizovat jiný deník, který je tímto ovlivněn.
Záznam - Tato tabulka bude uchovávat informace o záznamu v účtovacím typu evidence.
Její
atributy
jsou:
ID_Z (uniqueidentifier),
Doklad
(varchar(50)) - příjemka, výdejka jiné označení, Cena (money) která souhlasí s daným účetním dokladem, Datum (date)
- cena,
- datum napsaný
na dokladuPoznámka (varchar(50)), Typ (int) - označenítypu (např. 1 = Peněţní prostředky na pokladně), Zařazení (int)
- označení podkategorie Typu
(např. 2 = příjmy).
Rozvaha - V této tabulce se budou archivovat rozvahové výsledky za určité účetní období. Tyto informace budou v aplikaci také slouţit i ke grafickému znázornění rozdílu hospodaření mezi různým účetním období v podobě grafu. Atributy:
ID_Rozvaha
(uniqueidentifier),
Datum
(date),
Poznámka
(varchar(255)).
Účetnictví záznam - V této tabulce se budou archivovat různé účetní případy. Atributy: ID_Z (uniqueidentifier), Doklad (varchar(50)), Datum (date), Kc (int), Text (varchar(255)), MD a D jsou cizí klíče z pomocné tabulky Uct. Rozvrh.
Účetnictví Rozvrh - Tato pomocná tabulka slouţí, k rozlišení vztahu mezi účetními třídami v tabulce Účetnictví záznam a to mezi stranou Má dáti a Dal. 27
Atributy: ID_R (int) (varchar(255))
- zde jsou čísla všech účetních tříd, Označení
- kde je textový popis jednotlivých účetních tříd, Aktiva
a Pasiva (int) - zde jsou hodnoty, které slouţí k správnému výpočtu všech částí v Rozvaze.
Aktiva -Zde se jedná o tabulku, kde se uchovávají vypočtené výsledky aktivních účtů k dané rozvaze. Atributy: ID_A (uniqueidentifier), DHM (int) - dlouhodobý hmotný
majetek,
DNM
(int)
-
dlouhodobý
nehmotný
majetek,
DFM (int) - dlouhodobý finanční majetek, Zásoby (int), KFM (int) - krátkodobý finanční majetek, Pohledávky (int).
Pasiva -Zde se jedná o tabulku, kde se uchovávají vypočtené výsledky aktivních účtů k dané rozvaze. Atributy: ZK (int)
- základní kapitál, Krát. Závazky
a fondy (int), HV (int) - hospodářský výsledek, který se skládá z výsledku Výnosů - Nákladů, Úvěry (int), Ost. Závazky (int) - krátkodobý finanční majetek, ID_P (uniqueidentifier).
28
Obrázek 6: ER diagram
29
5.5 Transformace E-R modelu do RMD V transformaci je vidět hned několik změn jako je transformace ISA hierarchie v tabulce Osoba, kde atributy Evidence a Ucetnictvi jsou rozlišovací pro třístavovou volbu typu účtování. Dále je zde tabulka vztahu Záznamu se sebou samou pojmenovaná Záznam2 a tabulka Rozvaha, kde na základě povinnosti členství a vztahu 1:1 mezi Tabulkami Aktiv a Pasiv sloučena do jedné tabulky.
Osoba(ID_U, Jmeno, Heslo, E-mail, Evidence, Ucetnictvi)
Deník (ID_DE, Datum, Cislo, ID_U)
Záznam (ID_Z, ID_U,ID_D, Datum, Doklad, Cena, Typ, Zařazení)
Záznam2(ID_Zz, ID_Z, Typ, Zařazení)
Účetnictví záznam (ID_Z, ID_U, ID_Rozvaha, Datum, Doklad, Text, Kc, MD, D)
Účetnictví Rozvrh (ID_R, Označení, Aktiva a Pasiva)
Rozvaha (ID_ Rozvaha, ID_U, Datum, Poznámka, DHM, DNM, DFM, KFM, Zásoby, Pohledávky, ZK, Úvěry, HV, Ost. Závazky, Krátkodobé závazky a fondy)
5.6 Ověření normality schématu
První normální forma (1NF) - Kaţdý atribut schématu je elementární a nestrukturovaný. Tyto podmínky model splňuje, protoţe se zde nevyskytuje ţádný skupinový atribut.
Druhá normální forma (2NF)- neexistují závislosti atributů na podmnoţině ţádného klíče. V modelu se nevyskytuje ţádná závislost atributu na podmnoţině klíče. U kaţdé tabulky je pouze jeden atribut sám sobě primárním klíčem, a který ji určuje. Proto i zde jsou splněny podmínky 2NF.
Třetí normální forma (3NF) - Ţádný neklíčový atribut není tranzitivně závislý na ţádném klíči. I zde je splněna podmínka v návrhu modelu.
30
5.7 Funkční analýza Tuto analýzu jsem vytvořil s cílem se zamyslet nad tím, jak poţadavky uţivatele (např. uţivatel si bude chtít přidávat záznam do deníku) zrealizovat pomocí funkcí, které bude systém nabízet. Nejlépe to bude asi vidět na následujícím příkladě a na níţe zobrazeném diagramu. Systém by měl obsahovat funkce jako např. přidávání záznamu do deníku, kde potřebuju na provedení tohoto procesu informaci o uţivateli z datového skladu evidence uţivatelů, dále informaci o záznamu z datového skladu evidence záznamů a Terminátor Evidence (Aktéra) pro vloţení záznamu do Deníku.
Obrázek 7: Diagram funkční analýzy
31
6 Implementace V této části se budu zabývat transformací návrhů a vazeb do programové realizace.
6.1 Realizace databáze V této kapitole si na zajímavých částech kódu, které jsou zařazeny do vlastních skupin pro lepší přehlednost, nastíníme vývoj a pouţití databáze v této webové aplikaci.
6.1.1 Triggery Integritní omezení nad databází (definovaná triggery) jsem pouţil z mnoha důvodů např. v případě vzniku nějaké události (modifikace řádku v tabulce), se spustí trigger k tomu určený, který provádí určitý úkol před samotnou změnou v tabulce. A proto jsou v této databázi potřeba triggerů v různých situacích, jako je např. změny typu účtování uţivatele, kde potřebuji, aby se automaticky provedl výmaz v tabulkách určených pro daný typ účtování podle uţivatelem odškrtnutého typu účtování. Toto nám řeší níţe zobrazený
trigger
pojmenovaný
Osoba_Trigger_Update.
Dále
jsou
popsány
a vysvětleny příklady pouţitých triggerů.
Trigger pojmenovaný Osoba_Trigger_Update kontroluje pro správnou funkci sloupec, v jakém změna nastala, kde provede úkol pro výmaz dat.
ALTER TRIGGER Osoba_Trigger_Update ON dbo.Osoba FOR UPDATE AS BEGIN DECLARE @IDuuniqueidentifier; DECLARE @IDzuniqueidentifier; if update(Evidence) BEGIN SELECT @IDu = ID_U FROM deleted; DELETE FROM dbo.[Zaznam2] WHERE ID_Z IN (SELECT ID_Z FROM dbo.[Zaznam] WHERE (ID_U=@IDu); DELETE FROM dbo.[Zaznam] WHERE ID_U=@IDu; DELETE FROM dbo.[Denik] WHERE ID_U=@IDu; END if update(Ucetnictvi) BEGIN SELECT @IDu = ID_U FROM deleted; DELETE FROM dbo.[Uct_zaznam] WHERE ID_Z IN (SELECT ID_Z FROM dbo.[Zaznam] WHERE ID_U=@IDu); DELETE FROM dbo.[Rozvaha] WHERE ID_U=@IDu; END END
32
Trigger pojmenovaný Osoba_Trigger, slouţí pro případ, kdy se uţivatel rozhodl smazat svůj uţivatelský profil. Tento trigger „zachytí“ událost Delete a provede úkol na mazání dat uţivatele. Zde musíme brát v potaz data v daňové evidenci, ale i v podvojném účetnictví. Jednotlivé záznamy v tabulkách se maţou na základě ID uţivatele získané z dočasné speciální tabulky deleted, který SQL server automaticky vytváří a spravují.
ALTER TRIGGER Osoba_Trigger ON dbo.Osoba FOR DELETE AS BEGIN DECLARE @deleted_IDuuniqueidentifier; SELECT @deleted_IDu=ID_U FROM deleted; DELETE FROM dbo.[Zaznam] WHERE ID_U=@deleted_IDu; DELETE FROM dbo.[Denik] WHERE ID_U=@deleted_IDu; DELETE FROM dbo.[Uct_zaznam] WHERE ID_U=@deleted_IDu; DELETE FROM dbo.[Rozvaha] WHERE ID_U=@deleted_IDu; END
6.1.2 Skladové procedury databáze Ve skladových procedurách jsou vytvořeny procedury, které obsahují připravený SQL kód, který nám ušetří psaní dotazů znova a znova. Dále nám stačí jen volat uloţené procedury.
Procedura delete_Zaznam nám kromě mazání jednoho záznamu také kontroluje, jestli záznam není zahrnut v nějakém deníku, a pokud ano, provede aktualizování ceny daného deníku. Ovšem pokud deník obsahuje pouze tento mazaný záznam, provede se místo aktualizace deníku jeho smazání.
ALTER PROCEDURE dbo.delete_Zaznam ( @ID_U uniqueidentifier, @ID_Z uniqueidentifier ) AS DECLARE @Cena money; DECLARE @pocetint; DECLARE @IDduniqueidentifier; SELECT @IDd = ID_D FROM dbo.[Zaznam] WHERE ID_Z=@ID_Z; IF @IDdIS NOT NULL BEGIN SELECT @pocet= COUNT(ID_D) FROM dbo.[Zaznam] WHERE ID_D=@IDd; IF(@pocet<=1) BEGIN DELETE dbo.[Denik] WHERE ID_D=@IDd; END; ELSE BEGIN UPDATE dbo.[Zaznam] SET ID_D=NULL WHERE ID_Z=@ID_Z;
33
SELECT @Cena = dbo.Edit_deniku(@ID_U, @IDd); UPDATE dbo.[Denik] SET Cena=@Cena WHERE ID_D=@IDd; END; END; DELETE dbo.[Zaznam] WHERE ID_U=@ID_U AND ID_Z=@ID_Z; RETURN;
6.1.3 Funkce V této databázi by neměli chybět ani funkce, které nám provádějí akce vracející hodnotu (např. jsou zde funkce na výpočty, kontroly atd.). Toto řešení je pro mne přehlednější a jednoduší neţ v LINQu psaní stejného dotazu při různých akcích.
Níţe zobrazená funkce nazvaná Edit_Denikumá funkci na výpočet rozdílu mezi příjmy a výdaji. V kontrole řeší existenci deníku. Pokud existuje, provádím jednotlivé výpočty příjmů a výdajů pomocí agregační funkce SUM. A nakonec funkce vrátí výsledek nebo 0.
ALTER FUNCTION dbo.Edit_Deniku ( @IDuuniqueidentifier, @IDduniqueidentifier ) RETURNS money AS BEGIN DECLARE @cena MONEY; DECLARE @cena2 MONEY; DECLARE @kontrola int; SELECT @kontrola= COUNT(ID_D) FROM dbo.[Denik] WHERE ID_D=@IDdAND ID_U=@IDu; IF(@kontrola>0) BEGIN SELECT @cena = SUM(Cena) FROM dbo.[Denik_Zaz_Zz] WHERE (Zarazeni=1 OR Zarazeni2=1) ANDID_D=@IDd AND ID_U=@IDu; SELECT @cena2 = SUM(Cena) FROM dbo.[Denik_Zaz_Zz] WHERE (Zarazeni=2 OR Zarazeni2=2) AND ID_D=@IDd AND ID_U=@IDu; IF(@cenaIS NULL) RETURN 0-@cena2; IF(@cena2 IS NULL) RETURN @cena; RETURN @cena-@cena2; END; RETURN 0; END
6.1.4 Databázová View Při vytváření sloţitějších dotazů napsaných v LINQu, jsem si vytvořil několik Pohledů, abych se mohl snáze dostat a pracovat s daty uloţených v tabulkách, View si mohu naindexovat a celkově je to v databázi rychlejší. 34
Uvedl jsem zde dva pouţité Pohledy:
První (obrázek č. 9) nám umoţňuje pracovat s daty záznamu a deníku (deník můţe být NULL proto je zde pouţito spojení tabulek Záznamu a Deníku přes LEFT OUTER JOIN)
Obrázek 8: View pro edit a detail záznamu v evidenci
U druhého (obrázku č. 10) pohledu potřebujeme dvakrát spojit tabulku Uct_zaznam s Uct_Rozvrh, abychom při zobrazení detailu účetního záznamu správně zobrazili a rozdělili účty s cenou na MD a s cenou na D.
Obrázek 9: View, které je použito pro zobrazení detailu záznamu v podv. Účetnictví
35
6.2 Propojení LINQu to SQL První a nejzřejmější aplikací LINQ je dotazování do externí relační databáze. LINQ pro SQL je součást projektu LINQ, která nabízí moţnost dotazování do relační data-báze Microsoft SQL Serveru a také objektový model vycházející z dostupných entit. Jinými slovy, můţete definovat mnoţinu objektů, které představují tenkou abstraktní vrstvu nad relačními daty, a do tohoto objektového modelu se dotazovat pomocí dotazů LINQ, které se ve stroji LINQ pro SQL převádějí na odpovídající dotazy SQL. LINQ pro SQL podporuje Microsoft SQL Server od verze SQL Serveru 2000 a Microsoft SQL Server Compact počínaje verzí 3. 5. [20]. V LINQ pro SQL lze napsat takovýto prostý dotaz: var query = from c in Customerswherec.Country == „USA“ &&c.State == „WA“ selectnew {c.CustomerID, c.CompanyName, c.City };
36
Obrázek 10: vygenerovaný diagram LINQ to SQL
37
6.3 Model Zde se nachází nejdůleţitější část celé aplikace. Model je rozdělen na dvě části Models_manager a Models_view (viz. Obrázek č. 11).
Obrázek 11: použité manageři a pohledy v modelu
Models_view sloţka obsahující modely, které jsou námi definovány v aplikaci MVC. Framework MVC pak vytvoří odpovídající ModelState objekt a přidá ho do kolekce. Následující příklad nám ukazuje třídu UctView, která definuje vlastnosti pro ukládání záznamu v účetnictví. namespace Ucetnictvi.Models.Models_view { publicclassUctView { . . .
povinný údaj (zobrazí chybovou hlášku, pokud ve formuláři zobrazeného ve view používající tento model není vyplněn název dokladu) [Required(ErrorMessage = "Název dokladu není vyplněn")]
pojmenovaná vlastnost
vlastnost typu string
[Display(Name = "Doklad")]
publicstring Doklad { get; set; } . . . [Required(ErrorMessage = "Číslo účtu strany Dal, není vyplněn")]
rozah pro danou vlastnost
[Range(0,2000000000)] [Display(Name = "strana Dal")] publicint D { get; set; }}
38
Models_manager je sloţka obsahující jednotlivé typy manaţerů pro daný typ. Tato vytvořená instance třídy DataContext (DataClasses je jméno dbml) má metody zajišťující připojení k DB. privateDataClassesDataContext DB = newDataClassesDataContext();
Dále zde jsou metody, funkce, listy. Na následujícím příkladě si popíšeme zajímavou metodu typu List, která nám vrací hodnotu List výsledků nalezených v databázi. internalList
Detail(string j, string d) {
zde si vytvořím nový List určitého modelu
List Zaznamy = newList();
kontrola poslaného dokladu (z kontroléru) jestli není prázdný
if (d != null) {
Zde pomocí dotazu v LINQu hledám výsledky dokladů jednoho uživatele
var result = from o in DB.Uct_Z_Rozs where o.Doklad.Contains(d) && (o.ID_U == DB.ID_Uinfo(j)) selectnew{ ID_Z = o.ID_Z, Datum = o.Datum, Doklad = o.Doklad, Text = o.Text, Kc = o.Kc, MD = o.MD, D = o.D, ozMD = o.OznaceniMD, ozD = o.OznaceniD };
Procházení výsledků a následné jejich ukládání do vytvořeného Listu Záznamy
foreach (var n in result) { UctViewDetail detail = newUctViewDetail(); detail.ID_Z = n.ID_Z; detail.Datum = n.Datum; detail.Doklad = n.Doklad; detail.Text = n.Text; detail.Kc = n.Kc; detail.MD = n.MD; detail.D = n.D; detail.ozMD = n.ozMD; detail.ozD = n.ozD; Zaznamy.Add(detail); } }
řazeni podle názvu dokladů v Listu Záznamy
Zaznamy.Sort((x, y) => x.Doklad.CompareTo(y.Doklad)); return Zaznamy; }
39
6.4 View Pohledy představují rozhraní pro aplikace. Jak uţivatel pracuje s pohledem, jsou data směrována z tohoto pohledu na akční metody v kontroléru, které by pak mohly vyvolat další pohled. Aplikace MVC můţe mít několik regulátorů, z nichţ kaţdý můţe obsahovat několik akčních metod. Kaţdá akce by mohla vyvolat odlišný pohled. Zobrazení jsou organizovány ve sloţkách, které jsou pojmenované po souvisejících kontrolérech.
Obrázek 12: vytvořené složky a pohledy v aplikaci
Ukázka a popsání pouţitého pohledu Denik.cshtml v aplikaci.
tento pohled je ve struktuře
KeyValuePair(slovník)
v němž pracuji se dvěma
instancemi (kde klíč je hodnota zadaného deníku do vyhledávacího
text-boxu;
hodnota je list deníků) @model KeyValuePair> @{ ViewBag.Title = "Denik";
rozvržení stránky podle sdíleného pohledu Layout = "~/Views/Shared/_NoPublicE.cshtml";}
40
<scriptsrc="@Url.Content("~/Scripts/jquery.validate.min.js")"type="text/javascrip t"> <scriptsrc="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"type="te xt/javascript">
formulář pro hledání deníků
@if (Model.Value !=null) { Ucetnictvi.Models.Models_view.DenikChartsDetail c = new Ucetnictvi.Models.Models_view.DenikChartsDetail();
foreach (var d in Model.Value) { if (d.Denik_n == Model.Key.Denik && Model.Key.Denik != null) { c.Denik_n = d.Denik; c.Cena = d.Cena; c.Datum = d.Datum; c.Denik = Model.Key.Denik; } if ((d.Denik2_n == Model.Key.Denik2 || d.Denik_n == Model.Key.Denik2) && Model.Key.Denik2 != null) { c.Denik2_n = d.Denik; c.Cena2 = d.Cena; c.Datum2 = d.Datum; c.Denik2 = Model.Key.Denik2; } }
je volána pouze se jménem částečného pohledu. ASP.NET MVC bude převeden na částečný pohled stejného pohledu a prohlížet data slovníkového objektu použitého od volající šablony zobrazení Html.RenderPartial("denikView", c); }
6.5 Controller V architektuře MVC jsou příchozí poţadavky zpracovány kontroléry. Controllery jsou jen jednoduché C# třídy (obvykle dědí z System.Web.Mvc.Controller, framework je vestavěná základní třída Controlleru). Kaţdá veřejná metoda v kontroléru je známá jako akční metoda. V projektu jsou pouţity čtyři Controllery:
(View pro přihlášeného uţivatele podle volby typu účtování a jiné View pro nepřihlášeného uţivatele)
AccoundController – zpracovává příchozí poţadavky registrace, přihlášení, odhlášení, úpravu a mazání uţivatele
UcetnictviController – řeší příchozí poţadavky pouze spojené s podvojným účetnictvím
Příklad akční metody SignUp zapsané v AccoundControlleru.
Tato akční metoda při akci SignUp (registrace) zavolá View, které se pak zobrazí.
Následující metoda řeší stisknutý submit ve View, které se zobrazilo předchozí akcí, proto je před metodou [HttpPost] co znamená, ţe metoda reaguje na post request, který se pouţívá pro vytváření, aktualizace, odstranění (změny dat). Post jsou dobré, protoţe vyţadují odeslání formuláře. [HttpPost] publicActionResultSignUp(OsobaRegistrationView user) { try {
kontrola Modelu, který je zde použit (OsobaRegistrationView). Pokud je model platný (tj. souhlasí vyplněná data a jejich typ poslaného formuláře podle modelu OsobaRegistrationView)
kontrola zda uživatel již neexistuje v databázi pomocí funkce v manažerovi v daném modelu a ten pak komunikuje s databází prostřednictvím dotazů v LINQu if (OsobaManager.OsobaExist(user.Name, user.Email)) {
Vytvoření a přidání Cookie, nastavení dobu platnosti a uložení jména uživatele do ní HttpCookieCookie = newHttpCookie("User"); //pouziti SSL Cookie.Secure = false; //Cookie nebude moci byt vazivanascripty Cookie.HttpOnly = true; Cookie.Values["Name"] = user.Name; Cookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(Cookie);
pokud proběhlo vše v pořádku, zavolá se jiná akce daného Kontroléru returnRedirectToAction("Index", "Home");
} else{ ModelState.AddModelError("", "Uživatelské jméno již existuje nebo email je stejný s jiným uživatelem."); } } else{ ModelState.AddModelError("", "Musíte zaškrtnout alespoň jeden typ účtování."); } }} catch{ returnView(user); } returnView(user); }
6.6 Grafické rozvržení aplikace a celkový webdesign Při vytváření rozvrţení aplikace jsem se snaţil, co nejlépe rozvrhnout části (menu a obsahu – formuláře a výpisy), aby uţivateli nedělali problém v orientaci. Kaţdý registrovaný uţivatel má úvodní stránku uzpůsobenou podle volby účtování. Na obrázku níţe vidíme úvodní obrazovku registrovaného uţivatele, který má zvolen obojí typ účtování.
Na následujícím obrázku je znázorněn formulář pro přidání nového záznamu do evidence.
Na tomto obrázku (č.14) je ukázáno jak je formulován výpis záznamů, který se neliší od papírového rozvrţení v deníku příjmů a výdajů.
V poslední ukázce vidíme zobrazení dvou deníků.
7 Testování Pro testování aplikace jsem pouţil prohlíţeče: FireFox, Opera a Chrome.
U prohlíţeče Opara, se všechny formuláře a výpisy zobrazovaly v pořádku. I provádění různých akcí například vkládání tagu či skriptu do formulářů. Problémy byly jen ve správném zobrazování pozadí a zobrazení písma v text-boxu pro přihlášení.
V prohlíţeči Chrome, byl obdobný problém se zobrazením jako u prohlíţeče Opera. Pozadí se také zobrazovalo nekorektně a písmo v text-boxu pro přihlášení bylo moc veliké.
Jediný prohlíţeč FireFox vše zobrazoval a choval se tak jak má.
Těchto pár chyb jsem hned odladil.
7.1 Porovnání aplikace s konkurenčními projekty Protoţe jsem na internetu nenašel ţádnou free aplikaci stejného zaměření jako je tato bakalářská práce, musel jsem porovnání provádět s aplikací MONEY S3 nainstalovanou na mém operačním systému Windows. Porovnání probíhalo srovnáním přehlednosti aplikace, v tomto bodě jsem měl rozvrţení formulářů pro zadávání záznamů přehledněji řešené neţ v této aplikaci. Dále porovnání pokračovalo ve funkčnosti, kde program MONEY S3 měl daleko více moţností a detailněji řešené různé akce (např. zobrazení detailu záznamu, kde jsem měl na výběr z více moţností). Na konec tohoto porovnání bych chtěl podotknout, ţe tato práce zaostává v multifunkčnosti pouţití aplikace. Důvod je ten, ţe nejsem aţ tak do hloubky zasvěcen v oboru účetnictví, i kdyţ mám dlouholeté zkušenosti ze střední školy. Navíc musím brát ohled na to, ţe jsem neporovnával dvě webové aplikace.
8 Závěr Cílem této bakalářské práce bylo vytvoření webové aplikace pro účtování účetních případů a jejich práce s nimi. Práce byla vyvíjena v nových technologiích. S některými jsem měl moţnost se setkat pouze na praxi a některý byli pro mne zcela novinkou. Je škoda, ţe se pouţité technologie v bakalářské práci nevyučují na naší škole VSPJ. Ale jsem rád, ţe jsem si rozšířil své dosavadní znalosti a poznal nové věci, které chci nadále vyuţívat a zlepšovat se v nich. Samotné návrhy řešení aplikace jsem realizoval na základě poznatků z předmětů, které jsem absolvoval na VSPJ. Dále jsem musel důkladně nastudovat jak správně účtovat v Daňové evidenci nebo Podvojném účetnictví. Poznával jsem nový framework ASP.NET MVC3, který byl důleţitý pro následnou implementaci aplikace. Během Implementace jsem narazil na různé problémy, které jsem řešil pomocí internetu a za pomoci vedoucího mé bakalářské práce. Za problémovou situaci bych zmínil tvorbu
které se mi nepodařilo zprovoznit. Proto jsem hledal řešení jinde a našel knihovnu Helpers, která splnila mé očekávání. Na konec jsem vytvořil funkční webovou aplikaci postavenou na architektuře MVC, která
rozšiřovat.
http://ucetnictvi.aspone.cz/ .
8.1 Možnosti a plány pro rozšíření aplikace Webovou aplikaci budu i nadále rozvíjet a vylepšovat. Například v sekci Evidence bych chtěl přidat deník faktur přijatých i vydaných, skladové karty, příjemky a výdejky. Dále uţivatelům udělat moţnost výpočtu mzdy, vytvoření výplatní pásky, detailněji zpracovat nápovědu atd. A na konec vylepšit grafické zobrazení aplikace.
9 Seznam použité literatury [1] ŠTOHL, Pavel. Učebnice účetnictví 2011: pro střední školy a veřejnost. 12., upr. vyd. Znojmo: Pavel Štohl, 2011, 9 sv. ISBN 978-80-87237-44-1. [2] Účetnictví. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/%C3%9A%C4%8Detnictv%C3%AD [3] Dějiny účetnictví. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/D%C4%9Bjiny_%C3%BA%C4%8Detnictv%C3% AD [4] Microsoft [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://www.microsoft.com/cze/msdn/vstudio/ [5] Microsoft Visual Studio. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/Microsoft_Visual_Studio [6] Microsoft SQL Server. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/Microsoft_SQL_Server [7] C Sharp. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/C_Sharp [8] Gimp. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/Gimp [9] Slunečnice.cz. [online]. 19. 11. 2005 [cit. 2012-12-09]. Dostupné z: http://www.slunecnice.cz/sw/smartdraw-7/ [10] HTML. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/HTML [11] Javascript. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/Javascript [12] JQuery. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/JQuery [13] Kaskádové styly. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/Kask%C3%A1dov%C3%A9_styly 48
[14] LINQ. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/LINQ [15] T-SQL. Cecak.cz [online]. 2009 [cit. 2012-12-09]. Dostupné z: http://www.cecak.cz/fel/dba/referaty/mssql/pokrocile_techniky_v_tsql_funkce_podminene_zpracovani_rizeni_toku_kurzory_ulozene_procedury_zpra covani_chyb [16] ASP.NET. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/ASP.NET [17] Človíčkův weblog. HORÁK, Michal. ASP.NET MVC [online]. 2008 [cit. 2012-12-09]. Dostupné z: http://weblog.clovicek.net/data/soubory/ASP.NET%20MVC.pdf [18] FREEMAN, Adam. Pro ASP.NET MVC 3 framework. 3rd. ed. New York: Apress, c2011, xxv, 824 s. The expert's Voice in .NET. ISBN 978-1-4302-3404-3. [19] Programujte.com. KOTTNAUER, Jakub. Jemný úvod do teorie ASP.NET MVC [online]. 3. 8. 2009 [cit. 2012-12-09]. Dostupné z: http://programujte.com/clanek/2009050200-jemny-uvod-do-teorie-asp-net-mvc/ [20] PIALORSI, Paolo a Marco RUSSO. Microsoft LINQ: kompletní průvodce programátora. Vyd. 1. Brno: ComputerPress, 2009, 615 s. ISBN 978-80-251-27353.
10 Seznam použitých obrázků [1] Luca Pacioli. Wikipedie [online]. 2012 [cit. 2012-12-09]. Dostupné z: http://cs.wikipedia.org/wiki/D%C4%9Bjiny_%C3%BA%C4%8Detnictv%C3% AD [2] Zdrojak.cz. BERNARD, Borek. Interakce s uživatelem [online]. 7. 5. 2009 [cit. 2012 12 - 09]. Dostupné z: https://users.fit.cvut.cz/valenta/doku/lib/exe/fetch.php/bivs/dbs_06_transformace_k onceptualniho_shcematu_na_relacni.pdf [3] ČVUT. VALENTA, Michal. ISA hierarchie [online]. 2010 [cit. 2012-12-09]. Dostupné z: https://users.fit.cvut.cz/valenta/doku/lib/exe/fetch.php/bivs/dbs_06_transformace_k onceptualniho_shcematu_na_relacni.pdf
11 Seznam obrázků Obrázek 1: LuccaPacioli ................................................................................................. 12 Obrázek 2: Vyvolání řadiče akcí, která očekává hodnotu parametru ............................. 19 Obrázek 3: Interakce s uţivatelem .................................................................................. 20 Obrázek 4: Use case diagram.......................................................................................... 25 Obrázek 5: varianty pro transformaci ISA hierarchie do databáze ................................. 26 Obrázek 6: ER diagram................................................................................................... 29 Obrázek 7: Diagram funkční analýzy ............................................................................. 31 Obrázek 8: vygenerovaný diagram LINQ to SQL .......................................................... 37 Obrázek 9: View pro edit a detail záznamu v evidenci .................................................. 35 Obrázek 10: View, které je pouţito pro zobrazení detailu záznamu v podv. účetnictví 35 Obrázek 11: pouţité manageři a pohledy v modelu ....................................................... 38 Obrázek 12: vytvořené sloţky a pohledy v aplikaci ....................................................... 40 Obrázek 13: zobrazení úvodí obrazovky ........................................................................ 44 Obrázek 14: přidání nového záznamu ............................................................................ 44 Obrázek 15: výpis záznamů v evidenci .......................................................................... 45 Obrázek 16: rozdíl dvou deníků...................................................................................... 45
12 Seznam zkratek .NET – “dot net“ zkratka z NETWORK ASP.NET – Active Server Pages s .NET CLR – Common Language Runtime CSS – Cascading Style Sheets HTML – HyperText Markup Language HTTP – Hypertext Transfer Protocol LINQ – Language Integrated Query MVC – Model-View-Controller SQL – Structured Query Language URL – Uniform Resource Locator