gruene-seele/resources/views/admin/payment/reminder/logs.blade.php
2025-08-12 15:51:04 +02:00

333 lines
No EOL
13 KiB
PHP

@extends('layouts.layout-2')
@section('content')
<style>
/* Statistik Cards */
.stats-card {
transition: all 0.3s ease;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.stats-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
}
.stats-number {
font-size: 2rem;
font-weight: bold;
margin-bottom: 0.5rem;
}
.stats-label {
font-size: 0.9rem;
color: #6c757d;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Log Tabelle */
.log-table {
font-size: 0.85rem;
}
.log-level {
padding: 2px 8px;
border-radius: 12px;
font-size: 0.75rem;
font-weight: 500;
}
.log-level.info { background: rgba(23, 162, 184, 0.1); color: #17a2b8; }
.log-level.warning { background: rgba(255, 193, 7, 0.1); color: #ffc107; }
.log-level.error { background: rgba(220, 53, 69, 0.1); color: #dc3545; }
.log-level.notice { background: rgba(40, 167, 69, 0.1); color: #28a745; }
/* Filter Form */
.filter-form {
background: #f8f9fa;
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
}
/* Responsive */
@media (max-width: 768px) {
.stats-number {
font-size: 1.5rem;
}
.log-table {
font-size: 0.8rem;
}
}
</style>
<div class="container-fluid">
<!-- Header -->
<div class="d-flex justify-content-between align-items-center mb-4">
<h1 class="h3 mb-0">
<i class="fas fa-chart-line"></i> Payment Reminder Logs & Statistiken
</h1>
<a href="{{ route('admin_payments_reminder') }}" class="btn btn-secondary">
<i class="fas fa-arrow-left"></i> Zurück zur Übersicht
</a>
</div>
<!-- Statistiken Übersicht -->
{{-- <div class="row mb-4">
<!-- 7 Tage -->
<div class="col-md-4 mb-3">
<div class="card stats-card bg-primary text-white">
<div class="card-body text-center">
<div class="stats-number">{{ $stats7Days['summary']['total_logs'] }}</div>
<div class="stats-label">Logs (7 Tage)</div>
<div class="mt-2">
<small>
<i class="fas fa-envelope"></i> {{ $stats7Days['summary']['emails_sent'] }} gesendet |
<i class="fas fa-exclamation-triangle"></i> {{ $stats7Days['summary']['emails_failed'] }} fehlgeschlagen
</small>
</div>
</div>
</div>
</div>
<!-- 30 Tage -->
<div class="col-md-4 mb-3">
<div class="card stats-card bg-success text-white">
<div class="card-body text-center">
<div class="stats-number">{{ $stats30Days['summary']['total_logs'] }}</div>
<div class="stats-label">Logs (30 Tage)</div>
<div class="mt-2">
<small>
<i class="fas fa-envelope"></i> {{ $stats30Days['summary']['emails_sent'] }} gesendet |
<i class="fas fa-exclamation-triangle"></i> {{ $stats30Days['summary']['emails_failed'] }} fehlgeschlagen
</small>
</div>
</div>
</div>
</div>
<!-- 90 Tage -->
<div class="col-md-4 mb-3">
<div class="card stats-card bg-info text-white">
<div class="card-body text-center">
<div class="stats-number">{{ $stats90Days['summary']['total_logs'] }}</div>
<div class="stats-label">Logs (90 Tage)</div>
<div class="mt-2">
<small>
<i class="fas fa-envelope"></i> {{ $stats90Days['summary']['emails_sent'] }} gesendet |
<i class="fas fa-exclamation-triangle"></i> {{ $stats90Days['summary']['emails_failed'] }} fehlgeschlagen
</small>
</div>
</div>
</div>
</div>
</div>
--}}
<!-- Filter -->
<div class="card filter-form">
<div class="card-body">
<h5 class="card-title mb-3">
<i class="fas fa-filter"></i> Filter
</h5>
<form method="GET" action="{{ route('admin_payments_reminder_logs') }}" class="row">
<div class="col-md-3 mb-2">
<label for="order_id" class="form-label">Order ID</label>
<input type="number" class="form-control" id="order_id" name="order_id" value="{{ $orderId }}" placeholder="Order ID">
</div>
<div class="col-md-3 mb-2">
<label for="action" class="form-label">Aktion</label>
<select class="form-control custom-select" id="action" name="action">
<option value="">Alle Aktionen</option>
<option value="email_sent" {{ $action == 'email_sent' ? 'selected' : '' }}>E-Mail gesendet</option>
<option value="email_exception" {{ $action == 'email_exception' ? 'selected' : '' }}>E-Mail Fehler</option>
<option value="reminder_completed" {{ $action == 'reminder_completed' ? 'selected' : '' }}>Erinnerung abgeschlossen</option>
<option value="action_completed" {{ $action == 'action_completed' ? 'selected' : '' }}>Aktion abgeschlossen</option>
</select>
</div>
<div class="col-md-2 mb-2">
<label for="start_date" class="form-label">Von</label>
<input type="date" class="form-control" id="start_date" name="start_date" value="{{ $startDate }}">
</div>
<div class="col-md-2 mb-2">
<label for="end_date" class="form-label">Bis</label>
<input type="date" class="form-control" id="end_date" name="end_date" value="{{ $endDate }}">
</div>
<div class="col-md-2 mb-2 d-flex align-items-end">
<button type="submit" class="btn btn-primary me-2">
<i class="fas fa-search"></i> Filtern
</button>
<a href="{{ route('admin_payments_reminder_logs') }}" class="btn btn-outline-secondary">
<i class="fas fa-times"></i> Reset
</a>
</div>
</form>
</div>
</div>
<!-- Logs Tabelle -->
<div class="card">
<div class="card-header">
<h5 class="card-title mb-0">
<i class="fas fa-list"></i>
@if($filteredLogs)
Gefilterte Logs ({{ $filteredLogs->count() }} Einträge)
@else
Neueste Logs ({{ $recentLogs->count() }} Einträge)
@endif
</h5>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped log-table" id="logs-table">
<thead>
<tr>
<th>Datum</th>
<th>Aktion</th>
<th>Level</th>
<th>Model</th>
<th>Model ID</th>
<th>Nachricht</th>
</tr>
</thead>
<tbody>
@forelse(($filteredLogs ?: $recentLogs) as $log)
<tr>
<td>
<small>{{ $log->created_at->format('d.m.Y H:i:s') }}</small>
</td>
<td>
<span class="badge badge-secondary">{{ $log->action }}</span>
</td>
<td>
<span class="log-level {{ $log->getLevelType() }}">
{{ ucfirst($log->getLevelType()) }}
</span>
</td>
<td>
<small>{{ $log->model ?: '-' }}</small>
</td>
<td>
@if($log->model_id)
<a href="{{ route('admin_sales_detail', $log->model_id) }}" target="_blank" class="btn btn-sm btn-outline-primary">
{{ $log->model_id }}
</a>
@else
<small>-</small>
@endif
</td>
<td>
<small>{{ Str::limit($log->message, 100) }}</small>
@if(strlen($log->message) > 100)
<button type="button" class="btn btn-sm btn-link" data-toggle="tooltip" data-placement="top" title="{{ $log->message }}">
<i class="fas fa-eye"></i>
</button>
@endif
</td>
</tr>
@empty
<tr>
<td colspan="6" class="text-center text-muted">
<i class="fas fa-inbox"></i> Keine Logs gefunden
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
<!-- Detaillierte Statistiken -->
<div class="row mt-4">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h5 class="card-title mb-0">
<i class="fas fa-chart-pie"></i> Aktionen (30 Tage)
</h5>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th>Aktion</th>
<th>Level</th>
<th>Anzahl</th>
</tr>
</thead>
<tbody>
@foreach($stats30Days['detailed_stats'] as $stat)
<tr>
<td><small>{{ $stat->action }}</small></td>
<td>
<span class="log-level {{ $stat->level == 2 ? 'info' : ($stat->level == 5 ? 'error' : 'notice') }}">
{{ $stat->level == 2 ? 'Info' : ($stat->level == 5 ? 'Error' : 'Notice') }}
</span>
</td>
<td><strong>{{ $stat->count }}</strong></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h5 class="card-title mb-0">
<i class="fas fa-chart-bar"></i> Erfolgsrate (30 Tage)
</h5>
</div>
<div class="card-body">
@php
$totalEmails = $stats30Days['summary']['emails_sent'] + $stats30Days['summary']['emails_failed'];
$successRate = $totalEmails > 0 ? round(($stats30Days['summary']['emails_sent'] / $totalEmails) * 100, 1) : 0;
@endphp
<div class="text-center">
<div class="display-4 text-success">{{ $successRate }}%</div>
<div class="text-muted">Erfolgsrate</div>
<div class="mt-3">
<div class="progress">
<div class="progress-bar bg-success" style="width: {{ $successRate }}%"></div>
</div>
</div>
<div class="mt-2">
<small class="text-muted">
{{ $stats30Days['summary']['emails_sent'] }} erfolgreich / {{ $totalEmails }} gesamt
</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function() {
// DataTable für Logs
$('#logs-table').DataTable({
"language": {
"url": "//cdn.datatables.net/plug-ins/1.10.24/i18n/German.json"
},
"order": [[0, "desc"]], // Sortiere nach Datum absteigend
"pageLength": 50,
"responsive": true
});
// Tooltips initialisieren
$('[data-toggle="tooltip"]').tooltip();
});
</script>
@endsection