Files
website/website/app/Http/Controllers/Account/DashboardController.php
Claude Dev cbc706d934 Add recent support tickets section to customer dashboard
Shows the 5 most recent tickets with status/priority chips and relative
timestamps. Includes empty state with Create Ticket button.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:24:09 -05:00

69 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Account;
use App\Http\Controllers\Controller;
use App\Models\SupportTicket;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Inertia\Response;
class DashboardController extends Controller
{
public function index(Request $request): Response
{
$user = $request->user();
$activeServicesCount = $user->services()
->where('status', 'active')
->count();
$activeSubscriptions = $user->subscriptions()
->with('plan')
->whereIn('stripe_status', ['active', 'trialing'])
->latest()
->get();
$activeSubscriptionsCount = $activeSubscriptions->count();
$latestInvoices = $user->invoices()
->latest()
->limit(5)
->get();
$pendingInvoicesAmount = $user->invoices()
->whereIn('status', ['pending', 'overdue'])
->sum('total');
$nextRenewalDate = $user->subscriptions()
->whereIn('stripe_status', ['active', 'trialing'])
->whereNotNull('current_period_end')
->orderBy('current_period_end')
->value('current_period_end');
$openTicketsCount = SupportTicket::query()
->where('user_id', $user->id)
->whereIn('status', ['open', 'in_progress', 'waiting'])
->count();
$recentTickets = SupportTicket::query()
->where('user_id', $user->id)
->latest()
->take(5)
->get(['id', 'subject', 'status', 'priority', 'created_at', 'updated_at']);
return Inertia::render('Dashboard', [
'activeServicesCount' => $activeServicesCount,
'activeSubscriptionsCount' => $activeSubscriptionsCount,
'activeSubscriptions' => $activeSubscriptions,
'latestInvoices' => $latestInvoices,
'pendingInvoicesAmount' => number_format((float) $pendingInvoicesAmount, 2, '.', ''),
'nextRenewalDate' => $nextRenewalDate,
'openTicketsCount' => $openTicketsCount,
'recentTickets' => $recentTickets,
]);
}
}