@extends('layouts/contentLayoutMaster') @section('title', __('locale.menu.Subscriptions')) @section('vendor-style') {{-- vendor css files --}} @endsection @section('page-style') @endsection @section('content') @php $s = $subscriptions_stats ?? (object) []; $mrr = (float) ($s->mrr ?? 0); $activeCount = max(1, (int) ($s->active ?? 0)); $autoRenewing = (int) ($s->auto_renewing ?? 0); $autoPct = round(($autoRenewing / $activeCount) * 100, 1); @endphp

{{ __('locale.subscription.kpi_mrr_recurring') }}

${{ number_format($mrr) }}{{ __('locale.subscription.mrr_per_month_suffix') }}

{{ __('locale.subscription.kpi_mrr_sub', ['count' => (int) ($s->mrr_new_30d ?? 0)]) }}

+{{ number_format((float) ($s->mrr_change_pct ?? 0), 1) }}%

{{ __('locale.subscription.kpi_active_subscribers') }}

{{ (int) ($s->active_subscribers ?? $s->active ?? 0) }}

{{ __('locale.subscription.kpi_active_sub') }}

{{ __('locale.subscription.kpi_auto_renewing') }}

{{ $autoRenewing }}

{{ __('locale.subscription.auto_renew_pct_active', ['pct' => $autoPct]) }}

{{ __('locale.subscription.kpi_ending_7d') }}

{{ (int) ($s->ending_7d ?? 0) }}

{{ __('locale.subscription.kpi_ending_sub') }}

{{ __('locale.subscription.kpi_pending_approval') }}

{{ (int) ($s->pending_approval ?? 0) }}

{{ __('locale.subscription.kpi_pending_sub') }}

{{ __('locale.subscription.page_heading') }}

{{ __('locale.subscription.page_subheading') }}

@can('new subscription') {{ __('locale.buttons.new_subscription') }} @endcan
@can('manage subscription') @endcan
{{ __('locale.labels.id') }} Plan & Customer Billing Credits {{ __('locale.labels.status') }} {{ __('locale.subscription.gateway_col') }} {{ __('locale.labels.actions') }}
{{ __('locale.subscription.widget_summary') }}
@php $sumLabels = [ 'sum-total' => __('locale.subscription.sum_total'), 'sum-active' => __('locale.subscription.sum_active'), 'sum-expired' => __('locale.subscription.sum_expired'), 'sum-cancelled' => __('locale.subscription.sum_cancelled'), 'sum-rec-on' => __('locale.subscription.sum_recurring_on'), 'sum-rec-off' => __('locale.subscription.sum_recurring_off'), 'sum-mrr' => __('locale.subscription.sum_mrr'), 'sum-yr' => __('locale.subscription.sum_yearly'), 'sum-renewed-today' => __('locale.subscription.sum_renewed_today'), 'sum-failed' => __('locale.subscription.sum_failed_renewals'), ]; $summaryRows = $s->summary ?? []; @endphp
@foreach ($summaryRows as $row) @php $sid = $row['id'] ?? ''; $ser = $row['series'] ?? [10, 20, 15, 30, 25, 40]; $mx = max($ser) ?: 1; $nS = max(count($ser) - 1, 1); $sparkPts = []; foreach ($ser as $i => $v) { $sparkPts[] = ($i * 60 / $nS) . ',' . (18 - ($v / $mx) * 14); } @endphp
{{ strtoupper($sumLabels[$sid] ?? '') }}
{{ $row['value'] ?? 0 }}
@endforeach
{{ __('locale.subscription.widget_plan_mix') }}
@foreach ($s->plan_mix_donut ?? [] as $mix)
{{ $mix['name'] }}{{ $mix['count'] }} ({{ $mix['pct'] }}%)
@endforeach @if (empty($s->plan_mix_donut)) @foreach ($s->plan_mix ?? [] as $mix)
{{ $mix['name'] }}{{ $mix['count'] }} ({{ $mix['pct'] }}%)
@endforeach @endif
{{ __('locale.subscription.widget_pending_title') }}
@php $plist = $s->pending_list ?? []; @endphp @if (count($plist))
    @foreach ($plist as $p)
  • {{ $p['name'] }}
    {{ $p['email'] }}
    @can('manage subscription') @endcan
  • @endforeach
@else

{{ __('locale.subscription.widget_pending_empty') }}

@endif
{{ __('locale.subscription.widget_reconcile_health') }}
@if (($s->reconcile_with_gateway ?? 0) > 0)
{{ __('locale.subscription.reconcile_summary_line', [ 'synced' => (int) ($s->reconcile_synced ?? 0), 'mismatch' => (int) ($s->reconcile_mismatched ?? 0), 'issues' => (int) ($s->reconcile_failed_or_pending ?? 0), ]) }}
@else

{{ __('locale.subscription.widget_reconcile_empty') }}

@endif
{{ __('locale.subscription.widget_recent_activity') }}
@forelse ($s->recent_activity ?? [] as $act)
{{ $act['user'] }} · {{ $act['label'] }}
{{ $act['created'] }}
@empty

{{ __('locale.subscription.widget_recent_empty') }}

@endforelse
@endsection @section('vendor-script') {{-- vendor files --}} @endsection @section('page-script') {{-- Page js files --}} @endsection