mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-04-23 17:18:44 +02: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):
|
def save(self, *args, **kwargs):
|
||||||
if not self.reference_date:
|
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:
|
if not self.installment_start:
|
||||||
self.installment_start = 1
|
self.installment_start = 1
|
||||||
@@ -372,7 +372,7 @@ class RecurringTransaction(models.Model):
|
|||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if not self.reference_date:
|
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)
|
instance = super().save(*args, **kwargs)
|
||||||
return instance
|
return instance
|
||||||
@@ -381,8 +381,8 @@ class RecurringTransaction(models.Model):
|
|||||||
current_date = self.start_date
|
current_date = self.start_date
|
||||||
reference_date = self.reference_date
|
reference_date = self.reference_date
|
||||||
end_date = min(
|
end_date = min(
|
||||||
self.end_date or timezone.now().date() + relativedelta(years=1),
|
self.end_date or timezone.now().date() + (self.get_recurrence_delta() * 5),
|
||||||
timezone.now().date() + relativedelta(years=1),
|
timezone.now().date() + (self.get_recurrence_delta() * 5),
|
||||||
)
|
)
|
||||||
|
|
||||||
while current_date <= end_date:
|
while current_date <= end_date:
|
||||||
@@ -403,7 +403,7 @@ class RecurringTransaction(models.Model):
|
|||||||
account=self.account,
|
account=self.account,
|
||||||
type=self.type,
|
type=self.type,
|
||||||
date=date,
|
date=date,
|
||||||
reference_date=reference_date,
|
reference_date=reference_date.replace(day=1),
|
||||||
amount=self.amount,
|
amount=self.amount,
|
||||||
description=self.description,
|
description=self.description,
|
||||||
category=self.category,
|
category=self.category,
|
||||||
@@ -430,7 +430,8 @@ class RecurringTransaction(models.Model):
|
|||||||
def generate_upcoming_transactions(cls):
|
def generate_upcoming_transactions(cls):
|
||||||
today = timezone.now().date()
|
today = timezone.now().date()
|
||||||
recurring_transactions = cls.objects.filter(
|
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:
|
for recurring_transaction in recurring_transactions:
|
||||||
@@ -447,8 +448,9 @@ class RecurringTransaction(models.Model):
|
|||||||
|
|
||||||
current_date = start_date
|
current_date = start_date
|
||||||
end_date = min(
|
end_date = min(
|
||||||
recurring_transaction.end_date or today + relativedelta(years=1),
|
recurring_transaction.end_date
|
||||||
today + relativedelta(years=1),
|
or today + (recurring_transaction.get_recurrence_delta() * 6),
|
||||||
|
today + (recurring_transaction.get_recurrence_delta() * 6),
|
||||||
)
|
)
|
||||||
|
|
||||||
while current_date <= end_date:
|
while current_date <= end_date:
|
||||||
|
|||||||
@@ -133,9 +133,9 @@ urlpatterns = [
|
|||||||
views.recurring_transaction_delete,
|
views.recurring_transaction_delete,
|
||||||
name="recurring_transaction_delete",
|
name="recurring_transaction_delete",
|
||||||
),
|
),
|
||||||
# path(
|
path(
|
||||||
# "installment-plans/<int:installment_plan_id>/refresh/",
|
"recurring-transactions/<int:recurring_transaction_id>/toggle-pause/",
|
||||||
# views.installment_plan_refresh,
|
views.recurring_transaction_toggle_pause,
|
||||||
# name="installment_plan_refresh",
|
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.common.decorators.htmx import only_htmx
|
||||||
from apps.transactions.forms import RecurringTransactionForm
|
from apps.transactions.forms import RecurringTransactionForm
|
||||||
from apps.transactions.models import RecurringTransaction
|
from apps.transactions.models import RecurringTransaction
|
||||||
|
from apps.transactions.tasks import generate_recurring_transactions
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -24,7 +25,9 @@ def recurring_transactions_index(request):
|
|||||||
@login_required
|
@login_required
|
||||||
@require_http_methods(["GET"])
|
@require_http_methods(["GET"])
|
||||||
def recurring_transactions_list(request):
|
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(
|
return render(
|
||||||
request,
|
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
|
@only_htmx
|
||||||
@login_required
|
@login_required
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
|
|||||||
Reference in New Issue
Block a user