@php
use App\Support\Bytes;
use Illuminate\Support\Number;
$locale = app()->getLocale();
$money = fn (int $cents, string $currency) => Number::currency($cents / 100, in: $currency, locale: $locale);
@endphp
{{-- Page head. The same pill the public site uses to label a section, so a
customer meets one vocabulary on both sides of the login. --}}
{{-- Live provisioning progress (only while a run is in flight) --}}
@if ($instance === null)
{{-- Said plainly rather than papered over with an empty record: a page
of dashes reads as broken, and "we are still setting it up" and
"you have not ordered yet" are different things. --}}
{{ __('dashboard.no_instance_label') }}
{{ __('dashboard.no_instance_body') }}
{{ __('dashboard.no_instance_cta') }}
{{ __('dashboard.nav.support') }}
@else
{{-- ── The four cards, in the template's order and form ──────────
Speicher · Benutzer · Datenvolumen · Verfügbarkeit. Figure, unit
beside it, a line of context, the visual — ring, bar, sparkline.
Every number below is measured; nothing is drawn at a level nobody
read. --}}
@if ($disk)
@elseif ($instance->quota_gb)
@endif
@if ($seats['total'])
{{-- R4: width is data, not decoration. --}}
@endif
@if ($seatBreakdown !== [])
{{ collect($seatBreakdown)
->map(fn (int $n, string $role) => trans_choice('users.role_count.'.$role, $n, ['count' => $n]))
->join(' · ') }}
@endif
@if ($traffic)
@php $state = $traffic->state(); @endphp
@if (count($trend) > 2)
{{-- Orange because this is the metric with an action
attached: when it runs out, something can be done
about it. Observed figures stay grey. --}}
@endif
@if ($state !== 'ok')
{{ __('dashboard.traffic.buy') }}
@endif
@endif
{{-- Availability, counted from our own monitoring answers. Absent
rather than 100 % when nothing has been checked: reporting an
unmonitored instance as perfect is the single most dishonest
number this page could carry. --}}
@if ($availability !== null)
@if (count($availabilityTrend) > 2)
@endif
@elseif ($location)
@endif
{{-- ── The proof register ────────────────────────────────────── --}}
@if ($proofs === [])
{{ __('dashboard.proofs.empty') }}
@else
@foreach ($proofs as $proof)
|
{{ __('dashboard.proofs.item.'.$proof['key']) }}
{{ $proof['at']?->local()->locale($locale)->isoFormat('DD.MM. HH:mm') ?? '—' }}@if ($proof['note']) · {{ $proof['note'] }}@endif
|
$proof['state'] === 'ok',
'border-info-border bg-info-bg text-info' => $proof['state'] === 'planned',
'border-danger-border bg-danger-bg text-danger' => $proof['state'] === 'attention',
])>
{{ __('dashboard.proofs.state.'.$proof['state']) }}
|
@endforeach
@endif
{{-- ── The contract ───────────────────────────────────────── --}}
{{ __('dashboard.master.label') }}
- {{ __('dashboard.master.package') }}
-
{{ __('billing.plan.'.($instance->plan ?: 'team')) }}
@if ($planPrice)
{{ __('dashboard.master.per_'.($planPrice['term'] === 'yearly' ? 'year' : 'month'), ['amount' => $money($planPrice['cents'], $planPrice['currency'])]) }}
@endif
@if ($contract?->performance)
- {{ __('dashboard.master.operation') }}
- {{ __('billing.perf.'.$contract->performance) }}
@endif
@if ($domain)
- {{ __('dashboard.master.address') }}
- {{ $domain }}
@endif
@if ($nextInvoice)
{{ __('dashboard.invoice.label') }}
@if ($nextInvoice['addons'] > 0)
{{-- Broken out only when there is something to
break out: a "Module 0,00 €" line on every
other customer's sheet is noise. --}}
- {{ __('dashboard.invoice.plan') }}
- {{ $money($nextInvoice['plan'], $nextInvoice['currency']) }}
- {{ __('dashboard.invoice.addons') }}
- {{ $money($nextInvoice['addons'], $nextInvoice['currency']) }}
@endif
- {{ __('dashboard.invoice.amount') }}
-
{{ $money($nextInvoice['total'], $nextInvoice['currency']) }}
{{ __('dashboard.invoice.net') }}
- {{ __('dashboard.invoice.due') }}
- {{ $nextInvoice['due']?->local()->locale($locale)->isoFormat('LL') ?? '—' }}
{{ __('dashboard.invoice.all') }}
@endif
@if ($openTasks > 0)
{{-- Only while there is something outstanding. A permanently
green checklist is furniture; one with work left on it
is a reason to open this page. --}}
{{ __('dashboard.setup.label') }}
{{ trans_choice('dashboard.setup.open', $openTasks, ['count' => $openTasks]) }}
{{ __('dashboard.setup.continue') }}
@endif
{{-- ── The three things customers come here to do ─────────────────── --}}
@foreach ([
['users', 'users', 'add_user'],
['backups', 'rotate-ccw', 'restore'],
['billing', 'plus', 'grow'],
] as [$route, $icon, $key])
{{ __('dashboard.quick.'.$key.'_title') }}
{{ __('dashboard.quick.'.$key.'_body') }}
@endforeach
@endif