53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
|
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))
|