from django.shortcuts import render, redirect from django.views.generic import CreateView, UpdateView, DeleteView, ListView from django.urls import reverse_lazy from django.contrib.auth.mixins import ( LoginRequiredMixin, UserPassesTestMixin, PermissionRequiredMixin, ) from django.contrib.messages.views import SuccessMessageMixin from django.views import View from expenses.models import Category, RawExpense, Expense, MultiplePaymentExepense from expenses.forms import ( CategoryForm, ExpenseForm, LoneExpenseForm, SubExpenseForm, MultiplePaymentExepenseForm, ) def homepage(request): return category_list(request) def category_list(request): categories = Category.objects.all() form = CategoryForm(request.GET or None) if form.is_valid(): data = form.cleaned_data return render( request, "categories_list.html", {"categories": categories, "form": form} ) def category_detail(request, pk): category = Category.objects.get(pk=pk) return render(request, "category_detail.html", {"category": category}) class CategoryCreateView(CreateView): model = Category fields = "__all__" template_name = "category_create.html" success_url = reverse_lazy("expenses:categories_list") success_message = "Sensor removed successfully" class CategoryUpdateView(UpdateView): model = Category fields = "__all__" template_name = "category_create.html" success_url = reverse_lazy("expenses:categories_list") success_message = "Category updated successfully" class CategoryDeleteView(UserPassesTestMixin, SuccessMessageMixin, DeleteView): model = Category fields = "__all__" template_name = "category_delete.html" success_url = reverse_lazy("expenses:categories_list") success_message = "Category removed successfully" def test_func(self): return self.request.user.is_superuser def expenses_list(request): expenses = Expense.objects.all() form = ExpenseForm(request.GET or None) if form.is_valid(): data = form.cleaned_data return render(request, "expense_list.html", {"expenses": expenses, "form": form}) def lone_expense_create(request): form = LoneExpenseForm(request.POST or None) if form.is_valid(): instance = form.save() expense = Expense( content_object=instance, ) expense.save() return redirect("expenses:expense_list") return render(request, "lone_expense_create.html", {"form": form}) def multiple_expense_create(request): multiple_expense_form = MultiplePaymentExepenseForm(request.POST or None) lone_expense_form = SubExpenseForm(request.POST or None) if multiple_expense_form.is_valid() and lone_expense_form.is_valid(): multiple_expense = multiple_expense_form.save() lone_expense = lone_expense_form.save(commit=False) multiple_expense.set_payments(lone_expense) multiple_expense.save() expense = Expense( content_object=multiple_expense, ) expense.save() return redirect("expenses:expense_list") context = { "multiple_expense_form": multiple_expense_form, "lone_expense_form": lone_expense_form, } return render(request, "expense_create.html", context) def expense_create(request): # form = ExpenseForm(request.POST or None) lone_expense_form = LoneExpenseForm(request.POST or None) mult_expense_form = MultiplePaymentExepenseForm(request.POST or None) if mult_expense_form.is_valid(): first_amount = mult_expense_form.cleaned_data["first_payment_amount"] instance = mult_expense_form.save(commit=False) instance.set_payments(first_amount) """ expense = Expense( content_object=instance, ) expense.save() """ # return HttpResponseRedirect('/') return redirect("expenses:expense_list") if lone_expense_form.is_valid(): lone_expense_form.save() """ expense = Expense( content_object=instance, ) expense.save() """ # return HttpResponseRedirect('/') return redirect("expenses:expense_list") context = { "mult_expense_form": mult_expense_form, "lone_expense_form": lone_expense_form, } return render(request, "expense_create.html", context) class RawExpenseListView(ListView): model = RawExpense fields = ("amout",) template_name = "raw_expenses_list.html" def expense_detail(request, pk): expense = Expense.objects.get(pk=pk) return render(request, "expense_detail.html", {"expense": expense})