mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-08-29 22:57:17 +02:00
Merge pull request #581 from obervinov/fix/recurring-tags-scheduler
fix: 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 "",
|
notes=self.notes if self.add_notes_to_transaction else "",
|
||||||
owner=self.account.owner,
|
owner=self.account.owner,
|
||||||
)
|
)
|
||||||
created_transaction.tags.set(self.tags.all())
|
# Unfiltered managers: generation also runs without a current user, or with a
|
||||||
created_transaction.entities.set(self.entities.all())
|
# 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):
|
def get_recurrence_delta(self):
|
||||||
if self.recurrence_type == self.RecurrenceType.DAY:
|
if self.recurrence_type == self.RecurrenceType.DAY:
|
||||||
@@ -1030,9 +1032,11 @@ class RecurringTransaction(models.Model):
|
|||||||
self.notes if self.add_notes_to_transaction else ""
|
self.notes if self.add_notes_to_transaction else ""
|
||||||
)
|
)
|
||||||
|
|
||||||
# Update many-to-many relationships
|
# Update many-to-many relationships (see create_transaction)
|
||||||
existing_transaction.tags.set(self.tags.all())
|
existing_transaction.tags.set(self.tags(manager="all_objects").all())
|
||||||
existing_transaction.entities.set(self.entities.all())
|
existing_transaction.entities.set(
|
||||||
|
self.entities(manager="all_objects").all()
|
||||||
|
)
|
||||||
|
|
||||||
# Save updated transaction
|
# Save updated transaction
|
||||||
existing_transaction.save()
|
existing_transaction.save()
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from django.utils import timezone
|
|||||||
from apps.transactions.models import (
|
from apps.transactions.models import (
|
||||||
TransactionCategory,
|
TransactionCategory,
|
||||||
TransactionTag,
|
TransactionTag,
|
||||||
|
TransactionEntity,
|
||||||
Transaction,
|
Transaction,
|
||||||
InstallmentPlan,
|
InstallmentPlan,
|
||||||
RecurringTransaction,
|
RecurringTransaction,
|
||||||
@@ -240,3 +241,27 @@ class RecurringTransactionTests(TestCase):
|
|||||||
self.assertFalse(recurring.is_paused)
|
self.assertFalse(recurring.is_paused)
|
||||||
self.assertEqual(recurring.recurrence_interval, 1)
|
self.assertEqual(recurring.recurrence_interval, 1)
|
||||||
self.assertEqual(recurring.account.currency.code, "USD")
|
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