mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-03-18 15:34:01 +01:00
feat: changes to Recurring and InstallmentPlan
This commit is contained in:
@@ -187,7 +187,7 @@ class InstallmentPlan(models.Model):
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.reference_date:
|
||||
self.reference_date = self.start_date.replace(day=1)
|
||||
self.reference_date = self.start_date
|
||||
|
||||
if not self.installment_start:
|
||||
self.installment_start = 1
|
||||
@@ -372,7 +372,7 @@ class RecurringTransaction(models.Model):
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.reference_date:
|
||||
self.reference_date = self.start_date.replace(day=1)
|
||||
self.reference_date = self.start_date
|
||||
|
||||
instance = super().save(*args, **kwargs)
|
||||
return instance
|
||||
@@ -381,8 +381,8 @@ class RecurringTransaction(models.Model):
|
||||
current_date = self.start_date
|
||||
reference_date = self.reference_date
|
||||
end_date = min(
|
||||
self.end_date or timezone.now().date() + relativedelta(years=1),
|
||||
timezone.now().date() + relativedelta(years=1),
|
||||
self.end_date or timezone.now().date() + (self.get_recurrence_delta() * 5),
|
||||
timezone.now().date() + (self.get_recurrence_delta() * 5),
|
||||
)
|
||||
|
||||
while current_date <= end_date:
|
||||
@@ -403,7 +403,7 @@ class RecurringTransaction(models.Model):
|
||||
account=self.account,
|
||||
type=self.type,
|
||||
date=date,
|
||||
reference_date=reference_date,
|
||||
reference_date=reference_date.replace(day=1),
|
||||
amount=self.amount,
|
||||
description=self.description,
|
||||
category=self.category,
|
||||
@@ -430,7 +430,8 @@ class RecurringTransaction(models.Model):
|
||||
def generate_upcoming_transactions(cls):
|
||||
today = timezone.now().date()
|
||||
recurring_transactions = cls.objects.filter(
|
||||
models.Q(end_date__isnull=True) | models.Q(end_date__gte=today)
|
||||
models.Q(models.Q(end_date__isnull=True) | models.Q(end_date__gte=today))
|
||||
& models.Q(paused=False)
|
||||
)
|
||||
|
||||
for recurring_transaction in recurring_transactions:
|
||||
@@ -447,8 +448,9 @@ class RecurringTransaction(models.Model):
|
||||
|
||||
current_date = start_date
|
||||
end_date = min(
|
||||
recurring_transaction.end_date or today + relativedelta(years=1),
|
||||
today + relativedelta(years=1),
|
||||
recurring_transaction.end_date
|
||||
or today + (recurring_transaction.get_recurrence_delta() * 6),
|
||||
today + (recurring_transaction.get_recurrence_delta() * 6),
|
||||
)
|
||||
|
||||
while current_date <= end_date:
|
||||
|
||||
@@ -133,9 +133,9 @@ urlpatterns = [
|
||||
views.recurring_transaction_delete,
|
||||
name="recurring_transaction_delete",
|
||||
),
|
||||
# path(
|
||||
# "installment-plans/<int:installment_plan_id>/refresh/",
|
||||
# views.installment_plan_refresh,
|
||||
# name="installment_plan_refresh",
|
||||
# ),
|
||||
path(
|
||||
"recurring-transactions/<int:recurring_transaction_id>/toggle-pause/",
|
||||
views.recurring_transaction_toggle_pause,
|
||||
name="recurring_transaction_toggle_pause",
|
||||
),
|
||||
]
|
||||
|
||||
@@ -9,6 +9,7 @@ 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
|
||||
@@ -24,7 +25,9 @@ def recurring_transactions_index(request):
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def recurring_transactions_list(request):
|
||||
recurring_transactions = RecurringTransaction.objects.all().order_by("-end_date")
|
||||
recurring_transactions = RecurringTransaction.objects.all().order_by(
|
||||
"-start_date", "description", "id"
|
||||
)
|
||||
|
||||
return render(
|
||||
request,
|
||||
@@ -124,6 +127,31 @@ def recurring_transaction_edit(request, recurring_transaction_id):
|
||||
# )
|
||||
|
||||
|
||||
@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
|
||||
|
||||
Reference in New Issue
Block a user