Browse Source

organizacao de pastas das views e scripts js

1.0.0
guilherme guia 1 year ago
parent
commit
d0cb6418f6
  1. 29
      public/js/views/agentes/atualizaAgente.js
  2. 94
      public/js/views/agentesLogados/index.js
  3. 7
      public/js/views/app/selectTheme.js
  4. 35
      public/js/views/contatos/atualizaContato.js
  5. 66
      public/js/views/dashboard/index.js
  6. 19
      public/js/views/empresa/atualizaEmpresa.js
  7. 31
      public/js/views/fila/atualizaFila.js
  8. 181
      public/js/views/graficos/index.js
  9. 32
      public/js/views/pausa/atualizaPausa.js
  10. 59
      public/js/views/redirect/atualizaRedirect.js
  11. 56
      public/js/views/redirectOption/atualizaRedirectOption.js
  12. 39
      public/js/views/redirectOption/montaSelect.js
  13. 13
      public/js/views/redirectOption/requestType.js
  14. 0
      public/js/views/systemMessages/cadastroSystemMessage.js
  15. 101
      resources/views/admin/agentesLogados.blade.php
  16. 4
      resources/views/admin/configs.blade.php
  17. 41
      resources/views/admin/contatos.blade.php
  18. 76
      resources/views/admin/dashboard.blade.php
  19. 32
      resources/views/admin/empresas.blade.php
  20. 42
      resources/views/admin/filas.blade.php
  21. 186
      resources/views/admin/graficos.blade.php
  22. 48
      resources/views/admin/pausas.blade.php
  23. 123
      resources/views/admin/redirectOption.blade.php
  24. 70
      resources/views/admin/redirects.blade.php
  25. 69
      resources/views/admin/supervisor.blade.php
  26. 6
      resources/views/admin/systemMessage.blade.php
  27. 2
      resources/views/admin/templates.blade.php
  28. 40
      resources/views/admin/users.blade.php
  29. 1
      resources/views/components/modal/edit/modalEditContatos.blade.php
  30. 10
      resources/views/components/modal/edit/modalEditEmpresa.blade.php
  31. 0
      resources/views/components/modal/edit/modalEditFila.blade.php
  32. 0
      resources/views/components/modal/edit/modalEditPausa.blade.php
  33. 0
      resources/views/components/modal/edit/modalEditRedirect.blade.php
  34. 8
      resources/views/components/modal/edit/modalEditRedirectOption.blade.php
  35. 9
      resources/views/components/modal/edit/modalEditSystemMessage.blade.php
  36. 0
      resources/views/components/modal/edit/modalEditUsers.blade.php
  37. 2
      resources/views/components/modal/edit/modalPausarAgente.blade.php
  38. 2
      resources/views/components/modal/insert/modalContatos.blade.php
  39. 8
      resources/views/components/modal/insert/modalEmpresa.blade.php
  40. 0
      resources/views/components/modal/insert/modalFila.blade.php
  41. 0
      resources/views/components/modal/insert/modalPausa.blade.php
  42. 0
      resources/views/components/modal/insert/modalRedirect.blade.php
  43. 7
      resources/views/components/modal/insert/modalRedirectOption.blade.php
  44. 0
      resources/views/components/modal/insert/modalSystemMessage.blade.php
  45. 3
      resources/views/components/modal/insert/modalTemplates.blade.php
  46. 0
      resources/views/components/modal/insert/modalUsers.blade.php
  47. 29
      resources/views/layouts/app.blade.php

29
public/js/views/agentes/atualizaAgente.js

@ -0,0 +1,29 @@
function atualizaUsuario(id_user) {
$.ajax({
type: "get",
url: `users/editar/${id_user}`,
success: function ({
data
}) {
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector('form').action = `/users/editar/${data.id}`;
modal.querySelector("input[name='nome']").value = data.nome;
modal.querySelector("input[name='email']").value = data.email;
modal.querySelector("input[name='matricula']").value = data.matricula;
const containerCheckbox = modal.querySelector(".container-checkbox");
if (!data.status) {
containerCheckbox.innerHTML = `<input type="radio" name="status" value="on"> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}

94
public/js/views/agentesLogados/index.js

@ -0,0 +1,94 @@
const colorStatus = {
LIVRE: "green-500",
OCUPADO: "red-500",
PAUSA: "red-500",
INDISPONIVEL: "orange-400",
CHAMANDO: "orange-400",
}
function getFilaId()
{
const url = window.location.href;
const splitUrl = url.split('/');
const id = splitUrl[splitUrl.length - 1];
return id;
}
function getDadosRelatorioDB(fila_id) {
return new Promise(function(resolve, reject){
$.ajax({
type: "get",
dataType: 'json',
url: `/dashboard/agentes/${fila_id}/fila`,
success: function(response) {
const data = response.data;
resolve(data);
}
});
})
}
async function montarRelatorios()
{
const id = getFilaId();
const data = await getDadosRelatorioDB(id);
let elementsTable = "";
data.forEach(supervisor => {
const tempoFormatado = supervisor.login.split(".")[0];
const btnPlay = `
<form method="POST" action="/dashboard/agentes/{{$fila->id}}/retirarPausa" title="Retirar Pausa?" class="bg-blue-600 text-white rounded flex-1 text-xl text-center py-2 px-3 cursor-pointer" >
@csrf
<input type="hidden" name="supervisor_id" value="${supervisor.id}">
<button >
<i class="fas fa-play-circle"></i>
</button>
</form>
`
const btnPausa = `<a class="bg-blue-600 text-white rounded flex-1 text-xl text-center py-2 px-3 cursor-pointer" title="Colocar em Pausa?" onclick="selecionaAgente(${supervisor.id})"><i class="fas fa-pause"></i></a>`;
const agenteIsPausa = supervisor.status === "PAUSA" ? btnPlay : btnPausa;
elementsTable += `
<tr class="bg-gray-50 dark:bg-gray-800 dark:text-gray-100 text-center">
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.id}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.nome}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.matricula}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${tempoFormatado}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.motivo_pausa ?? "Sem Pausa"}</td>
<td class="p-3 text-sm text-${colorStatus[supervisor.status]}">${supervisor.status}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.qtde_atendimento}</td>
<td class="p-3 text-sm font-bold flex items-center gap-2 flex-wrap">
${agenteIsPausa}
<form method="POST" action="/dashboard/agentes/{{$fila->id}}/desconectar" title="Desconectar Pausa?" class="bg-red-600 text-white flex-1 rounded text-xl text-center py-2 px-3" >
@csrf
<input type="hidden" name="supervisor_id" value="${supervisor.id}">
<button >
<i class="fas fa-power-off"></i>
</button>
</form>
</td>
</tr>
`
});
$(".table-relatorio").html(elementsTable);
}
function selecionaAgente(supervisor_id){
console.log(supervisor_id);
const modal = document.querySelector(".modal");
modal.style.display = "block";
modal.querySelector("form").action = `/dashboard/agentes/{{$fila->nome}}/pausar`;
modal.querySelector("input[name='supervisor_id']").value = supervisor_id;
}

7
public/js/views/app/selectTheme.js

@ -0,0 +1,7 @@
function selectTheme() {
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
}

35
public/js/views/contatos/atualizaContato.js

@ -0,0 +1,35 @@
function atualizaContato(id_contato) {
$.ajax({
type: "get",
url: `contatos/${id_contato}/edit`,
success: function({
data
}) {
const contato_data = data.contato_data;
$(".modal-edit").show();
$(".modal-edit").find('form').attr('action', `contatos/${id_contato}`);
$(".modal-edit").find("input[name='nome']").val(contato_data.nome);
$(".modal-edit").find("input[name='email']").val(contato_data.email);
$(".modal-edit").find("textarea[name='descricao']").val(contato_data.notes);
const numeroFormatado = $(".modal-edit").find("input[name='numero']").masked(contato_data.contato);
$(".modal-edit").find("input[name='numero']").val(numeroFormatado);
if (contato_data.status) {
$(".modal-edit").find(".container-radio").
html(`<input type="radio" name="status" value="on" checked> <span class="mr-3 dark:text-gray-100">Sim</span><input type="radio" name="status" value="off" > <span class="dark:text-gray-100">Não</span>`)
} else {
$(".modal-edit").find(".container-radio").
html(`<input type="radio" name="status" value="on" > <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`)
}
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}

66
public/js/views/dashboard/index.js

@ -0,0 +1,66 @@
const eventos = {
EMESPERA: 'Em espera',
TRANSFER: 'Transferidos',
COMPLETE_CALLER: 'Finalizadas pelo cliente',
LOST_CONNECTION: 'Desconectadas',
COMPLETE_AGENT: 'Finalizas pelo Agente',
START: 'Iniciadas',
}
function getDadosRelatorioDB() {
return new Promise(function(resolve, reject){
$.ajax({
type: "get",
dataType: 'json',
url: `dashboard/getRelatorioDados`,
success: function(response) {
const data = response.data;
resolve(data);
}
});
})
}
async function montarRelatorios()
{
const data = await getDadosRelatorioDB();
$(".text-ativos").text(data.totalAgentesAtivos);
$(".text-pausa").text(data.totalAgentesPausa);
$(".text-atendimentoDia").text(data.atendimentosDia);
$(".text-atendimentosMes").text(data.atendimentosPorMes);
let elementsTable = "";
data.relatoriosAtendimento.forEach(relatorio => {
elementsTable += `
<tr class="bg-white dark:bg-gray-800 dark:border-gray-600 border-b-2">
<td class="text-center" title="Ativar essa fila">
<a href="dashboard/agentes/${relatorio.fila_id}" class="text-xl p-2 hover:bg-gray-100 hover:dark:bg-gray-700 rounded-full">
<i class="fas fa-play-circle text-gray-900 dark:text-gray-100">
</i>
</a>
</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 text-left">${relatorio.fila}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 text-left">${relatorio.quantidade_supervisores}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 text-left">${relatorio.quantidade_atendimentos}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 text-left">0</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">
<div title="Colocar fila em Pausa" class="dark:bg-white bg-gray-800 hover:bg-gray-100 hover:dark:bg-gray-500 rounded-full w-6 h-6 flex items-center justify-center cursor-pointer" onclick="selecionaFila(${relatorio.fila_id})">
<i class="fas fa-pause dark:text-gray-900 text-gray-100 text-xs"></i></button>
</div>
</td>
</tr>
`
});
$(".table-relatorio").html(elementsTable);
}
function selecionaFila(fila_id){
const modal = document.querySelector(".modal");
modal.style.display = "block";
modal.querySelector("form").action = `/dashboard/agentes/${fila_id}/pausarAgentesFila`;
}

19
public/js/views/empresa/atualizaEmpresa.js

@ -0,0 +1,19 @@
function atualizaEmpresa(empresa_id) {
$.ajax({
type: "get",
url: `empresas/${empresa_id}/edit`,
success: function({data}) {
const empresa_data = data.empresa_data;
console.log(empresa_data);
$(".modal-edit").show();
$(".modal-edit").find('form').attr('action', `empresas/${empresa_id}`);
$(".modal-edit").find("input[name='nome']").val(empresa_data.nome);
$(".modal-edit").find("input[name='token']").val(empresa_data.token);
$(".modal-edit").find("input[name='email']").val(empresa_data.email);
const cnpjFormatado = $(".modal-edit").find("input[name='cnpj']").masked(empresa_data.cnpj);
$(".modal-edit").find("input[name='cnpj']").val(cnpjFormatado);
}
});
}

31
public/js/views/fila/atualizaFila.js

@ -0,0 +1,31 @@
function atualizarFila(id_fila) {
$.ajax({
type: "get",
url: `filas/editar/${id_fila}`,
success: function({
data
}) {
console.log(data)
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector('form').action = `/filas/editar/${data.id}`;
modal.querySelector("input[name='nome']").value = data.nome;
const containerCheckbox = modal.querySelector(".container-checkbox");
if (!data.is_ativa) {
containerCheckbox.innerHTML = `<input type="radio" name="status" value="on"> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}

181
public/js/views/graficos/index.js

@ -0,0 +1,181 @@
const eventos = {
EMESPERA: 'Em espera',
TRANSFER: 'Transferidos',
COMPLETE_CALLER: 'Finalizadas pelo cliente',
LOST_CONNECTION: 'Desconectadas',
COMPLETE_AGENT: 'Finalizas pelo Agente',
START: 'Iniciadas',
}
function getDadosRelatorioDB() {
return new Promise(function(resolve, reject) {
$.ajax({
type: "get",
dataType: 'json',
url: `graficos/getDados`,
success: function(response) {
const data = response.data;
resolve(data);
}
});
})
}
function montaGrafico1(dataDB) {
let labels = dataDB.map((value) => value.nome)
let data = dataDB.map((value) => value.qtde_atendimento)
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
data: data,
label: "Atendimento Por Agente",
font: 90,
borderWidth: 1,
backgroundColor: [
'rgba(255, 99, 132, 0.7)',
'rgba(255, 159, 64, 0.7)',
'rgba(255, 205, 86, 0.7)',
'rgba(75, 192, 192, 0.7)',
'rgba(54, 162, 235, 0.7)',
'rgba(153, 102, 255, 0.7)',
'rgba(201, 203, 207, 0.7)'
],
borderColor: [
'rgb(255, 99, 132)',
'rgb(255, 159, 64)',
'rgb(255, 205, 86)',
'rgb(75, 192, 192)',
'rgb(54, 162, 235)',
'rgb(153, 102, 255)',
'rgb(201, 203, 207)'
],
}],
},
options: {
color: '#fff',
plugins: {
legend: {
labels: {
font: {
size: 15
}
}
}
},
scales: {
y: {
beginAtZero: true,
},
x: {
ticks: {
color: '#91a0a7',
font: {
size: 13
},
}
}
},
},
});
}
function montaGrafico2(dataDB) {
const ctx2 = document.getElementById('myChart2');
const somaPorEvento = {};
dataDB.forEach(element => {
if (somaPorEvento[element.evento]) {
somaPorEvento[element.evento] += element.qtde_usados;
} else {
somaPorEvento[element.evento] = element.qtde_usados;
}
})
let labels = Object.keys(somaPorEvento).map(label => eventos[label]);
let data = Object.values(somaPorEvento);
new Chart(ctx2, {
type: 'doughnut',
data: {
labels: labels,
datasets: [{
data: data,
borderWidth: 1,
backgroundColor: [
'rgba(255, 99, 132, 0.8)',
'rgba(255, 159, 64, 0.8)',
'rgba(75, 192, 192, 0.8)',
'rgba(54, 162, 235, 0.8)',
'rgba(153, 102, 255, 0.8)',
'rgba(201, 203, 207, 0.8)'
],
borderColor: [
'rgb(255, 99, 132)',
'rgb(255, 159, 64)',
'rgb(75, 192, 192)',
'rgb(54, 162, 235)',
'rgb(153, 102, 255)',
'rgb(201, 203, 207)'
],
}]
},
options: {
color: '#91a0a7',
scales: {
y: {
beginAtZero: true
}
}
}
});
}
function montaGrafico3(dataDB) {
const ctx3 = document.getElementById('myChart3');
let labels3 = dataDB.map((value) => value.nome)
let data3 = dataDB.map((value) => value.qtde_fila)
new Chart(ctx3, {
type: 'pie',
data: {
labels: labels3,
datasets: [{
label: 'Quantidade de atendimento',
data: data3,
borderWidth: 1,
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(54, 162, 235)',
'rgb(255, 205, 86)'
],
fontColor: '#fff',
}]
},
options: {
color: '#91a0a7',
scales: {
y: {
beginAtZero: true
}
}
}
});
}
async function graficos() {
const data = await getDadosRelatorioDB();
montaGrafico1(data.atendimentosData);
montaGrafico2(data.atendimentosStatusData);
montaGrafico3(data.filasMaisUsadas);
}

32
public/js/views/pausa/atualizaPausa.js

@ -0,0 +1,32 @@
function atualizarPausa(id_user) {
$.ajax({
type: "get",
url: `pausas/editar/${id_user}`,
success: function({
data
}) {
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector('form').action = `/pausas/editar/${data.id}`;
modal.querySelector("input[name='motivo']").value = data.motivo;
const containerCheckbox = modal.querySelector(".container-checkbox");
if (!data.is_ativo) {
containerCheckbox.innerHTML = `<input type="radio" name="status" value="on"> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}

59
public/js/views/redirect/atualizaRedirect.js

@ -0,0 +1,59 @@
function atualizaRedirect(id_redirect) {
$.ajax({
type: "get",
url: `redirects/${id_redirect}/edit`,
success: function({
data
}) {
const redirect_data = data.redirect_data;
const numbers_channels = data.numbers;
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector('form').action = `redirects/${id_redirect}`;
modal.querySelector("input[name='nome']").value = redirect_data.name;
modal.querySelector("textarea[name='descricao']").value = redirect_data.description;
const containerRadioStatus = document.querySelector(".container-radio-status");
const containerRadioInitial = document.querySelector(".container-radio-initial");
if (redirect_data.status) {
containerRadioStatus.innerHTML =
`<input type="radio" name="status" value="on" checked> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" > <span class="dark:text-gray-100">Não</span>`
} else {
containerRadioStatus.innerHTML =
`<input type="radio" name="status" value="on" > <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
if (redirect_data.initial) {
containerRadioInitial.innerHTML =
`<input type="radio" name="initial" value="on" checked> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="initial" value="off" > <span class="dark:text-gray-100">Não</span>`
} else {
containerRadioInitial.innerHTML =
`<input type="radio" name="initial" value="on" > <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="initial" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
const containerChannels = modal.querySelector("select[name='channel']");
numbers_channels.forEach(channel => {
if (redirect_data.id_number === channel.id) {
containerChannels.innerHTML =
` <option value="${channel.id}" selected>${channel.title}</option>`
} else {
containerChannels.innerHTML =
` <option value="${channel.id}">${channel.title}</option>`
}
})
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}

56
public/js/views/redirectOption/atualizaRedirectOption.js

@ -0,0 +1,56 @@
function atualizaRedirectOption(option_id) {
$.ajax({
type: "get",
url: `options/${option_id}/edit`,
success: async function({
data
}) {
const option_data = data.option_data;
const types = data.types
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.setAttribute('data-sequenceDB', option_data.sequence);
modal.querySelector("input[name='sequencia']").value = option_data.sequence;
modal.querySelector("textarea[name='descricao']").value = option_data.description;
modal.querySelector('form').action = `options/${option_id}`;
if (option_data.hide) {
modal.querySelector(".container-radio").innerHTML =
`<input type="radio" name="status" value="on"> <span class="mr-3 dark:text-gray-100" >Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`;
} else {
modal.querySelector(".container-radio").innerHTML =
`<input type="radio" name="status" value="on" checked> <span class="mr-3 dark:text-gray-100" >Sim</span>
<input type="radio" name="status" value="off" > <span class="dark:text-gray-100">Não</span>`;
}
let containerTypes = '';
types.forEach(type => {
if (option_data.id_type === type.id) {
containerTypes +=
` <option value="${type.id}" selected>${type.name}</option>`
} else {
containerTypes +=
` <option value="${type.id}">${type.name}</option>`
}
})
modal.querySelector(".select-types").innerHTML = containerTypes;
montaSelectDestino(option_data.id_type, modal, option_data.code_id);
}
});
}
document.querySelectorAll('.select-types').forEach(el => {
el.addEventListener('change', (e) => {
const select = e.target;
const modal = select.closest('.modal') ?? select.closest('.modal-edit');
const id_redirect = select.value;
montaSelectDestino(id_redirect, modal);
})
})

39
public/js/views/redirectOption/montaSelect.js

@ -0,0 +1,39 @@
async function montaSelectDestino(id_type, modal, code_id = null) {
const data = await requestType(id_type);
const selectDestino = modal.querySelector(".select-destino");
const inputDestino = modal.querySelector(".input-destino");
if (!data) {
selectDestino.style.display = 'none';
selectDestino.disabled = true;
inputDestino.disabled = false;
inputDestino.style.display = 'block';
return;
}
selectDestino.style.display = 'block';
selectDestino.disabled = false;
inputDestino.disabled = true;
inputDestino.style.display = 'none';
let selectElements = "";
if (code_id) {
data.forEach(element => {
let matriculaOrId = element.matricula ?? element.id;
if (matriculaOrId.toString() === code_id.toString()) {
selectElements +=
` <option value="${element.id}" selected>${element.name}</option>`
} else {
selectElements +=
` <option value="${element.id}">${element.name}</option>`
}
})
} else {
data.forEach(element => {
selectElements += `<option value="${element.id}">${element.name}</option>`
});
}
selectDestino.innerHTML = selectElements;
}

13
public/js/views/redirectOption/requestType.js

@ -0,0 +1,13 @@
function requestType(id_type) {
return new Promise(function(resolve, reject) {
$.ajax({
type: "get",
dataType: 'json',
url: `options/${id_type}`,
success: function(response) {
const data = response.data.data;
resolve(data);
}
});
});
}

0
public/js/cadastroSystemMessage.js → public/js/views/systemMessages/cadastroSystemMessage.js

101
resources/views/admin/agentesLogados.blade.php

@ -47,111 +47,16 @@
</div>
</div>
@push('agentesLogados')
<script src="{{ asset('js/views/agentesLogados/index.js') }}"></script>
<script>
const colorStatus = {
LIVRE: "green-500",
OCUPADO: "red-500",
PAUSA: "red-500",
INDISPONIVEL: "orange-400",
CHAMANDO: "orange-400",
}
function getFilaId()
{
const url = window.location.href;
const splitUrl = url.split('/');
const id = splitUrl[splitUrl.length - 1];
return id;
}
function getDadosRelatorioDB(fila_id) {
return new Promise(function(resolve, reject){
$.ajax({
type: "get",
dataType: 'json',
url: `/dashboard/agentes/${fila_id}/fila`,
success: function(response) {
const data = response.data;
resolve(data);
}
});
})
}
async function montarRelatorios()
{
const id = getFilaId();
const data = await getDadosRelatorioDB(id);
let elementsTable = "";
data.forEach(supervisor => {
const tempoFormatado = supervisor.login.split(".")[0];
const btnPlay = `
<form method="POST" action="/dashboard/agentes/{{$fila->id}}/retirarPausa" title="Retirar Pausa?" class="bg-blue-600 text-white rounded flex-1 text-xl text-center py-2 px-3 cursor-pointer" >
@csrf
<input type="hidden" name="supervisor_id" value="${supervisor.id}">
<button >
<i class="fas fa-play-circle"></i>
</button>
</form>
`
const btnPausa = `<a class="bg-blue-600 text-white rounded flex-1 text-xl text-center py-2 px-3 cursor-pointer" title="Colocar em Pausa?" onclick="selecionaAgente(${supervisor.id})"><i class="fas fa-pause"></i></a>`;
const agenteIsPausa = supervisor.status === "PAUSA" ? btnPlay : btnPausa;
elementsTable += `
<tr class="bg-gray-50 dark:bg-gray-800 dark:text-gray-100 text-center">
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.id}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.nome}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.matricula}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${tempoFormatado}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.motivo_pausa ?? "Sem Pausa"}</td>
<td class="p-3 text-sm text-${colorStatus[supervisor.status]}">${supervisor.status}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">${supervisor.qtde_atendimento}</td>
<td class="p-3 text-sm font-bold flex items-center gap-2 flex-wrap">
${agenteIsPausa}
<form method="POST" action="/dashboard/agentes/{{$fila->id}}/desconectar" title="Desconectar Pausa?" class="bg-red-600 text-white flex-1 rounded text-xl text-center py-2 px-3" >
@csrf
<input type="hidden" name="supervisor_id" value="${supervisor.id}">
<button >
<i class="fas fa-power-off"></i>
</button>
</form>
</td>
</tr>
`
});
$(".table-relatorio").html(elementsTable);
}
function selecionaAgente(supervisor_id){
console.log(supervisor_id);
const modal = document.querySelector(".modal");
modal.style.display = "block";
modal.querySelector("form").action = `/dashboard/agentes/{{$fila->nome}}/pausar`;
modal.querySelector("input[name='supervisor_id']").value = supervisor_id;
}
montarRelatorios();
montarRelatorios();
setInterval(() => {
montarRelatorios();
}, 10000);
</script>
@endpush
<x-modalPausarAgente :pausas="$pausas"></x-modalPausarAgente>
<x-modal.edit.modalPausarAgente :pausas="$pausas"></x-modalPausarAgente>
</x-app-layout>

4
resources/views/admin/configs.blade.php

@ -31,8 +31,4 @@
</div>
</div>
</div>
</x-app-layout>

41
resources/views/admin/contatos.blade.php

@ -69,44 +69,9 @@
</table>
</div>
</div>
<x-modalContatos></x-modalContatos>
<x-modalEditContatos></x-modalEditContatos>
<x-modal.insert.modalContatos></x-modalContatos>
<x-modal.edit.modalEditContatos></x-modalEditContatos>
<script>
function atualizaContato(id_contato) {
$.ajax({
type: "get",
url: `contatos/${id_contato}/edit`,
success: function({
data
}) {
const contato_data = data.contato_data;
<script src="{{ asset('js/views/contatos/atualizaContato.js') }}"></script>
$(".modal-edit").show();
$(".modal-edit").find('form').attr('action', `contatos/${id_contato}`);
$(".modal-edit").find("input[name='nome']").val(contato_data.nome);
$(".modal-edit").find("input[name='email']").val(contato_data.email);
$(".modal-edit").find("textarea[name='descricao']").val(contato_data.notes);
const numeroFormatado = $(".modal-edit").find("input[name='numero']").masked(contato_data.contato);
$(".modal-edit").find("input[name='numero']").val(numeroFormatado);
if (contato_data.status) {
$(".modal-edit").find(".container-radio").
html(`<input type="radio" name="status" value="on" checked> <span class="mr-3 dark:text-gray-100">Sim</span><input type="radio" name="status" value="off" > <span class="dark:text-gray-100">Não</span>`)
} else {
$(".modal-edit").find(".container-radio").
html(`<input type="radio" name="status" value="on" > <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`)
}
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}
</script>
</x-app-layout>

76
resources/views/admin/dashboard.blade.php

@ -61,78 +61,14 @@
</div>
</div>
<script>
const eventos = {
EMESPERA: 'Em espera',
TRANSFER: 'Transferidos',
COMPLETE_CALLER: 'Finalizadas pelo cliente',
LOST_CONNECTION: 'Desconectadas',
COMPLETE_AGENT: 'Finalizas pelo Agente',
START: 'Iniciadas',
}
function getDadosRelatorioDB() {
return new Promise(function(resolve, reject){
$.ajax({
type: "get",
dataType: 'json',
url: `dashboard/getRelatorioDados`,
success: function(response) {
const data = response.data;
resolve(data);
}
});
})
}
async function montarRelatorios()
{
const data = await getDadosRelatorioDB();
$(".text-ativos").text(data.totalAgentesAtivos);
$(".text-pausa").text(data.totalAgentesPausa);
$(".text-atendimentoDia").text(data.atendimentosDia);
$(".text-atendimentosMes").text(data.atendimentosPorMes);
let elementsTable = "";
data.relatoriosAtendimento.forEach(relatorio => {
elementsTable += `
<tr class="bg-white dark:bg-gray-800 dark:border-gray-600 border-b-2">
<td class="text-center" title="Ativar essa fila">
<a href="dashboard/agentes/${relatorio.fila_id}" class="text-xl p-2 hover:bg-gray-100 hover:dark:bg-gray-700 rounded-full">
<i class="fas fa-play-circle text-gray-900 dark:text-gray-100">
</i>
</a>
</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 text-left">${relatorio.fila}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 text-left">${relatorio.quantidade_supervisores}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 text-left">${relatorio.quantidade_atendimentos}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 text-left">0</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">
<div title="Colocar fila em Pausa" class="dark:bg-white bg-gray-800 hover:bg-gray-100 hover:dark:bg-gray-500 rounded-full w-6 h-6 flex items-center justify-center cursor-pointer" onclick="selecionaFila(${relatorio.fila_id})">
<i class="fas fa-pause dark:text-gray-900 text-gray-100 text-xs"></i></button>
</div>
</td>
</tr>
`
});
<script src="{{ asset('js/views/dashboard/index.js') }}"></script>
<script>
montarRelatorios();
$(".table-relatorio").html(elementsTable);
}
function selecionaFila(fila_id){
const modal = document.querySelector(".modal");
modal.style.display = "block";
modal.querySelector("form").action = `/dashboard/agentes/${fila_id}/pausarAgentesFila`;
}
montarRelatorios();
setInterval(() => {
montarRelatorios();
}, 10000);
setInterval(() => {
montarRelatorios();
}, 10000);
</script>

32
resources/views/admin/empresas.blade.php

@ -15,7 +15,6 @@
<button class="bg-blue-500 hover:bg-opacity-90 transition-all text-white py-2 px-6 rounded text-base overflow-hidden" @click="modal = !modal" type="button">Cadastrar Empresa</button>
</div>
<form action="{{route('users')}}" method="GET" class="flex w-full gap-3 flex-col lg:flex-row ">
<div class="search bg-white dark:bg-gray-800 rounded px-3 py-1 overflow-hidden">
@ -51,7 +50,7 @@
<td class="p-3 text-sm text-gray-700 dark:text-gray-100" data-mask="000.000.000-00">{{$empresa->cnpj}}</td>
<td class="p-3 text-sm font-bold flex items-center gap-2 flex-wrap">
<button class="bg-blue-600 text-white p-2 rounded flex-1 text-lg text-center" onclick="atualizaRedirectOption(<?= $empresa->id ?>)"><i class="fas fa-edit"></i></button>
<button class="bg-blue-600 text-white p-2 rounded flex-1 text-lg text-center" onclick="atualizaEmpresa(<?= $empresa->id ?>)"><i class="fas fa-edit"></i></button>
{{-- @if($empresa->status)
<form method="POST" id="formulario" action="users/deletar/{{$empresa->id}}" class="flex-1 flex" title="desativar conta?" onclick="javascript: if(!confirm('Deseja desativar esse usuário?')) return false;">
@csrf
@ -69,32 +68,9 @@
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.js"></script>
<script>
function atualizaRedirectOption(empresa_id) {
$.ajax({
type: "get",
url: `empresas/${empresa_id}/edit`,
success: function({data}) {
const empresa_data = data.empresa_data;
console.log(empresa_data);
$(".modal-edit").show();
$(".modal-edit").find('form').attr('action', `empresas/${empresa_id}`);
$(".modal-edit").find("input[name='nome']").val(empresa_data.nome);
$(".modal-edit").find("input[name='token']").val(empresa_data.token);
$(".modal-edit").find("input[name='email']").val(empresa_data.email);
const cnpjFormatado = $(".modal-edit").find("input[name='cnpj']").masked(empresa_data.cnpj);
$(".modal-edit").find("input[name='cnpj']").val(cnpjFormatado);
}
});
}
</script>
<script src="{{ asset('js/views/empresa/atualizaEmpresa.js') }}"></script>
<x-modalEmpresa></x-modalEmpresa>
<x-modalEditEmpresa></x-modalEditEmpresa>
<x-modal.insert.modalEmpresa></x-modalEmpresa>
<x-modal.edit.modalEditEmpresa></x-modalEditEmpresa>
</x-app-layout>

42
resources/views/admin/filas.blade.php

@ -7,7 +7,6 @@
</div>
@endif
<div class="header flex flex-col items-center gap-4 ">
<div class="flex justify-between items-center w-full mb-5">
<h1 class=" text-gray-900 dark:text-gray-100 text-3xl font-bold text-center">
@ -82,43 +81,8 @@
</div>
</div>
<x-modalFila></x-modalFila>
<x-modalEditFila></x-modalEditFila>
@push('updateFila')
<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E=" crossorigin="anonymous"></script>
<script>
function atualizarFila(id_fila) {
$.ajax({
type: "get",
url: `filas/editar/${id_fila}`,
success: function({
data
}) {
console.log(data)
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector('form').action = `/filas/editar/${data.id}`;
modal.querySelector("input[name='nome']").value = data.nome;
const containerCheckbox = modal.querySelector(".container-checkbox");
if (!data.is_ativa) {
containerCheckbox.innerHTML = `<input type="radio" name="status" value="on"> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}
</script>
@endpush
<script src="{{ asset('js/views/fila/atualizaFila.js') }}"></script>
<x-modal.insert.modalFila></x-modalFila>
<x-modal.edit.modalEditFila></x-modalEditFila>
</x-app-layout>

186
resources/views/admin/graficos.blade.php

@ -31,193 +31,9 @@
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"></script>
<script src="{{ asset('js/views/graficos/index.js') }}"></script>
@push('graficos')
<script>
const eventos = {
EMESPERA: 'Em espera',
TRANSFER: 'Transferidos',
COMPLETE_CALLER: 'Finalizadas pelo cliente',
LOST_CONNECTION: 'Desconectadas',
COMPLETE_AGENT: 'Finalizas pelo Agente',
START: 'Iniciadas',
}
function getDadosRelatorioDB() {
return new Promise(function(resolve, reject) {
$.ajax({
type: "get",
dataType: 'json',
url: `graficos/getDados`,
success: function(response) {
const data = response.data;
resolve(data);
}
});
})
}
function montaGrafico1(dataDB) {
let labels = dataDB.map((value) => value.nome)
let data = dataDB.map((value) => value.qtde_atendimento)
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
data: data,
label: "Atendimento Por Agente",
font: 90,
borderWidth: 1,
backgroundColor: [
'rgba(255, 99, 132, 0.7)',
'rgba(255, 159, 64, 0.7)',
'rgba(255, 205, 86, 0.7)',
'rgba(75, 192, 192, 0.7)',
'rgba(54, 162, 235, 0.7)',
'rgba(153, 102, 255, 0.7)',
'rgba(201, 203, 207, 0.7)'
],
borderColor: [
'rgb(255, 99, 132)',
'rgb(255, 159, 64)',
'rgb(255, 205, 86)',
'rgb(75, 192, 192)',
'rgb(54, 162, 235)',
'rgb(153, 102, 255)',
'rgb(201, 203, 207)'
],
}],
},
options: {
color: '#fff',
plugins: {
legend: {
labels: {
font: {
size: 15
}
}
}
},
scales: {
y: {
beginAtZero: true,
},
x: {
ticks: {
color: '#91a0a7',
font: {
size: 13
},
}
}
},
},
});
}
function montaGrafico2(dataDB) {
const ctx2 = document.getElementById('myChart2');
const somaPorEvento = {};
dataDB.forEach(element => {
if (somaPorEvento[element.evento]) {
somaPorEvento[element.evento] += element.qtde_usados;
} else {
somaPorEvento[element.evento] = element.qtde_usados;
}
})
let labels = Object.keys(somaPorEvento).map(label => eventos[label]);
let data = Object.values(somaPorEvento);
new Chart(ctx2, {
type: 'doughnut',
data: {
labels: labels,
datasets: [{
data: data,
borderWidth: 1,
backgroundColor: [
'rgba(255, 99, 132, 0.8)',
'rgba(255, 159, 64, 0.8)',
'rgba(75, 192, 192, 0.8)',
'rgba(54, 162, 235, 0.8)',
'rgba(153, 102, 255, 0.8)',
'rgba(201, 203, 207, 0.8)'
],
borderColor: [
'rgb(255, 99, 132)',
'rgb(255, 159, 64)',
'rgb(75, 192, 192)',
'rgb(54, 162, 235)',
'rgb(153, 102, 255)',
'rgb(201, 203, 207)'
],
}]
},
options: {
color: '#91a0a7',
scales: {
y: {
beginAtZero: true
}
}
}
});
}
function montaGrafico3(dataDB) {
const ctx3 = document.getElementById('myChart3');
let labels3 = dataDB.map((value) => value.nome)
let data3 = dataDB.map((value) => value.qtde_fila)
new Chart(ctx3, {
type: 'pie',
data: {
labels: labels3,
datasets: [{
label: 'Quantidade de atendimento',
data: data3,
borderWidth: 1,
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(54, 162, 235)',
'rgb(255, 205, 86)'
],
fontColor: '#fff',
}]
},
options: {
color: '#91a0a7',
scales: {
y: {
beginAtZero: true
}
}
}
});
}
async function graficos() {
const data = await getDadosRelatorioDB();
montaGrafico1(data.atendimentosData);
montaGrafico2(data.atendimentosStatusData);
montaGrafico3(data.filasMaisUsadas);
}
graficos();
</script>
@endpush
</x-app-layout>

48
resources/views/admin/pausas.blade.php

@ -6,7 +6,6 @@
</div>
@endif
<div class="header flex flex-col items-center gap-4 ">
<div class="flex justify-between items-center w-full mb-5">
<h1 class=" text-gray-900 dark:text-gray-100 text-3xl font-bold text-center">
@ -17,7 +16,6 @@
@endcan
</div>
<form action="{{route('pausas')}}" method="GET" class="flex w-full gap-3 flex-col lg:flex-row ">
<div class="search bg-white dark:bg-gray-800 rounded px-3 py-1 overflow-hidden">
@ -85,49 +83,9 @@
</div>
</div>
<script src="{{ asset('js/views/pausa/atualizaPausa.js') }}"></script>
<x-modalPausa></x-modalPausa>
<x-modalEditPausa></x-modalEditPausa>
@push('updatePausa')
<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E=" crossorigin="anonymous"></script>
<script>
function atualizarPausa(id_user) {
$.ajax({
type: "get",
url: `pausas/editar/${id_user}`,
success: function({
data
}) {
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector('form').action = `/pausas/editar/${data.id}`;
modal.querySelector("input[name='motivo']").value = data.motivo;
const containerCheckbox = modal.querySelector(".container-checkbox");
if (!data.is_ativo) {
containerCheckbox.innerHTML = `<input type="radio" name="status" value="on"> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}
</script>
@endpush
<x-modal.insert.modalPausa></x-modalPausa>
<x-modal.edit.modalEditPausa></x-modalEditPausa>
</x-app-layout>

123
resources/views/admin/redirectOption.blade.php

@ -89,124 +89,17 @@
</div>
</div>
</div>
<x-modalRedirectOption :id_redirect="$id_redirect" :types="$types"></x-modalRedirectOption>
<x-modalEditRedirectOption :id_redirect="$id_redirect"></x-modalEditRedirectOption>
<x-modal.insert.modalRedirectOption :id_redirect="$id_redirect" :types="$types"></x-modalRedirectOption>
<x-modal.edit.modalEditRedirectOption :id_redirect="$id_redirect"></x-modalEditRedirectOption>
<script>
function requestType(id_type) {
return new Promise(function(resolve, reject) {
$.ajax({
type: "get",
dataType: 'json',
url: `options/${id_type}`,
success: function(response) {
const data = response.data.data;
resolve(data);
}
});
});
}
<script src="{{ asset('js/views/redirectOption/atualizaRedirectOption.js') }}"></script>
<script src="{{ asset('js/views/redirectOption/montaSelect.js') }}"></script>
<script src="{{ asset('js/views/redirectOption/requestType.js') }}"></script>
<script>
const modal = document.querySelector(".modal");
let id_type = 1;
montaSelectDestino(id_type, modal);
async function montaSelectDestino(id_type, modal, code_id = null) {
const data = await requestType(id_type);
const selectDestino = modal.querySelector(".select-destino");
const inputDestino = modal.querySelector(".input-destino");
if (!data) {
selectDestino.style.display = 'none';
selectDestino.disabled = true;
inputDestino.disabled = false;
inputDestino.style.display = 'block';
return;
}
selectDestino.style.display = 'block';
selectDestino.disabled = false;
inputDestino.disabled = true;
inputDestino.style.display = 'none';
let selectElements = "";
if (code_id) {
data.forEach(element => {
let matriculaOrId = element.matricula ?? element.id;
if (matriculaOrId.toString() === code_id.toString()) {
selectElements +=
` <option value="${element.id}" selected>${element.name}</option>`
} else {
selectElements +=
` <option value="${element.id}">${element.name}</option>`
}
})
} else {
data.forEach(element => {
selectElements += `<option value="${element.id}">${element.name}</option>`
});
}
selectDestino.innerHTML = selectElements;
}
function atualizaRedirectOption(option_id) {
$.ajax({
type: "get",
url: `options/${option_id}/edit`,
success: async function({
data
}) {
const id_type = 1;
const option_data = data.option_data;
const types = data.types
const redirectsData = await requestType(option_data.id_type);
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.setAttribute('data-sequenceDB', option_data.sequence);
modal.querySelector("input[name='sequencia']").value = option_data.sequence;
modal.querySelector("textarea[name='descricao']").value = option_data.description;
modal.querySelector('form').action = `options/${option_id}`;
if (option_data.hide) {
modal.querySelector(".container-radio").innerHTML =
`<input type="radio" name="status" value="on"> <span class="mr-3 dark:text-gray-100" >Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`;
} else {
modal.querySelector(".container-radio").innerHTML =
`<input type="radio" name="status" value="on" checked> <span class="mr-3 dark:text-gray-100" >Sim</span>
<input type="radio" name="status" value="off" > <span class="dark:text-gray-100">Não</span>`;
}
let containerTypes = '';
types.forEach(type => {
if (option_data.id_type === type.id) {
containerTypes +=
` <option value="${type.id}" selected>${type.name}</option>`
} else {
containerTypes +=
` <option value="${type.id}">${type.name}</option>`
}
})
modal.querySelector(".select-types").innerHTML = containerTypes;
montaSelectDestino(option_data.id_type, modal, option_data.code_id);
}
});
}
document.querySelectorAll('.select-types').forEach(el => {
el.addEventListener('change', (e) => {
const select = e.target;
const modal = select.closest('.modal') ?? select.closest('.modal-edit');
const id_redirect = select.value;
montaSelectDestino(id_redirect, modal);
})
})
montaSelectDestino(id_type, modal);
</script>
</x-app-layout>

70
resources/views/admin/redirects.blade.php

@ -81,73 +81,9 @@
</div>
</div>
<x-modalRedirect :numberChannels="$numberChannels"></x-modalRedirect>
<x-modalEditRedirect :numberChannels="$numberChannels"></x-modalEditRedirect>
<x-modal.insert.modalRedirect :numberChannels="$numberChannels"></x-modalRedirect>
<x-modal.edit.modalEditRedirect :numberChannels="$numberChannels"></x-modalEditRedirect>
@push('updateStep')
<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E="
crossorigin="anonymous"></script>
<script>
function atualizaRedirect(id_redirect) {
$.ajax({
type: "get",
url: `redirects/${id_redirect}/edit`,
success: function({
data
}) {
const redirect_data = data.redirect_data;
const numbers_channels = data.numbers;
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector('form').action = `redirects/${id_redirect}`;
<script src="{{ asset('js/views/redirect/atualizaRedirect.js') }}"></script>
modal.querySelector("input[name='nome']").value = redirect_data.name;
modal.querySelector("textarea[name='descricao']").value = redirect_data.description;
const containerRadioStatus = document.querySelector(".container-radio-status");
const containerRadioInitial = document.querySelector(".container-radio-initial");
if (redirect_data.status) {
containerRadioStatus.innerHTML =
`<input type="radio" name="status" value="on" checked> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" > <span class="dark:text-gray-100">Não</span>`
} else {
containerRadioStatus.innerHTML =
`<input type="radio" name="status" value="on" > <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
if (redirect_data.initial) {
containerRadioInitial.innerHTML =
`<input type="radio" name="initial" value="on" checked> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="initial" value="off" > <span class="dark:text-gray-100">Não</span>`
} else {
containerRadioInitial.innerHTML =
`<input type="radio" name="initial" value="on" > <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="initial" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
const containerChannels = modal.querySelector("select[name='channel']");
numbers_channels.forEach(channel => {
if (redirect_data.id_number === channel.id) {
containerChannels.innerHTML =
` <option value="${channel.id}" selected>${channel.title}</option>`
} else {
containerChannels.innerHTML =
` <option value="${channel.id}">${channel.title}</option>`
}
})
}
});
}
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}
</script>
@endpush
</x-app-layout>

69
resources/views/admin/supervisor.blade.php

@ -1,69 +0,0 @@
<x-app-layout>
<div class="py-8 px-8">
@if(session('status'))
<div class="w-full p-5 bg-blue-600 mb-5 text-white rounded uppercase font-bold text-lg">
{{session('status')}}
</div>
@endif
<div class="header flex flex-col items-center gap-4">
<h1 class=" text-gray-900 dark:text-gray-100 text-3xl font-bold text-center">
Supervisores
</h1>
</div>
<div class="body mt-4 overflow-auto rounded-lg shadow">
<table class="w-full">
<thead class="bg-gray-50 border-gray-200 border-b-2">
<tr>
<th class="p-3 text-sm font-semibold tracking-wide text-left">ID</th>
<th class="p-3 text-sm font-semibold tracking-wide text-left">Nome</th>
<th class="p-3 text-sm font-semibold tracking-wide text-left">Matricula</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">Motivo Pausa</th>
<th class="p-3 text-sm font-semibold tracking-wide text-left">Tempo de Login</th>
<th class="p-3 text-sm font-semibold tracking-wide text-left">Status</th>
<th class="p-3 text-sm font-semibold tracking-wide text-left">Ações</th>
</tr>
</thead>
<tbody>
@foreach($supervisores as $supervisor)
<tr class="bg-white">
<td class="p-3 text-sm text-gray-700">{{$supervisor->id}}</td>
<td class="p-3 text-sm text-gray-700">{{$supervisor->nome}}</td>
<td class="p-3 text-sm text-gray-700">{{$supervisor->matricula}}</td>
<td class="p-3 text-sm text-gray-700">{{$supervisor->fila}}</td>
<td class="p-3 text-sm text-gray-700">
@if($supervisor->motivo_pausa)
{{$supervisor->motivo_pausa}}
@else
Sem Pausa
@endif
</td>
<td class="p-3 text-sm text-gray-700">{{$supervisor->tempo_login}}</td>
<td class="p-3 text-sm text-gray-700">{{$supervisor->status}}</td>
<td class="p-3 text-sm font-bold flex items-center gap-2 flex-wrap">
<a class="bg-blue-600 text-white p-2 rounded flex-1 text-lg text-center" href="supervisor/editar/{{$supervisor->id}}"><i class="fas fa-edit"></i></a>
<form method="POST" action="supervisor/deletar/{{$supervisor->id}}" class="flex-1 flex" onclick="javascript: if(!confirm('Deseja deletar esses dados?')) return false;">
@csrf
@method('delete')
<button class="bg-red-600 text-white p-2 rounded flex-1 text-lg">
<i class="fas fa-trash"></i>
</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
<x-modalSupervisores :filas="$filas" :agentes="$agentes" :numberChannels="$numberChannels"></x-modalSupervisores>
</x-app-layout>

6
resources/views/admin/systemMessage.blade.php

@ -53,9 +53,9 @@
</div>
</div>
<x-modalSystemMessage></x-modalSystemMessage>
<x-modalEditSystemMessage></x-modalEditSystemMessage>
<x-modal.insert.modalSystemMessage></x-modalSystemMessage>
<x-modal.edit.modalEditSystemMessage></x-modalEditSystemMessage>
<script src="{{ asset('js/cadastroSystemMessage.js') }}"></script>
<script src="{{ asset('js/views/systemMessages/cadastroSystemMessage.js') }}"></script>
</x-app-layout>

2
resources/views/admin/templates.blade.php

@ -30,7 +30,7 @@
</table>
</div>
</div>
<x-modalTemplates :token="$token"></x-modalTemplates>
<x-modal.insert.modalTemplates :token="$token"></x-modalTemplates>
<script src="{{ asset('js/views/templates/index.js') }}"></script>

40
resources/views/admin/users.blade.php

@ -77,45 +77,11 @@
</tbody>
</table>
</div>
</div>
<x-modal :maior_matricula="$maior_matricula"></x-modal>
<x-modalEditUsers></x-modalEditUsers>
@push('updateAgente')
<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E=" crossorigin="anonymous"></script>
<script>
function atualizaUsuario(id_user) {
$.ajax({
type: "get",
url: `users/editar/${id_user}`,
success: function({
data
}) {
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector('form').action = `/users/editar/${data.id}`;
modal.querySelector("input[name='nome']").value = data.nome;
modal.querySelector("input[name='email']").value = data.email;
modal.querySelector("input[name='matricula']").value = data.matricula;
const containerCheckbox = modal.querySelector(".container-checkbox");
if (!data.status) {
containerCheckbox.innerHTML = `<input type="radio" name="status" value="on"> <span class="mr-3 dark:text-gray-100">Sim</span>
<input type="radio" name="status" value="off" checked> <span class="dark:text-gray-100">Não</span>`
}
}
});
}
<x-modal.insert.modalUsers :maior_matricula="$maior_matricula"></x-modal>
<x-modal.edit.modalEditUsers></x-modalEditUsers>
function fecharModal() {
document.querySelector('.modal-edit').style.display = 'none';
}
</script>
@endpush
<script src="{{ asset('js/views/agente/atualizaAgente.js') }}"></script>
</x-app-layout>

1
resources/views/components/modalEditContatos.blade.php → resources/views/components/modal/edit/modalEditContatos.blade.php

@ -50,7 +50,6 @@
</form>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.js"></script>
<script>
$(document).ready(function(){

10
resources/views/components/modalEditEmpresa.blade.php → resources/views/components/modal/edit/modalEditEmpresa.blade.php

@ -42,16 +42,11 @@
</form>
</div>
</div>
@push('cadastroEmpresa')
<script>
$(document).ready(function(){
$('.modal-edit').find('#cnpj').mask('00.000.000/0000-00', {reverse: true});
})
$('.modal-edit').find('form').submit(function(e){
e.preventDefault();
@ -64,10 +59,7 @@
this.submit();
})
function fecharModal() {
$('.modal-edit').hide();
}
</script>
@endpush
</script>

0
resources/views/components/modalEditFila.blade.php → resources/views/components/modal/edit/modalEditFila.blade.php

0
resources/views/components/modalEditPausa.blade.php → resources/views/components/modal/edit/modalEditPausa.blade.php

0
resources/views/components/modalEditRedirect.blade.php → resources/views/components/modal/edit/modalEditRedirect.blade.php

8
resources/views/components/modalEditRedirectOption.blade.php → resources/views/components/modal/edit/modalEditRedirectOption.blade.php

@ -71,11 +71,6 @@
</form>
</div>
</div>
@push('updateResponseStep')
<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E="
crossorigin="anonymous"></script>
<script>
$('#formRedirectOptionEdit').submit(async function(e) {
// Impede o envio do formulário
@ -113,5 +108,4 @@
$('.modal-edit').find('input.sequence').removeClass('border-red-500 border-2');
$('.modal-edit').find('.text-problem').addClass('hidden');
}
</script>
@endpush
</script>

9
resources/views/components/modalEditSystemMessage.blade.php → resources/views/components/modal/edit/modalEditSystemMessage.blade.php

@ -35,7 +35,6 @@
<p class="text-red-500 text-problem hidden">Ordem já cadastrada no sistema.</p>
</div>
<div class="flex flex-col gap-2 mt-2">
<label class="dark:text-gray-100">Escolha o momento:</label>
<select name="momento" class="w-full dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 container-select">
@ -52,9 +51,6 @@
</form>
</div>
</div>
@push('updatesystemMessage')
<script>
const moments = [
'SAUDACAO',
@ -94,7 +90,4 @@
});
}
</script>
@endpush
</script>

0
resources/views/components/modalEditUsers.blade.php → resources/views/components/modal/edit/modalEditUsers.blade.php

2
resources/views/components/modalPausarAgente.blade.php → resources/views/components/modal/edit/modalPausarAgente.blade.php

@ -40,8 +40,6 @@
</div>
</div>
<script>
function fecharModal(supervisor_id){
const modal = document.querySelector(".modal");

2
resources/views/components/modalContatos.blade.php → resources/views/components/modal/insert/modalContatos.blade.php

@ -50,8 +50,6 @@
</form>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.js"></script>
<script>
$(document).ready(function(){
$('.modal').find('#numero').mask('(00) 0000-0000');

8
resources/views/components/modalEmpresa.blade.php → resources/views/components/modal/insert/modalEmpresa.blade.php

@ -43,11 +43,7 @@
</div>
</div>
@push('cadastroEmpresa')
<script>
$('.modal').find('form').submit(function(e){
e.preventDefault();
@ -60,9 +56,7 @@
this.submit();
})
$(document).ready(function(){
$('.modal').find('#cnpj').mask('00.000.000/0000-00', {reverse: true});
})
</script>
@endpush
</script>

0
resources/views/components/modalFila.blade.php → resources/views/components/modal/insert/modalFila.blade.php

0
resources/views/components/modalPausa.blade.php → resources/views/components/modal/insert/modalPausa.blade.php

0
resources/views/components/modalRedirect.blade.php → resources/views/components/modal/insert/modalRedirect.blade.php

7
resources/views/components/modalRedirectOption.blade.php → resources/views/components/modal/insert/modalRedirectOption.blade.php

@ -76,12 +76,6 @@
</form>
</div>
</div>
@push('cadastroOptionRule')
<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E="
crossorigin="anonymous"></script>
<script>
$('#formRedirectOption').submit(async function(e) {
// Impede o envio do formulário
@ -125,4 +119,3 @@
}
</script>
@endpush

0
resources/views/components/modalSystemMessage.blade.php → resources/views/components/modal/insert/modalSystemMessage.blade.php

3
resources/views/components/modalTemplates.blade.php → resources/views/components/modal/insert/modalTemplates.blade.php

@ -1,7 +1,7 @@
@props(['token'])
<!-- Main modal -->
<div class="fixed z-50 p-4 bg-gray-900 bg-opacity-60 h-full w-full modal" >
<div class="fixed z-50 hidden p-4 bg-gray-900 bg-opacity-60 h-full w-full modal" :class="{'block': modal, 'hidden': !modal}">
{{-- :class="{ 'block': modal, 'hidden': !modal }" --}}
<div class="fixed w-full max-w-2xl md:h-auto top-[50%] left-[50%] translate-x-[-50%] translate-y-[-50%]">
<!-- Modal content -->
@ -130,5 +130,4 @@
</div>
<script src="{{ asset('js/views/templates/cadastroTemplates.js') }}"></script>

0
resources/views/components/modal.blade.php → resources/views/components/modal/insert/modalUsers.blade.php

29
resources/views/layouts/app.blade.php

@ -15,8 +15,10 @@
<link rel="icon" href="/img/favicon.ico" type="image/x-icon">
<!-- Scripts -->
@vite(['resources/css/app.css', 'resources/js/app.js'])
<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E=" crossorigin="anonymous">
</script>
<script src="https://code.jquery.com/jquery-3.6.4.js" integrity="sha256-a9jBBRygX1Bh5lt8GZjXDzyOB+bWve9EiO7tROUtj/E=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"></script>
</head>
<body class="font-sans antialiased">
@ -32,31 +34,10 @@
</main>
</div>
@stack('graficos')
@stack('relatoriosDB')
@stack('updateResponseStep')
@stack('updateAgente')
@stack('updateFila')
@stack('updatePausa')
@stack('updatePausa')
@stack('updateStep')
@stack('updatesystemMessage')
@stack('cadastroOptionRule')
@stack('cadastroSequenceRule')
@stack('cadastroSystemMessage')
@stack('agentesLogados')
@stack('cadastroEmpresa')
<script src="{{ asset('js/views/app/selectTheme.js') }}"></script>
<script>
selectTheme()
function selectTheme() {
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
}
</script>
</body>
</html>
Loading…
Cancel
Save