clientId = request()->integer('client_id'); } public function getBreadcrumbs(): array { $client = $this->getClient(); if (! $client) { return parent::getBreadcrumbs(); } return [ ClientResource::getUrl('view', ['record' => $client->id]) => $client->company, ClientResource::getUrl('view', ['record' => $client->id]).'?activeRelationManager=4' => 'Expenses', $this->getResource()::getUrl('create', ['client_id' => $client->id]) => 'Create', ]; } protected function getClient(): Client|null { if (! $this->clientId) { return null; } return Client::find($this->clientId); } protected function mutateFormDataBeforeCreate(array $data): array { return $this->getFormDataMutation($data); } public function getFormDataMutation(array $data): array { $transactions = $data['transactions'] ?? []; $data['gross_amount'] = collect($transactions)->sum(fn (array $transaction) => (float) ($transaction['gross_amount'] ?? 0)); $data['exempt'] = collect($transactions)->sum(fn (array $transaction) => (float) ($transaction['exempt'] ?? 0)); $data['zero_rated'] = collect($transactions)->sum(fn (array $transaction) => (float) ($transaction['zero_rated'] ?? 0)); $data['vatable_amount'] = collect($transactions)->sum(fn (array $transaction) => (float) ($transaction['vatable_amount'] ?? 0)); $data['input_tax'] = collect($transactions)->sum(fn (array $transaction) => (float) ($transaction['input_tax'] ?? 0)); $data['payable_withholding_tax'] = collect($transactions)->sum(fn (array $transaction) => (float) ($transaction['payable_withholding_tax'] ?? 0)); $data['net_amount'] = collect($transactions)->sum(fn (array $transaction) => (float) ($transaction['net_amount'] ?? 0)); return Arr::except($data, ['client', 'transactions']); } protected function afterCreate(): void { $transactions = $this->form->getState()['transactions'] ?? []; try { app(CreateRecordTransactionsAction::class)($this->getRecord(), $transactions); $accountIds = collect($transactions) ->pluck('account_id') ->filter() ->unique() ->values() ->all(); $this->getRecord()->accounts()->sync($accountIds); $this->commitDatabaseTransaction(); } catch (Exception $exception) { $this->rollBackDatabaseTransaction(); throw new LogicException('Failed to save transactions : '.$exception->getMessage()); } } }