add a new Vorlage file, update number of bill to 10 and fix text to multiline

This commit is contained in:
2025-01-26 22:06:16 +01:00
parent 9b05663cf5
commit f999a98d7c
4 changed files with 60 additions and 47 deletions

View File

@@ -398,8 +398,8 @@ class BillAdminForm(forms.ModelForm):
self.fields["bill_creator"].widget.can_change_related = False
self.fields["bill_creator"].widget.can_delete_related = False
# delete wiref id from list if there are already 8 bills in wiref form.
qs = self.fields["wiref"].queryset.annotate(num_bills=Count("bill")).filter(num_bills__lt=8)
# Delete wiref id from list if there are already 10 bills in wiref form.
qs = self.fields["wiref"].queryset.annotate(num_bills=Count("bill")).filter(num_bills__lt=10)
# delete wiref id from if status is not opened.
qs = qs.filter(status=Wiref.Status.OPENED)

Binary file not shown.

Binary file not shown.

View File

@@ -4,24 +4,32 @@ import os
from django.core.files import File
from pypdf import PdfReader, PdfWriter
from pypdf.constants import FieldDictionaryAttributes as FA
from .models import Bill, Wiref
def generate_pdf(wiref):
if wiref is not None and wiref.status == Wiref.Status.OPENED:
if wiref is None or wiref.status != Wiref.Status.OPENED:
return False
bills = Bill.objects.filter(wiref=wiref).order_by("date")
# Get data for pdf
data = {}
data_invoice = {} # Own dict for fixing text to multiline
for count, elem in enumerate(bills):
data.update(
{
f"Datum.{count}": str(elem.date.strftime("%d.%m.%Y")),
f"Aussteller.{count}": elem.invoice,
f"Verwendungszweck.{count}": elem.purpose,
f"DatumRow{count + 1}": str(elem.date.strftime("%d.%m.%Y")),
f"VerwendungszweckRow{count + 1}": elem.purpose,
# Replace decimal separator from '.' to ','
f"Betrag.{count}": str(elem.amount).replace(".", ","),
f"BetragRow{count + 1}": str(elem.amount).replace(".", ","),
}
)
data_invoice.update(
{
f"RechnungsaustellerinRow{count + 1}": elem.invoice,
}
)
@@ -39,7 +47,7 @@ def generate_pdf(wiref):
data.update(
{
"Laufende Nummer": str(wiref.wiref_id),
"Rechnungsnummer": str(wiref.wiref_id),
"Budgetjahr": budget_year,
# Replace decimal separator from '.' to ','
"Summe": str(total).replace(".", ","),
@@ -47,7 +55,7 @@ def generate_pdf(wiref):
)
# Write data in pdf
pdf_path = os.path.join(os.path.dirname(__file__), "static/Vorlage.pdf")
pdf_path = os.path.join(os.path.dirname(__file__), "static/wiref/Vorlage.pdf")
reader = PdfReader(pdf_path)
writer = PdfWriter()
writer.append(reader)
@@ -57,6 +65,13 @@ def generate_pdf(wiref):
data,
)
# Add invoices and fix text to multiline
writer.update_page_form_field_values(
writer.pages[0],
data_invoice,
flags=FA.FfBits.Multiline,
)
with io.BytesIO() as bytes_stream:
writer.write(bytes_stream)
@@ -65,5 +80,3 @@ def generate_pdf(wiref):
wiref.file_field.save(wiref_name, File(bytes_stream, wiref_name))
return True
return False