diff --git a/lib/invoice/db/invoices.py b/lib/invoice/db/invoices.py index d27b87c..64cd8d6 100644 --- a/lib/invoice/db/invoices.py +++ b/lib/invoice/db/invoices.py @@ -19,6 +19,7 @@ class Invoices(List): Delivered -- Date when the services were delivered in YYYY-MM-DD format Note -- a note at the and of the invoice Advance -- amount of money already paid + Translate -- whether to use english translations for various text blocks """ data_template = """\ Item:Description|Amount|Unit|Rate @@ -27,6 +28,7 @@ Delivered: Due: Advance: 0 """ +Translate: 0 _directory = "income" _regex = re.compile("^(?P[0-9]{8})-(?P[0-9]{3})-(?P[a-z0-9-]+)$") _template = "{date}-{number:03}-{company_name}" @@ -66,8 +68,8 @@ class Invoice(Item): self._selector["number"] = int(self.number) class InvoiceData(Data): - _fields = ["issued", "due", "delivered", "paid", "payment", "advance"] - _multivalue_fields = ["item", "address", "note"] + _fields = ["issued", "due", "delivered", "paid", "payment", "advance", "translate"] + _multivalue_fields = ["itemheading", "item", "address", "note"] _date_regex = re.compile(r"^(\d{4})-?(\d{2})-?(\d{2})$") _item_regex = re.compile(r"^([^|]*)\|(-?\d+)\|([^|]*)\|(-?\d+)$") _number_template = "{year}{number:03}" @@ -107,6 +109,8 @@ class InvoiceData(Data): self._data["advance"] = m_advance self._data["topay"] = m_sum - m_advance + self._data["translate"] = bool(int(self.translate)) + def _postprocess_dates(self): if self.issued: try: diff --git a/templates/invoice.tex b/templates/invoice.tex index 1f2f920..313f37c 100644 --- a/templates/invoice.tex +++ b/templates/invoice.tex @@ -10,6 +10,78 @@ \renewcommand{\familydefault}{\sfdefault} \setlength{\extrarowheight}{3pt} +{{if invoice.translate}} +\newcommand\translation[1]{/\textit#1} +{{else}} +\newcommand\translation[1]{} +{{endif}} +\newcommand\translatable[2]{#1\translation#2} +\newcommand\translatablebf[2]{\textbf{#1}\translation#2} + +\def\InvoiceSK{Faktúra} +\def\InvoiceEN{Invoice} +\def\ClientSK{Odberateľ} +\def\ClientEN{Client} +\def\SupplierSK{Dodávateľ} +\def\SupplierEN{Supplier} +\def\PaymentTermsSK{Platobné podmienky} +\def\PaymentTermsEN{Terms of payment} +\def\PaymentMethodSK{Forma úhrady} +\def\PaymentMethodEN{Payment method} +\def\PaymentMethodCashSK{v~hotovosti} +\def\PaymentMethodCashEN{cash} +\def\PaymentMethodBankTransferSK{prevodom} +\def\PaymentMethodBankTransferEN{bank transfer} +\def\IssueDateSK{Dátum vystavenia} +\def\IssueDateEN{Issue date} +\def\DeliveryDateSK{Dátum dodania} +\def\DeliveryDateEN{Delivery date} +\def\DueDateSK{Dátum splatnosti} +\def\DueDateEN{Due date} +\def\VariableSymbolSK{Variabilný symbol} +\def\VariableSymbolEN{Variable symbol} +\def\NotesSK{Poznámky} +\def\NotesEN{Notes} +\def\SubjectSK{Popis položky} +\def\SubjectEN{Subject} +\def\AmountSK{Množstvo} +\def\AmountEN{Amount} +\def\UnitSK{MJ} +\def\UnitEN{Unit} +\def\UnitPriceSK{Cena za MJ} +\def\UnitPriceEN{Unit price} +\def\TotalPriceSK{Celková cena} +\def\TotalPriceEN{Total price} +\def\TotalAmountSK{Celková suma} +\def\TotalAmountEN{Total amount} +\def\IssuedBySK{Vystavil} +\def\IssuedByEN{Issued by} +\def\AdvancesPaidSK{Udradené zálohami} +\def\AdvancesPaidEN{Advances paid} +\def\TotalDueSK{K~úhrade} +\def\TotalDueEN{Total due} +\def\Invoice{\translatablebf\InvoiceSK\InvoiceEN} +\def\Supplier{\translatablebf\SupplierSK\SupplierEN} +\def\Client{\translatablebf\ClientSK\ClientEN} +\def\PaymentTerms{\translatablebf\PaymentTermsSK\PaymentTermsEN} +\def\PaymentMethod{\translatable\PaymentMethodSK\PaymentMethodEN} +\def\PaymentMethodCash{\translatable\PaymentMethodCashSK\PaymentMethodCashEN} +\def\PaymentMethodBankTransfer{\translatable\PaymentMethodBankTransferSK\PaymentMethodBankTransferEN} +\def\IssueDate{\translatable\IssueDateSK\IssueDateEN} +\def\DeliveryDate{\translatable\DeliveryDateSK\DeliveryDateEN} +\def\DueDate{\translatablebf\DueDateSK\DueDateEN} +\def\VariableSymbol{\translatable\VariableSymbolSK\VariableSymbolEN} +\def\Notes{\translatablebf\NotesSK\NotesEN} +\def\Subject{\translatablebf\SubjectSK\SubjectEN} +\def\Amount{\translatablebf\AmountSK\AmountEN} +\def\Unit{\translatablebf\UnitSK\UnitEN} +\def\UnitPrice{\translatablebf\UnitPriceSK\UnitPriceEN} +\def\TotalPrice{\translatablebf\TotalPriceSK\TotalPriceEN} +\def\TotalAmount{\translatable\TotalAmountSK\TotalAmountEN} +\def\IssuedBy{\translatable\IssuedBySK\IssuedByEN} +\def\AdvancesPaid{\translatable\AdvancesPaidSK\AdvancesPaidEN} +\def\TotalDue{\translatable\TotalDueSK\TotalDueEN} + \begin{document} \footnotesize @@ -18,14 +90,17 @@ \begin{center} \begin{tabularx}{\textwidth}{XXXX} +% INVOICE HEADING &&& \\ -\multicolumn{4}{l}{\bf \large Faktúra: \hfill {{invoice.number}}} \\ +\multicolumn{4}{l}{\large\Invoice: \hfill {{invoice.number}}} \\ &&& \\ \hline \multicolumn{2}{X|}{} & \multicolumn{2}{X}{} \\ -\multicolumn{2}{l|}{\bf Dodávateľ:} & \multicolumn{2}{X}{\bf Odberateľ} \\ +\multicolumn{2}{l|}{\Supplier:} & \multicolumn{2}{X}{\Client:} \\ \multicolumn{2}{X|}{} & \multicolumn{2}{X}{} \\ -\multicolumn{2}{l|}{\large\bf {{issuer.name}}} & \multicolumn{2}{l}{\large\bf {{customer.name}}} \\ +% ISSUER & CUSTOMER +\multicolumn{2}{l|}{\large\bf {{issuer.name}}} & + \multicolumn{2}{l}{\large\bf {{customer.name}}} \\ {{py: a1 = issuer.address[:] a2 = customer.address[:] @@ -55,7 +130,7 @@ a2 += (len(a1)-len(a2))*[""] \multicolumn{2}{X|}{} & \multicolumn{2}{X}{} \\ -% Comments +% COMMENTS {{py: a1 = issuer.comments[:] a2 = customer.comments[:] @@ -67,16 +142,21 @@ a2 += (len(a1)-len(a2))*[""] {{endfor}} \multicolumn{2}{X|}{} & \multicolumn{2}{X}{} \\ -\multicolumn{2}{l|}{\bf Platobné podmienky:} & & \\ -Forma úhrady: & \multicolumn{1}{l|}{ {{"v~hotovosti" if invoice.payment=="cash" else "prevodom"}}} & & \\ -IBAN: & \multicolumn{1}{l|}{ {{issuer.iban}}} & Dátum vystavenia: & \multicolumn{1}{r}{ {{invoice.issued.strftime("%d.%m.%Y")}}} \\ -SWIFT/BIC: & \multicolumn{1}{l|}{ {{issuer.swift}} } & \multicolumn{2}{l}{Dátum dodania: \hfill {{invoice.delivered.strftime("%d.%m.%Y")}}} \\ -Variabilný symbol: & \multicolumn{1}{l|}{ {{invoice.number}}} & \multicolumn{2}{l}{\large\bf Dátum splatnosti: \hfill {{invoice.due.strftime("%d.%m.%Y")}}} \\ +\multicolumn{2}{l|}{\PaymentTerms:} & & \\ +\PaymentMethod: & \multicolumn{1}{l|}{ + {{if invoice.payment == "cash"}} + \PaymentMethodCash + {{else}} + \PaymentMethodBankTransfer + {{endif}} } & & \\ +IBAN: & \multicolumn{1}{l|}{ {{issuer.iban}} } & \IssueDate: & \multicolumn{1}{r}{ {{invoice.issued.strftime("%d.%m.%Y")}}} \\ +SWIFT/BIC: & \multicolumn{1}{l|}{ {{issuer.swift}} } & \multicolumn{2}{l}{\DeliveryDate: \hfill {{invoice.delivered.strftime("%d.%m.%Y")}}} \\ +\VariableSymbol: & \multicolumn{1}{l|}{ {{invoice.number}}} & \multicolumn{2}{l}{\large\DueDate: \hfill {{invoice.due.strftime("%d.%m.%Y")}}} \\ % COMMENTS {{if invoice.notes}} \multicolumn{2}{X|}{} & \multicolumn{2}{X}{} \\ \hline & & & \\ -\bf Poznámky: & & & \\[1em] +\Notes: & & & \\[1em] {{for note in invoice.notes}} \multicolumn{4}{l}{\large {{note}}} \\ {{endfor}} @@ -84,50 +164,47 @@ Variabilný symbol: & \multicolumn{1}{l|}{ {{invoice.number}}} & \multicolumn{2} \multicolumn{2}{X|}{} & \multicolumn{2}{X}{} \\ \hline -& & & \\ +&&& \\ -\multicolumn{4}{l}{\bf Faktúrujeme Vám za služby podľa Rámcovej zmluvy} \\ +% ITEM(s) HEADING +{{for heading in invoice.itemheading}} +\multicolumn{4}{l}{ {{heading}} } \\ +{{endfor}} -& & & \\ +&&& \\ % ITEMS \multicolumn{4}{X}{% \hspace*{-1.35\tabcolsep} - \begin{tabu} to \textwidth {% - >{\hsize=2.5\hsize}X[l]% - >{\hsize=0.5\hsize}X[r]% - >{\hsize=0.5\hsize}X[r]% - >{\hsize=0.5\hsize}X[r]% - >{\hsize=0.5\hsize}X[r]} - \normalsize \bf Popis položky & \bf Množstvo & \bf MJ & \bf Cena za MJ & \bf Celková cena \\ + \begin{tabu} to \textwidth {X[5,l]X[1.5,r]X[1,r]X[1.8,r]X[2.0,r]} + %>{\hsize=2.5\hsize}X[l]% + %>{\hsize=0.5\hsize}X[r]% + %>{\hsize=0.5\hsize}X[r]% + %>{\hsize=1.0\hsize}X[r]% + %>{\hsize=1.0\hsize}X[r]} + \Subject & \Amount & \Unit & \UnitPrice & \TotalPrice \\ {{for item in invoice.items}} - {{item[0]}} & {{item[1]}} & {{item[2]}} & {{eur(item[3])}} & {{eur(item[1] * item[3])}} \\ + {{item[0]}} & {{decimal(item[1])}} & {{item[2]}} & {{eur(item[3])}} & {{eur(item[1] * item[3])}} \\ {{endfor}} \end{tabu} } \\ -%& & & \\ -%\hline -%& & & \\ -%\multicolumn{3}{l}{\large\bf Celkom k úhrade:} & \multicolumn{1}{r}{\large\bf {{eur(invoice.sum)}} } \\ -& & & \\ +&&& \\ \hline \multicolumn{4}{r}{} \\ -%\multicolumn{4}{r}{\includegraphics[scale=1]{../signature.jpg}\hspace{.4cm} } \\ \end{tabularx} \end{center} \vfill -% Footer +% FOOTER \centering -\begin{tabu} to \textwidth {XX|XX|X|X[r]} -\hline - Vyhotovil: Peter Hatina && Prevzal: && Celková suma: & {{eur(invoice.sum)}} \\ \cline{5-6} - \multirow{2}{*}{\hspace*{1.0cm}\includegraphics[scale=0.3]{../signature.jpg} } && && Uhradené zálohami: & {{eur(invoice.advance)}} \\ \cline{5-6} - && && Zostáva uhradiť: & {{eur(invoice.topay)}} \\ \cline{5-6} - && && & \\ - && && \multirow{-2}{*}{K úhrade:} & \multirow{-2}{*}{ \bf \large {{eur(invoice.topay)}}\phantom} \\ +\begin{tabu} to \textwidth {X[1]|X[0.5,l]|X[0.25,r] } + \hline + \IssuedBy: \quad {{issuer.name}} & \TotalAmount: & {{eur(invoice.sum)}} \\ \cline{2-3} + \multirow{2}{*}{\hspace*{2.7cm}\includegraphics[scale=0.2]{../signature.jpg} } & \AdvancesPaid: & {{eur(invoice.advance)}} \\ \cline{2-3} + && \\ + & \multirow{-2}{*}{\TotalDue:} & \multirow{-2}{*}{ \bf \large {{eur(invoice.topay)}}\phantom} \\ \end{tabu} \end{document}