mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 02:36:28 +00:00 
			
		
		
		
	Various code cleanup.
This commit is contained in:
		| @@ -45,7 +45,7 @@ trait DepositValidation | ||||
|         if (null === $accountId && null === $accountName && null === $accountIban && false === $this->canCreateTypes($validTypes)) { | ||||
|             // if both values are NULL we return false,
 | ||||
|             // because the destination of a deposit can't be created.
 | ||||
|             $this->destError = (string)trans('validation.deposit_dest_need_data'); | ||||
|             $this->destError = (string) trans('validation.deposit_dest_need_data'); | ||||
|             app('log')->error('Both values are NULL, cant create deposit destination.'); | ||||
|             $result = false; | ||||
|         } | ||||
| @@ -60,7 +60,7 @@ trait DepositValidation | ||||
|             $search = $this->findExistingAccount($validTypes, $array); | ||||
|             if (null === $search) { | ||||
|                 app('log')->debug('findExistingAccount() returned NULL, so the result is false.'); | ||||
|                 $this->destError = (string)trans('validation.deposit_dest_bad_data', ['id' => $accountId, 'name' => $accountName]); | ||||
|                 $this->destError = (string) trans('validation.deposit_dest_bad_data', ['id' => $accountId, 'name' => $accountName]); | ||||
|                 $result          = false; | ||||
|             } | ||||
|             if (null !== $search) { | ||||
| @@ -78,6 +78,12 @@ trait DepositValidation | ||||
| 
 | ||||
|     abstract protected function findExistingAccount(array $validTypes, array $data): ?Account; | ||||
| 
 | ||||
|     /** | ||||
|      * Pretty complex unfortunately. | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.NPathComplexity) | ||||
|      * @SuppressWarnings(PHPMD.CyclomaticComplexity) | ||||
|      */ | ||||
|     protected function validateDepositSource(array $array): bool | ||||
|     { | ||||
|         $accountId     = array_key_exists('id', $array) ? $array['id'] : null; | ||||
| @@ -100,7 +106,7 @@ trait DepositValidation | ||||
|             // if both values are NULL return false,
 | ||||
|             // because the source of a deposit can't be created.
 | ||||
|             // (this never happens).
 | ||||
|             $this->sourceError = (string)trans('validation.deposit_source_need_data'); | ||||
|             $this->sourceError = (string) trans('validation.deposit_source_need_data'); | ||||
|             $result            = false; | ||||
|         } | ||||
| 
 | ||||
| @@ -109,7 +115,7 @@ trait DepositValidation | ||||
|             app('log')->debug('Check if there is not already another account with this IBAN'); | ||||
|             $existing = $this->findExistingAccount($validTypes, ['iban' => $accountIban], true); | ||||
|             if (null !== $existing) { | ||||
|                 $this->sourceError = (string)trans('validation.deposit_src_iban_exists'); | ||||
|                 $this->sourceError = (string) trans('validation.deposit_src_iban_exists'); | ||||
| 
 | ||||
|                 return false; | ||||
|             } | ||||
|   | ||||
| @@ -247,7 +247,11 @@ class AccountValidator | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * It's a long and fairly complex method, but I don't mind. | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.CyclomaticComplexity) | ||||
|      * @SuppressWarnings(PHPMD.BooleanArgumentFlag) | ||||
|      * @SuppressWarnings(PHPMD.NPathComplexity) | ||||
|      */ | ||||
|     protected function findExistingAccount(array $validTypes, array $data, bool $inverse = false): ?Account | ||||
|     { | ||||
|   | ||||
| @@ -30,39 +30,42 @@ use Illuminate\Validation\Validator; | ||||
|  */ | ||||
| trait ValidatesAutoBudgetRequest | ||||
| { | ||||
|     /** | ||||
|      * @SuppressWarnings(PHPMD.NPathComplexity) | ||||
|      */ | ||||
|     protected function validateAutoBudgetAmount(Validator $validator): void | ||||
|     { | ||||
|         $data         = $validator->getData(); | ||||
|         $type         = $data['auto_budget_type'] ?? ''; | ||||
|         $amount       = array_key_exists('auto_budget_amount', $data) ? $data['auto_budget_amount'] : null; | ||||
|         $period       = array_key_exists('auto_budget_period', $data) ? $data['auto_budget_period'] : null; | ||||
|         $currencyId   = array_key_exists('auto_budget_currency_id', $data) ? (int)$data['auto_budget_currency_id'] : null; | ||||
|         $currencyId   = array_key_exists('auto_budget_currency_id', $data) ? (int) $data['auto_budget_currency_id'] : null; | ||||
|         $currencyCode = array_key_exists('auto_budget_currency_code', $data) ? $data['auto_budget_currency_code'] : null; | ||||
|         if (is_numeric($type)) { | ||||
|             $type = (int)$type; | ||||
|             $type = (int) $type; | ||||
|         } | ||||
|         if ('' === $type || 0 === $type) { | ||||
|             return; | ||||
|         } | ||||
|         // basic float check:
 | ||||
|         if (!is_numeric($amount)) { | ||||
|             $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget')); | ||||
|             $validator->errors()->add('auto_budget_amount', (string) trans('validation.amount_required_for_auto_budget')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         if (1 !== bccomp((string)$amount, '0')) { | ||||
|             $validator->errors()->add('auto_budget_amount', (string)trans('validation.auto_budget_amount_positive')); | ||||
|         if (1 !== bccomp((string) $amount, '0')) { | ||||
|             $validator->errors()->add('auto_budget_amount', (string) trans('validation.auto_budget_amount_positive')); | ||||
|         } | ||||
|         if ('' === $period) { | ||||
|             $validator->errors()->add('auto_budget_period', (string)trans('validation.auto_budget_period_mandatory')); | ||||
|             $validator->errors()->add('auto_budget_period', (string) trans('validation.auto_budget_period_mandatory')); | ||||
|         } | ||||
|         if (null !== $currencyId && null !== $currencyCode && '' === $currencyCode && 0 === $currencyId) { | ||||
|             $validator->errors()->add('auto_budget_amount', (string)trans('validation.require_currency_info')); | ||||
|             $validator->errors()->add('auto_budget_amount', (string) trans('validation.require_currency_info')); | ||||
|         } | ||||
|         // too big amount
 | ||||
|         if ((int)$amount > 268435456) { | ||||
|             $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget')); | ||||
|         if ((int) $amount > 268435456) { | ||||
|             $validator->errors()->add('auto_budget_amount', (string) trans('validation.amount_required_for_auto_budget')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
|   | ||||
| @@ -88,7 +88,7 @@ trait RecurrenceValidation | ||||
|                 continue; | ||||
|             } | ||||
|             // validate source account.
 | ||||
|             $sourceId    = array_key_exists('source_id', $transaction) ? (int)$transaction['source_id'] : null; | ||||
|             $sourceId    = array_key_exists('source_id', $transaction) ? (int) $transaction['source_id'] : null; | ||||
|             $sourceName  = $transaction['source_name'] ?? null; | ||||
|             $validSource = $accountValidator->validateSource(['id' => $sourceId, 'name' => $sourceName]); | ||||
| 
 | ||||
| @@ -100,7 +100,7 @@ trait RecurrenceValidation | ||||
|                 return; | ||||
|             } | ||||
|             // validate destination account
 | ||||
|             $destinationId    = array_key_exists('destination_id', $transaction) ? (int)$transaction['destination_id'] : null; | ||||
|             $destinationId    = array_key_exists('destination_id', $transaction) ? (int) $transaction['destination_id'] : null; | ||||
|             $destinationName  = $transaction['destination_name'] ?? null; | ||||
|             $validDestination = $accountValidator->validateDestination(['id' => $destinationId, 'name' => $destinationName]); | ||||
|             // do something with result:
 | ||||
| @@ -122,7 +122,7 @@ trait RecurrenceValidation | ||||
|         $repetitions = $data['repetitions'] ?? []; | ||||
|         // need at least one transaction
 | ||||
|         if (!is_countable($repetitions) || 0 === count($repetitions)) { | ||||
|             $validator->errors()->add('repetitions', (string)trans('validation.at_least_one_repetition')); | ||||
|             $validator->errors()->add('repetitions', (string) trans('validation.at_least_one_repetition')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -138,7 +138,7 @@ trait RecurrenceValidation | ||||
|         } | ||||
|         // need at least one transaction
 | ||||
|         if (0 === count($repetitions)) { | ||||
|             $validator->errors()->add('repetitions', (string)trans('validation.at_least_one_repetition')); | ||||
|             $validator->errors()->add('repetitions', (string) trans('validation.at_least_one_repetition')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -153,15 +153,15 @@ trait RecurrenceValidation | ||||
|         $repeatUntil = $data['repeat_until'] ?? null; | ||||
|         if (null !== $repetitions && null !== $repeatUntil) { | ||||
|             // expect a date OR count:
 | ||||
|             $validator->errors()->add('repeat_until', (string)trans('validation.require_repeat_until')); | ||||
|             $validator->errors()->add('nr_of_repetitions', (string)trans('validation.require_repeat_until')); | ||||
|             $validator->errors()->add('repeat_until', (string) trans('validation.require_repeat_until')); | ||||
|             $validator->errors()->add('nr_of_repetitions', (string) trans('validation.require_repeat_until')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public function validateRecurringConfig(Validator $validator): void | ||||
|     { | ||||
|         $data        = $validator->getData(); | ||||
|         $reps        = array_key_exists('nr_of_repetitions', $data) ? (int)$data['nr_of_repetitions'] : null; | ||||
|         $reps        = array_key_exists('nr_of_repetitions', $data) ? (int) $data['nr_of_repetitions'] : null; | ||||
|         $repeatUntil = array_key_exists('repeat_until', $data) ? new Carbon($data['repeat_until']) : null; | ||||
| 
 | ||||
|         if (null === $reps && null === $repeatUntil) { | ||||
| @@ -181,7 +181,7 @@ trait RecurrenceValidation | ||||
|         $data        = $validator->getData(); | ||||
|         $repetitions = $data['repetitions'] ?? []; | ||||
|         if (!is_array($repetitions)) { | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.type', 0), (string)trans('validation.valid_recurrence_rep_type')); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.type', 0), (string) trans('validation.valid_recurrence_rep_type')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
| @@ -200,32 +200,32 @@ trait RecurrenceValidation | ||||
| 
 | ||||
|             switch ($repetition['type'] ?? 'empty') { | ||||
|                 default: | ||||
|                     $validator->errors()->add(sprintf('repetitions.%d.type', $index), (string)trans('validation.valid_recurrence_rep_type')); | ||||
|                     $validator->errors()->add(sprintf('repetitions.%d.type', $index), (string) trans('validation.valid_recurrence_rep_type')); | ||||
| 
 | ||||
|                     return; | ||||
| 
 | ||||
|                 case 'daily': | ||||
|                     $this->validateDaily($validator, $index, (string)$repetition['moment']); | ||||
|                     $this->validateDaily($validator, $index, (string) $repetition['moment']); | ||||
| 
 | ||||
|                     break; | ||||
| 
 | ||||
|                 case 'monthly': | ||||
|                     $this->validateMonthly($validator, $index, (int)$repetition['moment']); | ||||
|                     $this->validateMonthly($validator, $index, (int) $repetition['moment']); | ||||
| 
 | ||||
|                     break; | ||||
| 
 | ||||
|                 case 'ndom': | ||||
|                     $this->validateNdom($validator, $index, (string)$repetition['moment']); | ||||
|                     $this->validateNdom($validator, $index, (string) $repetition['moment']); | ||||
| 
 | ||||
|                     break; | ||||
| 
 | ||||
|                 case 'weekly': | ||||
|                     $this->validateWeekly($validator, $index, (int)$repetition['moment']); | ||||
|                     $this->validateWeekly($validator, $index, (int) $repetition['moment']); | ||||
| 
 | ||||
|                     break; | ||||
| 
 | ||||
|                 case 'yearly': | ||||
|                     $this->validateYearly($validator, $index, (string)$repetition['moment']); | ||||
|                     $this->validateYearly($validator, $index, (string) $repetition['moment']); | ||||
| 
 | ||||
|                     break; | ||||
|             } | ||||
| @@ -238,7 +238,7 @@ trait RecurrenceValidation | ||||
|     protected function validateDaily(Validator $validator, int $index, string $moment): void | ||||
|     { | ||||
|         if ('' !== $moment) { | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string) trans('validation.valid_recurrence_rep_moment')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -248,7 +248,7 @@ trait RecurrenceValidation | ||||
|     protected function validateMonthly(Validator $validator, int $index, int $dayOfMonth): void | ||||
|     { | ||||
|         if ($dayOfMonth < 1 || $dayOfMonth > 31) { | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string) trans('validation.valid_recurrence_rep_moment')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -260,19 +260,19 @@ trait RecurrenceValidation | ||||
|     { | ||||
|         $parameters = explode(',', $moment); | ||||
|         if (2 !== count($parameters)) { | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string) trans('validation.valid_recurrence_rep_moment')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
|         $nthDay    = (int)($parameters[0] ?? 0.0); | ||||
|         $dayOfWeek = (int)($parameters[1] ?? 0.0); | ||||
|         $nthDay    = (int) ($parameters[0] ?? 0.0); | ||||
|         $dayOfWeek = (int) ($parameters[1] ?? 0.0); | ||||
|         if ($nthDay < 1 || $nthDay > 5) { | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string) trans('validation.valid_recurrence_rep_moment')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
|         if ($dayOfWeek < 1 || $dayOfWeek > 7) { | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string) trans('validation.valid_recurrence_rep_moment')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -282,7 +282,7 @@ trait RecurrenceValidation | ||||
|     protected function validateWeekly(Validator $validator, int $index, int $dayOfWeek): void | ||||
|     { | ||||
|         if ($dayOfWeek < 1 || $dayOfWeek > 7) { | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string) trans('validation.valid_recurrence_rep_moment')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -295,10 +295,13 @@ trait RecurrenceValidation | ||||
|             Carbon::createFromFormat('Y-m-d', $moment); | ||||
|         } catch (\InvalidArgumentException $e) { // @phpstan-ignore-line
 | ||||
|             app('log')->debug(sprintf('Invalid argument for Carbon: %s', $e->getMessage())); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); | ||||
|             $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string) trans('validation.valid_recurrence_rep_moment')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @SuppressWarnings(PHPMD.NPathComplexity) | ||||
|      */ | ||||
|     protected function validateTransactionId(Recurrence $recurrence, Validator $validator): void | ||||
|     { | ||||
|         app('log')->debug('Now in validateTransactionId'); | ||||
| @@ -307,7 +310,7 @@ trait RecurrenceValidation | ||||
| 
 | ||||
|         if (0 === $submittedTrCount) { | ||||
|             app('log')->warning('[b] User submitted no transactions.'); | ||||
|             $validator->errors()->add('transactions', (string)trans('validation.at_least_one_transaction')); | ||||
|             $validator->errors()->add('transactions', (string) trans('validation.at_least_one_transaction')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
| @@ -320,16 +323,16 @@ trait RecurrenceValidation | ||||
|                 return; // home safe!
 | ||||
|             } | ||||
|             $id = $first['id']; | ||||
|             if ('' === (string)$id) { | ||||
|             if ('' === (string) $id) { | ||||
|                 app('log')->debug('Single count and empty ID, done.'); | ||||
| 
 | ||||
|                 return; // home safe!
 | ||||
|             } | ||||
|             $integer     = (int)$id; | ||||
|             $integer     = (int) $id; | ||||
|             $secondCount = $recurrence->recurrenceTransactions()->where('recurrences_transactions.id', $integer)->count(); | ||||
|             app('log')->debug(sprintf('Result of ID count: %d', $secondCount)); | ||||
|             if (0 === $secondCount) { | ||||
|                 $validator->errors()->add('transactions.0.id', (string)trans('validation.id_does_not_match', ['id' => $integer])); | ||||
|                 $validator->errors()->add('transactions.0.id', (string) trans('validation.id_does_not_match', ['id' => $integer])); | ||||
|             } | ||||
|             app('log')->debug('Single ID validation done.'); | ||||
| 
 | ||||
| @@ -360,19 +363,19 @@ trait RecurrenceValidation | ||||
|             app('log')->debug(sprintf('Now at %d/%d', $index + 1, $submittedTrCount)); | ||||
|             if (!is_array($transaction)) { | ||||
|                 app('log')->warning('Not an array. Give error.'); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.id', $index), (string)trans('validation.at_least_one_transaction')); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.id', $index), (string) trans('validation.at_least_one_transaction')); | ||||
| 
 | ||||
|                 return; | ||||
|             } | ||||
|             if (!array_key_exists('id', $transaction) && $idsMandatory) { | ||||
|                 app('log')->warning('ID is mandatory but array has no ID.'); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.id', $index), (string)trans('validation.need_id_to_match')); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.id', $index), (string) trans('validation.need_id_to_match')); | ||||
| 
 | ||||
|                 return; | ||||
|             } | ||||
|             if (array_key_exists('id', $transaction)) { // don't matter if $idsMandatory
 | ||||
|                 app('log')->debug('Array has ID.'); | ||||
|                 $idCount = $recurrence->recurrenceTransactions()->where('recurrences_transactions.id', (int)$transaction['id'])->count(); | ||||
|                 $idCount = $recurrence->recurrenceTransactions()->where('recurrences_transactions.id', (int) $transaction['id'])->count(); | ||||
|                 if (0 === $idCount) { | ||||
|                     app('log')->debug('ID does not exist or no match. Count another unmatched ID.'); | ||||
|                     ++$unmatchedIds; | ||||
| @@ -388,7 +391,7 @@ trait RecurrenceValidation | ||||
|         app('log')->debug(sprintf('Submitted: %d. Original: %d. User can submit %d unmatched transactions.', $submittedTrCount, $originalTrCount, $maxUnmatched)); | ||||
|         if ($unmatchedIds > $maxUnmatched) { | ||||
|             app('log')->warning(sprintf('Too many unmatched transactions (%d).', $unmatchedIds)); | ||||
|             $validator->errors()->add('transactions.0.id', (string)trans('validation.too_many_unmatched')); | ||||
|             $validator->errors()->add('transactions.0.id', (string) trans('validation.too_many_unmatched')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
|   | ||||
| @@ -109,7 +109,7 @@ trait TransactionValidation | ||||
| 
 | ||||
|         // need at least one transaction
 | ||||
|         if (0 === count($transactions)) { | ||||
|             $validator->errors()->add('transactions', (string)trans('validation.at_least_one_transaction')); | ||||
|             $validator->errors()->add('transactions', (string) trans('validation.at_least_one_transaction')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -127,7 +127,7 @@ trait TransactionValidation | ||||
|         $transactions = $this->getTransactionsArray($validator); | ||||
|         // need at least one transaction
 | ||||
|         if (0 === count($transactions)) { | ||||
|             $validator->errors()->add('transactions.0.description', (string)trans('validation.at_least_one_transaction')); | ||||
|             $validator->errors()->add('transactions.0.description', (string) trans('validation.at_least_one_transaction')); | ||||
|             app('log')->debug('Added error: at_least_one_transaction.'); | ||||
| 
 | ||||
|             return; | ||||
| @@ -143,7 +143,7 @@ trait TransactionValidation | ||||
|         $transactions = $this->getTransactionsArray($validator); | ||||
|         foreach (array_keys($transactions) as $key) { | ||||
|             if (!is_int($key)) { | ||||
|                 $validator->errors()->add('transactions.0.description', (string)trans('validation.at_least_one_transaction')); | ||||
|                 $validator->errors()->add('transactions.0.description', (string) trans('validation.at_least_one_transaction')); | ||||
|                 app('log')->debug('Added error: at_least_one_transaction.'); | ||||
| 
 | ||||
|                 return; | ||||
| @@ -168,13 +168,13 @@ trait TransactionValidation | ||||
|         } | ||||
|         $unique = array_unique($types); | ||||
|         if (count($unique) > 1) { | ||||
|             $validator->errors()->add('transactions.0.type', (string)trans('validation.transaction_types_equal')); | ||||
|             $validator->errors()->add('transactions.0.type', (string) trans('validation.transaction_types_equal')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
|         $first = $unique[0] ?? 'invalid'; | ||||
|         if ('invalid' === $first) { | ||||
|             $validator->errors()->add('transactions.0.type', (string)trans('validation.invalid_transaction_type')); | ||||
|             $validator->errors()->add('transactions.0.type', (string) trans('validation.invalid_transaction_type')); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @@ -187,14 +187,14 @@ trait TransactionValidation | ||||
|         $transactions = $this->getTransactionsArray($validator); | ||||
|         $types        = []; | ||||
|         foreach ($transactions as $transaction) { | ||||
|             $originalType = $this->getOriginalType((int)($transaction['transaction_journal_id'] ?? 0)); | ||||
|             $originalType = $this->getOriginalType((int) ($transaction['transaction_journal_id'] ?? 0)); | ||||
|             // if type is not set, fall back to the type of the journal, if one is given.
 | ||||
|             $types[] = $transaction['type'] ?? $originalType; | ||||
|         } | ||||
|         $unique = array_unique($types); | ||||
|         if (count($unique) > 1) { | ||||
|             app('log')->warning('Add error for mismatch transaction types.'); | ||||
|             $validator->errors()->add('transactions.0.type', (string)trans('validation.transaction_types_equal')); | ||||
|             $validator->errors()->add('transactions.0.type', (string) trans('validation.transaction_types_equal')); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
| @@ -217,6 +217,9 @@ trait TransactionValidation | ||||
|         return $transactions; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @SuppressWarnings(PHPMD.NPathComplexity) | ||||
|      */ | ||||
|     protected function validateSingleAccount(Validator $validator, int $index, string $transactionType, array $transaction): void | ||||
|     { | ||||
|         app('log')->debug(sprintf('Now in validateSingleAccount(%d)', $index)); | ||||
| @@ -235,10 +238,10 @@ trait TransactionValidation | ||||
|         $accountValidator->setTransactionType($transactionType); | ||||
| 
 | ||||
|         // validate source account.
 | ||||
|         $sourceId     = array_key_exists('source_id', $transaction) ? (int)$transaction['source_id'] : null; | ||||
|         $sourceName   = array_key_exists('source_name', $transaction) ? (string)$transaction['source_name'] : null; | ||||
|         $sourceIban   = array_key_exists('source_iban', $transaction) ? (string)$transaction['source_iban'] : null; | ||||
|         $sourceNumber = array_key_exists('source_number', $transaction) ? (string)$transaction['source_number'] : null; | ||||
|         $sourceId     = array_key_exists('source_id', $transaction) ? (int) $transaction['source_id'] : null; | ||||
|         $sourceName   = array_key_exists('source_name', $transaction) ? (string) $transaction['source_name'] : null; | ||||
|         $sourceIban   = array_key_exists('source_iban', $transaction) ? (string) $transaction['source_iban'] : null; | ||||
|         $sourceNumber = array_key_exists('source_number', $transaction) ? (string) $transaction['source_number'] : null; | ||||
|         $source       = [ | ||||
|             'id'     => $sourceId, | ||||
|             'name'   => $sourceName, | ||||
| @@ -255,10 +258,10 @@ trait TransactionValidation | ||||
|             return; | ||||
|         } | ||||
|         // validate destination account
 | ||||
|         $destinationId     = array_key_exists('destination_id', $transaction) ? (int)$transaction['destination_id'] : null; | ||||
|         $destinationName   = array_key_exists('destination_name', $transaction) ? (string)$transaction['destination_name'] : null; | ||||
|         $destinationIban   = array_key_exists('destination_iban', $transaction) ? (string)$transaction['destination_iban'] : null; | ||||
|         $destinationNumber = array_key_exists('destination_number', $transaction) ? (string)$transaction['destination_number'] : null; | ||||
|         $destinationId     = array_key_exists('destination_id', $transaction) ? (int) $transaction['destination_id'] : null; | ||||
|         $destinationName   = array_key_exists('destination_name', $transaction) ? (string) $transaction['destination_name'] : null; | ||||
|         $destinationIban   = array_key_exists('destination_iban', $transaction) ? (string) $transaction['destination_iban'] : null; | ||||
|         $destinationNumber = array_key_exists('destination_number', $transaction) ? (string) $transaction['destination_number'] : null; | ||||
|         $destination       = [ | ||||
|             'id'     => $destinationId, | ||||
|             'name'   => $destinationName, | ||||
| @@ -335,7 +338,7 @@ trait TransactionValidation | ||||
|             || array_key_exists('source_number', $transaction) | ||||
|         ) { | ||||
|             app('log')->debug('Will try to validate source account information.'); | ||||
|             $sourceId     = (int)($transaction['source_id'] ?? 0); | ||||
|             $sourceId     = (int) ($transaction['source_id'] ?? 0); | ||||
|             $sourceName   = $transaction['source_name'] ?? null; | ||||
|             $sourceIban   = $transaction['source_iban'] ?? null; | ||||
|             $sourceNumber = $transaction['source_number'] ?? null; | ||||
| @@ -374,7 +377,7 @@ trait TransactionValidation | ||||
|                     $accountValidator->source = $source; | ||||
|                 } | ||||
|             } | ||||
|             $destinationId     = (int)($transaction['destination_id'] ?? 0); | ||||
|             $destinationId     = (int) ($transaction['destination_id'] ?? 0); | ||||
|             $destinationName   = $transaction['destination_name'] ?? null; | ||||
|             $destinationIban   = $transaction['destination_iban'] ?? null; | ||||
|             $destinationNumber = $transaction['destination_number'] ?? null; | ||||
| @@ -395,6 +398,7 @@ trait TransactionValidation | ||||
|      * TODO describe this method. | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.ExcessiveParameterList) | ||||
|      * @SuppressWarnings(PHPMD.NPathComplexity) | ||||
|      */ | ||||
|     private function sanityCheckForeignCurrency( | ||||
|         Validator        $validator, | ||||
| @@ -455,17 +459,17 @@ trait TransactionValidation | ||||
| 
 | ||||
|             // no foreign currency information is present:
 | ||||
|             if (!$this->hasForeignCurrencyInfo($transaction)) { | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string)trans('validation.require_foreign_currency')); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string) trans('validation.require_foreign_currency')); | ||||
| 
 | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             // wrong currency information is present
 | ||||
|             $foreignCurrencyCode = $transaction['foreign_currency_code'] ?? false; | ||||
|             $foreignCurrencyId   = (int)($transaction['foreign_currency_id'] ?? 0); | ||||
|             $foreignCurrencyId   = (int) ($transaction['foreign_currency_id'] ?? 0); | ||||
|             app('log')->debug(sprintf('Foreign currency code seems to be #%d "%s"', $foreignCurrencyId, $foreignCurrencyCode), $transaction); | ||||
|             if ($foreignCurrencyCode !== $sourceCurrency->code && $foreignCurrencyId !== $sourceCurrency->id) { | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.foreign_currency_code', $index), (string)trans('validation.require_foreign_src')); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.foreign_currency_code', $index), (string) trans('validation.require_foreign_src')); | ||||
| 
 | ||||
|                 return; | ||||
|             } | ||||
| @@ -482,19 +486,19 @@ trait TransactionValidation | ||||
| 
 | ||||
|             // no foreign currency information is present:
 | ||||
|             if (!$this->hasForeignCurrencyInfo($transaction)) { | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string)trans('validation.require_foreign_currency')); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string) trans('validation.require_foreign_currency')); | ||||
| 
 | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             // wrong currency information is present
 | ||||
|             $foreignCurrencyCode = $transaction['foreign_currency_code'] ?? false; | ||||
|             $foreignCurrencyId   = (int)($transaction['foreign_currency_id'] ?? 0); | ||||
|             $foreignCurrencyId   = (int) ($transaction['foreign_currency_id'] ?? 0); | ||||
|             app('log')->debug(sprintf('Foreign currency code seems to be #%d "%s"', $foreignCurrencyId, $foreignCurrencyCode), $transaction); | ||||
|             if ($foreignCurrencyCode !== $destinationCurrency->code && $foreignCurrencyId !== $destinationCurrency->id) { | ||||
|                 app('log')->debug(sprintf('No match on code, "%s" vs "%s"', $foreignCurrencyCode, $destinationCurrency->code)); | ||||
|                 app('log')->debug(sprintf('No match on ID, #%d vs #%d', $foreignCurrencyId, $destinationCurrency->id)); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string)trans('validation.require_foreign_dest')); | ||||
|                 $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string) trans('validation.require_foreign_dest')); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -541,7 +545,7 @@ trait TransactionValidation | ||||
| 
 | ||||
|     private function getTransactionType(TransactionGroup $group, array $transactions): string | ||||
|     { | ||||
|         return $transactions[0]['type'] ?? strtolower((string)$group->transactionJournals()->first()?->transactionType->type); | ||||
|         return $transactions[0]['type'] ?? strtolower((string) $group->transactionJournals()->first()?->transactionType->type); | ||||
|     } | ||||
| 
 | ||||
|     private function getOriginalSource(array $transaction, TransactionGroup $transactionGroup): ?Account | ||||
| @@ -554,7 +558,7 @@ trait TransactionValidation | ||||
| 
 | ||||
|         /** @var TransactionJournal $journal */ | ||||
|         foreach ($transactionGroup->transactionJournals as $journal) { | ||||
|             $journalId = (int)($transaction['transaction_journal_id'] ?? 0); | ||||
|             $journalId = (int) ($transaction['transaction_journal_id'] ?? 0); | ||||
|             if ($journal->id === $journalId) { | ||||
|                 return $journal->transactions()->where('amount', '<', 0)->first()?->account; | ||||
|             } | ||||
| @@ -604,22 +608,22 @@ trait TransactionValidation | ||||
|             default: | ||||
|             case 'withdrawal': | ||||
|                 if (count($sources) > 1) { | ||||
|                     $validator->errors()->add('transactions.0.source_id', (string)trans('validation.all_accounts_equal')); | ||||
|                     $validator->errors()->add('transactions.0.source_id', (string) trans('validation.all_accounts_equal')); | ||||
|                 } | ||||
| 
 | ||||
|                 break; | ||||
| 
 | ||||
|             case 'deposit': | ||||
|                 if (count($dests) > 1) { | ||||
|                     $validator->errors()->add('transactions.0.destination_id', (string)trans('validation.all_accounts_equal')); | ||||
|                     $validator->errors()->add('transactions.0.destination_id', (string) trans('validation.all_accounts_equal')); | ||||
|                 } | ||||
| 
 | ||||
|                 break; | ||||
| 
 | ||||
|             case'transfer': | ||||
|                 if (count($sources) > 1 || count($dests) > 1) { | ||||
|                     $validator->errors()->add('transactions.0.source_id', (string)trans('validation.all_accounts_equal')); | ||||
|                     $validator->errors()->add('transactions.0.destination_id', (string)trans('validation.all_accounts_equal')); | ||||
|                     $validator->errors()->add('transactions.0.source_id', (string) trans('validation.all_accounts_equal')); | ||||
|                     $validator->errors()->add('transactions.0.destination_id', (string) trans('validation.all_accounts_equal')); | ||||
|                 } | ||||
| 
 | ||||
|                 break; | ||||
| @@ -653,14 +657,14 @@ trait TransactionValidation | ||||
|         $result     = $this->compareAccountData($type, $comparison); | ||||
|         if (false === $result) { | ||||
|             if ('withdrawal' === $type) { | ||||
|                 $validator->errors()->add('transactions.0.source_id', (string)trans('validation.all_accounts_equal')); | ||||
|                 $validator->errors()->add('transactions.0.source_id', (string) trans('validation.all_accounts_equal')); | ||||
|             } | ||||
|             if ('deposit' === $type) { | ||||
|                 $validator->errors()->add('transactions.0.destination_id', (string)trans('validation.all_accounts_equal')); | ||||
|                 $validator->errors()->add('transactions.0.destination_id', (string) trans('validation.all_accounts_equal')); | ||||
|             } | ||||
|             if ('transfer' === $type) { | ||||
|                 $validator->errors()->add('transactions.0.source_id', (string)trans('validation.all_accounts_equal')); | ||||
|                 $validator->errors()->add('transactions.0.destination_id', (string)trans('validation.all_accounts_equal')); | ||||
|                 $validator->errors()->add('transactions.0.source_id', (string) trans('validation.all_accounts_equal')); | ||||
|                 $validator->errors()->add('transactions.0.destination_id', (string) trans('validation.all_accounts_equal')); | ||||
|             } | ||||
|             app('log')->warning('Add error about equal accounts.'); | ||||
| 
 | ||||
| @@ -679,7 +683,7 @@ trait TransactionValidation | ||||
|             /** @var array $transaction */ | ||||
|             foreach ($transactions as $transaction) { | ||||
|                 // source or destination may be omitted. If this is the case, use the original source / destination name + ID.
 | ||||
|                 $originalData = $this->getOriginalData((int)($transaction['transaction_journal_id'] ?? 0)); | ||||
|                 $originalData = $this->getOriginalData((int) ($transaction['transaction_journal_id'] ?? 0)); | ||||
| 
 | ||||
|                 // get field.
 | ||||
|                 $comparison[$field][] = $transaction[$field] ?? $originalData[$field]; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user