ˇ ˇ ´ ODBORNA ´ CINNOST ˇ STREDO SKOLSK A
Spr´ ava a tisk faktur v LaTeXu
ˇ Ondˇ rej Sika
Plzeˇ n 2012
ˇ ˇ ´ ODBORNA ´ CINNOST ˇ STREDO SKOLSK A ˇ Informatika 18 Obor SOC:
Spr´ ava a tisk faktur v LaTeXu Management and invoice printing in LaTeX
ˇ Ondˇ rej Sika ˇ a SPSE ˇ Plzeˇ VOS n Koterovsk´ a 86 Konzultant: Ing. Petr Vˇ cel´ ak
Autor: ˇ Skola:
Plzeˇ n 2012
Anotace Program si vzhledem ke sv´e jednoduchosti m˚ uˇze naj´ıt uplatnˇen´ı u zaˇc´ınaj´ıc´ıch podnikatel˚ u, ˇzivnostn´ık˚ u ˇci web designer˚ u, kteˇr´ı nedisponuj´ı dostateˇcn´ ym finanˇcn´ım kapit´alem pro poˇr´ızen´ı univerz´aln´ıho u ´ˇcetn´ıho programu, ale pˇresto potˇrebuj´ı vystavovat faktury sv´ ym odbˇeratel˚ um v z´akonem uznan´e formˇe.
Kl´ıˇ cov´ a slova: faktura, LaTeX, open source, Python, multiplatformn´ı program, Django
Annotation This Invoice-generator regarding to its simple structure will surely find its users among enterpreneur-beginners or web designers, who can’t afford expensive accounting program but need to issue propper ivoices to their customers.
Key words: Invoice, Latex, open source, Python, multi-platform tool, Djnago
Podˇ ekov´ an´ı Dˇekuji Ing. Petru Vˇcel´akovi za velmi dobr´e veden´ı, za rychlou a obˇetavou pomoc pˇri zpracov´an´ı t´eto pr´ace. D´ale dˇekuji za vˇsechny pˇripom´ınky a odborn´e rady, kter´e mi bˇehem zpracov´an´ı poskytl.
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem svou pr´aci vypracoval samostatnˇe, pouˇzil jsem pouze podklady (literaturu, SW atd.) uveden´e v pˇriloˇzen´em seznamu a postup pˇri zpracov´an´ı a dalˇs´ım nakl´ad´an´ı s prac´ı je v souladu se z´akonem ˇc. 121/2000 Sb., o pr´avu autorsk´em, o pr´avech souvisej´ıc´ıch s pr´avem autorsk´ym a o zmˇenˇe nˇekter´ych z´akon˚ u (autorsk´y z´akon) v platn´em znˇen´ı.
V Plzni dne ........................ podpis: . . . . . . . . . . . . . . . . . . . . . . . . . . .
Obsah 1 Zad´ an´ı
5
´ 2 Uvod
5
3 Anal´ yza problematiky 3.1 Multiplatformn´ı aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Tisk a v´ ystup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 5 6
4 N´ avrh 4.1 Programovac´ı jazyk 4.2 Framework . . . . . 4.3 Datab´aze . . . . . 4.4 LATEX . . . . . . .
. . . .
6 6 6 6 7
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
5 Program´ atorsk´ a dokumentace 5.1 V´ yvojov´e prostˇred´ı . . . . . . . . . . . 5.2 Pouˇzit´e programy a knihovny . . . . . 5.3 Struktura programu . . . . . . . . . . . 5.3.1 Modelov´a struktura . . . . . . . 5.3.2 Souborov´a struktura programu
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
7 7 7 7 7 8
6 Uˇ zivatelsk´ a dokumentace 6.1 Instalace . . . . . . . . . 6.2 Konfigurace . . . . . . . 6.2.1 Server Apache2 . 6.2.2 Django server . . 6.3 Pouˇz´ıv´an´ı . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
8 8 8 9 10 10
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
7 Z´ avˇ er
11
8 Literatura 8.1 Pouˇzit´a literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Diskuzn´ı f´ora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11 11 11
ˇ Ondˇrej Sika
Spr´ava a tisk faktur v LaTeXu
1
Zad´ an´ı 1. Implementujte snadno ovladatelnou a pˇrenositelnou aplikaci pro tvorbu, spr´avu a tisk faktur v LaTeXu s GUI. 2. Aplikace umoˇzn ˇuje pˇreddefinov´an´ı ˇsablon pro tiskovou sestavu i uloˇzen´ı vyplnˇen´ ych u ´daj˚ u jako vzoru pro dalˇs´ı faktury. 3. Moˇznost naplnˇen´ı dat z extern´ıho souboru (napˇr. CSV, XML) a jejich d´avkov´e zpracov´an´ı. 4. Vytvoˇren´ı instalaˇcn´ıho souboru/bal´ıˇcku a program´atorsk´e i uˇzivatelsk´e dokumentace.
2
´ Uvod
C´ılem t´eto pr´ace je navrhnout nen´aroˇcn´ y program pro generov´an´ı faktur, kter´ y by byl snadno ovladateln´ y a multiplatformn´ı. Je d˚ uleˇzit´e, aby tento program fungoval na vˇsech operaˇcn´ıch syst´emech (Linux, Windows, OS X), aby nez´aleˇzelo na grafick´em prostˇred´ı ve kter´em dan´ y syst´em pracuje (GNOME, KDE, X-fce, . . . ).
3 3.1
Anal´ yza problematiky Multiplatformn´ı aplikace
Pokud chcete zaruˇcit, ˇze aplikaci budete moci pouˇz´ıvat na vˇsech typech operaˇcn´ıch syst´em˚ u a zaˇr´ızen´ı, je to probl´em. Pokud se rozhodnete pro klasickou aplikaci, jsou knihovny (Tkinter, Qt, Gtk), kter´e jsou schopny zajistit stejn´ y vzhled. Dalˇs´ı probl´em je, ˇze LaTeX tˇeˇzko zprovozn´ıte na tabletu ˇci mobilu. Dalˇs´ım probl´emem je to, ˇze tablety a telefony potˇrebuj´ı speci´aln´ı grafick´e prostˇred´ı. Toto vˇse lze jednoduˇse zajistit t´ım, ˇze aplikaci pust´ıme na serveru a budeme se k n´ı pˇripojovat pomoc´ı webov´eho prohl´ıˇzeˇce. Aplikaci plnˇe optimalizujeme na linux a v kliensk´e ˇca´sti nemus´ıme nastavovat nic. Aplikace ovˇsem umoˇzn ˇuje bˇeh pˇr´ımo na klientsk´em PC.
5
ˇ Ondˇrej Sika
Spr´ava a tisk faktur v LaTeXu
3.2
Tisk a v´ ystup
V´ ystup t´eto aplikace m´a b´ yt vytiˇstˇen´a faktura a soubor s fakturou, vhodn´ y k archivaci ˇci pos´ıl´an´ı mailem. Tisk m˚ uˇzeme doc´ılit pˇr´ım´ım tiskem z html. Pˇr´ım´ y tisk nen´ı nez´avysl´ı na v´ ystupn´ım zaˇr´ızen´ı a chyb´ı v´ ystup do soboru. Pro v´ ystup aplikace jsem zvolil form´at PDF, kter´ y splˇ nuje standart DVI (device independent - nez´avisl´ y na v´ ystupn´ım zaˇr´ızen´ı), je neupraviteln´ y (d´a se sice upravit, ale ne omylem), vhodn´ y k archyvaci a t´emˇeˇr vˇsichni maj´ı v poˇc´ıtaˇci prohl´ıˇreˇc PDF.
4 4.1
N´ avrh Programovac´ı jazyk
Pokud jsme se dˇr´ıve rozhodli, ˇze aplikace bude bˇeˇzet na servru m´ame na v´ ybˇer z nˇekolika programovac´ıch jazyk˚ u. Mus´ıme zvolit kompromis mezi rychlost´ı (Perl, PHP) a jednoduchost´ı k´odu (Python, Ruby). Zvolil jsem si Python, protoˇze s t´ımto jazykem pracuji uˇz dlouho.
4.2
Framework
Ps´at aplikaci od zaˇca´tku by nebylo moc vhodn´e, protoˇze bych jiˇz objevoval objeven´e a zaj´ımal se uˇz o d´avno ˇreˇsen´e a vyˇreˇsen´e probl´emy. Mysl´ım si, ˇze je zbyteˇcn´ı zdrˇzovat se napˇr´ıklad validac´ı vstupn´ıch pol´ı. Proto jsem si zvolil framework Django. Tento framework obsahuje vˇsechny funkce pro psan´ı modern´ı webov´e aplikace podle model˚ u MVC (model - view - controller), DRY (don’t repeat yourself) a dalˇs´ıch.
4.3
Datab´ aze
Framework Django obsahuje dosti propracovan´e API a DB model, takˇze nemus´ıme ˇreˇsit jakou datab´azy pouˇzijeme. Django podporuje PostgreSQL, MySQL, sqlite3 a oracleDB. Pro servrov´e pouˇzt´ı (apache2) je nejvhodnˇejˇs´ı MySQL, protoˇze je dost rychl´a a konfigurace MySQL serveru je velmy jednoduch´a. Naopak pro aplikaci kter´a se bude spouˇstˇet na django serveru je vhodnˇejˇs´ı sqlite3, protoˇze nepotˇrebuje server a nekonfiguruje se.
6
ˇ Ondˇrej Sika
Spr´ava a tisk faktur v LaTeXu
4.4
LaTeX
Propojen´ı aplikace s LaTeXem je zajiˇstˇeno syst´emov´ ymi pˇr´ıkazy, kter´e zajist´ı pˇreloˇzen´ı vygenerovan´eho *.tex dokumentu pdfLaTeXem. Pro spouˇsten´ı syst´emov´ ych pˇr´ıkaz˚ u je v pythonu funkce system v knihovnˇe os.
5
Program´ atorsk´ a dokumentace
5.1
V´ yvojov´ e prostˇ red´ı
Operaˇcn´ı syst´em Distribuce Grafick´e prostˇred´ı Verze kernelu Verze GCC Editor
5.2
Linux Debian 6 Testing i3wm 3.1.0-1-amd64 4.6.2 vim, gedit
Pouˇ zit´ e programy a knihovny
• pdfLatex 3.1415926-1.40.10 pˇrekladaˇc TeX soubor˚ u do PDF • Python 2.7.2+ Jazyk, ve kter´em je napsan´a aplikace • Django 1.3 Python framework pro webov´e aplikace
5.3
Struktura programu
Program splˇ nuje poˇzadavky modelu MVC, takˇze m´a oddˇelˇen´e DB modely, controllery (v naˇsem pˇr´ıpadˇe je to Django) a pohledy. D´ale je oddˇelen´a knihovna pro tvorbu a pˇreklad faktur v *.tex soborech.
5.3.1
Modelov´ a struktura
Aplikace se skl´ad´a z model˚ u pˇreddefinovan´ ych Djangem a vlastn´ımy modely. Jedin´ y model Djanga kter´ y vyuˇz´ıv´am je model User (uˇzivatel´e), kter´ y vyuˇz´ıv´am k pˇrihl´aˇsen´ı do aplikace. D´ale jsem si definoval modely pro datab´azy adres, faktury, poloˇzky faktur, v´ ystupn´ı pdf a ˇsablon faktur.
7
ˇ Ondˇrej Sika
Spr´ava a tisk faktur v LaTeXu
5.3.2
Souborov´ a struktura programu
Koˇrenov´ y adres´aˇr je po rozbalen´ı invoice-generator. Jm´eno tohoto adres´aˇre m˚ uˇzeze zmˇenit, ostatn´ıch nikoliv. V koˇrenov´em adres´aˇri se nach´az´ı: • app/ - zdrojov´e k´ody aplikace • asset/ - z tohoto adres´aˇze se naˇc´ıtaj´ı statick´e soubory do static • db/ - datab´aze sql • media/ - soubory vloˇzen´e za bˇehu programu, viditeln´e z vnˇejˇsku • static/ - statick´e soubory • tmp/ - adres´aˇr, kde prob´ yh´a pˇreklad LaTeXem • var/ - adres´aˇz obsahuj´ıc´ı vygenerovan´e PDF • djago.wsqi - konfiguraˇcn´ı soubor pro mod wsgi apache2
6
Uˇ zivatelsk´ a dokumentace
6.1
Instalace
Tento program pro svoj´ı ˇcinnost potˇrebuje Python2.6 a vyˇsˇs´ı, MySQL 4, Djano 1.3, Apache2, pdfLaTeX s ˇceskou lokalizac´ı a knihovny pro propojen´ı tˇechto prostˇren´ı mod wsgi, python-mysql. Na Debianu a Ubuntu m˚ uˇzeme pouˇz´ıt syst´em repozit´aˇr˚ u a pˇr´ıkazem apt-get install python mysql-server mysql-client python-django python-mysql apache2 libapace2-modwsgi texlive-full Ve windows si mus´ıte vˇsechny ˇc´asti st´ahnout a nainstalovat samostatnˇe. Aplikace je zabalen´a do archivu tar.gz, staˇc´ı tak rozbalit do pˇr´ısluˇsn´eho adres´aˇre.
6.2
Konfigurace
Pokud nechceme pouˇz´ıvat MySQL server tak tento krok vynech´ame. Nejdˇr´ıve je nutn´e, vytvoˇrit datab´azi v MySQL serveru. Tu vytvoˇr´ıme pˇr´ıkazy: user@localhost: mysql -h localhost -u user -p mysql > CREATE DATABASE invoicegenerator; T´ımto jste vytvoˇrily datab´azy a proto mus´ıte zadat pˇr´ıstupov´e u ´daje do datab´aze do souboru config.py ve sloˇzce app. 8
ˇ Ondˇrej Sika
Spr´ava a tisk faktur v LaTeXu
DB DB DB DB DB DB
ENGINE = ”mysql” # ”mysql”or ”sqlite3” NAME = ”invoicegenerator” USER = ”user” PASSWD = ”asdfqwer” HOST = ””# empty for default PORT = ””# empty for default D´ale je nutno nastavit pr´ava pro z´apis do var a tmp pro uˇzivatele www-data.
chown www-data:www-data tmp var -R Nakonec je nutn´e vytvoˇrit datab´azi a uˇzivatele. Ve sloˇzce app spust’te pˇr´ıkaz python manage.py syncdb. Pˇr´ıkazm vytvoˇr´ıte taulky v datab´azi a uˇzivatele. Zept´a se v´as na jm´eno, heslo a email. Email pro chod aplikace nen´ı d˚ uleˇzit´ y, ale mus´ı tam b´ yt dokonce ve form´atu emilu. Pokud nechcete zad´avat vlastn´ı, zadejte napˇr´ıklad
[email protected].
6.2.1
Server Apache2
Budeme konfigurovat lok´aln´ı server na Apache2 a bude pˇredpokl´adat, ˇze na nˇej budeme pˇristupovat z poˇc´ıtaˇce na kter´em bˇeˇz´ı. Nejdˇr´ıve si mus´ıme zvolit ServerName. Do souboru /etc/hosts pˇrid´ame na posledn´ı ˇra´dek 127.0.0.1 invoice-generator (invoice-generator je naˇse zvolen´e server name). Pak si mus´ıme vytvoˇrit konfiguraˇcn´ı soubor pro apache ve sloˇzce /etc/apache2/sitesavailable/invoice-generator. Zde je z´akladn´ı nastaven´ı Apache2. Zde se mus´ı zadat cesty k adres´aˇri a aplikac´ı. PATH TO PROJECT je cesta ke koˇrenov´emu adres´aˇri aplikace. Napˇr´ıklad /opt/invoice-generator.
ServerName invoice-generator WSGIScriptAlias / PATH TO PROJECT/django.wsgi Alias /media/ PATH TO PROJECT/media/ Alias /static/ PATH TO PROJECT/static/ Order deny,allow Allow from all 9
ˇ Ondˇrej Sika
Spr´ava a tisk faktur v LaTeXu
Order deny,allow Allow from all Mus´ıte vytvoˇrit symbolick´ y odkaz na konfiguraˇcn´ı soubor, aby Apache vˇedˇel, ˇze ho m´a naˇc´ıtat. To provedete pˇr´ıkazem ln -s /etc/apache2/sites-available/invoice-generator /etc/init.d/apache2/sites-enabled/. Ted’ staˇc´ı jen restartovat server Apache2 pˇr´ıkazem /etc/init.d/apache2 restart a aplikace bˇeˇz´ı. Pˇripoj´ıte se k n´ı v prohl´ıˇzeci adresou http://invoice-generator.
6.2.2
Django server
Pokud k Aplikaci nechcete pˇristupovat po s´ıti, staˇc´ı v´am pouˇzit´ı na jednom poˇc´ıtaˇci staˇc´ı pouˇz´ıt server, kter´ y je obsaˇzen pˇr´ımo v Djangu. Nen´ı tak v´ ykonn´ y jako Apache2 mod WSGI, ale pro jednoho uˇzivatele bohatˇe staˇc´ı. Server se spouˇst´ı z adres´aˇre app pˇr´ıkazem python manage.py runserver. Server se spust´ı na adrese http://localhost:8000 pokud chcete jinou ip nebo port spouˇstˇejte python manage.py runserver 192.168.1.10:80. K aplikaci pˇristupujeme pˇres webov´ y prohl´ıˇzeˇc.
6.3
Pouˇ z´ıv´ an´ı
Pouˇz´ıv´an´ı t´eto aplikace je velmi intujitivn´ı. Po grafick´e str´ance je aplikace velmi stroh´a. Hlavn´ı v´ yhodou je jednoduchost, kterou tato aplikace splˇ nuje.
10
ˇ Ondˇrej Sika
Spr´ava a tisk faktur v LaTeXu
7
Z´ avˇ er
Pr´ace a vytvoˇren´ y program splˇ nuje poˇzadavky zad´an´ı. Program je sice optimalizov´an pro bˇeh na linuxov´ ych stroj´ıch, kde v 90% ˇcasu pobˇeˇz´ı (serverov´e pouˇzit´ı), ale byl testov´an pˇri spouˇstˇen´ı na django serveru na PC s Windows. Vzhled faktur je flexibiln´ı a snadno modifikovateln´ y pouˇzit´ım jin´e ˇsablony. Zat´ım program obsahuje pouze jednu ˇsablonu. V budoucnu bude moˇznost v´ ybˇeru z nˇekolika pˇreddefinovan´ ych ˇsablon. Napˇr´ıklad ˇsablona s doplnˇen´ım loga ˇzivnostn´ıka. Na nˇekter´e d´ılˇc´ı ˇca´sti se nedostalo, z d˚ uvodu velk´eho rozsahu zpracov´avan´e problematiky a nutnosti z´ıskat znalosti s pouˇzit´ım LaTeX, Python, Django. D´avkov´e zpracov´an´ı v souˇcasn´e dobˇe realizov´ano nen´ı, ale je s n´ım do budoucna poˇc´ıt´ano a program je pro jeho realizaci navrˇzen. Uplatnitelnost tohoto programu je velice dobr´a. Program je open source a uˇzivatel˚ um umoˇzn ˇuje, aby mˇeli nejen moˇznost program pouˇz´ıvat, ale i jej upravit pˇresnˇe pro sv´e podm´ınky. Tento syst´em generov´an´ı faktur jiˇz v praxi pouˇz´ıv´a internetov´ y obchod WigiShop.cz.
8
Literatura
8.1
Pouˇ zit´ a literatura
• Tobias Oetiker : Nepˇr´ıliˇs struˇcn´ yu ´vod do syst´emu LaTeX2E ˇ • Michal Svamberg: Seri´al jak na LaTeX, http://www.root.cz/serialy/jak-na-latex ´ • Uvod do Tkinter: http://tkinter.programujte.cz • Drsn´ yu ´vod do latexu, http://apfyz.upol.cz/ucebnice/down/mini/drslat.pdf
8.2
Diskuzn´ı f´ ora
• http://ubuntuforums.org • http://forum.ubuntu.cz • http://forum.root.cz
11