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))