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.

