Fix: socket permissions para nginx
This commit is contained in:
@@ -0,0 +1,202 @@
|
||||
@extends('layouts.landing')
|
||||
|
||||
@section('title', 'Analytics WhatsApp')
|
||||
|
||||
@section('content')
|
||||
<div class="container-fluid">
|
||||
|
||||
{{-- Tarjetas de métricas --}}
|
||||
<div class="row mb-4">
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card border-left-success shadow h-100 py-2">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">Enviados</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">{{ number_format($enviados) }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="fas fa-paper-plane fa-2x text-gray-300"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card border-left-info shadow h-100 py-2">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="text-xs font-weight-bold text-info text-uppercase mb-1">Recibidos</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">{{ number_format($recibidos) }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="fas fa-inbox fa-2x text-gray-300"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card border-left-danger shadow h-100 py-2">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="text-xs font-weight-bold text-danger text-uppercase mb-1">Fallidos</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">{{ number_format($fallidos) }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="fas fa-exclamation-triangle fa-2x text-gray-300"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card border-left-warning shadow h-100 py-2">
|
||||
<div class="card-body">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col mr-2">
|
||||
<div class="text-xs font-weight-bold text-warning text-uppercase mb-1">Opt-Outs</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">{{ number_format($optOuts) }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="fas fa-ban fa-2x text-gray-300"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Filtros --}}
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3 d-flex align-items-center justify-content-between">
|
||||
<h6 class="m-0 font-weight-bold text-primary">
|
||||
<i class="fas fa-filter mr-1"></i> Filtros
|
||||
</h6>
|
||||
<a href="{{ route('promocion.index') }}" class="btn btn-sm btn-secondary">
|
||||
<i class="fas fa-arrow-left mr-1"></i> Volver
|
||||
</a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form method="GET" action="{{ route('promocion.analytics') }}" class="form-inline flex-wrap">
|
||||
<div class="form-group mr-3 mb-2">
|
||||
<label class="mr-2 font-weight-bold">Plantel</label>
|
||||
<select name="plantel_id" class="form-control form-control-sm">
|
||||
<option value="">Todos</option>
|
||||
@foreach($planteles as $p)
|
||||
<option value="{{ $p->id }}" {{ request('plantel_id') == $p->id ? 'selected' : '' }}>
|
||||
{{ $p->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group mr-3 mb-2">
|
||||
<label class="mr-2 font-weight-bold">Promoción</label>
|
||||
<select name="promocion_id" class="form-control form-control-sm">
|
||||
<option value="">Todas</option>
|
||||
@foreach($promociones as $pr)
|
||||
<option value="{{ $pr->id }}" {{ request('promocion_id') == $pr->id ? 'selected' : '' }}>
|
||||
{{ $pr->titulo }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group mr-3 mb-2">
|
||||
<label class="mr-2 font-weight-bold">Desde</label>
|
||||
<input type="date" name="fecha_desde" class="form-control form-control-sm"
|
||||
value="{{ request('fecha_desde') }}">
|
||||
</div>
|
||||
<div class="form-group mr-3 mb-2">
|
||||
<label class="mr-2 font-weight-bold">Hasta</label>
|
||||
<input type="date" name="fecha_hasta" class="form-control form-control-sm"
|
||||
value="{{ request('fecha_hasta') }}">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-sm btn-primary mb-2 mr-2">
|
||||
<i class="fas fa-search mr-1"></i> Filtrar
|
||||
</button>
|
||||
<a href="{{ route('promocion.analytics') }}" class="btn btn-sm btn-secondary mb-2">
|
||||
<i class="fas fa-times mr-1"></i> Limpiar
|
||||
</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Logs recientes --}}
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<h6 class="m-0 font-weight-bold text-primary">
|
||||
<i class="fas fa-list mr-1"></i> Logs recientes
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover table-sm">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th style="width:50px">#</th>
|
||||
<th>Prospecto</th>
|
||||
<th style="width:110px">Teléfono</th>
|
||||
<th style="width:90px" class="text-center">Tipo</th>
|
||||
<th>Mensaje</th>
|
||||
<th style="width:80px">Media</th>
|
||||
<th style="width:140px">Fecha</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($logsRecientes as $log)
|
||||
@php
|
||||
$user = $log->alumno?->alumnos->first();
|
||||
$badge = match($log->tipo) {
|
||||
'enviado' => 'success',
|
||||
'recibido' => 'info',
|
||||
'opt_out' => 'warning',
|
||||
'error' => 'danger',
|
||||
default => 'secondary',
|
||||
};
|
||||
@endphp
|
||||
<tr>
|
||||
<td>{{ $log->id }}</td>
|
||||
<td>
|
||||
@if($user)
|
||||
{{ $user->name }} {{ $user->apellidoPaterno }}
|
||||
@else
|
||||
<span class="text-muted">—</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="small">{{ $log->telefono }}</td>
|
||||
<td class="text-center">
|
||||
<span class="badge badge-{{ $badge }}">{{ $log->tipo }}</span>
|
||||
</td>
|
||||
<td class="small text-truncate" style="max-width:200px">
|
||||
{{ $log->mensaje ?? '—' }}
|
||||
</td>
|
||||
<td class="small text-center">
|
||||
@if($log->media_type)
|
||||
<span class="badge badge-light border">{{ $log->media_type }}</span>
|
||||
@else
|
||||
—
|
||||
@endif
|
||||
</td>
|
||||
<td class="small">{{ $log->created_at?->format('d/m/Y H:i') }}</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="7" class="text-center text-muted py-3">Sin registros.</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="d-flex justify-content-center mt-3">
|
||||
{{ $logsRecientes->appends(request()->query())->links() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user