mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-08-25 21:04:07 +02:00
fix(transactions): recurring tags and entities dropped when generated for another user
This commit is contained in:
@@ -937,8 +937,10 @@ class RecurringTransaction(models.Model):
|
||||
notes=self.notes if self.add_notes_to_transaction else "",
|
||||
owner=self.account.owner,
|
||||
)
|
||||
created_transaction.tags.set(self.tags.all())
|
||||
created_transaction.entities.set(self.entities.all())
|
||||
# Unfiltered managers: generation also runs without a current user, or with a
|
||||
# different one, and the scoped default manager would hide private rows.
|
||||
created_transaction.tags.set(self.tags(manager="all_objects").all())
|
||||
created_transaction.entities.set(self.entities(manager="all_objects").all())
|
||||
|
||||
def get_recurrence_delta(self):
|
||||
if self.recurrence_type == self.RecurrenceType.DAY:
|
||||
@@ -1030,9 +1032,11 @@ class RecurringTransaction(models.Model):
|
||||
self.notes if self.add_notes_to_transaction else ""
|
||||
)
|
||||
|
||||
# Update many-to-many relationships
|
||||
existing_transaction.tags.set(self.tags.all())
|
||||
existing_transaction.entities.set(self.entities.all())
|
||||
# Update many-to-many relationships (see create_transaction)
|
||||
existing_transaction.tags.set(self.tags(manager="all_objects").all())
|
||||
existing_transaction.entities.set(
|
||||
self.entities(manager="all_objects").all()
|
||||
)
|
||||
|
||||
# Save updated transaction
|
||||
existing_transaction.save()
|
||||
|
||||
@@ -7,6 +7,7 @@ from django.utils import timezone
|
||||
from apps.transactions.models import (
|
||||
TransactionCategory,
|
||||
TransactionTag,
|
||||
TransactionEntity,
|
||||
Transaction,
|
||||
InstallmentPlan,
|
||||
RecurringTransaction,
|
||||
@@ -240,3 +241,27 @@ class RecurringTransactionTests(TestCase):
|
||||
self.assertFalse(recurring.is_paused)
|
||||
self.assertEqual(recurring.recurrence_interval, 1)
|
||||
self.assertEqual(recurring.account.currency.code, "USD")
|
||||
|
||||
def test_generate_upcoming_transactions_keeps_tags_and_entities(self):
|
||||
"""Generation must copy tags/entities even with no current user"""
|
||||
tag = TransactionTag.objects.create(name="Essential")
|
||||
entity = TransactionEntity.objects.create(name="Landlord")
|
||||
recurring = RecurringTransaction.objects.create(
|
||||
account=self.account,
|
||||
type=Transaction.Type.EXPENSE,
|
||||
amount=Decimal("100.00"),
|
||||
description="Monthly Payment",
|
||||
start_date=timezone.now().date(),
|
||||
recurrence_type=RecurringTransaction.RecurrenceType.MONTH,
|
||||
recurrence_interval=1,
|
||||
)
|
||||
recurring.tags.set([tag])
|
||||
recurring.entities.set([entity])
|
||||
|
||||
RecurringTransaction.generate_upcoming_transactions()
|
||||
|
||||
generated = Transaction.all_objects.filter(recurring_transaction=recurring)
|
||||
self.assertTrue(generated.exists())
|
||||
for transaction in generated:
|
||||
self.assertIn(tag, transaction.tags(manager="all_objects").all())
|
||||
self.assertIn(entity, transaction.entities(manager="all_objects").all())
|
||||
|
||||
Reference in New Issue
Block a user