diff --git a/app/apps/transactions/urls.py b/app/apps/transactions/urls.py index f6f79ef..d056758 100644 --- a/app/apps/transactions/urls.py +++ b/app/apps/transactions/urls.py @@ -71,6 +71,16 @@ urlpatterns = [ views.transaction_mute, name="transaction_mute", ), + path( + "transaction//change-month//", + views.transaction_change_month, + name="transaction_change_month", + ), + path( + "transaction//move-to-today/", + views.transaction_move_to_today, + name="transaction_move_to_today", + ), path( "transaction//delete/", views.transaction_delete, diff --git a/app/apps/transactions/views/transactions.py b/app/apps/transactions/views/transactions.py index 87e08ec..496e4ce 100644 --- a/app/apps/transactions/views/transactions.py +++ b/app/apps/transactions/views/transactions.py @@ -1,6 +1,7 @@ import datetime from copy import deepcopy +from dateutil.relativedelta import relativedelta from django.contrib import messages from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator @@ -408,6 +409,47 @@ def transaction_mute(request, transaction_id): return response +@only_htmx +@login_required +@require_http_methods(["GET"]) +def transaction_change_month(request, transaction_id, change_type): + transaction: Transaction = get_object_or_404(Transaction, pk=transaction_id) + + if change_type == "next": + transaction.reference_date = transaction.reference_date + relativedelta( + months=1 + ) + transaction.save() + transaction_updated.send(sender=transaction) + elif change_type == "previous": + transaction.reference_date = transaction.reference_date - relativedelta( + months=1 + ) + transaction.save() + transaction_updated.send(sender=transaction) + + return HttpResponse( + status=204, + headers={"HX-Trigger": "updated"}, + ) + + +@only_htmx +@login_required +@require_http_methods(["GET"]) +def transaction_move_to_today(request, transaction_id): + transaction: Transaction = get_object_or_404(Transaction, pk=transaction_id) + + transaction.date = timezone.localdate(timezone.now()) + transaction.save() + transaction_updated.send(sender=transaction) + + return HttpResponse( + status=204, + headers={"HX-Trigger": "updated"}, + ) + + @login_required @require_http_methods(["GET"]) def transaction_all_index(request): diff --git a/app/templates/cotton/transaction/item.html b/app/templates/cotton/transaction/item.html index 5971b9b..c593d29 100644 --- a/app/templates/cotton/transaction/item.html +++ b/app/templates/cotton/transaction/item.html @@ -163,6 +163,10 @@ {% endif %}
  • {% translate 'Add as quick transaction' %}
  • +
  • {% translate 'Move to previous month' %}
  • +
  • {% translate 'Move to next month' %}
  • +
  • {% translate 'Move to today' %}
  • +
  • {% translate 'Duplicate' %}
  • {% else %}