diff --git a/app/Http/Controllers/Json/RuleController.php b/app/Http/Controllers/Json/RuleController.php index caab433e7d..1df826f392 100644 --- a/app/Http/Controllers/Json/RuleController.php +++ b/app/Http/Controllers/Json/RuleController.php @@ -72,15 +72,17 @@ class RuleController extends Controller */ public function trigger(Request $request): JsonResponse { - $count = (int) $request->get('count') > 0 ? (int) $request->get('count') : 1; - $keys = array_keys(config('firefly.search.operators')); - $triggers = []; - foreach ($keys as $key) { - if ('user_action' !== $key) { - $triggers[$key] = (string) trans('firefly.rule_trigger_' . $key . '_choice'); + $count = (int) $request->get('count') > 0 ? (int) $request->get('count') : 1; + $operators = config('firefly.search.operators'); + $triggers = []; + foreach ($operators as $key => $operator) { + if ('user_action' !== $key && false === $operator['alias']) { + + $triggers[$key] = (string) trans(sprintf('firefly.rule_trigger_%s_choice', $key)); } } asort($triggers); + var_dump($triggers);exit; try { $view = view('rules.partials.trigger', compact('triggers', 'count'))->render(); @@ -91,6 +93,7 @@ class RuleController extends Controller } // @codeCoverageIgnoreEnd + echo $view;exit; return response()->json(['html' => $view]); } diff --git a/app/Support/Search/OperatorQuerySearch.php b/app/Support/Search/OperatorQuerySearch.php index 434160e27b..d7cbe21639 100644 --- a/app/Support/Search/OperatorQuerySearch.php +++ b/app/Support/Search/OperatorQuerySearch.php @@ -347,6 +347,21 @@ class OperatorQuerySearch implements SearchInterface } break; // + // cash account + // + case 'source_is_cash': + $account = $this->getCashAccount(); + $this->collector->setSourceAccounts(new Collection([$account])); + break; + case 'destination_is_cash': + $account = $this->getCashAccount(); + $this->collector->setDestinationAccounts(new Collection([$account])); + break; + case 'account_is_cash': + $account = $this->getCashAccount(); + $this->collector->setAccounts(new Collection([$account])); + break; + // // description // case 'description_starts': @@ -713,4 +728,12 @@ class OperatorQuerySearch implements SearchInterface { $this->limit = $limit; } + + /** + * @return Account + */ + private function getCashAccount(): Account + { + return $this->accountRepository->getCashAccount(); + } } \ No newline at end of file diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index b17495d5be..03f5776832 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -76,7 +76,7 @@ class FireflyValidator extends Validator { $field = $parameters[1] ?? 'id'; - if (0 === (int)$value) { + if (0 === (int) $value) { return true; } $count = DB::table($parameters[0])->where('user_id', auth()->user()->id)->where($field, $value)->count(); @@ -179,7 +179,7 @@ class FireflyValidator extends Validator $iban = str_replace($search, $replace, $iban); $checksum = bcmod($iban, '97'); - return 1 === (int)$checksum; + return 1 === (int) $checksum; } /** @@ -193,7 +193,7 @@ class FireflyValidator extends Validator /** @var mixed $compare */ $compare = $parameters[0] ?? '0'; - return bccomp((string)$value, (string)$compare) < 0; + return bccomp((string) $value, (string) $compare) < 0; } /** @@ -207,7 +207,7 @@ class FireflyValidator extends Validator /** @var mixed $compare */ $compare = $parameters[0] ?? '0'; - return bccomp((string)$value, (string)$compare) > 0; + return bccomp((string) $value, (string) $compare) > 0; } /** @@ -221,7 +221,7 @@ class FireflyValidator extends Validator { $field = $parameters[1] ?? 'id'; - if (0 === (int)$value) { + if (0 === (int) $value) { return true; } $count = DB::table($parameters[0])->where($field, $value)->count(); @@ -241,7 +241,7 @@ class FireflyValidator extends Validator // first, get the index from this string: $value = $value ?? ''; $parts = explode('.', $attribute); - $index = (int)($parts[1] ?? '0'); + $index = (int) ($parts[1] ?? '0'); // get the name of the trigger from the data array: $actionType = $this->data['actions'][$index]['type'] ?? 'invalid'; @@ -289,6 +289,12 @@ class FireflyValidator extends Validator return null !== $account; } + // must be numeric for piggy bank things: + if ('update_piggy' === $actionType) { + $value = str_replace(',', '.', $value); + return '' !== $value && is_numeric($value); + } + // return true for the rest. return true; } @@ -305,7 +311,7 @@ class FireflyValidator extends Validator { // first, get the index from this string: $parts = explode('.', $attribute); - $index = (int)($parts[1] ?? '0'); + $index = (int) ($parts[1] ?? '0'); // get the name of the trigger from the data array: $triggerType = $this->data['triggers'][$index]['type'] ?? 'invalid'; @@ -337,7 +343,7 @@ class FireflyValidator extends Validator } // if the type is date, the simply try to parse it and throw error when it's bad. - if (in_array($triggerType, ['date_is'], true)) { + if (in_array($triggerType, ['date_is', 'created_on', 'updated_on', 'date_before', 'date_after'], true)) { /** @var ParseDateString $parser */ $parser = app(ParseDateString::class); try { @@ -371,7 +377,7 @@ class FireflyValidator extends Validator { $verify = false; if (isset($this->data['verify_password'])) { - $verify = 1 === (int)$this->data['verify_password']; + $verify = 1 === (int) $this->data['verify_password']; } if ($verify) { /** @var Verifier $service */ @@ -409,7 +415,7 @@ class FireflyValidator extends Validator } $parameterId = $parameters[0] ?? null; if (null !== $parameterId) { - return $this->validateByParameterId((int)$parameterId, $value); + return $this->validateByParameterId((int) $parameterId, $value); } if (isset($this->data['id'])) { return $this->validateByAccountId($value); @@ -428,9 +434,9 @@ class FireflyValidator extends Validator */ public function validateUniqueAccountNumberForUser($attribute, $value, $parameters): bool { - $accountId = (int)($this->data['id'] ?? 0.0); + $accountId = (int) ($this->data['id'] ?? 0.0); if (0 === $accountId) { - $accountId = (int)($parameters[0] ?? 0.0); + $accountId = (int) ($parameters[0] ?? 0.0); } $query = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') @@ -471,15 +477,15 @@ class FireflyValidator extends Validator public function validateUniqueObjectForUser($attribute, $value, $parameters): bool { [$table, $field] = $parameters; - $exclude = (int)($parameters[2] ?? 0.0); + $exclude = (int) ($parameters[2] ?? 0.0); /* * If other data (in $this->getData()) contains * ID field, set that field to be the $exclude. */ $data = $this->getData(); - if (!isset($parameters[2]) && isset($data['id']) && (int)$data['id'] > 0) { - $exclude = (int)$data['id']; + if (!isset($parameters[2]) && isset($data['id']) && (int) $data['id'] > 0) { + $exclude = (int) $data['id']; } @@ -535,7 +541,7 @@ class FireflyValidator extends Validator $query = DB::table('piggy_banks')->whereNull('piggy_banks.deleted_at') ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')->where('accounts.user_id', auth()->user()->id); if (null !== $exclude) { - $query->where('piggy_banks.id', '!=', (int)$exclude); + $query->where('piggy_banks.id', '!=', (int) $exclude); } $set = $query->get(['piggy_banks.*']); @@ -628,7 +634,7 @@ class FireflyValidator extends Validator private function validateByAccountTypeId($value, $parameters): bool { $type = AccountType::find($this->data['account_type_id'])->first(); - $ignore = (int)($parameters[0] ?? 0.0); + $ignore = (int) ($parameters[0] ?? 0.0); /** @var Collection $set */ $set = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get(); @@ -646,7 +652,7 @@ class FireflyValidator extends Validator /** * @param string $value - * @param array $parameters + * @param array $parameters * @param string $type * * @return bool @@ -662,7 +668,7 @@ class FireflyValidator extends Validator /** @var Collection $accountTypes */ $accountTypes = AccountType::whereIn('type', $search)->get(); - $ignore = (int)($parameters[0] ?? 0.0); + $ignore = (int) ($parameters[0] ?? 0.0); $accountTypeIds = $accountTypes->pluck('id')->toArray(); /** @var Collection $set */ $set = auth()->user()->accounts()->whereIn('account_type_id', $accountTypeIds)->where('id', '!=', $ignore)->get(); diff --git a/config/firefly.php b/config/firefly.php index 8390e85b0d..0977b273c7 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -435,8 +435,8 @@ return [ 'append_notes', 'prepend_notes', 'link_to_bill', - //'convert_withdrawal', - //'convert_deposit', + // 'convert_withdrawal', + // 'convert_deposit', 'convert_transfer', ], @@ -491,6 +491,11 @@ return [ 'source_account_is' => ['alias' => false, 'needs_context' => true,], 'from_account_is' => ['alias' => true, 'alias_for' => 'source_account_is', 'needs_context' => true,], + // source or dest is cash account? + 'source_is_cash' => ['alias' => false, 'needs_context' => false], + 'destination_is_cash' => ['alias' => false, 'needs_context' => false], + 'account_is_cash' => ['alias' => false, 'needs_context' => false], + // source account name contains + alias 'source_account_contains' => ['alias' => false, 'needs_context' => true,], 'from_account_contains' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,], @@ -511,7 +516,7 @@ return [ // source account number is 'source_account_nr_is' => ['alias' => false, 'needs_context' => true,], - 'from_account_nr_is' => ['alias' => true, 'needs_context' => true,], + 'from_account_nr_is' => ['alias' => true, 'alias_for' => 'source_account_nr_is', 'needs_context' => true,], // source account number contains 'source_account_nr_contains' => ['alias' => false, 'needs_context' => true,], diff --git a/resources/views/v1/rules/partials/trigger.twig b/resources/views/v1/rules/partials/trigger.twig index 1d2e4e46f4..cef1193bba 100644 --- a/resources/views/v1/rules/partials/trigger.twig +++ b/resources/views/v1/rules/partials/trigger.twig @@ -4,7 +4,7 @@