where('status', TransactionStatus::COMPLETED->value) ->sum('amount'); return response()->json([ 'error' => false, 'data' => [ 'total_customers' => $total_customers, 'total_deposits' => $total_deposits, ], ]); } public function monthlyStats(Request $request): JsonResponse { $year = $request->integer('year', now()->year); $deposits = Transaction::where('type', 'manual') ->where('status', TransactionStatus::COMPLETED->value) ->whereYear('created_at', $year) ->selectRaw('MONTH(created_at) as month, SUM(amount) as total_deposits') ->groupBy('month') ->pluck('total_deposits', 'month'); $newCustomers = Customer::whereYear('created_at', $year) ->selectRaw('MONTH(created_at) as month, COUNT(*) as new_customers') ->groupBy('month') ->pluck('new_customers', 'month'); $months = ['T1', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7', 'T8', 'T9', 'T10', 'T11', 'T12']; $data = collect(range(1, 12))->map(function ($m) use ($months, $deposits, $newCustomers) { return [ 'month' => $months[$m - 1], 'deposits' => (float) ($deposits[$m] ?? 0), 'new_customers' => (int) ($newCustomers[$m] ?? 0), ]; })->values(); return response()->json([ 'error' => false, 'data' => $data, ]); } public function latestCustomers(): JsonResponse { $customers = Customer::orderByDesc('created_at') ->limit(5) ->get(['id', 'uuid', 'fullname', 'email', 'total', 'created_at']); return response()->json([ 'error' => false, 'data' => [ 'items' => $customers->map(fn(Customer $c) => [ 'id' => $c->id, 'uuid' => $c->uuid, 'fullname' => $c->fullname, 'email' => $c->email, 'total' => (float) $c->total, 'created_at' => $c->created_at?->toISOString(), ])->values(), 'total' => Customer::count(), ], ]); } }