user(); $penyewaans = $user->penyewaans() ->with(['kamera', 'lensa']) ->latest() ->get(); $adminNotifications = $user->penyewaans() ->with(['kamera', 'lensa']) ->whereNotNull('admin_catatan') ->latest('updated_at') ->get(); $unreadAdminNotificationIds = $adminNotifications ->whereNull('admin_catatan_read_at') ->pluck('id') ->all(); $loginHistories = $user->loginHistories() ->latest('login_at') ->take(20) ->get(); $paidTransactions = $penyewaans ->filter(fn ($penyewaan) => filled($penyewaan->bukti_pembayaran_path)) ->count(); $nextMemberLevels = [ 'tanpa_member' => 'bronze', 'bronze' => 'silver', 'silver' => 'gold', 'gold' => null, ]; $upgradeTargets = [ 'tanpa_member' => 10, 'bronze' => 20, 'silver' => 30, 'gold' => null, ]; $progressStarts = [ 'tanpa_member' => 0, 'bronze' => 10, 'silver' => 20, 'gold' => 30, ]; $nextMemberLevel = $nextMemberLevels[$user->member_level] ?? null; $nextUpgradeTarget = $upgradeTargets[$user->member_level] ?? null; $progressStart = $progressStarts[$user->member_level] ?? 0; $remainingTransactions = $nextUpgradeTarget === null ? 0 : max($nextUpgradeTarget - $paidTransactions, 0); $upgradeProgressPercent = $nextUpgradeTarget === null ? 100 : (int) round( min( max($paidTransactions - $progressStart, 0) / max($nextUpgradeTarget - $progressStart, 1), 1 ) * 100 ); if ($unreadAdminNotificationIds !== []) { $user->penyewaans() ->whereIn('id', $unreadAdminNotificationIds) ->update(['admin_catatan_read_at' => now()]); } return view('profile', [ 'user' => $user, 'penyewaans' => $penyewaans, 'adminNotifications' => $adminNotifications, 'unreadAdminNotificationCount' => count($unreadAdminNotificationIds), 'loginHistories' => $loginHistories, 'totalPenyewaan' => $penyewaans->count(), 'totalLogin' => $user->loginHistories()->count(), 'penyewaanAktif' => $penyewaans->whereIn('status', ['menunggu', 'disetujui'])->count(), 'paidTransactions' => $paidTransactions, 'nextMemberLevel' => $nextMemberLevel, 'nextUpgradeTarget' => $nextUpgradeTarget, 'remainingTransactions' => $remainingTransactions, 'progressStart' => $progressStart, 'upgradeProgressPercent' => $upgradeProgressPercent, ]); } public function update(Request $request): RedirectResponse { $user = $request->user(); $validated = $request->validate([ 'name' => ['required', 'string', 'max:100'], 'username' => [ 'required', 'string', 'max:50', Rule::unique('users', 'username')->ignore($user->id), ], ]); $user->update($validated); return redirect() ->route('profile') ->with('status', 'Profil berhasil diperbarui.'); } }