views.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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 expense_create(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. first_amount = mult_expense_form.cleaned_data["first_payment_amount"]
  92. instance = mult_expense_form.save(commit=False)
  93. instance.set_payments(first_amount)
  94. """ expense = Expense(
  95. content_object=instance,
  96. )
  97. expense.save() """
  98. # return HttpResponseRedirect('/')
  99. return redirect("expenses:expense_list")
  100. if lone_expense_form.is_valid():
  101. lone_expense_form.save()
  102. """ expense = Expense(
  103. content_object=instance,
  104. )
  105. expense.save() """
  106. # return HttpResponseRedirect('/')
  107. return redirect("expenses:expense_list")
  108. context = {
  109. "mult_expense_form": mult_expense_form,
  110. "lone_expense_form": lone_expense_form,
  111. }
  112. return render(request, "expense_create.html", context)
  113. class RawExpenseListView(ListView):
  114. model = RawExpense
  115. fields = ("amout",)
  116. template_name = "raw_expenses_list.html"
  117. def expense_detail(request, pk):
  118. expense = Expense.objects.get(pk=pk)
  119. return render(request, "expense_detail.html", {"expense": expense})