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 account.forms import AccountSelect
|
||||||
from category.forms import CategorySelect
|
from category.forms import CategorySelect
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms import formset_factory
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from main.forms import DatalistInput, NummiFileInput, NummiForm
|
from main.forms import DatalistInput, NummiFileInput, NummiForm
|
||||||
from statement.forms import StatementSelect
|
from statement.forms import StatementSelect
|
||||||
|
@ -146,9 +145,6 @@ class MultipleInvoicesForm(forms.Form):
|
||||||
invoices = MultipleFileField()
|
invoices = MultipleFileField()
|
||||||
|
|
||||||
|
|
||||||
InvoicesFormSet = formset_factory(MultipleInvoicesForm)
|
|
||||||
|
|
||||||
|
|
||||||
class DateInput(forms.DateInput):
|
class DateInput(forms.DateInput):
|
||||||
input_type = "date"
|
input_type = "date"
|
||||||
|
|
||||||
|
|
|
@ -108,23 +108,27 @@ class Invoice(NummiModel):
|
||||||
if _prever.file and _prever.file != self.file:
|
if _prever.file and _prever.file != self.file:
|
||||||
Path(_prever.file.path).unlink(missing_ok=True)
|
Path(_prever.file.path).unlink(missing_ok=True)
|
||||||
|
|
||||||
reader = PdfReader(self.file)
|
if self.file:
|
||||||
|
reader = PdfReader(self.file)
|
||||||
|
|
||||||
self.metadata = " ".join(
|
if reader.metadata:
|
||||||
(
|
self.metadata = " ".join(
|
||||||
m
|
(
|
||||||
for m in (
|
m.replace("\x00", "").strip()
|
||||||
reader.metadata.title,
|
for m in (
|
||||||
reader.metadata.author,
|
reader.metadata.title,
|
||||||
reader.metadata.subject,
|
reader.metadata.author,
|
||||||
|
reader.metadata.subject,
|
||||||
|
)
|
||||||
|
if m
|
||||||
|
)
|
||||||
)
|
)
|
||||||
if m
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
_tags = pdf_outline_to_str(reader.outline)
|
_tags = pdf_outline_to_str(reader.outline)
|
||||||
_tags += " ".join((page.extract_text() for page in reader.pages))
|
_tags += " ".join(
|
||||||
self.tags = " ".join((tag for tag in _tags.split() if len(tag) >= 3))
|
(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)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,6 @@ class MultipleInvoiceCreateView(FormView):
|
||||||
self.request.user.transaction_set, pk=self.kwargs["transaction"]
|
self.request.user.transaction_set, pk=self.kwargs["transaction"]
|
||||||
)
|
)
|
||||||
|
|
||||||
invoices = []
|
|
||||||
for file in form.cleaned_data["invoices"]:
|
for file in form.cleaned_data["invoices"]:
|
||||||
invoice = Invoice(
|
invoice = Invoice(
|
||||||
transaction=transaction,
|
transaction=transaction,
|
||||||
|
@ -80,6 +79,7 @@ class MultipleInvoiceCreateView(FormView):
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
invoice.full_clean()
|
invoice.full_clean()
|
||||||
|
invoice.save()
|
||||||
except ValidationError as err:
|
except ValidationError as err:
|
||||||
for msg in err.messages:
|
for msg in err.messages:
|
||||||
messages.error(
|
messages.error(
|
||||||
|
@ -91,10 +91,7 @@ class MultipleInvoiceCreateView(FormView):
|
||||||
err=msg,
|
err=msg,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
invoices.append(invoice)
|
|
||||||
|
|
||||||
Invoice.objects.bulk_create(invoices)
|
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue