user(); $visibleClients = $this->hierarchyService ->scopeClientsVisibleTo( Client::query()->with(['invoices', 'invoiceAdjustments', 'customers']), $user ) ->get(); $visibleClientIds = $visibleClients->pluck('id'); $visibleClientQuery = fn (): Builder => Client::query()->whereIn('id', $visibleClientIds); $visibleInvoiceQuery = fn (): Builder => ClientInvoice::query()->whereIn('client_id', $visibleClientIds); $unlinkedPendingInvoiceCount = $user->hasRole('Admin') ? ClientInvoice::query()->whereNull('approved_at')->whereNull('client_id')->count() : 0; $pendingInvoiceCount = $visibleInvoiceQuery() ->whereNull('approved_at') ->count() + $unlinkedPendingInvoiceCount; $pendingActivities = ClientProjectActivities::query() ->whereIn('client_id', $visibleClientIds) ->whereNull('completed_at') ->whereNotNull('estimated_completed_at') ->count(); return Inertia::render('dashboard', [ 'stats' => [ 'totalClients' => $visibleClients->count(), 'pendingInvoices' => $pendingInvoiceCount, 'unlinkedPendingInvoices' => $unlinkedPendingInvoiceCount, 'pendingActivities' => $pendingActivities, 'clientsMissingSqlCode' => $visibleClientQuery() ->where(function (Builder $query) { $query->whereNull('sql_acc_code') ->orWhere('sql_acc_code', ''); }) ->whereDoesntHave('customers', function (Builder $query) { $query->whereNotNull('sql_acc_code') ->where('sql_acc_code', '!=', ''); }) ->count(), ], 'clientStatusCounts' => $visibleClients ->groupBy('status') ->map(fn ($clients) => $clients->count()) ->sortKeys() ->toArray(), 'recentInvoices' => $visibleInvoiceQuery() ->with('client:id,name,customer_id') ->latest('id') ->limit(6) ->get([ 'id', 'client_id', 'invoice_no', 'approved_at', 'management_fee', 'media_fee', 'nett_amount', 'created_at', ]) ->map(fn (ClientInvoice $invoice) => [ 'id' => $invoice->id, 'invoice_no' => $invoice->invoice_no, 'approved_at' => $invoice->approved_at?->toDateTimeString(), 'management_fee' => $invoice->management_fee, 'media_fee' => $invoice->media_fee, 'nett_amount' => $invoice->nett_amount, 'created_at' => $invoice->created_at?->toDateString(), 'client' => $invoice->client, ]) ->values() ->all(), 'pendingActivities' => ClientProjectActivities::query() ->with(['client:id,name,customer_id', 'user:id,name']) ->whereIn('client_id', $visibleClientIds) ->whereNull('completed_at') ->whereNotNull('estimated_completed_at') ->orderBy('estimated_completed_at') ->limit(6) ->get() ->map(fn (ClientProjectActivities $activity) => [ 'id' => $activity->id, 'activity_no' => $activity->activity_no, 'activity_type' => $activity->activity_type, 'task_description' => $activity->task_description, 'estimated_completed_at' => $activity->estimated_completed_at?->toDateString(), 'client' => $activity->client, 'assigned_person' => $activity->user?->name, ]) ->values() ->all(), ]); } }