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) lone_expense.date = multiple_expense.first_payment_date lone_expense.name = multiple_expense.name + " 1st payment" lone_expense = lone_expense.save() print(lone_expense) multiple_expense.payments.add(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 create_expense(request): form = ExpenseForm(request.POST or None) if form.is_valid(): instance = form.save() expense = Expense( content_object=instance, ) expense.save() # return HttpResponseRedirect('/') return redirect("expenses:expense_list") return render(request, "create_expense.html", {"form": form}) class RawExpenseListView(ListView): model = RawExpense fields = "__all__" 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})