This repository has been archived on 2025-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
facturio/invoices/views.py

68 lines
2.1 KiB
Python
Raw Normal View History

2024-08-16 22:12:49 +02:00
from django.contrib.auth.decorators import login_required
from django.db import transaction
from django.http import HttpRequest
from django.http import HttpResponse
from django.shortcuts import redirect
from django.shortcuts import render
from django.urls import reverse
from . import forms
from . import models
from . import tasks
2024-08-16 22:12:49 +02:00
@login_required
def home(req: HttpRequest) -> HttpResponse:
user_invoices = models.Invoice.objects.filter(user=req.user).all()
if req.method == 'POST':
form = forms.CreateInvoiceForm(data=req.POST, current_user=req.user)
if form.is_valid():
with transaction.atomic():
invoice = form.save()
formset = forms.InvoiceItemFormSet(
2025-03-03 21:52:20 +01:00
data=req.POST,
instance=invoice,
2024-08-16 22:12:49 +02:00
)
if formset.is_valid():
formset.save()
tasks.generate_pdf.send(
2025-03-03 14:54:04 +01:00
invoice.id,
)
2025-03-03 21:52:20 +01:00
return redirect(
reverse('invoices:invoice', kwargs=dict(invoice_id=invoice.id)),
)
2024-08-16 22:12:49 +02:00
else:
transaction.set_rollback(True)
else:
formset = forms.InvoiceItemFormSet(data=req.POST)
2025-03-03 21:52:20 +01:00
return render(
req,
'invoices/index.html',
dict(form=form, formset=formset, invoices=user_invoices),
)
2024-08-16 22:12:49 +02:00
elif req.method == 'GET':
form = forms.CreateInvoiceForm(current_user=req.user)
formset = forms.InvoiceItemFormSet()
2025-03-03 21:52:20 +01:00
return render(
req,
'invoices/index.html',
dict(form=form, formset=formset, invoices=user_invoices),
)
2024-08-16 22:12:49 +02:00
return HttpResponse(status=405)
@login_required
def view_invoice(req: HttpRequest, invoice_id: int) -> HttpResponse:
invoice = models.Invoice.objects.get(pk=invoice_id)
return render(req, 'invoices/view.html', dict(invoice=invoice))
# @login_required
2024-08-16 22:12:49 +02:00
def print_invoice(req: HttpRequest, invoice_id: int):
invoice = models.Invoice.objects.get(pk=invoice_id)
return render(req, 'invoices/invoice.html', dict(invoice=invoice))