mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Refresh notes in various actions.
This commit is contained in:
parent
0b45c1aa76
commit
3413b9b5b5
@ -118,11 +118,11 @@ class StoreRequest extends FormRequest
|
|||||||
'rule_group_id' => 'belongsToUser:rule_groups|required_without:rule_group_title',
|
'rule_group_id' => 'belongsToUser:rule_groups|required_without:rule_group_title',
|
||||||
'rule_group_title' => 'nullable|min:1|max:255|required_without:rule_group_id|belongsToUser:rule_groups,title',
|
'rule_group_title' => 'nullable|min:1|max:255|required_without:rule_group_id|belongsToUser:rule_groups,title',
|
||||||
'trigger' => 'required|in:store-journal,update-journal',
|
'trigger' => 'required|in:store-journal,update-journal',
|
||||||
'triggers.*.type' => 'required|in:' . implode(',', $validTriggers),
|
'triggers.*.type' => 'required|in:'.implode(',', $validTriggers),
|
||||||
'triggers.*.value' => 'required_if:actions.*.type,' . $contextTriggers . '|min:1|ruleTriggerValue|max:1024',
|
'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024',
|
||||||
'triggers.*.stop_processing' => [new IsBoolean()],
|
'triggers.*.stop_processing' => [new IsBoolean()],
|
||||||
'triggers.*.active' => [new IsBoolean()],
|
'triggers.*.active' => [new IsBoolean()],
|
||||||
'actions.*.type' => 'required|in:' . implode(',', $validActions),
|
'actions.*.type' => 'required|in:'.implode(',', $validActions),
|
||||||
'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
|
'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
|
||||||
'actions.*.stop_processing' => [new IsBoolean()],
|
'actions.*.stop_processing' => [new IsBoolean()],
|
||||||
'actions.*.active' => [new IsBoolean()],
|
'actions.*.active' => [new IsBoolean()],
|
||||||
|
@ -141,7 +141,7 @@ class UpdateRequest extends FormRequest
|
|||||||
'triggers.*.stop_processing' => [new IsBoolean()],
|
'triggers.*.stop_processing' => [new IsBoolean()],
|
||||||
'triggers.*.active' => [new IsBoolean()],
|
'triggers.*.active' => [new IsBoolean()],
|
||||||
'actions.*.type' => 'required|in:'.implode(',', $validActions),
|
'actions.*.type' => 'required|in:'.implode(',', $validActions),
|
||||||
'actions.*.value' => [sprintf('required_if:actions.*.type,%s',$contextActions), new IsValidActionExpression(), 'ruleActionValue'],
|
'actions.*.value' => [sprintf('required_if:actions.*.type,%s', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
|
||||||
'actions.*.stop_processing' => [new IsBoolean()],
|
'actions.*.stop_processing' => [new IsBoolean()],
|
||||||
'actions.*.active' => [new IsBoolean()],
|
'actions.*.active' => [new IsBoolean()],
|
||||||
'strict' => [new IsBoolean()],
|
'strict' => [new IsBoolean()],
|
||||||
|
@ -26,9 +26,7 @@ namespace FireflyIII\Api\V1\Requests\Models\Rule;
|
|||||||
|
|
||||||
use FireflyIII\Rules\IsValidActionExpression;
|
use FireflyIII\Rules\IsValidActionExpression;
|
||||||
use FireflyIII\Support\Request\ChecksLogin;
|
use FireflyIII\Support\Request\ChecksLogin;
|
||||||
use Illuminate\Contracts\Validation\Validator;
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\ValidationException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ValidateExpressionRequest
|
* Class ValidateExpressionRequest
|
||||||
@ -41,6 +39,4 @@ class ValidateExpressionRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
return ['expression' => ['required', new IsValidActionExpression()]];
|
return ['expression' => ['required', new IsValidActionExpression()]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,6 @@ use Illuminate\Database\Eloquent\Builder;
|
|||||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Log;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FireflyIII\Models\RuleAction
|
* FireflyIII\Models\RuleAction
|
||||||
@ -80,12 +79,14 @@ class RuleAction extends Model
|
|||||||
public function getValue(array $journal): string
|
public function getValue(array $journal): string
|
||||||
{
|
{
|
||||||
if (false === config('firefly.feature_flags.expression_engine')) {
|
if (false === config('firefly.feature_flags.expression_engine')) {
|
||||||
Log::debug('Expression engine is disabled, returning action value as string.');
|
\Log::debug('Expression engine is disabled, returning action value as string.');
|
||||||
|
|
||||||
return (string)$this->action_value;
|
return (string)$this->action_value;
|
||||||
}
|
}
|
||||||
$expr = new ActionExpression($this->action_value);
|
$expr = new ActionExpression($this->action_value);
|
||||||
$result = $expr->evaluate($journal);
|
$result = $expr->evaluate($journal);
|
||||||
Log::debug(sprintf('Expression engine is enabled, result of expression "%s" is "%s".', $this->action_value, $result));
|
\Log::debug(sprintf('Expression engine is enabled, result of expression "%s" is "%s".', $this->action_value, $result));
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,14 +98,14 @@ class RuleAction extends Model
|
|||||||
protected function order(): Attribute
|
protected function order(): Attribute
|
||||||
{
|
{
|
||||||
return Attribute::make(
|
return Attribute::make(
|
||||||
get: static fn($value) => (int)$value,
|
get: static fn ($value) => (int)$value,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function ruleId(): Attribute
|
protected function ruleId(): Attribute
|
||||||
{
|
{
|
||||||
return Attribute::make(
|
return Attribute::make(
|
||||||
get: static fn($value) => (int)$value,
|
get: static fn ($value) => (int)$value,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,8 @@ use FireflyIII\TransactionRules\Traits\RefreshNotesTrait;
|
|||||||
*/
|
*/
|
||||||
class AppendDescription implements ActionInterface
|
class AppendDescription implements ActionInterface
|
||||||
{
|
{
|
||||||
private RuleAction $action;
|
|
||||||
use RefreshNotesTrait;
|
use RefreshNotesTrait;
|
||||||
|
private RuleAction $action;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TriggerInterface constructor.
|
* TriggerInterface constructor.
|
||||||
|
@ -51,6 +51,7 @@ class AppendDescriptionToNotes implements ActionInterface
|
|||||||
public function actOnArray(array $journal): bool
|
public function actOnArray(array $journal): bool
|
||||||
{
|
{
|
||||||
$this->refreshNotes($journal);
|
$this->refreshNotes($journal);
|
||||||
|
|
||||||
/** @var null|TransactionJournal $object */
|
/** @var null|TransactionJournal $object */
|
||||||
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
|
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
|
||||||
if (null === $object) {
|
if (null === $object) {
|
||||||
|
@ -27,6 +27,7 @@ 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;
|
||||||
|
use FireflyIII\TransactionRules\Traits\RefreshNotesTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AppendNotes.
|
* Class AppendNotes.
|
||||||
@ -34,6 +35,7 @@ use FireflyIII\Models\TransactionJournal;
|
|||||||
*/
|
*/
|
||||||
class AppendNotes implements ActionInterface
|
class AppendNotes implements ActionInterface
|
||||||
{
|
{
|
||||||
|
use RefreshNotesTrait;
|
||||||
private RuleAction $action;
|
private RuleAction $action;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,6 +48,7 @@ class AppendNotes implements ActionInterface
|
|||||||
|
|
||||||
public function actOnArray(array $journal): bool
|
public function actOnArray(array $journal): bool
|
||||||
{
|
{
|
||||||
|
$this->refreshNotes($journal);
|
||||||
$dbNote = Note::where('noteable_id', (int)$journal['transaction_journal_id'])
|
$dbNote = Note::where('noteable_id', (int)$journal['transaction_journal_id'])
|
||||||
->where('noteable_type', TransactionJournal::class)
|
->where('noteable_type', TransactionJournal::class)
|
||||||
->first(['notes.*'])
|
->first(['notes.*'])
|
||||||
|
@ -30,6 +30,7 @@ use FireflyIII\Models\Note;
|
|||||||
use FireflyIII\Models\RuleAction;
|
use FireflyIII\Models\RuleAction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Support\Request\ConvertsDataTypes;
|
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||||
|
use FireflyIII\TransactionRules\Traits\RefreshNotesTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AppendNotesToDescription
|
* Class AppendNotesToDescription
|
||||||
@ -38,7 +39,7 @@ use FireflyIII\Support\Request\ConvertsDataTypes;
|
|||||||
class AppendNotesToDescription implements ActionInterface
|
class AppendNotesToDescription implements ActionInterface
|
||||||
{
|
{
|
||||||
use ConvertsDataTypes;
|
use ConvertsDataTypes;
|
||||||
|
use RefreshNotesTrait;
|
||||||
private RuleAction $action;
|
private RuleAction $action;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,6 +53,7 @@ class AppendNotesToDescription implements ActionInterface
|
|||||||
public function actOnArray(array $journal): bool
|
public function actOnArray(array $journal): bool
|
||||||
{
|
{
|
||||||
app('log')->debug('Now in AppendNotesToDescription');
|
app('log')->debug('Now in AppendNotesToDescription');
|
||||||
|
$this->refreshNotes($journal);
|
||||||
|
|
||||||
/** @var null|TransactionJournal $object */
|
/** @var null|TransactionJournal $object */
|
||||||
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
|
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
|
||||||
|
@ -26,12 +26,14 @@ namespace FireflyIII\TransactionRules\Actions;
|
|||||||
use FireflyIII\Events\TriggeredAuditLog;
|
use FireflyIII\Events\TriggeredAuditLog;
|
||||||
use FireflyIII\Models\RuleAction;
|
use FireflyIII\Models\RuleAction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\TransactionRules\Traits\RefreshNotesTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class SetDescription.
|
* Class SetDescription.
|
||||||
*/
|
*/
|
||||||
class SetDescription implements ActionInterface
|
class SetDescription implements ActionInterface
|
||||||
{
|
{
|
||||||
|
use RefreshNotesTrait;
|
||||||
private RuleAction $action;
|
private RuleAction $action;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,6 +46,8 @@ class SetDescription implements ActionInterface
|
|||||||
|
|
||||||
public function actOnArray(array $journal): bool
|
public function actOnArray(array $journal): bool
|
||||||
{
|
{
|
||||||
|
$this->refreshNotes($journal);
|
||||||
|
|
||||||
/** @var TransactionJournal $object */
|
/** @var TransactionJournal $object */
|
||||||
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
|
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
|
||||||
$before = $object->description;
|
$before = $object->description;
|
||||||
|
@ -84,6 +84,7 @@ class SearchRuleEngine implements RuleEngineInterface
|
|||||||
}
|
}
|
||||||
$result = $collection->unique();
|
$result = $collection->unique();
|
||||||
app('log')->debug(sprintf('SearchRuleEngine::find() returns %d unique transactions.', $result->count()));
|
app('log')->debug(sprintf('SearchRuleEngine::find() returns %d unique transactions.', $result->count()));
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -546,6 +547,7 @@ class SearchRuleEngine implements RuleEngineInterface
|
|||||||
$transaction['notes'] = $dbNote->text;
|
$transaction['notes'] = $dbNote->text;
|
||||||
}
|
}
|
||||||
Log::debug(sprintf('Notes of journal #%d filled in.', $transaction['transaction_journal_id']));
|
Log::debug(sprintf('Notes of journal #%d filled in.', $transaction['transaction_journal_id']));
|
||||||
|
|
||||||
return $transaction;
|
return $transaction;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,26 +31,24 @@ class ActionExpressionLanguageProvider implements ExpressionFunctionProviderInte
|
|||||||
{
|
{
|
||||||
public function getFunctions(): array
|
public function getFunctions(): array
|
||||||
{
|
{
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
new ExpressionFunction('constant', function ($str): string {
|
new ExpressionFunction('constant', function ($str): string {
|
||||||
return sprintf('(is_string(%1$s) ? strtolower(%1$s) : %1$s)', $str . '!');
|
return sprintf('(is_string(%1$s) ? strtolower(%1$s) : %1$s)', $str.'!');
|
||||||
}, function ($arguments, $str): string {
|
}, function ($arguments, $str): string {
|
||||||
if (!is_string($str)) {
|
if (!is_string($str)) {
|
||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
return strtolower($str . '!');
|
return strtolower($str.'!');
|
||||||
}),
|
}),
|
||||||
new ExpressionFunction('enum', function ($str): string {
|
new ExpressionFunction('enum', function ($str): string {
|
||||||
return sprintf('(is_string(%1$s) ? strtolower(%1$s) : %1$s)', $str . '?');
|
return sprintf('(is_string(%1$s) ? strtolower(%1$s) : %1$s)', $str.'?');
|
||||||
}, function ($arguments, $str): string {
|
}, function ($arguments, $str): string {
|
||||||
if (!is_string($str)) {
|
if (!is_string($str)) {
|
||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
return strtolower($str) . '?';
|
return strtolower($str).'?';
|
||||||
}),
|
}),
|
||||||
|
|
||||||
ExpressionFunction::fromPhp('substr'),
|
ExpressionFunction::fromPhp('substr'),
|
||||||
|
@ -29,11 +29,6 @@ use Illuminate\Support\Facades\Log;
|
|||||||
|
|
||||||
trait RefreshNotesTrait
|
trait RefreshNotesTrait
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @param array $transaction
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
final protected function refreshNotes(array $transaction): array
|
final protected function refreshNotes(array $transaction): array
|
||||||
{
|
{
|
||||||
$transaction['notes'] = '';
|
$transaction['notes'] = '';
|
||||||
@ -42,7 +37,7 @@ trait RefreshNotesTrait
|
|||||||
$transaction['notes'] = $dbNote->text;
|
$transaction['notes'] = $dbNote->text;
|
||||||
}
|
}
|
||||||
Log::debug(sprintf('Notes of journal #%d refreshed.', $transaction['transaction_journal_id']));
|
Log::debug(sprintf('Notes of journal #%d refreshed.', $transaction['transaction_journal_id']));
|
||||||
|
|
||||||
return $transaction;
|
return $transaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -607,7 +607,6 @@ Route::group(
|
|||||||
Route::put('{rule}', ['uses' => 'UpdateController@update', 'as' => 'update']);
|
Route::put('{rule}', ['uses' => 'UpdateController@update', 'as' => 'update']);
|
||||||
Route::delete('{rule}', ['uses' => 'DestroyController@destroy', 'as' => 'delete']);
|
Route::delete('{rule}', ['uses' => 'DestroyController@destroy', 'as' => 'delete']);
|
||||||
|
|
||||||
|
|
||||||
Route::get('{rule}/test', ['uses' => 'TriggerController@testRule', 'as' => 'test']);
|
Route::get('{rule}/test', ['uses' => 'TriggerController@testRule', 'as' => 'test']);
|
||||||
// TODO give results back
|
// TODO give results back
|
||||||
Route::post('{rule}/trigger', ['uses' => 'TriggerController@triggerRule', 'as' => 'trigger']);
|
Route::post('{rule}/trigger', ['uses' => 'TriggerController@triggerRule', 'as' => 'trigger']);
|
||||||
|
Loading…
Reference in New Issue
Block a user