Maktura to nareszcie wygodne wystawianie faktur na Twoim Maku!
Pobierz Wersja 1.3
Kup online Cena 199 PLN netto

Asystent szablonów

Razem z wersją 1.1 Maktury udostępniliśmy nowe narzędzie - Asystenta Szablonów. Jego zadaniem jest pomoc w tworzeniu własnych szablonów dla wystawianych faktur i rachunków. Do stworzenia własnego szablonu od zera wymagana jest wiedza z zakresu CSS, HTML i rozumienie zasad pisania programów. Modyfikacja istniejącego szablonu powinna natomiast być możliwa dla każdej osoby obdarzonej zdolnością logicznego myślenia.

Jak wygląda praca z Asystentem Szablonów?

W tym krótkim filmiku Zbigniew opowiada o tym jak korzystać z asystenta, aby zbudować własny szablon:

Anatomia szablonu

Wyobraźmy sobie, że oglądamy dokument z Maktury z dużej odległości. O ile wszystko jest OK z naszym wzrokiem, to nie dostrzegamy szczegółów, lecz widzimy plamy, w które się one zlewają. To co widzimy to 'architektura dokumentu', czyli układ poszczególnych informacji. Może on wyglądać np. tak:
Tworząc własny szablon dokumentu, możemy zastosować podobne podejście od ogółu do szczegółu. Po zaplanowaniu, jakie informacje będą wyświetlane w poszczególnych częściach strony, czas na wytłumaczenie Makturze, gdzie ma wstawić NIP sprzedawcy, a gdzie podpis odbierającego dokument. Służą do tego specjalne nazwy (tzw. zmienne), które przy generowaniu dokumentu zostaną zastąpione wartościami, tworząc gotową fakturę VAT, rachunek itd.

Język skryptowy

Przystępując do projektowania własnego szablonu, niezbędna jest wiedza zarówno z zakresu HTML+CSS, jak i odrobina znajomości programowania dla WWW. Zastanawiasz się, czy podołasz? Spójrz na kawałek kodu poniżej. Jeżeli dostajesz palpitacji serca, być może stworzenie własnego szablony przekracza Twoje aktualne umiejętności... Jeżeli domyślasz się, co i jak, prawdopodobnie własny szablon do Maktury masz w zasięgu klawiatury.
	  1. Tak wypisujemy wartość zmiennej o nazwie documentID: {{ documentID }}

	  2. Tak realizujemy instrukcję warunkową:
	  {{ if greenTemplate }}
	     aha, więc szablon ma być oszczędny
	  {{ else }}
	     nie oszczędzamy sił i środków, aby zaprezentować nasz dokument w pełnej krasie
	  {{ endif }}

	  3. Tak przechodzimy po danych w tablicy
	  {{ foreach item items }}
	    tu item zawiera aktualne dane z tablicy
	  {{ endforeach }}
	

Szczegóły języka

Język skryptowy na którym oparty jest silnik renderujący dokumenty w Makturze, korzysta z biblioteki MiscMerge. Szczegółowe informacje dotyczące meandrów MiscMerge'a można znaleźć w oryginalnej dokumentacji. Tu skupimy się tylko na kilku wybranych, ale wystarczających do zbudowania własnego szablonu, funkcjach.

Blok kodu

Jeżeli nie jest Ci obce PHP, JSP, ERB czy cokolwiek innego co działa po stronie serwera WWW, znasz też zapewne koncepcję odróżniania fragmentu kodu od treści szablonów. W przypadku Maktury jako kod traktowane jest wszytko pomiedzy podwójnymi nawiasami klamrowymi - {{ i }}. Jednocześnie nie ma rozróżnienia między blokiem kodu a wypisaniem zawartości do szablonów.

Instrukcja warunkowa

Jak widać w punkcie numer 2 w przykładzie powyżej, instrukcja warunkowa wygląda następująco
	  {{ if warunek }}
	    ...
	  {{ else }}
	    ...
	  {{ endif }}
	

Pętla przeglądająca zawartość tablicy

Jeżeli informacje przekazywane do szablony są zawarte w tablicy, a my tworząc szablon potrzebujemy dobrać się do poszczególnych elementów w niej zawartych, robimy to za pomocą konstrukcji:
	  {{ foreach zmienna_lokalna_dla_pętli zmienna_reprezentująca_tablicę }}
	    ... operujemy na zmiennej lokalnej używając jej do wyświetlenia szczegółów
	  {{ endforeach }}
	

Obiekty i ich atrybuty

Niektóre dane przekazywane do szablonu mają bardziej złożoną naturę niż prosta liczba czy ciąg znaków - są obiektem. Dla potrzeb tworzenia szablonów wystarczy zapamiętać, że obiekt to taki zbiornik zawierający dane - atrybuty. Do atrybutów sięgamy, posługując się nazwą obiektu, a po kropce nazwą atrybutu.
Przykładowo, jako obiekt są przekazywane dane nabywcy, obiekt jest dostępny w szablonie pod zmienną purchaser, ale nip nabywcy to już atrybut. Aby się do niego dostać posługujemy się kombinacją purchaser.nip. Podobnie postępujemy, gdy interesuje nas np. adres wystawiającego: seller.address czy wartość netto pozycji na fakturze: item.netPrice.

Zmienne szablonów

Każda faktura zawiera całkiem pokaźną liczbę informacji, a co za tym idzie liczba zmiennych z którymi mamy do czynienia projektując szablon jest całkiem spora. Aby ułatwić odnalezienie tego co potrzebne, podzielmy zmienne na grupy.

Parametry dokumentu

documentID
Kolejny numer dokumentu.
documentVersion
Oznaczenie, czy to oryginał (2) czy kopia (1).
documentVersionLabel
Tekst 'ORYGINAŁ' albo 'KOPIA'.
documentKindCode
Tekst reprezentujący rodzaj dokumentu. W zależności od dokumentu przyjmuje wartości: documentKindRegularVatInvoice, documentKindProFormaInvoice, documentKindCorrectiveInvoice, documentKindBill.
draftDocument
Flaga sygnalizująca, że mamy do czynienia z dokumentem w edycji.
greenTemplate
Flaga sygnalizująca, ze szablon powinien postarać się odchudzić chroniąc w ten sposób toner i środowisko.

Informacje o dokumencie

formattedDocumentKind
Rodzaj dokumentu jako nazwa, np.: 'Faktura vat'
sellDate
Data sprzedaży
issueDate
Data wystawienia dokumentu
issuedIn
Miejsce wystawienia dokumentu
dueDate
Termin płatności
paymentType
Tekst oznaczający sposób płatności, np.: 'przelew'

Zmiene dotyczące tylko duplikatów dokumentów

duplicateDocument
Flaga oznaczająca, że mamy do czynienia z duplikatem
duplicateIssueDate
Data wystawienia duplikatu

Zmienne dotyczące tylko faktury korygującej

originalDocumentID
Numer oryginalnego (korygowanego) dokumentu.
originalIssueDate
Data wystawienia dokumentu korygowanego.
originalSellDate
Data sprzedaży z dokumentu korygowanego.

Dane sprzedawcy

seller.name
Nazwa sprzedawcy.
seller.nip
Numer NIP sprzedawcy.
seller.address
Adres sprzedawcy.
seller.contactData
Dane kontaktowe sprzedawcy.
seller.bankAccountNumber
Numer konta bankowego sprzedawcy.
seller.bankName
Nazwa banku.
seller.signature
Imię i nazwisko osoby wystawiającej fakturę.
seller.logoPath
Ścieżka do pliku z grafiką wyświetlaną jako logo sprzedawcy.
seller.facsimilePath
Ścieżka do pliku z grafiką wyświetlaną jako faksymile podpisu sprzedawcy.
displaySellerLogo
Flaga oznaczająca, czy logo ma być wyświetlane.
displaySellerFacsimile
Flaga oznaczająca, czy podpis ma być wyświetlany.

Dane nabywcy

purchaser.name
Nazwa nabywcy.
purchaser.nip
Numer NIP nabywcy.
purchaser.address
Adres nabywcy.
purchaser.contactData
Dane kontaktowe nabywcy.
purchaser.recipient
Imię i nazwisko osoby upoważnionej do odbioru dokumentów.

Towary i usługi

Ponieważ na fakturze może występować więcej niż jedna pozycja, dane o poszczególnych pozycjach z faktury są zebrane w tablicy dostępnej w zmiennej items. Korzystanie z tej tablicy polega na przeglądaniu jej zawartości za pomocą następującej pętli (TODO:link do infosków o pętli).
	  {{ foreach item items }}
	    ... kod wykorzystujący zmienną item (szczegóły poniżej)
	  {{ endforeach }}
	
Zmienna item zawiera wówczas obiekt z danymi aktualnej pozycji do wyświetlenia w dokumencie, dostęp do poszczególnych parametrów towaru czy usługi wygląda wówczas następująco:
displayPkwiu
Flaga oznaczająca czy kolumna PKWiU jest widoczna. Ta zmienna wyjątkowo może być użyta poza pętlą.
item.name
Nazwa produktu usługi
item.pkwiu
Symbol PKWiU
item.quantity
Liczba jednostek
item.unitName
Nazwa jednostki
item.netPrice
Cena netto
item.grossPrice
Cena brutto
item.vatRate
Stawka podatku VAT
item.netValue
Wartość netto
item.vatValue
Kwota podatku VAT
item.grossValue
Wartość brutto
item.hasCorrectedName
Flaga dla pozycji na fakturze korygującej. Oznacza, że zmieniła się nazwa produktu.
item.isCorrectedItem
Flaga dla pozycji na fakturze korygującej. Oznacza wiersz 'BYŁO' (pierwszy z trójki 'BYŁO', 'WINNO BYĆ', 'RÓŻNICA')
item.subPositionDescription
Napis dla pozycji na fakturze korygującej: 'BYŁO', 'WINNO BYĆ', 'RÓŻNICA'

Podsumowanie kwot

totalNetValue
Suma kwot netto.
totalVatValue
Suma kwot podatku VAT.
totalGrossValue
Suma kwot brutto.
totalGrossValueSpelledOut
Suma kwot brutto słownie.

Zmienne dotyczące tylko faktury korygującej

originalTotalNetValue
Suma kwot netto z korygowanego dokumentu
originalTotalVatValue
Suma kwot podatku VAT z korygowanego dokumentu
originalTotalGrossValue
Suma kwot brutto z korygowanego dokumentu
netCorrectiveDifference
Wartość korekty netto.
vatCorrectiveDifference
Wartość korekty kwoty podatku VAT.
grossCorrectiveDifference
Wartość korekty brutto.
grossCorrectiveDifferenceSpelledOut
Wartość korekty brutto słownie.

Podsumowanie stawek VAT

Podsumowanie stawek VAT, podobnie jak lista pozycji na fakturze, może zawierać więcej niż jedną wartość. Musi być ich tyle, ile stawek występuję w dokumencie. Zmienna vatSummaries to tablica danych (które są obiektami) o poszczególnych stawkach występujących w dokumencie. Wydruk wszystkich informacji o stawkach może więc odbyć się za pomocą następującej pętli:
	  {{ foreach vat vatSummaries }}
	    ... a tu kod wykorzystujący zmienną vat (szczegóły poniżej)
	  {{ endforeach }}
	
vat.isFirstItem
Flaga oznaczająca, że to pierwszy element w tablicy. Dla pierwszego elementu jest równa 1, dla reszty 0
vat.rate
Stawka podatku VAT.
vat.netValue
Wartość netto.
vat.vatValue
Wartość podatku.
vat.grossValue
Wartość brutto.

Uwagi

remarks
Uwagi do dokumentu.
issueReason
Tylko dla faktury korygującej - przyczyna wystawienia korekty.