inRandomOrder(); return $manualJournal->first()->id ?? null; } public function select2Paginate(?string $search): PaginateCollectionAttr { $manualJournal = ManualJournal::selectRaw('id, name as text'); return (new PaginateCollectionAttrBuilder) ->build( $manualJournal, (new PaginateBuilderAttr)->setSearchKeyword($search), new PaginateSchemaManualJournal ); } public function paginate(PaginateBuilderAttr $paginateBuilderAttr): PaginateCollectionAttr { return (new PaginateCollectionAttrBuilder) ->build( ManualJournal::query(), $paginateBuilderAttr, new PaginateSchemaManualJournal ); } public function fetch($id) { return ManualJournal::with('chartOfAccounts')->findOrFail($id); } public function create(ManualJournalAttr $manualJournalAttr) { $manualJournal = ManualJournal::create([ 'manual_journal_date' => formatDate($manualJournalAttr->getManualJournalDate()), 'reference' => $manualJournalAttr->getReference(), 'notes' => $manualJournalAttr->getNotes(), ]); return $this->fetch($manualJournal->id); } public function update(ManualJournalAttr $manualJournalAttr, $id) { $manualJournal = $this->fetch($id); $manualJournal->update([ 'manual_journal_date' => formatDate($manualJournalAttr->getManualJournalDate()), 'reference' => $manualJournalAttr->getReference(), 'notes' => $manualJournalAttr->getNotes(), ]); return $this->fetch($id); } public function delete($id) { $manualJournal = $this->fetch($id); return $manualJournal->delete(); } public function syncChartOfAccounts($id, $coaManualJournalAttrs) { $manualJournal = $this->fetch($id); $pivots = []; foreach ($coaManualJournalAttrs as $coaManualJournalAttr) { $pivots[$coaManualJournalAttr->getChartOfAccountId()] = [ 'user_id' => $coaManualJournalAttr->getUserId(), 'description' => $coaManualJournalAttr->getDescription(), 'tax_id' => $coaManualJournalAttr->getTaxId(), 'tax_rate' => numberOnly($coaManualJournalAttr->getTaxRate()), 'debit' => numberOnly($coaManualJournalAttr->getDebit()), 'credit' => numberOnly($coaManualJournalAttr->getCredit()) ]; } $manualJournal->chartOfAccounts()->sync($pivots); return ManualJournal::with('chartOfAccounts')->find($id); } }