Browse Source

Inclusão dos serviços em relatórios de call center, correção na importa bilhetes na limpeza de dados duplicados [servicos]

1.7.12
AMARILDO PEREIRA 2 years ago
parent
commit
2e13679894
  1. 2
      asterisk/var_lib_asterisk/scripts/manutencaoDB/importaBilhetes.php
  2. 4
      asterisk/var_lib_asterisk/scripts/vendas/configVendasAlgar.php
  3. 2
      asterisk/var_lib_asterisk/scripts/vendas/consolidaVendas.php
  4. 1
      checaSessao.php
  5. 34
      compara/atual.php
  6. 11
      configGeral.php
  7. BIN
      imgSite/LOGO_SIMPLESIP.PNG
  8. 24
      include/FPDF/GerarPDF.php
  9. 10
      include/util/constantes.php
  10. 49
      include/util/funcoesApl.php
  11. 38
      include/util/funcoesInternas.php
  12. 15
      include/util/util.php
  13. 5
      login.php
  14. 10
      master.css
  15. 1
      nbproject/private/private.properties
  16. 10
      nbproject/private/private.xml
  17. 2
      nbproject/project.properties
  18. 19
      projeto/base/sql/versao-1.7.11.5.sql
  19. 221
      relatorios/callcenter/geral/abandonadasFila.php
  20. 59
      relatorios/callcenter/geral/abandonadasFilaDetalhes.php
  21. 200
      relatorios/callcenter/geral/recebidasAgente.php
  22. 117
      relatorios/callcenter/geral/rechamadas.php
  23. 199
      relatorios/callcenter/geral/relClassificacao.php
  24. 211
      relatorios/callcenter/geral/relClassificacaoDetalhes.php
  25. 87
      relatorios/callcenter/geral/relClassificacaoMensal.php
  26. 308
      relatorios/callcenter/metas/metricasDiaria.php
  27. 366
      relatorios/callcenter/metas/metricasMensal.php
  28. 9
      templates/confSistema.tpl
  29. 9
      templates/relatoriosGrid.tpl

2
asterisk/var_lib_asterisk/scripts/manutencaoDB/importaBilhetes.php

@ -36,7 +36,7 @@ try {
if (pg_connection_status($dbcon) === PGSQL_CONNECTION_BAD) {
ibRaiseExcept("Nao foi possivel conecta com o banco de dados!");
}
@AtualizaPreVenda($dbcon);
//@AtualizaPreVenda($dbcon); //desativado, não estamos usando o sistema.
@CorrigeNumeroDestino($dbcon);
@ApagaBilheteDuplTransfer($dbcon);
@CorrigeAbandonTransbordo($dbcon);

4
asterisk/var_lib_asterisk/scripts/vendas/configVendasAlgar.php

@ -1,6 +1,6 @@
<?php
$cnpjClienteAlgar = '31159038000135';
$cnpjClienteAlgar = '';
/*
* Esta variavel é utiliza para marcar qual vai ser o cliente
@ -31,7 +31,7 @@ $naoPerturbeApenas = false;
* conexao diferente da padrao.
*/
$paramRemoteConn = array(
'dbServer' => '192.168.115.240',
'dbServer' => 'algar.simplesip.com.br',
'dbBase' => '',
'dbPorta' => '',
'userDb' => '',

2
asterisk/var_lib_asterisk/scripts/vendas/consolidaVendas.php

@ -1183,7 +1183,7 @@ function __VerificaDefault() {
global $paramRemoteConn, $paramLocalConn;
if (!isset($paramRemoteConn)) {
array('dbServer' => 'algar.simplesip.com.br', 'dbBase' => '', 'dbPorta' => '', 'userDb' => '', 'dbPass' => '');
$paramRemoteConn = array('dbServer' => 'algar.simplesip.com.br', 'dbBase' => '', 'dbPorta' => '', 'userDb' => '', 'dbPass' => '');
}
if (!isset($paramLocalConn)) {

1
checaSessao.php

@ -21,6 +21,7 @@ if (!isset($_SESSION["SSinSession"]) || ($_SESSION["SSinSession"] != "ok")) {
$_SESSION["primAcesso"] = 0;
$_SESSION[HOSTS_INFO] = null; //pbx_sites
$_SESSION["SSagentePenalidade"] = null;
$_SESSION["SSUsoServico"] = 0;
GetParametrosLicensa();
}

34
compara/atual.php

@ -1,3 +1,37 @@
function ApagaBilheteDuplTransfer($dbcon) {
/*
* Esta funcao apaga bilhetes que estao duplicatos na transferencia.
*/
$path = '/var/log/asterisk/apaga_bilhetes_transfer.log';
$query = "delete from ast_bilhetes a where rtrim(disposition) in('NO ANSWER', 'BUSY', 'FAILED') and exists(select '' from ast_bilhetes where uniqueid = a.uniqueid and rtrim(disposition) = 'ANSWERED');";
if (!pg_query($dbcon, $query)) {
$log = sprintf("Data: %s Cmd: Erro: %s\n", date('Y-m-d H:i:s'), $query, GetLasterror());
WriteLog($log, $path);
}
$query = "drop table if exists bilhetes_dupl
create table bilhetes_dupl as
select uniqueid, min(sequence) as sequence from ast_bilhetes where calldate::date = now()::date group by uniqueid having count(*) > 1;
delete from ast_bilhetes a using bilhetes_dupl b where b.uniqueid = a.uniqueid and a.sequence not in(select sequence from bilhetes_dupl);";
if (!pg_query($dbcon, $query)) {
$log = sprintf("Data: %s Cmd: Erro: %s\n", date('Y-m-d H:i:s'), $query, GetLasterror());
WriteLog($log, $path);
}
}
delete from ast_bilhetes a where rtrim(disposition) in('NO ANSWER', 'BUSY', 'FAILED') and exists(select '' from ast_bilhetes where uniqueid = a.uniqueid and rtrim(disposition) = 'ANSWERED');
drop table if exists bilhetes_dupl;
create table bilhetes_dupl as
select uniqueid, min(sequence) as sequence from ast_bilhetes where calldate::date = now()::date group by uniqueid having count(*) > 1;
delete from ast_bilhetes a using bilhetes_dupl b where b.uniqueid = a.uniqueid and a.sequence not in(select sequence from bilhetes_dupl);";
http://192.168.115.233:3000/amarildo.pereira/pabx-app.git

11
configGeral.php

@ -102,7 +102,8 @@ if ($idSubProg == CONFIG_BASE_DADOS) {
'prm_contasenha_master', 'prm_portabilidade', 'prm_tarifacao', 'prm_prepago', 'prm_use_discador',
'prm_ativa_complemento_campanha', "prm_tempo_sessao", "prm_registro_pagina", "prm_use_vendas", "prm_nome_vendas", "prm_exige_proto_vendas",
"prm_bloqueio", "prm_bloqueio_data", "prm_abandonada_semretorno", "prm_max_licenca", "prm_max_ramal",
"prm_normaliza_agenda", 'prm_max_dias_relatorio', 'prm_ocultar_telefone', 'prm_ocultar_email', 'prm_ocultar_documento', 'prm_max_licenca_fixo');
"prm_normaliza_agenda", 'prm_max_dias_relatorio', 'prm_ocultar_telefone', 'prm_ocultar_email', 'prm_ocultar_documento', 'prm_max_licenca_fixo',
"prm_relatorio_servico");
$default = array("prm_atende_auto" => 0, "prm_atende_manual" => 0, "prm_tempo_sessao" => 20, "prm_normaliza_agenda" => 0, "prm_max_dias_relatorio" => 0, 'prm_ocultar_telefone' => 0);
$values = array();
@ -112,8 +113,8 @@ if ($idSubProg == CONFIG_BASE_DADOS) {
if (!ExisteRegistro($dbcon, 'pbx_parametros', 'id', '1')) {
$query = "insert
into pbx_parametros
(id, prm_slogan, prm_path_audio, prm_path_arq_agente, prm_logo_relatorio, prm_relatorio_head, prm_relatorio_linha1, prm_relatorio_linha2, prm_msg_senha_def, prm_msg_senha_exp, prm_url_asterisk, prm_ddd_padrao, prm_mun_padrao, prm_uf_padrao, prm_cadastro_atendido, prm_digitos_conta, prm_digitos_senhas, prm_gera_conta, prm_pausa_grupo, prm_atende_auto, prm_atende_manual, prm_atende_preferencial, prm_prefixo_sennha_ramal, prm_modulo_pesquisa, prm_contasenha_sinc, prm_contasenha_master, prm_portabilidade, prm_tarifacao, prm_prepago, prm_use_discador, prm_tempo_sessao, prm_registro_pagina, prm_use_vendas, prm_nome_vendas, prm_exige_proto_vendas, prm_bloqueio, prm_bloqueio_data, prm_abandonada_semretorno, prm_max_licenca, prm_max_ramal, prm_normaliza_agenda, prm_max_dias_relatorio, prm_ocultar_telefone, prm_ocultar_email, prm_ocultar_documento, prm_max_licenca_fixo)
values(1, {prm_slogan},{prm_path_audio},{prm_path_arq_agente}, {prm_logo_relatorio},{prm_relatorio_head},{prm_relatorio_linha1},{prm_relatorio_linha2},{prm_msg_senha_def},{prm_msg_senha_exp},{prm_url_asterisk},{prm_ddd_padrao},{prm_mun_padrao},{prm_uf_padrao},{prm_cadastro_atendidos},{prm_digitos_conta},{prm_digitos_senha},{prm_gera_conta},{prm_pausa_grupo},{prm_atende_auto},{prm_atende_manual},{prm_atende_preferencial},{prm_prefixo_sennha_ramal},{prm_modulo_pesquisa},{prm_contasenha_sinc},{prm_contasenha_master},{prm_portabilidade},{prm_tarifacao},{prm_prepago},{prm_use_discador},{prm_tempo_sessao},{prm_registro_pagina},{prm_use_vendas},{prm_nome_vendas}, {prm_exige_proto_vendas}, {prm_bloqueio}, {prm_bloqueio_data}, {prm_abandonada_semretorno}, {prm_max_licenca}, {prm_max_ramal}, {prm_normaliza_agenda},{prm_max_dias_relatorio}, {prm_ocultar_telefone}, {prm_ocultar_email}, {prm_ocultar_documento}, {prm_max_licenca_fixo})";
(id, prm_slogan, prm_path_audio, prm_path_arq_agente, prm_logo_relatorio, prm_relatorio_head, prm_relatorio_linha1, prm_relatorio_linha2, prm_msg_senha_def, prm_msg_senha_exp, prm_url_asterisk, prm_ddd_padrao, prm_mun_padrao, prm_uf_padrao, prm_cadastro_atendido, prm_digitos_conta, prm_digitos_senhas, prm_gera_conta, prm_pausa_grupo, prm_atende_auto, prm_atende_manual, prm_atende_preferencial, prm_prefixo_sennha_ramal, prm_modulo_pesquisa, prm_contasenha_sinc, prm_contasenha_master, prm_portabilidade, prm_tarifacao, prm_prepago, prm_use_discador, prm_tempo_sessao, prm_registro_pagina, prm_use_vendas, prm_nome_vendas, prm_exige_proto_vendas, prm_bloqueio, prm_bloqueio_data, prm_abandonada_semretorno, prm_max_licenca, prm_max_ramal, prm_normaliza_agenda, prm_max_dias_relatorio, prm_ocultar_telefone, prm_ocultar_email, prm_ocultar_documento, prm_max_licenca_fixo, prm_relatorio_servico)
values(1, {prm_slogan},{prm_path_audio},{prm_path_arq_agente}, {prm_logo_relatorio},{prm_relatorio_head},{prm_relatorio_linha1},{prm_relatorio_linha2},{prm_msg_senha_def},{prm_msg_senha_exp},{prm_url_asterisk},{prm_ddd_padrao},{prm_mun_padrao},{prm_uf_padrao},{prm_cadastro_atendidos},{prm_digitos_conta},{prm_digitos_senha},{prm_gera_conta},{prm_pausa_grupo},{prm_atende_auto},{prm_atende_manual},{prm_atende_preferencial},{prm_prefixo_sennha_ramal},{prm_modulo_pesquisa},{prm_contasenha_sinc},{prm_contasenha_master},{prm_portabilidade},{prm_tarifacao},{prm_prepago},{prm_use_discador},{prm_tempo_sessao},{prm_registro_pagina},{prm_use_vendas},{prm_nome_vendas}, {prm_exige_proto_vendas}, {prm_bloqueio}, {prm_bloqueio_data}, {prm_abandonada_semretorno}, {prm_max_licenca}, {prm_max_ramal}, {prm_normaliza_agenda},{prm_max_dias_relatorio}, {prm_ocultar_telefone}, {prm_ocultar_email}, {prm_ocultar_documento}, {prm_max_licenca_fixo}, {prm_relatorio_servico})";
} else {
$query = "update pbx_parametros
set prm_slogan = {prm_slogan}, prm_path_audio = {prm_path_audio}, prm_path_arq_agente = {prm_path_arq_agente},
@ -132,7 +133,7 @@ if ($idSubProg == CONFIG_BASE_DADOS) {
prm_exige_proto_vendas = {prm_exige_proto_vendas}, prm_bloqueio = {prm_bloqueio}, prm_bloqueio_data = {prm_bloqueio_data},
prm_abandonada_semretorno = {prm_abandonada_semretorno}, prm_max_licenca = {prm_max_licenca}, prm_max_ramal = {prm_max_ramal},
prm_normaliza_agenda = {prm_normaliza_agenda}, prm_max_dias_relatorio = {prm_max_dias_relatorio}, prm_ocultar_telefone = {prm_ocultar_telefone},
prm_ocultar_email = {prm_ocultar_email}, prm_ocultar_documento = {prm_ocultar_documento}, prm_max_licenca_fixo = {prm_max_licenca_fixo}
prm_ocultar_email = {prm_ocultar_email}, prm_ocultar_documento = {prm_ocultar_documento}, prm_max_licenca_fixo = {prm_max_licenca_fixo}, prm_relatorio_servico = {prm_relatorio_servico}
where id = 1";
}
@ -230,7 +231,7 @@ if ($idSubProg == CONFIG_BASE_DADOS) {
prm_ativa_complemento_campanha, prm_tempo_sessao, prm_registro_pagina, prm_use_vendas, prm_nome_vendas,
prm_exige_proto_vendas, prm_bloqueio, prm_bloqueio_data, prm_abandonada_semretorno, prm_max_licenca,
prm_max_ramal,prm_normaliza_agenda, prm_max_dias_relatorio, prm_ocultar_telefone, prm_ocultar_email,
prm_ocultar_documento,prm_max_licenca_fixo
prm_ocultar_documento,prm_max_licenca_fixo, prm_relatorio_servico
from pbx_parametros where id = 1";
$result = @pg_query($dbcon, $query);
$dados = @pg_fetch_array($result);

BIN
imgSite/LOGO_SIMPLESIP.PNG

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

24
include/FPDF/GerarPDF.php

@ -1,6 +1,6 @@
<?php
/*****************************************************************************************
/* * ***************************************************************************************
*
* GERA PDF
* Autor
@ -47,9 +47,9 @@
* Copyright (c) 2018, Simples IP
* ************************************************************************************* */
require('fpdf.php');
require('fpdf.php');
class GerarPDF extends FPDF {
class GerarPDF extends FPDF {
private $nomeRel;
private $dataRel;
@ -115,6 +115,7 @@
function setFiltroRelDac($filtroRelDac) {
$this->filtroRelDac = $filtroRelDac;
}
function getType() {
return $this->type;
}
@ -140,7 +141,7 @@
}
function Table($header, $dataRow, $dataDB, $headerW, $totaliza, $gridRow = 0) {
$this->SetFillColor(235);
$this->SetFillColor(200);
$this->SetLineWidth(.1);
$this->SetFont('Arial', 'B');
$this->Ln(2);
@ -152,14 +153,25 @@
$this->Ln();
// Cor das linhas da tabela
$this->SetFillColor(255);
$this->SetFont('');
$fill = false;
foreach ($dataDB as $keyD => $data) {
$x = 0;
// Cor das linhas da tabela
$this->SetFillColor(255);
$setFill = 0;
if (array_key_exists('cor_linha_dados', $data)) {
$this->SetFillColor((int) $data['cor_linha_dados']);
$setFill = 1;
}
foreach ($dataRow as $keyR => $row) {
$this->Cell($headerW[$x], 7, $data[$keyR] ? $data[$keyR] : "0", $gridRow, 0, $row, $fill);
$this->Cell($headerW[$x], 7, $data[$keyR] ? $data[$keyR] : "0", $gridRow, 0, $row, ($setFill ? $setFill : $fill));
$x++;
}
$this->Ln();
$fill = !$fill;
}
@ -182,6 +194,6 @@
$this->Cell(0, 15, 'Página ' . $this->PageNo(), 0, 0, 'R');
}
}
}
?>

10
include/util/constantes.php

@ -450,4 +450,12 @@ define('IP_CENTRAL_ATUALIZACAO', '192.168.115.12');
* Mascara a ser mostrada nos campos de senha.
*/
define('MASCARA_PASSWORD', '*******');
?>
/*
* Define o comportamento dos relatorios de servico.
*/
define("RELATORIO_SERVICOS_DESABILITA", 0);
define("RELATORIO_SERVICOS_HABILITA", 1);
define("RELATORIO_SERVICOS_FILTROS", 2);

49
include/util/funcoesApl.php

@ -105,7 +105,7 @@ function VerificaCadastroMenu($conn) {
$menuUsuario[] = array('29', 'mnMetaMensal', '1', 'Meta Mensal', 'index.php?idProg=32', '', '28', '1', '0', '', '32');
//$menuUsuario[] = array('30','mnMetaMensaAneel','1','Meta Mensal Analítico','index.php?idProg=1','','28','1','0','','1');
$menuUsuario[] = array('31', 'mnMetaDiaria', '1', 'Meta Diária', 'index.php?idProg=33', '', '28', '1', '0', '', '33');
$menuUsuario[] = array('32', 'mnMetaDiariaAneel', '1', 'Meta Diária Aneel', 'index.php?idProg=2', '', '28', '1', '0', '', '2');
//$menuUsuario[] = array('32', 'mnMetaDiariaAneel', '1', 'Meta Diária Aneel', 'index.php?idProg=2', '', '28', '1', '0', '', '2');
$menuUsuario[] = array('33', 'mnRelOriginadasAgente', '1', 'Originadas/Agente', 'index.php?idProg=89', '', '18', '1', '0', '', '89');
$menuUsuario[] = array('34', 'mnRelProdAgente', '1', 'Produção/Agente', 'index.php?idProg=0', '', '18', '1', '0', '', '0');
// $menuUsuario[] = array('35','mnRamlRamal','1','Ramal/Ramal','index.php?idProg=47','','18','0','0');
@ -315,15 +315,15 @@ function VerificaCadastroMenu($conn) {
$menuUsuario[] = array('176', 'mnGrupoVendas', '1', 'Regionais', 'index.php?idProg=285', '', '173', '1', '0', '', '285');
}
$menuUsuario[] = array('177', 'mnAnalysis', '1', 'Gráficos', 'index.php?idProg=58&idMenu=177&menuNome=Analysis', '', '17', '1', '0', '', '58');
$menuUsuario[] = array('178', 'mnResumoOperacao', '1', 'Resumo Chamadas/DAC', 'index.php?idProg=289', '', '177', '1', '0', '', '289');
$menuUsuario[] = array('179', 'mnResumoOperacaoServico', '1', 'Resumo Chamadas/Serviços', 'index.php?idProg=290', '', '177', '1', '0', '', '290');
$menuUsuario[] = array('180', 'mnIndicesDac', '1', 'Índices/DAC', 'index.php?idProg=291', '', '177', '1', '0', '', '291');
$menuUsuario[] = array('181', 'mnIndicesServ', '1', 'Índices/Serviços', 'index.php?idProg=292', '', '177', '1', '0', '', '292');
$menuUsuario[] = array('182', 'mnMetaMensalServ', '1', 'Meta Mensal/Serviço', 'index.php?idProg=293', '', '28', '1', '0', '', '293');
$menuUsuario[] = array('183', 'mnMetaDiariaServ', '1', 'Meta Diária/Serviço', 'index.php?idProg=294', '', '28', '1', '0', '', '294');
$menuUsuario[] = array('184', 'mnDesempenhoDac', '1', 'Desempenho por DAC', 'index.php?idProg=300', '', '177', '1', '0', '', '300');
$menuUsuario[] = array('185', 'mnDesempenhoServ', '1', 'Desempenho por Serviço', 'index.php?idProg=301', '', '177', '1', '0', '', '301');
// $menuUsuario[] = array('177', 'mnAnalysis', '1', 'Gráficos', 'index.php?idProg=58&idMenu=177&menuNome=Analysis', '', '17', '1', '0', '', '58');
// $menuUsuario[] = array('178', 'mnResumoOperacao', '1', 'Resumo Chamadas/DAC', 'index.php?idProg=289', '', '177', '1', '0', '', '289');
// $menuUsuario[] = array('179', 'mnResumoOperacaoServico', '1', 'Resumo Chamadas/Serviços', 'index.php?idProg=290', '', '177', '1', '0', '', '290');
// $menuUsuario[] = array('180', 'mnIndicesDac', '1', 'Índices/DAC', 'index.php?idProg=291', '', '177', '1', '0', '', '291');
// $menuUsuario[] = array('181', 'mnIndicesServ', '1', 'Índices/Serviços', 'index.php?idProg=292', '', '177', '1', '0', '', '292');
// $menuUsuario[] = array('182', 'mnMetaMensalServ', '1', 'Meta Mensal/Serviço', 'index.php?idProg=293', '', '28', '1', '0', '', '293');
// $menuUsuario[] = array('183', 'mnMetaDiariaServ', '1', 'Meta Diária/Serviço', 'index.php?idProg=294', '', '28', '1', '0', '', '294');
// $menuUsuario[] = array('184', 'mnDesempenhoDac', '1', 'Desempenho por DAC', 'index.php?idProg=300', '', '177', '1', '0', '', '300');
// $menuUsuario[] = array('185', 'mnDesempenhoServ', '1', 'Desempenho por Serviço', 'index.php?idProg=301', '', '177', '1', '0', '', '301');
$menuUsuario[] = array('186', 'mnUra', '1', 'URA', 'index.php?idProg=58&idMenu=186&menuNome=URA', '', '17', '1', '0', '', '58');
@ -1121,6 +1121,7 @@ function GetDispProgSel($idProg) {
$dispProgSel[356] = 'SimplesChat';
$dispProgSel[358] = 'Dashboard';
$dispProgSel[365] = 'Recebidas Agente/Serviços';
$dispProgSel[10001] = "Cadastro de Agentes PBX";
$dispProgSel[10002] = "Cadastro de Filas";
@ -1632,7 +1633,8 @@ function GetParametros($db) {
'prm_classifica_municipio', 'prm_max_agente_pausa', 'prm_disponivel_fila', 'prm_boloco_notas_key', 'caminho_producao', 'prm_exige_classificacao', 'prm_obs_pausaprod', 'prm_modulo_pesquisa',
'prm_portabilidade', 'prm_tarifacao', 'prm_prepago', 'prm_use_discador', 'prm_tempo_sessao', 'prm_agente_nova_janela', 'prm_label_protoco_pesquisa', 'prm_label_protoco_texto', 'prm_label_protoco_grid',
'prm_registro_pagina', 'prm_use_vendas', 'prm_nome_vendas', 'prm_exige_proto_vendas', 'prm_alerta_classificacao', 'prm_ativa_integracao', 'prm_select_integracao', 'prm_aviso_desconnect', 'prm_link_audio',
'prm_ocultar_telefone', 'prm_ocultar_email', 'prm_ocultar_documento', 'prm_sk_host_chat', 'prm_chat_api', 'prm_chat_url_client', 'prm_sk_api_centrais', 'prm_max_licenca', 'prm_max_ramal', 'prm_max_licenca_fixo', 'prm_media_simultaneo', 'prm_ativa_complemento_campanha');
'prm_ocultar_telefone', 'prm_ocultar_email', 'prm_ocultar_documento', 'prm_sk_host_chat', 'prm_chat_api', 'prm_chat_url_client', 'prm_sk_api_centrais', 'prm_max_licenca', 'prm_max_ramal', 'prm_max_licenca_fixo', 'prm_media_simultaneo',
'prm_ativa_complemento_campanha', 'prm_relatorio_servico');
$query = "select prm_slogan, prm_path_audio, prm_path_arq_agente, prm_logo_relatorio, prm_relatorio_head, prm_relatorio_linha1,
prm_relatorio_linha2,
@ -1647,7 +1649,8 @@ function GetParametros($db) {
prm_exige_classificacao, prm_obs_pausaprod, prm_modulo_pesquisa, prm_portabilidade, prm_tarifacao, prm_prepago, prm_use_discador,
prm_tempo_sessao, prm_agente_nova_janela, prm_label_protoco_pesquisa, prm_label_protoco_texto, prm_label_protoco_grid,
prm_registro_pagina, prm_use_vendas, prm_nome_vendas, prm_exige_proto_vendas, prm_alerta_classificacao, prm_ativa_integracao, prm_select_integracao, prm_aviso_desconnect,
prm_link_audio, prm_ocultar_telefone, prm_ocultar_email, prm_ocultar_documento, prm_sk_host_chat, prm_chat_api, prm_chat_url_client, prm_sk_api_centrais, prm_max_licenca, prm_max_ramal, prm_max_licenca_fixo, prm_media_simultaneo, prm_ativa_complemento_campanha
prm_link_audio, prm_ocultar_telefone, prm_ocultar_email, prm_ocultar_documento, prm_sk_host_chat, prm_chat_api, prm_chat_url_client, prm_sk_api_centrais, prm_max_licenca,
prm_max_ramal, prm_max_licenca_fixo, prm_media_simultaneo, prm_ativa_complemento_campanha, prm_relatorio_servico
from pbx_parametros
where id = 1";
$result = pg_query($db, $query);
@ -3613,16 +3616,17 @@ function ConfigRamalMonitorar() {
}
}
function GetIdentRota($dbcon, $codServ = 0) {
function GetIdentRota($dbcon, $codServ = 0, $wdt = 160) {
$codSel = $codServ;
$serv = "<select name=\"listaServico\" id=\"listaServico\" size=\"1\">";
$width = $wdt ? "style=\"max-width: {$wdt}px\"" : "";
$serv = "<select name=\"listaServico\" id=\"listaServico\" size=\"1\" $width>";
$sel = $codSel == '0' ? "selected" : "";
$serv .= "<option value=\"0\" $sel>Todos</option>";
$cont = 0;
$i = 0;
$query = "select serv_id as identificador from pbx_servicos where serv_status = 1 order by 1";
$result = @pg_query($dbcon, $query);
$result = !$dbcon ? @pg_query($query) : @pg_query($dbcon, $query);
while ($dados = pg_fetch_row($result)) {
if ($codSel === $dados[0]) {
$sel = "selected";
@ -4722,3 +4726,18 @@ values(%s, %s, %s, 'GET', %s, (select substring(arquivo,
function ComplementoCampanhaAtivo() {
return $_SESSION['prm_ativa_complemento_campanha'];
}
function VerificaUsoServicos() {
if (!isset($_SESSION["SSUsoServico"])) {
$query = "select case when( exists( select '' from pbx_servicos a, pbx_servicos_registra b where b.serv_id = a.serv_id))then 1 else 0 end as existe_servico";
$result = pg_query($query);
$row = pg_fetch_row($result);
$_SESSION["SSUsoServico"] = $row[0] ? true : false;
}
return $_SESSION["SSUsoServico"];
}
function GetUsoServico() {
return $_SESSION["prm_relatorio_servico"];
}

38
include/util/funcoesInternas.php

@ -6,10 +6,10 @@
*/
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(0,'relatorios/callcenter/geral/relAgenteProducao.php',0,0,0)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(1,'relatorios/callcenter/metas/metricasMensalAneel.php',1,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(2,'relatorios/callcenter/metas/metricasDiariaAneel.php',2,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(3,'relatorios/callcenter/geral/relAgenteProducaoImp.php',0,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(2,'relatorios/callcenter/metas/metricasDiariaAneel.php',2,0,0)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(3,'relatorios/callcenter/geral/relAgenteProducaoImp.php',0,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(4,'relatorios/callcenter/metas/metricasMensalAneelImp.php',1,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(5,'relatorios/callcenter/metas/metricasDiariaAneelImp.php',2,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(5,'relatorios/callcenter/metas/metricasDiariaAneelImp.php',2,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(6,'supervisor.php',6,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(7,'relatorios/callcenter/geral/relTransfer.php',7,0,0)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(8,'relatorios/callcenter/geral/relResumoFone.php',8,0,0)";
@ -39,7 +39,7 @@ $funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(31,'cadastros/classificaAtendimento/classificaDetUpd.php',27,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(32,'relatorios/callcenter/metas/metricasMensal.php',32,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(33,'relatorios/callcenter/metas/metricasDiaria.php',33,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(34,'relatorios/callcenter/metas/metricasMensalImp.php',32,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(34,'relatorios/callcenter/metas/metricasMensalImp.php',32,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(35,'relatorios/callcenter/metas/metricasDiariaImp.php',33,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(36,'seguranca/perfil/perfilGrupo.php',36,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(37,'relatorios/pbx/chamadasSaintes/saintesRamal.php',37,0,0)";
@ -237,7 +237,7 @@ $funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(265,'supervisao/RelSupRecebidas.php',6,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(266,'relatorios/callcenter/metas/metricasDiaSemana.php',266,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(267,'relatorios/callcenter/metas/MetaDiaSemanaExcel.php',266,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(268,'relatorios/callcenter/metas/metricasDiaSemanaImp.php',266,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(268,'relatorios/callcenter/metas/metricasDiaSemanaImp.php',266,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(269,'cadastros/tarifacao/tarifacaoOperadorasRel.php',199,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(270,'cadastros/tarifacao/tarifaRefatura.php',270,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(271,'downloadAudio.php',271,0,0)";
@ -262,13 +262,13 @@ $funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(290,'relatorios/analise/resumoOperacaoServico.php',290,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(291,'relatorios/analise/indicesDac.php',291,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(292,'relatorios/analise/indicesServicos.php',292,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(293,'relatorios/callcenter/metas/metricasMensalServ.php',293,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(294,'relatorios/callcenter/metas/metricasDiariaServ.php',294,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(295,'relatorios/callcenter/metas/metricasMensalServImp.php',32,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(296,'relatorios/callcenter/metas/MetaMensalServExcel.php',32,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(297,'relatorios/callcenter/metas/metricasDiariaServImp.php',33,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(298,'relatorios/callcenter/metas/metricasDiariaServExcel.php',33,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(299,'relatorios/callcenter/metas/MetaDiariaServExcel.php',33,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(293,'relatorios/callcenter/metas/metricasMensalServ.php',293,0,0)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(294,'relatorios/callcenter/metas/metricasDiariaServ.php',294,0,0)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(295,'relatorios/callcenter/metas/metricasMensalServImp.php',32,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(296,'relatorios/callcenter/metas/MetaMensalServExcel.php',32,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(297,'relatorios/callcenter/metas/metricasDiariaServImp.php',33,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(298,'relatorios/callcenter/metas/metricasDiariaServExcel.php',33,0,1)";
//$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(299,'relatorios/callcenter/metas/MetaDiariaServExcel.php',33,0,1)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(300,'relatorios/analise/desempenhoDac.php',300,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(301,'relatorios/analise/desempenhoServico.php',301,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(302,'relatorios/ura/uraGeral.php',302,0,0)";
@ -336,6 +336,20 @@ $funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(364,'admLgpd.php',364,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(10001,'admin/agents.php',10001,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(10002,'admin/queues.php',10002,0,0)";
$funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(10004,'admin/agenda.php',10004,0,0)";

15
include/util/util.php

@ -196,7 +196,7 @@ function TextToHtml($str) {
for ($i = 0; $i < strlen($str); $i++) {
$j = array_search($str[$i], $text);
if ($j !== false){
if ($j !== false) {
$str[$i] = $subs[$j];
}
}
@ -1451,14 +1451,20 @@ function ApagaBilheteDuplTransfer($dbcon) {
*/
$path = '/var/log/asterisk/apaga_bilhetes_transfer.log';
$query = "delete from ast_bilhetes a where rtrim(disposition) in('NO ANSWER', 'BUSY', 'FAILED') and exists(select '' from ast_bilhetes where uniqueid = a.uniqueid and rtrim(disposition) = 'ANSWERED');
drop table if exists bilhetes_dupl;
$query = "delete from ast_bilhetes a where rtrim(disposition) in('NO ANSWER', 'BUSY', 'FAILED') and exists(select '' from ast_bilhetes where uniqueid = a.uniqueid and rtrim(disposition) = 'ANSWERED');";
if (!pg_query($dbcon, $query)) {
$log = sprintf("Data: %s Cmd: Erro: %s\n", date('Y-m-d H:i:s'), $query, GetLasterror());
WriteLog($log, $path);
}
$query = "drop table if exists bilhetes_dupl;
create table bilhetes_dupl as
select uniqueid, min(sequence) as sequence from ast_bilhetes where calldate::date = now()::date group by uniqueid having count(*) > 1;
delete from ast_bilhetes a using bilhetes_dupl b where b.uniqueid = a.uniqueid and a.sequence not in(select sequence from bilhetes_dupl);";
if (!pg_query($dbcon, $query)) {
$log = GetLasterror();
$log = sprintf("Data: %s Cmd: Erro: %s\n", date('Y-m-d H:i:s'), $query, GetLasterror());
WriteLog($log, $path);
}
}
@ -1542,7 +1548,6 @@ function GetParamLgpd($param) {
return false;
}
function GetDiasAbandonada($conn = null) {
$query = "select prm_abandonada_semretorno from pbx_parametros";
$result = $conn ? pg_query($conn, $query) : pg_query($query);

5
login.php

@ -86,6 +86,7 @@ if (!isset($_POST["loginUser"])) {
// $siteError->SetLogin($row['apelido']);
//parametros do sistema
GetParametros($dbcon);
//armazenha informacoes para relatórios de pabx em base diversa
SetDefaultSite($dbcon);
if (true) {
@ -94,10 +95,10 @@ if (!isset($_POST["loginUser"])) {
// SetSupervisorAcesso($dbcon); Desativaro era usado para identificar se o superfivor tem acesso nas filas ativas e receptiva.
SetAgente($dbcon);
//Modo de atendimento default
// Modo de atendimento default
SetModuAtendimentoDefault();
//caminhos para gravar arquivos
// caminhos para gravar arquivos
GetCofigPadrao($dbcon);
}

10
master.css

@ -991,3 +991,13 @@ table.gridClean td {
.textPrivate p {
text-align: justify;
}
#agrupamentoTable th !important {
font-weight: bold;
padding: 0;
margin: 0;
padding-left: 6px;
padding-right: 6px;
background-color: #4F71C0;
}

1
nbproject/private/private.properties

@ -2,6 +2,7 @@ browser.id=SL[/Browsers/FirefoxBrowser
copy.src.files=false
copy.src.on.open=false
copy.src.target=/var/www/aplicativo
include.path.private=
index.file=index.php
run.as=LOCAL
url=http://localhost/

10
nbproject/private/private.xml

@ -3,8 +3,16 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/var/www/html/aplicativo/asterisk/var_lib_asterisk/scripts/integracao/abdAgi.php</file>
<file>file:/var/www/html/aplicativo/relatorios/relBase.php</file>
<file>file:/var/www/html/aplicativo/include/FPDF/fpdf.php</file>
<file>file:/var/www/html/aplicativo/include/util/relatoriosBase.php</file>
<file>file:/var/www/html/aplicativo/index.php</file>
<file>file:/var/www/html/aplicativo/include/util/funcoesInternas.php</file>
<file>file:/var/www/html/aplicativo/relatorios/callcenter/geral/relAgenteProducao.php</file>
<file>file:/var/www/html/aplicativo/relatorios/callcenter/servicos/recebidasAgenteSrv.php</file>
<file>file:/var/www/html/aplicativo/relatorios/callcenter/geral/rechamadas.php</file>
<file>file:/var/www/html/aplicativo/contacteFunc.php</file>
<file>file:/var/www/html/aplicativo/include/FPDF/GerarPDF.php</file>
<file>file:/var/www/html/aplicativo/include/util/funcoesApl.php</file>
</group>
</open-files>

2
nbproject/project.properties

@ -1,4 +1,4 @@
include.path=${php.global.include.path}
include.path=
php.version=PHP_56
source.encoding=ISO-8859-1
src.dir=.

19
projeto/base/sql/versao-1.7.11.5.sql

@ -3,3 +3,22 @@
*/
insert into pbx_grupo_usuario(user_id, gp_id)
select (select id from pbx_usuarios where apelido = 'administrador') as user_id, gp_id from pbx_grupo a where user_id = 0 and not exists(select '' from pbx_grupo_usuario where gp_id = a.gp_id and user_id = (select id from pbx_usuarios where apelido = 'administrador'))
/*
* Habilita os servicos nos relatorios de:
* - Recbidas Agente
* - Rechamadas
* - Classificação Atendimento
* - Classificação Mensal
* - Classificação Agente
* - Abandonadas Fila
* - Meta Mensal
* - Meta Diaria
*
* Os valores para o parametro "prm_relatorio_servico" sao os seguintes:
* 0 -> Desabilitado
* 1 -> Habilitado
* 2 -> Habilita apenas os Filtros.
*/
alter table pbx_parametros add prm_relatorio_servico int not null default 0;

221
relatorios/callcenter/geral/abandonadasFila.php

@ -1,14 +1,16 @@
<?php
include_once 'util/relatoriosBase.php';
include_once 'util/relatoriosBase.php';
class RelAbandonadasFila extends Relatorios {
class RelAbandonadasFila extends Relatorios {
private $___tipoRelatorio;
private $___servico;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
$this->___tipoRelatorio = isset($_REQUEST['tipoRelatorio']) ? $_REQUEST['tipoRelatorio'] : 0;
$this->___servico = isset($_POST["listaServico"]) ? $_POST["listaServico"] : 0;
}
function ___ValidaForm() {
@ -67,8 +69,8 @@
* Rotulos.
*/
$filtro .= '<tr>';
if ($this->GetIncDac())
$filtro .= '<td>Fila</td>';
$filtro .= $this->GetIncDac() ? '<td>Fila</td>' : '';
$filtro .= GetUsoServico() ? '<td>Serviço</td>' : '';
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
$filtro .= '<td> <input name="tipoRelatorio" type="checkbox" id="tipoRelatorio" value="1" %s />Anal&iacute;tico</td>';
@ -79,8 +81,11 @@
* Valores.
*/
$filtro .= '<tr>';
if ($this->GetIncDac())
$filtro .= sprintf('<td>%s</td>', $dacs);
$filtro .= $this->GetIncDac() ? sprintf('<td>%s</td>', $dacs) : '';
if (GetUsoServico()) {
$filtro .= sprintf('<td>%s</td>', GetIdentRota(false, $this->___servico));
}
$filtro .= '<td><input name="dataIni" id="dataIni" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input name="dataFim" id="dataFim" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>';
@ -102,7 +107,7 @@
$dataRel = array();
$dataAgrup = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relatório.
*/
@ -126,9 +131,15 @@
$dataRel[] = $linha;
if (!$this->___tipoRelatorio) {
$dadosCabecalio = array('Data', 'Hora', 'Origem', 'Quantidade', 'Tempo', 'TMAB');
$dadosField = array('data', 'hora', 'origem', 'qtde', 'tempo', 'tmab');
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Monta a linha de cabecalio.
*/
@ -160,7 +171,11 @@
$dataRel[] = $linha;
}
if ($mostraColunaServicos) {
$linha = array('LABEL', 'Total', '', '', '', $somaQuantidade, SecondToStrTime($somaTempo), SecondToStrTime(round(($somaTempo / $somaQuantidade), 0)));
} else {
$linha = array('LABEL', 'Total', '', '', $somaQuantidade, SecondToStrTime($somaTempo), SecondToStrTime(round(($somaTempo / $somaQuantidade), 0)));
}
// $linha = '<tr><th colspan="3" align="center">Total</th><th align="right">%s</th><th align="center">%s</th><th align="center">%s</th></tr>';
$dataRel[] = $linha;
@ -190,6 +205,11 @@
$dadosCabecalio = array('Data', 'Hora', 'Origem', 'Logado', 'Pausa', 'Ocupado', 'Indisponivel', 'Nao Classificado', 'Retorno', 'Pos. Chegada', 'Pos. Abandono', 'Tempo', 'TMAB');
$dadosField = array('data', 'hora', 'origem', 'qtd_logado', 'qtd_pausa', 'qtd_ocupado', 'qtd_indisponivel', 'qtd_naoclassificado', 'retornado', 'posicao_chegada', 'posicao_abandono', 'tempo', 'tmab');
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Inicia o relatorio.
*/
@ -241,8 +261,12 @@
* Linha de totalizacao.
*/
$arSoma['tempo'] = SecondToStrTime($somaTempo);
$arSoma['tmab'] = SecondToStrTime(round($somaTempo/count($this->GetData()[0])));
$arSoma['tmab'] = SecondToStrTime(round($somaTempo / count($this->GetData()[0])));
if ($mostraColunaServicos) {
$linha = array('LABEL', 'Total', '', '');
} else {
$linha = array('LABEL', 'Total', '', '');
}
foreach ($arSoma as $soma) {
$linha[] = $soma;
}
@ -257,6 +281,7 @@
$dataRel = array();
$dataAgrup = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relat�rio.
@ -267,6 +292,11 @@
$dadosCabecalio = array('Data' => 'align="center"', 'Hora' => 'align="center"', 'Origem' => 'align="left"', 'Quantidade' => 'align="right"', 'Tempo' => 'align="center"', 'TMAB' => 'align="center"');
$dadosField = array('data' => 'align="center"', 'hora' => 'align="center"', 'origem' => 'align="left"', 'qtde' => 'align="right"', 'tempo' => 'align="center"', 'tmab' => 'align="center"');
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Monta a linha de cabecalio.
*/
@ -330,6 +360,12 @@
, 'tempo' => 'align="center"', 'tmab' => 'align="center"'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Inicia o relat�rio.
*/
@ -373,8 +409,14 @@
* Linha de totalizacao.
*/
$arSoma['tempo'] = SecondToStrTime($somaTempo);
$arSoma['tmab'] = SecondToStrTime(round($somaTempo/count($this->GetData()[0])));
$arSoma['tmab'] = SecondToStrTime(round($somaTempo / count($this->GetData()[0])));
if ($mostraColunaServicos) {
$linha = array('Total', '', '');
} else {
$linha = array('Total', '', '');
}
foreach ($arSoma as $soma) {
$linha[] = $soma;
}
@ -388,6 +430,7 @@
$nomeDac = "";
$dataRel = array();
$dataAgrup = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
if (!$this->___tipoRelatorio) {
$dadosCabecalio = array(
@ -406,6 +449,12 @@
'tempo' => 'align="center"',
'tmab' => 'align="center"'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField);
}
/*
* Inicia o relat�rio.
*/
@ -458,7 +507,8 @@
/*
* Linha de totalizacao.
*/
$linha = '<tr><th align="center">Total</th><th colspan="2" align="left">%s</th><th align="right">%s</th><th align="center">%s</th><th align="center">%s</th></tr>';
$colspan = $mostraColunaServicos ? 3 : 2;
$linha = '<tr><th align="center">Total</th><th colspan="' . $colspan . '" align="left">%s</th><th align="right">%s</th><th align="center">%s</th><th align="center">%s</th></tr>';
$dataRel[] = sprintf($linha, $somaReg, $somaQuantidade, SecondToStrTime($somaTempo), SecondToStrTime(round(($somaTempo / $somaQuantidade), 0)));
/*
@ -521,6 +571,13 @@
'linkRel' => 'align="center"'
);
$getUsoServico = false;
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField);
$getUsoServico = true;
}
/*
* Inicia o relat�rio.
*/
@ -545,18 +602,20 @@
return;
}
$somaTempo = 0;
$arUseSoma = array('qtd_logado', 'qtd_pausa', 'qtd_ocupado', 'qtd_indisponivel', 'qtd_naoclassificado', 'tempo');
$arSoma = array('qtd_logado' => 0, 'qtd_pausa' => 0, 'qtd_ocupado' => 0, 'qtd_indisponivel' => 0, 'qtd_naoclassificado' => 0, 'retornado' => '-', 'posicao_chegada' => '-', 'posicao_abandono' => '-', 'tempo' => 0, 'tmab' => 0, 'lkRel' => '-');
$somaReg = 0;
foreach ($this->GetData()[0] as $row) {
$somaReg++;
$srv = $getUsoServico ? $row['serv_id'] : '';
/*
* Links para detalhamento.
*/
$imgrel = "<img src=\"imgSite/detalhado.png\" width=\"12\" height=\"16\" alt=\"Detalhes Abandonadas\" title=\"Detalhes Abandonadas\" />";
$linkRel = "<a href=\"javaScript:NovaJanela('index.php?idProg=229&dataIni=%s&dataFim=%s&dacDesc=%s&uid=%s&logado=%s&pausa=%s&ocupado=%s&indisponivel=%s&classificacao=%s&pos_chegada=%s&pos_saida=%s&agtRet=%s&dtRet=%s', 'ChamadasAbanconadasDetalhes', '850', '600', 'resizable=YES,scrollbars=YES')\"style=\"color:#000;\" >$imgrel</a>";
$row["linkRel"] = sprintf($linkRel, $row["hora"], $row["hora_fim"], $row["fila"] ,base64_encode($row["uniqueid"]), $row["qtd_logado"], $row["qtd_pausa"], $row["qtd_ocupado"], $row["qtd_indisponivel"], $row["qtd_naoclassificado"], $row["posicao_chegada"], $row["posicao_abandono"], $row['agente_retorno'] ? $row['agente_retorno'] : " - ", $row['retornado'] ? $row['retornado'] : "");
$linkRel = "<a href=\"javaScript:NovaJanela('index.php?idProg=229&dataIni=%s&dataFim=%s&dacDesc=%s&uid=%s&logado=%s&pausa=%s&ocupado=%s&indisponivel=%s&classificacao=%s&pos_chegada=%s&pos_saida=%s&agtRet=%s&dtRet=%s%s', 'ChamadasAbanconadasDetalhes', '850', '600', 'resizable=YES,scrollbars=YES')\"style=\"color:#000;\" >$imgrel</a>";
$row["linkRel"] = sprintf($linkRel, $row["hora"], $row["hora_fim"], $row["fila"], base64_encode($row["uniqueid"]), $row["qtd_logado"], $row["qtd_pausa"], $row["qtd_ocupado"], $row["qtd_indisponivel"], $row["qtd_naoclassificado"], $row["posicao_chegada"], $row["posicao_abandono"], $row['agente_retorno'] ? $row['agente_retorno'] : " - ", $row['retornado'] ? $row['retornado'] : "", ($srv ? "&serv_id=$srv" : ""));
$somaTempo += $row["tempo"];
$row['origem'] = ocultarTelefone($row['origem']);
@ -592,9 +651,10 @@
* Linha de totalizacao.
*/
$arSoma['tempo'] = SecondToStrTime($somaTempo);
$arSoma['tmab'] = SecondToStrTime(round($somaTempo/count($this->GetData()[0])));
$arSoma['tmab'] = SecondToStrTime(round($somaTempo / count($this->GetData()[0])));
$colspan = $mostraColunaServicos ? 3 : 2;
$linha = '<tr><th align="center">Total</th>';
$linha .= "<th colspan='2' align=\"left\">Registros: {$somaReg}</th>";
$linha .= "<th colspan='{$colspan}' align=\"left\">Registros: {$somaReg}</th>";
foreach ($arSoma as $soma) {
$linha .= sprintf("<th align=\"%s\">%s</th>", (is_numeric($soma) ? 'right' : 'center'), $soma);
}
@ -609,26 +669,28 @@
}
function ___PreparaPdf() {
$nomeDac = "";
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
/**
* TABELA DADOS PRINCIPAIS
*/
$somaTMAB = 0;
$somaTempo = 0;
$dados = array();
$x = 0;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
if (!$this->___tipoRelatorio) {
foreach ($this->GetData()[0] as $row) {
$dados[$x]["data"] = substr(FormataDBDataHora($row["data"]), 0, 10);
$dados[$x]["origem"] = $row["origem"];
$dados[$x]["hora"] = str_pad($row["hora"], 2, "0", STR_PAD_LEFT);
$dados[$x]["tmab"] = SecondToStrTime(round($row["tempo"]/$row["qtde"]));
$dados[$x]["tempo"] = SecondToStrTime(round($row["tempo"], 0));
$dados[$x]["qtde"] = $row["qtde"];
$somaQtd += $row["qtde"];
$somaTempo += $row["tempo"];
$x++;
$row["data"] = substr(FormataDBDataHora($row["data"]), 0, 10);
$row["hora"] = str_pad($row["hora"], 2, "0", STR_PAD_LEFT);
$row["tmab"] = SecondToStrTime(round($row["tempo"] / $row["qtde"]));
$row["tempo"] = SecondToStrTime(round($row["tempo"], 0));
$dados[] = $row;
}
//HEADER DA TABELA DO PDF -> DADOS EM ARRAY
@ -640,6 +702,7 @@
'Tempo' => 'C',
'TMAB' => 'C'
);
$dataHeader = array(
'data' => 'C',
'hora' => 'C',
@ -648,9 +711,19 @@
'tempo' => 'C',
'tmab' => 'C'
);
if ($mostraColunaServicos) {
$header = array_merge(['Serviço' => 'C'], $header);
$dataHeader = array_merge(['serv_id' => 'C'], $dataHeader);
$widthHeader = array(35, 30, 20, 35, 20, 25, 25);
$totaliza = array(
'Total', '', '', '', $somaQtd, SecondToStrTime($somaTempo), SecondToStrTime(round($somaTempo / $somaQtd)));
} else {
$widthHeader = array(35, 20, 45, 20, 35, 35);
$totaliza = array(
'Total', '', '', $somaQtd, SecondToStrTime($somaTempo), SecondToStrTime(round($somaTempo / $somaQtd)));
}
//Monta o array para passar para o prepara; Necessário passar 6 parametros
$table1 = array($header, $dataHeader, $dados, $widthHeader, $totaliza, 0);
@ -705,6 +778,11 @@
'tmab' => 'C'
);
if ($mostraColunaServicos) {
$header = array_merge(['Serviço' => 'C'], $header);
$dataHeader = array_merge(['serv_id' => 'L'], $dataHeader);
}
$arUseSoma = array('qtd_logado', 'qtd_pausa', 'qtd_ocupado', 'qtd_indisponivel', 'qtd_naoclassificado', 'tempo');
$arSoma = array('qtd_logado' => 0, 'qtd_pausa' => 0, 'qtd_ocupado' => 0, 'qtd_indisponivel' => 0, 'qtd_naoclassificado' => 0, 'retornado' => '-', 'posicao_chegada' => '-', 'posicao_abandono' => '-', 'tempo' => 0, 'tmab' => 0);
//$somaReg = 0;
@ -724,17 +802,29 @@
$dados[$x]['retornado'] = $row['retornado'] ? $row['retornado'] : "-";
$dados[$x]['tmab'] = SecondToStrTime($row["tempo"]);
$dados[$x]['tempo'] = SecondToStrTime($row["tempo"]);
$dados[$x]["serv_id"] = substr($row["serv_id"], 0, 36);
$x++;
foreach ($arUseSoma as $value) {
$arSoma["$value"] += $row["$value"];
}
}
if ($mostraColunaServicos) {
$widthHeader = array(36, 15, 5, 15, 7, 7, 15, 15, 15, 10, 15, 15, 15, 15);
$totaliza = array('Total', '', '', '', $arSoma['qtd_logado'],
$arSoma['qtd_pausa'], $arSoma['qtd_ocupado'], $arSoma['qtd_indisponivel'],
$arSoma['qtd_naoclassificado'], $arSoma['retornado'],
$arSoma['posicao_chegada'], $arSoma['posicao_abandono'],
SecondToStrTime($somaTempo), SecondToStrTime(round($somaTempo / count($this->GetData()[0]))));
} else {
$widthHeader = array(20, 5, 20, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15);
$totaliza = array('Total', '', '', $arSoma['qtd_logado'],
$arSoma['qtd_pausa'], $arSoma['qtd_ocupado'], $arSoma['qtd_indisponivel'],
$arSoma['qtd_naoclassificado'], $arSoma['retornado'],
$arSoma['posicao_chegada'], $arSoma['posicao_abandono'],
SecondToStrTime($somaTempo), SecondToStrTime(round($somaTempo/count($this->GetData()[0]))));
SecondToStrTime($somaTempo), SecondToStrTime(round($somaTempo / count($this->GetData()[0]))));
}
$table1 = array($header, $dataHeader, $dados, $widthHeader, $totaliza, 0);
$this->___dataRel = array($table1);
}
@ -747,24 +837,38 @@
$dataFim = FormatDtMssql($this->___dataFim);
$dac = GetDacDesc($this->GetDbCon(), $this->___dac);
$analitico = $this->___tipoRelatorio;
$srv = $this->___servico;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
if ($analitico) {
$query = sprintf("SELECT a.uniqueid,b.fila, a.data_bilhete AS data, MIN(calldate::timestamp) AS hora, MIN(a.calldate::timestamp) + (b.param3::bigint * interval '1 second') as hora_fim,
$query = "SELECT a.uniqueid,b.fila, a.data_bilhete AS data, MIN(calldate::timestamp) AS hora, MIN(a.calldate::timestamp) + (b.param3::bigint * interval '1 second') as hora_fim,
src AS origem,strtoint(b.param2) AS posicao_chegada, abdsr_data_retorno AS retornado,abdsr_agente AS agente_retorno,
strtoint(b.param1) AS posicao_abandono,abdsr_agt_logado AS qtd_logado,
abdsr_agt_pausa AS qtd_pausa,abdsr_agt_ocupado AS qtd_ocupado,
abdsr_agt_indisponivel AS qtd_indisponivel,
abdsr_agt_nao_classificado AS qtd_naoclassificado,
STRTOINT(param3) AS tempo
STRTOINT(param3) AS tempo " . ($mostraColunaServicos ? ",s.serv_id" : "") . "
FROM pbx_bilhetes a
LEFT JOIN pbx_eventos_dacs b ON a.uniqueid = b.uid2
LEFT JOIN pbx_abandonadas_semretorno c ON c.abdsr_uniqueid = a.uniqueid
WHERE data_bilhete >= '%s' AND data_bilhete <= '%s'
inner JOIN pbx_eventos_dacs b ON a.uniqueid = b.uid2
inner JOIN pbx_abandonadas_semretorno c ON c.abdsr_uniqueid = a.uniqueid ";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid ";
}
$query .= "\nWHERE data_bilhete >= '%s' AND data_bilhete <= '%s'
AND b.evento = 'ABANDON'
AND a.lastapp <> 'Transferred Call'
AND b.fila = '%s'
GROUP BY 1,2,3,6,7,8,9,10,11,12,13,14,15,param3
ORDER BY 2,3", $dataIni, $dataFim, $dac);
AND b.fila = '%s'";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$query .= " GROUP BY 1,2,3,6,7,8,9,10,11,12,13,14,15,param3 " . ($mostraColunaServicos ? ", s.serv_id" : "") . " ORDER BY " . ($mostraColunaServicos ? " s.serv_id," : "") . " 2,3";
$query = sprintf($query, $dataIni, $dataFim, $dac);
// if ($tipo == 1) {
// $query = sprintf("SELECT b.calldate, b.src ,b.dst, c.fila, d.apelido
@ -779,17 +883,29 @@
// ORDER BY 1",$dac,$dataIni);
// }
} else {
$query = sprintf("SELECT b.fila, a.data_bilhete as data, date_part('hour', calldate) as hora,
$query = "SELECT " . ($mostraColunaServicos ? "s.serv_id," : "") . " b.fila, a.data_bilhete as data, date_part('hour', calldate) as hora,
a.src as origem, count(*) as qtde, sum(strtoint(param3)) as tempo
FROM pbx_bilhetes a
INNER JOIN pbx_eventos_dacs b ON a.uniqueid = b.uid2
INNER JOIN pbx_abandonadas_semretorno c ON c.abdsr_uniqueid = a.uniqueid
WHERE data_bilhete >= '%s' AND data_bilhete <= '%s'
INNER JOIN pbx_abandonadas_semretorno c ON c.abdsr_uniqueid = a.uniqueid";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid ";
}
$query .= "\nWHERE data_bilhete >= '%s' AND data_bilhete <= '%s'
AND b.evento = 'ABANDON'
AND a.lastapp <> 'Transferred Call'
AND b.fila = '%s'
GROUP BY b.fila, a.data_bilhete,date_part('hour', a.calldate), a.src
ORDER BY 2,3", $dataIni, $dataFim, $dac);
AND b.fila = '%s'";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$query .= "\nGROUP BY " . ($mostraColunaServicos ? "s.serv_id," : "") . " b.fila, a.data_bilhete,date_part('hour', a.calldate), a.src
ORDER BY " . ($mostraColunaServicos ? "1," : "") . "2,3";
$query = sprintf($query, $dataIni, $dataFim, $dac);
}
//if(IsAdmin()){echo $query ; exit;}
$result = $this->___GetQuery($query);
@ -798,7 +914,7 @@
}
$this->SetData($dataRel);
$query = sprintf("SELECT SUM(CASE WHEN(STRTOINT(param3) <= 10)THEN 1 END) AS \"TE <= 10\",
$query = "SELECT SUM(CASE WHEN(STRTOINT(param3) <= 10)THEN 1 END) AS \"TE <= 10\",
SUM(CASE WHEN((STRTOINT(param3) > 10) AND (STRTOINT(param3) <= 20))THEN 1 END) AS \"10 < TE <= 20\",
SUM(CASE WHEN((STRTOINT(param3) > 20) AND (STRTOINT(param3) <= 30))THEN 1 END) AS \"20 < TE <= 30\",
SUM(CASE WHEN((STRTOINT(param3) > 30) AND (STRTOINT(param3) <= 60))THEN 1 END) AS \"30 < TE <= 60\",
@ -808,14 +924,27 @@
SUM(CASE WHEN(STRTOINT(param3) > 300)THEN 1 END) AS \"300 < TE\"
FROM pbx_bilhetes a
INNER JOIN pbx_eventos_dacs b ON b.uid2 = a.uniqueid
INNER JOIN pbx_abandonadas_semretorno c ON c.abdsr_uniqueid = a.uniqueid
INNER JOIN pbx_abandonadas_status d ON d.uniqueid = a.uniqueid
WHERE a.data_bilhete >= '%s' AND a.data_bilhete <= '%s'
INNER JOIN pbx_abandonadas_semretorno c ON c.abdsr_uniqueid = a.uniqueid";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid ";
}
$query .= "\nWHERE a.data_bilhete >= '%s' AND a.data_bilhete <= '%s'
AND b.evento = 'ABANDON'
AND a.lastapp <> 'Transferred Call'
AND 1 = CASE WHEN(b.evento = 'ABANDON')THEN (CASE WHEN(NOT EXISTS(SELECT '' FROM ast_eventos_dacs WHERE uid2 = b.uid2 AND evento = 'TRANSBORDANDO' AND fila = b.fila)) THEN 1 ELSE 0 END) ELSE 1 END
AND b.fila = '%s'
ORDER BY 1,2", $dataIni, $dataFim, $dac);
AND b.fila = '%s'";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$query .= "\nORDER BY 1,2";
$query = sprintf($query, $dataIni, $dataFim, $dac);
$dataRel = array();
$result = $this->___GetQuery($query);
@ -860,8 +989,8 @@
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
}
$relAbd = new RelAbandonadasFila($idProg, $dbcon, 1);
$relAbd->ExecutaRelatorio();
$relAbd = new RelAbandonadasFila($idProg, $dbcon, 1);
$relAbd->ExecutaRelatorio();
?>

59
relatorios/callcenter/geral/abandonadasFilaDetalhes.php

@ -1,11 +1,12 @@
<?php
include_once 'util/relatoriosBase.php';
$tpLayout = 1;
include_once 'util/relatoriosBase.php';
$tpLayout = 1;
class AbandonadasFilaDetalhes extends Relatorios {
class AbandonadasFilaDetalhes extends Relatorios {
private $___uid;
private $___servico;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
@ -13,6 +14,7 @@
$this->___uid = isset($_GET['uid']) ? base64_decode($_GET['uid']) : '';
$this->___dataIni = isset($_GET['dataIni']) ? $_GET['dataIni'] : date('d/m/Y');
$this->___dataFim = isset($_GET['dataFim']) ? $_GET['dataFim'] : date('d/m/Y');
$this->___servico = isset($_GET['serv_id']) ? $_GET['serv_id'] : '0';
}
function ___ValidaForm() {
@ -67,6 +69,9 @@
*/
$filtro .= '<tr>';
$filtro .= '<th align="center">Dac</th>';
if ($this->___servico) {
$filtro .= '<th align="center">Serviço</th>';
}
$filtro .= '<th align="center">Data Inicial </th>';
$filtro .= '<th align="center">Data Final </th>';
$filtro .= '<th align="center">&nbsp;</th>';
@ -77,6 +82,9 @@
*/
$filtro .= '<tr>';
$filtro .= '<td align="center"><h2>%s</h2></th>';
if ($this->___servico) {
$filtro .= '<td align="center"><h2>%s</h2></th>';
}
$filtro .= '<td align="center"><h2>%s</h2></td>';
$filtro .= '<td align="center"><h2>%s</h2></td>';
$filtro .= '<td align="center">%s</td>';
@ -87,15 +95,19 @@
* Guarda os filtros passados para recuperar na emiss<EFBFBD>o dos relat?ios para impress<EFBFBD>o.
*/
//$_SESSION["SSstorageFiltros"] = array($this->___dataIni, $this->___dataFim,$this->___tipoRel);
if ($this->___servico) {
return sprintf($filtro, $this->___dac, $this->___servico, date('d/m/Y H:i:s', strtotime($this->___dataIni)), date('d/m/Y H:i:s', strtotime($this->___dataFim)), $lkPrint);
} else {
return sprintf($filtro, $this->___dac, date('d/m/Y H:i:s', strtotime($this->___dataIni)), date('d/m/Y H:i:s', strtotime($this->___dataFim)), $lkPrint);
}
}
protected function ___GetDadosDb() {
$dataIni = $this->___dataIni;
$dataFim = $this->___dataFim;
$uid = $this->___uid;
$srv = $this->___servico;
if ($uid) {
$query = "SELECT data_bilhete AS data, a.matricula, apelido AS agente, a.status,d.nome AS fila,
@ -106,21 +118,42 @@
motivo_pausa AS motivo, login AS hora_login, logoff AS hora_logoff
FROM pbx_abandonadas_status a
INNER JOIN pbx_bilhetes e ON e.uniqueid = a.uniqueid
INNER JOIN pbx_eventos_agentes b ON b.matricula = a.matricula
INNER JOIN pbx_usuarios c ON c.matricula = a.matricula
INNER JOIN pbx_eventos_agentes b ON b.matricula = a.matricula";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid ";
}
$query .= "\nINNER JOIN pbx_usuarios c ON c.matricula = a.matricula
INNER JOIN pbx_dacs d ON d.id = b.id_dac
WHERE login <= '$dataIni' AND logoff >= '$dataFim' AND a.uniqueid = '{$uid}' AND d.nome = '$this->___dac'";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$query .= " GROUP BY data_bilhete,a.matricula,apelido,a.status,d.nome,disponivel,classificado,motivo_pausa, login, logoff ORDER BY login";
} else {
$query = "SELECT '{$this->___dataIni}' AS data, a.matricula, apelido AS agente, d.nome AS fila,
login AS hora_login, logoff AS hora_logoff
FROM pbx_abandonadas_status a
INNER JOIN pbx_bilhetes e ON e.uniqueid = a.uniqueid
INNER JOIN pbx_eventos_agentes b ON b.matricula = a.matricula
INNER JOIN pbx_usuarios c ON c.matricula = a.matricula
INNER JOIN pbx_eventos_agentes b ON b.matricula = a.matricula";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid ";
}
$query .= "\nINNER JOIN pbx_usuarios c ON c.matricula = a.matricula
INNER JOIN pbx_dacs d ON d.id = b.id_dac
WHERE login <= '$dataIni' AND logoff >= '$dataFim' AND d.id = '$this->___dac'
GROUP BY a.matricula,apelido,d.nome, login, logoff
WHERE login <= '$dataIni' AND logoff >= '$dataFim' AND d.id = '$this->___dac'";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$query .= " GROUP BY a.matricula,apelido,d.nome, login, logoff
ORDER BY login";
}
@ -539,8 +572,8 @@
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
}
$relChmEntG = new AbandonadasFilaDetalhes($idProg, $dbcon, 1);
$relChmEntG->ExecutaRelatorio();
$relChmEntG = new AbandonadasFilaDetalhes($idProg, $dbcon, 1);
$relChmEntG->ExecutaRelatorio();
?>

200
relatorios/callcenter/geral/recebidasAgente.php

@ -1,17 +1,19 @@
<?php
include_once 'util/relatoriosBase.php';
include_once 'util/relatoriosBase.php';
class RelRecebidasAgente extends Relatorios {
class RelRecebidasAgenteSrv extends Relatorios {
private $___agente;
private $___tempoAtendimento;
private $___servico;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
$this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0;
$this->___tempoAtendimento = isset($_POST['tempoAtendimento']) ? $_POST['tempoAtendimento'] : '';
$this->___agente = isset($_POST["listaAgente"]) ? $_POST["listaAgente"] : 0;
$this->___servico = isset($_POST["listaServico"]) ? $_POST["listaServico"] : 0;
}
public function ___ValidaForm() {
@ -29,6 +31,7 @@
}
function ___FiltrosRelatorio() {
$agente = $this->___GetAgente();
if ($this->___media != MEDIA_PRINT_GRID) {
@ -80,6 +83,9 @@
$filtro .= '<td>Fila</td>';
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
if (GetUsoServico()) {
$filtro .= '<td>Serviço </td>';
}
$filtro .= '<td>Agente</td>';
$filtro .= '<td>Duração (Segundos)</td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
@ -93,6 +99,9 @@
$filtro .= sprintf('<td>%s</td>', $dacs);
$filtro .= '<td><input name="dataIni" id="dataIni" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input name="dataFim" id="dataFim" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
if (GetUsoServico()) {
$filtro .= sprintf('<td>%s</td>', GetIdentRota(false, $this->___servico));
}
$filtro .= sprintf('<td>%s</td>', $agente);
$filtro .= "<td><input name=\"tempoAtendimento\" type=\"text\" id=\"tempoAtendimento\" size='10'value='{$this->___tempoAtendimento}' /></td>";
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>';
@ -112,33 +121,44 @@
protected function ___GetDadosDb() {
$dataIni = FormatDtMssql($this->___dataIni);
$dataFim = FormatDtHoraBD($this->___dataFim);
$srv = $this->___servico;
$agente = $this->___agente;
$dac = $this->___dac;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$query1 = "SELECT a.calldate AS data, a.src AS origem,
CASE WHEN(b.evento IN('COMPLETECALLER', 'COMPLETEAGENT', 'COMPLETEAGENTRAMAL', 'COMPLETECALLERRAMAL'))THEN strtoint(b.param2)
ELSE
CASE WHEN(b.evento = 'TRANSFER')THEN strtoint(b.param4) ELSE 0 END
END AS tmo,
c.apelido AS agente, CASE WHEN(b.evento IN('BUSY','NOANSWER'))THEN 0 ELSE 1 END AS status,'' AS desligado, b.fila";
c.apelido AS agente, CASE WHEN(b.evento IN('BUSY','NOANSWER'))THEN 0 ELSE 1 END AS status,'' AS desligado, b.fila" . ($mostraColunaServicos ? ", s.serv_id" : "");
$query2 = "SELECT DISTINCT c.matricula, c.apelido";
$query = " FROM pbx_bilhetes a, pbx_eventos_dacs b, pbx_usuarios c
WHERE b.uid2 = a.uniqueid
AND c.matricula = SUBSTRING(b.agente,7 ,4)
AND a.data_bilhete >= '$dataIni'
$query = " FROM pbx_bilhetes a
inner join pbx_eventos_dacs b on b.uid2 = a.uniqueid
inner join pbx_usuarios c on c.matricula = SUBSTRING(b.agente,7 ,4)";
if (GetUsoServico()) {
$query .= " left join pbx_servicos_registra s on s.uniqueid = a.uniqueid";
}
$query .= " WHERE a.data_bilhete >= '$dataIni'
AND a.data_bilhete <= '$dataFim'
AND a.lastapp <> 'Transferred Call'
AND b.evento IN('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER')
AND b.fila = (SELECT nome FROM pbx_dacs WHERE id = '$dac') ";
if ($agente) {
$query .= "AND c.matricula = '$agente'";
$addAgente = "\nAND c.matricula = '$agente'";
}
$sqlTempo = $this->___tempoAtendimento && $this->___tempoAtendimento > 10 ? " AND strtoint(b.param2) >= ".$this->___tempoAtendimento : '';
if (GetUsoServico() && $srv) {
$query .= "\nAND s.serv_id = '{$srv}'";
}
$sqlTempo = $this->___tempoAtendimento && $this->___tempoAtendimento > 10 ? "\nAND strtoint(b.param2) >= " . $this->___tempoAtendimento : '';
$query1 = ($query1 . $query . $addAgente . $sqlTempo . sprintf("\nORDER BY %s ", $mostraColunaServicos ? 's.serv_id, a.calldate' : 'a.calldate'));
$result = $this->___GetQuery($query1 . $query . $sqlTempo ." ORDER BY 1 ");
$result = $this->___GetQuery($query1);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
@ -151,14 +171,20 @@
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$dataRel[] = GenerateCsvFromArray($filtro);
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
'Data', 'Hora', 'Origem', 'TMA', 'Agente', 'Status'
'Data', 'Hora', 'Origem', 'Tempo', 'Agente', 'Status'
);
$dadosField = array(
'data', 'hora', 'origem', 'tmo', 'agente', 'status'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
$dataRel[] = GenerateCsvFromArray($dadosCabecalio);
$somaReg = 0;
@ -182,20 +208,19 @@
}
$dataRel[] = GenerateCsvFromArray($linha);
}
$dataRel[] = GenerateCsvFromArray(array('TMO', SecondToStrTime($somaDuracao) , ''));
$dataRel[] = GenerateCsvFromArray(array('DURAÇÃO', SecondToStrTime($somaDuracao), ''));
$dataRel[] = GenerateCsvFromArray(array(''));
$dataRel[] = GenerateCsvFromArray(array('Atendida', 'Nao Atendida', 'Geral'));
$dataRel[] = GenerateCsvFromArray(array($somaAtendida, $somaNAtendida, $somaReg));
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaExcel() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relatório.
*/
@ -218,11 +243,18 @@
$dataRel[] = $linha;
$dadosCabecalio = array(
'Data', 'Hora', 'Origem', 'TMA', 'Agente', 'Status'
'Data', 'Hora', 'Origem', 'Tempo', 'Agente', 'Status'
);
$dadosField = array(
'data', 'hora', 'origem', 'tmo', 'agente', 'status'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
@ -253,8 +285,7 @@
}
$dataRel[] = $linha;
}
$dataRel[] = array('LABEL', 'TMO', SecondToStrTime($somaDuracao) , '');
$dataRel[] = array('LABEL', 'DURAÇÃO', SecondToStrTime($somaDuracao), '');
$dataRel[] = array('DADOS', '');
$dataRel[] = array('LABEL', 'Atendida', 'Nao Atendida', 'Geral');
$dataRel[] = array('DADOS', $somaAtendida, $somaNAtendida, $somaReg);
@ -263,16 +294,20 @@
}
protected function ___PreparaGrid() {
$dataRel = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
'Data' => 'align="center"',
'Hora' => 'align="center"',
'Origem' => 'align="center"',
'TMA' => 'align="center"',
'DURAÇÃO' => 'align="center"',
'Agente' => 'align="center"',
'Status' => 'align="center"'
);
$dadosField = array(
'data' => 'align="center"',
'hora' => 'align="center"',
@ -282,6 +317,11 @@
'status' => 'align="center"'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField);
}
/*
* Inicia o relatório.
*/
@ -292,7 +332,7 @@
*/
$linha = '<tr>';
$linha .= "<th align=\"center\" colspan=\"6\">Chamadas Recebidas por Agente</th>";
$linha .= sprintf("<th align=\"center\" colspan=\"%s\">Chamadas Recebidas por Agente</th>", ($mostraColunaServicos ? '7' : '6'));
$linha .= "</tr>";
$dataRel[] = $linha;
@ -315,13 +355,42 @@
$somaReg = 0;
$somaDuracao = 0;
$somaAtendida = 0;
$somaAtendidaServico = 0;
$somaNAtendida = 0;
$somaNAtendidaServico = 0;
$somaDuracaoServico = 0;
$srv = "";
$oldSrv = "";
$tmo = 0;
$agrupaServico = function($row) use(&$somaDuracaoServico, &$somaAtendidaServico, &$somaNAtendidaServico, &$dataRel, &$srv, &$oldSrv) {
$style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"';
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$dataRel[] = sprintf("<tr><th colspan=\"3\" align=\"center\" {$style}>Total [%s] </th><th colspan=\"1\" align=\"center\" {$style}>DURAÇÃO</th><th colspan=\"1\" align=\"center\" {$style}>%s</th><th colspan=\"1\" align=\"center\" {$style}>ATENDIDAS / NA</th><th colspan=\"1\" align=\"center\" {$style}>%s / %s</th></tr>", $oldSrv, SecondToStrTime($somaDuracaoServico), $somaAtendidaServico, $somaNAtendidaServico);
$oldSrv = $srv;
$somaDuracaoServico = 0;
$somaAtendidaServico = 0;
$somaNAtendidaServico = 0;
}
$somaDuracaoServico += $row['tmo'];
$row['status'] == 1 ? $somaAtendidaServico++ : $somaNAtendidaServico++;
};
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
if ($mostraColunaServicos) {
$agrupaServico($row);
}
$somaReg ++;
$somaDuracao += $row['tmo'];
$row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++;
@ -335,12 +404,18 @@
foreach ($dadosField as $key => $value) {
$linha .= sprintf("<td %s>%s</td>", $value, $row["$key"]);
}
$linha .= "</tr>";
$dataRel[] = $linha;
}
if ($mostraColunaServicos) {
$agrupaServico(false);
}
$linhaGeral = '<tr><th colspan="2" align="right">TMO: </th><th colspan="4" align="left">%s</th></tr>';
$dataRel[] = sprintf($linhaGeral, SecondToStrTime($somaDuracao));
$linhaGeral = '<tr><th colspan="%s" align="center">TOTAL GERAL</th><th colspan="1" align="center">DURAÇÃO</th><th colspan="1" align="center">%s</th><th colspan="1" align="center">ATENDIDAS / NA</th><th colspan="1" align="center">%s / %s</th></tr>';
$dataRel[] = sprintf($linhaGeral, ($mostraColunaServicos ? '3' : '2'), SecondToStrTime($somaDuracao), $somaAtendida, $somaNAtendida);
/*
* Fecha relatorio.
*/
@ -367,13 +442,15 @@
}
protected function ___PreparaPdf() {
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
'Data' => 'C',
'Hora' => 'C',
'Origem' => 'C',
'TMA' => 'C',
'Tempo' => 'C',
'Agente' => 'C',
'Status' => 'C'
);
@ -386,6 +463,11 @@
'status' => 'C'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'C'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'C'], $dadosField);
}
$dados = $this->GetData()[0];
$somaReg = 0;
$somaDuracao = 0;
@ -393,24 +475,71 @@
$somaNAtendida = 0;
$x = 0;
$somaAtendidaServico = 0;
$somaNAtendidaServico = 0;
$somaDuracaoServico = 0;
$srv = "";
$oldSrv = "";
$dadosTable = [];
$agrupaServico = function($row) use(&$somaDuracaoServico, &$somaAtendidaServico, &$somaNAtendidaServico, &$dadosTable, &$srv, &$oldSrv) {
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$data = [];
$data['serv_id'] = ' ';
$data['data'] = 'TOTAL';
$data['hora'] = ' ';
$data['origem'] = 'Duração';
$data['tmo'] = SecondToStrTime($somaDuracaoServico);
$data['agente'] = 'ATENDIDAS / NA';
$data['status'] = "$somaAtendidaServico / $somaNAtendidaServico";
$data['cor_linha_dados'] = "225";
$oldSrv = $srv;
$somaDuracaoServico = 0;
$somaAtendidaServico = 0;
$somaNAtendidaServico = 0;
$dadosTable[] = $data;
}
$somaDuracaoServico += $row['tmo'];
$row['status'] == 1 ? $somaAtendidaServico++ : $somaNAtendidaServico++;
};
/*
* Linhas de dados.
*/
foreach ($dados as $row) {
if ($mostraColunaServicos) {
$agrupaServico($row);
}
$somaReg ++;
$somaDuracao += $row['tmo'];
$dados[$x]['status'] == 1 ? $somaAtendida++ : $somaNAtendida++;
$dados[$x]['hora'] = date('H:i:s', strtotime($row['data']));
$dados[$x]['data'] = date('d/m/Y', strtotime($row['data']));
$dados[$x]['tmo'] = SecondToStrTime($row['tmo']);
$dados[$x]['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida";
$x++;
$row['hora'] = date('H:i:s', strtotime($row['data']));
$row['data'] = date('d/m/Y', strtotime($row['data']));
$row['tmo'] = SecondToStrTime($row['tmo']);
$row['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida";
$row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++;
$dadosTable[] = $row;
}
$widthHeader = array(32, 32, 32, 32, 32, 32);
$totaliza = array('TMO', SecondToStrTime($somaDuracao), '', '', '', '');
$table = array($dadosCabecalio, $dadosField, $dados, $widthHeader, $totaliza, 0);
if ($mostraColunaServicos) {
$agrupaServico(false);
$widthHeader = array(26, 26, 26, 26, 26, 26, 26);
} else {
$widthHeader = array(26, 26, 26, 26, 26, 26);
}
$totaliza = $mostraColunaServicos ? array('DURAÇÃO', SecondToStrTime($somaDuracao), '', '', '', '', '') : array('DURAÇÃO', SecondToStrTime($somaDuracao), '', '', '', '');
$table = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totaliza, 0);
$legendaCabecalio = array(
"Atendida" => 'C',
@ -473,6 +602,8 @@
$this->___GravaLog();
}
$legendas = '<strong>* C.I.E.I.V:</strong> CHAMADAS INTERNAS/EMERGENCIA/INTERNACIONAL/VOIP.';
/*
* Inclua os scripts necessários aqui.
*/
@ -481,12 +612,13 @@
$smarty->assign('filtros', $this->___FiltrosRelatorio());
$smarty->assign('conteudo', $conteudoRelatorio);
$smarty->assign('legendas', $legendas);
$smarty->assign('msg', $this->GetMsg());
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
}
$relRecebidasAgente = new RelRecebidasAgente($idProg, $dbcon, 1);
$relRecebidasAgente->ExecutaRelatorio();
$relRecebidasAgente = new RelRecebidasAgenteSrv($idProg, $dbcon, 1);
$relRecebidasAgente->ExecutaRelatorio();
?>

117
relatorios/callcenter/geral/rechamadas.php

@ -1,18 +1,19 @@
<?php
include_once 'util/relatoriosBase.php';
include_once 'util/relatoriosBase.php';
class RelRechamadas extends Relatorios {
class RelRechamadas extends Relatorios {
private $___origem;
private $___servico;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
$this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0;
$this->___origem = isset($_POST["origem"]) ? $_POST["origem"] : '';
$this->___servico = isset($_POST["listaServico"]) ? $_POST["listaServico"] : 0;
}
function ___FiltrosRelatorio() {
if ($this->___media != MEDIA_PRINT_GRID) {
@ -60,8 +61,12 @@
* Rotulos.
*/
$filtro .= '<tr>';
if ($this->GetIncDac())
if ($this->GetIncDac()) {
$filtro .= '<td>Fila</td>';
}
if (GetUsoServico()) {
$filtro .= '<td>Serviço</td>';
}
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
$filtro .= '<td>Origem</td>';
@ -72,8 +77,13 @@
* Valores.
*/
$filtro .= '<tr>';
if ($this->GetIncDac())
if ($this->GetIncDac()) {
$filtro .= sprintf('<td>%s</td>', $dacs);
}
if (GetUsoServico()) {
$filtro .= sprintf('<td>%s</td>', GetIdentRota(false, $this->___servico));
}
$filtro .= '<td><input name="dataIni" id="dataIni" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input name="dataFim" id="dataFim" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= sprintf('<td><input name="origem" id="origem" type="text" size="15" value="%s" /></td>', $this->___origem);
@ -85,7 +95,6 @@
/*
* Guarda os filtros passados para recuperar na emissão dos relatóios para impressão.
*/
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio, $this->___agente);
return sprintf($filtro, $this->___dataIni, $this->___dataFim, $lkPrint);
@ -95,25 +104,46 @@
$dataIni = FormatDtMssql($this->___dataIni);
$dataFim = FormatDtHoraBD($this->___dataFim);
$dac = $this->___dac;
$srv = $this->___servico;
$origem = soNumero($this->___origem);
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$query = "SELECT FILA, ORIGEM ,COUNT(QTDE) AS QTDE ,SUM (TEMPO_ATENDE) AS TEMPO_ATENDE ,SUM (TEMPO_TRANSF) AS TEMPO_TRANSF
FROM (select b.fila, case when(coalesce(a.src, '') = '')then 'NI*' else a.src end as origem, a.uniqueid as qtde,
$query = "SELECT fila, origem ,COUNT(qtde) AS qtde ,SUM (tempo_atende) AS tempo_atende ,SUM (tempo_transf) AS tempo_transf";
if ($mostraColunaServicos) {
$query .= "\n ,serv_id";
}
$query .= "\nFROM (
select b.fila, case when(coalesce(a.src, '') = '')then 'NI*' else a.src end as origem, a.uniqueid as qtde,
(case when(b.evento in('COMPLETEAGENT','COMPLETECALLER', 'COMPLETAAGENT','COMPLETACALLER'))then strtoint(param2) else 0 end) as tempo_atende,
(case when(exists(select * from pbx_bilhetes where data_bilhete = a.data_bilhete and accountcode = a.uniqueid ))then a.billsec else 0 end) as tempo_transf
from pbx_bilhetes a, pbx_eventos_dacs b
where b.uid2 = a.uniqueid
and a.id_bilhetes = (select max (l.id_bilhetes) from pbx_bilhetes l where l.uniqueid = a.uniqueid and l.lastapp <> 'Transferred Call' )
and b.evento in('COMPLETEAGENT','COMPLETECALLER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFER', 'TRANSFERORIG')
and a.lastapp <> 'Transferred Call'
(case when(exists(select * from pbx_bilhetes where data_bilhete = a.data_bilhete and accountcode = a.uniqueid ))then a.billsec else 0 end) as tempo_transf";
if ($mostraColunaServicos) {
$query .= "\n ,coalesce(serv_id, 'SERV. NÃO ASSOCIADO') as serv_id";
}
$query .= "\n from pbx_bilhetes a
inner join pbx_eventos_dacs b on b.uid2 = a.uniqueid ";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra c on c.uniqueid = a.uniqueid";
}
$query .= "\nwhere a.id_bilhetes = (select max (l.id_bilhetes) from pbx_bilhetes l where l.uniqueid = a.uniqueid and l.lastapp <> 'Transferred Call' )
and b.evento in('COMPLETEAGENT','COMPLETECALLER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFER', 'TRANSFERORIG')\n";
if (GetUsoServico() && $srv) {
$query .= "\nand c.serv_id = '{$srv}'";
}
$query .= "\nand a.lastapp <> 'Transferred Call'
and a.data_bilhete >= '$dataIni'
and a.data_bilhete <= '$dataFim'
and b.fila = (select nome from pbx_dacs where id = '$dac')";
and b.fila = (select nome from pbx_dacs where id = '$dac')\n";
if ($origem) {
$query .= " and a.src like '%$origem%' \n";
$query .= "\nand a.src like '%$origem%' \n";
}
if ($mostraColunaServicos) {
$query .= " ) AS RECHAMADAS GROUP BY fila, serv_id, origem having count(*) > 1 ORDER BY serv_id, qtde desc";
} else {
$query .= " ) AS RECHAMADAS GROUP BY fila, origem having count(*) > 1 ORDER BY qtde desc";
}
$query .= " ) AS RECHAMADAS GROUP BY FILA, ORIGEM having count(*) > 1 ORDER BY 3 desc";
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
@ -121,17 +151,25 @@
}
protected function ___PreparaCsv() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$dataRel[] = GenerateCsvFromArray($filtro);
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array('Origem', 'Quantidade', 'TMA', 'Tempo');
$dadosField = array('origem', 'qtde', 'tma', 'tempo_atende');
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
$dataRel[] = GenerateCsvFromArray($dadosCabecalio);
foreach ($this->GetData()[0] as $row) {
$row['tma'] = SecondToStrTime(round($row['tempo_atende']/$row['qtde']));
$row['tma'] = SecondToStrTime(round($row['tempo_atende'] / $row['qtde']));
$row['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
$linha = array();
@ -147,7 +185,7 @@
protected function ___PreparaExcel() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relatório.
*/
@ -172,6 +210,11 @@
$dadosCabecalio = array('Origem', 'Quantidade', 'TMA', 'Tempo');
$dadosField = array('origem', 'qtde', 'tma', 'tempo_atende');
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
@ -179,7 +222,7 @@
$dataRel[] = $linha;
foreach ($this->GetData()[0] as $row) {
$row['tma'] = SecondToStrTime(round($row['tempo_atende']/$row['qtde']));
$row['tma'] = SecondToStrTime(round($row['tempo_atende'] / $row['qtde']));
$row['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
$linha = array('DADOS');
@ -194,6 +237,7 @@
protected function ___PreparaGrid() {
$dataRel = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
'Origem' => 'align="center"',
@ -201,6 +245,8 @@
'TMA' => 'align="center"',
'Tempo' => 'align="center"'
);
$dadosField = array(
'origem' => 'align="center"',
'qtde' => 'align="center"',
@ -208,6 +254,11 @@
'tempo_atende' => 'align="center"'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField);
}
/*
* Inicia o relatório.
*/
@ -218,7 +269,7 @@
*/
$linha = '<tr>';
$linha .= "<th align=\"center\" colspan=\"4\">Rechamadas</th>";
$linha .= "<th align=\"center\" colspan=\"5\">Rechamadas</th>";
$linha .= "</tr>";
$dataRel[] = $linha;
@ -238,12 +289,14 @@
$linhaC .= "</tr>";
$dataRel[] = $linhaC;
$somaRechamada = 0;
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$row['origem'] = ocultarTelefone($row['origem']);
$row['tma'] = SecondToStrTime(round($row['tempo_atende']/$row['qtde']));
$row['tma'] = SecondToStrTime(round($row['tempo_atende'] / $row['qtde']));
$row['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
$linha = "<tr>";
@ -262,7 +315,9 @@
}
protected function ___PreparaPdf() {
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
'Origem' => 'C',
@ -277,17 +332,27 @@
'tempo_atende' => 'C'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'C'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'C'], $dadosField);
}
$x = 0;
$dados = $this->GetData()[0];
/*
* Linhas de dados.
*/
foreach ($dados as $row) {
$dados[$x]['tma'] = SecondToStrTime(round($row['tempo_atende']/$row['qtde']));
$dados[$x]['tma'] = SecondToStrTime(round($row['tempo_atende'] / $row['qtde']));
$dados[$x]['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
$x++;
}
if ($mostraColunaServicos) {
$widthHeader = array(40, 45, 25, 35, 35);
} else {
$widthHeader = array(45, 45, 45, 45);
}
$table = array($dadosCabecalio, $dadosField, $dados, $widthHeader, 0, 0);
$this->___dataRel = array($table);
}
@ -327,8 +392,8 @@
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
}
$relRechamadas = new RelRechamadas($idProg, $dbcon, 1);
$relRechamadas->ExecutaRelatorio();
$relRechamadas = new RelRechamadas($idProg, $dbcon, 1);
$relRechamadas->ExecutaRelatorio();
?>

199
relatorios/callcenter/geral/relClassificacao.php

@ -1,12 +1,15 @@
<?php
include_once 'util/relatoriosBase.php';
include_once 'util/relatoriosBase.php';
class RelClassificacao extends Relatorios {
class RelClassificacao extends Relatorios {
private $___servico;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
$this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0;
$this->___servico = isset($_POST["listaServico"]) ? $_POST["listaServico"] : 0;
}
function ___FiltrosRelatorio() {
@ -58,6 +61,10 @@
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= '<td>Fila</td>' : '';
if (GetUsoServico()) {
$filtro .= '<td>Serviço </td>';
}
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
@ -68,6 +75,9 @@
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= sprintf('<td>%s</td>', $dacs) : '';
if (GetUsoServico()) {
$filtro .= sprintf('<td>%s</td>', GetIdentRota(false, $this->___servico));
}
$filtro .= '<td><input name="dataIni" id="dataIni" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input name="dataFim" id="dataFim" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>';
@ -86,35 +96,43 @@
$dataIni = FormatDtMssql($this->___dataIni);
$dataFim = FormatDtMssql($this->___dataFim);
$dac = $this->___dac;
$srv = $this->___servico;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$query = sprintf("SELECT clas_descricao, clit_descricao, count(*) as qtde, count(distinct e.uid2) as chmd
FROM pbx_classifica_reg a
$queryCabecalio = "SELECT" . ($mostraColunaServicos ? " coalesce(s.serv_id, 'Não Informado') as serv_id," : "") . " clas_descricao, clit_descricao, count(*) as qtde, count(distinct e.uid2) as chmd";
$query = "\nFROM pbx_classifica_reg a
INNER JOIN pbx_classifica_atendimento b ON b.clas_id = a.clas_id
INNER JOIN pbx_classifica_item c ON c.clit_id = a.clit_id
INNER JOIN pbx_bilhetes d ON d.uniqueid = a.id_bilhetes
INNER JOIN pbx_eventos_dacs e ON e.uid2 = d.uniqueid
INNER JOIN pbx_usuarios f ON f.matricula = substring(e.agente, 7, 4)
WHERE d.data_bilhete >= '%s' AND d.data_bilhete <= '%s'
INNER JOIN pbx_usuarios f ON f.matricula = substring(e.agente, 7, 4)";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = d.uniqueid";
}
$query .= "\nWHERE d.data_bilhete >= '%s' AND d.data_bilhete <= '%s'
AND d.lastapp <> 'Transferred Call'
AND e.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS')
AND a.id_dac = %s
GROUP BY clas_descricao, clit_descricao", $dataIni, $dataFim, $dac);
AND a.id_dac = %s";
$subQuery = sprintf("SELECT count(1) as chmd
FROM pbx_bilhetes d
INNER JOIN pbx_eventos_dacs e ON e.uid2 = d.uniqueid
INNER JOIN pbx_usuarios f ON f.matricula = substring(e.agente, 7, 4)
INNER JOIN pbx_dacs a ON a.nome = e.fila
WHERE d.data_bilhete >= '%s' AND d.data_bilhete <= '%s'
AND e.evento IN('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS')
AND a.id = %s
AND d.lastapp <> 'Transferred Call'", $dataIni, $dataFim, $dac);
$result = $this->___GetQuery($query);
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$queryGroup .= $mostraColunaServicos ? "\nGROUP BY clas_descricao, clit_descricao, s.serv_id" : "\nGROUP BY clas_descricao, clit_descricao\n";
$queryOrder .= $mostraColunaServicos ? "\norder by s.serv_id, clas_descricao, clit_descricao" : "\norder by clas_descricao, clit_descricao\n";
$query = sprintf($query, $dataIni, $dataFim, $dac);
$queryDados = ($queryCabecalio . $query . $queryGroup . $queryOrder);
$queryCabecalio = "\nSELECT count(distinct d.uniqueid) as chmd ";
$result = $this->___GetQuery($queryDados);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
$subResult = $this->___GetQuery($subQuery);
$subResult = $this->___GetQuery($queryCabecalio . $query);
$subRow = pg_fetch_assoc($subResult ? $subResult : array());
$this->SetData($subRow);
}
@ -122,15 +140,21 @@
protected function ___PreparaCsv() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relatório.
*/
$dataRel[] = GenerateCsvFromArray($filtro);
$dadosCabecalio = array('Classificacao', 'Servico', 'Porcentagem %', 'Quantidade');
$dadosCabecalio = array('Classificacao', 'Item', 'Porcentagem %', 'Quantidade');
$dadosField = array('clas_descricao', 'clit_descricao', 'chmd', 'qtde');
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Monta a linha de cabecalio.
*/
@ -169,7 +193,7 @@
protected function ___PreparaExcel() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relatório.
*/
@ -192,9 +216,14 @@
$dataRel[] = $linha;
$dadosCabecalio = array('Classificacao', 'Servico', 'Porcentagem %', 'Quantidade');
$dadosCabecalio = array('Classificacao', 'Item', 'Porcentagem %', 'Quantidade');
$dadosField = array('clas_descricao', 'clit_descricao', 'chmd', 'qtde');
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Monta a linha de cabecalio.
*/
@ -236,11 +265,15 @@
}
protected function ___PreparaGrid() {
$dataRel = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
'Classificação' => 'align="left"',
'Serviço' => 'align="left"',
'Item' => 'align="left"',
'Porcentagem %' => 'align="right"',
'Quantidade' => 'align="right"'
);
@ -251,6 +284,13 @@
'chmd' => 'align="right"',
'qtde' => 'align="right"'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField);
}
/*
* Inicia o relatório.
*/
@ -282,12 +322,36 @@
}
$somaReg = 0;
$somaServico = 0;
$srv = '';
$oldSrv = '';
$agrupaServico = function($row, $somaChmTotal) use(&$somaServico, &$dataRel, &$srv, &$oldSrv) {
$style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"';
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$perc = !$somaChmTotal ? 0 : round(($somaServico / $somaChmTotal) * 100.0);
$dataRel[] = sprintf("<tr><th colspan=\"3\" align=\"center\" {$style}>Total [%s] </th><th colspan=\"1\" align=\"right\" {$style}>%s</th><th colspan=\"1\" align=\"right\" {$style}>%s</th></tr>", $oldSrv, $perc . "%", $somaServico);
$oldSrv = $srv;
$somaServico = 0;
}
$somaServico += $row['qtde'];
};
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaReg += $row['qtde'];
if ($mostraColunaServicos) {
$agrupaServico($row, $somaChmTotal);
}
$somaReg += $row['qtde'];
$row['chmd'] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
// Formata linha de dados.
@ -298,10 +362,17 @@
$linha .= "</tr>";
$dataRel[] = $linha;
}
$colspan = 3;
if ($mostraColunaServicos) {
$agrupaServico(false, $somaChmTotal);
$colspan = 4;
}
/*
* Linha de totalizacao.
*/
$linha = '<tr><th colspan="3" align="left">Total Chamadas: %s</th><th align="right">Registros: %s</th></tr>';
$linha = '<tr><th colspan="' . $colspan .'" align="left">Total Chamadas: %s</th><th align="right">Registros: %s</th></tr>';
$dataRel[] = sprintf($linha, $this->GetData()[1]['chmd'], $somaReg);
/*
@ -316,24 +387,34 @@
}
protected function ___PreparaPdf() {
list($this->___dac, $this->___dataIni, $this->___dataFim) = $_SESSION["SSstorageFiltros"];
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/**
* TABELA DADOS PRINCIPAIS
*/
//HEADER DA TABELA DO PDF -> DADOS EM ARRAY
$header = array(
$dadosCabecalio = array(
'Classificação' => 'C',
'Serviço' => 'C',
'Item' => 'C',
'Porcentagem %' => 'C',
'Quantidade' => 'C'
);
$dataHeader = array(
$dadosField = array(
'clas_descricao' => 'C',
'clit_descricao' => 'C',
'chmd' => 'C',
'qtde' => 'C'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'C'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'C'], $dadosField);
}
$somaChmTotal = 0;
foreach ($this->GetData()[0] as $row) {
@ -342,22 +423,58 @@
$somaReg = 0;
$dados = array();
$x = 0;
$somaServico = 0;
$srv = '';
$oldSrv = '';
$dadosTable = [];
$agrupaServico = function($row, $somaChmTotal) use(&$somaServico, &$dadosTable, &$srv, &$oldSrv) {
$style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"';
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$perc = !$somaChmTotal ? 0 : (($somaServico / $somaChmTotal) * 100.0);
$data = [];
$data['serv_id'] = "TOTAL[$oldSrv]";
$data['clas_descricao'] = ' ';
$data['clit_descricao'] = ' ';
$data['chmd'] = round($perc);
$data['qtde'] = $somaServico;
$data['cor_linha_dados'] = 225;
$dadosTable[] = $data;
$oldSrv = $srv;
$somaDuracaoServico = 0;
$oldSrv = $srv;
$somaServico = 0;
}
$somaServico += $row['qtde'];
};
foreach ($this->GetData()[0] as $row) {
$somaReg += $row['qtde'];
$dados[$x]["clas_descricao"] = $row["clas_descricao"];
$dados[$x]["clit_descricao"] = $row["clit_descricao"];
$dados[$x]["chmd"] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
$dados[$x]["qtde"] = $row['qtde'];
$x++;
if ($mostraColunaServicos) {
$agrupaServico($row, $somaChmTotal);
}
$somaReg += $row['qtde'];
$row["chmd"] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
$dadosTable[] = $row;
}
if ($mostraColunaServicos) {
$agrupaServico(false, $somaChmTotal);
$widthHeader = array(42, 43, 43, 30, 30);
$totalizador = array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '','', '', 'Registros: ' . $somaReg);
} else {
$widthHeader = array(47, 47, 47, 47);
$totalizador = array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', 'Registros: ' . $somaReg);
}
//Monta o array para passar para o prepara; Necessário passar 6 parametros
$table1 = array($header, $dataHeader, $dados, $widthHeader, $totalizador, 0);
$table1 = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totalizador, 0);
$this->___dataRel = array($table1);
}
@ -397,12 +514,12 @@
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
}
$relClassficacao = new RelClassificacao($idProg, $dbcon, 1);
$relClassficacao->ExecutaRelatorio();
$relClassficacao = new RelClassificacao($idProg, $dbcon, 1);
$relClassficacao->ExecutaRelatorio();
/*
/*
* *************************************************************************
* BACKUP DA QUERY ANTERIOR

211
relatorios/callcenter/geral/relClassificacaoDetalhes.php

@ -1,12 +1,13 @@
<?php
include_once 'util/relatoriosBase.php';
include_once 'util/relatoriosBase.php';
class RelClassificacaoDetalhes extends Relatorios {
class RelClassificacaoDetalhes extends Relatorios {
private $___classificacao;
private $___classItem;
private $___agente;
private $___servico;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
@ -14,6 +15,7 @@
$this->___classificacao = isset($_POST['listaClas']) ? $_POST['listaClas'] : 0;
$this->___classItem = isset($_POST['listaItem']) ? $_POST['listaItem'] : 0;
$this->___agente = isset($_POST["listaAgente"]) ? $_POST["listaAgente"] : null;
$this->___servico = isset($_POST["listaServico"]) ? $_POST["listaServico"] : 0;
}
function ___FiltrosRelatorio() {
@ -67,7 +69,8 @@
* Rotulos.
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= '<td>Fila</td>' : '';
$filtro .= $this->GetIncDac() ? '<td>Fila</td>' : '';
$filtro .= GetUsoServico() ? '<td>Serviço</td>' : '';
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
$filtro .= '<td>Agente </td>';
@ -81,7 +84,12 @@
*/
global $dbcon;
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= sprintf('<td>%s</td>', $dacs) : '';
$filtro .= $this->GetIncDac() ? sprintf('<td>%s</td>', $dacs) : '';
if (GetUsoServico()) {
$filtro .= sprintf('<td>%s</td>', GetIdentRota(false, $this->___servico));
}
$filtro .= '<td><input name="dataIni" id="dataIni" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input name="dataFim" id="dataFim" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= "<td>$agentes</td>";
@ -106,8 +114,10 @@
$classificacao = $this->___classificacao;
$classificaItem = $this->___classItem;
$agente = $this->___agente ? $this->___agente : 0;
$srv = $this->___servico;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$query = "SELECT calldate, apelido, src AS origem, dst AS destino, f.nome, clas_descricao, clit_descricao,tplg_descricao,
$query = "SELECT " . ( $mostraColunaServicos ? "coalesce(s.serv_id, 'Não Informado') as serv_id," : "" ) . " calldate, apelido, src AS origem, dst AS destino, f.nome, clas_descricao, clit_descricao,tplg_descricao,
CASE WHEN (g.conf_uid <> '' AND g.conf_discado = 1) THEN 'S' ELSE 'N' END AS discador
FROM pbx_bilhetes a
INNER JOIN pbx_tipo_ligacao h ON h.tplg_codigo = a.tipo_chamada
@ -115,31 +125,54 @@
INNER JOIN pbx_classifica_atendimento c ON c.clas_id = b.clas_id
INNER JOIN pbx_classifica_item d ON d.clit_id = b.clit_id
INNER JOIN pbx_usuarios e ON e.matricula = b.matricula
INNER JOIN pbx_dacs f ON f.id = b.id_dac
LEFT JOIN pbx_campanha_contato_fone g ON a.uniqueid = g.conf_uid
INNER JOIN pbx_dacs f ON f.id = b.id_dac ";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid ";
}
$query .= "\n LEFT JOIN pbx_campanha_contato_fone g ON a.uniqueid = g.conf_uid
WHERE data_bilhete >= '%s' AND data_bilhete <= '%s'
AND a.lastapp <> 'Transferred Call'
AND b.id_dac = %s";
if($classificacao){
if ($classificacao) {
$query .= "AND b.clas_id = $classificacao";
}
if($classificaItem){
if ($classificaItem) {
$query .= "AND b.clit_id = $classificaItem";
}
if($agente){
if ($agente) {
$query .= "AND apelido = '$agente'";
}
$query .= "ORDER BY calldate";
$query = sprintf($query,$dataIni, $dataFim, $dac);
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$query .= $mostraColunaServicos ? "ORDER BY s.serv_id, calldate" : "ORDER BY calldate";
$query = sprintf($query, $dataIni, $dataFim, $dac);
$subQuery = sprintf("SELECT count(1) as chmd FROM pbx_bilhetes a
$subQuery = "SELECT count(1) as chmd FROM pbx_bilhetes a
INNER JOIN pbx_eventos_dacs b ON b.uid2 = a.uniqueid AND b.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS')
INNER JOIN pbx_usuarios c ON c.matricula = substring(b.agente, 7, 4)
INNER JOIN pbx_dacs d ON d.nome = b.fila
WHERE data_bilhete >= '%s' AND data_bilhete <= '%s'
INNER JOIN pbx_dacs d ON d.nome = b.fila";
if (GetUsoServico()) {
$subQuery .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid ";
}
$subQuery .= "\nWHERE data_bilhete >= '%s' AND data_bilhete <= '%s'
AND d.id = %s
AND a.lastapp <> 'Transferred Call'",$dataIni, $dataFim, $dac);
AND a.lastapp <> 'Transferred Call'";
if (GetUsoServico() && $srv) {
$subQuery .= "\nand s.serv_id = '{$srv}'";
}
$subQuery = sprintf($subQuery, $dataIni, $dataFim, $dac);
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
@ -170,6 +203,7 @@
'Tipo',
'Discador',
);
$dadosField = array(
'calldate',
'origem',
@ -180,6 +214,12 @@
'discador',
);
if (GetUsoServico() == RELATORIO_SERVICOS_HABILITA) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Monta a linha de cabecalio.
*/
@ -205,7 +245,7 @@
$dataRel[] = GenerateCsvFromArray($linha);
}
$dataRel[] = GenerateCsvFromArray(array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '','', 'Registros: ' . $somaReg));
$dataRel[] = GenerateCsvFromArray(array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', '', 'Registros: ' . $somaReg));
$this->___dataRel[] = $dataRel;
}
@ -245,6 +285,7 @@
'Tipo',
'Discador'
);
$dadosField = array(
'calldate',
'origem',
@ -255,6 +296,11 @@
'discador'
);
if (GetUsoServico() == RELATORIO_SERVICOS_HABILITA) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Monta a linha de cabecalio.
*/
@ -281,7 +327,7 @@
$row['clit_descricao'] = RemoveAcentos($row['clit_descricao']);
$row['clas_descricao'] = RemoveAcentos($row['clas_descricao']);
$row['tplg_descricao'] = explode(' ', $row['tplg_descricao'])[0];
$row['calldate'] = date('d/m/Y H:i:s',strtotime($row['calldate']));
$row['calldate'] = date('d/m/Y H:i:s', strtotime($row['calldate']));
// Formata linha de dados.
$linha = array('DADOS');
@ -292,13 +338,16 @@
$dataRel[] = $linha;
}
$dataRel[] = array('LABEL', 'Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '','', 'Registros: ' . $somaReg);
$dataRel[] = array('LABEL', 'Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', '', 'Registros: ' . $somaReg);
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaGrid() {
$dataRel = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
'Data/Hora' => 'align="center"',
'Origem' => 'align="left"',
@ -308,6 +357,7 @@
'Tipo' => 'align="center"',
'Discador' => 'align="Center"',
);
$dadosField = array(
'calldate' => 'align="center"',
'origem' => 'align="left"',
@ -317,6 +367,11 @@
'tplg_descricao' => 'align="center"',
'discador' => 'align="Center"'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField);
}
/*
* Inicia o relat�rio.
*/
@ -342,10 +397,36 @@
}
$somaReg = 0;
$somaServico = 0;
$srv = '';
$oldSrv = '';
$agrupaServico = function($row) use(&$somaServico, &$dataRel, &$srv, &$oldSrv) {
$style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"';
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$dataRel[] = sprintf("<tr><th colspan=\"7\" align=\"center\" {$style}>Total [%s] </th><th colspan=\"1\" align=\"right\" {$style}>%s</th></tr>", $oldSrv, $somaServico);
$oldSrv = $srv;
$somaServico = 0;
}
$somaServico++;
};
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
if ($mostraColunaServicos) {
$agrupaServico($row);
}
$somaReg ++;
$row["calldate"] = date('d/m/Y H:i:s', strtotime($row["calldate"]));
$row['tplg_descricao'] = explode(' ', $row['tplg_descricao'])[0];
@ -361,7 +442,13 @@
/*
* Linha de totalizacao.
*/
$linha = '<tr><th colspan="5" align="left">Total [ Chamadas Periodo ]: %s</th><th colspan="2" align="right">Registros: %s</th></tr>';
$colspan = 5;
if ($mostraColunaServicos) {
$agrupaServico(false);
$colspan = 6;
}
$linha = '<tr><th colspan="' .$colspan . '" align="left">Total [ Chamadas Periodo ]: %s</th><th colspan="2" align="right">Registros: %s</th></tr>';
$dataRel[] = sprintf($linha, $this->GetData()[1]['chmd'], $somaReg);
/*
@ -376,12 +463,15 @@
}
protected function ___PreparaPdf() {
list($this->___dac, $this->___dataIni, $this->___dataFim) = $_SESSION["SSstorageFiltros"];
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/**
* TABELA DADOS PRINCIPAIS
*/
//HEADER DA TABELA DO PDF -> DADOS EM ARRAY
$header = array(
$dadosCabecalio = array(
'Data/Hora' => 'C',
'Origem' => 'C',
'Agente' => 'C',
@ -390,7 +480,7 @@
'Tipo' => 'C',
'Discador' => 'C',
);
$dataHeader = array(
$dadosField = array(
'calldate' => 'C',
'origem' => 'C',
'apelido' => 'C',
@ -400,27 +490,68 @@
'discador' => 'C',
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'C'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'C'], $dadosField);
}
$somaReg = 0;
$dados = array();
$x = 0;
$somaServico = 0;
$srv = '';
$oldSrv = '';
$dadosTable = [];
$agrupaServico = function($row) use(&$somaServico, &$dadosTable, &$srv, &$oldSrv) {
$style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"';
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$perc = !$somaChmTotal ? 0 : (($somaServico / $somaChmTotal) * 100.0);
$data = [];
$data['serv_id'] = "TOTAL[$oldSrv]";
$data['calldate'] = ' ';
$data['origem'] = ' ';
$data['apelido'] = ' ';
$data['clas_descricao'] = ' ';
$data['clit_descricao'] = ' ';
$data['tplg_descricao'] = ' ';
$data['discador'] = $somaServico;
$data['cor_linha_dados'] = 225;
$dadosTable[] = $data;
$oldSrv = $srv;
$oldSrv = $srv;
$somaServico = 0;
}
$somaServico ++;
};
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
$dados[$x]["clas_descricao"] = $row["clas_descricao"];
$dados[$x]["clit_descricao"] = $row["clit_descricao"];
$dados[$x]["origem"] = $row['origem'];
$dados[$x]["apelido"] = $row['apelido'];
$dados[$x]["discador"] = $row["discador"];
$dados[$x]["calldate"] = date('d/m/Y H:i:s',strtotime($row['calldate']));
$dados[$x]['tplg_descricao'] = explode(' ', $row['tplg_descricao'])[0];
$x++;
if ($mostraColunaServicos) {
$agrupaServico($row);
}
$widthHeader = array(30, 15, 30, 40, 40, 20,15);
$totalizador = array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '','', 'Registros: ' . $somaReg,'','',);
$somaReg ++;
$row['calldate'] = date('d/m/Y H:i:s', strtotime($row['calldate']));
$row['tplg_descricao'] = explode(' ', $row['tplg_descricao'])[0];
$dadosTable[] = $row;
}
if ($mostraColunaServicos) {
$agrupaServico(false);
$widthHeader = array(30, 20, 15, 30, 30, 30, 20, 15);
$totalizador = array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '','', '', 'Registros: ' . $somaReg, '', '',);
} else {
$widthHeader = array(30, 15, 30, 40, 40, 20, 15);
$totalizador = array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', '', 'Registros: ' . $somaReg, '', '',);
}
//Monta o array para passar para o prepara; Necessário passar 6 parametros
$table = array($header, $dataHeader, $dados, $widthHeader, $totalizador, 0);
$table = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totalizador, 0);
$this->___dataRel = array($table);
}
@ -490,12 +621,12 @@
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
}
$relClassDetalhes = new RelClassificacaoDetalhes($idProg, $dbcon, 1);
$relClassDetalhes->ExecutaRelatorio();
$relClassDetalhes = new RelClassificacaoDetalhes($idProg, $dbcon, 1);
$relClassDetalhes->ExecutaRelatorio();
/*
/*
* *************************************************************************
* BACKUP DAS QUERYS ANTIGAS

87
relatorios/callcenter/geral/relClassificacaoMensal.php

@ -1,6 +1,6 @@
<?php
/* *************************************************************************
/* * ************************************************************************
*
* RELATÓRIO CLASSIFICAÇÃO MENSAL
* Autor
@ -23,20 +23,22 @@
*
* *************************************************************************
* Copyright (c) 2018, Simples IP
* *************************************************************************/
* ************************************************************************ */
include_once 'util/relatoriosBase.php';
include_once 'util/relatoriosBase.php';
class RelClassificacaoMensal extends Relatorios {
class RelClassificacaoMensal extends Relatorios {
private $___ano;
private $___mes;
private $___servico;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
$this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0;
$this->___mes = isset($_POST['listaMes']) ? $_POST['listaMes'] : date('m');
$this->___ano = isset($_POST['listaAno']) ? $_POST['listaAno'] : 0;
$this->___servico = isset($_POST["listaServico"]) ? $_POST["listaServico"] : 0;
}
public function ___ValidaForm() {
@ -96,7 +98,8 @@
* Rotulos.
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= '<td>Fila</td>' : '';
$filtro .= $this->GetIncDac() ? '<td>Fila</td>' : '';
$filtro .= GetUsoServico() ? '<td>Serviço</td>' : '';
$filtro .= '<td>Mês</td>';
$filtro .= '<td>Ano</td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
@ -106,7 +109,11 @@
* Valores.
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= sprintf('<td>%s</td>', $dacs) : '';
$filtro .= $this->GetIncDac() ? sprintf('<td>%s</td>', $dacs) : '';
if (GetUsoServico()) {
$filtro .= sprintf('<td>%s</td>', GetIdentRota(false, $this->___servico));
}
$filtro .= sprintf("<td>%s</td>", GetMes($this->___mes, '', 1));
$filtro .= sprintf('<td>%s</td>', GetAno($this->___ano, 1));
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>';
@ -126,30 +133,56 @@
$ano = $this->___ano;
$mes = $this->___mes;
$dac = $this->___dac;
$srv = $this->___servico;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$query = "select clas_descricao, clit_descricao,
(select count(*) from pbx_classifica_reg d
$query = $mostraColunaServicos ? "select clas_descricao, clit_descricao," : "select clas_descricao, clit_descricao,";
$query .= " (select count(*) from pbx_classifica_reg d
inner join pbx_bilhetes e on e.uniqueid = d.id_bilhetes
and e.lastapp <> 'Transferred Call'
inner join pbx_eventos_dacs f on f.uid2 = e.uniqueid ";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = e.uniqueid";
}
$query .= "\n where e.lastapp <> 'Transferred Call'
and date_part('year',e.data_bilhete) = '$ano'
and date_part('month',e.data_bilhete) = '$mes'
where d.clas_id = c.clas_id
and f.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS')
and d.clas_id = c.clas_id
and d.clit_id = c.clit_id
and d.id_dac = '$dac') as qtde,
and d.id_dac = dac.id_dac";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$query .= " ) as qtde,
(select count(distinct d.id_bilhetes) from pbx_classifica_reg d
inner join pbx_bilhetes e on e.uniqueid = d.id_bilhetes
and e.lastapp <> 'Transferred Call'
and date_part('year',e.data_bilhete) = '$ano'
and date_part('month',e.data_bilhete) = '$mes'
where d.clas_id = c.clas_id
inner join pbx_eventos_dacs f on f.uid2 = e.uniqueid ";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = e.uniqueid";
}
$query .= "\nwhere e.lastapp <> 'Transferred Call'
and date_part('year', e.data_bilhete) = '$ano'
and date_part('month', e.data_bilhete) = '$mes'
and f.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS')
and d.clas_id = c.clas_id
and d.clit_id = c.clit_id
and d.id_dac = '$dac') as chmd
and d.id_dac = dac.id_dac";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
$query .= ") as chmd
from pbx_classifica_atendimento a
inner join pbx_classifica_item c on c.clas_id = a.clas_id
inner join pbx_classifica_dacs d on d.clas_id = a.clas_id
where d.id_dac = '$dac'
inner join pbx_classifica_dacs dac on dac.clas_id = a.clas_id
where dac.id_dac = '$dac'
order by clas_descricao, clit_descricao";
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
@ -173,7 +206,7 @@
if ($count != 1) {
if ($ultClass != $row['clas_descricao']) {
$dataRel[] = GenerateCsvFromArray(array("Total [ $ultClass ]", $somaReg));
$dataRel[] = GenerateCsvFromArray(array("Total [$ultClass]", $somaReg));
$dataRel[] = GenerateCsvFromArray(array('', ''));
unset($somaReg);
@ -188,11 +221,11 @@
// Formata linha de dados.
$dataRel[] = GenerateCsvFromArray(array($row['clit_descricao'],$row['qtde']));
$dataRel[] = GenerateCsvFromArray(array($row['clit_descricao'], $row['qtde']));
$ultClass = $row['clas_descricao'];
if (count($this->GetData()[0]) == $count) {
$dataRel[] = GenerateCsvFromArray(array("Total [ $ultClass ]", $somaReg));
$dataRel[] = GenerateCsvFromArray(array("Total [$ultClass]", $somaReg));
}
}
$this->___dataRel[] = $dataRel;
@ -243,7 +276,7 @@
$row['clas_descricao'] = RemoveAcentos($row['clas_descricao']);
if ($count != 1) {
if ($ultClass != $row['clas_descricao']) {
$dataRel[] = array('LABEL', "Total [ $ultClass ]", $somaReg);
$dataRel[] = array('LABEL', "Total [$ultClass]", $somaReg);
$dataRel[] = array('LABEL', '', '');
unset($somaReg);
$dataRel[] = array('LABEL', $row['clas_descricao'], 'Classificacoes');
@ -263,7 +296,7 @@
$ultClass = $row['clas_descricao'];
if (count($this->GetData()[0]) == $count) {
$dataRel[] = array('LABEL', "Total [ $ultClass ]", $somaReg);
$dataRel[] = array('LABEL', "Total [$ultClass]", $somaReg);
}
}
@ -283,7 +316,7 @@
*/
$linha = '<tr>';
$linha .= sprintf("<th colspan=\"2\" %s>%s</th>", 'align="center"', 'Relatório Classificação Mensal');
$linha .= sprintf("<th colspan = \"2\" %s>%s</th>", 'align="center"', 'Relatório Classificação Mensal');
$linha .= "</tr>";
$dataRel[] = $linha;
@ -433,9 +466,9 @@
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
}
$relClassMensal = new RelClassificacaoMensal($idProg, $dbcon, 1);
$relClassMensal->ExecutaRelatorio();
$relClassMensal = new RelClassificacaoMensal($idProg, $dbcon, 1);
$relClassMensal->ExecutaRelatorio();
?>

308
relatorios/callcenter/metas/metricasDiaria.php

@ -1,5 +1,6 @@
<?php
/***************************************************************************
/* * *************************************************************************
*
* Metricas Diaria
* Autor
@ -44,11 +45,11 @@
* *************************************************************************
* Copyright (c) 2018, Simples IP
* *************************************************************************/
* ************************************************************************ */
include_once 'util/relatoriosBase.php';
include_once 'util/relatoriosBase.php';
class RelMetricasDiaria extends Relatorios {
class RelMetricasDiaria extends Relatorios {
private $___servico;
private $___tmpGrid;
@ -113,7 +114,9 @@
$filtro .= '<td>Fila</td>';
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
if (GetUsoServico()) {
$filtro .= '<td>Serviço</td>';
}
$filtro .= '<td>Tempo Grid</td>';
$filtro .= '<td>Tempo Sla</td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
@ -127,7 +130,9 @@
$filtro .= sprintf('<td>%s</td>', $dacs);
$filtro .= '<td><input name="dataIni" id="dataIni" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input name="dataFim" id="dataFim" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>';
if (GetUsoServico()) {
$filtro .= sprintf('<td>%s</td>', GetIdentRota($dbcon, $this->___servico));
}
$filtro .= sprintf('<td>%s</td>', GetTempo($dbcon, "tmpGrid", "Minutos", $this->___tmpGrid));
$filtro .= sprintf('<td>%s</td>', GetTempo($dbcon, "tmpSla", "Segundos", $this->___tmpSla));
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>';
@ -150,10 +155,10 @@
$dataFim = FormatDtMssql($this->___dataFim);
//$dataCorte = GetDataRelatorio();
$dac = $this->___dac;
$servico = $this->___servico;
$srv = $this->___servico;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$query = "SELECT HORA_INI
$query = "SELECT " . ($mostraColunaServicos ? "serv_id," : "") . " HORA_INI
,case when(HORA_FIM = '23:59:59.999')then '00:00:00' else HORA_FIM end as HORA_FIM
,OFERECIDAS,ATENDIDAS_URA,TRANSBORDADA,TRANSBORDANDO,ABANDONADAS,ATENDIDAS_RAMAL
,ATENDIDAS_PA,ATENDIDAS_30,TRANSFERIDAS,ESPERA
@ -171,7 +176,7 @@
,TEMPO_ATENDIMENTO
,TEMPO_ABANDONO
FROM (
SELECT hora_ini
select " . ($mostraColunaServicos ? "coalesce(serv_id, 'NAO INFORMADO') as serv_id," : "") . " hora_ini
,hora_fim
,SUM (CASE WHEN EVENTO in('ABANDON', 'COMPLETEAGENT','COMPLETECALLER','TRANSFER','TRANSBORDANDO') THEN 1 ELSE 0 END) AS OFERECIDAS
,SUM (CASE WHEN (EVENTO = 'ENTERQUEUE') AND (URA > 0) THEN 1 ELSE 0 END) AS ATENDIDAS_URA
@ -187,30 +192,30 @@
,SUM (CASE WHEN EVENTO IN ('TRANSBORDANDO') THEN 1 ELSE 0 END) AS TRANSBORDANDO
,SUM (case when EVENTO = 'TRANSBORDADO' THEN 1 else 0 end) AS TRANSBORDADA
FROM (
SELECT c.hora_ini
select " . ($mostraColunaServicos ? "coalesce(s.serv_id, 'NAO INFORMADO') as serv_id," : "") . " c.hora_ini
,c.hora_fim,a.calldate,b.fila,b.agente,b.evento,b.param1,b.param2,b.param3,b.param4,0 as ura
FROM (select hora_ini, hora_fim from pbx_hora_meta where tempo = $tmp ) c
INNER JOIN pbx_bilhetes a on cast(a.calldate as time) >= c.hora_ini and cast(a.calldate as time) < c.hora_fim
INNER JOIN pbx_eventos_dacs b on b.uid2 = a.uniqueid
INNER JOIN pbx_dacs d on d.nome = b.fila
WHERE b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER', 'CONNECT','ENTERQUEUE','TRANSFER', 'TRANSBORDANDO', 'TRANSBORDADO')
INNER JOIN pbx_dacs d on d.nome = b.fila ";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid";
}
$query .= "\nwhere b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER', 'CONNECT','ENTERQUEUE','TRANSFER', 'TRANSBORDANDO', 'TRANSBORDADO')
and a.lastapp <> 'Transferred Call'
and a.data_bilhete >= '$dataIni'
and a.data_bilhete <= '$dataFim'
and d.id = '$dac'";
if ($servico) {
$query .= " AND uniqueid IN (SELECT uniqueid FROM pbx_servicos_registra WHERE serv_id = '$servico') ";
if (GetUsoServico() && $srv) {
$query .= sprintf("\nand s.serv_id = %s", QuotedStr($srv));
}
$query .= " ) as dados
group by hora_ini, hora_fim
) as dados
order by 1,2";
$query .= " ) as dados group by " . ($mostraColunaServicos ? " serv_id, hora_ini, hora_fim" : " hora_ini, hora_fim") . ") as dados order by " . ($mostraColunaServicos ? " 1,2,3" : "1,2");
/*******************************************************************
/* * *****************************************************************
*
* QUERY DE TOTALIZAÇÃO
*
*******************************************************************/
* ***************************************************************** */
$totalQuery = "SELECT 'Chamadas Abandonadas' as tipo
,SUM (CASE WHEN( (strtoint(param3) <= 10)) THEN 1 ELSE 0 END) as ATE_10
@ -232,8 +237,8 @@
AND a.data_bilhete >= '$dataIni'
AND a.data_bilhete <= '$dataFim'
AND d.id = '$dac'";
if ($servico) {
$totalQuery .= " AND uniqueid IN (SELECT uniqueid FROM pbx_servicos_registra WHERE serv_id = '$servico') ";
if (GetUsoServico() && $srv) {
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($srv));
}
$totalQuery .= " ) AS DADOS
@ -257,8 +262,8 @@
AND a.data_bilhete >= '$dataIni'
AND a.data_bilhete <= '$dataFim'
AND d.id = '$dac'";
if ($servico) {
$totalQuery .= " AND uniqueid IN (SELECT uniqueid FROM pbx_servicos_registra WHERE serv_id = '$servico') ";
if (GetUsoServico() && $srv) {
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($srv));
}
$totalQuery .= " ) AS DADOS
@ -283,8 +288,8 @@
AND a.data_bilhete >= '$dataIni'
AND a.data_bilhete <= '$dataFim'
AND d.id = '$dac'";
if ($servico) {
$totalQuery .= " AND substring(clid,2,3) = '$servico'";
if (GetUsoServico() && $srv) {
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($srv));
}
$totalQuery .= " ) AS DADOS ORDER BY 1";
@ -306,6 +311,7 @@
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$dataRel[] = GenerateCsvFromArray($filtro);
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
"$this->___dataIni" . ' - ' . "$this->___dataFim",
@ -318,9 +324,15 @@
'atendidas_pa', 'atendidas_30', 'transferidas', 'espera', 'tme', 'tma', 'tmab', 'inb', 'iab', 'ia'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
$dataRel[] = GenerateCsvFromArray($dadosCabecalio);
$somaReg = 0;
$totalDias = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
@ -335,7 +347,7 @@
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
$totalDias ++;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
@ -364,15 +376,20 @@
$dataRel[] = GenerateCsvFromArray($linha);
}
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera,0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA,0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas,0) : 0);
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera, 0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA, 0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas, 0) : 0);
$mediaNS = $somaFila > 0 ? ($somaAtend30 / $somaFila) * 100.0 : 0;
$mediaIAB = $somaFila > 0 ? ($somaAbandonadas / $somaFila) * 100.0 : 0;
$mediaIA = $somaFila > 0 ? (($somaFila - ($somaAbandonadas + $somaEspera)) / $somaFila) * 100.0 : 0;
$dataRel[] = GenerateCsvFromArray(array('Media', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono, round($mediaNS,2), round($mediaIAB,2), round($mediaIA,2)));
if ($mostraColunaServicos) {
$dataRel[] = GenerateCsvFromArray(array('Media', '-', round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2)));
$dataRel[] = GenerateCsvFromArray(array('Total', '-', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, ' - ', ' - ', ' - ', ' - ', ' - ', ' - '));
} else {
$dataRel[] = GenerateCsvFromArray(array('Media', round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2)));
$dataRel[] = GenerateCsvFromArray(array('Total', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, ' - ', ' - ', ' - ', ' - ', ' - ', ' - '));
}
$dataRel[] = GenerateCsvFromArray(array(''));
$totalCabecalio = array(
@ -415,9 +432,8 @@
$dataRel[] = GenerateCsvFromArray(array(''));
$dataRel[] = GenerateCsvFromArray(array('NS', 'IAB', 'IA'));
$dataRel[] = GenerateCsvFromArray(array('Nivel de Servico','Indice de Abandono', 'Indice de Atendimento'));
$dataRel[] = GenerateCsvFromArray(array('Nivel de Servico', 'Indice de Abandono', 'Indice de Atendimento'));
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaExcel() {
@ -425,7 +441,7 @@
$dataRel = array();
$dataAgrup = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relatório.
*/
@ -458,13 +474,18 @@
'atendidas_pa', 'atendidas_30', 'transferidas', 'espera', 'tme', 'tma', 'tmab', 'inb', 'iab', 'ia'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
}
$dataRel[] = $linha;
$somaReg = 0;
$totalDias = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
@ -478,7 +499,7 @@
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
$totalDias ++;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
@ -504,15 +525,21 @@
}
$dataRel[] = $linha;
}
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera,0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA,0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas,0) : 0);
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera, 0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA, 0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas, 0) : 0);
$mediaNS = $somaFila > 0 ? ($somaAtend30 / $somaFila) * 100.0 : 0;
$mediaIAB = $somaFila > 0 ? ($somaAbandonadas / $somaFila) * 100.0 : 0;
$mediaIA = $somaFila > 0 ? (($somaFila - ($somaAbandonadas + $somaEspera)) / $somaFila) * 100.0 : 0;
$dataRel[] = array('LABEL', 'Media', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono, round($mediaNS,2), round($mediaIAB,2), round($mediaIA,2));
if ($mostraColunaServicos) {
$dataRel[] = array('LABEL', 'Media', ' ', round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$dataRel[] = array('LABEL', 'Total', ' ', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, '-', ' - ', ' - ', ' - ', ' - ', ' - ');
} else {
$dataRel[] = array('LABEL', 'Media', round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$dataRel[] = array('LABEL', 'Total', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, '-', ' - ', ' - ', ' - ', ' - ', ' - ');
}
$dataRel[] = array('DADOS', '');
$totalCabecalio = array(
@ -564,6 +591,7 @@
protected function ___PreparaGrid() {
$dataRel = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
"$this->___dataIni" . ' - ' . "$this->___dataFim" => 'align="center"',
@ -583,6 +611,7 @@
'IAB' => 'align="center"',
'IA' => 'align="center"'
);
$dadosField = array(
'data' => 'align="center"',
'oferecidas' => 'align="center"',
@ -602,6 +631,13 @@
'ia' => 'align="center"'
);
$colspan = "";
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField);
$colspan = "colspan=\"2\"";
}
/*
* Inicia o relatório.
*/
@ -613,7 +649,7 @@
$linha = '<tr>';
$linha .= sprintf(
"<th align=\"center\">%s</th>"
"<th align=\"center\"{$colspan}>%s</th>"
. "<th colspan=\"9\">Total Chamadas</th>"
. "<th colspan=\"3\">Tempo Médio (Segundos)</th>"
. "<th colspan=\"3\"></th>", ucfirst(strftime('%B', strtotime(FormatDtMssql($this->___dataIni)))));
@ -624,7 +660,7 @@
* Verifica se retornou dados
*/
if (!IsPostBack() || !count($this->GetData()[0])) {
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s</td></tr></table>", count($dadosCabecalio) - 1 , (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s</td></tr></table>", count($dadosCabecalio) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$this->___dataRel[] = $dataRel;
return;
}
@ -635,8 +671,8 @@
}
$linhaC .= "</tr>";
$dataRel[] = $linhaC;
$somaReg = 0;
$numDiasRelatorio = [];
$totalDias = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
@ -652,11 +688,55 @@
$somaTempoAtendimento = 0;
$somaTempoAbandono = 0;
$srv = '';
$oldSrv = '';
$somaFieldServ = ['oferecidas', 'transbordada', 'transbordando', 'abandonadas', 'atendidas_fila', 'atendidas_pa', 'atendidas_30', 'transferidas', 'espera'];
$somaServ = [];
foreach ($somaFieldServ as $value) {
$somaServ[$value] = 0;
}
$agrupaServico = function($row, $somaFieldServ) use(&$somaServ, &$dataRel, &$srv, &$oldSrv) {
$style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"';
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$linhaTotal = sprintf('<th colspan = "2" %s>TOTAL[%s]</th>', $style, $oldSrv);
foreach ($somaFieldServ as $value) {
$linhaTotal .= sprintf('<th %s>%s</th>', $style, $somaServ[$value]);
}
$dataRel[] = sprintf('<tr>%s<th colspan="6" %s>&nbsp</th></tr>', $linhaTotal, $style);
$oldSrv = $srv;
$somaServico = 0;
foreach ($somaFieldServ as $value) {
$somaServ[$value] = 0;
}
}
foreach ($somaFieldServ as $value) {
$somaServ[$value] += $row[$value];
}
};
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
if ($mostraColunaServicos) {
$agrupaServico($row, $somaFieldServ);
}
$numDiasRelatorio[($row['hora_ini'] . ' ' . substr($row['hora_fim'], 0, 8))] = 1;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
@ -680,27 +760,37 @@
$linha = "<tr>";
foreach ($dadosField as $key => $value) {
if ($key == 'data') {
$linha .= sprintf("<td %s>%s</td>", $value, $row['hora_ini'] . ' às ' . $row['hora_fim']);
$linha .= sprintf("<td %s>%s</td>", $value, $row['hora_ini'] . ' às ' . substr($row['hora_fim'], 0, 8));
} else {
$linha .= sprintf("<td %s>%s</td>", $value, $row["$key"]);
}
}
$linha .= "</tr>";
$dataRel[] = $linha;
}
if ($mostraColunaServicos) {
$agrupaServico(false, $somaFieldServ);
}
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera,0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA,0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas,0) : 0);
$totalDias = count($numDiasRelatorio);
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera, 0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA, 0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas, 0) : 0);
$mediaNS = $somaFila > 0 ? ($somaAtend30 / $somaFila) * 100.0 : 0;
$mediaIAB = $somaFila > 0 ? ($somaAbandonadas / $somaFila) * 100.0 : 0;
$mediaIA = $somaFila > 0 ? (($somaFila - ($somaAbandonadas + $somaEspera)) / $somaFila) * 100.0 : 0;
$linhaTotal = '<tr><th>Média</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th> %s </th><th> %s </th><th> %s </th></tr>';
$dataRel[] = sprintf($linhaTotal, round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono,round($mediaNS,2),round($mediaIAB,2), round($mediaIA,2));
$colspan = 1;
if ($mostraColunaServicos) {
$colspan = 2;
}
$linhaTotal = '<tr><th colspan = "' . $colspan . '">Média</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th> %s </th><th> %s </th><th> %s </th></tr>';
$dataRel[] = sprintf($linhaTotal, round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$linhaGeral = '<tr><th>Total</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th> - </th><th> - </th><th> - </th><th> - </th><th> - </th><th> - </th></tr>';
$linhaGeral = '<tr><th colspan = "' . $colspan . '">Total</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th> - </th><th> - </th><th> - </th><th> - </th><th> - </th><th> - </th></tr>';
$dataRel[] = sprintf($linhaGeral, $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, $somaOriginadasPA);
/*
* Fecha relatorio.
@ -781,25 +871,27 @@
protected function ___PreparaPdf() {
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
"$this->___dataIni" . ' - ' . "$this->___dataFim" => 'C',
'Fila' => 'C',
'Trans. E.' => 'C',
'Trans. S.' => 'C',
'Aband.' => 'C',
'Ramal Estático' => 'C',
'Atend. PA' => 'C',
'Atend. 30' => 'C',
'ABD.' => 'C',
'R. E.' => 'C',
'Atd PA' => 'C',
'Atd 30' => 'C',
'Transf.' => 'C',
'Espera' => 'C',
'TME' => 'C',
'PA' => 'C',
'Abandono' => 'C',
'ABD' => 'C',
'NS' => 'C',
'IAB' => 'C',
'IA' => 'C'
);
$dadosField = array(
'hora_ini' => 'C',
'oferecidas' => 'C',
@ -819,7 +911,13 @@
'ia' => 'C'
);
$somaReg = 0;
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'C'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'C'], $dadosField);
}
$numDiasRelatorio = [];
$totalDias = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
@ -830,12 +928,63 @@
$somaTransferidas = 0;
$somaEspera = 0;
$somaOriginadasPA = 0;
$srv = '';
$oldSrv = '';
$somaFieldServ = ['oferecidas', 'transbordada', 'transbordando', 'abandonadas', 'atendidas_fila', 'atendidas_pa', 'atendidas_30', 'transferidas', 'espera'];
$somaServ = [];
$linhaTotal = [];
$dadosTable = [];
foreach ($somaFieldServ as $value) {
$somaServ[$value] = 0;
}
$agrupaServico = function($row, $somaFieldServ) use(&$somaServ, &$dadosTable, &$srv, &$oldSrv) {
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$linhaTotal['serv_id'] = sprintf('TOTAL[%s]', $oldSrv);
$linhaTotal['hora_ini'] = '-';
foreach ($somaFieldServ as $value) {
$linhaTotal[$value] = $somaServ[$value];
}
$linhaTotal['tme'] = ' ';
$linhaTotal['tma'] = ' ';
$linhaTotal['tmab'] = ' ';
$linhaTotal['inb'] = ' ';
$linhaTotal['iab'] = ' ';
$linhaTotal['ia'] = ' ';
$linhaTotal['cor_linha_dados'] = "225";
$dadosTable[] = $linhaTotal;
$oldSrv = $srv;
$somaServico = 0;
foreach ($somaFieldServ as $value) {
$somaServ[$value] = 0;
}
}
foreach ($somaFieldServ as $value) {
$somaServ[$value] += $row[$value];
}
};
$dados = $this->GetData()[0];
$x = 0;
foreach ($dados as $row) {
$somaReg ++;
if ($mostraColunaServicos) {
$agrupaServico($row, $somaFieldServ);
}
$numDiasRelatorio[$row['hora_ini']] = 1;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
@ -851,26 +1000,40 @@
$somaTempoAtendimento += $row['tempo_atendimento'];
$somaTempoAbandono += $row['tempo_abandono'];
if ($row['hora_ini']) {
$dados[$x]['hora_ini'] = $row['hora_ini'] . ' às ' . $row['hora_fim'];
$row["serv_id"] = substr($row["serv_id"], 0, 20);
$row['hora_ini'] = $row['hora_ini'] . ' às ' . $row['hora_fim'];
$dadosTable[] = $row;
}
$x++;
if ($mostraColunaServicos) {
$agrupaServico(false, $somaFieldServ);
}
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera,0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA,0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas,0) : 0);
$totalDias = count($numDiasRelatorio);
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera, 0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA, 0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas, 0) : 0);
$mediaNS = $somaFila > 0 ? ($somaAtend30 / $somaFila) * 100.0 : 0;
$mediaIAB = $somaFila > 0 ? ($somaAbandonadas / $somaFila) * 100.0 : 0;
$mediaIA = $somaFila > 0 ? (($somaFila - ($somaAbandonadas + $somaEspera)) / $somaFila) * 100.0 : 0;
if ($mostraColunaServicos) {
$widthHeader = array(25, 25, 8, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 8, 8, 8);
$totaliza = array('Media', '-', round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$table = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totaliza, 0);
$totalizaGeral = array('Total', '-', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, '-', '-', '-', ' - ', ' - ', ' - ');
$table1 = array('', '', '', $widthHeader, $totalizaGeral, 0);
} else {
$widthHeader = array(25, 8, 12, 12, 10, 15, 12, 12, 12, 12, 13, 13, 13, 8, 8, 8);
$totaliza = array('Media', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME , $somaPA , $somaAbandono , round($mediaNS,2), round($mediaIAB,2), round($mediaIA,2));
$table = array($dadosCabecalio, $dadosField, $dados, $widthHeader, $totaliza, 0);
$totaliza = array('Media', round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$table = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totaliza, 0);
$totalizaGeral = array('Total', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, '-', '-', '-', ' - ', ' - ', ' - ');
$table1 = array('', '', '', $widthHeader, $totalizaGeral, 0);
}
$totalCabecalio = array(
"Tempo de Espera" => 'C',
"TE <= 10" => 'C',
@ -923,7 +1086,7 @@
3 => 'Índice de Atendimento')
);
$legendaHeader = array(64,64,65);
$legendaHeader = array(64, 64, 65);
$table3 = array($legendaCabecalio, $legendaField, $legDadosField, $legendaHeader, 0, 1);
$this->___dataRel = array($table, $table1, $table2, $table3);
@ -968,9 +1131,8 @@
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
$relMetricasDiaria = new RelMetricasDiaria($idProg, $dbcon, 1);
$relMetricasDiaria->ExecutaRelatorio();
}
$relMetricasDiaria = new RelMetricasDiaria($idProg, $dbcon, 1);
$relMetricasDiaria->ExecutaRelatorio();
?>

366
relatorios/callcenter/metas/metricasMensal.php

@ -1,5 +1,6 @@
<?php
/***************************************************************************
/* * *************************************************************************
*
* Metricas Mensal
* Autor
@ -44,11 +45,11 @@
* *************************************************************************
* Copyright (c) 2018, Simples IP
* *************************************************************************/
* ************************************************************************ */
include_once 'util/relatoriosBase.php';
include_once 'util/relatoriosBase.php';
class RelMetricasMensal extends Relatorios {
class RelMetricasMensal extends Relatorios {
private $___servico;
private $___ano;
@ -88,8 +89,8 @@
if ($this->GetIncDac()) {
$fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac);
}
// $fltCsv[] = "Ano:" . $this->___ano;
//$fltCsv[] = "Mês:" . $this->___mes;
// $fltCsv[] = "Ano:" . $this->___ano;
//$fltCsv[] = "Mês:" . $this->___mes;
$fltCsv[] = "Data Emissao:" . date('d/m/Y H:i:s');
$fltCsv[] = "Emitido Por:" . GetLogin();
return $fltCsv;
@ -121,7 +122,9 @@
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= '<td>Fila</td>' : '';
if (GetUsoServico()) {
$filtro .= '<td>Serviço</td>';
}
$filtro .= '<td>Mês</td>';
$filtro .= '<td>Ano</td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
@ -132,7 +135,9 @@
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= sprintf('<td>%s</td>', $dacs) : '';
if (GetUsoServico()) {
$filtro .= sprintf('<td>%s</td>', GetIdentRota($dbcon, $this->___servico));
}
$filtro .= sprintf('<td>%s</td>', GetMes($this->___mes, '', 1));
$filtro .= sprintf('<td>%s</td>', GetAno($this->___ano, 1));
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>';
@ -149,12 +154,12 @@
protected function ___GetDadosDb() {
$iniMes = $this->___ano . '-' . $this->___mes . '-01';
$fimMes = $this->___ano . '-' . $this->___mes . '-'.GetLastDayofMonth($this->___ano, $this->___mes);
$dac = GetDacDesc($this->GetDbCon(),$this->___dac);
$servico = $this->___servico;
$fimMes = $this->___ano . '-' . $this->___mes . '-' . GetLastDayofMonth($this->___ano, $this->___mes);
$dac = GetDacDesc($this->GetDbCon(), $this->___dac);
$srv = $this->___servico;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$query = "SELECT
DIA,OFERECIDAS,ATENDIDAS_URA,TRANSBORDADA,TRANSBORDANDO,ABANDONADAS
$query = "SELECT " . ($mostraColunaServicos ? "serv_id," : "") . " DIA,OFERECIDAS,ATENDIDAS_URA,TRANSBORDADA,TRANSBORDANDO,ABANDONADAS
,ATENDIDAS_FILA,ATENDIDAS_PA,ATENDIDAS_30,TRANSFERIDAS,ESPERA
,round( CASE WHEN(ESPERA = 0)THEN 0 ELSE (TEMPO_ESPERA / ESPERA) END ) * INTERVAL '1 SECOND' AS TME
,round( CASE WHEN(ATENDIDAS_PA = 0)THEN 0 ELSE (TEMPO_ATENDIMENTO / ATENDIDAS_PA)END) * INTERVAL '1 SECOND' AS TMA
@ -166,7 +171,7 @@
,0 AS ICO,TEMPO_ESPERA,TEMPO_ATENDIMENTO,TEMPO_ABANDONO
FROM (
select extract(day from a.data_bilhete) as dia
select " . ($mostraColunaServicos ? "coalesce(s.serv_id, 'NAO INFORMADO') as serv_id," : "") . " extract(day from a.data_bilhete) as dia
,SUM (CASE WHEN EVENTO in('ABANDON', 'COMPLETEAGENT','COMPLETECALLER','TRANSFER','TRANSBORDANDO') THEN 1 ELSE 0 END) AS OFERECIDAS
,0 AS ATENDIDAS_URA
,SUM (CASE WHEN EVENTO = 'ABANDON' THEN 1 ELSE 0 END) AS ABANDONADAS
@ -180,24 +185,27 @@
,SUM (CASE WHEN EVENTO = 'ABANDON' THEN strtoint(param3) ELSE 0 END) AS TEMPO_ABANDONO
,SUM (CASE WHEN EVENTO IN ('TRANSBORDANDO') THEN 1 ELSE 0 END) AS TRANSBORDANDO
,SUM (case when EVENTO = 'TRANSBORDADO' THEN 1 else 0 end) AS TRANSBORDADA
from pbx_bilhetes a, pbx_eventos_dacs b
where b.uid2 = a.uniqueid
AND b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER', 'CONNECT','ENTERQUEUE','TRANSFER', 'TRANSBORDANDO', 'TRANSBORDADO')
from pbx_bilhetes a
inner join pbx_eventos_dacs b on b.uid2 = a.uniqueid ";
if (GetUsoServico()) {
$query .= "\nleft join pbx_servicos_registra s on s.uniqueid = a.uniqueid";
}
$query .= "\nwhere b.evento in ('ABANDON','COMPLETEAGENT','COMPLETECALLER', 'CONNECT','ENTERQUEUE','TRANSFER', 'TRANSBORDANDO', 'TRANSBORDADO')
AND a.data_bilhete >= '$iniMes'
AND a.data_bilhete <= '$fimMes'
AND a.lastapp <> 'Transferred Call'
AND b.fila = '$dac'\n";
if ($servico) {
$query .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($servico));
if (GetUsoServico() && $srv) {
$query .= sprintf("\nand s.serv_id = %s", QuotedStr($srv));
}
$query .= " group by a.data_bilhete order by a.data_bilhete) as dados";
$query .= $mostraColunaServicos ? "\ngroup by s.serv_id, a.data_bilhete order by s.serv_id, a.data_bilhete) as dados" : "\ngroup by a.data_bilhete order by a.data_bilhete) as dados";
/*******************************************************************
/* * *****************************************************************
*
* QUERY DE TOTALIZAÇÃO
*
*******************************************************************/
* ***************************************************************** */
$totalQuery = "SELECT 'Chamadas Abandonadas' as tipo
,SUM (CASE WHEN( (strtoint(param3) <= 10)) THEN 1 ELSE 0 END) as ATE_10
,SUM (CASE WHEN( (strtoint(param3) > 10) AND (strtoint(param3) <= 20) ) THEN 1 ELSE 0 END) as ATE_20
@ -223,9 +231,8 @@
and a.data_bilhete >= '$iniMes'
and a.data_bilhete <= '$fimMes'
and b.fila = '$dac'\n";
if ($servico) {
$totalQuery .= " AND substring(clid,2,3) = '$servico'";
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($servico));
if (GetUsoServico() && $srv) {
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($srv));
}
$totalQuery .= " ) AS DADOS
@ -248,8 +255,8 @@
AND a.data_bilhete >= '$iniMes'
AND a.data_bilhete <= '$fimMes'
AND b.fila = '$dac'\n";
if ($servico) {
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($servico));
if (GetUsoServico() && $srv) {
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($srv));
}
$totalQuery .= " ) AS DADOS
@ -275,8 +282,8 @@
AND a.data_bilhete >= '$iniMes'
AND a.data_bilhete <= '$fimMes'
AND b.fila = '$dac'\n";
if ($servico) {
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($servico));
if (GetUsoServico() && $srv) {
$totalQuery .= sprintf(" AND exists(select '' from pbx_servicos_registra where uniqueid = a.uniqueid and serv_id = %s)", QuotedStr($srv));
}
$totalQuery .= " ) AS DADOS ORDER BY 1 ";
@ -293,6 +300,7 @@
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$dataRel[] = GenerateCsvFromArray($filtro);
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
"Mes",
@ -305,6 +313,12 @@
'atendidas_pa', 'atendidas_30', 'transferidas', 'espera', 'tme', 'tma', 'tmab', 'inb', 'iab', 'ie'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
$dataRel[] = GenerateCsvFromArray($dadosCabecalio);
$somaReg = 0;
@ -338,7 +352,7 @@
$somaTempoAtendimento += $row['tempo_atendimento'];
$somaTempoAbandono += $row['tempo_abandono'];
// Formata linha de dados.
// Formata linha de dados.
$linha = array();
foreach ($dadosField as $value) {
if ($value == 'data') {
@ -351,15 +365,21 @@
$dataRel[] = GenerateCsvFromArray($linha);
}
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera,0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA,0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas,0) : 0);
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera, 0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA, 0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas, 0) : 0);
$mediaNS = $somaFila > 0 ? ($somaAtend30 / $somaFila) * 100.0 : 0;
$mediaIAB = $somaFila > 0 ? ($somaAbandonadas / $somaFila) * 100.0 : 0;
$mediaIA = $somaFila > 0 ? (($somaFila - ($somaAbandonadas + $somaEspera)) / $somaFila) * 100.0 : 0;
$dataRel[] = GenerateCsvFromArray(array('Media', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono, round($mediaNS,2), round($mediaIAB,2), round($mediaIA,2)));
if ($mostraColunaServicos) {
$dataRel[] = GenerateCsvFromArray(array('Media', ' ', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2)));
$dataRel[] = GenerateCsvFromArray(array('Total', ' ', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, ' - ', ' - ', ' - ', ' - ', ' - ', ' - '));
} else {
$dataRel[] = GenerateCsvFromArray(array('Media', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2)));
$dataRel[] = GenerateCsvFromArray(array('Total', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, ' - ', ' - ', ' - ', ' - ', ' - ', ' - '));
}
$dataRel[] = GenerateCsvFromArray(array(''));
$totalCabecalio = array(
@ -391,7 +411,7 @@
foreach ($this->GetData()[1] as $row) {
$row['total'] = $row['ate_10'] + $row['ate_20'] + $row['ate_30'] + $row['ate_60'] + $row['ate_120'] + $row['ate_180'] + $row['ate_300'] + $row['ate_maior'];
// Formata linha de dados.
// Formata linha de dados.
$linha = array();
foreach ($totalField as $value) {
$linha[] = $row["$value"];
@ -402,13 +422,15 @@
$dataRel[] = GenerateCsvFromArray(array(''));
$dataRel[] = GenerateCsvFromArray(array('NS', 'IAB', 'IA'));
$dataRel[] = GenerateCsvFromArray(array('Nivel de Servico','Indice de Abandono', 'Indice de Atendimento'));
$dataRel[] = GenerateCsvFromArray(array('Nivel de Servico', 'Indice de Abandono', 'Indice de Atendimento'));
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaExcel() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relatório.
@ -434,7 +456,7 @@
$dadosCabecalio = array(
"Mes",
'Fila', 'Transbordo Entrada', 'Transbordo Saida', 'Abandonadas', 'Ramal Estático', 'Atendidas PA',
'Fila', 'Transbordo Entrada', 'Transbordo Saida', 'Abandonadas', 'Ramal Estatico', 'Atendidas PA',
'Atendidas Ate 30', 'Transferidas', 'Espera', 'TME', 'PA', 'Abandono', 'NS', 'IAB', 'IA'
);
$dadosField = array(
@ -442,6 +464,11 @@
'atendidas_pa', 'atendidas_30', 'transferidas', 'espera', 'tme', 'tma', 'tmab', 'inb', 'iab', 'ie'
);
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
@ -488,15 +515,21 @@
}
$dataRel[] = $linha;
}
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera,0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA,0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas,0) : 0);
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera, 0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA, 0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas, 0) : 0);
$mediaNS = $somaFila > 0 ? ($somaAtend30 / $somaFila) * 100.0 : 0;
$mediaIAB = $somaFila > 0 ? ($somaAbandonadas / $somaFila) * 100.0 : 0;
$mediaIA = $somaFila > 0 ? (($somaFila - ($somaAbandonadas + $somaEspera)) / $somaFila) * 100.0 : 0;
$dataRel[] = array('LABEL', 'Media', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono, round($mediaNS,2), round($mediaIAB,2), round($mediaIA,2));
if ($mostraColunaServicos) {
$dataRel[] = array('LABEL', 'Media', ' ', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$dataRel[] = array('LABEL', 'Total', ' ', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, '-', ' - ', ' - ', ' - ', ' - ', ' - ');
} else {
$dataRel[] = array('LABEL', 'Media', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$dataRel[] = array('LABEL', 'Total', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, '-', ' - ', ' - ', ' - ', ' - ', ' - ');
}
$dataRel[] = array('DADOS', '');
$totalCabecalio = array(
@ -547,7 +580,9 @@
}
protected function ___PreparaGrid() {
$dataRel = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
"Dia" => 'align="center"',
@ -567,6 +602,7 @@
'IAB' => 'align="center"',
'IA' => 'align="center"'
);
$dadosField = array(
'dia' => 'align="center"',
'oferecidas' => 'align="center"',
@ -586,6 +622,12 @@
'ie' => 'align="center"'
);
$colspan = "";
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField);
$colspan = "colspan=\"2\"";
}
/*
* Inicia o relatório.
*/
@ -596,7 +638,7 @@
*/
$linha = '<tr>';
$linha .= "<th align=\"center\">Mês</th>"
$linha .= "<th align=\"center\" {$colspan}>Mês</th>"
. "<th colspan=\"9\">Total Chamadas</th>"
. "<th colspan=\"3\">Tempo Médio (Segundos)</th>"
. "<th colspan=\"3\"></th>";
@ -607,7 +649,7 @@
* Verifica se retornou dados
*/
if (!IsPostBack() || !count($this->GetData()[0])) {
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s</td></tr></table>", count($dadosCabecalio) - 1 , (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s</td></tr></table>", count($dadosCabecalio) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$this->___dataRel[] = $dataRel;
return;
}
@ -619,7 +661,8 @@
$linhaC .= "</tr>";
$dataRel[] = $linhaC;
$somaReg = 0;
$numDiasRelatorio = [];
$totalDias = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
@ -635,11 +678,56 @@
$somaTempoAtendimento = 0;
$somaTempoAbandono = 0;
$srv = '';
$oldSrv = '';
$somaFieldServ = ['oferecidas', 'transbordada', 'transbordando', 'abandonadas', 'atendidas_fila', 'atendidas_pa', 'atendidas_30', 'transferidas', 'espera'];
$somaServ = [];
foreach ($somaFieldServ as $value) {
$somaServ[$value] = 0;
}
$agrupaServico = function($row, $somaFieldServ) use(&$somaServ, &$dataRel, &$srv, &$oldSrv) {
$style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"';
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$linhaTotal = sprintf('<th colspan = "2" %s>TOTAL[%s]</th>', $style, $oldSrv);
foreach ($somaFieldServ as $value) {
$linhaTotal .= sprintf('<th %s>%s</th>', $style, $somaServ[$value]);
}
$dataRel[] = sprintf('<tr>%s<th colspan="6" %s>&nbsp</th></tr>', $linhaTotal, $style);
$oldSrv = $srv;
$somaServico = 0;
foreach ($somaFieldServ as $value) {
$somaServ[$value] = 0;
}
}
foreach ($somaFieldServ as $value) {
$somaServ[$value] += $row[$value];
}
};
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaReg ++;
if ($mostraColunaServicos) {
$agrupaServico($row, $somaFieldServ);
}
$numDiasRelatorio[$row["dia"]] = 1;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
@ -658,60 +746,66 @@
$linha = "<tr>";
foreach ($dadosField as $key => $value) {
if ($key == 'data') {
$linha .= sprintf("<td %s>%s</td>", $value, $row['hora_ini'] . ' às ' . $row['hora_fim']);
} else {
$linha .= sprintf("<td %s>%s</td>", $value, $row["$key"]);
}
}
$linha .= "</tr>";
$dataRel[] = $linha;
}
$totalDias = count($numDiasRelatorio);
if ($mostraColunaServicos) {
$agrupaServico(false, $somaFieldServ);
}
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera,0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA,0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas,0) : 0);
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera, 0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA, 0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas, 0) : 0);
$mediaNS = $somaFila > 0 ? ($somaAtend30 / $somaFila) * 100.0 : 0;
$mediaIAB = $somaFila > 0 ? ($somaAbandonadas / $somaFila) * 100.0 : 0;
$mediaIA = $somaFila > 0 ? (($somaFila - ($somaAbandonadas + $somaEspera)) / $somaFila) * 100.0 : 0;
$linhaTotal = '<tr><th>Média</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th> %s </th><th> %s </th><th> %s </th></tr>';
$dataRel[] = sprintf($linhaTotal, round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME, $somaPA, $somaAbandono,round($mediaNS,2),round($mediaIAB,2), round($mediaIA,2));
$colspan = 1;
if ($mostraColunaServicos) {
$colspan = 2;
}
$linhaTotal = '<tr><th colspan = "' . $colspan . '">Média</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th> %s </th><th> %s </th><th> %s </th></tr>';
$dataRel[] = sprintf($linhaTotal, round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$linhaGeral = '<tr><th>Total</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th> - </th><th> - </th><th> - </th><th> - </th><th> - </th><th> - </th></tr>';
$linhaGeral = '<tr><th colspan = "' . $colspan . '">Total</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th> - </th><th> - </th><th> - </th><th> - </th><th> - </th><th> - </th></tr>';
$dataRel[] = sprintf($linhaGeral, $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, $somaOriginadasPA);
/*
* Fecha relatorio.
*/
$dataRel[] = '</table>';
$dataRel[] = '<br><table width="100%" cellpadding="2" class="grid">';
$dataRel[] = '<br><table width = "100%" cellpadding = "2" class = "grid">';
$totalCabecalio = array(
"Tempo de Espera" => 'align="center"',
"TE <= 10" => 'align="center"',
'10 < TE <= 20' => 'align="center"',
'20 < TE <= 30' => 'align="center"',
'30 < TE <= 60' => 'align="center"',
'60 < TE <= 120' => 'align="center"',
'120 < TE <= 180' => 'align="center"',
'180 < TE <= 300' => 'align="center"',
'300 < TE' => 'align="center"',
'Total' => 'align="center"'
"Tempo de Espera" => 'align = "center"',
"TE <= 10" => 'align = "center"',
'10 < TE <= 20' => 'align = "center"',
'20 < TE <= 30' => 'align = "center"',
'30 < TE <= 60' => 'align = "center"',
'60 < TE <= 120' => 'align = "center"',
'120 < TE <= 180' => 'align = "center"',
'180 < TE <= 300' => 'align = "center"',
'300 < TE' => 'align = "center"',
'Total' => 'align = "center"'
);
$totalField = array(
'tipo' => 'align="center"',
'ate_10' => 'align="center"',
'ate_20' => 'align="center"',
'ate_30' => 'align="center"',
'ate_60' => 'align="center"',
'ate_120' => 'align="center"',
'ate_180' => 'align="center"',
'ate_300' => 'align="center"',
'ate_maior' => 'align="center"',
'total' => 'align="center"'
'tipo' => 'align = "center"',
'ate_10' => 'align = "center"',
'ate_20' => 'align = "center"',
'ate_30' => 'align = "center"',
'ate_60' => 'align = "center"',
'ate_120' => 'align = "center"',
'ate_180' => 'align = "center"',
'ate_300' => 'align = "center"',
'ate_maior' => 'align = "center"',
'total' => 'align = "center"'
);
$linhaT = "<tr>";
@ -739,7 +833,7 @@
$dataRel[] = '</table>';
$linha = '<br><table width="30%" cellpadding="2" class="grid">';
$linha = '<br><table width = "30%" cellpadding = "2" class = "grid">';
$linha .= "<tr><th colspan=\"2\">Legenda</th></tr>";
$linha .= "<tr>"
. "<th>NS</th>"
@ -759,18 +853,21 @@
}
protected function ___PreparaPdf() {
list($this->___dac, $this->___ano,$this->___mes, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
list($this->___dac, $this->___ano, $this->___mes, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
$this->___dataIni = $this->___mes;
$this->___dataFim = $this->___ano;
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
"Mês" => 'C',
'Fila' => 'C',
'Trans. Entrada' => 'C',
'Trans. Saída' => 'C',
'Abandonadas' => 'C',
'Ramal Estático' => 'C',
'Atend. PA' => 'C',
'Atend. 30' => 'C',
'Tbd Etd' => 'C',
'Tbd Sda' => 'C',
'Abd' => 'C',
'R Est.' => 'C',
'Atd PA' => 'C',
'Atd 30' => 'C',
'Transf.' => 'C',
'Espera' => 'C',
'TME' => 'C',
@ -780,6 +877,7 @@
'IAB' => 'C',
'IA' => 'C'
);
$dadosField = array(
'dia' => 'C',
'oferecidas' => 'C',
@ -799,7 +897,14 @@
'ie' => 'C'
);
$somaReg = 0;
if ($mostraColunaServicos) {
$dadosCabecalio = array_merge(['Serviço' => 'C'], $dadosCabecalio);
$dadosField = array_merge(['serv_id' => 'C'], $dadosField);
}
$numDiasRelatorio = [];
$totalDias = 0;
$somaFila = 0;
$somaTransbordada = 0;
$somaTransbordando = 0;
@ -810,12 +915,64 @@
$somaTransferidas = 0;
$somaEspera = 0;
$somaOriginadasPA = 0;
$srv = '';
$oldSrv = '';
$somaFieldServ = ['oferecidas', 'transbordada', 'transbordando', 'abandonadas', 'atendidas_fila', 'atendidas_pa', 'atendidas_30', 'transferidas', 'espera'];
$somaServ = [];
$linhaTotal = [];
$dadosTable = [];
foreach ($somaFieldServ as $value) {
$somaServ[$value] = 0;
}
$agrupaServico = function($row, $somaFieldServ) use(&$somaServ, &$dadosTable, &$srv, &$oldSrv) {
$srv = $row["serv_id"];
if (!$oldSrv) {
$oldSrv = $srv;
}
if ((($srv != $oldSrv)) || !$row) {
$linhaTotal['serv_id'] = sprintf('TOTAL[%s]', $oldSrv);
foreach ($somaFieldServ as $value) {
$linhaTotal[$value] = $somaServ[$value];
}
$linhaTotal['tme'] = ' ';
$linhaTotal['tma'] = ' ';
$linhaTotal['tmab'] = ' ';
$linhaTotal['inb'] = ' ';
$linhaTotal['iab'] = ' ';
$linhaTotal['ie'] = ' ';
$linhaTotal['cor_linha_dados'] = "225";
$dadosTable[] = $linhaTotal;
$oldSrv = $srv;
$somaServico = 0;
foreach ($somaFieldServ as $value) {
$somaServ[$value] = 0;
}
}
foreach ($somaFieldServ as $value) {
$somaServ[$value] += $row[$value];
}
};
$dados = $this->GetData()[0];
$x = 0;
foreach ($dados as $row) {
$somaReg ++;
if ($mostraColunaServicos) {
$agrupaServico($row, $somaFieldServ);
}
$numDiasRelatorio[$row["dia"]] = 1;
$somaFila += $row['oferecidas'];
$somaTransbordada += $row['transbordada'];
$somaTransbordando += $row['transbordando'];
@ -831,25 +988,38 @@
$somaTempoAtendimento += $row['tempo_atendimento'];
$somaTempoAbandono += $row['tempo_abandono'];
if ($row['hora_ini']) {
$dados[$x]['hora_ini'] = $row['hora_ini'] . ' às ' . $row['hora_fim'];
$dadosTable[] = $row;
}
$x++;
if ($mostraColunaServicos) {
$agrupaServico(false, $somaFieldServ);
}
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera,0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA,0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas,0) : 0);
$somaTME = SecondToStrTime($somaEspera ? round($somaTempoEspera / $somaEspera, 0) : 0);
$somaPA = SecondToStrTime($somaTempoAtendimento ? round($somaTempoAtendimento / $somaAtendPA, 0) : 0);
$somaAbandono = SecondToStrTime($somaTempoAbandono ? round($somaTempoAbandono / $somaAbandonadas, 0) : 0);
$mediaNS = $somaFila > 0 ? ($somaAtend30 / $somaFila) * 100.0 : 0;
$mediaIAB = $somaFila > 0 ? ($somaAbandonadas / $somaFila) * 100.0 : 0;
$mediaIA = $somaFila > 0 ? (($somaFila - ($somaAbandonadas + $somaEspera)) / $somaFila) * 100.0 : 0;
$totalDias = count($numDiasRelatorio);
if ($mostraColunaServicos) {
$widthHeader = array(26, 7, 8, 10, 10, 10, 10, 13, 12, 12, 12, 13, 13, 13, 8, 8, 8);
$totaliza = array('Media', '', round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$table = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totaliza, 0);
$totalizaGeral = array('Total', '', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, '-', '-', '-', ' - ', ' - ', ' - ');
$table1 = array('', '', '', $widthHeader, $totalizaGeral, 0);
} else {
$widthHeader = array(7, 8, 17, 17, 17, 15, 13, 12, 12, 12, 13, 13, 13, 8, 8, 8);
$totaliza = array('Media', round($somaFila / $somaReg), round($somaTransbordada / $somaReg), round($somaTransbordando / $somaReg), round($somaAbandonadas / $somaReg), round($somaAtendRamal / $somaReg), round($somaAtendPA / $somaReg), round($somaAtend30 / $somaReg), round($somaTransferidas / $somaReg), round($somaEspera / $somaReg), $somaTME , $somaPA , $somaAbandono , round($mediaNS,2), round($mediaIAB,2), round($mediaIA,2));
$table = array($dadosCabecalio, $dadosField, $dados, $widthHeader, $totaliza, 0);
$totaliza = array('Media', round($somaFila / $totalDias), round($somaTransbordada / $totalDias), round($somaTransbordando / $totalDias), round($somaAbandonadas / $totalDias), round($somaAtendRamal / $totalDias), round($somaAtendPA / $totalDias), round($somaAtend30 / $totalDias), round($somaTransferidas / $totalDias), round($somaEspera / $totalDias), $somaTME, $somaPA, $somaAbandono, round($mediaNS, 2), round($mediaIAB, 2), round($mediaIA, 2));
$table = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totaliza, 0);
$totalizaGeral = array('Total', $somaFila, $somaTransbordada, $somaTransbordando, $somaAbandonadas, $somaAtendRamal, $somaAtendPA, $somaAtend30, $somaTransferidas, $somaEspera, '-', '-', '-', ' - ', ' - ', ' - ');
$table1 = array('', '', '', $widthHeader, $totalizaGeral, 0);
}
$totalCabecalio = array(
"Tempo de Espera" => 'C',
@ -903,7 +1073,7 @@
3 => 'Índice de Atendimento')
);
$legendaHeader = array(64,64,65);
$legendaHeader = array(64, 64, 65);
$table3 = array($legendaCabecalio, $legendaField, $legDadosField, $legendaHeader, 0, 1);
$this->___dataRel = array($table, $table1, $table2, $table3);
@ -948,11 +1118,11 @@
GetTemplate($smarty, 'relatoriosGrid.tpl');
}
}
}
$relMetricasMensal = new RelMetricasMensal($idProg, $dbcon, 1);
$relMetricasMensal->ExecutaRelatorio();
/*
$relMetricasMensal = new RelMetricasMensal($idProg, $dbcon, 1);
$relMetricasMensal->ExecutaRelatorio();
/*
* Relatório mostra a produtividade de um agente
//require_once("bd.php");

9
templates/confSistema.tpl

@ -330,6 +330,15 @@
</td>
</tr>
<tr>
<th align="left">Habilita Serviços em Relatórios</th>
<td align="left">
<input type="radio" name="prm_relatorio_servico" id="prm_relatorio_servico_desab" value="0" {if $prm_relatorio_servico == 0}checked{/if} />Desabilita
<input type="radio" name="prm_relatorio_servico" id="prm_relatorio_servico_habilita" value="1" {if $prm_relatorio_servico == 1}checked{/if} />Habilita
<input type="radio" name="prm_relatorio_servico" id="prm_relatorio_servico_filtros" value="2" {if $prm_relatorio_servico == 2}checked{/if} />Hbilita Filtros
</td>
</tr>
<tr>
<th>&nbsp;</th>
<td align="left"><input name="btGravar" type="submit" id="btGravar" value="Gravar"></td>

9
templates/relatoriosGrid.tpl

@ -1,5 +1,5 @@
{capture name="display"}
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<table width="100%" border="0" cellspacing="0" cellpadding="2" style="border: 0 !important;">
<tr>
<td>
<table class="filtro" border="0" cellspacing="0" cellpadding="1">
@ -17,8 +17,13 @@
</td>
</tr>
<tr>
<td>
<td style="border: 0 !important; ">
{if !$legendas}
<strong>* C.I.E.I.V:</strong> CHAMADAS INTERNAS/EMERGENCIA/INTERNACIONAL/VOIP.
{else}
{$legendas}
{/if}
</td>
</tr>
</table>

Loading…
Cancel
Save