Migrate actions

This commit is contained in:
James Cole
2022-10-02 06:23:31 +02:00
parent f2f3d69aa8
commit 10d2a91d99
26 changed files with 319 additions and 33 deletions

View File

@@ -74,8 +74,8 @@ class AddTag implements ActionInterface
DB::table('tag_transaction_journal')->insert(['tag_id' => $tag->id, 'transaction_journal_id' => $journal['transaction_journal_id']]); DB::table('tag_transaction_journal')->insert(['tag_id' => $tag->id, 'transaction_journal_id' => $journal['transaction_journal_id']]);
Log::debug(sprintf('RuleAction AddTag. Added tag #%d ("%s") to journal %d.', $tag->id, $tag->tag, $journal['transaction_journal_id'])); Log::debug(sprintf('RuleAction AddTag. Added tag #%d ("%s") to journal %d.', $tag->id, $tag->tag, $journal['transaction_journal_id']));
$journal = TransactionJournal::find($journal['transaction_journal_id']); $journal = TransactionJournal::find($journal['transaction_journal_id']);
// event for audit log entry // event for audit log entry
//// changer, auditable, field, value before, value after
event(new TriggeredAuditLog($this->action->rule, $journal, 'add_tag', null, $tag->tag)); event(new TriggeredAuditLog($this->action->rule, $journal, 'add_tag', null, $tag->tag));
return true; return true;

View File

@@ -23,7 +23,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
/** /**
* Class AppendDescription. * Class AppendDescription.
@@ -50,6 +52,11 @@ class AppendDescription implements ActionInterface
$description = sprintf('%s%s', $journal['description'], $this->action->action_value); $description = sprintf('%s%s', $journal['description'], $this->action->action_value);
DB::table('transaction_journals')->where('id', $journal['transaction_journal_id'])->limit(1)->update(['description' => $description]); DB::table('transaction_journals')->where('id', $journal['transaction_journal_id'])->limit(1)->update(['description' => $description]);
// event for audit log entry
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_description', null, $description));
return true; return true;
} }
} }

View File

@@ -22,12 +22,26 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Note; use FireflyIII\Models\Note;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
class AppendDescriptionToNotes implements ActionInterface class AppendDescriptionToNotes implements ActionInterface
{ {
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
@@ -45,12 +59,17 @@ class AppendDescriptionToNotes implements ActionInterface
$note->noteable()->associate($journal); $note->noteable()->associate($journal);
$note->text = ''; $note->text = '';
} }
$before = $note->text;
if ('' !== $note->text) { if ('' !== $note->text) {
$note->text = trim(sprintf("%s \n%s", $note->text, $journal->description)); $note->text = trim(sprintf("%s \n%s", $note->text, $journal->description));
} }
if ('' === $note->text) { if ('' === $note->text) {
$note->text = (string) $journal->description; $note->text = (string) $journal->description;
} }
$after = $note->text;
// event for audit log entry
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_notes', $before, $after));
$note->save(); $note->save();
return true; return true;

View File

@@ -22,6 +22,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Note; use FireflyIII\Models\Note;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
@@ -32,8 +33,7 @@ use Log;
*/ */
class AppendNotes implements ActionInterface class AppendNotes implements ActionInterface
{ {
/** @var RuleAction The rule action */ private RuleAction $action;
private $action;
/** /**
* TriggerInterface constructor. * TriggerInterface constructor.
@@ -62,10 +62,16 @@ class AppendNotes implements ActionInterface
$dbNote->text = ''; $dbNote->text = '';
} }
Log::debug(sprintf('RuleAction AppendNotes appended "%s" to "%s".', $this->action->action_value, $dbNote->text)); Log::debug(sprintf('RuleAction AppendNotes appended "%s" to "%s".', $this->action->action_value, $dbNote->text));
$before = $dbNote->text;
$text = sprintf('%s%s', $dbNote->text, $this->action->action_value); $text = sprintf('%s%s', $dbNote->text, $this->action->action_value);
$dbNote->text = $text; $dbNote->text = $text;
$dbNote->save(); $dbNote->save();
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_notes', $before, $text));
return true; return true;
} }
} }

View File

@@ -22,10 +22,11 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Note; use FireflyIII\Models\Note;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Support\Steam;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
/** /**
@@ -34,6 +35,19 @@ use Illuminate\Support\Facades\Log;
class AppendNotesToDescription implements ActionInterface class AppendNotesToDescription implements ActionInterface
{ {
use ConvertsDataTypes; use ConvertsDataTypes;
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
@@ -55,9 +69,13 @@ class AppendNotesToDescription implements ActionInterface
} }
// only append if there is something to append // only append if there is something to append
if ('' !== $note->text) { if ('' !== $note->text) {
$before = $journal->description;
$journal->description = trim(sprintf("%s %s", $journal->description, (string) $this->clearString($note->text, false))); $journal->description = trim(sprintf("%s %s", $journal->description, (string) $this->clearString($note->text, false)));
$journal->save(); $journal->save();
Log::debug(sprintf('Journal description is updated to "%s".', $journal->description)); Log::debug(sprintf('Journal description is updated to "%s".', $journal->description));
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_description', $before, $journal->description));
return true; return true;
} }
return false; return false;

View File

@@ -23,6 +23,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
use Log; use Log;
/** /**
@@ -30,14 +33,37 @@ use Log;
*/ */
class ClearBudget implements ActionInterface class ClearBudget implements ActionInterface
{ {
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function actOnArray(array $journal): bool public function actOnArray(array $journal): bool
{ {
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
$budget = $journal->budgets()->first();
if (null === $budget) {
Log::debug(sprintf('RuleAction ClearBudget, no budget in journal #%d.', $journal['transaction_journal_id']));
return false;
}
DB::table('budget_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); DB::table('budget_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete();
Log::debug(sprintf('RuleAction ClearBudget removed all budgets from journal %d.', $journal['transaction_journal_id'])); event(new TriggeredAuditLog($this->action->rule, $journal, 'remove_budget', $budget->name, null));
Log::debug(sprintf('RuleAction ClearBudget removed all budgets from journal #%d.', $journal['transaction_journal_id']));
return true; return true;
} }

View File

@@ -23,6 +23,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
use Log; use Log;
/** /**
@@ -30,14 +33,36 @@ use Log;
*/ */
class ClearCategory implements ActionInterface class ClearCategory implements ActionInterface
{ {
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function actOnArray(array $journal): bool public function actOnArray(array $journal): bool
{ {
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
$category = $journal->categories()->first();
if (null === $category) {
Log::debug(sprintf('RuleAction ClearCategory, no category in journal #%d.', $journal['transaction_journal_id']));
return false;
}
DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete();
Log::debug(sprintf('RuleAction ClearCategory removed all categories from journal %d.', $journal['transaction_journal_id'])); event(new TriggeredAuditLog($this->action->rule, $journal, 'removed_category', $category->name, null));
Log::debug(sprintf('RuleAction ClearCategory removed all categories from journal #%d.', $journal['transaction_journal_id']));
return true; return true;
} }

View File

@@ -23,6 +23,8 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use Log; use Log;
@@ -31,16 +33,38 @@ use Log;
*/ */
class ClearNotes implements ActionInterface class ClearNotes implements ActionInterface
{ {
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function actOnArray(array $journal): bool public function actOnArray(array $journal): bool
{ {
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
$notes = $journal->notes()->first();
if (null === $notes) {
Log::debug(sprintf('RuleAction ClearNotes, journal #%d has no notes.', $journal['transaction_journal_id']));
return false;
}
$before = $notes->text;
DB::table('notes') DB::table('notes')
->where('noteable_id', $journal['transaction_journal_id']) ->where('noteable_id', $journal['transaction_journal_id'])
->where('noteable_type', TransactionJournal::class) ->where('noteable_type', TransactionJournal::class)
->delete(); ->delete();
Log::debug('RuleAction ClearNotes removed all notes.'); Log::debug(sprintf('RuleAction ClearNotes removed all notes from journal #%d.', $journal['transaction_journal_id']));
event(new TriggeredAuditLog($this->action->rule, $journal, 'remove_notes', $before, null));
return true; return true;
} }

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Factory\AccountFactory; use FireflyIII\Factory\AccountFactory;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
@@ -58,7 +59,7 @@ class ConvertToDeposit implements ActionInterface
public function actOnArray(array $journal): bool public function actOnArray(array $journal): bool
{ {
$groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count();
if($groupCount > 1) { if ($groupCount > 1) {
Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to deposit.', $journal['transaction_group_id'])); Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to deposit.', $journal['transaction_group_id']));
return false; return false;
} }
@@ -73,10 +74,14 @@ class ConvertToDeposit implements ActionInterface
if (TransactionType::WITHDRAWAL === $type) { if (TransactionType::WITHDRAWAL === $type) {
Log::debug('Going to transform a withdrawal to a deposit.'); Log::debug('Going to transform a withdrawal to a deposit.');
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $object, 'change_transaction_type', TransactionType::WITHDRAWAL, TransactionType::DEPOSIT));
return $this->convertWithdrawalArray($journal); return $this->convertWithdrawalArray($journal);
} }
if (TransactionType::TRANSFER === $type) { if (TransactionType::TRANSFER === $type) {
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $object, 'change_transaction_type', TransactionType::TRANSFER, TransactionType::DEPOSIT));
Log::debug('Going to transform a transfer to a deposit.'); Log::debug('Going to transform a transfer to a deposit.');
return $this->convertTransferArray($journal); return $this->convertTransferArray($journal);

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
@@ -57,7 +58,7 @@ class ConvertToTransfer implements ActionInterface
public function actOnArray(array $journal): bool public function actOnArray(array $journal): bool
{ {
$groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count();
if($groupCount > 1) { if ($groupCount > 1) {
Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to transfer.', $journal['transaction_group_id'])); Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to transfer.', $journal['transaction_group_id']));
return false; return false;
} }
@@ -90,12 +91,17 @@ class ConvertToTransfer implements ActionInterface
} }
if (TransactionType::WITHDRAWAL === $type) { if (TransactionType::WITHDRAWAL === $type) {
Log::debug('Going to transform a withdrawal to a transfer.'); Log::debug('Going to transform a withdrawal to a transfer.');
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $object, 'change_transaction_type', TransactionType::WITHDRAWAL, TransactionType::TRANSFER));
return $this->convertWithdrawalArray($journal, $asset); return $this->convertWithdrawalArray($journal, $asset);
} }
if (TransactionType::DEPOSIT === $type) { if (TransactionType::DEPOSIT === $type) {
Log::debug('Going to transform a deposit to a transfer.'); Log::debug('Going to transform a deposit to a transfer.');
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $object, 'change_transaction_type', TransactionType::DEPOSIT, TransactionType::TRANSFER));
return $this->convertDepositArray($journal, $asset); return $this->convertDepositArray($journal, $asset);
} }

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Factory\AccountFactory; use FireflyIII\Factory\AccountFactory;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
@@ -57,7 +58,7 @@ class ConvertToWithdrawal implements ActionInterface
public function actOnArray(array $journal): bool public function actOnArray(array $journal): bool
{ {
$groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count();
if($groupCount > 1) { if ($groupCount > 1) {
Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to withdrawal.', $journal['transaction_group_id'])); Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to withdrawal.', $journal['transaction_group_id']));
return false; return false;
} }
@@ -71,11 +72,15 @@ class ConvertToWithdrawal implements ActionInterface
if (TransactionType::DEPOSIT === $type) { if (TransactionType::DEPOSIT === $type) {
Log::debug('Going to transform a deposit to a withdrawal.'); Log::debug('Going to transform a deposit to a withdrawal.');
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $object, 'change_transaction_type', TransactionType::DEPOSIT, TransactionType::WITHDRAWAL));
return $this->convertDepositArray($journal); return $this->convertDepositArray($journal);
} }
if (TransactionType::TRANSFER === $type) { if (TransactionType::TRANSFER === $type) {
Log::debug('Going to transform a transfer to a withdrawal.'); Log::debug('Going to transform a transfer to a withdrawal.');
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $object, 'change_transaction_type', TransactionType::TRANSFER, TransactionType::WITHDRAWAL));
return $this->convertTransferArray($journal); return $this->convertTransferArray($journal);
} }

View File

@@ -22,6 +22,8 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
@@ -33,6 +35,18 @@ use Log;
*/ */
class DeleteTransaction implements ActionInterface class DeleteTransaction implements ActionInterface
{ {
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
@@ -52,6 +66,8 @@ class DeleteTransaction implements ActionInterface
$service = app(TransactionGroupDestroyService::class); $service = app(TransactionGroupDestroyService::class);
$service->destroy($group); $service->destroy($group);
event(new TriggeredAuditLog($this->action->rule, $group, 'delete_group', null, null));
return true; return true;
} }
Log::debug( Log::debug(
@@ -64,6 +80,7 @@ class DeleteTransaction implements ActionInterface
/** @var JournalDestroyService $service */ /** @var JournalDestroyService $service */
$service = app(JournalDestroyService::class); $service = app(JournalDestroyService::class);
$service->destroy($journal); $service->destroy($journal);
event(new TriggeredAuditLog($this->action->rule, $journal, 'delete_journal', null, null));
} }
return true; return true;

View File

@@ -23,7 +23,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType; use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\User; use FireflyIII\User;
@@ -34,8 +36,7 @@ use Log;
*/ */
class LinkToBill implements ActionInterface class LinkToBill implements ActionInterface
{ {
/** @var RuleAction The rule action */ private RuleAction $action;
private $action;
/** /**
* TriggerInterface constructor. * TriggerInterface constructor.
@@ -69,6 +70,9 @@ class LinkToBill implements ActionInterface
sprintf('RuleAction LinkToBill set the bill of journal #%d to bill #%d ("%s").', $journal['transaction_journal_id'], $bill->id, $bill->name) sprintf('RuleAction LinkToBill set the bill of journal #%d to bill #%d ("%s").', $journal['transaction_journal_id'], $bill->id, $bill->name)
); );
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $journal, 'change_bill', null, $bill->id));
return true; return true;
} }

View File

@@ -22,7 +22,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Note; use FireflyIII\Models\Note;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@@ -31,6 +33,20 @@ use Illuminate\Support\Facades\Log;
*/ */
class MoveDescriptionToNotes implements ActionInterface class MoveDescriptionToNotes implements ActionInterface
{ {
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @codeCoverageIgnore
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
@@ -48,14 +64,20 @@ class MoveDescriptionToNotes implements ActionInterface
$note->noteable()->associate($journal); $note->noteable()->associate($journal);
$note->text = ''; $note->text = '';
} }
$before = $note->text;
$beforeDescription = $journal->description;
if ('' !== $note->text) { if ('' !== $note->text) {
$note->text = trim(sprintf("%s \n%s", $note->text, $journal->description)); $note->text = trim(sprintf("%s \n%s", $note->text, $journal->description));
$journal->description = '(no description)'; $journal->description = '(no description)';
} }
if ('' === $note->text) { if ('' === $note->text) {
$note->text = (string) $journal->description; $note->text = (string) $journal->description;
$journal->description = '(no description)'; $journal->description = '(no description)';
} }
$after = $note->text;
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_description', $beforeDescription, $journal->description));
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_notes', $before, $after));
$note->save(); $note->save();
$journal->save(); $journal->save();

View File

@@ -22,6 +22,8 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@@ -30,6 +32,20 @@ class MoveNotesToDescription implements ActionInterface
{ {
use ConvertsDataTypes; use ConvertsDataTypes;
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @codeCoverageIgnore
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
@@ -51,10 +67,15 @@ class MoveNotesToDescription implements ActionInterface
$note->delete(); $note->delete();
return false; return false;
} }
$before = $journal->description;
$beforeNote = $note->text;
$journal->description = (string) $this->clearString($note->text, false); $journal->description = (string) $this->clearString($note->text, false);
$journal->save(); $journal->save();
$note->delete(); $note->delete();
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_description', $before, $journal->description));
event(new TriggeredAuditLog($this->action->rule, $journal, 'remove_notes', $beforeNote, null));
return true; return true;
} }
} }

View File

@@ -23,15 +23,16 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
/** /**
* Class PrependDescription. * Class PrependDescription.
*/ */
class PrependDescription implements ActionInterface class PrependDescription implements ActionInterface
{ {
/** @var RuleAction The rule action */ private RuleAction $action;
private $action;
/** /**
* TriggerInterface constructor. * TriggerInterface constructor.
@@ -48,8 +49,16 @@ class PrependDescription implements ActionInterface
*/ */
public function actOnArray(array $journal): bool public function actOnArray(array $journal): bool
{ {
$description = sprintf('%s%s', $this->action->action_value, $journal['description']); $before = $journal['description'];
DB::table('transaction_journals')->where('id', $journal['transaction_journal_id'])->limit(1)->update(['description' => $description]); $after = sprintf('%s%s', $this->action->action_value, $journal['description']);
DB::table('transaction_journals')->where('id', $journal['transaction_journal_id'])->limit(1)->update(['description' => $after]);
// journal
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
// audit log
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_description', $before, $after));
return true; return true;
} }

View File

@@ -22,6 +22,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Note; use FireflyIII\Models\Note;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
@@ -32,8 +33,7 @@ use Log;
*/ */
class PrependNotes implements ActionInterface class PrependNotes implements ActionInterface
{ {
/** @var RuleAction The rule action */ private RuleAction $action;
private $action;
/** /**
* TriggerInterface constructor. * TriggerInterface constructor.
@@ -61,11 +61,19 @@ class PrependNotes implements ActionInterface
$dbNote->noteable_type = TransactionJournal::class; $dbNote->noteable_type = TransactionJournal::class;
$dbNote->text = ''; $dbNote->text = '';
} }
$before = $dbNote->text;
Log::debug(sprintf('RuleAction PrependNotes prepended "%s" to "%s".', $this->action->action_value, $dbNote->text)); Log::debug(sprintf('RuleAction PrependNotes prepended "%s" to "%s".', $this->action->action_value, $dbNote->text));
$text = sprintf('%s%s', $this->action->action_value, $dbNote->text); $text = sprintf('%s%s', $this->action->action_value, $dbNote->text);
$dbNote->text = $text; $dbNote->text = $text;
$dbNote->save(); $dbNote->save();
// journal
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
// audit log
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_notes', $before, $text));
return true; return true;
} }
} }

View File

@@ -23,6 +23,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
use Log; use Log;
/** /**
@@ -30,6 +33,18 @@ use Log;
*/ */
class RemoveAllTags implements ActionInterface class RemoveAllTags implements ActionInterface
{ {
private RuleAction $action;
/**
* TriggerInterface constructor.
*
* @param RuleAction $action
*/
public function __construct(RuleAction $action)
{
$this->action = $action;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
@@ -38,6 +53,12 @@ class RemoveAllTags implements ActionInterface
Log::debug(sprintf('RuleAction ClearCategory removed all tags from journal %d.', $journal['transaction_journal_id'])); Log::debug(sprintf('RuleAction ClearCategory removed all tags from journal %d.', $journal['transaction_journal_id']));
DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal['transaction_journal_id'])->delete(); DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal['transaction_journal_id'])->delete();
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
// audit log
event(new TriggeredAuditLog($this->action->rule, $journal, 'remove_all_tags', null, null));
return true; return true;
} }

View File

@@ -23,7 +23,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\User; use FireflyIII\User;
use Log; use Log;
@@ -54,18 +56,22 @@ class RemoveTag implements ActionInterface
$user = User::find($journal['user_id']); $user = User::find($journal['user_id']);
$tag = $user->tags()->where('tag', $name)->first(); $tag = $user->tags()->where('tag', $name)->first();
if (null !== $tag) { if (null === $tag) {
Log::debug(sprintf('RuleAction RemoveTag removed tag #%d ("%s") from journal #%d.', $tag->id, $tag->tag, $journal['transaction_journal_id'])); Log::debug(
DB::table('tag_transaction_journal') sprintf('RuleAction RemoveTag tried to remove tag "%s" from journal #%d but no such tag exists.', $name, $journal['transaction_journal_id'])
->where('transaction_journal_id', $journal['transaction_journal_id']) );
->where('tag_id', $tag->id) return false;
->delete();
return true;
} }
Log::debug(
sprintf('RuleAction RemoveTag tried to remove tag "%s" from journal #%d but no such tag exists.', $name, $journal['transaction_journal_id']) Log::debug(sprintf('RuleAction RemoveTag removed tag #%d ("%s") from journal #%d.', $tag->id, $tag->tag, $journal['transaction_journal_id']));
); DB::table('tag_transaction_journal')
->where('transaction_journal_id', $journal['transaction_journal_id'])
->where('tag_id', $tag->id)
->delete();
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $journal, 'remove_tag', $tag->tag, null));
return true; return true;
} }

View File

@@ -23,7 +23,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType; use FireflyIII\Models\TransactionType;
use FireflyIII\User; use FireflyIII\User;
use Log; use Log;
@@ -75,7 +77,7 @@ class SetBudget implements ActionInterface
) )
); );
return true; return false;
} }
Log::debug( Log::debug(
@@ -85,6 +87,10 @@ class SetBudget implements ActionInterface
DB::table('budget_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); DB::table('budget_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete();
DB::table('budget_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'budget_id' => $budget->id]); DB::table('budget_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'budget_id' => $budget->id]);
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $journal, 'set_budget', null, $budget->name));
return true; return true;
} }
} }

View File

@@ -23,8 +23,10 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Factory\CategoryFactory; use FireflyIII\Factory\CategoryFactory;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\User; use FireflyIII\User;
use Log; use Log;
@@ -83,6 +85,10 @@ class SetCategory implements ActionInterface
DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete();
DB::table('category_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'category_id' => $category->id]); DB::table('category_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'category_id' => $category->id]);
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $journal, 'set_category', null, $category->name));
return true; return true;
} }
} }

View File

@@ -23,7 +23,9 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal;
use Log; use Log;
/** /**
@@ -48,6 +50,10 @@ class SetDescription implements ActionInterface
*/ */
public function actOnArray(array $journal): bool public function actOnArray(array $journal): bool
{ {
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
$before = $journal->description;
DB::table('transaction_journals') DB::table('transaction_journals')
->where('id', '=', $journal['transaction_journal_id']) ->where('id', '=', $journal['transaction_journal_id'])
->update(['description' => $this->action->action_value]); ->update(['description' => $this->action->action_value]);
@@ -61,6 +67,8 @@ class SetDescription implements ActionInterface
) )
); );
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_description', $before, $this->action->action_value));
return true; return true;
} }
} }

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\Transaction; use FireflyIII\Models\Transaction;
@@ -89,7 +90,7 @@ class SetDestinationAccount implements ActionInterface
return false; return false;
} }
// account must not be deleted (in the mean time): // account must not be deleted (in the meantime):
if (null === $source->account) { if (null === $source->account) {
Log::error('Could not find source transaction account.'); Log::error('Could not find source transaction account.');
@@ -114,6 +115,8 @@ class SetDestinationAccount implements ActionInterface
Log::debug(sprintf('New destination account is #%d ("%s").', $newAccount->id, $newAccount->name)); Log::debug(sprintf('New destination account is #%d ("%s").', $newAccount->id, $newAccount->name));
event(new TriggeredAuditLog($this->action->rule, $object, 'set_destination', null, $newAccount->name));
// update destination transaction with new destination account: // update destination transaction with new destination account:
DB::table('transactions') DB::table('transactions')
->where('transaction_journal_id', '=', $object->id) ->where('transaction_journal_id', '=', $object->id)

View File

@@ -22,6 +22,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Note; use FireflyIII\Models\Note;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
@@ -68,6 +69,11 @@ class SetNotes implements ActionInterface
) )
); );
/** @var TransactionJournal $journal */
$journal = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
event(new TriggeredAuditLog($this->action->rule, $journal, 'update_notes', $oldNotes, $this->action->action_value));
return true; return true;
} }
} }

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use DB; use DB;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\Transaction; use FireflyIII\Models\Transaction;
@@ -86,7 +87,7 @@ class SetSourceAccount implements ActionInterface
return false; return false;
} }
// account must not be deleted (in the mean time): // account must not be deleted (in the meantime):
if (null === $destination->account) { if (null === $destination->account) {
Log::error('Could not find destination transaction account.'); Log::error('Could not find destination transaction account.');
@@ -117,6 +118,8 @@ class SetSourceAccount implements ActionInterface
->where('amount', '<', 0) ->where('amount', '<', 0)
->update(['account_id' => $newAccount->id]); ->update(['account_id' => $newAccount->id]);
event(new TriggeredAuditLog($this->action->rule, $object, 'set_source', null, $newAccount->name));
Log::debug(sprintf('Updated journal #%d (group #%d) and gave it new source account ID.', $object->id, $object->transaction_group_id)); Log::debug(sprintf('Updated journal #%d (group #%d) and gave it new source account ID.', $object->id, $object->transaction_group_id));
return true; return true;

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\TransactionRules\Actions; namespace FireflyIII\TransactionRules\Actions;
use FireflyIII\Events\TriggeredAuditLog;
use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleAction;
use FireflyIII\Models\Transaction; use FireflyIII\Models\Transaction;
@@ -90,12 +91,16 @@ class UpdatePiggybank implements ActionInterface
Log::debug('Piggy bank account is linked to source, so remove amount.'); Log::debug('Piggy bank account is linked to source, so remove amount.');
$this->removeAmount($journal, $piggyBank, $destination->amount); $this->removeAmount($journal, $piggyBank, $destination->amount);
event(new TriggeredAuditLog($this->action->rule, $journalObj, 'remove_from_piggy', null, ['amount' => $destination->amount, 'piggy' => $piggyBank->name]));
return true; return true;
} }
if ((int) $destination->account_id === (int) $piggyBank->account_id) { if ((int) $destination->account_id === (int) $piggyBank->account_id) {
Log::debug('Piggy bank account is linked to source, so add amount.'); Log::debug('Piggy bank account is linked to source, so add amount.');
$this->addAmount($journal, $piggyBank, $destination->amount); $this->addAmount($journal, $piggyBank, $destination->amount);
event(new TriggeredAuditLog($this->action->rule, $journalObj, 'add_to_piggy', null, ['amount' => $destination->amount, 'piggy' => $piggyBank->name]));
return true; return true;
} }
Log::info( Log::info(