. */ declare(strict_types=1); namespace FireflyIII\Services\Internal\Support; use FireflyIII\Factory\BillFactory; use FireflyIII\Factory\TagFactory; use FireflyIII\Factory\TransactionJournalMetaFactory; use FireflyIII\Models\Note; use FireflyIII\Models\TransactionJournal; use Log; /** * Trait JournalServiceTrait * */ trait JournalServiceTrait { /** * Link tags to journal. * * @param TransactionJournal $journal * @param array $data * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function connectTags(TransactionJournal $journal, array $data): void { /** @var TagFactory $factory */ $factory = app(TagFactory::class); $factory->setUser($journal->user); $set = []; if (!\is_array($data['tags'])) { return; // @codeCoverageIgnore } foreach ($data['tags'] as $string) { if (\strlen($string) > 0) { $tag = $factory->findOrCreate($string); if (null !== $tag) { $set[] = $tag->id; } } } $journal->tags()->sync($set); } /** * Connect bill if present. * * @param TransactionJournal $journal * @param array $data */ protected function connectBill(TransactionJournal $journal, array $data): void { /** @var BillFactory $factory */ $factory = app(BillFactory::class); $factory->setUser($journal->user); $bill = $factory->find($data['bill_id'], $data['bill_name']); if (null !== $bill) { $journal->bill_id = $bill->id; $journal->save(); return; } $journal->bill_id = null; $journal->save(); } /** * @param TransactionJournal $journal * @param array $data * @param string $field */ protected function storeMeta(TransactionJournal $journal, array $data, string $field): void { if (!isset($data[$field])) { Log::debug(sprintf('Want to store meta-field "%s", but no value.', $field)); return; } $set = [ 'journal' => $journal, 'name' => $field, 'data' => (string)$data[$field], ]; Log::debug(sprintf('Going to store meta-field "%s", with value "%s".', $field, (string)$data[$field])); /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $factory->updateOrCreate($set); } /** * @param TransactionJournal $journal * @param string $notes */ protected function storeNote(TransactionJournal $journal, ?string $notes): void { $notes = (string)$notes; if (\strlen($notes) > 0) { $note = $journal->notes()->first(); if (null === $note) { $note = new Note; $note->noteable()->associate($journal); } $note->text = $notes; $note->save(); return; } $note = $journal->notes()->first(); if (null !== $note) { $note->delete(); } } }