From 88fa6a4a56be707f19b6ebbe532cb71b7e1118c0 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 23 Sep 2025 09:50:44 +0200 Subject: [PATCH] feat(cloud-check): enhance subscription reporting in CloudCheckSubscription command - Added CSV output for active subscribers, including detailed information on subscription status and invoice status. - Implemented checks for missing subscription IDs and provided appropriate logging in the CSV for visibility. - Improved handling of non-active subscriptions with detailed output for better tracking and analysis. --- .../Commands/CloudCheckSubscription.php | 57 +++++++++++++++++-- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/app/Console/Commands/CloudCheckSubscription.php b/app/Console/Commands/CloudCheckSubscription.php index 6e237e84b..da416fdb6 100644 --- a/app/Console/Commands/CloudCheckSubscription.php +++ b/app/Console/Commands/CloudCheckSubscription.php @@ -28,22 +28,69 @@ class CloudCheckSubscription extends Command { $stripe = new \Stripe\StripeClient(config('subscription.stripe_api_key')); $activeSubscribers = Team::whereRelation('subscription', 'stripe_invoice_paid', true)->get(); + + $out = fopen('php://output', 'w'); + // CSV header + fputcsv($out, [ + 'team_id', + 'invoice_status', + 'stripe_customer_url', + 'stripe_subscription_id', + 'subscription_status', + 'subscription_url', + 'note', + ]); + foreach ($activeSubscribers as $team) { $stripeSubscriptionId = $team->subscription->stripe_subscription_id; $stripeInvoicePaid = $team->subscription->stripe_invoice_paid; $stripeCustomerId = $team->subscription->stripe_customer_id; - if (! $stripeSubscriptionId) { - echo "Team {$team->id} has no subscription, but invoice status is: {$stripeInvoicePaid}\n"; - echo "Link on Stripe: https://dashboard.stripe.com/customers/{$stripeCustomerId}\n"; + + if (! $stripeSubscriptionId && str($stripeInvoicePaid)->lower() != 'past_due') { + fputcsv($out, [ + $team->id, + $stripeInvoicePaid, + $stripeCustomerId ? "https://dashboard.stripe.com/customers/{$stripeCustomerId}" : null, + null, + null, + null, + 'Missing subscription ID while invoice not past_due', + ]); continue; } + + if (! $stripeSubscriptionId) { + // No subscription ID and invoice is past_due, still record for visibility + fputcsv($out, [ + $team->id, + $stripeInvoicePaid, + $stripeCustomerId ? "https://dashboard.stripe.com/customers/{$stripeCustomerId}" : null, + null, + null, + null, + 'Missing subscription ID', + ]); + + continue; + } + $subscription = $stripe->subscriptions->retrieve($stripeSubscriptionId); if ($subscription->status === 'active') { continue; } - echo "Subscription {$stripeSubscriptionId} is not active ({$subscription->status})\n"; - echo "Link on Stripe: https://dashboard.stripe.com/subscriptions/{$stripeSubscriptionId}\n"; + + fputcsv($out, [ + $team->id, + $stripeInvoicePaid, + $stripeCustomerId ? "https://dashboard.stripe.com/customers/{$stripeCustomerId}" : null, + $stripeSubscriptionId, + $subscription->status, + "https://dashboard.stripe.com/subscriptions/{$stripeSubscriptionId}", + 'Subscription not active', + ]); } + + fclose($out); } }