Browse Source

Merge pull request 'Ajuste relatorio atendimento' (#3) from Matheus.Maia/simples-painel:Saas into Saas

Reviewed-on: felipe.fontana/simples-painel#3
Saas
felipe.fontana 3 months ago
parent
commit
2de00d681d
  1. 73
      app/Http/Controllers/Admin/Relatorios/RelatorioHistoricoAtendimentoController.php
  2. 76
      resources/views/admin/relatorios/historicoAtendimentos/historicoAtendimento.blade.php

73
app/Http/Controllers/Admin/Relatorios/RelatorioHistoricoAtendimentoController.php

@ -40,9 +40,28 @@ class RelatorioHistoricoAtendimentoController extends Controller
$agentes = $this->agenteRepository->list(["id_empresa" => $idEmpresa]);
$queues = $this->queueRepository->list(["id_empresa" => $idEmpresa]);
$channels = $this->numberChannelRepository->list(["id_empresa" => $idEmpresa]);
$atendimentos = $this->atendimentosRepository->getCompletAtend(["id_empresa" => $idEmpresa, "protocolo" => $request->protocolo,
"atendente" => $request->atendente, "usuario" => $request->usuario, "dataInicio" => $request->dataInicio,
"cliente_id" => $request->cliente_id, "dataFim" => $request->dataFim, "fila" => $request->fila, "channel" => $request->channel]);
// Verifique se o protocolo está presente na solicitação
if ($request->has('protocolo')) {
// Remova os hífens do protocolo
$protocolo = str_replace('-', '', $request->protocolo);
$atendimentos = $this->atendimentosRepository->getCompletAtend([
"id_empresa" => $idEmpresa,
"protocolo" => $protocolo
]);
} else {
$atendimentos = $this->atendimentosRepository->getCompletAtend([
"id_empresa" => $idEmpresa,
"protocolo" => $request->protocolo,
"atendente" => $request->atendente,
"usuario" => $request->usuario,
"dataInicio" => $request->dataInicio,
"cliente_id" => $request->cliente_id,
"dataFim" => $request->dataFim,
"fila" => $request->fila,
"channel" => $request->channel
]);
}
return view('admin.relatorios.historicoAtendimentos.historicoAtendimentos', compact('atendimentos', 'selected', 'agentes', 'queues', 'channels'));
}
@ -72,4 +91,52 @@ class RelatorioHistoricoAtendimentoController extends Controller
return view('admin.relatorios.historicoAtendimentos.historicoAtendimento', compact('messages', 'contato', 'atendentes'));
}
public function getCompletAtend(array $filters)
{
$query = $this->newQuery();
if (isset($filters['id_empresa'])) {
$query->where('id_empresa', $filters['id_empresa']);
}
if (isset($filters['protocolo'])) {
$query->where('protocolo', $filters['protocolo']);
}
// Outros filtros são ignorados se protocolo estiver presente
if (!isset($filters['protocolo'])) {
if (isset($filters['atendente'])) {
$query->where('atendente', $filters['atendente']);
}
if (isset($filters['usuario'])) {
$query->where('usuario', $filters['usuario']);
}
if (isset($filters['dataInicio'])) {
$query->where('data_inicio', '>=', $filters['dataInicio']);
}
if (isset($filters['dataFim'])) {
$query->where('data_fim', '<=', $filters['dataFim']);
}
if (isset($filters['cliente_id'])) {
$query->where('cliente_id', $filters['cliente_id']);
}
if (isset($filters['fila'])) {
$query->where('fila', $filters['fila']);
}
if (isset($filters['channel'])) {
$query->where('channel', $filters['channel']);
}
}
return $query->get();
}
}

76
resources/views/admin/relatorios/historicoAtendimentos/historicoAtendimento.blade.php

@ -1,5 +1,13 @@
<x-app-layout>
<div class="py-8 px-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.9.2/html2pdf.bundle.min.js"></script>
<div class="py-8 px-8">
<div class="flex justify-end mb-4">
<button id="exportButton" class="bg-blue-900 hover:bg-opacity-90 transition-all text-white py-2 px-6 rounded text-lg">Exportar PDF</button>
</div>
<div id="paginatoda">
<!-- Informações do Contato e do Atendente -->
<div class="border-gray-700 border-b-2 mb-8 pb-4">
<div class="p-6 text-gray-900 dark:text-gray-100">
@ -29,13 +37,13 @@
</div>
</div>
<div class="bg-white dark:bg-gray-800 px-6 py-6 m:rounded-lg overflow-y-scroll lg:w-full md:w-[50%] flex-wrap p-6">
<div class="bg-white dark:bg-gray-800 px-6 py-6 m:rounded-lg overflow-y-scroll lg:w-full md:w-[50%] flex-wrap p-6 atendente-info">
<h1 class="text-gray-800 dark:text-gray-100 text-lg px-6">Informações do atendente</h1>
<div class="atendentes mt-4 flex flex-col gap-4">
@foreach ($atendentes as $atendente)
<div class="accordion text-gray-800 dark:text-gray-100 " onclick="clickedAccordion(event)">
<div class="accordion text-gray-800 dark:text-gray-100" onclick="clickedAccordion(event)">
<div class="bg-gray-300 dark:bg-gray-600 flex items-center gap-6 cursor-pointer hover:bg-gray-700 px-6 py-5">
<i class="fas fa-play text-xs icon "></i>
<i class="fas fa-play text-xs icon"></i>
<span class="date">{{ \Carbon\Carbon::parse($atendente->data_atendimento)->format('d/m/Y')}}</span>
<span class="hour">{{ \Carbon\Carbon::parse($atendente->data_atendimento)->format('H:i:s')}}</span>
<span class="id">#{{$atendente->protocolo}}</span>
@ -66,13 +74,14 @@
</div>
<!-- Histórico de Conversa -->
<div class="bg-white dark:bg-gray-800 px-6 py-6 m:rounded-lg overflow-y-scroll lg:w-full md:w-[50%] flex-wrap p-6" style="height: 1000px; overflow: hidden;">
<div id="historicoConversa" class="bg-white dark:bg-gray-800 px-6 py-6 m:rounded-lg lg:w-full md:w-[50%] flex-wrap p-6">
<h1 class="text-gray-800 dark:text-gray-100 text-lg">Histórico de Conversa</h1>
<div class="chat overflow-y-scroll h-[1000px] px-8 py-4 flex flex-col gap-y-4">
<div class="chat h-auto px-8 py-4 flex flex-col gap-y-4">
<!-- Mensagens do Chat -->
</div>
</div>
</div>
</x-app-layout>
</div>
<script src="{{ asset('js/relatorios/historicoChamadas/index.js') }}"></script>
<script src="{{ asset('js/relatorios/historicoChamadas/accordion.js') }}"></script>
@ -85,3 +94,56 @@ const server_api = "{{env('APP_URL')}}";
montaChat(messages, cliente_id);
</script>
<script>
document.getElementById('exportButton').addEventListener('click', function () {
const paginatoda = document.getElementById('paginatoda');
if (!paginatoda) {
console.error('Elemento não encontrado!');
return;
}
// Clonar o conteúdo para exportação
const clone = paginatoda.cloneNode(true);
// Adicionar header e footer ao clone
const header = document.createElement('div');
header.style.textAlign = 'center';
header.style.marginBottom = '20px';
header.innerHTML = '<h2>Relatório de Atendimento</h2>';
const footer = document.createElement('div');
footer.style.textAlign = 'center';
footer.style.marginTop = '20px';
footer.innerHTML = '<p>Gerado pelo ZAPI</p>';
// Adicionar header e footer ao clone
clone.prepend(header);
clone.append(footer);
// Remover o botão de exportação e informações do atendente do clone
const exportButton = clone.querySelector('#exportButton');
const atendenteInfo = clone.querySelector('.atendente-info');
if (exportButton) {
exportButton.remove();
}
if (atendenteInfo) {
atendenteInfo.remove();
}
const options = {
margin: 0.5,
filename: 'historico_conversa.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' },
pagebreak: { mode: ['css', 'legacy'] },
};
html2pdf().set(options).from(clone).save();
});
</script>
</x-app-layout>

Loading…
Cancel
Save