views.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. lone_expense.date = multiple_expense.first_payment_date
  75. lone_expense.name = multiple_expense.name + " 1st payment"
  76. lone_expense = lone_expense.save()
  77. print(lone_expense)
  78. multiple_expense.payments.add(lone_expense)
  79. multiple_expense.save()
  80. expense = Expense(
  81. content_object=multiple_expense,
  82. )
  83. expense.save()
  84. return redirect("expenses:expense_list")
  85. context = {
  86. 'multiple_expense_form': multiple_expense_form,
  87. 'lone_expense_form': lone_expense_form,
  88. }
  89. return render(request, "expense_create.html", context)
  90. def create_expense(request):
  91. form = ExpenseForm(request.POST or None)
  92. if form.is_valid():
  93. instance = form.save()
  94. expense = Expense(
  95. content_object=instance,
  96. )
  97. expense.save()
  98. # return HttpResponseRedirect('/')
  99. return redirect("expenses:expense_list")
  100. return render(request, "create_expense.html", {"form": form})
  101. class RawExpenseListView(ListView):
  102. model = RawExpense
  103. fields = "__all__"
  104. template_name = "raw_expenses_list.html"
  105. def expense_detail(request, pk):
  106. expense = Expense.objects.get(pk=pk)
  107. return render(request, "expense_detail.html", {"expense": expense})