Refactor invoice handling to remove unused formset and improve metadata extraction from PDF files

Fix 
This commit is contained in:
Edgar P. Burkhart 2025-01-05 18:42:58 +01:00
parent 7194039706
commit a277b37526
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
3 changed files with 19 additions and 22 deletions
nummi/transaction

View file

@ -3,7 +3,6 @@ import json
from account.forms import AccountSelect
from category.forms import CategorySelect
from django import forms
from django.forms import formset_factory
from django.utils.translation import gettext_lazy as _
from main.forms import DatalistInput, NummiFileInput, NummiForm
from statement.forms import StatementSelect
@ -146,9 +145,6 @@ class MultipleInvoicesForm(forms.Form):
invoices = MultipleFileField()
InvoicesFormSet = formset_factory(MultipleInvoicesForm)
class DateInput(forms.DateInput):
input_type = "date"

View file

@ -108,23 +108,27 @@ class Invoice(NummiModel):
if _prever.file and _prever.file != self.file:
Path(_prever.file.path).unlink(missing_ok=True)
reader = PdfReader(self.file)
if self.file:
reader = PdfReader(self.file)
self.metadata = " ".join(
(
m
for m in (
reader.metadata.title,
reader.metadata.author,
reader.metadata.subject,
if reader.metadata:
self.metadata = " ".join(
(
m.replace("\x00", "").strip()
for m in (
reader.metadata.title,
reader.metadata.author,
reader.metadata.subject,
)
if m
)
)
if m
)
)
_tags = pdf_outline_to_str(reader.outline)
_tags += " ".join((page.extract_text() for page in reader.pages))
self.tags = " ".join((tag for tag in _tags.split() if len(tag) >= 3))
_tags = pdf_outline_to_str(reader.outline)
_tags += " ".join(
(page.extract_text().replace("\x00", "") for page in reader.pages)
)
self.tags = " ".join((tag for tag in _tags.split() if len(tag) >= 3))
super().save(*args, **kwargs)

View file

@ -70,7 +70,6 @@ class MultipleInvoiceCreateView(FormView):
self.request.user.transaction_set, pk=self.kwargs["transaction"]
)
invoices = []
for file in form.cleaned_data["invoices"]:
invoice = Invoice(
transaction=transaction,
@ -80,6 +79,7 @@ class MultipleInvoiceCreateView(FormView):
)
try:
invoice.full_clean()
invoice.save()
except ValidationError as err:
for msg in err.messages:
messages.error(
@ -91,10 +91,7 @@ class MultipleInvoiceCreateView(FormView):
err=msg,
),
)
else:
invoices.append(invoice)
Invoice.objects.bulk_create(invoices)
return super().form_valid(form)
def get_success_url(self):