diff --git a/app/TransactionRules/Actions/ClearBudget.php b/app/TransactionRules/Actions/ClearBudget.php index 6b62511b86..61a282eae3 100644 --- a/app/TransactionRules/Actions/ClearBudget.php +++ b/app/TransactionRules/Actions/ClearBudget.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; use FireflyIII\Models\RuleAction; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Log; @@ -55,6 +56,13 @@ class ClearBudget implements ActionInterface { $journal->budgets()->detach(); $journal->touch(); + + // also remove categories from transactions: + /** @var Transaction $transaction */ + foreach($journal->transactions as $transaction) { + $transaction->budgets()->detach(); + } + Log::debug(sprintf('RuleAction ClearBudget removed all budgets from journal %d.', $journal->id)); return true; diff --git a/app/TransactionRules/Actions/ClearCategory.php b/app/TransactionRules/Actions/ClearCategory.php index 80aeb088a0..90ec0bb066 100644 --- a/app/TransactionRules/Actions/ClearCategory.php +++ b/app/TransactionRules/Actions/ClearCategory.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; use FireflyIII\Models\RuleAction; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Log; @@ -55,6 +56,13 @@ class ClearCategory implements ActionInterface { $journal->categories()->detach(); $journal->touch(); + + // also remove categories from transactions: + /** @var Transaction $transaction */ + foreach($journal->transactions as $transaction) { + $transaction->categories()->detach(); + } + Log::debug(sprintf('RuleAction ClearCategory removed all categories from journal %d.', $journal->id)); return true; diff --git a/app/TransactionRules/Actions/SetBudget.php b/app/TransactionRules/Actions/SetBudget.php index 795cb61ee6..a015d8a1d9 100644 --- a/app/TransactionRules/Actions/SetBudget.php +++ b/app/TransactionRules/Actions/SetBudget.php @@ -24,6 +24,7 @@ namespace FireflyIII\TransactionRules\Actions; use FireflyIII\Models\Budget; use FireflyIII\Models\RuleAction; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; @@ -87,7 +88,12 @@ class SetBudget implements ActionInterface Log::debug(sprintf('RuleAction SetBudget set the budget of journal #%d to budget #%d ("%s").', $journal->id, $budget->id, $budget->name)); - $journal->budgets()->sync([$budget->id]); + $journal->budgets()->detach(); + // set budget on transactions: + /** @var Transaction $transaction */ + foreach ($journal->transaction as $transaction) { + $transaction->budgets()->sync([$budget->id]); + } $journal->touch(); return true; diff --git a/app/TransactionRules/Actions/SetCategory.php b/app/TransactionRules/Actions/SetCategory.php index 2e052abfa4..ea1953c603 100644 --- a/app/TransactionRules/Actions/SetCategory.php +++ b/app/TransactionRules/Actions/SetCategory.php @@ -24,6 +24,7 @@ namespace FireflyIII\TransactionRules\Actions; use FireflyIII\Models\Category; use FireflyIII\Models\RuleAction; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Log; @@ -56,7 +57,16 @@ class SetCategory implements ActionInterface { $name = $this->action->action_value; $category = Category::firstOrCreateEncrypted(['name' => $name, 'user_id' => $journal->user->id]); - $journal->categories()->sync([$category->id]); + + $journal->categories()->detach(); + // set category on transactions: + /** @var Transaction $transaction */ + foreach ($journal->transaction as $transaction) { + $transaction->categories()->sync([$category->id]); + } + $journal->touch(); + + $journal->touch(); Log::debug(sprintf('RuleAction SetCategory set the category of journal #%d to budget #%d ("%s").', $journal->id, $category->id, $category->name)); diff --git a/tests/Unit/TransactionRules/Actions/ClearCategoryTest.php b/tests/Unit/TransactionRules/Actions/ClearCategoryTest.php index b72082b181..aedee511dd 100644 --- a/tests/Unit/TransactionRules/Actions/ClearCategoryTest.php +++ b/tests/Unit/TransactionRules/Actions/ClearCategoryTest.php @@ -41,7 +41,7 @@ class ClearCategoryTest extends TestCase // associate budget with journal: $journal = TransactionJournal::inRandomOrder()->whereNull('deleted_at')->first(); $category = $journal->user->categories()->first(); - $journal->budgets()->save($category); + $journal->categories()->save($category); $this->assertGreaterThan(0, $journal->categories()->count()); // fire the action: