Refactor invoice handling to remove unused formset and improve metadata extraction from PDF files
Fix #46
This commit is contained in:
parent
7194039706
commit
a277b37526
3 changed files with 19 additions and 22 deletions
|
@ -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"
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue