. */ declare(strict_types=1); namespace FireflyIII\Repositories\TransactionGroup; use Carbon\Carbon; use DB; use Exception; use FireflyIII\Models\Note; use FireflyIII\Models\TransactionJournal; use FireflyIII\Support\NullArrayObject; /** * Class TransactionGroupRepository */ class TransactionGroupRepository implements TransactionGroupRepositoryInterface { /** * Constructor. */ public function __construct() { if ('testing' === config('app.env')) { app('log')->warning(sprintf('%s should not be instantiated in the TEST environment!', \get_class($this))); } } /** * Return object with all found meta field things as Carbon objects. * * @param int $journalId * @param array $fields * * @return NullArrayObject * @throws Exception */ public function getMetaDateFields(int $journalId, array $fields): NullArrayObject { $query = DB ::table('journal_meta') ->where('transaction_journal_id', $journalId) ->whereIn('name', $fields) ->get(['name', 'data']); $return = []; foreach ($query as $row) { $return[$row->name] = new Carbon(json_decode($row->data)); } return new NullArrayObject($return); } /** * Return object with all found meta field things. * * @param int $journalId * @param array $fields * * @return NullArrayObject */ public function getMetaFields(int $journalId, array $fields): NullArrayObject { $query = DB ::table('journal_meta') ->where('transaction_journal_id', $journalId) ->whereIn('name', $fields) ->get(['name', 'data']); $return = []; foreach ($query as $row) { $return[$row->name] = json_decode($row->data); } return new NullArrayObject($return); } /** * Get the note text for a journal (by ID). * * @param int $journalId * * @return string|null */ public function getNoteText(int $journalId): ?string { /** @var Note $note */ $note = Note ::where('noteable_id', $journalId) ->where('noteable_type', TransactionJournal::class) ->first(); if (null === $note) { return null; } return $note->text; } /** * Get the tags for a journal (by ID). * * @param int $journalId * * @return array */ public function getTags(int $journalId): array { $result = DB ::table('tag_transaction_journal') ->leftJoin('tags', 'tag_transaction_journal.tag_id', '=', 'tags.id') ->where('tag_transaction_journal.transaction_journal_id', $journalId) ->get(['tags.tag']); return $result->pluck('tag')->toArray(); } }