diff --git a/app/apps/transactions/urls.py b/app/apps/transactions/urls.py index df36286..f6f79ef 100644 --- a/app/apps/transactions/urls.py +++ b/app/apps/transactions/urls.py @@ -347,4 +347,9 @@ urlpatterns = [ views.quick_transaction_add_as_transaction, name="quick_transaction_add_as_transaction", ), + path( + "transactions//add-as-quick-transaction/", + views.quick_transaction_add_as_quick_transaction, + name="quick_transaction_add_as_quick_transaction", + ), ] diff --git a/app/apps/transactions/views/quick_transactions.py b/app/apps/transactions/views/quick_transactions.py index f975747..6393bf6 100644 --- a/app/apps/transactions/views/quick_transactions.py +++ b/app/apps/transactions/views/quick_transactions.py @@ -129,7 +129,15 @@ def quick_transaction_add_as_transaction(request, quick_transaction_id): quick_transaction_data = model_to_dict( quick_transaction, - exclude=["id", "name", "owner", "account", "category", "tags", "entities"], + exclude=[ + "id", + "name", + "owner", + "account", + "category", + "tags", + "entities", + ], ) new_transaction = Transaction(**quick_transaction_data) @@ -152,3 +160,70 @@ def quick_transaction_add_as_transaction(request, quick_transaction_id): "HX-Trigger": "updated, hide_offcanvas", }, ) + + +@only_htmx +@login_required +@require_http_methods(["GET"]) +def quick_transaction_add_as_quick_transaction(request, transaction_id): + transaction: Transaction = get_object_or_404(Transaction, pk=transaction_id) + + if ( + transaction.description + and QuickTransaction.objects.filter( + name__startswith=transaction.description + ).exists() + ) or QuickTransaction.objects.filter( + name__startswith=_("Quick Transaction") + ).exists(): + if transaction.description: + count = QuickTransaction.objects.filter( + name__startswith=transaction.description + ).count() + qt_name = transaction.description + f" ({count + 1})" + else: + count = QuickTransaction.objects.filter( + name__startswith=_("Quick Transaction") + ).count() + qt_name = _("Quick Transaction") + f" ({count + 1})" + else: + qt_name = transaction.description or _("Quick Transaction") + + transaction_data = model_to_dict( + transaction, + exclude=[ + "id", + "name", + "owner", + "account", + "category", + "tags", + "entities", + "date", + "reference_date", + "installment_plan", + "installment_id", + "recurring_transaction", + "deleted", + "deleted_at", + ], + ) + + new_quick_transaction = QuickTransaction(**transaction_data) + new_quick_transaction.account = transaction.account + new_quick_transaction.category = transaction.category + + new_quick_transaction.name = qt_name + + new_quick_transaction.save() + new_quick_transaction.tags.set(transaction.tags.all()) + new_quick_transaction.entities.set(transaction.entities.all()) + + messages.success(request, _("Item added successfully")) + + return HttpResponse( + status=204, + headers={ + "HX-Trigger": "toasts", + }, + ) diff --git a/app/templates/cotton/transaction/item.html b/app/templates/cotton/transaction/item.html index 288b49f..cb97fab 100644 --- a/app/templates/cotton/transaction/item.html +++ b/app/templates/cotton/transaction/item.html @@ -33,7 +33,7 @@ {% endif %} -
+
{# Date#}
@@ -91,7 +91,7 @@ {% endwith %}
-