130 lines
5.9 KiB
PHP
130 lines
5.9 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('content')
|
|
<section class="page-wrap wide">
|
|
<header class="topbar">
|
|
<div class="title">
|
|
<h1>Historique SMS</h1>
|
|
<p>Recherche, audit et export des campagnes SMS.</p>
|
|
</div>
|
|
|
|
<div class="actions">
|
|
<a href="{{ route('sms-campaigns.export', $filters) }}" class="secondary">
|
|
Export CSV
|
|
</a>
|
|
<a href="{{ route('recipients.index') }}" class="primary">
|
|
Nouvel envoi
|
|
</a>
|
|
</div>
|
|
</header>
|
|
|
|
<form method="GET" action="{{ route('sms-campaigns.index') }}" class="panel flush">
|
|
<div class="panel-body">
|
|
<div class="form-grid filters-grid">
|
|
<label class="field">
|
|
<span class="field-label">Du</span>
|
|
<input type="date" name="from" value="{{ $filters['from'] ?? '' }}" class="input">
|
|
</label>
|
|
|
|
<label class="field">
|
|
<span class="field-label">Au</span>
|
|
<input type="date" name="to" value="{{ $filters['to'] ?? '' }}" class="input">
|
|
</label>
|
|
|
|
<label class="field">
|
|
<span class="field-label">Statut</span>
|
|
<select name="status" class="select">
|
|
<option value="">Tous</option>
|
|
@foreach ($statuses as $status => $label)
|
|
<option value="{{ $status }}" @selected(($filters['status'] ?? '') === $status)>{{ $label }}</option>
|
|
@endforeach
|
|
</select>
|
|
</label>
|
|
|
|
<label class="field">
|
|
<span class="field-label">Utilisateur</span>
|
|
<select name="user_id" class="select">
|
|
<option value="">Tous</option>
|
|
@foreach ($users as $user)
|
|
<option value="{{ $user->id }}" @selected((string) ($filters['user_id'] ?? '') === (string) $user->id)>{{ $user->name }}</option>
|
|
@endforeach
|
|
</select>
|
|
</label>
|
|
|
|
<label class="field">
|
|
<span class="field-label">Groupe</span>
|
|
<select name="group_id" class="select">
|
|
<option value="">Tous</option>
|
|
@foreach ($groups as $group)
|
|
<option value="{{ $group->id }}" @selected((string) ($filters['group_id'] ?? '') === (string) $group->id)>{{ $group->name }}</option>
|
|
@endforeach
|
|
</select>
|
|
</label>
|
|
|
|
<div class="actions nowrap-actions">
|
|
<button type="submit" class="primary">
|
|
Filtrer
|
|
</button>
|
|
<a href="{{ route('sms-campaigns.index') }}" class="secondary">
|
|
Reset
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<div class="panel">
|
|
<div class="panel-header">
|
|
<h2>Campagnes</h2>
|
|
<div class="tabs" aria-label="Statut">
|
|
<span class="active">Toutes</span>
|
|
<span>Envoyees</span>
|
|
<span>Erreurs</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="table-wrap">
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Date</th>
|
|
<th>Programmation</th>
|
|
<th>Message</th>
|
|
<th>Destinataires</th>
|
|
<th>Groupes</th>
|
|
<th>Statut</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse ($campaigns as $campaign)
|
|
<tr>
|
|
<td>
|
|
<a href="{{ route('sms-campaigns.show', $campaign) }}" class="link">{{ $campaign->created_at->format('d/m/Y H:i') }}</a>
|
|
<div class="muted">{{ $campaign->user?->name ?: 'Utilisateur supprime' }}</div>
|
|
</td>
|
|
<td>
|
|
{{ $campaign->scheduled_at?->timezone(config('relais_sms.default_settings.display_timezone', 'Europe/Paris'))->format('d/m/Y H:i') ?: '-' }}
|
|
</td>
|
|
<td>{{ $campaign->message }}</td>
|
|
<td>{{ $campaign->sent_count }}/{{ $campaign->recipients_count }} envoye(s)</td>
|
|
<td class="truncate">{{ implode(', ', $campaign->selected_group_names ?? []) ?: 'Aucun groupe' }}</td>
|
|
<td>
|
|
<span class="badge {{ in_array($campaign->status, ['failed', 'partial', 'canceled'], true) ? 'error' : (in_array($campaign->status, ['scheduled', 'uncertain'], true) ? 'pending' : '') }}">
|
|
{{ $statuses[$campaign->status] ?? $campaign->status }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr>
|
|
<td colspan="6" class="empty-state">Aucune campagne ne correspond aux filtres.</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
{{ $campaigns->links() }}
|
|
</section>
|
|
@endsection
|