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

53 lines
1.9 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
@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(
data=req.POST, instance=invoice,
)
if formset.is_valid():
formset.save()
return redirect(reverse('invoices:invoice', kwargs=dict(invoice_id=invoice.id)))
else:
transaction.set_rollback(True)
else:
formset = forms.InvoiceItemFormSet(data=req.POST)
return render(req, 'invoices/index.html', dict(form=form, formset=formset, invoices=user_invoices))
elif req.method == 'GET':
form = forms.CreateInvoiceForm(current_user=req.user)
formset = forms.InvoiceItemFormSet()
return render(req, 'invoices/index.html', dict(form=form, formset=formset, invoices=user_invoices))
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
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))