. */ declare(strict_types=1); namespace FireflyIII\Validation; use Illuminate\Validation\Validator; use Log; /** * Trait CurrencyValidation * * This trait contains validation methods that have to do with currencies. */ trait CurrencyValidation { /** * @param Validator $validator * * @return array */ abstract protected function getTransactionsArray(Validator $validator): array; /** * If the transactions contain foreign amounts, there must also be foreign currency information. * * @param Validator $validator */ protected function validateForeignCurrencyInformation(Validator $validator): void { Log::debug('Now in validateForeignCurrencyInformation()'); $transactions = $this->getTransactionsArray($validator); foreach ($transactions as $index => $transaction) { // if foreign amount is present, then the currency must be as well. if (isset($transaction['foreign_amount']) && !(isset($transaction['foreign_currency_id']) || isset($transaction['foreign_currency_code'])) && 0 !== bccomp('0', $transaction['foreign_amount']) ) { $validator->errors()->add( 'transactions.' . $index . '.foreign_amount', (string) trans('validation.require_currency_info') ); } // if the currency is present, then the amount must be present as well. if ((isset($transaction['foreign_currency_id']) || isset($transaction['foreign_currency_code'])) && !isset($transaction['foreign_amount'])) { $validator->errors()->add( 'transactions.' . $index . '.foreign_amount', (string) trans('validation.require_currency_amount') ); } } } }