forked from felipe.fontana/simples-painel
Felipe Fontana
10 months ago
10 changed files with 246 additions and 13 deletions
@ -0,0 +1,49 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers\Admin\Relatorios; |
||||
|
||||
use App\Helpers\Helper; |
||||
use App\Http\Controllers\Controller; |
||||
use App\Models\Agentes; |
||||
use App\Models\Atendimentos; |
||||
use Illuminate\Contracts\View\View; |
||||
use Illuminate\Http\Request; |
||||
use Illuminate\Support\Facades\Gate; |
||||
use App\Models\Filas; |
||||
|
||||
class RelatorioAtendimentosAbandonadosController extends Controller |
||||
{ |
||||
public function __construct( |
||||
protected Atendimentos $atendimentosRepository, |
||||
protected Agentes $agenteRepository, |
||||
protected Filas $filasRepository, |
||||
) { |
||||
} |
||||
|
||||
public function index(Request $request): View |
||||
{ |
||||
$user = auth()->user(); |
||||
if (Gate::forUser($user)->denies('show_relatorios')) { |
||||
abort(404); |
||||
} |
||||
|
||||
$selected = (object) $request->all(); |
||||
$empresas = Helper::getEmpresas(); |
||||
|
||||
if (!is_int($empresas)){ |
||||
$empresasIds = $empresas->pluck('id')->toArray(); |
||||
} else { |
||||
$empresasIds = $empresas; |
||||
} |
||||
|
||||
if ($request->empresa) { |
||||
$empresasIds = $request->empresa; |
||||
} |
||||
|
||||
$filas = $this->filasRepository->list(["id_empresa" => $empresasIds]); |
||||
$agentes = $this->agenteRepository->list(["id_empresa" => $empresasIds]); |
||||
$atendimentos = $this->atendimentosRepository->getAbandonAtends(["empresa" => $empresasIds, "fila" => $request->fila, "atendente" => $request->atendente, "usuario" => $request->usuario, "dataInicio" => $request->dataInicio, "dataFim" => $request->dataFim]); |
||||
|
||||
return view('admin.relatorios.abandonAtendimentos.abandonAtendimentos', compact('atendimentos', 'selected', 'empresas', 'filas', 'agentes')); |
||||
} |
||||
} |
@ -0,0 +1,100 @@
|
||||
<x-app-layout> |
||||
<div class="py-8 px-8"> |
||||
<div class="header flex flex-col"> |
||||
<div class="flex items-center gap-3 w-full mb-5 "> |
||||
<h1 class="text-gray-900 dark:text-gray-100 text-3xl font-bold text-center"> |
||||
Atendimentos Abandonados |
||||
</h1> |
||||
</div> |
||||
<form class="filtros flex items-center gap-3 " method="get" action="{{route('relatorio.atendimentosAbandonados.index')}}"> |
||||
@if (!is_int($empresas)) |
||||
<div class="flex flex-col gap-2"> |
||||
<select class="w-full dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100" name="empresa"> |
||||
<option value="" {{ empty($selected->empresa) ? 'selected disabled' : '' }}>Todas Empresas</option> |
||||
@foreach($empresas as $empresa) |
||||
<option value="{{ $empresa->id}}" {{ !empty($selected->empresa) && ($empresa->id == $selected->empresa) ? 'selected' : '' }}> |
||||
{{ $empresa->nome }} |
||||
</option> |
||||
@endforeach |
||||
</select> |
||||
</div> |
||||
@endif |
||||
<div class="flex-1 flex flex-col gap-1"> |
||||
<label>Data Inicio: </label> |
||||
<input type="date" class="w-full rounded-md p-2 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100" name="dataInicio" id="dataInicio" value="{{ $selected->dataInicio ?? '' }}" placeholder="Data de Início"> |
||||
</div> |
||||
|
||||
<div class="flex-1 flex flex-col gap-1"> |
||||
<label>Data Fim: </label> |
||||
<input type="date" class="w-full rounded-md p-2 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100" name="dataFim" id="dataFim" value="{{ $selected->dataFim ?? '' }}" placeholder="Data de Fim"> |
||||
</div> |
||||
<div class="flex-1 flex flex-col gap-1"> |
||||
<label>Fila: </label> |
||||
<select class="w-full dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100" name="fila"> |
||||
<option value="" {{ empty($selected->fila) ? 'selected disabled' : '' }}>--------------------</option> |
||||
@foreach($filas as $fila) |
||||
<option value="{{ $fila->id}}" {{ !empty($selected->fila) && ($fila->id == $selected->fila) ? 'selected' : '' }}> |
||||
{{ $fila->name }} |
||||
</option> |
||||
@endforeach |
||||
</select> |
||||
</div> |
||||
<div class="flex-1 flex flex-col gap-1"> |
||||
<label>Agente: </label> |
||||
<select class="w-full dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100" name="atendente"> |
||||
<option value="" {{ empty($selected->atendente) ? 'selected disabled' : '' }}>--------------------</option> |
||||
@foreach($agentes as $agente) |
||||
<option value="{{ $agente->id}}" {{ !empty($selected->atendente) && ($agente->id == $selected->atendente) ? 'selected' : '' }}> |
||||
{{ $agente->nome }} |
||||
</option> |
||||
@endforeach |
||||
</select> |
||||
</div> |
||||
<div class="flex-1 flex flex-col gap-1"> |
||||
<label>Cliente: </label> |
||||
<input type="text" name="usuario" value="{{$selected->usuario ?? ""}}" class="w-full rounded-md p-2 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100" placeholder="Cliente: "> |
||||
</div> |
||||
|
||||
<button class="lg:ml-auto ml-0 bg-blue-900 hover:bg-opacity-90 transition-all text-white py-2 px-6 rounded text-lg overflow-hidden">Pesquisar</button> |
||||
</form> |
||||
</div> |
||||
<div class="body mt-4 overflow-auto rounded-lg shadow"> |
||||
<table class="w-full"> |
||||
<thead class="bg-gray-50 dark:bg-gray-700 dark:text-gray-100"> |
||||
<tr> |
||||
<th class="p-3 text-sm font-semibold tracking-wide text-left">Numero Cliente</th> |
||||
<th class="p-3 text-sm font-semibold tracking-wide text-left">Nome Cliente</th> |
||||
<th class="p-3 text-sm font-semibold tracking-wide text-left">Fila</th> |
||||
<th class="p-3 text-sm font-semibold tracking-wide text-left">Protocolo</th> |
||||
<th class="p-3 text-sm font-semibold tracking-wide text-left">Agente</th> |
||||
<th class="p-3 text-sm font-semibold tracking-wide text-left">Interações</th> |
||||
<th class="p-3 text-sm font-semibold tracking-wide text-left">Data Atendimento</th> |
||||
<th class="p-3 text-sm font-semibold tracking-wide text-left">Data Evento</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
@forelse ($atendimentos as $atendimento) |
||||
<tr class="bg-white dark:bg-gray-800 dark:border-gray-600 border-b-2"> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">{{$atendimento->cliente_id ?? "-"}}</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">{{$atendimento->nome ?? "-"}}</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">{{$atendimento->fila ?? "-"}}</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">{{$atendimento->protocolo ?? "-"}}</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">{{$atendimento->atendente ?? "-"}}</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">{{$atendimento->interacao ?? "-"}}</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">{{\Carbon\Carbon::parse($atendimento->data_reg)->format('Y-m-d H:i:s') ?? "-"}}</td> |
||||
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">{{\Carbon\Carbon::parse($atendimento->data_evento)->format('Y-m-d H:i:s') ?? "-"}}</td> |
||||
</tr> |
||||
@empty |
||||
<div class="flex flex-col gap-3 items-center h-[50vh] justify-center"> |
||||
<div class="border-gray-500 border-4 rounded-full flex items-center justify-center px-5 py-5"> |
||||
<img src="{{ asset('img/filtro-limpo.png') }}" alt=""> |
||||
</div> |
||||
<h1 class="text-gray-100 text-xl">Nenhum registro foi encontrado</h1> |
||||
</div> |
||||
@endforelse |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</x-app-layout> |
Loading…
Reference in new issue