. */ declare(strict_types=1); namespace FireflyIII\Validation\Account; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use Log; /** * Trait LiabilityValidation */ trait LiabilityValidation { /** * @param array $array * * @return bool */ protected function validateLCDestination(array $array): bool { Log::debug('Now in validateLCDestination', $array); $result = null; $accountId = array_key_exists('id', $array) ? $array['id'] : null; $accountName = array_key_exists('name', $array) ? $array['name'] : null; $validTypes = config('firefly.valid_liabilities'); // if the ID is not null the source account should be a dummy account of the type liability credit. // the ID of the destination must belong to a liability. if (null !== $accountId) { if (AccountType::LIABILITY_CREDIT !== $this?->source?->accountType?->type) { Log::error('Source account is not a liability.'); return false; } $result = $this->findExistingAccount($validTypes, $array); if (null === $result) { Log::error('Destination account is not a liability.'); return false; } return true; } if (null !== $accountName && '' !== $accountName) { Log::debug('Destination ID is null, now we can assume the destination is a (new) liability credit account.'); return true; } Log::error('Destination ID is null, but destination name is also NULL.'); return false; } /** * Source of a liability credit must be a liability or liability credit account. * * @param array $array * * @return bool */ protected function validateLCSource(array $array): bool { Log::debug('Now in validateLCSource', $array); // if the array has an ID and ID is not null, try to find it and check type. // this account must be a liability $accountId = array_key_exists('id', $array) ? $array['id'] : null; if (null !== $accountId) { Log::debug('Source ID is not null, assume were looking for a liability.'); // find liability credit: $result = $this->findExistingAccount(config('firefly.valid_liabilities'), $array); if (null === $result) { Log::error('Did not find a liability account, return false.'); return false; } Log::debug(sprintf('Return true, found #%d ("%s")', $result->id, $result->name)); $this->source = $result; return true; } // if array has name and is not null, return true. $accountName = array_key_exists('name', $array) ? $array['name'] : null; $result = true; if ('' === $accountName || null === $accountName) { Log::error('Array must have a name, is not the case, return false.'); $result = false; } if (true === $result) { Log::error('Array has a name, return true.'); // set the source to be a (dummy) revenue account. $account = new Account(); $accountType = AccountType::whereType(AccountType::LIABILITY_CREDIT)->first(); $account->accountType = $accountType; $this->source = $account; } return $result; } }