Files
project-managment/apps/finance/views.py
T

131 lines
4.1 KiB
Python

from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView
from apps.core.permissions import AdminRequiredMixin
from apps.finance.models import Expense, Invoice, Payment, TeamPayment
class InvoiceListView(LoginRequiredMixin, ListView):
model = Invoice
template_name = "pages/finance/invoice_list.html"
context_object_name = "invoices"
def get_queryset(self):
user = self.request.user
qs = Invoice.objects.select_related("project", "client")
if user.is_admin():
return qs.all()
return qs.filter(client=user)
class InvoiceDetailView(LoginRequiredMixin, DetailView):
model = Invoice
template_name = "pages/finance/invoice_detail.html"
context_object_name = "invoice"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["payments"] = self.object.payments.all()
return context
class InvoiceCreateView(AdminRequiredMixin, CreateView):
model = Invoice
template_name = "pages/finance/invoice_form.html"
fields = ["project", "client", "amount", "due_date"]
success_url = reverse_lazy("invoice_list")
class InvoiceUpdateView(AdminRequiredMixin, UpdateView):
model = Invoice
template_name = "pages/finance/invoice_form.html"
fields = ["project", "client", "amount", "due_date", "status"]
def get_success_url(self):
return reverse_lazy("invoice_detail", kwargs={"pk": self.object.pk})
class InvoiceDeleteView(AdminRequiredMixin, DeleteView):
model = Invoice
template_name = "pages/finance/invoice_confirm_delete.html"
success_url = reverse_lazy("invoice_list")
class PaymentListView(AdminRequiredMixin, ListView):
model = Payment
template_name = "pages/finance/payment_list.html"
context_object_name = "payments"
ordering = ["-paid_at"]
class PaymentCreateView(AdminRequiredMixin, CreateView):
model = Payment
template_name = "pages/finance/payment_form.html"
fields = ["invoice", "paid_at", "method", "amount", "reference"]
success_url = reverse_lazy("payment_list")
class PaymentDeleteView(AdminRequiredMixin, DeleteView):
model = Payment
template_name = "pages/finance/payment_confirm_delete.html"
success_url = reverse_lazy("payment_list")
class ExpenseListView(LoginRequiredMixin, ListView):
model = Expense
template_name = "pages/finance/expense_list.html"
context_object_name = "expenses"
def get_queryset(self):
user = self.request.user
qs = Expense.objects.select_related("project", "raised_by")
if user.is_admin():
return qs.all()
return qs.filter(raised_by=user)
class ExpenseCreateView(LoginRequiredMixin, CreateView):
model = Expense
template_name = "pages/finance/expense_form.html"
fields = ["project", "amount", "category", "description"]
def form_valid(self, form):
form.instance.raised_by = self.request.user
return super().form_valid(form)
def get_success_url(self):
return reverse_lazy("expense_list")
class ExpenseDeleteView(AdminRequiredMixin, DeleteView):
model = Expense
template_name = "pages/finance/expense_confirm_delete.html"
success_url = reverse_lazy("expense_list")
class TeamPaymentListView(LoginRequiredMixin, ListView):
model = TeamPayment
template_name = "pages/finance/team_payment_list.html"
context_object_name = "payments"
def get_queryset(self):
user = self.request.user
qs = TeamPayment.objects.select_related("member")
if user.is_admin():
return qs.all()
return qs.filter(member=user)
class TeamPaymentCreateView(AdminRequiredMixin, CreateView):
model = TeamPayment
template_name = "pages/finance/team_payment_form.html"
fields = ["member", "period", "amount"]
success_url = reverse_lazy("team_payment_list")
class TeamPaymentDeleteView(AdminRequiredMixin, DeleteView):
model = TeamPayment
template_name = "pages/finance/team_payment_confirm_delete.html"
success_url = reverse_lazy("team_payment_list")