Bernd Wurst commited on 2024-02-14 13:08:33
Zeige 5 geänderte Dateien mit 38 Einfügungen und 72 Löschungen.
... | ... |
@@ -1,20 +1,4 @@ |
1 | 1 |
# -* coding: utf8 *- |
2 |
-# (C) 2011 by Bernd Wurst <bernd@schokokeks.org> |
|
3 |
- |
|
4 |
-# This file is part of Bib2011. |
|
5 |
-# |
|
6 |
-# Bib2011 is free software: you can redistribute it and/or modify |
|
7 |
-# it under the terms of the GNU General Public License as published by |
|
8 |
-# the Free Software Foundation, either version 3 of the License, or |
|
9 |
-# (at your option) any later version. |
|
10 |
-# |
|
11 |
-# Bib2011 is distributed in the hope that it will be useful, |
|
12 |
-# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
-# GNU General Public License for more details. |
|
15 |
-# |
|
16 |
-# You should have received a copy of the GNU General Public License |
|
17 |
-# along with Bib2011. If not, see <http://www.gnu.org/licenses/>. |
|
18 | 2 |
|
19 | 3 |
import datetime |
20 | 4 |
|
... | ... |
@@ -1,43 +1,15 @@ |
1 | 1 |
# -*- coding: utf-8 -*- |
2 |
-# (C) 2011 by Bernd Wurst <bernd@schokokeks.org> |
|
3 |
- |
|
4 |
-# This file is part of Bib2011. |
|
5 |
-# |
|
6 |
-# Bib2011 is free software: you can redistribute it and/or modify |
|
7 |
-# it under the terms of the GNU General Public License as published by |
|
8 |
-# the Free Software Foundation, either version 3 of the License, or |
|
9 |
-# (at your option) any later version. |
|
10 |
-# |
|
11 |
-# Bib2011 is distributed in the hope that it will be useful, |
|
12 |
-# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
-# GNU General Public License for more details. |
|
15 |
-# |
|
16 |
-# You should have received a copy of the GNU General Public License |
|
17 |
-# along with Bib2011. If not, see <http://www.gnu.org/licenses/>. |
|
18 | 2 |
|
19 | 3 |
import os.path |
20 |
-import re |
|
21 | 4 |
|
22 | 5 |
from reportlab.lib.pagesizes import A4 |
23 |
-# reportlab imports |
|
24 | 6 |
from reportlab.lib.units import cm, inch |
25 | 7 |
from reportlab.pdfbase import pdfmetrics |
26 | 8 |
from reportlab.pdfbase.ttfonts import TTFont, TTFError |
27 | 9 |
from reportlab.pdfgen import canvas |
28 | 10 |
|
29 | 11 |
from .InvoiceObjects import InvoiceTable, InvoiceText, InvoiceImage, GUTSCHRIFT |
30 |
- |
|
31 |
- |
|
32 |
-def _formatPrice(price, symbol='€'): |
|
33 |
- '''_formatPrice(price, symbol='€'): |
|
34 |
- Gets a floating point value and returns a formatted price, suffixed by 'symbol'. ''' |
|
35 |
- s = ("%.2f" % price).replace('.', ',') |
|
36 |
- pat = re.compile(r'([0-9])([0-9]{3}[.,])') |
|
37 |
- while pat.search(s): |
|
38 |
- s = pat.sub(r'\1.\2', s) |
|
39 |
- return s + ' ' + symbol |
|
40 |
- |
|
12 |
+from . import _formatPrice |
|
41 | 13 |
|
42 | 14 |
def find_font_file(filename): |
43 | 15 |
for n in range(4): |
... | ... |
@@ -2,7 +2,7 @@ |
2 | 2 |
|
3 | 3 |
from __future__ import division |
4 | 4 |
|
5 |
-from utils import format_price, split_to_width |
|
5 |
+from . import _formatPrice, split_to_width |
|
6 | 6 |
from .InvoiceObjects import Invoice, InvoiceTable, InvoiceText, InvoiceImage, PAYMENT_UEBERWEISUNG |
7 | 7 |
|
8 | 8 |
|
... | ... |
@@ -85,14 +85,14 @@ def InvoiceTableToText(invoiceTable: InvoiceTable): |
85 | 85 |
if len(invoiceTable.vat) < 2: |
86 | 86 |
subject = _breakLine(el['subject'], width=39) |
87 | 87 |
ret.append(u'%5.2f %-3s %-39s %10s %10s' % ( |
88 |
- el['count'], unit, subject[0], format_price(el['price']), format_price(el['total']))) |
|
88 |
+ el['count'], unit, subject[0], _formatPrice(el['price']), _formatPrice(el['total']))) |
|
89 | 89 |
for i in range(1, len(subject)): |
90 | 90 |
ret.append(u' %s' % subject[i]) |
91 | 91 |
else: |
92 | 92 |
subject = _breakLine(el['subject'], width=41) |
93 | 93 |
ret.append(u'%5.2f %-3s %-37s %10s %s %10s' % ( |
94 |
- el['count'], unit, subject[0], format_price(el['price']), invoiceTable.vat[el['vat']][1], |
|
95 |
- format_price(el['total']))) |
|
94 |
+ el['count'], unit, subject[0], _formatPrice(el['price']), invoiceTable.vat[el['vat']][1], |
|
95 |
+ _formatPrice(el['total']))) |
|
96 | 96 |
for i in range(1, len(subject)): |
97 | 97 |
ret.append(u' %s' % subject[i]) |
98 | 98 |
if 'period_start' in el and el['period_start']: |
... | ... |
@@ -111,30 +111,30 @@ def InvoiceTableToText(invoiceTable: InvoiceTable): |
111 | 111 |
ret.append(u' %s' % line) |
112 | 112 |
ret.append('-' * 72) |
113 | 113 |
if invoiceTable.vatType == 'gross': |
114 |
- ret.append((u'Rechnungsbetrag: %11s' % format_price(invoiceTable.sum)).rjust(72)) |
|
114 |
+ ret.append((u'Rechnungsbetrag: %11s' % _formatPrice(invoiceTable.sum)).rjust(72)) |
|
115 | 115 |
ret.append('') |
116 | 116 |
summaries = [] |
117 | 117 |
if len(invoiceTable.vat) == 1: |
118 | 118 |
vat = list(invoiceTable.vat.keys())[0] |
119 | 119 |
summaries.append(u' Im Rechnungsbetrag sind %.1f%% MwSt enthalten (%s)' % ( |
120 |
- vat * 100, format_price((invoiceTable.sum / (vat + 1)) * vat))) |
|
120 |
+ vat * 100, _formatPrice((invoiceTable.sum / (vat + 1)) * vat))) |
|
121 | 121 |
else: |
122 | 122 |
for vat, vatdata in list(invoiceTable.vat.items()): |
123 | 123 |
summaries.append(u' %s: Im Teilbetrag von %s sind %.1f%% MwSt enthalten (%s)' % ( |
124 |
- vatdata[1], format_price(vatdata[0]), vat * 100, format_price((vatdata[0] / (vat + 1)) * vat))) |
|
124 |
+ vatdata[1], _formatPrice(vatdata[0]), vat * 100, _formatPrice((vatdata[0] / (vat + 1)) * vat))) |
|
125 | 125 |
summaries.sort() |
126 | 126 |
for line in summaries: |
127 | 127 |
ret.append(line) |
128 | 128 |
else: |
129 |
- ret.append((u'Nettobetrag: %11s' % format_price(invoiceTable.sum)).rjust(72)) |
|
129 |
+ ret.append((u'Nettobetrag: %11s' % _formatPrice(invoiceTable.sum)).rjust(72)) |
|
130 | 130 |
summaries = [] |
131 | 131 |
if len(invoiceTable.vat) == 1: |
132 | 132 |
vat = list(invoiceTable.vat.keys())[0] |
133 |
- summaries.append((u'zzgl. %.1f%% MwSt: %11s' % (vat * 100, format_price(vat * invoiceTable.sum))).rjust(72)) |
|
133 |
+ summaries.append((u'zzgl. %.1f%% MwSt: %11s' % (vat * 100, _formatPrice(vat * invoiceTable.sum))).rjust(72)) |
|
134 | 134 |
elif len(invoiceTable.vat) > 1: |
135 | 135 |
for vat, vatdata in list(invoiceTable.vat.items()): |
136 | 136 |
summaries.append( |
137 |
- (u'zzgl. %4.1f%% MwSt (%s): %11s' % (vat * 100, vatdata[1], format_price(vat * vatdata[0]))).rjust( |
|
137 |
+ (u'zzgl. %4.1f%% MwSt (%s): %11s' % (vat * 100, vatdata[1], _formatPrice(vat * vatdata[0]))).rjust( |
|
138 | 138 |
72)) |
139 | 139 |
summaries.sort() |
140 | 140 |
for line in summaries: |
... | ... |
@@ -142,7 +142,7 @@ def InvoiceTableToText(invoiceTable: InvoiceTable): |
142 | 142 |
tablesum = invoiceTable.sum |
143 | 143 |
for vat, vatdata in list(invoiceTable.vat.items()): |
144 | 144 |
tablesum += vat * vatdata[0] |
145 |
- ret.append((u'Rechnungsbetrag: %11s' % format_price(tablesum)).rjust(72)) |
|
145 |
+ ret.append((u'Rechnungsbetrag: %11s' % _formatPrice(tablesum)).rjust(72)) |
|
146 | 146 |
ret.append('') |
147 | 147 |
return '\n'.join(ret) |
148 | 148 |
|
... | ... |
@@ -1,20 +1,4 @@ |
1 | 1 |
# -*- coding: utf-8 -*- |
2 |
-# (C) 2011 by Bernd Wurst <bernd@schokokeks.org> |
|
3 |
- |
|
4 |
-# This file is part of Bib2011. |
|
5 |
-# |
|
6 |
-# Bib2011 is free software: you can redistribute it and/or modify |
|
7 |
-# it under the terms of the GNU General Public License as published by |
|
8 |
-# the Free Software Foundation, either version 3 of the License, or |
|
9 |
-# (at your option) any later version. |
|
10 |
-# |
|
11 |
-# Bib2011 is distributed in the hope that it will be useful, |
|
12 |
-# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
-# GNU General Public License for more details. |
|
15 |
-# |
|
16 |
-# You should have received a copy of the GNU General Public License |
|
17 |
-# along with Bib2011. If not, see <http://www.gnu.org/licenses/>. |
|
18 | 2 |
|
19 | 3 |
import os.path |
20 | 4 |
import sys |
... | ... |
@@ -0,0 +1,26 @@ |
1 |
+ |
|
2 |
+def _formatPrice(price, symbol='€'): |
|
3 |
+ '''_formatPrice(price, symbol='€'): |
|
4 |
+ Gets a floating point value and returns a formatted price, suffixed by 'symbol'. ''' |
|
5 |
+ s = ("%.2f" % price).replace('.', ',') |
|
6 |
+ pat = re.compile(r'([0-9])([0-9]{3}[.,])') |
|
7 |
+ while pat.search(s): |
|
8 |
+ s = pat.sub(r'\1.\2', s) |
|
9 |
+ return s + ' ' + symbol |
|
10 |
+ |
|
11 |
+ |
|
12 |
+def split_to_width(s, length): |
|
13 |
+ '''Fügt zeilenumbrüche in einen String ein, dass er maximal 'length' Zeichen lang ist''' |
|
14 |
+ orig = s |
|
15 |
+ ret = [] |
|
16 |
+ while len(s) > 0: |
|
17 |
+ if len(s) < length: |
|
18 |
+ ret.append(s) |
|
19 |
+ s = '' |
|
20 |
+ else: |
|
21 |
+ index = s.rfind(' ', 0, length) |
|
22 |
+ if index == -1: |
|
23 |
+ index = length |
|
24 |
+ ret.append(s[:index]) |
|
25 |
+ s = s[index + 1:] |
|
26 |
+ return ret |
|
0 | 27 |