mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-04-25 10:08:36 +02:00
feat(recurring-transaction): update unpaid transactions info when recurring transaction is updated
This commit is contained in:
@@ -120,6 +120,11 @@ class RecurringTransactionSerializer(serializers.ModelSerializer):
|
|||||||
instance.create_upcoming_transactions()
|
instance.create_upcoming_transactions()
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
def update(self, instance, validated_data):
|
||||||
|
instance = super().update(instance, validated_data)
|
||||||
|
instance.update_unpaid_transactions()
|
||||||
|
return instance
|
||||||
|
|
||||||
|
|
||||||
class TransactionSerializer(serializers.ModelSerializer):
|
class TransactionSerializer(serializers.ModelSerializer):
|
||||||
category = TransactionCategoryField(required=False)
|
category = TransactionCategoryField(required=False)
|
||||||
|
|||||||
@@ -767,5 +767,7 @@ class RecurringTransactionForm(forms.ModelForm):
|
|||||||
instance = super().save(**kwargs)
|
instance = super().save(**kwargs)
|
||||||
if is_new:
|
if is_new:
|
||||||
instance.create_upcoming_transactions()
|
instance.create_upcoming_transactions()
|
||||||
|
else:
|
||||||
|
instance.update_unpaid_transactions()
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
|||||||
@@ -540,3 +540,33 @@ class RecurringTransaction(models.Model):
|
|||||||
recurring_transaction.save(
|
recurring_transaction.save(
|
||||||
update_fields=["last_generated_date", "last_generated_reference_date"]
|
update_fields=["last_generated_date", "last_generated_reference_date"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def update_unpaid_transactions(self):
|
||||||
|
"""
|
||||||
|
Updates all unpaid transactions associated with this RecurringTransaction.
|
||||||
|
|
||||||
|
Only unpaid transactions (`is_paid=False`) are modified. Updates fields like
|
||||||
|
amount, description, category, notes, and many-to-many relationships (tags, entities).
|
||||||
|
"""
|
||||||
|
unpaid_transactions = self.transactions.filter(is_paid=False)
|
||||||
|
|
||||||
|
for existing_transaction in unpaid_transactions:
|
||||||
|
# Update fields based on RecurringTransaction
|
||||||
|
existing_transaction.amount = self.amount
|
||||||
|
existing_transaction.description = self.description
|
||||||
|
existing_transaction.category = self.category
|
||||||
|
existing_transaction.notes = self.notes
|
||||||
|
|
||||||
|
# Update many-to-many relationships
|
||||||
|
existing_transaction.tags.set(self.tags.all())
|
||||||
|
existing_transaction.entities.set(self.entities.all())
|
||||||
|
|
||||||
|
# Save updated transaction
|
||||||
|
existing_transaction.save()
|
||||||
|
|
||||||
|
def delete_unpaid_transactions(self):
|
||||||
|
"""
|
||||||
|
Deletes all unpaid transactions associated with this RecurringTransaction.
|
||||||
|
"""
|
||||||
|
today = timezone.localdate(timezone.now())
|
||||||
|
self.transactions.filter(is_paid=False, date__gt=today).delete()
|
||||||
|
|||||||
Reference in New Issue
Block a user