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 @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() tasks.generate_pdf.send( invoice.id, ) 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))