Add upcoming renewals page with days-until-renewal indicators

Shows subscriptions nearing renewal with color-coded urgency chips,
auto-renew status, and quick manage links.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Claude Dev
2026-02-09 20:37:15 -05:00
parent edf428215f
commit dd558d5dcc
5 changed files with 329 additions and 0 deletions

View File

@@ -142,6 +142,39 @@ class BillingController extends Controller
]);
}
public function upcomingRenewals(Request $request): Response
{
$user = $request->user();
$renewals = $user->subscriptions()
->with('plan')
->whereIn('stripe_status', ['active', 'trialing'])
->whereNotNull('current_period_end')
->orderBy('current_period_end')
->get()
->map(function ($subscription) use ($user) {
$service = $user->services()
->where('subscription_id', $subscription->id)
->first();
return [
'id' => $subscription->id,
'plan_name' => $subscription->plan?->name ?? $subscription->type,
'plan_price' => $subscription->plan?->price,
'billing_cycle' => $subscription->plan?->billing_cycle,
'renewal_date' => $subscription->current_period_end,
'status' => $subscription->stripe_status,
'auto_renew' => $service?->auto_renew ?? true,
'service_id' => $service?->id,
'days_until_renewal' => now()->diffInDays($subscription->current_period_end, false),
];
});
return Inertia::render('Billing/UpcomingRenewals', [
'renewals' => $renewals,
]);
}
public function setupIntent(Request $request): JsonResponse
{
$user = $request->user();