. */ /** @noinspection MultipleReturnStatementsInspection */ declare(strict_types=1); namespace FireflyIII\Factory; use Carbon\Carbon; use Exception; use FireflyIII\Models\TransactionJournalMeta; use Log; /** * Class TransactionJournalMetaFactory */ class TransactionJournalMetaFactory { /** * @param array $data * * @return TransactionJournalMeta|null */ public function updateOrCreate(array $data): ?TransactionJournalMeta { //Log::debug('In updateOrCreate()'); $value = $data['data']; /** @var TransactionJournalMeta $entry */ $entry = $data['journal']->transactionJournalMeta()->where('name', $data['name'])->first(); if (null === $value && null !== $entry) { //Log::debug('Value is empty, delete meta value.'); try { $entry->delete(); } catch (Exception $e) { // @phpstan-ignore-line Log::error(sprintf('Could not delete transaction journal meta: %s', $e->getMessage())); } return null; } if ($data['data'] instanceof Carbon) { //Log::debug('Is a carbon object.'); $value = $data['data']->toW3cString(); } if ('' === (string)$value) { // Log::debug('Is an empty string.'); // don't store blank strings. if (null !== $entry) { Log::debug('Will not store empty strings, delete meta value'); try { $entry->delete(); } catch (Exception $e) { // @phpstan-ignore-line Log::error(sprintf('Could not delete transaction journal meta: %s', $e->getMessage())); } } return null; } if (null === $entry) { //Log::debug('Will create new object.'); Log::debug(sprintf('Going to create new meta-data entry to store "%s".', $data['name'])); $entry = new TransactionJournalMeta(); $entry->transactionJournal()->associate($data['journal']); $entry->name = $data['name']; } Log::debug('Will update value and return.'); $entry->data = $value; $entry->save(); return $entry; } }