move into sonardesk
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
@extends('licensing::admin.layout')
|
||||
@section('title', 'Paddle Reconciliation')
|
||||
@section('content')
|
||||
<h1>Paddle Reconciliation</h1>
|
||||
<p class="muted">Read-only comparison of the 20 most recent Paddle-linked licences against Paddle {{ $environment }}. This page never changes subscriptions, licences or webhooks.</p>
|
||||
@if (! $configured)
|
||||
<div class="card"><strong>Paddle API not configured.</strong><p>Set <code>SONARDESK_PADDLE_API_KEY</code> and <code>SONARDESK_PADDLE_ENVIRONMENT</code> in your local environment, then clear configuration cache. No API calls were made.</p></div>
|
||||
@endif
|
||||
<div class="table-wrap"><table><thead><tr><th>Licence</th><th>Subscription</th><th>Local status</th><th>Paddle status</th><th>Comparison</th></tr></thead><tbody>
|
||||
@forelse ($rows as $row)
|
||||
<tr>
|
||||
<td><a href="{{ route('administration.sonardesk.licenses.show', $row['license']) }}">{{ $row['license']->license_key_last4 ?? $row['license']->id }}</a></td>
|
||||
<td>{{ $row['license']->external_subscription_id }}</td>
|
||||
<td>{{ $row['license']->subscription_status ?? '—' }}</td>
|
||||
<td>{{ $row['remote_status'] ?? '—' }}</td>
|
||||
<td><span class="pill">{{ $row['result'] }}</span>@if ($row['detail']) <span class="muted">{{ $row['detail'] }}</span> @endif</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr><td colspan="5">No Paddle-linked licences found in the local database.</td></tr>
|
||||
@endforelse
|
||||
</tbody></table></div>
|
||||
@endsection
|
||||
@@ -0,0 +1,14 @@
|
||||
@extends('licensing::customer.layout')
|
||||
@section('title', 'My SonarDesk Licences')
|
||||
@section('content')
|
||||
<h1>My SonarDesk licences</h1>
|
||||
<p class="muted">Licences associated with your verified ABSDev account email. This portal is read-only; existing billing and licence activation services remain unchanged.</p>
|
||||
<div class="card scroll"><table><thead><tr><th>Edition</th><th>Licence</th><th>Subscription</th><th>Expiry</th><th></th></tr></thead><tbody>
|
||||
@forelse($licenses as $license)
|
||||
<tr><td><strong>{{ $license->edition }}</strong></td><td>•••• {{ $license->license_key_last4 ?? '—' }}</td><td><span class="pill">{{ $license->subscription_status ?? 'Not linked' }}</span></td><td>{{ $license->expires_at?->format('d M Y') ?? '—' }}</td><td><a href="{{ route('account.sonardesk.licenses.show', $license) }}">View details</a></td></tr>
|
||||
@empty
|
||||
<tr><td colspan="5">No SonarDesk licences match your account email. If you purchased with a different email, contact support to verify ownership; licences cannot be claimed automatically.</td></tr>
|
||||
@endforelse
|
||||
</tbody></table></div>
|
||||
{{ $licenses->links() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,7 @@
|
||||
<!doctype html>
|
||||
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>@yield('title', 'SonarDesk Account') · ABSDev</title>
|
||||
<style>
|
||||
:root{color-scheme:light dark;font-family:system-ui,-apple-system,sans-serif}body{margin:0;background:#f5f7fb;color:#19253a}header{background:#112440;color:#fff;padding:18px max(20px,calc((100vw - 1100px)/2))}header a{color:#e8c36b;text-decoration:none}main{max-width:1100px;margin:35px auto;padding:0 20px}.card{background:#fff;border:1px solid #dbe2ee;border-radius:12px;padding:22px;margin:16px 0;box-shadow:0 4px 16px #10233d0a}a{color:#19579b}table{border-collapse:collapse;width:100%}th,td{padding:12px;text-align:left;border-bottom:1px solid #e5eaf2}th{color:#53627b}small,.muted{color:#59677e}.scroll{overflow-x:auto}.pill{border-radius:99px;background:#eef3fa;padding:5px 10px;display:inline-block}h1{font-size:1.8rem}@media(prefers-color-scheme:dark){body{background:#0e1725;color:#e9eef8}.card{background:#18263b;border-color:#33435a}th,td{border-color:#33435a}th,.muted,small{color:#bdc7d8}.pill{background:#33435a}a{color:#a8cfff}}
|
||||
</style></head><body><header><strong>ABSDev · SonarDesk</strong> <a href="{{ route('account.sonardesk.index') }}">My licences</a></header>
|
||||
<main>@yield('content')</main></body></html>
|
||||
@@ -0,0 +1,12 @@
|
||||
@extends('licensing::customer.layout')
|
||||
@section('title', 'Licence Details')
|
||||
@section('content')
|
||||
<p><a href="{{ route('account.sonardesk.index') }}">← My licences</a></p>
|
||||
<h1>SonarDesk {{ $license->edition }}</h1>
|
||||
<div class="card"><h2>Licence</h2><p><strong>Key ending:</strong> {{ $license->license_key_last4 ?? '—' }}</p><p><strong>Status:</strong> {{ $license->revoked_at ? 'Revoked' : ($license->is_usable ? 'Usable' : 'Expired') }}</p><p><strong>Subscription:</strong> {{ $license->subscription_status ?? 'Not linked' }}</p><p><strong>Current period ends:</strong> {{ $license->current_period_ends_at?->format('d M Y') ?? '—' }}</p><p><strong>Activation limit:</strong> {{ $license->activation_limit }}</p><p class="muted">Full licence keys are not displayed or recoverable from their stored hashes.</p></div>
|
||||
<div class="card scroll"><h2>Devices</h2><table><thead><tr><th>Installation</th><th>Status</th></tr></thead><tbody>
|
||||
@forelse($license->activations as $activation)
|
||||
<tr><td>{{ $activation->installation_id ?? $activation->installationID ?? 'Device' }}</td><td>{{ $activation->deactivated_at ? 'Deactivated' : 'Active' }}</td></tr>
|
||||
@empty<tr><td colspan="2">No activations recorded.</td></tr>@endforelse
|
||||
</tbody></table></div>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user