views.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. from django.shortcuts import render, redirect
  2. from django.views.generic import CreateView, UpdateView, DeleteView, ListView
  3. from django.urls import reverse_lazy
  4. from django.contrib.auth.mixins import (
  5. LoginRequiredMixin,
  6. UserPassesTestMixin,
  7. PermissionRequiredMixin,
  8. )
  9. from django.contrib.messages.views import SuccessMessageMixin
  10. from django.views import View
  11. from expenses.models import Category, RawExpense, Expense, MultiplePaymentExepense
  12. from expenses.forms import (
  13. CategoryForm,
  14. ExpenseForm,
  15. LoneExpenseForm,
  16. SubExpenseForm,
  17. MultiplePaymentExepenseForm,
  18. )
  19. def homepage(request):
  20. return category_list(request)
  21. def category_list(request):
  22. categories = Category.objects.all()
  23. form = CategoryForm(request.GET or None)
  24. if form.is_valid():
  25. data = form.cleaned_data
  26. return render(
  27. request, "categories_list.html", {"categories": categories, "form": form}
  28. )
  29. def category_detail(request, pk):
  30. category = Category.objects.get(pk=pk)
  31. return render(request, "category_detail.html", {"category": category})
  32. class CategoryCreateView(CreateView):
  33. model = Category
  34. fields = "__all__"
  35. template_name = "category_create.html"
  36. success_url = reverse_lazy("expenses:categories_list")
  37. success_message = "Sensor removed successfully"
  38. class CategoryUpdateView(UpdateView):
  39. model = Category
  40. fields = "__all__"
  41. template_name = "category_create.html"
  42. success_url = reverse_lazy("expenses:categories_list")
  43. success_message = "Category updated successfully"
  44. class CategoryDeleteView(UserPassesTestMixin, SuccessMessageMixin, DeleteView):
  45. model = Category
  46. fields = "__all__"
  47. template_name = "category_delete.html"
  48. success_url = reverse_lazy("expenses:categories_list")
  49. success_message = "Category removed successfully"
  50. def test_func(self):
  51. return self.request.user.is_superuser
  52. def expenses_list(request):
  53. expenses = Expense.objects.all()
  54. form = ExpenseForm(request.GET or None)
  55. if form.is_valid():
  56. data = form.cleaned_data
  57. return render(request, "expense_list.html", {"expenses": expenses, "form": form})
  58. def lone_expense_create(request):
  59. form = LoneExpenseForm(request.POST or None)
  60. if form.is_valid():
  61. instance = form.save()
  62. expense = Expense(
  63. content_object=instance,
  64. )
  65. expense.save()
  66. return redirect("expenses:expense_list")
  67. return render(request, "lone_expense_create.html", {"form": form})
  68. def multiple_expense_create(request):
  69. multiple_expense_form = MultiplePaymentExepenseForm(request.POST or None)
  70. lone_expense_form = SubExpenseForm(request.POST or None)
  71. if multiple_expense_form.is_valid() and lone_expense_form.is_valid():
  72. multiple_expense = multiple_expense_form.save()
  73. lone_expense = lone_expense_form.save(commit=False)
  74. multiple_expense.set_payments(lone_expense)
  75. multiple_expense.save()
  76. expense = Expense(
  77. content_object=multiple_expense,
  78. )
  79. expense.save()
  80. return redirect("expenses:expense_list")
  81. context = {
  82. "multiple_expense_form": multiple_expense_form,
  83. "lone_expense_form": lone_expense_form,
  84. }
  85. return render(request, "expense_create.html", context)
  86. def create_expense(request):
  87. # form = ExpenseForm(request.POST or None)
  88. lone_expense_form = LoneExpenseForm(request.POST or None)
  89. mult_expense_form = MultiplePaymentExepenseForm(request.POST or None)
  90. if mult_expense_form.is_valid():
  91. instance = mult_expense_form.save()
  92. expense = Expense(
  93. content_object=instance,
  94. )
  95. expense.save()
  96. # return HttpResponseRedirect('/')
  97. return redirect("expenses:expense_list")
  98. context = {
  99. "mult_expense_form": mult_expense_form,
  100. "lone_expense_form": lone_expense_form,
  101. }
  102. return render(request, "expense_create.html", context)
  103. class RawExpenseListView(ListView):
  104. model = RawExpense
  105. fields = "__all__"
  106. template_name = "raw_expenses_list.html"
  107. def expense_detail(request, pk):
  108. expense = Expense.objects.get(pk=pk)
  109. return render(request, "expense_detail.html", {"expense": expense})