Files
WYGIWYH/app/apps/transactions/views/recurring_transactions.py
2024-10-18 19:03:54 -03:00

174 lines
5.0 KiB
Python

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.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 RecurringTransactionForm
from apps.transactions.models import RecurringTransaction
from apps.transactions.tasks import generate_recurring_transactions
@login_required
@require_http_methods(["GET"])
def recurring_transactions_index(request):
return render(
request,
"recurring_transactions/pages/index.html",
)
@only_htmx
@login_required
@require_http_methods(["GET"])
def recurring_transactions_list(request):
recurring_transactions = RecurringTransaction.objects.all().order_by(
"-start_date", "description", "id"
)
return render(
request,
"recurring_transactions/fragments/list.html",
{"recurring_transactions": recurring_transactions},
)
@only_htmx
@login_required
@require_http_methods(["GET"])
def recurring_transaction_transactions(request, recurring_transaction_id):
recurring_transaction = get_object_or_404(
RecurringTransaction, id=recurring_transaction_id
)
transactions = recurring_transaction.transactions.all().order_by(
"reference_date", "id"
)
return render(
request,
"recurring_transactions/fragments/list_transactions.html",
{"recurring_transaction": recurring_transaction, "transactions": transactions},
)
@only_htmx
@login_required
@require_http_methods(["GET", "POST"])
def recurring_transaction_add(request):
if request.method == "POST":
form = RecurringTransactionForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, _("Recurring Transaction added successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "updated, hide_offcanvas, toasts",
},
)
else:
form = RecurringTransactionForm()
return render(
request,
"recurring_transactions/fragments/add.html",
{"form": form},
)
@only_htmx
@login_required
@require_http_methods(["GET", "POST"])
def recurring_transaction_edit(request, recurring_transaction_id):
recurring_transaction = get_object_or_404(
RecurringTransaction, id=recurring_transaction_id
)
if request.method == "POST":
form = RecurringTransactionForm(request.POST, instance=recurring_transaction)
if form.is_valid():
form.save()
messages.success(request, _("Recurring Transaction updated successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "updated, hide_offcanvas, toasts",
},
)
else:
form = RecurringTransactionForm(instance=recurring_transaction)
return render(
request,
"recurring_transactions/fragments/edit.html",
{"form": form, "recurring_transaction": recurring_transaction},
)
# @only_htmx
# @login_required
# @require_http_methods(["GET"])
# def recurring_transaction_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
@require_http_methods(["GET"])
def recurring_transaction_toggle_pause(request, recurring_transaction_id):
installment_plan = get_object_or_404(
RecurringTransaction, id=recurring_transaction_id
)
current_paused = installment_plan.paused
installment_plan.paused = not current_paused
installment_plan.save(update_fields=["paused"])
if current_paused:
messages.success(request, _("Recurring transaction unpaused successfully"))
generate_recurring_transactions.defer()
else:
messages.success(request, _("Recurring transaction paused successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "updated, hide_offcanvas, toasts",
},
)
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def recurring_transaction_delete(request, recurring_transaction_id):
recurring_transaction = get_object_or_404(
RecurringTransaction, id=recurring_transaction_id
)
recurring_transaction.delete()
messages.success(request, _("Recurring Transaction deleted successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "updated, hide_offcanvas, toasts",
},
)