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. 334
      include/FPDF/GerarPDF.php
  9. 10
      include/util/constantes.php
  10. 49
      include/util/funcoesApl.php
  11. 38
      include/util/funcoesInternas.php
  12. 23
      include/util/util.php
  13. 5
      login.php
  14. 22
      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. 1501
      relatorios/callcenter/geral/abandonadasFila.php
  20. 949
      relatorios/callcenter/geral/abandonadasFilaDetalhes.php
  21. 964
      relatorios/callcenter/geral/recebidasAgente.php
  22. 623
      relatorios/callcenter/geral/rechamadas.php
  23. 763
      relatorios/callcenter/geral/relClassificacao.php
  24. 1029
      relatorios/callcenter/geral/relClassificacaoDetalhes.php
  25. 755
      relatorios/callcenter/geral/relClassificacaoMensal.php
  26. 1748
      relatorios/callcenter/metas/metricasDiaria.php
  27. 2362
      relatorios/callcenter/metas/metricasMensal.php
  28. 9
      templates/confSistema.tpl
  29. 11
      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) { if (pg_connection_status($dbcon) === PGSQL_CONNECTION_BAD) {
ibRaiseExcept("Nao foi possivel conecta com o banco de dados!"); ibRaiseExcept("Nao foi possivel conecta com o banco de dados!");
} }
@AtualizaPreVenda($dbcon); //@AtualizaPreVenda($dbcon); //desativado, não estamos usando o sistema.
@CorrigeNumeroDestino($dbcon); @CorrigeNumeroDestino($dbcon);
@ApagaBilheteDuplTransfer($dbcon); @ApagaBilheteDuplTransfer($dbcon);
@CorrigeAbandonTransbordo($dbcon); @CorrigeAbandonTransbordo($dbcon);

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

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

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

@ -1183,7 +1183,7 @@ function __VerificaDefault() {
global $paramRemoteConn, $paramLocalConn; global $paramRemoteConn, $paramLocalConn;
if (!isset($paramRemoteConn)) { 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)) { if (!isset($paramLocalConn)) {

1
checaSessao.php

@ -21,6 +21,7 @@ if (!isset($_SESSION["SSinSession"]) || ($_SESSION["SSinSession"] != "ok")) {
$_SESSION["primAcesso"] = 0; $_SESSION["primAcesso"] = 0;
$_SESSION[HOSTS_INFO] = null; //pbx_sites $_SESSION[HOSTS_INFO] = null; //pbx_sites
$_SESSION["SSagentePenalidade"] = null; $_SESSION["SSagentePenalidade"] = null;
$_SESSION["SSUsoServico"] = 0;
GetParametrosLicensa(); 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 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_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_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_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); $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(); $values = array();
@ -112,8 +113,8 @@ if ($idSubProg == CONFIG_BASE_DADOS) {
if (!ExisteRegistro($dbcon, 'pbx_parametros', 'id', '1')) { if (!ExisteRegistro($dbcon, 'pbx_parametros', 'id', '1')) {
$query = "insert $query = "insert
into pbx_parametros 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) (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})"; 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 { } else {
$query = "update pbx_parametros $query = "update pbx_parametros
set prm_slogan = {prm_slogan}, prm_path_audio = {prm_path_audio}, prm_path_arq_agente = {prm_path_arq_agente}, 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_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_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_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"; 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_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_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_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"; from pbx_parametros where id = 1";
$result = @pg_query($dbcon, $query); $result = @pg_query($dbcon, $query);
$dados = @pg_fetch_array($result); $dados = @pg_fetch_array($result);

BIN
imgSite/LOGO_SIMPLESIP.PNG

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

334
include/FPDF/GerarPDF.php

@ -1,187 +1,199 @@
<?php <?php
/***************************************************************************************** /* * ***************************************************************************************
* *
* GERA PDF * GERA PDF
* Autor * Autor
* Lucas Awade * Lucas Awade
* *
* *************************************************************************************** * ***************************************************************************************
* Definições do Projeto * Definições do Projeto
* Nome: GerarPDF * Nome: GerarPDF
* Data início: 02/08/2018 * Data início: 02/08/2018
* Equipe: Amarildo Pereira * Equipe: Amarildo Pereira
* Descrição: * Descrição:
* O objetivo desta Classe é processar e retornar arquivos em PDF, para isso é necessário * O objetivo desta Classe é processar e retornar arquivos em PDF, para isso é necessário
* instanciar o Objeto da classe com os seus atributos. Após o preenchimendo dos atributos * instanciar o Objeto da classe com os seus atributos. Após o preenchimendo dos atributos
* é importante formatar a fonte e criar uma página inicial para o preenchimento dos dados. * é importante formatar a fonte e criar uma página inicial para o preenchimento dos dados.
* *
* Exemplo formatação: * Exemplo formatação:
* $pdf->SetFont('Arial', '', 6); Parametros ('FONTE', '(B | I | '')','TAMANHO') * $pdf->SetFont('Arial', '', 6); Parametros ('FONTE', '(B | I | '')','TAMANHO')
* $pdf->AddPage(); Adiciona a primeira página * $pdf->AddPage(); Adiciona a primeira página
* $pdf->Ln(5); Pula linhas * $pdf->Ln(5); Pula linhas
* *
* Para gerar a tabela no PDF é necessário a população de dados é feita apartir de um array * Para gerar a tabela no PDF é necessário a população de dados é feita apartir de um array
* que engloba 4 arrays multidimensionais um Array comun e uma variavel boolean. * que engloba 4 arrays multidimensionais um Array comun e uma variavel boolean.
* *
* Exemplo de geração: * Exemplo de geração:
* $pdf->Table(Array 1, Array 2, Array 3, Array 4, Array 5, boolean); * $pdf->Table(Array 1, Array 2, Array 3, Array 4, Array 5, boolean);
* *
* Array 1 = Array para o cabeçalho(Header) [MULTIDIMENSIONAL]; * Array 1 = Array para o cabeçalho(Header) [MULTIDIMENSIONAL];
* Array 2 = Array para os dados do cabeçalho [MULTIDIMENSIONAL]; * Array 2 = Array para os dados do cabeçalho [MULTIDIMENSIONAL];
* Array 3 = Array de dados para o preencimento das linhas [MULTIDIMENSIONAL] * Array 3 = Array de dados para o preencimento das linhas [MULTIDIMENSIONAL]
* Array 4 = Array para o tamanho dos cabeçalhos [COMUM] * Array 4 = Array para o tamanho dos cabeçalhos [COMUM]
* boolean = 0 sem grid | 1 com grid * boolean = 0 sem grid | 1 com grid
* *
* Por fim para gerar o PDF em arquivo para download ou via browser adicione a linha Output * Por fim para gerar o PDF em arquivo para download ou via browser adicione a linha Output
* com uma target de arquivo. * com uma target de arquivo.
* *
* Exemplo: * Exemplo:
* $pdf->Output(NOMEPDF .".pdf", 'target'); * $pdf->Output(NOMEPDF .".pdf", 'target');
* *
* Targets = 'D' para Download | 'I' via browser | 'F' Salva local | 'S' Retorna String * Targets = 'D' para Download | 'I' via browser | 'F' Salva local | 'S' Retorna String
* *
* Para saber e adicionar mais recursos na classe e importante verificar a classe FPDF. * Para saber e adicionar mais recursos na classe e importante verificar a classe FPDF.
* *
* ************************************************************************************** * **************************************************************************************
* Copyright (c) 2018, Simples IP * Copyright (c) 2018, Simples IP
* ************************************************************************************* */ * ************************************************************************************* */
require('fpdf.php'); require('fpdf.php');
class GerarPDF extends FPDF { class GerarPDF extends FPDF {
private $nomeRel; private $nomeRel;
private $dataRel; private $dataRel;
private $userRel; private $userRel;
private $logoRel; private $logoRel;
private $filtroRelIni; private $filtroRelIni;
private $filtroRelFim; private $filtroRelFim;
private $filtroRelDac; private $filtroRelDac;
private $type; private $type;
function getLogoRel() { function getLogoRel() {
return $this->logoRel; return $this->logoRel;
} }
function setLogoRel($logoRel) { function setLogoRel($logoRel) {
$this->logoRel = $logoRel; $this->logoRel = $logoRel;
} }
function getNomeRel() {
return $this->nomeRel;
}
function setNomeRel($nomeRel) { function getNomeRel() {
$this->nomeRel = $nomeRel; return $this->nomeRel;
} }
function getDataRel() { function setNomeRel($nomeRel) {
return $this->dataRel; $this->nomeRel = $nomeRel;
} }
function getUserRel() {
return $this->userRel;
}
function setDataRel($dataRel) { function getDataRel() {
$this->dataRel = $dataRel; return $this->dataRel;
} }
function setUserRel($userRel) { function getUserRel() {
$this->userRel = $userRel; return $this->userRel;
} }
function getFiltroRelIni() { function setDataRel($dataRel) {
return $this->filtroRelIni; $this->dataRel = $dataRel;
} }
function getFiltroRelFim() { function setUserRel($userRel) {
return $this->filtroRelFim; $this->userRel = $userRel;
} }
function setFiltroRelIni($filtroRelIni) { function getFiltroRelIni() {
$this->filtroRelIni = $filtroRelIni; return $this->filtroRelIni;
} }
function setFiltroRelFim($filtroRelFim) { function getFiltroRelFim() {
$this->filtroRelFim = $filtroRelFim; return $this->filtroRelFim;
} }
function getFiltroRelDac() { function setFiltroRelIni($filtroRelIni) {
return $this->filtroRelDac; $this->filtroRelIni = $filtroRelIni;
} }
function setFiltroRelDac($filtroRelDac) { function setFiltroRelFim($filtroRelFim) {
$this->filtroRelDac = $filtroRelDac; $this->filtroRelFim = $filtroRelFim;
} }
function getType() {
return $this->type;
}
function setType($type) { function getFiltroRelDac() {
$this->type = $type; return $this->filtroRelDac;
} }
function Header() { function setFiltroRelDac($filtroRelDac) {
// Logo $this->filtroRelDac = $filtroRelDac;
}
$this->Image(file_exists($this->getLogoRel()) ? $this->getLogoRel() : LOGO_HEADER_RELATORIO, 10, 13, 30);
$this->SetFont('Arial', 'B', 13); function getType() {
$this->Cell(80); return $this->type;
// Titulo }
$this->Cell($this->type == "L" ? 120 : 30, 5, $this->getNomeRel(), 0, 0, 'C');
$this->Ln(1); function setType($type) {
$this->SetFont('Arial', 'B', 9); $this->type = $type;
$this->Cell(0, 18, sprintf("Datas Filtradas: %s até %s", $this->getFiltroRelIni(), $this->getFiltroRelFim()), 0, 0, 'C'); }
$this->Ln(5);
$this->getFiltroRelDac() ? $this->Cell(0, 18, sprintf("Fila: %s", $this->getFiltroRelDac()), 0, 0, 'C') : ''; function Header() {
$this->Ln(15); // Logo
}
$this->Image(file_exists($this->getLogoRel()) ? $this->getLogoRel() : LOGO_HEADER_RELATORIO, 10, 13, 30);
$this->SetFont('Arial', 'B', 13);
$this->Cell(80);
// Titulo
$this->Cell($this->type == "L" ? 120 : 30, 5, $this->getNomeRel(), 0, 0, 'C');
$this->Ln(1);
$this->SetFont('Arial', 'B', 9);
$this->Cell(0, 18, sprintf("Datas Filtradas: %s até %s", $this->getFiltroRelIni(), $this->getFiltroRelFim()), 0, 0, 'C');
$this->Ln(5);
$this->getFiltroRelDac() ? $this->Cell(0, 18, sprintf("Fila: %s", $this->getFiltroRelDac()), 0, 0, 'C') : '';
$this->Ln(15);
}
function Table($header, $dataRow, $dataDB, $headerW, $totaliza, $gridRow = 0) {
$this->SetFillColor(200);
$this->SetLineWidth(.1);
$this->SetFont('Arial', 'B');
$this->Ln(2);
$i = 0;
foreach ($header as $keyH => $dataH) {
$this->Cell($headerW[$i], 7, $keyH, $gridRow, 0, $dataH, true);
$i++;
}
$this->Ln();
// Cor das linhas da tabela
$this->SetFillColor(255);
$this->SetFont('');
$fill = false;
foreach ($dataDB as $keyD => $data) {
$x = 0;
function Table($header, $dataRow, $dataDB, $headerW, $totaliza, $gridRow = 0) {
$this->SetFillColor(235);
$this->SetLineWidth(.1);
$this->SetFont('Arial', 'B');
$this->Ln(2);
$i = 0;
foreach ($header as $keyH => $dataH) {
$this->Cell($headerW[$i], 7, $keyH, $gridRow, 0, $dataH, true);
$i++;
}
$this->Ln();
// Cor das linhas da tabela // Cor das linhas da tabela
$this->SetFillColor(255); $this->SetFillColor(255);
$this->SetFont(''); $setFill = 0;
$fill = false; if (array_key_exists('cor_linha_dados', $data)) {
foreach ($dataDB as $keyD => $data) { $this->SetFillColor((int) $data['cor_linha_dados']);
$x = 0; $setFill = 1;
foreach ($dataRow as $keyR => $row) {
$this->Cell($headerW[$x], 7, $data[$keyR] ? $data[$keyR] : "0", $gridRow, 0, $row, $fill);
$x++;
}
$this->Ln();
$fill = !$fill;
} }
$this->Ln(3);
if ($totaliza) { foreach ($dataRow as $keyR => $row) {
$this->SetFont('Arial', 'B'); $this->Cell($headerW[$x], 7, $data[$keyR] ? $data[$keyR] : "0", $gridRow, 0, $row, ($setFill ? $setFill : $fill));
$this->SetFillColor(235); $x++;
for ($t = 0; $t < count($totaliza); $t++) {
$this->Cell($headerW[$t], 7, $totaliza[$t], 0, 0, 'C', true);
}
} }
$this->Ln(6);
$this->Cell(array_sum($headerW), 0, '', ''); $this->Ln();
$fill = !$fill;
} }
$this->Ln(3);
function Footer() { if ($totaliza) {
$this->SetY(-15); $this->SetFont('Arial', 'B');
$this->SetFont('Arial', '', 8); $this->SetFillColor(235);
$this->Cell(0, 15, 'Emitido em: ' . $this->dataRel . " | Gerado por: " . $this->userRel, 0, 0, 'L'); for ($t = 0; $t < count($totaliza); $t++) {
$this->Cell(0, 15, 'Página ' . $this->PageNo(), 0, 0, 'R'); $this->Cell($headerW[$t], 7, $totaliza[$t], 0, 0, 'C', true);
}
} }
$this->Ln(6);
$this->Cell(array_sum($headerW), 0, '', '');
}
function Footer() {
$this->SetY(-15);
$this->SetFont('Arial', '', 8);
$this->Cell(0, 15, 'Emitido em: ' . $this->dataRel . " | Gerado por: " . $this->userRel, 0, 0, 'L');
$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. * Mascara a ser mostrada nos campos de senha.
*/ */
define('MASCARA_PASSWORD', '*******'); 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('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('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('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('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('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'); // $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('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('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('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('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('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('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('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('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('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('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'); $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[356] = 'SimplesChat';
$dispProgSel[358] = 'Dashboard'; $dispProgSel[358] = 'Dashboard';
$dispProgSel[365] = 'Recebidas Agente/Serviços';
$dispProgSel[10001] = "Cadastro de Agentes PBX"; $dispProgSel[10001] = "Cadastro de Agentes PBX";
$dispProgSel[10002] = "Cadastro de Filas"; $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_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_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_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, $query = "select prm_slogan, prm_path_audio, prm_path_arq_agente, prm_logo_relatorio, prm_relatorio_head, prm_relatorio_linha1,
prm_relatorio_linha2, 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_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_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_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 from pbx_parametros
where id = 1"; where id = 1";
$result = pg_query($db, $query); $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; $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" : ""; $sel = $codSel == '0' ? "selected" : "";
$serv .= "<option value=\"0\" $sel>Todos</option>"; $serv .= "<option value=\"0\" $sel>Todos</option>";
$cont = 0; $cont = 0;
$i = 0; $i = 0;
$query = "select serv_id as identificador from pbx_servicos where serv_status = 1 order by 1"; $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)) { while ($dados = pg_fetch_row($result)) {
if ($codSel === $dados[0]) { if ($codSel === $dados[0]) {
$sel = "selected"; $sel = "selected";
@ -4722,3 +4726,18 @@ values(%s, %s, %s, 'GET', %s, (select substring(arquivo,
function ComplementoCampanhaAtivo() { function ComplementoCampanhaAtivo() {
return $_SESSION['prm_ativa_complemento_campanha']; 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(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(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(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(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(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(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(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)"; //$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(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(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(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(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(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)"; $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(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(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(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(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(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)"; $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(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(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(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(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(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(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(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(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(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(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(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(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)"; $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(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(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(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)"; $funcosInternas[] = "insert into pbx_funcoes_internas(id_prog, arquivo, id_prog_pai, status, exit)values(10004,'admin/agenda.php',10004,0,0)";

23
include/util/util.php

@ -193,10 +193,10 @@ function RemoveAcentos($str, $upper = False) {
function TextToHtml($str) { function TextToHtml($str) {
$text = array('á', 'é', 'í', 'ó', 'ú', 'â', 'ê', 'ô', 'ã', 'õ', 'à', 'ç', 'Á', 'É', 'Í', 'Ó', 'Ú', 'Â', 'Ê', 'Ô', 'Ã', 'Õ', 'À', 'Ç', '&'); $text = array('á', 'é', 'í', 'ó', 'ú', 'â', 'ê', 'ô', 'ã', 'õ', 'à', 'ç', 'Á', 'É', 'Í', 'Ó', 'Ú', 'Â', 'Ê', 'Ô', 'Ã', 'Õ', 'À', 'Ç', '&');
$subs = array('&aacute;', '&eacute;', '&iacute;', '&oacute;', '&uacute;', '&acirc;', '&ecirc;', '&ocirc;', '&atilde;', '&otilde;', '&agrave;', '&ccedil;', '&Aacute;', '&Eacute;', '&Iacute;', '&Oacute;', '&Uacute;', '&Acirc;', '&Ecirc;', '&Ocirc;', '&Atilde;', '&Otilde;', '&Agrave;', '&Ccedil;', '&amp;'); $subs = array('&aacute;', '&eacute;', '&iacute;', '&oacute;', '&uacute;', '&acirc;', '&ecirc;', '&ocirc;', '&atilde;', '&otilde;', '&agrave;', '&ccedil;', '&Aacute;', '&Eacute;', '&Iacute;', '&Oacute;', '&Uacute;', '&Acirc;', '&Ecirc;', '&Ocirc;', '&Atilde;', '&Otilde;', '&Agrave;', '&Ccedil;', '&amp;');
for ($i = 0; $i < strlen($str); $i++) { for ($i = 0; $i < strlen($str); $i++) {
$j = array_search($str[$i], $text); $j = array_search($str[$i], $text);
if ($j !== false){ if ($j !== false) {
$str[$i] = $subs[$j]; $str[$i] = $subs[$j];
} }
} }
@ -372,14 +372,14 @@ function LimpaString($str, $toUpeer = true, $removeSpace = true) {
if (!isset($str) || !$str) { if (!isset($str) || !$str) {
return ''; return '';
} else } else
if (!is_string($str)) { if (!is_string($str)) {
return $str; return $str;
} }
$string = trim($str); $string = trim($str);
$array1 = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý'); $array1 = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý');
$array2 = array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'U', 'P', 'B', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y'); $array2 = array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'U', 'P', 'B', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y');
$string = str_replace($array1, $array2, $string); $string = str_replace($array1, $array2, $string);
$newstring = preg_replace(($removeSpace ? "/[^a-zA-Z0-9_.]/" : "/[^a-zA-Z0-9\s_.]/"), "", $string); $newstring = preg_replace(($removeSpace ? "/[^a-zA-Z0-9_.]/" : "/[^a-zA-Z0-9\s_.]/"), "", $string);
return $toUpeer ? strtoupper($newstring) : $newstring; return $toUpeer ? strtoupper($newstring) : $newstring;
} }
@ -524,7 +524,7 @@ function GetDefStrDb() {
} }
function GetSckConnect() { function GetSckConnect() {
$path = "bd"; $path = "bd";
$arq = @fopen($path, 'r', true); $arq = @fopen($path, 'r', true);
if (!$arq) { if (!$arq) {
@ -1451,14 +1451,20 @@ function ApagaBilheteDuplTransfer($dbcon) {
*/ */
$path = '/var/log/asterisk/apaga_bilhetes_transfer.log'; $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'); $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;
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 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; 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);"; 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)) { 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); WriteLog($log, $path);
} }
} }
@ -1542,7 +1548,6 @@ function GetParamLgpd($param) {
return false; return false;
} }
function GetDiasAbandonada($conn = null) { function GetDiasAbandonada($conn = null) {
$query = "select prm_abandonada_semretorno from pbx_parametros"; $query = "select prm_abandonada_semretorno from pbx_parametros";
$result = $conn ? pg_query($conn, $query) : pg_query($query); $result = $conn ? pg_query($conn, $query) : pg_query($query);

5
login.php

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

22
master.css

@ -156,7 +156,7 @@ a:active
background: #f09f47; background: #f09f47;
height: 30px; height: 30px;
color: #FFFFFF; color: #FFFFFF;
} }
#nav_login #nav_login
@ -982,12 +982,22 @@ table.gridClean td {
} }
.textPrivate { .textPrivate {
background-color: lightblue; background-color: lightblue;
width: 110px; width: 110px;
height: 110px; height: 110px;
overflow: scroll; overflow: scroll;
} }
.textPrivate p { .textPrivate p {
text-align: justify; 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.files=false
copy.src.on.open=false copy.src.on.open=false
copy.src.target=/var/www/aplicativo copy.src.target=/var/www/aplicativo
include.path.private=
index.file=index.php index.file=index.php
run.as=LOCAL run.as=LOCAL
url=http://localhost/ 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"/> <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"> <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group> <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/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> <file>file:/var/www/html/aplicativo/include/util/funcoesApl.php</file>
</group> </group>
</open-files> </open-files>

2
nbproject/project.properties

@ -1,4 +1,4 @@
include.path=${php.global.include.path} include.path=
php.version=PHP_56 php.version=PHP_56
source.encoding=ISO-8859-1 source.encoding=ISO-8859-1
src.dir=. 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) 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')) 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;

1501
relatorios/callcenter/geral/abandonadasFila.php

File diff suppressed because it is too large Load Diff

949
relatorios/callcenter/geral/abandonadasFilaDetalhes.php

File diff suppressed because it is too large Load Diff

964
relatorios/callcenter/geral/recebidasAgente.php

File diff suppressed because it is too large Load Diff

623
relatorios/callcenter/geral/rechamadas.php

@ -1,334 +1,399 @@
<?php <?php
include_once 'util/relatoriosBase.php'; include_once 'util/relatoriosBase.php';
class RelRechamadas extends Relatorios { class RelRechamadas extends Relatorios {
private $___origem; 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"] : '';
}
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() { function ___FiltrosRelatorio() {
if ($this->___media != MEDIA_PRINT_GRID) {
/*
* Recupera os filtros da sessão do usuário.
*/
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
if ($this->___media == MEDIA_PRINT_HTML) {
$fila = $this->GetIncDac() ? 'Fila: ' . GetDacDesc($this->GetDbCon(), $this->GetIdProg() . ' ') : '';
return sprintf("%sData Inicial: %s Data Final: %s Tipo: %s", $fila, $this->___dataIni, $this->___dataFim, ($this->___tipoRelatorio ? 'Analítico' : 'Sintético'));
}
$fltCsv = array();
if ($this->GetIncDac()) {
$fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac);
}
$fltCsv[] = "Data Inicial:" . $this->___dataIni;
$fltCsv[] = "Data Final:" . $this->___dataFim;
$fltCsv[] = "Data Emissao:" . date('d/m/Y H:i:s');
$fltCsv[] = "Emitido Por:" . GetLogin();
return $fltCsv;
}
if ($this->GetIncDac()) { if ($this->___media != MEDIA_PRINT_GRID) {
$dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1); /*
* Recupera os filtros da sessão do usuário.
*/
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
if ($this->___media == MEDIA_PRINT_HTML) {
$fila = $this->GetIncDac() ? 'Fila: ' . GetDacDesc($this->GetDbCon(), $this->GetIdProg() . ' ') : '';
return sprintf("%sData Inicial: %s Data Final: %s Tipo: %s", $fila, $this->___dataIni, $this->___dataFim, ($this->___tipoRelatorio ? 'Analítico' : 'Sintético'));
} }
$lkPrint = ""; $fltCsv = array();
if ($this->___dataCount) { if ($this->GetIncDac()) {
$prt = '<a href="index.php?idProg=%s&media=%s&tipoRelatorio=%s"><img src="imgSite/%s" alt="Clique aqui para imprimir!" width="24" height="24" border="0"></a>'; $fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac);
$prtHtml = "<a href=\"javaScript:NovaJanela('index.php?idProg=%s&media=%s&tipoRelatorio=%s', '%s', '720', '700', 'scrollbars=YES');\"><img src=\"imgSite/%s\" alt=\"Clique aqui para imprimir!\" width=\"24\" height=\"24\" border=\"0\"></a>";
$lkPrint .= sprintf($prtHtml, $this->GetidProg(), MEDIA_PRINT_HTML, $this->___tipoRelatorio, substr(LimpaString(GetDispProgSel($this->GetIdProg())), 0, 20), 'print.gif');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_EXCEL, $this->___tipoRelatorio, 'prt-xls.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_PDF, $this->___tipoRelatorio, 'prt-pdf.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, $this->___tipoRelatorio, 'prt-csv.png');
} }
$fltCsv[] = "Data Inicial:" . $this->___dataIni;
$fltCsv[] = "Data Final:" . $this->___dataFim;
$fltCsv[] = "Data Emissao:" . date('d/m/Y H:i:s');
$fltCsv[] = "Emitido Por:" . GetLogin();
return $fltCsv;
}
$tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"'; if ($this->GetIncDac()) {
/* $dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1);
* Personalise esta função se necessitar de outras op��es de filtro. }
*/
$filtro = '<table border="0" cellspacing="1" cellpadding="1">';
/*
* Rotulos.
*/
$filtro .= '<tr>';
if ($this->GetIncDac())
$filtro .= '<td>Fila</td>';
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
$filtro .= '<td>Origem</td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
$filtro .= '</tr>';
/* $lkPrint = "";
* Valores. if ($this->___dataCount) {
*/ $prt = '<a href="index.php?idProg=%s&media=%s&tipoRelatorio=%s"><img src="imgSite/%s" alt="Clique aqui para imprimir!" width="24" height="24" border="0"></a>';
$filtro .= '<tr>'; $prtHtml = "<a href=\"javaScript:NovaJanela('index.php?idProg=%s&media=%s&tipoRelatorio=%s', '%s', '720', '700', 'scrollbars=YES');\"><img src=\"imgSite/%s\" alt=\"Clique aqui para imprimir!\" width=\"24\" height=\"24\" border=\"0\"></a>";
if ($this->GetIncDac()) $lkPrint .= sprintf($prtHtml, $this->GetidProg(), MEDIA_PRINT_HTML, $this->___tipoRelatorio, substr(LimpaString(GetDispProgSel($this->GetIdProg())), 0, 20), 'print.gif');
$filtro .= sprintf('<td>%s</td>', $dacs); $lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_EXCEL, $this->___tipoRelatorio, 'prt-xls.png');
$filtro .= '<td><input name="dataIni" id="dataIni" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>'; $lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_PDF, $this->___tipoRelatorio, 'prt-pdf.png');
$filtro .= '<td><input name="dataFim" id="dataFim" type="text" size="15" maxlength="10" value="%s" onkeyup="formataData(this)" title="dd/mm/aaaa"></td>'; $lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, $this->___tipoRelatorio, 'prt-csv.png');
$filtro .= sprintf('<td><input name="origem" id="origem" type="text" size="15" value="%s" /></td>', $this->___origem); }
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>';
$filtro .= '<td>%s</td>';
$filtro .= '</tr>';
$filtro .= '</table>';
/* $tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"';
* Guarda os filtros passados para recuperar na emissão dos relatóios para impressão. /*
*/ * Personalise esta função se necessitar de outras op��es de filtro.
*/
$filtro = '<table border="0" cellspacing="1" cellpadding="1">';
/*
* Rotulos.
*/
$filtro .= '<tr>';
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>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
$filtro .= '</tr>';
/*
* Valores.
*/
$filtro .= '<tr>';
if ($this->GetIncDac()) {
$filtro .= sprintf('<td>%s</td>', $dacs);
}
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio, $this->___agente); 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);
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>';
$filtro .= '<td>%s</td>';
$filtro .= '</tr>';
$filtro .= '</table>';
/*
* 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);
}
return sprintf($filtro, $this->___dataIni, $this->___dataFim, $lkPrint); protected function ___GetDadosDb() {
$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";
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";
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";
protected function ___GetDadosDb() { if (GetUsoServico() && $srv) {
$dataIni = FormatDtMssql($this->___dataIni); $query .= "\nand c.serv_id = '{$srv}'";
$dataFim = FormatDtHoraBD($this->___dataFim); }
$dac = $this->___dac; $query .= "\nand a.lastapp <> 'Transferred Call'
$origem = soNumero($this->___origem);
$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,
(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'
and a.data_bilhete >= '$dataIni' and a.data_bilhete >= '$dataIni'
and a.data_bilhete <= '$dataFim' 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) { if ($origem) {
$query .= " and a.src like '%$origem%' \n"; $query .= "\nand a.src like '%$origem%' \n";
} }
$query .= " ) AS RECHAMADAS GROUP BY FILA, ORIGEM having count(*) > 1 ORDER BY 3 desc"; if ($mostraColunaServicos) {
$query .= " ) AS RECHAMADAS GROUP BY fila, serv_id, origem having count(*) > 1 ORDER BY serv_id, qtde desc";
$result = $this->___GetQuery($query); } else {
$row = pg_fetch_all($result); $query .= " ) AS RECHAMADAS GROUP BY fila, origem having count(*) > 1 ORDER BY qtde desc";
$this->SetData($row ? $row : array());
} }
protected function ___PreparaCsv() {
$dataRel = array(); $result = $this->___GetQuery($query);
$filtro = $this->___FiltrosRelatorio(); $row = pg_fetch_all($result);
$dataRel[] = GenerateCsvFromArray($filtro); $this->SetData($row ? $row : array());
}
$dadosCabecalio = array('Origem', 'Quantidade', 'TMA', 'Tempo');
$dadosField = array('origem', 'qtde', 'tma', 'tempo_atende'); protected function ___PreparaCsv() {
$dataRel[] = GenerateCsvFromArray($dadosCabecalio); $dataRel = array();
$filtro = $this->___FiltrosRelatorio();
foreach ($this->GetData()[0] as $row) { $dataRel[] = GenerateCsvFromArray($filtro);
$row['tma'] = SecondToStrTime(round($row['tempo_atende']/$row['qtde'])); $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$row['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
$dadosCabecalio = array('Origem', 'Quantidade', 'TMA', 'Tempo');
$linha = array(); $dadosField = array('origem', 'qtde', 'tma', 'tempo_atende');
foreach ($dadosField as $key) {
$linha[] = $row["$key"];
} if ($mostraColunaServicos) {
$dataRel[] = GenerateCsvFromArray($linha); $dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
} $dadosField = array_merge(['serv_id'], $dadosField);
$this->___dataRel[] = $dataRel;
} }
protected function ___PreparaExcel() { $dataRel[] = GenerateCsvFromArray($dadosCabecalio);
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
/* foreach ($this->GetData()[0] as $row) {
* Inicia o relatório. $row['tma'] = SecondToStrTime(round($row['tempo_atende'] / $row['qtde']));
*/ $row['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
/* $linha = array();
* Cria os filtros foreach ($dadosField as $key) {
*/ $linha[] = $row["$key"];
$linha = array('LABEL');
foreach ($filtro as $values) {
list($label, $value) = explode(":", $values);
$linha[] = $label;
} }
$dataRel[] = $linha; $dataRel[] = GenerateCsvFromArray($linha);
}
$linha = array('DADOS'); $this->___dataRel[] = $dataRel;
foreach ($filtro as $values) { }
list($label, $value) = explode(":", $values);
$linha[] = $value;
}
$dataRel[] = $linha;
$dadosCabecalio = array('Origem', 'Quantidade', 'TMA', 'Tempo'); protected function ___PreparaExcel() {
$dadosField = array('origem', 'qtde', 'tma', 'tempo_atende'); $dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$linha = array('LABEL'); $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
foreach ($dadosCabecalio as $value) { /*
$linha[] = $value; * Inicia o relatório.
} */
$dataRel[] = $linha;
/*
foreach ($this->GetData()[0] as $row) { * Cria os filtros
$row['tma'] = SecondToStrTime(round($row['tempo_atende']/$row['qtde'])); */
$row['tempo_atende'] = SecondToStrTime($row['tempo_atende']); $linha = array('LABEL');
foreach ($filtro as $values) {
$linha = array('DADOS'); list($label, $value) = explode(":", $values);
foreach ($dadosField as $key) { $linha[] = $label;
$linha[] = $row["$key"];
}
$dataRel[] = $linha;
}
$this->___dataRel[] = $dataRel;
} }
$dataRel[] = $linha;
protected function ___PreparaGrid() { $linha = array('DADOS');
$dataRel = array(); foreach ($filtro as $values) {
list($label, $value) = explode(":", $values);
$dadosCabecalio = array( $linha[] = $value;
'Origem' => 'align="center"', }
'Quantidade' => 'align="center"', $dataRel[] = $linha;
'TMA' => 'align="center"',
'Tempo' => 'align="center"'
);
$dadosField = array(
'origem' => 'align="center"',
'qtde' => 'align="center"',
'tma' => 'align="center"',
'tempo_atende' => 'align="center"'
);
/* $dadosCabecalio = array('Origem', 'Quantidade', 'TMA', 'Tempo');
* Inicia o relatório. $dadosField = array('origem', 'qtde', 'tma', 'tempo_atende');
*/
$dataRel[] = '<table width="70%" cellpadding="2" class="grid">';
/* if ($mostraColunaServicos) {
* Monta a linha de cabecalio. $dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
*/ $dadosField = array_merge(['serv_id'], $dadosField);
}
$linha = '<tr>'; $linha = array('LABEL');
$linha .= "<th align=\"center\" colspan=\"4\">Rechamadas</th>"; foreach ($dadosCabecalio as $value) {
$linha .= "</tr>"; $linha[] = $value;
$dataRel[] = $linha; }
$dataRel[] = $linha;
/* foreach ($this->GetData()[0] as $row) {
* Verifica se retornou dados $row['tma'] = SecondToStrTime(round($row['tempo_atende'] / $row['qtde']));
*/ $row['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
if (!IsPostBack() || !count($this->GetData()[0])) {
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s<td></tr></table>", count(1) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$this->___dataRel[] = $dataRel;
return;
}
$linhaC = "<tr>"; $linha = array('DADOS');
foreach ($dadosCabecalio as $key => $value) { foreach ($dadosField as $key) {
$linhaC .= sprintf("<th %s>%s</th>", $value, $key); $linha[] = $row["$key"];
} }
$linhaC .= "</tr>"; $dataRel[] = $linha;
$dataRel[] = $linhaC; }
/* $this->___dataRel[] = $dataRel;
* Linhas de dados. }
*/
foreach ($this->GetData()[0] as $row) { protected function ___PreparaGrid() {
$row['origem'] = ocultarTelefone($row['origem']); $dataRel = array();
$row['tma'] = SecondToStrTime(round($row['tempo_atende']/$row['qtde'])); $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$row['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
$linha = "<tr>";
foreach ($dadosField as $key => $value) {
$linha .= sprintf("<td %s>%s</td>", $value, $row["$key"]);
}
$linha .= "</tr>";
$dataRel[] = $linha;
}
$dadosCabecalio = array(
'Origem' => 'align="center"',
'Quantidade' => 'align="center"',
'TMA' => 'align="center"',
'Tempo' => 'align="center"'
);
$dadosField = array(
'origem' => 'align="center"',
'qtde' => 'align="center"',
'tma' => 'align="center"',
'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.
*/
$dataRel[] = '<table width="70%" cellpadding="2" class="grid">';
/*
* Monta a linha de cabecalio.
*/
$linha = '<tr>';
$linha .= "<th align=\"center\" colspan=\"5\">Rechamadas</th>";
$linha .= "</tr>";
$dataRel[] = $linha;
/*
* Verifica se retornou dados
*/
if (!IsPostBack() || !count($this->GetData()[0])) {
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s<td></tr></table>", count(1) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$this->___dataRel[] = $dataRel; $this->___dataRel[] = $dataRel;
return;
} }
protected function ___PreparaHtml() { $linhaC = "<tr>";
foreach ($dadosCabecalio as $key => $value) {
$linhaC .= sprintf("<th %s>%s</th>", $value, $key);
}
$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['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
$linha = "<tr>";
foreach ($dadosField as $key => $value) {
$linha .= sprintf("<td %s>%s</td>", $value, $row["$key"]);
}
$linha .= "</tr>";
$dataRel[] = $linha;
} }
protected function ___PreparaPdf() { $this->___dataRel[] = $dataRel;
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"]; }
$dadosCabecalio = array( protected function ___PreparaHtml() {
'Origem' => 'C',
'Quantidade' => 'C', }
'TMA' => 'C',
'Tempo' => 'C' protected function ___PreparaPdf() {
);
$dadosField = array( list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
'origem' => 'C', $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
'qtde' => 'C',
'tma' => 'C', $dadosCabecalio = array(
'tempo_atende' => 'C' 'Origem' => 'C',
); 'Quantidade' => 'C',
'TMA' => 'C',
$x = 0; 'Tempo' => 'C'
$dados = $this->GetData()[0]; );
/* $dadosField = array(
* Linhas de dados. 'origem' => 'C',
*/ 'qtde' => 'C',
foreach ($dados as $row) { 'tma' => 'C',
$dados[$x]['tma'] = SecondToStrTime(round($row['tempo_atende']/$row['qtde'])); 'tempo_atende' => 'C'
$dados[$x]['tempo_atende'] = SecondToStrTime($row['tempo_atende']); );
$x++;
} if ($mostraColunaServicos) {
$widthHeader = array(45, 45, 45, 45); $dadosCabecalio = array_merge(['Serviço' => 'C'], $dadosCabecalio);
$table = array($dadosCabecalio, $dadosField, $dados, $widthHeader, 0, 0); $dadosField = array_merge(['serv_id' => 'C'], $dadosField);
$this->___dataRel = array($table);
} }
public function ExecutaRelatorio() { $x = 0;
global $jsStartup, $jsJQuery, $smarty; $dados = $this->GetData()[0];
try { /*
/* * Linhas de dados.
* Use esta função para validar dados do formulário. */
*/ foreach ($dados as $row) {
$this->___ValidaForm(); $dados[$x]['tma'] = SecondToStrTime(round($row['tempo_atende'] / $row['qtde']));
$dados[$x]['tempo_atende'] = SecondToStrTime($row['tempo_atende']);
/* $x++;
* Recupera os dados do banco. }
*/
$this->___ConteudoRelatorio(); if ($mostraColunaServicos) {
$widthHeader = array(40, 45, 25, 35, 35);
/* } else {
* Imprime relatório de acordo com a media passada. $widthHeader = array(45, 45, 45, 45);
*/ }
$conteudoRelatorio = $this->___ImprimeRelatorio(); $table = array($dadosCabecalio, $dadosField, $dados, $widthHeader, 0, 0);
} catch (Exception $exc) { $this->___dataRel = array($table);
$this->SetMsg($exc->getMessage()); }
$jsStartup[] = sprintf("alert('%s');", $this->GetMsg());
$this->___GravaLog();
}
public function ExecutaRelatorio() {
global $jsStartup, $jsJQuery, $smarty;
try {
/* /*
* Inclua os scripts necessários aqui. * Use esta função para validar dados do formulário.
*/ */
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) "; $this->___ValidaForm();
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
$smarty->assign('filtros', $this->___FiltrosRelatorio()); /*
$smarty->assign('conteudo', $conteudoRelatorio); * Recupera os dados do banco.
$smarty->assign('msg', $this->GetMsg()); */
GetTemplate($smarty, 'relatoriosGrid.tpl'); $this->___ConteudoRelatorio();
/*
* Imprime relatório de acordo com a media passada.
*/
$conteudoRelatorio = $this->___ImprimeRelatorio();
} catch (Exception $exc) {
$this->SetMsg($exc->getMessage());
$jsStartup[] = sprintf("alert('%s');", $this->GetMsg());
$this->___GravaLog();
} }
/*
* Inclua os scripts necessários aqui.
*/
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) ";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
$smarty->assign('filtros', $this->___FiltrosRelatorio());
$smarty->assign('conteudo', $conteudoRelatorio);
$smarty->assign('msg', $this->GetMsg());
GetTemplate($smarty, 'relatoriosGrid.tpl');
} }
$relRechamadas = new RelRechamadas($idProg, $dbcon, 1); }
$relRechamadas->ExecutaRelatorio();
$relRechamadas = new RelRechamadas($idProg, $dbcon, 1);
$relRechamadas->ExecutaRelatorio();
?> ?>

763
relatorios/callcenter/geral/relClassificacao.php

@ -1,408 +1,525 @@
<?php <?php
include_once 'util/relatoriosBase.php'; include_once 'util/relatoriosBase.php';
class RelClassificacao extends Relatorios { class RelClassificacao extends Relatorios {
public function __construct($idProg, $dbcon, $incDac) { private $___servico;
parent::__construct($idProg, $dbcon, $incDac);
$this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0; 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() {
if ($this->___media != MEDIA_PRINT_GRID) {
/*
* Recupera os filtros da sessão do usuário.
*/
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
function ___FiltrosRelatorio() { if ($this->___media == MEDIA_PRINT_HTML) {
if ($this->___media != MEDIA_PRINT_GRID) { $fila = $this->GetIncDac() ? 'Fila: ' . GetDacDesc($this->GetDbCon(), $this->GetIdProg() . ' ') : '';
/* return sprintf("%sData Inicial: %s Data Final: %s Tipo: %s", $fila, $this->___dataIni, $this->___dataFim, ($this->___tipoRelatorio ? 'Analítico' : 'Sintético'));
* Recupera os filtros da sessão do usuário.
*/
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
if ($this->___media == MEDIA_PRINT_HTML) {
$fila = $this->GetIncDac() ? 'Fila: ' . GetDacDesc($this->GetDbCon(), $this->GetIdProg() . ' ') : '';
return sprintf("%sData Inicial: %s Data Final: %s Tipo: %s", $fila, $this->___dataIni, $this->___dataFim, ($this->___tipoRelatorio ? 'Analítico' : 'Sintético'));
}
$fltCsv = array();
if ($this->GetIncDac()) {
$fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac);
}
$fltCsv[] = "Data Inicial:" . $this->___dataIni;
$fltCsv[] = "Data Final:" . $this->___dataFim;
$fltCsv[] = "Data Emissao:" . date('d/m/Y H:i:s');
$fltCsv[] = "Emitido Por:" . GetLogin();
return $fltCsv;
} }
$fltCsv = array();
if ($this->GetIncDac()) { if ($this->GetIncDac()) {
$dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1); $fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac);
} }
$fltCsv[] = "Data Inicial:" . $this->___dataIni;
$fltCsv[] = "Data Final:" . $this->___dataFim;
$fltCsv[] = "Data Emissao:" . date('d/m/Y H:i:s');
$fltCsv[] = "Emitido Por:" . GetLogin();
return $fltCsv;
}
$lkPrint = ""; if ($this->GetIncDac()) {
if ($this->___dataCount) { $dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1);
$prt = '<a href="index.php?idProg=%s&media=%s&tipoRelatorio=%s"><img src="imgSite/%s" alt="Clique aqui para imprimir!" width="24" height="24" border="0"></a>'; }
$prtHtml = "<a href=\"javaScript:NovaJanela('index.php?idProg=%s&media=%s&tipoRelatorio=%s', '%s', '720', '700', 'scrollbars=YES');\"><img src=\"imgSite/%s\" alt=\"Clique aqui para imprimir!\" width=\"24\" height=\"24\" border=\"0\"></a>";
$lkPrint .= sprintf($prtHtml, $this->GetidProg(), MEDIA_PRINT_HTML, $this->___tipoRelatorio, substr(LimpaString(GetDispProgSel($this->GetIdProg())), 0, 20), 'print.gif');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_EXCEL, $this->___tipoRelatorio, 'prt-xls.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_PDF, $this->___tipoRelatorio, 'prt-pdf.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, $this->___tipoRelatorio, 'prt-csv.png');
}
$tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"'; $lkPrint = "";
if ($this->___dataCount) {
$prt = '<a href="index.php?idProg=%s&media=%s&tipoRelatorio=%s"><img src="imgSite/%s" alt="Clique aqui para imprimir!" width="24" height="24" border="0"></a>';
$prtHtml = "<a href=\"javaScript:NovaJanela('index.php?idProg=%s&media=%s&tipoRelatorio=%s', '%s', '720', '700', 'scrollbars=YES');\"><img src=\"imgSite/%s\" alt=\"Clique aqui para imprimir!\" width=\"24\" height=\"24\" border=\"0\"></a>";
$lkPrint .= sprintf($prtHtml, $this->GetidProg(), MEDIA_PRINT_HTML, $this->___tipoRelatorio, substr(LimpaString(GetDispProgSel($this->GetIdProg())), 0, 20), 'print.gif');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_EXCEL, $this->___tipoRelatorio, 'prt-xls.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_PDF, $this->___tipoRelatorio, 'prt-pdf.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, $this->___tipoRelatorio, 'prt-csv.png');
}
$tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"';
/*
* Personalise esta função se necessitar de outras operações de filtro.
*/
$filtro = '<table border="0" cellspacing="1" cellpadding="1">';
/*
* Rotulos.
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= '<td>Fila</td>' : '';
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
$filtro .= '</tr>';
/* /*
* Valores. * Personalise esta função se necessitar de outras operações de filtro.
*/ */
$filtro .= '<tr>'; $filtro = '<table border="0" cellspacing="1" cellpadding="1">';
$this->GetIncDac() ? $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>'; * Rotulos.
$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>'; $filtro .= '<tr>';
$filtro .= '<td>%s</td>'; $this->GetIncDac() ? $filtro .= '<td>Fila</td>' : '';
$filtro .= '</tr>';
$filtro .= '</table>';
/* if (GetUsoServico()) {
* Guarda os filtros passados para recuperar na emissão dos relatórios para impressão. $filtro .= '<td>Serviço </td>';
*/ }
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio); $filtro .= '<td>Data Inicial</td>';
return sprintf($filtro, $this->___dataIni, $this->___dataFim, $lkPrint); $filtro .= '<td>Data Final </td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
$filtro .= '</tr>';
/*
* Valores.
*/
$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>';
$filtro .= '<td>%s</td>';
$filtro .= '</tr>';
$filtro .= '</table>';
/*
* Guarda os filtros passados para recuperar na emissão dos relatórios para impressão.
*/
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio);
return sprintf($filtro, $this->___dataIni, $this->___dataFim, $lkPrint);
}
protected function ___GetDadosDb() { protected function ___GetDadosDb() {
$dataIni = FormatDtMssql($this->___dataIni); $dataIni = FormatDtMssql($this->___dataIni);
$dataFim = FormatDtMssql($this->___dataFim); $dataFim = FormatDtMssql($this->___dataFim);
$dac = $this->___dac; $dac = $this->___dac;
$srv = $this->___servico;
$query = sprintf("SELECT clas_descricao, clit_descricao, count(*) as qtde, count(distinct e.uid2) as chmd $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
FROM pbx_classifica_reg a
INNER JOIN pbx_classifica_atendimento b ON b.clas_id = a.clas_id $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";
INNER JOIN pbx_classifica_item c ON c.clit_id = a.clit_id $query = "\nFROM pbx_classifica_reg a
INNER JOIN pbx_bilhetes d ON d.uniqueid = a.id_bilhetes INNER JOIN pbx_classifica_atendimento b ON b.clas_id = a.clas_id
INNER JOIN pbx_eventos_dacs e ON e.uid2 = d.uniqueid INNER JOIN pbx_classifica_item c ON c.clit_id = a.clit_id
INNER JOIN pbx_usuarios f ON f.matricula = substring(e.agente, 7, 4) INNER JOIN pbx_bilhetes d ON d.uniqueid = a.id_bilhetes
WHERE d.data_bilhete >= '%s' AND d.data_bilhete <= '%s' INNER JOIN pbx_eventos_dacs e ON e.uid2 = d.uniqueid
AND d.lastapp <> 'Transferred Call' INNER JOIN pbx_usuarios f ON f.matricula = substring(e.agente, 7, 4)";
AND e.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS') if (GetUsoServico()) {
AND a.id_dac = %s $query .= "\nleft join pbx_servicos_registra s on s.uniqueid = d.uniqueid";
GROUP BY clas_descricao, clit_descricao", $dataIni, $dataFim, $dac);
$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);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
$subResult = $this->___GetQuery($subQuery);
$subRow = pg_fetch_assoc($subResult ? $subResult : array());
$this->SetData($subRow);
} }
protected function ___PreparaCsv() { $query .= "\nWHERE d.data_bilhete >= '%s' AND d.data_bilhete <= '%s'
$dataRel = array(); AND d.lastapp <> 'Transferred Call'
$filtro = $this->___FiltrosRelatorio(); AND e.evento in('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER', 'COMPLETAAGENT','COMPLETACALLER', 'TRANSFERORIG','BUSYS','NOANSWERS')
AND a.id_dac = %s";
/* if (GetUsoServico() && $srv) {
* Inicia o relatório. $query .= "\nand s.serv_id = '{$srv}'";
*/ }
$dataRel[] = GenerateCsvFromArray($filtro);
$dadosCabecalio = array('Classificacao', 'Servico', 'Porcentagem %', 'Quantidade');
$dadosField = array('clas_descricao', 'clit_descricao', 'chmd', 'qtde');
/* $queryGroup .= $mostraColunaServicos ? "\nGROUP BY clas_descricao, clit_descricao, s.serv_id" : "\nGROUP BY clas_descricao, clit_descricao\n";
* Monta a linha de cabecalio. $queryOrder .= $mostraColunaServicos ? "\norder by s.serv_id, clas_descricao, clit_descricao" : "\norder by clas_descricao, clit_descricao\n";
*/
$dataRel[] = GenerateCsvFromArray($dadosCabecalio);
$somaChmTotal = 0; $query = sprintf($query, $dataIni, $dataFim, $dac);
$queryDados = ($queryCabecalio . $query . $queryGroup . $queryOrder);
foreach ($this->GetData()[0] as $row) { $queryCabecalio = "\nSELECT count(distinct d.uniqueid) as chmd ";
$somaChmTotal += $row['chmd'];
}
$somaReg = 0; $result = $this->___GetQuery($queryDados);
$row = pg_fetch_all($result);
/* $this->SetData($row ? $row : array());
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaReg += $row['qtde'];
$row['clit_descricao'] = RemoveAcentos($row['clit_descricao']); $subResult = $this->___GetQuery($queryCabecalio . $query);
$row['chmd'] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%'; $subRow = pg_fetch_assoc($subResult ? $subResult : array());
$this->SetData($subRow);
}
// Formata linha de dados. protected function ___PreparaCsv() {
$linha = array(); $dataRel = array();
foreach ($dadosField as $value) { $filtro = $this->___FiltrosRelatorio();
$linha[] = $row["$value"]; $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
}
$dataRel[] = GenerateCsvFromArray($linha); /*
} * Inicia o relatório.
$dataRel[] = GenerateCsvFromArray(array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', 'Registros: ' . $somaReg)); */
$dataRel[] = GenerateCsvFromArray($filtro);
$this->___dataRel[] = $dataRel; $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);
} }
protected function ___PreparaExcel() { /*
$dataRel = array(); * Monta a linha de cabecalio.
$filtro = $this->___FiltrosRelatorio(); */
$dataRel[] = GenerateCsvFromArray($dadosCabecalio);
/* $somaChmTotal = 0;
* Inicia o relatório.
*/
/* foreach ($this->GetData()[0] as $row) {
* Cria os filtros $somaChmTotal += $row['chmd'];
*/ }
$linha = array('LABEL');
foreach ($filtro as $values) {
list($label, $value) = explode(":", $values);
$linha[] = $label;
}
$dataRel[] = $linha;
$linha = array('DADOS'); $somaReg = 0;
foreach ($filtro as $values) {
list($label, $value) = explode(":", $values);
$linha[] = $value;
}
$dataRel[] = $linha; /*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaReg += $row['qtde'];
$dadosCabecalio = array('Classificacao', 'Servico', 'Porcentagem %', 'Quantidade'); $row['clit_descricao'] = RemoveAcentos($row['clit_descricao']);
$dadosField = array('clas_descricao', 'clit_descricao', 'chmd', 'qtde'); $row['chmd'] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
/* // Formata linha de dados.
* Monta a linha de cabecalio. $linha = array();
*/ foreach ($dadosField as $value) {
$linha = array('LABEL'); $linha[] = $row["$value"];
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
} }
$dataRel[] = $linha;
$somaChmTotal = 0; $dataRel[] = GenerateCsvFromArray($linha);
}
$dataRel[] = GenerateCsvFromArray(array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', 'Registros: ' . $somaReg));
foreach ($this->GetData()[0] as $row) { $this->___dataRel[] = $dataRel;
$somaChmTotal += $row['chmd']; }
}
$somaReg = 0; protected function ___PreparaExcel() {
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
/*
* Inicia o relatório.
*/
/*
* Cria os filtros
*/
$linha = array('LABEL');
foreach ($filtro as $values) {
list($label, $value) = explode(":", $values);
$linha[] = $label;
}
$dataRel[] = $linha;
/* $linha = array('DADOS');
* Linhas de dados. foreach ($filtro as $values) {
*/ list($label, $value) = explode(":", $values);
foreach ($this->GetData()[0] as $row) { $linha[] = $value;
$somaReg += $row['qtde']; }
$row['clit_descricao'] = RemoveAcentos($row['clit_descricao']); $dataRel[] = $linha;
$row['chmd'] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
// Formata linha de dados. $dadosCabecalio = array('Classificacao', 'Item', 'Porcentagem %', 'Quantidade');
$linha = array('DADOS'); $dadosField = array('clas_descricao', 'clit_descricao', 'chmd', 'qtde');
foreach ($dadosField as $key) {
$linha[] = $row["$key"];
}
$dataRel[] = $linha; if ($mostraColunaServicos) {
} $dadosCabecalio = array_merge(['Servico'], $dadosCabecalio);
$dadosField = array_merge(['serv_id'], $dadosField);
}
/*
* Monta a linha de cabecalio.
*/
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
}
$dataRel[] = $linha;
$dataRel[] = array('LABEL', 'Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', 'Registros: ' . $somaReg); $somaChmTotal = 0;
$this->___dataRel[] = $dataRel; foreach ($this->GetData()[0] as $row) {
$somaChmTotal += $row['chmd'];
} }
protected function ___PreparaGrid() { $somaReg = 0;
$dataRel = array();
$dadosCabecalio = array(
'Classificação' => 'align="left"',
'Serviço' => 'align="left"',
'Porcentagem %' => 'align="right"',
'Quantidade' => 'align="right"'
);
$dadosField = array(
'clas_descricao' => 'align="left"',
'clit_descricao' => 'align="left"',
'chmd' => 'align="right"',
'qtde' => 'align="right"'
);
/*
* Inicia o relatório.
*/
$dataRel[] = '<table width="70%" cellpadding="2" class="grid">';
/* /*
* Monta a linha de cabecalio. * Linhas de dados.
*/ */
$linha = '<tr>'; foreach ($this->GetData()[0] as $row) {
foreach ($dadosCabecalio as $key => $value) { $somaReg += $row['qtde'];
$linha .= sprintf("<th %s>%s</th>", $value, $key);
$row['clit_descricao'] = RemoveAcentos($row['clit_descricao']);
$row['chmd'] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
// Formata linha de dados.
$linha = array('DADOS');
foreach ($dadosField as $key) {
$linha[] = $row["$key"];
} }
$linha .= "</tr>";
$dataRel[] = $linha; $dataRel[] = $linha;
}
/* $dataRel[] = array('LABEL', 'Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', 'Registros: ' . $somaReg);
* Verifica se retornou dados
*/ $this->___dataRel[] = $dataRel;
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!'));
$this->___dataRel[] = $dataRel; protected function ___PreparaGrid() {
return;
$dataRel = array();
$mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$dadosCabecalio = array(
'Classificação' => 'align="left"',
'Item' => 'align="left"',
'Porcentagem %' => 'align="right"',
'Quantidade' => 'align="right"'
);
$dadosField = array(
'clas_descricao' => 'align="left"',
'clit_descricao' => 'align="left"',
'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.
*/
$dataRel[] = '<table width="70%" cellpadding="2" class="grid">';
/*
* Monta a linha de cabecalio.
*/
$linha = '<tr>';
foreach ($dadosCabecalio as $key => $value) {
$linha .= sprintf("<th %s>%s</th>", $value, $key);
}
$linha .= "</tr>";
$dataRel[] = $linha;
/*
* 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!'));
$this->___dataRel[] = $dataRel;
return;
}
$somaChmTotal = 0;
foreach ($this->GetData()[0] as $row) {
$somaChmTotal += $row['chmd'];
}
$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'];
};
$somaChmTotal = 0; /*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
foreach ($this->GetData()[0] as $row) { if ($mostraColunaServicos) {
$somaChmTotal += $row['chmd']; $agrupaServico($row, $somaChmTotal);
} }
$somaReg += $row['qtde'];
$row['chmd'] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
$somaReg = 0; // Formata linha de dados.
/* $linha = "<tr>";
* Linhas de dados. foreach ($dadosField as $key => $value) {
*/ $linha .= sprintf("<td %s>%s</td>", $value, $row["$key"]);
foreach ($this->GetData()[0] as $row) {
$somaReg += $row['qtde'];
$row['chmd'] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
// Formata linha de dados.
$linha = "<tr>";
foreach ($dadosField as $key => $value) {
$linha .= sprintf("<td %s>%s</td>", $value, $row["$key"]);
}
$linha .= "</tr>";
$dataRel[] = $linha;
} }
/* $linha .= "</tr>";
* Linha de totalizacao. $dataRel[] = $linha;
*/ }
$linha = '<tr><th colspan="3" align="left">Total Chamadas: %s</th><th align="right">Registros: %s</th></tr>';
$dataRel[] = sprintf($linha, $this->GetData()[1]['chmd'], $somaReg);
/* $colspan = 3;
* Fecha relatorio. if ($mostraColunaServicos) {
*/ $agrupaServico(false, $somaChmTotal);
$dataRel[] = '</table>'; $colspan = 4;
$this->___dataRel[] = $dataRel;
} }
protected function ___PreparaHtml() { /*
* Linha de totalizacao.
*/
$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);
/*
* Fecha relatorio.
*/
$dataRel[] = '</table>';
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaHtml() {
}
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
$dadosCabecalio = array(
'Classificação' => 'C',
'Item' => 'C',
'Porcentagem %' => 'C',
'Quantidade' => 'C'
);
$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);
} }
protected function ___PreparaPdf() { $somaChmTotal = 0;
list($this->___dac, $this->___dataIni, $this->___dataFim) = $_SESSION["SSstorageFiltros"];
/** foreach ($this->GetData()[0] as $row) {
* TABELA DADOS PRINCIPAIS $somaChmTotal += $row['chmd'];
*/ }
//HEADER DA TABELA DO PDF -> DADOS EM ARRAY
$header = array( $somaReg = 0;
'Classificação' => 'C', $dados = array();
'Serviço' => 'C', $somaServico = 0;
'Porcentagem %' => 'C', $srv = '';
'Quantidade' => 'C' $oldSrv = '';
); $dadosTable = [];
$dataHeader = array(
'clas_descricao' => 'C', $agrupaServico = function($row, $somaChmTotal) use(&$somaServico, &$dadosTable, &$srv, &$oldSrv) {
'clit_descricao' => 'C',
'chmd' => 'C', $style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"';
'qtde' => 'C' $srv = $row["serv_id"];
); if (!$oldSrv) {
$oldSrv = $srv;
$somaChmTotal = 0; }
if ((($srv != $oldSrv)) || !$row) {
foreach ($this->GetData()[0] as $row) { $perc = !$somaChmTotal ? 0 : (($somaServico / $somaChmTotal) * 100.0);
$somaChmTotal += $row['chmd']; $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;
} }
$somaReg = 0; $somaServico += $row['qtde'];
$dados = array(); };
$x = 0;
foreach ($this->GetData()[0] as $row) { foreach ($this->GetData()[0] as $row) {
$somaReg += $row['qtde'];
$dados[$x]["clas_descricao"] = $row["clas_descricao"]; if ($mostraColunaServicos) {
$dados[$x]["clit_descricao"] = $row["clit_descricao"]; $agrupaServico($row, $somaChmTotal);
$dados[$x]["chmd"] = round(!$somaChmTotal ? 0 : ($row['qtde'] * 100) / $somaChmTotal) . '%';
$dados[$x]["qtde"] = $row['qtde'];
$x++;
} }
$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); $widthHeader = array(47, 47, 47, 47);
$totalizador = array('Total Chamadas: ' . $this->GetData()[1]['chmd'], '', '', 'Registros: ' . $somaReg); $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);
$this->___dataRel = array($table1);
} }
//Monta o array para passar para o prepara; Necessário passar 6 parametros
$table1 = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totalizador, 0);
public function ExecutaRelatorio() { $this->___dataRel = array($table1);
global $jsStartup, $jsJQuery, $smarty; }
try {
/* public function ExecutaRelatorio() {
* Use esta função para validar dados do formulário. global $jsStartup, $jsJQuery, $smarty;
*/ try {
$this->___ValidaForm(); /*
* Use esta função para validar dados do formulário.
/* */
* Recupera os dados do banco. $this->___ValidaForm();
*/
$this->___ConteudoRelatorio();
/*
* Imprime relatório de acordo com a media passada.
*/
$conteudoRelatorio = $this->___ImprimeRelatorio();
} catch (Exception $exc) {
$this->SetMsg($exc->getMessage());
$jsStartup[] = sprintf("alert('%s');", $this->GetMsg());
$this->___GravaLog();
}
/* /*
* Inclua os scripts necessários aqui. * Recupera os dados do banco.
*/ */
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) "; $this->___ConteudoRelatorio();
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
$smarty->assign('filtros', $this->___FiltrosRelatorio()); /*
$smarty->assign('conteudo', $conteudoRelatorio); * Imprime relatório de acordo com a media passada.
$smarty->assign('msg', $this->GetMsg()); */
GetTemplate($smarty, 'relatoriosGrid.tpl'); $conteudoRelatorio = $this->___ImprimeRelatorio();
} catch (Exception $exc) {
$this->SetMsg($exc->getMessage());
$jsStartup[] = sprintf("alert('%s');", $this->GetMsg());
$this->___GravaLog();
} }
/*
* Inclua os scripts necessários aqui.
*/
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) ";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
$smarty->assign('filtros', $this->___FiltrosRelatorio());
$smarty->assign('conteudo', $conteudoRelatorio);
$smarty->assign('msg', $this->GetMsg());
GetTemplate($smarty, 'relatoriosGrid.tpl');
} }
$relClassficacao = new RelClassificacao($idProg, $dbcon, 1); }
$relClassficacao->ExecutaRelatorio();
$relClassficacao = new RelClassificacao($idProg, $dbcon, 1);
/* $relClassficacao->ExecutaRelatorio();
/*
* ************************************************************************* * *************************************************************************
* BACKUP DA QUERY ANTERIOR * BACKUP DA QUERY ANTERIOR

1029
relatorios/callcenter/geral/relClassificacaoDetalhes.php

File diff suppressed because it is too large Load Diff

755
relatorios/callcenter/geral/relClassificacaoMensal.php

@ -1,441 +1,474 @@
<?php <?php
/* ************************************************************************* /* * ************************************************************************
* *
* RELATÓRIO CLASSIFICAÇÃO MENSAL * RELATÓRIO CLASSIFICAÇÃO MENSAL
* Autor * Autor
* Lucas Awade * Lucas Awade
* *
* ************************************************************************* * *************************************************************************
* Definições do Projeto * Definições do Projeto
* Nome: RelClassificacaoMensal * Nome: RelClassificacaoMensal
* Data início: 10/08/2018 * Data início: 10/08/2018
* Equipe: Amarildo Pereira * Equipe: Amarildo Pereira
* Descrição: Gera relatório de classificação realizadas no mês e cadastrada * Descrição: Gera relatório de classificação realizadas no mês e cadastrada
* no banco de dados. As impressões é feito de acordo com o retorno com a * no banco de dados. As impressões é feito de acordo com o retorno com a
* query do banco de dados que possui na pesquisa o mês e ano e a fila(DAC); * query do banco de dados que possui na pesquisa o mês e ano e a fila(DAC);
* *
* Pré-requisito: As querys de banco de dados tem que retornar com ordenação * Pré-requisito: As querys de banco de dados tem que retornar com ordenação
* de acordo com os classificações; * de acordo com os classificações;
* *
* OBS: Atenção ao realizar manutenção nos itens de impressão pois os dados * OBS: Atenção ao realizar manutenção nos itens de impressão pois os dados
* apresentados são estruturados. * apresentados são estruturados.
* *
* ************************************************************************* * *************************************************************************
* Copyright (c) 2018, Simples IP * 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 $___ano;
private $___mes; private $___mes;
private $___servico;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac); public function __construct($idProg, $dbcon, $incDac) {
$this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0; parent::__construct($idProg, $dbcon, $incDac);
$this->___mes = isset($_POST['listaMes']) ? $_POST['listaMes'] : date('m'); $this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0;
$this->___ano = isset($_POST['listaAno']) ? $_POST['listaAno'] : 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() { public function ___ValidaForm() {
if (!IsPostBack()) if (!IsPostBack())
return; return;
if ($this->GetIncDac() && !StrToIntDef($this->___dac)) { if ($this->GetIncDac() && !StrToIntDef($this->___dac)) {
GeraExcept('Informe uma Fila!'); GeraExcept('Informe uma Fila!');
}
} }
}
function ___FiltrosRelatorio() { function ___FiltrosRelatorio() {
if ($this->___media != MEDIA_PRINT_GRID) { if ($this->___media != MEDIA_PRINT_GRID) {
/* /*
* Recupera os filtros da sessão do usuário. * Recupera os filtros da sessão do usuário.
*/ */
list($this->___dac, $this->___ano, $this->___mes, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"]; list($this->___dac, $this->___ano, $this->___mes, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
if ($this->___media == MEDIA_PRINT_HTML) {
$fila = $this->GetIncDac() ? 'Fila: ' . GetDacDesc($this->GetDbCon(), $this->GetIdProg() . ' ') : '';
return sprintf("%sData Inicial: %s Data Final: %s Tipo: %s", $fila, $this->___dataIni, $this->___dataFim, ($this->___tipoRelatorio ? 'Analítico' : 'Sintético'));
}
$fltCsv = array(); if ($this->___media == MEDIA_PRINT_HTML) {
if ($this->GetIncDac()) { $fila = $this->GetIncDac() ? 'Fila: ' . GetDacDesc($this->GetDbCon(), $this->GetIdProg() . ' ') : '';
$fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac); return sprintf("%sData Inicial: %s Data Final: %s Tipo: %s", $fila, $this->___dataIni, $this->___dataFim, ($this->___tipoRelatorio ? 'Analítico' : 'Sintético'));
}
$fltCsv[] = "Ano:" . $this->___ano;
$fltCsv[] = "Mes:" . $this->___mes;
$fltCsv[] = "Data Emissao:" . date('d/m/Y H:i:s');
$fltCsv[] = "Emitido Por:" . GetLogin();
return $fltCsv;
} }
$fltCsv = array();
if ($this->GetIncDac()) { if ($this->GetIncDac()) {
$dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1); $fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac);
} }
$fltCsv[] = "Ano:" . $this->___ano;
$fltCsv[] = "Mes:" . $this->___mes;
$fltCsv[] = "Data Emissao:" . date('d/m/Y H:i:s');
$fltCsv[] = "Emitido Por:" . GetLogin();
return $fltCsv;
}
$lkPrint = ""; if ($this->GetIncDac()) {
if ($this->___dataCount) { $dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1);
$prt = '<a href="index.php?idProg=%s&media=%s&tipoRelatorio=%s"><img src="imgSite/%s" alt="Clique aqui para imprimir!" width="24" height="24" border="0"></a>'; }
$prtHtml = "<a href=\"javaScript:NovaJanela('index.php?idProg=%s&media=%s&tipoRelatorio=%s', '%s', '720', '700', 'scrollbars=YES');\"><img src=\"imgSite/%s\" alt=\"Clique aqui para imprimir!\" width=\"24\" height=\"24\" border=\"0\"></a>";
$lkPrint .= sprintf($prtHtml, $this->GetidProg(), MEDIA_PRINT_HTML, $this->___tipoRelatorio, substr(LimpaString(GetDispProgSel($this->GetIdProg())), 0, 20), 'print.gif');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_EXCEL, $this->___tipoRelatorio, 'prt-xls.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_PDF, $this->___tipoRelatorio, 'prt-pdf.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, $this->___tipoRelatorio, 'prt-csv.png');
}
$tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"'; $lkPrint = "";
if ($this->___dataCount) {
$prt = '<a href="index.php?idProg=%s&media=%s&tipoRelatorio=%s"><img src="imgSite/%s" alt="Clique aqui para imprimir!" width="24" height="24" border="0"></a>';
$prtHtml = "<a href=\"javaScript:NovaJanela('index.php?idProg=%s&media=%s&tipoRelatorio=%s', '%s', '720', '700', 'scrollbars=YES');\"><img src=\"imgSite/%s\" alt=\"Clique aqui para imprimir!\" width=\"24\" height=\"24\" border=\"0\"></a>";
$lkPrint .= sprintf($prtHtml, $this->GetidProg(), MEDIA_PRINT_HTML, $this->___tipoRelatorio, substr(LimpaString(GetDispProgSel($this->GetIdProg())), 0, 20), 'print.gif');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_EXCEL, $this->___tipoRelatorio, 'prt-xls.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_PDF, $this->___tipoRelatorio, 'prt-pdf.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, $this->___tipoRelatorio, 'prt-csv.png');
}
$tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"';
/*
* Personalise esta função se necessitar de outras operações de filtro.
*/
$filtro = '<table border="0" cellspacing="1" cellpadding="1">';
/*
* Rotulos.
*/
$filtro .= '<tr>';
$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>';
$filtro .= '</tr>';
/*
* Valores.
*/
$filtro .= '<tr>';
$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>';
$filtro .= '<td>%s</td>';
$filtro .= '</tr>';
$filtro .= '</table>';
/*
* Guarda os filtros passados para recuperar na emissão dos relatórios para impressão.
*/
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___ano, $this->___mes, $this->___tipoRelatorio);
return sprintf($filtro, $lkPrint);
}
/* protected function ___GetDadosDb() {
* Personalise esta função se necessitar de outras operações de filtro.
*/
$filtro = '<table border="0" cellspacing="1" cellpadding="1">';
/*
* Rotulos.
*/
$filtro .= '<tr>';
$this->GetIncDac() ? $filtro .= '<td>Fila</td>' : '';
$filtro .= '<td>Mês</td>';
$filtro .= '<td>Ano</td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
$filtro .= '</tr>';
/* $ano = $this->___ano;
* Valores. $mes = $this->___mes;
*/ $dac = $this->___dac;
$filtro .= '<tr>'; $srv = $this->___servico;
$this->GetIncDac() ? $filtro .= sprintf('<td>%s</td>', $dacs) : ''; $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA;
$filtro .= sprintf("<td>%s</td>", GetMes($this->___mes, '', 1));
$filtro .= sprintf('<td>%s</td>', GetAno($this->___ano, 1)); $query = $mostraColunaServicos ? "select clas_descricao, clit_descricao," : "select clas_descricao, clit_descricao,";
$filtro .= '<td><input type="submit" name="btConsulta" id="btConsulta" value="Consultar"></td>'; $query .= " (select count(*) from pbx_classifica_reg d
$filtro .= '<td>%s</td>'; inner join pbx_bilhetes e on e.uniqueid = d.id_bilhetes
$filtro .= '</tr>'; inner join pbx_eventos_dacs f on f.uid2 = e.uniqueid ";
$filtro .= '</table>'; 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'
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.id_dac";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
}
/* $query .= " ) as qtde,
* Guarda os filtros passados para recuperar na emissão dos relatórios para impressão.
*/ (select count(distinct d.id_bilhetes) from pbx_classifica_reg d
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___ano, $this->___mes, $this->___tipoRelatorio); inner join pbx_bilhetes e on e.uniqueid = d.id_bilhetes
return sprintf($filtro, $lkPrint); 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.id_dac";
if (GetUsoServico() && $srv) {
$query .= "\nand s.serv_id = '{$srv}'";
} }
protected function ___GetDadosDb() { $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 dac on dac.clas_id = a.clas_id
where dac.id_dac = '$dac'
order by clas_descricao, clit_descricao";
$ano = $this->___ano; $result = $this->___GetQuery($query);
$mes = $this->___mes; $row = pg_fetch_all($result);
$dac = $this->___dac; $this->SetData($row ? $row : array());
}
$query = "select clas_descricao, clit_descricao, protected function ___PreparaCsv() {
(select count(*) from pbx_classifica_reg d $dataRel = array();
inner join pbx_bilhetes e on e.uniqueid = d.id_bilhetes $filtro = $this->___FiltrosRelatorio();
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
and d.clit_id = c.clit_id
and d.id_dac = '$dac') as qtde,
(select count(distinct d.id_bilhetes) from pbx_classifica_reg d /*
inner join pbx_bilhetes e on e.uniqueid = d.id_bilhetes * Inicia o relatório.
and e.lastapp <> 'Transferred Call' */
and date_part('year',e.data_bilhete) = '$ano' $dataRel[] = GenerateCsvFromArray($filtro);
and date_part('month',e.data_bilhete) = '$mes'
where d.clas_id = c.clas_id
and d.clit_id = c.clit_id
and d.id_dac = '$dac') 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'
order by clas_descricao, clit_descricao";
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
}
protected function ___PreparaCsv() { $ultClass = '';
$dataRel = array(); $somaReg = 0;
$filtro = $this->___FiltrosRelatorio();
foreach ($this->GetData()[0] as $row) {
$count++;
$row['clas_descricao'] = RemoveAcentos($row['clas_descricao']);
if ($count != 1) {
if ($ultClass != $row['clas_descricao']) {
$dataRel[] = GenerateCsvFromArray(array("Total [$ultClass]", $somaReg));
$dataRel[] = GenerateCsvFromArray(array('', ''));
unset($somaReg);
/*
* Inicia o relatório.
*/
$dataRel[] = GenerateCsvFromArray($filtro);
$ultClass = '';
$somaReg = 0;
foreach ($this->GetData()[0] as $row) {
$count++;
$row['clas_descricao'] = RemoveAcentos($row['clas_descricao']);
if ($count != 1) {
if ($ultClass != $row['clas_descricao']) {
$dataRel[] = GenerateCsvFromArray(array("Total [ $ultClass ]", $somaReg));
$dataRel[] = GenerateCsvFromArray(array('', ''));
unset($somaReg);
$dataRel[] = GenerateCsvFromArray(array($row['clas_descricao'], 'Classificacoes'));
}
} else {
$dataRel[] = GenerateCsvFromArray(array($row['clas_descricao'], 'Classificacoes')); $dataRel[] = GenerateCsvFromArray(array($row['clas_descricao'], 'Classificacoes'));
} }
} else {
$dataRel[] = GenerateCsvFromArray(array($row['clas_descricao'], 'Classificacoes'));
}
$somaReg += $row["qtde"]; $somaReg += $row["qtde"];
$row['clit_descricao'] = RemoveAcentos($row['clit_descricao']); $row['clit_descricao'] = RemoveAcentos($row['clit_descricao']);
// Formata linha de dados. // Formata linha de dados.
$dataRel[] = GenerateCsvFromArray(array($row['clit_descricao'],$row['qtde']));
$ultClass = $row['clas_descricao'];
if (count($this->GetData()[0]) == $count) { $dataRel[] = GenerateCsvFromArray(array($row['clit_descricao'], $row['qtde']));
$dataRel[] = GenerateCsvFromArray(array("Total [ $ultClass ]", $somaReg)); $ultClass = $row['clas_descricao'];
}
if (count($this->GetData()[0]) == $count) {
$dataRel[] = GenerateCsvFromArray(array("Total [$ultClass]", $somaReg));
} }
$this->___dataRel[] = $dataRel;
} }
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaExcel() { protected function ___PreparaExcel() {
$dataRel = array(); $dataRel = array();
$filtro = $this->___FiltrosRelatorio(); $filtro = $this->___FiltrosRelatorio();
/* /*
* Inicia o relatório. * Inicia o relatório.
*/ */
/*
* Cria os filtros
*/
$linha = array('LABEL');
foreach ($filtro as $values) {
list($label, $value) = explode(":", $values);
$linha[] = $label;
}
$dataRel[] = $linha;
/* $linha = array('DADOS');
* Cria os filtros foreach ($filtro as $values) {
*/ list($label, $value) = explode(":", $values);
$linha = array('LABEL'); $linha[] = $value;
foreach ($filtro as $values) { }
list($label, $value) = explode(":", $values); $dataRel[] = $linha;
$linha[] = $label;
}
$dataRel[] = $linha;
$linha = array('DADOS'); $dadosCabecalio = array('Descricao', 'Quantidade');
foreach ($filtro as $values) { $dadosField = array('clit_descricao', 'qtde');
list($label, $value) = explode(":", $values); $linha = array('LABEL');
$linha[] = $value; foreach ($dadosCabecalio as $value) {
} $linha[] = $value;
$dataRel[] = $linha; }
$dataRel[] = $linha;
$dadosCabecalio = array('Descricao', 'Quantidade');
$dadosField = array('clit_descricao', 'qtde');
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
}
$dataRel[] = $linha;
$ultClass = ''; $ultClass = '';
$somaReg = 0; $somaReg = 0;
/* /*
* Linhas de dados. * Linhas de dados.
*/ */
foreach ($this->GetData()[0] as $row) { foreach ($this->GetData()[0] as $row) {
$count++; $count++;
$row['clas_descricao'] = RemoveAcentos($row['clas_descricao']); $row['clas_descricao'] = RemoveAcentos($row['clas_descricao']);
if ($count != 1) { if ($count != 1) {
if ($ultClass != $row['clas_descricao']) { if ($ultClass != $row['clas_descricao']) {
$dataRel[] = array('LABEL', "Total [ $ultClass ]", $somaReg); $dataRel[] = array('LABEL', "Total [$ultClass]", $somaReg);
$dataRel[] = array('LABEL', '', ''); $dataRel[] = array('LABEL', '', '');
unset($somaReg); unset($somaReg);
$dataRel[] = array('LABEL', $row['clas_descricao'], 'Classificacoes');
}
} else {
$dataRel[] = array('LABEL', $row['clas_descricao'], 'Classificacoes'); $dataRel[] = array('LABEL', $row['clas_descricao'], 'Classificacoes');
} }
$somaReg += $row["qtde"]; } else {
$dataRel[] = array('LABEL', $row['clas_descricao'], 'Classificacoes');
$row['clit_descricao'] = RemoveAcentos($row['clit_descricao']); }
$somaReg += $row["qtde"];
$linha = array('DADOS'); $row['clit_descricao'] = RemoveAcentos($row['clit_descricao']);
foreach ($dadosField as $key) {
$linha[] = $row["$key"];
}
$dataRel[] = $linha;
$ultClass = $row['clas_descricao'];
if (count($this->GetData()[0]) == $count) { $linha = array('DADOS');
$dataRel[] = array('LABEL', "Total [ $ultClass ]", $somaReg); foreach ($dadosField as $key) {
} $linha[] = $row["$key"];
} }
$dataRel[] = $linha;
$ultClass = $row['clas_descricao'];
$this->___dataRel[] = $dataRel; if (count($this->GetData()[0]) == $count) {
$dataRel[] = array('LABEL', "Total [$ultClass]", $somaReg);
}
} }
protected function ___PreparaGrid() { $this->___dataRel[] = $dataRel;
$dataRel = array(); }
/* protected function ___PreparaGrid() {
* Inicia o relatório. $dataRel = array();
*/
$dataRel[] = '<table width="70%" cellpadding="2" class="grid">';
/* /*
* Monta a linha de cabecalio. * Inicia o relatório.
*/ */
$dataRel[] = '<table width="70%" cellpadding="2" class="grid">';
$linha = '<tr>'; /*
$linha .= sprintf("<th colspan=\"2\" %s>%s</th>", 'align="center"', 'Relatório Classificação Mensal'); * Monta a linha de cabecalio.
$linha .= "</tr>"; */
$dataRel[] = $linha;
/* $linha = '<tr>';
* Verifica se retornou dados $linha .= sprintf("<th colspan = \"2\" %s>%s</th>", 'align="center"', 'Relatório Classificação Mensal');
*/ $linha .= "</tr>";
if (!IsPostBack() || !count($this->GetData()[0])) { $dataRel[] = $linha;
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s<td></tr></table>", count(1) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$this->___dataRel[] = $dataRel;
return;
}
$somaReg = 0;
$ultClass = "";
$pass = 0;
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$count ++;
if ($ultClass != $row['clas_descricao']) { /*
if ($pass) { * Verifica se retornou dados
$linha = '<tr><th align="left">Total [ %s ]</th><th align="right">%s</th></tr>'; */
$dataRel[] = sprintf($linha, $ultClass, $somaReg); if (!IsPostBack() || !count($this->GetData()[0])) {
$dataRel[] = '<tr><td>&nbsp;</td></tr>'; $dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s<td></tr></table>", count(1) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
unset($somaReg); $this->___dataRel[] = $dataRel;
} return;
}
$linha = '<tr>';
$linha .= sprintf("<th %s>%s</th>", 'align="left"', $row['clas_descricao']);
$linha .= sprintf("<th %s>%s</th>", 'align="right"', 'Classificações');
$linha .= "</tr>";
$dataRel[] = $linha;
}
$ultClass = $row['clas_descricao'];
$somaReg += $row['qtde'];
// Formata linha de dados. $somaReg = 0;
$linha = "<tr>"; $ultClass = "";
$linha .= sprintf("<td aling=\"left\">%s</td>", $row['clit_descricao']); $pass = 0;
$linha .= sprintf("<td align=\"right\">%s</td>", $row['qtde']); /*
$linha .= "</tr>"; * Linhas de dados.
$dataRel[] = $linha; */
$pass = 1; foreach ($this->GetData()[0] as $row) {
if (count($this->GetData()[0]) == $count) { $count ++;
if ($ultClass != $row['clas_descricao']) {
if ($pass) {
$linha = '<tr><th align="left">Total [ %s ]</th><th align="right">%s</th></tr>'; $linha = '<tr><th align="left">Total [ %s ]</th><th align="right">%s</th></tr>';
$dataRel[] = sprintf($linha, $ultClass, $somaReg); $dataRel[] = sprintf($linha, $ultClass, $somaReg);
$dataRel[] = '<tr><td>&nbsp;</td></tr>';
unset($somaReg); unset($somaReg);
} }
$linha = '<tr>';
$linha .= sprintf("<th %s>%s</th>", 'align="left"', $row['clas_descricao']);
$linha .= sprintf("<th %s>%s</th>", 'align="right"', 'Classificações');
$linha .= "</tr>";
$dataRel[] = $linha;
} }
/*
* Fecha relatorio.
*/
$dataRel[] = '</table>';
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaHtml() { $ultClass = $row['clas_descricao'];
$somaReg += $row['qtde'];
// Formata linha de dados.
$linha = "<tr>";
$linha .= sprintf("<td aling=\"left\">%s</td>", $row['clit_descricao']);
$linha .= sprintf("<td align=\"right\">%s</td>", $row['qtde']);
$linha .= "</tr>";
$dataRel[] = $linha;
$pass = 1;
if (count($this->GetData()[0]) == $count) {
$linha = '<tr><th align="left">Total [ %s ]</th><th align="right">%s</th></tr>';
$dataRel[] = sprintf($linha, $ultClass, $somaReg);
unset($somaReg);
}
} }
/*
* Fecha relatorio.
*/
$dataRel[] = '</table>';
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaPdf() { protected function ___PreparaHtml() {
list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
}
$dados = array();
$tables = array(); protected function ___PreparaPdf() {
$header = null; list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"];
$x = 0; $dados = array();
$t = 0; $tables = array();
$header = null;
$ultClass = "";
$somaReg = 0; $x = 0;
$t = 0;
$dataHeader = array('clit_descricao' => 'C', 'qtde' => 'C');
$widthHeader = array(130, 60);
foreach ($this->GetData()[0] as $row) {
$count ++;
if ($x) {
if ($ultClass != $row['clas_descricao']) {
$totalizador = array("Total [ $ultClass ] ", $somaReg);
${'table' . $t} = array($header, $dataHeader, $dados, $widthHeader, $totalizador, 0);
array_push($tables, ${"table" . $t});
$t++;
unset($somaReg);
unset($dados);
$x = 0;
$header = array($row['clas_descricao'] => 'C', "Classificações" => 'C');
}
} else {
$header = array($row['clas_descricao'] => 'C', "Classificações" => 'C');
}
$somaReg += $row['qtde']; $ultClass = "";
$ultClass = $row['clas_descricao']; $somaReg = 0;
$dados[$x]["clit_descricao"] = $row["clit_descricao"]; $dataHeader = array('clit_descricao' => 'C', 'qtde' => 'C');
$dados[$x]["qtde"] = $row['qtde']; $widthHeader = array(130, 60);
$x++;
$z++;
if (count($this->GetData()[0]) == $count) { foreach ($this->GetData()[0] as $row) {
$count ++;
if ($x) {
if ($ultClass != $row['clas_descricao']) {
$totalizador = array("Total [ $ultClass ] ", $somaReg); $totalizador = array("Total [ $ultClass ] ", $somaReg);
${'table' . $t} = array($header, $dataHeader, $dados, $widthHeader, $totalizador, 0); ${'table' . $t} = array($header, $dataHeader, $dados, $widthHeader, $totalizador, 0);
array_push($tables, ${"table" . $t}); array_push($tables, ${"table" . $t});
$t++;
unset($somaReg);
unset($dados);
$x = 0;
$header = array($row['clas_descricao'] => 'C', "Classificações" => 'C');
} }
} else {
$header = array($row['clas_descricao'] => 'C', "Classificações" => 'C');
} }
$this->___dataRel = $tables; $somaReg += $row['qtde'];
} $ultClass = $row['clas_descricao'];
public function ExecutaRelatorio() { $dados[$x]["clit_descricao"] = $row["clit_descricao"];
global $jsStartup, $jsJQuery, $smarty; $dados[$x]["qtde"] = $row['qtde'];
try { $x++;
/* $z++;
* Use esta função para validar dados do formulário.
*/ if (count($this->GetData()[0]) == $count) {
$this->___ValidaForm(); $totalizador = array("Total [ $ultClass ] ", $somaReg);
${'table' . $t} = array($header, $dataHeader, $dados, $widthHeader, $totalizador, 0);
/* array_push($tables, ${"table" . $t});
* Recupera os dados do banco.
*/
$this->___ConteudoRelatorio();
/*
* Imprime relatório de acordo com a media passada.
*/
$conteudoRelatorio = $this->___ImprimeRelatorio();
} catch (Exception $exc) {
$this->SetMsg($exc->getMessage());
$jsStartup[] = sprintf("alert('%s');", $this->GetMsg());
$this->___GravaLog();
} }
}
$this->___dataRel = $tables;
}
public function ExecutaRelatorio() {
global $jsStartup, $jsJQuery, $smarty;
try {
/* /*
* Inclua os scripts necessários aqui. * Use esta função para validar dados do formulário.
*/ */
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) "; $this->___ValidaForm();
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
$smarty->assign('filtros', $this->___FiltrosRelatorio()); /*
$smarty->assign('conteudo', $conteudoRelatorio); * Recupera os dados do banco.
$smarty->assign('msg', $this->GetMsg()); */
GetTemplate($smarty, 'relatoriosGrid.tpl'); $this->___ConteudoRelatorio();
/*
* Imprime relatório de acordo com a media passada.
*/
$conteudoRelatorio = $this->___ImprimeRelatorio();
} catch (Exception $exc) {
$this->SetMsg($exc->getMessage());
$jsStartup[] = sprintf("alert('%s');", $this->GetMsg());
$this->___GravaLog();
} }
/*
* Inclua os scripts necessários aqui.
*/
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) ";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
$smarty->assign('filtros', $this->___FiltrosRelatorio());
$smarty->assign('conteudo', $conteudoRelatorio);
$smarty->assign('msg', $this->GetMsg());
GetTemplate($smarty, 'relatoriosGrid.tpl');
} }
$relClassMensal = new RelClassificacaoMensal($idProg, $dbcon, 1); }
$relClassMensal->ExecutaRelatorio();
$relClassMensal = new RelClassificacaoMensal($idProg, $dbcon, 1);
$relClassMensal->ExecutaRelatorio();
?> ?>

1748
relatorios/callcenter/metas/metricasDiaria.php

File diff suppressed because it is too large Load Diff

2362
relatorios/callcenter/metas/metricasMensal.php

File diff suppressed because it is too large Load Diff

9
templates/confSistema.tpl

@ -329,6 +329,15 @@
<img src="imgSite/phone.gif" alt="Pausa" width="16" height="16" align="absmiddle" border="0"/><a href="#" id="install" class="frame" onclick="abrir_modal('index.php?idProg=311', '55%')" style="font-size: 12px;"> Clique aqui para configurar!</a> <img src="imgSite/phone.gif" alt="Pausa" width="16" height="16" align="absmiddle" border="0"/><a href="#" id="install" class="frame" onclick="abrir_modal('index.php?idProg=311', '55%')" style="font-size: 12px;"> Clique aqui para configurar!</a>
</td> </td>
</tr> </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> <tr>
<th>&nbsp;</th> <th>&nbsp;</th>

11
templates/relatoriosGrid.tpl

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

Loading…
Cancel
Save