Bernd Wurst commited on 2025-02-16 13:25:32
Zeige 3 geänderte Dateien mit 18 Einfügungen und 18 Löschungen.
... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
# -* coding: utf8 *- |
2 | 2 |
|
3 | 3 |
import datetime |
4 |
- |
|
4 |
+from decimal import Decimal |
|
5 | 5 |
|
6 | 6 |
class InvoiceImage(object): |
7 | 7 |
def __init__(self, pilimage, caption=None, dpi=80, alignment="left"): |
... | ... |
@@ -27,7 +27,7 @@ class InvoiceTable(object): |
27 | 27 |
def __init__(self, vatType='gross', tender=False, summary=True): |
28 | 28 |
self.entries = [] |
29 | 29 |
self.vat = {} |
30 |
- self.sum = 0.0 |
|
30 |
+ self.sum = Decimal('0.0') |
|
31 | 31 |
self.payments = [] |
32 | 32 |
self.tender = tender |
33 | 33 |
self.summary = summary |
... | ... |
@@ -47,14 +47,14 @@ class InvoiceTable(object): |
47 | 47 |
'count': e['count'], |
48 | 48 |
'unit': e['unit'], |
49 | 49 |
'subject': e['subject'], |
50 |
- 'price': e['price'], |
|
51 |
- 'total': (e['price'] * e['count']), |
|
52 |
- 'vat': e['vat'], |
|
50 |
+ 'price': Decimal(e['price']), |
|
51 |
+ 'total': Decimal(e['price'] * e['count']), |
|
52 |
+ 'vat': Decimal(e['vat']), |
|
53 | 53 |
'tender': False, |
54 | 54 |
'print_date': True, |
55 | 55 |
} |
56 | 56 |
if ret['vat'] > 1: |
57 |
- ret['vat'] = float(ret['vat']) / 100 |
|
57 |
+ ret['vat'] = Decimal(ret['vat'] / 100) |
|
58 | 58 |
|
59 | 59 |
if 'tender' in e.keys(): |
60 | 60 |
ret['tender'] = e['tender'] |
... | ... |
@@ -84,7 +84,7 @@ class InvoiceTable(object): |
84 | 84 |
self.entries.append({'type': 'title', 'title': title, }) |
85 | 85 |
|
86 | 86 |
def addPayment(self, payment_type, amount, date): |
87 |
- self.payments.append({"type": payment_type, "amount": amount, "date": date}) |
|
87 |
+ self.payments.append({"type": payment_type, "amount": Decimal(amount), "date": date}) |
|
88 | 88 |
|
89 | 89 |
|
90 | 90 |
RECHNUNG = 380 |
... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
# -*- coding: utf-8 -*- |
2 | 2 |
|
3 | 3 |
import os.path |
4 |
- |
|
4 |
+from decimal import Decimal |
|
5 | 5 |
from reportlab.lib.pagesizes import A4 |
6 | 6 |
from reportlab.lib.units import cm, inch |
7 | 7 |
from reportlab.pdfbase import pdfmetrics |
... | ... |
@@ -367,7 +367,7 @@ class PDF(object): |
367 | 367 |
left = self.leftcontent |
368 | 368 |
right = self.rightcontent |
369 | 369 |
self._tableHead(part) |
370 |
- temp_sum = 0.0 |
|
370 |
+ temp_sum = Decimal('0.0') |
|
371 | 371 |
odd = True |
372 | 372 |
for el in part.entries: |
373 | 373 |
if el['type'] == 'title': |
... | ... |
@@ -493,7 +493,7 @@ class PDF(object): |
493 | 493 |
self.canvas.setFont(self.font, font_size) |
494 | 494 |
self.y -= self.line_height + self.line_padding |
495 | 495 |
summaries = [] |
496 |
- vat = 0.0 |
|
496 |
+ vat = Decimal('0.0') |
|
497 | 497 |
if len(part.vat) == 1 and list(part.vat.keys())[0] == 0.0: |
498 | 498 |
self.canvas.drawString(left, self.y - self.font_height, |
499 | 499 |
'Dieser Beleg wurde ohne Ausweis von MwSt erstellt.') |
... | ... |
@@ -516,7 +516,7 @@ class PDF(object): |
516 | 516 |
_formatPrice((vatdata[0] / (vat + 1)) * vat))) |
517 | 517 |
else: |
518 | 518 |
summaries.append(('%s: Durchlaufende Posten ohne Berechnung von MwSt.' % ( |
519 |
- vatdata[1]), 0.0)) |
|
519 |
+ vatdata[1]), Decimal('0.0'))) |
|
520 | 520 |
summaries.append(('Nettobetrag:', _formatPrice(part.sum - (part.sum / (vat + 1)) * vat))) |
521 | 521 |
summaries.sort() |
522 | 522 |
for line in summaries: |
... | ... |
@@ -546,7 +546,7 @@ class PDF(object): |
546 | 546 |
self.canvas.drawRightString(left + 14.5 * cm, self.y - self.font_height, line[0]) |
547 | 547 |
self.canvas.drawRightString(left + 16.8 * cm, self.y - self.font_height, line[1]) |
548 | 548 |
self.y -= self.line_height |
549 |
- sum = 0 |
|
549 |
+ sum = Decimal('0.0') |
|
550 | 550 |
for vat, vatdata in part.vat.items(): |
551 | 551 |
sum += (vat + 1) * vatdata[0] |
552 | 552 |
self.canvas.setFont(self.font + '-Bold', font_size) |
... | ... |
@@ -557,7 +557,7 @@ class PDF(object): |
557 | 557 |
self.canvas.drawRightString(left + 16.8 * cm, self.y - self.font_height, _formatPrice(sum)) |
558 | 558 |
self.canvas.setFont(self.font, font_size) |
559 | 559 |
self.y -= self.line_height + self.line_padding |
560 |
- paysum = 0.0 |
|
560 |
+ paysum = Decimal('0.0') |
|
561 | 561 |
for pay in part.payments: |
562 | 562 |
paysum += pay['amount'] |
563 | 563 |
descr = 'Zahlung' |
... | ... |
@@ -577,7 +577,7 @@ class PDF(object): |
577 | 577 |
self.y -= self.line_height |
578 | 578 |
sum = part.sum |
579 | 579 |
if part.vatType == 'net': |
580 |
- sum = 0 |
|
580 |
+ sum = Decimal('0.0') |
|
581 | 581 |
for vat, vatdata in part.vat.items(): |
582 | 582 |
sum += (vat + 1) * vatdata[0] |
583 | 583 |
rest = sum - paysum |
... | ... |
@@ -148,10 +148,10 @@ def InvoiceToXML(invoice): |
148 | 148 |
doc.trade.delivery.event.occurrence = deliverydate |
149 | 149 |
|
150 | 150 |
# Line Items |
151 |
- summe_netto = 0.0 |
|
152 |
- summe_brutto = 0.0 |
|
153 |
- summe_bezahlt = 0.0 |
|
154 |
- summe_ust = 0.0 |
|
151 |
+ summe_netto = Decimal('0.0') |
|
152 |
+ summe_brutto = Decimal('0.0') |
|
153 |
+ summe_bezahlt = Decimal('0.0') |
|
154 |
+ summe_ust = Decimal('0.0') |
|
155 | 155 |
line_id_count = 0 |
156 | 156 |
textparts = [] |
157 | 157 |
for part in invoice.parts: |
158 | 158 |