Bernd Wurst
Minimum 3 Dezimalstellen speichern
Bernd Wurst commited 505ae10 at 2025-05-09 10:37:45
InvoiceObjects.py
# -* coding: utf8 *-
import datetime
from decimal import Decimal
class InvoiceImage(object):
def __init__(self, pilimage, caption=None, dpi=80, alignment="left"):
self.imagedata = pilimage
self.alignment = alignment
self.dpi = dpi
self.caption = caption
class InvoiceText(object):
def __init__(self, content, urgent=False, headline=None, indent=None):
self.paragraphs = [content]
self.urgent = urgent
self.headline = headline
self.indent = indent
self.fontsize = 0 # relative Schriftgröße ggü default
def addParagraph(self, content):
self.paragraphs.append(content)
class InvoiceTable(object):
def __init__(self, vatType='net', tender=False, summary=True):
self.entries = []
self.vat = {}
self.sum = Decimal('0.0')
self.payments = []
self.tender = tender
self.summary = summary
if vatType not in ['gross', 'net']:
raise ValueError('vatType must be »gross« or »net«')
self.vatType = vatType
def validEntry(self, entry):
"""bekommt einen Eintrag und liefert einen Eintrag, wenn ok; wirft ansonsten ValueError.
wird benutzt um z.B. die Summe auszurechnen oder ähnliches
"""
k = entry.keys()
e = entry
if not ('count' in k and 'unit' in k and 'subject' in k and 'price' in k and 'vat' in k):
raise ValueError('Some data is missing!')
# Finde heraus, wie viele Dezimalstellen übergeben wurden, minimum speichern wir 3.
digits = max(3, abs(Decimal(f"{e['price']}").as_tuple().exponent))
ret = {'type': 'entry',
'count': Decimal(f"{e['count']:.4f}"),
'unit': e['unit'],
'subject': e['subject'],
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX