mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-04-23 00:58:40 +02:00
changes, fixes and improvements
This commit is contained in:
@@ -2,3 +2,4 @@ from .transactions import *
|
||||
from .tags import *
|
||||
from .categories import *
|
||||
from .actions import *
|
||||
from .installment_plans import *
|
||||
|
||||
@@ -33,9 +33,7 @@ def bulk_unpay_transactions(request):
|
||||
@login_required
|
||||
def bulk_delete_transactions(request):
|
||||
selected_transactions = request.GET.getlist("transactions", [])
|
||||
Transaction.objects.filter(
|
||||
id__in=selected_transactions, installment_plan__isnull=True
|
||||
).delete()
|
||||
Transaction.objects.filter(id__in=selected_transactions).delete()
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
|
||||
@@ -12,11 +12,25 @@ from apps.transactions.forms import TransactionCategoryForm
|
||||
from apps.transactions.models import TransactionCategory
|
||||
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def categories_index(request):
|
||||
return render(
|
||||
request,
|
||||
"categories/pages/index.html",
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def categories_list(request):
|
||||
categories = TransactionCategory.objects.all().order_by("id")
|
||||
return render(request, "categories/pages/list.html", {"categories": categories})
|
||||
return render(
|
||||
request,
|
||||
"categories/fragments/list.html",
|
||||
{"categories": categories},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@@ -32,8 +46,7 @@ def category_add(request, **kwargs):
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Location": reverse("categories_list"),
|
||||
"HX-Trigger": "hide_offcanvas, toasts",
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
else:
|
||||
@@ -61,8 +74,7 @@ def category_edit(request, category_id):
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Location": reverse("categories_list"),
|
||||
"HX-Trigger": "hide_offcanvas, toasts",
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
else:
|
||||
@@ -88,5 +100,7 @@ def category_delete(request, category_id):
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={"HX-Location": reverse("categories_list")},
|
||||
headers={
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
|
||||
139
app/apps/transactions/views/installment_plans.py
Normal file
139
app/apps/transactions/views/installment_plans.py
Normal file
@@ -0,0 +1,139 @@
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.decorators.http import require_http_methods
|
||||
|
||||
from apps.common.decorators.htmx import only_htmx
|
||||
from apps.transactions.forms import InstallmentPlanForm
|
||||
from apps.transactions.models import InstallmentPlan
|
||||
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def installment_plans_index(request):
|
||||
return render(
|
||||
request,
|
||||
"installment_plans/pages/index.html",
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def installment_plans_list(request):
|
||||
installment_plans = InstallmentPlan.objects.all().order_by("-end_date")
|
||||
|
||||
return render(
|
||||
request,
|
||||
"installment_plans/fragments/list.html",
|
||||
{"installment_plans": installment_plans},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def installment_plan_transactions(request, installment_plan_id):
|
||||
installment_plan = get_object_or_404(InstallmentPlan, id=installment_plan_id)
|
||||
transactions = installment_plan.transactions.all().order_by("reference_date", "id")
|
||||
print(transactions)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"installment_plans/fragments/list_transactions.html",
|
||||
{"installment_plan": installment_plan, "transactions": transactions},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET", "POST"])
|
||||
def installment_plan_add(request):
|
||||
if request.method == "POST":
|
||||
form = InstallmentPlanForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, _("Installment Plan added successfully"))
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
else:
|
||||
form = InstallmentPlanForm()
|
||||
|
||||
return render(
|
||||
request,
|
||||
"installment_plans/fragments/add.html",
|
||||
{"form": form},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET", "POST"])
|
||||
def installment_plan_edit(request, installment_plan_id):
|
||||
installment_plan = get_object_or_404(InstallmentPlan, id=installment_plan_id)
|
||||
|
||||
if request.method == "POST":
|
||||
form = InstallmentPlanForm(request.POST, instance=installment_plan)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, _("Installment Plan updated successfully"))
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
else:
|
||||
form = InstallmentPlanForm(instance=installment_plan)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"installment_plans/fragments/edit.html",
|
||||
{"form": form, "installment_plan": installment_plan},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def installment_plan_refresh(request, installment_plan_id):
|
||||
installment_plan = get_object_or_404(InstallmentPlan, id=installment_plan_id)
|
||||
installment_plan.update_transactions()
|
||||
|
||||
messages.success(request, _("Installment Plan refreshed successfully"))
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@csrf_exempt
|
||||
@require_http_methods(["DELETE"])
|
||||
def installment_plan_delete(request, installment_plan_id):
|
||||
installment_plan = get_object_or_404(InstallmentPlan, id=installment_plan_id)
|
||||
|
||||
installment_plan.delete()
|
||||
|
||||
messages.success(request, _("Installment Plan deleted successfully"))
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
@@ -14,9 +14,23 @@ from apps.transactions.models import TransactionTag
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def tag_list(request):
|
||||
def tags_index(request):
|
||||
return render(
|
||||
request,
|
||||
"tags/pages/index.html",
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def tags_list(request):
|
||||
tags = TransactionTag.objects.all().order_by("id")
|
||||
return render(request, "tags/pages/list.html", {"tags": tags})
|
||||
return render(
|
||||
request,
|
||||
"tags/fragments/list.html",
|
||||
{"tags": tags},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@@ -32,8 +46,7 @@ def tag_add(request, **kwargs):
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Location": reverse("tags_list"),
|
||||
"HX-Trigger": "hide_offcanvas, toasts",
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
else:
|
||||
@@ -61,8 +74,7 @@ def tag_edit(request, tag_id):
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Location": reverse("tags_list"),
|
||||
"HX-Trigger": "hide_offcanvas, toasts",
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
else:
|
||||
@@ -88,5 +100,7 @@ def tag_delete(request, tag_id):
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={"HX-Location": reverse("tags_list")},
|
||||
headers={
|
||||
"HX-Trigger": "updated, hide_offcanvas, toasts",
|
||||
},
|
||||
)
|
||||
|
||||
@@ -88,17 +88,9 @@ def transaction_edit(request, transaction_id, **kwargs):
|
||||
def transaction_delete(request, transaction_id, **kwargs):
|
||||
transaction = get_object_or_404(Transaction, id=transaction_id)
|
||||
|
||||
if transaction.installment_plan:
|
||||
messages.error(
|
||||
request,
|
||||
_(
|
||||
"This transaction is part of a Installment Plan, you can't delete it directly."
|
||||
),
|
||||
)
|
||||
else:
|
||||
transaction.delete()
|
||||
transaction.delete()
|
||||
|
||||
messages.success(request, _("Transaction deleted successfully"))
|
||||
messages.success(request, _("Transaction deleted successfully"))
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
@@ -152,30 +144,9 @@ def transaction_pay(request, transaction_id):
|
||||
response = render(
|
||||
request,
|
||||
"transactions/fragments/item.html",
|
||||
context={"transaction": transaction},
|
||||
context={"transaction": transaction, **request.GET},
|
||||
)
|
||||
response.headers["HX-Trigger"] = (
|
||||
f'{"paid" if new_is_paid else "unpaid"}, monthly_summary_update'
|
||||
)
|
||||
return response
|
||||
|
||||
|
||||
class AddInstallmentPlanView(View):
|
||||
template_name = "transactions/fragments/add_installment_plan.html"
|
||||
|
||||
def get(self, request):
|
||||
form = InstallmentPlanForm()
|
||||
return render(request, self.template_name, {"form": form})
|
||||
|
||||
def post(self, request):
|
||||
form = InstallmentPlanForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, _("Installment plan created successfully"))
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={"HX-Trigger": "updated, hide_offcanvas, toast"},
|
||||
)
|
||||
|
||||
return render(request, self.template_name, {"form": form})
|
||||
|
||||
Reference in New Issue
Block a user