From 99b3e21b65c3846c0ee6e9fc5172fa9df110c0b4 Mon Sep 17 00:00:00 2001 From: "amarildo.pereira" Date: Fri, 11 Nov 2022 15:14:56 -0300 Subject: [PATCH 1/2] Ajustes na inclusao da logo --- configGeral.php | 2 +- imgSite/LOGO_SIMPLESIP200.PNG | Bin 0 -> 9899 bytes imgSite/logo_simplesip.png | Bin 69721 -> 6207 bytes include/configBd.php | 3 ++- include/util/funcoesApl.php | 2 +- 5 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 imgSite/LOGO_SIMPLESIP200.PNG mode change 100755 => 100644 imgSite/logo_simplesip.png diff --git a/configGeral.php b/configGeral.php index c6a1e05..f87f12a 100644 --- a/configGeral.php +++ b/configGeral.php @@ -532,7 +532,7 @@ function MoveLogo() { if (!empty($_FILES['logoRelatorio']['name'])) { $tmpFileName = $_FILES['logoRelatorio']['name']; $nomeArq = strtolower($tmpFileName); - $nomeArq = LimpaString($nomeArq); + $nomeArq = LimpaString($nomeArq, false); $pathFile = 'imgSite/' . $nomeArq; diff --git a/imgSite/LOGO_SIMPLESIP200.PNG b/imgSite/LOGO_SIMPLESIP200.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0451aefc65c902f38e8af3e2710d52afad60443b GIT binary patch literal 9899 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 literal 0 HcmV?d00001 diff --git a/imgSite/logo_simplesip.png b/imgSite/logo_simplesip.png old mode 100755 new mode 100644 index 35cb67b74afb6e08d28a8d073485f6879c92c37e..7f2203c2d4d169c780648d74458e834f33a0858e GIT binary patch literal 6207 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 '3306', 'myPassword' => 'SimpleS_root' ); -?> +?> \ No newline at end of file diff --git a/include/util/funcoesApl.php b/include/util/funcoesApl.php index c60e68d..fb771e7 100644 --- a/include/util/funcoesApl.php +++ b/include/util/funcoesApl.php @@ -1900,7 +1900,7 @@ function SetModuAtendimentoDefault() { } function GetVersao() { - return "1.7.11.4"; + return "1.7.11.5"; } function GetEncType($upload) { From fdb132a2c02acafab47249ecbedc19e5c2a92ebc Mon Sep 17 00:00:00 2001 From: root Date: Fri, 11 Nov 2022 15:29:19 -0300 Subject: [PATCH 2/2] =?UTF-8?q?ATUALIZA=C3=87=C3=95ES?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/cadQgrupos.php | 22 +- agente/agentert.php | 8 + discador/campanha/retornoCampanha.php | 525 ++++++++++ projeto/base/sql/versao-1.7.11.4.sql | 21 + .../callcenter/geral/recebidasAgente.php | 964 ++++++++---------- scriptApl/functions15.js | 13 +- 6 files changed, 990 insertions(+), 563 deletions(-) create mode 100644 projeto/base/sql/versao-1.7.11.4.sql diff --git a/admin/cadQgrupos.php b/admin/cadQgrupos.php index 06b83df..b96d4b1 100644 --- a/admin/cadQgrupos.php +++ b/admin/cadQgrupos.php @@ -190,7 +190,7 @@ $modoAtendimento = $_POST["modo_atendimento"]; $pesquisaLiberacao = $_POST["pesquisa_liberacao"]; $ativaFila = isset($_POST['ativaFila']) ? 'A' : 'I'; - $midiafila = isset($_POST['midiafila']) ? 'S' : 'N'; + $disponivelfila = $_POST['disponivelfila']; $nome = LimpaString($_POST["nome"], true); $musicclass = trim($_POST["musicclass"]); $strategy = trim($_POST["strategy"]); @@ -251,12 +251,12 @@ $query = "INSERT INTO pbx_queues_grupos(nome, musicclass, strategy, servicelevel, timeout, retry, maxlen, joinempty, eventwhencalled, eventmemberstatus, ringinuse, periodic_announce_frequency,wrapuptime,autofill,autopause,\"announce-frequency\",\"announce-holdtime\",\"announce-round-seconds\",\"monitor-format\",\"monitor-type\",reportholdtime,timeoutrestart - ,numero,timeout2,m_espera,opcao,acao,setinterfacevar,anuncio, id_transbordo, max_agente_pausa, tempo_ring, exige_classificacao, justificativa_pausa, context, retornar_abandonadas,status $dataClass,modo_atendimento,id_pesquisa_liberacao, midiafila) + ,numero,timeout2,m_espera,opcao,acao,setinterfacevar,anuncio, id_transbordo, max_agente_pausa, tempo_ring, exige_classificacao, justificativa_pausa, context, retornar_abandonadas,status $dataClass,modo_atendimento,id_pesquisa_liberacao, disponivelfila) VALUES ('$nome', '$musicclass', '$strategy', $servicelevel, $timeout, $retry, $maxlen, '$joinempty', '$eventwhencalled', '$eventmemberstatus', '$ringinuse', $periodic_announce_frequency, '$wrapuptime','$autofill','$autopause','$announce_frequency','$announce_holdtime','$announce_round_seconds','$monitor_format', - '$monitor_type','$reportholdtime','$timeoutrestart','$numero','$timeout2','$m_espera','$opcao','$acao_opcao','$setinterfacevar','$som_ura', $idTransbordo, $max_agente_pausa, $tempoRing, $exige_classificacao, $justificativa_pausa, '$context', $retornar_abandonadas,'$ativaFila' $dateClass,'$modoAtendimento',$pesquisaLiberacao, '$midiafila')"; + '$monitor_type','$reportholdtime','$timeoutrestart','$numero','$timeout2','$m_espera','$opcao','$acao_opcao','$setinterfacevar','$som_ura', $idTransbordo, $max_agente_pausa, $tempoRing, $exige_classificacao, $justificativa_pausa, '$context', $retornar_abandonadas,'$ativaFila' $dateClass,'$modoAtendimento',$pesquisaLiberacao, '$disponivelfila')"; pg_query($dbcon, $query); $query2 = "select id from pbx_queues_grupos order by id desc limit 1"; @@ -297,7 +297,7 @@ maxlen='$maxlen', joinempty='$joinempty', eventwhencalled='$eventwhencalled', eventmemberstatus='$eventmemberstatus', ringinuse='$ringinuse', periodic_announce_frequency='$periodic_announce_frequency',wrapuptime='$wrapuptime',autofill='$autofill',autopause='$autopause',\"announce-frequency\"='$announce_frequency',\"announce-holdtime\"='$announce_holdtime',\"announce-round-seconds\"='$announce_round_seconds',\"monitor-format\"='$monitor_format', \"monitor-type\" ='$monitor_type',reportholdtime='$reportholdtime',timeoutrestart='$timeoutrestart',numero='$numero',timeout2='$timeout2',m_espera='$m_espera',opcao='$opcao',acao='$acao_opcao',setinterfacevar='$setinterfacevar', anuncio='$som_ura', id_transbordo = '$idTransbordo', max_agente_pausa = '$max_agente_pausa', - tempo_ring = '$tempoRing', exige_classificacao = '$exige_classificacao', justificativa_pausa = '$justificativa_pausa', context = '$context', retornar_abandonadas = '$retornar_abandonadas', modo_atendimento = '$modoAtendimento',id_pesquisa_liberacao = $pesquisaLiberacao,midiafila = '$midiafila',status = '$ativaFila' $dataClass + tempo_ring = '$tempoRing', exige_classificacao = '$exige_classificacao', justificativa_pausa = '$justificativa_pausa', context = '$context', retornar_abandonadas = '$retornar_abandonadas', modo_atendimento = '$modoAtendimento',id_pesquisa_liberacao = $pesquisaLiberacao,disponivelfila = '$disponivelfila',status = '$ativaFila' $dataClass WHERE id=$id"; pg_query($dbcon, $query); @@ -341,9 +341,6 @@ $closeWin = 1; $msgValida = ($a > 1) ? "Os ramais \"$log\" já estão sendo utilizados por um agente logado!" : "O ramal \"$log\" já está sendo utilizado por um agente logado!"; } - if($midiafila == 'N'){ - gera_arquivos($dbcon, 'QUEUES_GRUPOS'); - } ?> @@ -384,7 +381,7 @@ $modoAtendimento = $dados["modo_atendimento"]; $pesquisaLiberacao = $dados["id_pesquisa_liberacao"]; $ativaFila = $dados['status']; - $midiafila = $dados['midiafila']; + $disponivelfila = $dados['disponivelfila']; $nome = trim($dados['nome']); $musicclass = trim($dados['musicclass']); $strategy = trim($dados['strategy']); @@ -992,12 +989,9 @@
- Fila Mídia - /> Ativar + Disponível Fila + /> Sim + /> Não
diff --git a/agente/agentert.php b/agente/agentert.php index cb09c90..6e60e17 100644 --- a/agente/agentert.php +++ b/agente/agentert.php @@ -1479,6 +1479,14 @@ function ConnectaAgenteRt($db, $dac, $tpAtend) { $_SESSION[SS_MODO_ATENDIMENTO_COD] = $tpAtend; } + /** + * Verifica a disponibilidade da fila + */ + $q = "SELECT disponivelfila FROM pbx_queues_grupos WHERE id = '$dac'"; + $res = pg_query($db, $q); + $ret = pg_fetch_assoc($res); + $_SESSION["prm_disponivel_fila"] = $ret['disponivelfila']; + $moduAtendDesc = $_SESSION[SS_MODO_ATENDIMENTO]; $_SESSION[SS_DAC_CODIGO] = $dac; $matricula = GetMatricula(); diff --git a/discador/campanha/retornoCampanha.php b/discador/campanha/retornoCampanha.php index 1d9486b..133252f 100644 --- a/discador/campanha/retornoCampanha.php +++ b/discador/campanha/retornoCampanha.php @@ -1,5 +1,530 @@ ___campanha = isset($_REQUEST['campanha']) ? $_REQUEST['campanha'] : 0; + $this->___lista = isset($_REQUEST['lista']) ? $_REQUEST['lista'] : 0; + $this->___telefone = isset($_REQUEST['telefone']) ? $_REQUEST['telefone'] : ''; + $this->___btnConsulta = isset($_POST['btConsulta']) ? $_POST['btConsulta'] : ''; + } + + function ___ValidaForm() { + parent::___ValidaForm(); + if (empty($this->___campanha) && $this->___btnConsulta) { + GeraExcept('Informe uma campanha!'); + } + + if (empty($this->___lista) && $this->___campanha && $this->___btnConsulta) { + GeraExcept('Informe uma lista!'); + } + + } + + function ___FiltrosRelatorio() { + if ($this->___media != MEDIA_PRINT_GRID) { + /* + * Recupera os filtros da sess�o do usu�rio. + */ + list($this->___dataIni, $this->___dataFim, $this->___telefone) = $_SESSION["SSstorageFiltros"]; + + if ($this->___media == MEDIA_PRINT_HTML) { + return sprintf("Data Inicial: %s Data Final: %s ", $this->___dataIni, $this->___dataFim); + } + + $fltCsv = array(); + $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->___dataCount) { + $prt = 'Clique aqui para imprimir!'; + //$prtHtml = "\"Clique"; + //$lkPrint .= sprintf($prtHtml, $this->GetidProg(), MEDIA_PRINT_HTML, substr(LimpaString(GetDispProgSel($this->GetIdProg())), 0, 20), 'print.gif'); + $lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_EXCEL, 'prt-xls.png'); + //$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_PDF, 'prt-pdf.png'); + $lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, 'prt-csv.png'); + } + + /* + * Personalise esta função se necessitar de outras opções de filtro. + */ + $filtro = ''; + /* + * Rotulos. + */ + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + + /* + * Valores. + */ + $filtro .= '' + . ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= sprintf('', $this->getCampanha($this->___campanha)); + $filtro .= sprintf('', $this->getListaCampanha($this->___lista)); + $filtro .= sprintf('', $this->___telefone); + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= '
 Data Inicial Data Final CampanhaListaOrigem/Destino 
 %s%s
'; + + /* + * Guarda os filtros passados para recuperar na emiss�o dos relat?ios para impress�o. + */ + $_SESSION["SSstorageFiltros"] = array($this->___dataIni, $this->___dataFim); + + return sprintf($filtro, $this->___dataIni, $this->___dataFim, $lkPrint); + } + + protected function ___GetDadosDb() { + $dataIni = $this->___dataIni ? FormatDtMssql($this->___dataIni) : ''; + $dataFim = $this->___dataFim ? FormatDtMssql($this->___dataFim) : ''; + + $query = "SELECT DISTINCT b.id AS fila_id, a.cmp_id, a.data_registro::date, d.cont_id, src, f.conf_fone as contato_numero, b.nome as fila_nome, j.apelido, billsec, a.cmp_descricao, + d.cont_param1 AS contato_descricao, + d.cont_discado AS contato_discado, + COALESCE(h.ctst_nome, 'Número Não Discado') AS contato_status, calldate + FROM pbx_campanha a + INNER JOIN pbx_dacs b ON b.id = a.id_dac + INNER JOIN pbx_campanha_lista c ON c.cmp_id = a.cmp_id + INNER JOIN pbx_campanha_contato d ON d.cmp_id = c.cmp_id AND d.list_id = c.list_id + INNER JOIN pbx_campanha_contato_fone f ON f.cmp_id = d.cmp_id AND f.list_id = d.list_id AND f.cont_id = d.cont_id + INNER JOIN pbx_bilhetes i ON i.uniqueid = f.conf_uid + LEFT JOIN pbx_campanha_operacao g ON g.cmp_id = f.cmp_id AND g.list_id = f.list_id AND g.conf_id = f.conf_id + LEFT JOIN pbx_campanha_contato_status h ON h.ctst_id = d.cont_status::int + LEFT JOIN pbx_usuarios j ON j.matricula = f.conf_agente_matricula + WHERE 1 = 1 "; + $query .= " AND i.data_bilhete::DATE >= '{$dataIni}' AND i.data_bilhete::DATE <= '{$dataFim}'"; + $query .= $this->___campanha ? " AND a.cmp_id = {$this->___campanha}" : ''; + $query .= $this->___lista ? " AND c.list_id = {$this->___lista}" : ''; + $query .= $this->___telefone ? " AND (src = '{$this->___telefone}' OR f.conf_fone = '{$this->___telefone}') " : ''; + $query .= " ORDER BY a.cmp_id"; + + $result = $this->___GetQuery($query); + $row = pg_fetch_all($result); + $this->SetData($row ? $row : array()); + } + + protected function ___PreparaCsv() { + $nomeDac = ""; + $dataRel = array(); + $dataAgrup = array(); + $filtro = $this->___FiltrosRelatorio(); + + $dataRel[] = GenerateCsvFromArray($filtro); + + $dadosCabecalio = array( + 'Data Campanha' => 'align="center"', + 'Origem' => 'align="center"', + 'Destino' => 'align="center"', + 'Fila' => 'align="center"', + 'Duracao' => 'align="center"', + 'Agente' => 'align="center"', + 'Campanha' => 'align="center"', + 'Contato' => 'align="center"', + 'Status' => 'align="center"', + 'Data Chamada' => 'align="center"' + ); + $dadosField = array( + 'data_registro' => 'align="center"', + 'src' => 'align="center"', + 'contato_numero' => 'align="center"', + 'fila_nome' => 'align="center"', + 'billsec' => 'align="center"', + 'apelido' => 'align="center"', + 'cmp_descricao' => 'align="center"', + 'contato_descricao' => 'align="center"', + 'contato_status' => 'align="center"', + 'calldate' => 'align="center"' + ); + + $dataRel[] = GenerateCsvFromArray(array_keys($dadosCabecalio)); + + $somaTempo = 0; + $somaQuantidade = 0; + + /* + * Inicia o relat�rio. + */ + foreach ($this->GetData()[0] as $row) { + $row['src'] = $row['src']; + $row["data_registro"] = $row["data_registro"] ? date('d/m/Y', strtotime($row["data_registro"])) : '-'; + $row["calldate"] = $row["calldate"] ? date('d/m/Y H:i:s', strtotime($row["calldate"])) : '-'; + $row["apelido"] = $row["apelido"] ? $row["apelido"] : '-'; + $row['cmp_descricao'] = RemoveAcentos($row['cmp_descricao']); + $row['contato_status'] = RemoveAcentos($row['contato_status']); + $row["billsec"] = SecondToStrTime($row["billsec"]); + $somaQuantidade++; + + $linha = array(); + foreach ($dadosField as $key => $value) { + $linha[] = $row["$key"]; + } + $dataRel[] = GenerateCsvFromArray($linha); + } + + $dataRel[] = $linha; + $linha1 = array('Total', 'Registros: ' . $somaQuantidade); + $dataRel[] = GenerateCsvFromArray($linha1); + $dataRel[] = $linha1; + + $this->___dataRel[] = $dataRel; + } + + protected function ___PreparaExcel() { + //list($this->___dataIni, $this->___dataFim) = $_SESSION["SSstorageFiltros"]; + + $dataRel = array(); + $dataAgrup = array(); + $filtro = $this->___FiltrosRelatorio(); + + /* + * 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'); + foreach ($filtro as $values) { + list($label, $value) = explode(":", $values); + $linha[] = $value; + } + + $dataRel[] = $linha; + + $dadosCabecalio = array( + 'Data Campanha', + 'Origem', + 'Destino', + 'Fila', + 'Duracao', + 'Agente', + 'Campanha', + 'Contato', + 'Status', + 'Data Chamada' + ); + $dadosField = array( + 'data_registro', + 'src', + 'contato_numero', + 'fila_nome', + 'billsec', + 'apelido', + 'cmp_descricao', + 'contato_descricao', + 'contato_status', + 'calldate' + ); + + /* + * Monta a linha de cabecalio. + */ + $linha = array('LABEL'); + foreach ($dadosCabecalio as $value) { + $linha[] = $value; + } + $dataRel[] = $linha; + + $somaTempo = 0; + $somaQuantidade = 0; + /* + * Linhas de dados. + */ + foreach ($this->GetData()[0] as $row) { + $row['src'] = $row['src']; + $row["data_registro"] = $row["data_registro"] ? date('d/m/Y', strtotime($row["data_registro"])) : '-'; + $row["calldate"] = $row["calldate"] ? date('d/m/Y H:i:s', strtotime($row["calldate"])) : '-'; + $row["apelido"] = $row["apelido"] ? $row["apelido"] : '-'; + $row['cmp_descricao'] = RemoveAcentos($row['cmp_descricao']); + $row['contato_status'] = RemoveAcentos($row['contato_status']); + $row["billsec"] = SecondToStrTime($row["billsec"]); + $somaQuantidade++; + + // Formata linha de dados. + $linha = array('DADOS'); + foreach ($dadosField as $key) { + $linha[] = $row["$key"]; + } + + $dataRel[] = $linha; + } + + $linha = array('LABEL', 'Total', 'Registros: ' . $somaQuantidade); + + $dataRel[] = $linha; + + $this->___dataRel[] = $dataRel; + } + + protected function ___PreparaGrid() { + $dadosCabecalio = array( + 'Data Campanha' => 'align="center"', + 'Origem' => 'align="center"', + 'Destino' => 'align="center"', + 'Fila' => 'align="center"', + 'Duração' => 'align="center"', + 'Agente' => 'align="center"', + 'Campanha' => 'align="center"', + 'Contato' => 'align="center"', + 'Status' => 'align="center"', + 'Data Chamada' => 'align="center"', + 'Retornar' => 'align="center"' + ); + $dadosField = array( + 'data_registro' => 'align="center"', + 'src' => 'align="center"', + 'contato_numero' => 'align="center"', + 'fila_nome' => 'align="center"', + 'billsec' => 'align="center"', + 'apelido' => 'align="center"', + 'cmp_descricao' => 'align="center"', + 'contato_descricao' => 'align="center"', + 'contato_status' => 'align="center"', + 'calldate' => 'align="center"', + 'retornar' => 'align="center"' + ); + /* + * Inicia o relat�rio. + */ + $dataRel[] = ''; + + /* + * Monta a linha de cabecalio. + */ + $linha = ''; + foreach ($dadosCabecalio as $key => $value) { + $linha .= sprintf("", $value, $key); + } + $linha .= ""; + $dataRel[] = $linha; + + /* + * Verifica se retornou dados + */ + if (!IsPostBack() || !count($this->GetData()[0])) { + $dataRel[] = sprintf("
%s
%s
", count($dadosCabecalio) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!')); + $this->___dataRel[] = $dataRel; + return; + } + + $somaTempo = 0; + $somaQuantidade = 0; + /* + * Linhas de dados. + */ + foreach ($this->GetData()[0] as $row) { + $row['src'] = $row['src']; + $row["data_registro"] = $row["data_registro"] ? date('d/m/Y', strtotime($row["data_registro"])) : '-'; + $row["calldate"] = $row["calldate"] ? date('d/m/Y H:i:s', strtotime($row["calldate"])) : '-'; + $row["apelido"] = $row["apelido"] ? $row["apelido"] : '-'; + $row["billsec"] = SecondToStrTime($row["billsec"]); + if($row['contato_status'] == 'Não Atendida'){ + $row["retornar"] = sprintf('Retornar Chamada', $row['contato_numero']); + } else if($row['contato_status'] == 'Atendida'){ + $row["retornar"] = sprintf('Chamada já efetuada'); + } else if($row['contato_status']){ + $row["retornar"] = sprintf('Retornar Chamada', $row['contato_numero']); + } + $somaQuantidade++; + + // Formata linha de dados. + $linha = ""; + foreach ($dadosField as $key => $value) { + $linha .= sprintf("%s", $value, $row["$key"]); + } + $linha .= ""; + $dataRel[] = $linha; + } + /* + * Linha de totalizacao. + */ + $linha = 'TotalRegistros: %s'; + $dataRel[] = sprintf($linha, $somaQuantidade, SecondToStrTime($somaTempo)); + + /* + * Fecha relatorio. + */ + $dataRel[] = ''; + $this->___dataRel[] = $dataRel; + } + + protected function ___PreparaHtml() { + + } + + protected function ___PreparaPdf() { + list($this->___dataIni, $this->___dataFim) = $_SESSION["SSstorageFiltros"]; + + $dados = $this->GetData()[0]; + $x = 0; + $somaQtd = 0; + foreach ($dados as $row) { + $dados[$x]["cmpo_fim"] = $row["cmpo_fim"] ? date('d/m/Y H:i', strtotime($row["cmpo_fim"])) : '-'; + $dados[$x]["apelido"] = $row["apelido"] ? $row["apelido"] : '-'; + $dados[$x]["cmp_descricao"] = RemoveAcentos($row['cmp_descricao']); + $dados[$x]["contato_status"] = RemoveAcentos($row['contato_status']); + $dados[$x]["billsec"] = SecondToStrTime($row["billsec"]); + $somaQtd++; + $x++; + } + + //HEADER DA TABELA DO PDF -> DADOS EM ARRAY + $header = array( + 'Data/Hora' => 'C', + 'Origem' => 'C', + 'Destino' => 'C', + 'Fila' => 'C', + 'Duracao' => 'C', + 'Agente' => 'C', + 'Campanha' => 'C', + 'Contato' => 'C', + 'Status' => 'C' + ); + $dataHeader = array( + 'cmpo_fim' => 'C', + 'src' => 'C', + 'contato_numero' => 'C', + 'fila_nome' => 'C', + 'billsec' => 'C', + 'apelido' => 'C', + 'cmp_descricao' => 'C', + 'contato_descricao' => 'C', + 'contato_status' => 'C' + ); + + $widthHeader = array(20, 13, 15, 20, 15, 15, 30, 60, 15); + $totaliza = array('Total', "Registros: ", $somaQtd); + + //Monta o array para passar para o prepara; Necessário passar 6 parametros + $table1 = array($header, $dataHeader, $dados, $widthHeader, $totaliza, 1); + + $this->___dataRel = array($table1); + } + + private function getCampanha($select = null) { + global $dbcon; + + $query = sprintf("SELECT DISTINCT cmp_id as id, cmp_descricao as nome + FROM pbx_grupo_usuario a + INNER JOIN pbx_fila_audios b ON b.gp_id = a.gp_id + INNER JOIN pbx_queues_grupos c ON c.id = b.id + INNER JOIN pbx_campanha d ON d.id_dac = b.id + WHERE user_id = %s + ORDER BY 2", GetIdUser()); + $result = pg_query($dbcon, $query); + $res = pg_fetch_all($result); + + $opt = ""; + return $opt; + } + + public function getListaCampanha($select = null, $cmp = null) { + global $dbcon; + + if ($this->___campanha || $cmp) { + $query = sprintf("SELECT DISTINCT a.list_id as id, a.list_nome || ' [' || a.list_id::text || ']' as nome + FROM pbx_campanha_lista a + INNER JOIN pbx_campanha_contato_fone b ON b.cmp_id = a.cmp_id AND b.list_id = a.list_id + WHERE a.cmp_id IN (%s) + ORDER BY 2", $cmp ? $cmp : $this->___campanha); + + $result = pg_query($dbcon, $query); + $res = pg_fetch_all($result); + } + + if(!$res){ + $opt .= ""; + } + + foreach ($res as $val) { + $selected = $select == $val['id'] ? 'selected' : ''; + $opt .= ""; + } + return $opt; + } + + public function ExecutaRelatorio() { + global $jsStartup, $jsJQuery, $smarty; + try { + /* + * Use esta fun��o para validar dados do formul�rio. + */ + $this->___ValidaForm(); + + /* + * 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(); + } + + /* + * 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'); + } + + } + + $rel = new RelCampanhaRetorno($idProg, $dbcon, 0); + if($_GET['a'] && $_GET['slc']){ + echo $rel->getListaCampanha(null, $_GET['slc']); + exit; + } + $rel->ExecutaRelatorio(); + + /** $templateName = 'discador/retornoCampanha.tpl'; $vAlineMaster = 'middle'; $_SESSION["dataIni"] = IsPostBack() ? $_POST["dataIni"] : ""; //date('d/m/Y'); diff --git a/projeto/base/sql/versao-1.7.11.4.sql b/projeto/base/sql/versao-1.7.11.4.sql new file mode 100644 index 0000000..752930e --- /dev/null +++ b/projeto/base/sql/versao-1.7.11.4.sql @@ -0,0 +1,21 @@ +CREATE OR REPLACE VIEW pbx_ramais_mesa AS +SELECT 0 AS tipo, pbx_sip_ramais.id, pbx_sip_ramais.nome, + pbx_sip_ramais.dispositivo, pbx_sip_ramais.callerid, + 'SIP'::text AS tipo_table, pbx_sip_ramais.conta_senha, + ''::character varying AS ddd, pbx_sip_ramais.context AS contexto + FROM pbx_sip_ramais +UNION ALL + SELECT 1 AS tipo, 0 AS id, pbx_ramais_agenda.rma_telefone AS nome, + pbx_ramais_agenda.rma_telefone AS dispositivo, + pbx_ramais_agenda.rma_nome AS callerid, 'AGD'::text AS tipo_table, + 'F'::character varying AS conta_senha, pbx_ramais_agenda.ddd, + ' '::character varying AS contexto + FROM pbx_ramais_agenda +UNION ALL + SELECT 0 AS tipo,id, nome, dispositivo, nome AS callerid,'IAX'::text AS tipo_table, + conta_senha, ''::character varying AS ddd, context AS contexto + FROM pbx_iax_pbx +ORDER BY callerid; + +ALTER TABLE pbx_queues_grupos DROP COLUMN midiafila; +ALTER TABLE pbx_queues_grupos ADD COLUMN disponivelfila INT DEFAULT(1); \ No newline at end of file diff --git a/relatorios/callcenter/geral/recebidasAgente.php b/relatorios/callcenter/geral/recebidasAgente.php index 11d05e4..2892ea2 100644 --- a/relatorios/callcenter/geral/recebidasAgente.php +++ b/relatorios/callcenter/geral/recebidasAgente.php @@ -1,624 +1,492 @@ ___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0; - $this->___tempoAtendimento = isset($_POST['tempoAtendimento']) ? $_POST['tempoAtendimento'] : ''; - $this->___agente = isset($_POST["listaAgente"]) ? $_POST["listaAgente"] : 0; - $this->___servico = isset($_POST["listaServico"]) ? $_POST["listaServico"] : 0; - } - - public function ___ValidaForm() { - parent::___ValidaForm(); - if (!IsPostBack()) { - return; - } - if ($this->___agente < 0) { - GeraExcept('Informe um agente!'); + private $___agente; + private $___tempoAtendimento; + + public function __construct($idProg, $dbcon, $incDac) { + parent::__construct($idProg, $dbcon, $incDac); + $this->___dac = isset($_POST['listaDacs']) ? $_POST['listaDacs'] : 0; + $this->___tempoAtendimento = isset($_POST['tempoAtendimento']) ? $_POST['tempoAtendimento'] : ''; + $this->___agente = isset($_POST["listaAgente"]) ? $_POST["listaAgente"] : 0; } - if ($this->___tempoAtendimento && $this->___tempoAtendimento < 10) { - GeraExcept('Por favor, informe a duração maior que 10 segundos!'); + public function ___ValidaForm() { + parent::___ValidaForm(); + if (!IsPostBack()) { + return; + } + if ($this->___agente < 0) { + GeraExcept('Informe um agente!'); + } + + if ($this->___tempoAtendimento && $this->___tempoAtendimento < 10) { + GeraExcept('Por favor, informe a duração maior que 10 segundos!'); + } } - } - - function ___FiltrosRelatorio() { - - $agente = $this->___GetAgente(); - - 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')); + function ___FiltrosRelatorio() { + $agente = $this->___GetAgente(); + + 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; } - $fltCsv = array(); if ($this->GetIncDac()) { - $fltCsv[] = 'Fila:' . GetDacDesc($this->GetDbCon(), $this->___dac); + $dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1); } - $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()) { - $dacs = GetDac($this->GetDbCon(), $this->___dac, "", 0, 1, 0, 0, 1); - } + $lkPrint = ""; + if ($this->___dataCount) { + $prt = 'Clique aqui para imprimir!'; + $prtHtml = "\"Clique"; + $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'); + } - $lkPrint = ""; - if ($this->___dataCount) { - $prt = 'Clique aqui para imprimir!'; - $prtHtml = "\"Clique"; - $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 op��es de filtro. + */ + $filtro = ''; + /* + * Rotulos. + */ + $filtro .= ''; + if ($this->GetIncDac()) + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; + $filtro .= ''; - $tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"'; - /* - * Personalise esta função se necessitar de outras op��es de filtro. - */ - $filtro = '
FilaData InicialData Final AgenteDuração (Segundos) 
'; - /* - * Rotulos. - */ - $filtro .= ''; - if ($this->GetIncDac()) - $filtro .= ''; - $filtro .= ''; - $filtro .= ''; - if (GetUsoServico()) { - $filtro .= ''; - } - $filtro .= ''; - $filtro .= ''; - $filtro .= ''; - $filtro .= ''; - - /* - * Valores. - */ - $filtro .= ''; - if ($this->GetIncDac()) - $filtro .= sprintf('', $dacs); - $filtro .= ''; - $filtro .= ''; - if (GetUsoServico()) { - $filtro .= sprintf('', GetIdentRota(false, $this->___servico)); - } - $filtro .= sprintf('', $agente); - $filtro .= ""; - $filtro .= ''; - $filtro .= ''; - $filtro .= ''; - $filtro .= '
FilaData InicialData Final Serviço AgenteDuração (Segundos) 
%s%s%s%s
'; + /* + * Valores. + */ + $filtro .= ''; + if ($this->GetIncDac()) + $filtro .= sprintf('%s', $dacs); + $filtro .= ''; + $filtro .= ''; + $filtro .= sprintf('%s', $agente); + $filtro .= ""; + $filtro .= ''; + $filtro .= '%s'; + $filtro .= ''; + $filtro .= ''; - /* - * Guarda os filtros passados para recuperar na emissão dos relatóios para impressão. - */ + /* + * 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); + $_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); - $srv = $this->___servico; - $agente = $this->___agente; - $dac = $this->___dac; - $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA; + protected function ___GetDadosDb() { + $dataIni = FormatDtMssql($this->___dataIni); + $dataFim = FormatDtHoraBD($this->___dataFim); + $agente = $this->___agente; + $dac = $this->___dac; - $query1 = "SELECT a.calldate AS data, a.src AS origem, + $query1 = "SELECT a.calldate AS data, a.src AS origem, CASE WHEN(b.evento IN('COMPLETECALLER', 'COMPLETEAGENT', 'COMPLETEAGENTRAMAL', 'COMPLETECALLERRAMAL'))THEN strtoint(b.param2) ELSE CASE WHEN(b.evento = 'TRANSFER')THEN strtoint(b.param4) ELSE 0 END END AS tmo, - c.apelido AS agente, CASE WHEN(b.evento IN('BUSY','NOANSWER'))THEN 0 ELSE 1 END AS status,'' AS desligado, b.fila" . ($mostraColunaServicos ? ", s.serv_id" : ""); - - $query2 = "SELECT DISTINCT c.matricula, c.apelido"; - - $query = " FROM pbx_bilhetes a - inner join pbx_eventos_dacs b on b.uid2 = a.uniqueid - inner join pbx_usuarios c on c.matricula = SUBSTRING(b.agente,7 ,4)"; - if (GetUsoServico()) { - $query .= " left join pbx_servicos_registra s on s.uniqueid = a.uniqueid"; - } - $query .= " WHERE a.data_bilhete >= '$dataIni' - AND a.data_bilhete <= '$dataFim' - AND a.lastapp <> 'Transferred Call' - AND b.evento IN('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER') - AND b.fila = (SELECT nome FROM pbx_dacs WHERE id = '$dac') "; - if ($agente) { - $addAgente = "\nAND c.matricula = '$agente'"; - } - - if (GetUsoServico() && $srv) { - $query .= "\nAND s.serv_id = '{$srv}'"; - } - - $sqlTempo = $this->___tempoAtendimento && $this->___tempoAtendimento > 10 ? "\nAND strtoint(b.param2) >= " . $this->___tempoAtendimento : ''; - - $query1 = ($query1 . $query . $addAgente . $sqlTempo . sprintf("\nORDER BY %s ", $mostraColunaServicos ? 's.serv_id, a.calldate' : 'a.calldate')); - - $result = $this->___GetQuery($query1); - $row = pg_fetch_all($result); - $this->SetData($row ? $row : array()); - - $result2 = $this->___GetQuery($query2 . $query . " ORDER BY 2 "); - $row2 = pg_fetch_all($result2); - $this->SetData($row2 ? $row2 : array()); - } - - protected function ___PreparaCsv() { - $dataRel = array(); - $filtro = $this->___FiltrosRelatorio(); - $dataRel[] = GenerateCsvFromArray($filtro); - $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA; - - $dadosCabecalio = array( - 'Data', 'Hora', 'Origem', 'Tempo', 'Agente', 'Status' - ); - $dadosField = array( - 'data', 'hora', 'origem', 'tmo', 'agente', 'status' - ); - - if ($mostraColunaServicos) { - $dadosCabecalio = array_merge(['Servico'], $dadosCabecalio); - $dadosField = array_merge(['serv_id'], $dadosField); - } - - $dataRel[] = GenerateCsvFromArray($dadosCabecalio); - - $somaReg = 0; - $somaDuracao = 0; - $somaAtendida = 0; - $somaNAtendida = 0; - - foreach ($this->GetData()[0] as $row) { - $somaReg ++; - $somaDuracao += $row['tmo']; - $row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++; - - $row['hora'] = date('H:i:s', strtotime($row['data'])); - $row['data'] = date('d/m/Y', strtotime($row['data'])); - $row['tmo'] = SecondToStrTime($row['tmo']); - $row['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida"; - - $linha = array(); - foreach ($dadosField as $key) { - $linha[] = $row["$key"]; + c.apelido AS agente, CASE WHEN(b.evento IN('BUSY','NOANSWER'))THEN 0 ELSE 1 END AS status,'' AS desligado, b.fila"; + + $query2 = "SELECT DISTINCT c.matricula, c.apelido"; + + $query = " FROM pbx_bilhetes a, pbx_eventos_dacs b, pbx_usuarios c + WHERE b.uid2 = a.uniqueid + AND c.matricula = SUBSTRING(b.agente,7 ,4) + AND a.data_bilhete >= '$dataIni' + AND a.data_bilhete <= '$dataFim' + AND a.lastapp <> 'Transferred Call' + AND b.evento IN('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL','BUSY','NOANSWER') + AND b.fila = (SELECT nome FROM pbx_dacs WHERE id = '$dac') "; + if ($agente) { + $query .= "AND c.matricula = '$agente'"; } - $dataRel[] = GenerateCsvFromArray($linha); - } - $dataRel[] = GenerateCsvFromArray(array('DURAÇÃO', SecondToStrTime($somaDuracao), '')); - - $dataRel[] = GenerateCsvFromArray(array('')); - $dataRel[] = GenerateCsvFromArray(array('Atendida', 'Nao Atendida', 'Geral')); - $dataRel[] = GenerateCsvFromArray(array($somaAtendida, $somaNAtendida, $somaReg)); + + $sqlTempo = $this->___tempoAtendimento && $this->___tempoAtendimento > 10 ? " AND strtoint(b.param2) >= ".$this->___tempoAtendimento : ''; - $this->___dataRel[] = $dataRel; - } + $result = $this->___GetQuery($query1 . $query . $sqlTempo ." ORDER BY 1 "); + $row = pg_fetch_all($result); + $this->SetData($row ? $row : array()); - 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; + $result2 = $this->___GetQuery($query2 . $query . " ORDER BY 2 "); + $row2 = pg_fetch_all($result2); + $this->SetData($row2 ? $row2 : array()); } - $dataRel[] = $linha; - $linha = array('DADOS'); - foreach ($filtro as $values) { - list($label, $value) = explode(":", $values); - $linha[] = $value; + protected function ___PreparaCsv() { + $dataRel = array(); + $filtro = $this->___FiltrosRelatorio(); + $dataRel[] = GenerateCsvFromArray($filtro); + + $dadosCabecalio = array( + 'Data', 'Hora', 'Origem', 'TMA', 'Agente', 'Status' + ); + $dadosField = array( + 'data', 'hora', 'origem', 'tmo', 'agente', 'status' + ); + + $dataRel[] = GenerateCsvFromArray($dadosCabecalio); + + $somaReg = 0; + $somaDuracao = 0; + $somaAtendida = 0; + $somaNAtendida = 0; + + foreach ($this->GetData()[0] as $row) { + $somaReg ++; + $somaDuracao += $row['tmo']; + $row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++; + + $row['hora'] = date('H:i:s', strtotime($row['data'])); + $row['data'] = date('d/m/Y', strtotime($row['data'])); + $row['tmo'] = SecondToStrTime($row['tmo']); + $row['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida"; + + $linha = array(); + foreach ($dadosField as $key) { + $linha[] = $row["$key"]; + } + $dataRel[] = GenerateCsvFromArray($linha); + } + $dataRel[] = GenerateCsvFromArray(array('TMO', SecondToStrTime($somaDuracao) , '')); + + $dataRel[] = GenerateCsvFromArray(array('')); + $dataRel[] = GenerateCsvFromArray(array('Atendida', 'Nao Atendida', 'Geral')); + $dataRel[] = GenerateCsvFromArray(array($somaAtendida, $somaNAtendida, $somaReg)); + + $this->___dataRel[] = $dataRel; + } - $dataRel[] = $linha; - $dadosCabecalio = array( - 'Data', 'Hora', 'Origem', 'Tempo', 'Agente', 'Status' - ); + protected function ___PreparaExcel() { + $dataRel = array(); + $filtro = $this->___FiltrosRelatorio(); - $dadosField = array( - 'data', 'hora', 'origem', 'tmo', 'agente', 'status' - ); - - if ($mostraColunaServicos) { - $dadosCabecalio = array_merge(['Servico'], $dadosCabecalio); - $dadosField = array_merge(['serv_id'], $dadosField); - } + /* + * Inicia o relatório. + */ - $linha = array('LABEL'); - foreach ($dadosCabecalio as $value) { - $linha[] = $value; - } - $dataRel[] = $linha; - - $somaReg = 0; - $somaDuracao = 0; - $somaAtendida = 0; - $somaNAtendida = 0; - - /* - * Linhas de dados. - */ - foreach ($this->GetData()[0] as $row) { - $somaReg ++; - $somaDuracao += $row['tmo']; - $row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++; - - $row['hora'] = date('H:i:s', strtotime($row['data'])); - $row['data'] = date('d/m/Y', strtotime($row['data'])); - $row['tmo'] = SecondToStrTime($row['tmo']); - $row['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida"; + /* + * Cria os filtros + */ + $linha = array('LABEL'); + foreach ($filtro as $values) { + list($label, $value) = explode(":", $values); + $linha[] = $label; + } + $dataRel[] = $linha; $linha = array('DADOS'); - foreach ($dadosField as $key) { - $linha[] = $row["$key"]; + foreach ($filtro as $values) { + list($label, $value) = explode(":", $values); + $linha[] = $value; } $dataRel[] = $linha; - } - $dataRel[] = array('LABEL', 'DURAÇÃO', SecondToStrTime($somaDuracao), ''); - $dataRel[] = array('DADOS', ''); - $dataRel[] = array('LABEL', 'Atendida', 'Nao Atendida', 'Geral'); - $dataRel[] = array('DADOS', $somaAtendida, $somaNAtendida, $somaReg); - $this->___dataRel[] = $dataRel; - } + $dadosCabecalio = array( + 'Data', 'Hora', 'Origem', 'TMA', 'Agente', 'Status' + ); + $dadosField = array( + 'data', 'hora', 'origem', 'tmo', 'agente', 'status' + ); + $linha = array('LABEL'); + foreach ($dadosCabecalio as $value) { + $linha[] = $value; + } + $dataRel[] = $linha; - protected function ___PreparaGrid() { - - $dataRel = array(); - $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA; - - $dadosCabecalio = array( - 'Data' => 'align="center"', - 'Hora' => 'align="center"', - 'Origem' => 'align="center"', - 'DURAÇÃO' => 'align="center"', - 'Agente' => 'align="center"', - 'Status' => 'align="center"' - ); - - - $dadosField = array( - 'data' => 'align="center"', - 'hora' => 'align="center"', - 'origem' => 'align="center"', - 'tmo' => 'align="center"', - 'agente' => 'align="center"', - 'status' => 'align="center"' - ); - - if ($mostraColunaServicos) { - $dadosCabecalio = array_merge(['Serviço' => 'align="center"'], $dadosCabecalio); - $dadosField = array_merge(['serv_id' => 'align="left"'], $dadosField); - } + $somaReg = 0; + $somaDuracao = 0; + $somaAtendida = 0; + $somaNAtendida = 0; - /* - * Inicia o relatório. - */ - $dataRel[] = ''; - - /* - * Monta a linha de cabecalio. - */ - - $linha = ''; - $linha .= sprintf("", ($mostraColunaServicos ? '7' : '6')); - $linha .= ""; - $dataRel[] = $linha; - - /* - * Verifica se retornou dados - */ - if (!IsPostBack() || !count($this->GetData()[0])) { - $dataRel[] = sprintf("
Chamadas Recebidas por Agente
%s
", count(1) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!')); + /* + * Linhas de dados. + */ + foreach ($this->GetData()[0] as $row) { + $somaReg ++; + $somaDuracao += $row['tmo']; + $row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++; + + $row['hora'] = date('H:i:s', strtotime($row['data'])); + $row['data'] = date('d/m/Y', strtotime($row['data'])); + $row['tmo'] = SecondToStrTime($row['tmo']); + $row['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida"; + + $linha = array('DADOS'); + foreach ($dadosField as $key) { + $linha[] = $row["$key"]; + } + $dataRel[] = $linha; + } + $dataRel[] = array('LABEL', 'TMO', SecondToStrTime($somaDuracao) , ''); + + $dataRel[] = array('DADOS', ''); + $dataRel[] = array('LABEL', 'Atendida', 'Nao Atendida', 'Geral'); + $dataRel[] = array('DADOS', $somaAtendida, $somaNAtendida, $somaReg); + $this->___dataRel[] = $dataRel; - return; } - $linhaC = ""; - foreach ($dadosCabecalio as $key => $value) { - $linhaC .= sprintf("%s", $value, $key); - } - $linhaC .= ""; - $dataRel[] = $linhaC; - - $somaReg = 0; - $somaDuracao = 0; - $somaAtendida = 0; - $somaAtendidaServico = 0; - $somaNAtendida = 0; - $somaNAtendidaServico = 0; - $somaDuracaoServico = 0; - $srv = ""; - $oldSrv = ""; - $tmo = 0; - - $agrupaServico = function($row) use(&$somaDuracaoServico, &$somaAtendidaServico, &$somaNAtendidaServico, &$dataRel, &$srv, &$oldSrv) { - - $style = 'style="font-weight: bold; padding: 0; margin: 0; padding-left: 6px; padding-right: 6px; background-color: #4F71C0 !important"'; - $srv = $row["serv_id"]; - if (!$oldSrv) { - $oldSrv = $srv; - } - if ((($srv != $oldSrv)) || !$row) { + protected function ___PreparaGrid() { + $dataRel = array(); + + $dadosCabecalio = array( + 'Data' => 'align="center"', + 'Hora' => 'align="center"', + 'Origem' => 'align="center"', + 'TMA' => 'align="center"', + 'Agente' => 'align="center"', + 'Status' => 'align="center"' + ); + $dadosField = array( + 'data' => 'align="center"', + 'hora' => 'align="center"', + 'origem' => 'align="center"', + 'tmo' => 'align="center"', + 'agente' => 'align="center"', + 'status' => 'align="center"' + ); - $dataRel[] = sprintf("Total [%s] DURAÇÃO%sATENDIDAS / NA%s / %s", $oldSrv, SecondToStrTime($somaDuracaoServico), $somaAtendidaServico, $somaNAtendidaServico); - $oldSrv = $srv; - $somaDuracaoServico = 0; - $somaAtendidaServico = 0; - $somaNAtendidaServico = 0; - } + /* + * Inicia o relatório. + */ + $dataRel[] = ''; - $somaDuracaoServico += $row['tmo']; - $row['status'] == 1 ? $somaAtendidaServico++ : $somaNAtendidaServico++; - }; + /* + * Monta a linha de cabecalio. + */ - /* - * Linhas de dados. - */ - foreach ($this->GetData()[0] as $row) { + $linha = ''; + $linha .= ""; + $linha .= ""; + $dataRel[] = $linha; - if ($mostraColunaServicos) { - $agrupaServico($row); + /* + * Verifica se retornou dados + */ + if (!IsPostBack() || !count($this->GetData()[0])) { + $dataRel[] = sprintf("
Chamadas Recebidas por Agente
%s
", count(1) - 1, (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!')); + $this->___dataRel[] = $dataRel; + return; } - $somaReg ++; - $somaDuracao += $row['tmo']; - $row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++; - $row['origem'] = ocultarTelefone($row['origem']); - $row['hora'] = date('H:i:s', strtotime($row['data'])); - $row['data'] = date('d/m/Y', strtotime($row['data'])); - $row['tmo'] = SecondToStrTime($row['tmo']); - $row['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida"; - - $linha = ""; - foreach ($dadosField as $key => $value) { - $linha .= sprintf("%s", $value, $row["$key"]); + + $linhaC = ""; + foreach ($dadosCabecalio as $key => $value) { + $linhaC .= sprintf("%s", $value, $key); } + $linhaC .= ""; + $dataRel[] = $linhaC; + $somaReg = 0; + $somaDuracao = 0; + $somaAtendida = 0; + $somaNAtendida = 0; + /* + * Linhas de dados. + */ + foreach ($this->GetData()[0] as $row) { + + $somaReg ++; + $somaDuracao += $row['tmo']; + $row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++; + $row['origem'] = ocultarTelefone($row['origem']); + $row['hora'] = date('H:i:s', strtotime($row['data'])); + $row['data'] = date('d/m/Y', strtotime($row['data'])); + $row['tmo'] = SecondToStrTime($row['tmo']); + $row['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida"; + + $linha = ""; + foreach ($dadosField as $key => $value) { + $linha .= sprintf("%s", $value, $row["$key"]); + } + $linha .= ""; + $dataRel[] = $linha; + } - $linha .= ""; + $linhaGeral = 'TMO: %s'; + $dataRel[] = sprintf($linhaGeral, SecondToStrTime($somaDuracao)); + /* + * Fecha relatorio. + */ + $dataRel[] = ''; + + $linha = '
'; + $linha .= ""; + $linha .= "" + . "" + . "" + . "" + . "" + . "" + . "" + . ""; + $linha .= '
Totalizador
Atendida: $somaAtendida
Não Atendida:$somaNAtendida
Geral:$somaReg
'; $dataRel[] = $linha; - } - if ($mostraColunaServicos) { - $agrupaServico(false); - } - - $linhaGeral = 'TOTAL GERALDURAÇÃO%sATENDIDAS / NA%s / %s'; - $dataRel[] = sprintf($linhaGeral, ($mostraColunaServicos ? '3' : '2'), SecondToStrTime($somaDuracao), $somaAtendida, $somaNAtendida); - /* - * Fecha relatorio. - */ - $dataRel[] = ''; - - $linha = '
'; - $linha .= ""; - $linha .= "" - . "" - . "" - . "" - . "" - . "" - . "" - . ""; - $linha .= '
Totalizador
Atendida: $somaAtendida
Não Atendida:$somaNAtendida
Geral:$somaReg
'; - $dataRel[] = $linha; - - $this->___dataRel[] = $dataRel; - } - protected function ___PreparaHtml() { - - } - - protected function ___PreparaPdf() { - - list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"]; - $mostraColunaServicos = GetUsoServico() == RELATORIO_SERVICOS_HABILITA; - - $dadosCabecalio = array( - 'Data' => 'C', - 'Hora' => 'C', - 'Origem' => 'C', - 'Tempo' => 'C', - 'Agente' => 'C', - 'Status' => 'C' - ); - $dadosField = array( - 'data' => 'C', - 'hora' => 'C', - 'origem' => 'C', - 'tmo' => 'C', - 'agente' => 'C', - 'status' => 'C' - ); - - if ($mostraColunaServicos) { - $dadosCabecalio = array_merge(['Serviço' => 'C'], $dadosCabecalio); - $dadosField = array_merge(['serv_id' => 'C'], $dadosField); + $this->___dataRel[] = $dataRel; } - $dados = $this->GetData()[0]; - $somaReg = 0; - $somaDuracao = 0; - $somaAtendida = 0; - $somaNAtendida = 0; - $x = 0; - - $somaAtendidaServico = 0; - $somaNAtendidaServico = 0; - $somaDuracaoServico = 0; - $srv = ""; - $oldSrv = ""; - $dadosTable = []; - - $agrupaServico = function($row) use(&$somaDuracaoServico, &$somaAtendidaServico, &$somaNAtendidaServico, &$dadosTable, &$srv, &$oldSrv) { - - $srv = $row["serv_id"]; - if (!$oldSrv) { - $oldSrv = $srv; - } - if ((($srv != $oldSrv)) || !$row) { - $data = []; - - $data['serv_id'] = ' '; - $data['data'] = 'TOTAL'; - $data['hora'] = ' '; - $data['origem'] = 'Duração'; - $data['tmo'] = SecondToStrTime($somaDuracaoServico); - $data['agente'] = 'ATENDIDAS / NA'; - $data['status'] = "$somaAtendidaServico / $somaNAtendidaServico"; - $data['cor_linha_dados'] = "225"; - - $oldSrv = $srv; - $somaDuracaoServico = 0; - $somaAtendidaServico = 0; - $somaNAtendidaServico = 0; - $dadosTable[] = $data; - } - - $somaDuracaoServico += $row['tmo']; - $row['status'] == 1 ? $somaAtendidaServico++ : $somaNAtendidaServico++; - }; + protected function ___PreparaHtml() { + + } + protected function ___PreparaPdf() { + list($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio) = $_SESSION["SSstorageFiltros"]; - /* - * Linhas de dados. - */ - foreach ($dados as $row) { + $dadosCabecalio = array( + 'Data' => 'C', + 'Hora' => 'C', + 'Origem' => 'C', + 'TMA' => 'C', + 'Agente' => 'C', + 'Status' => 'C' + ); + $dadosField = array( + 'data' => 'C', + 'hora' => 'C', + 'origem' => 'C', + 'tmo' => 'C', + 'agente' => 'C', + 'status' => 'C' + ); + + $dados = $this->GetData()[0]; + $somaReg = 0; + $somaDuracao = 0; + $somaAtendida = 0; + $somaNAtendida = 0; + $x = 0; - if ($mostraColunaServicos) { - $agrupaServico($row); + /* + * Linhas de dados. + */ + foreach ($dados as $row) { + $somaReg ++; + $somaDuracao += $row['tmo']; + $dados[$x]['status'] == 1 ? $somaAtendida++ : $somaNAtendida++; + + $dados[$x]['hora'] = date('H:i:s', strtotime($row['data'])); + $dados[$x]['data'] = date('d/m/Y', strtotime($row['data'])); + $dados[$x]['tmo'] = SecondToStrTime($row['tmo']); + $dados[$x]['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida"; + $x++; } - $somaReg ++; - $somaDuracao += $row['tmo']; - - $row['hora'] = date('H:i:s', strtotime($row['data'])); - $row['data'] = date('d/m/Y', strtotime($row['data'])); - $row['tmo'] = SecondToStrTime($row['tmo']); - $row['status'] = $row['status'] == 1 ? "Atendida" : "Não Atendida"; - $row['status'] == 1 ? $somaAtendida++ : $somaNAtendida++; - $dadosTable[] = $row; - } - - if ($mostraColunaServicos) { - $agrupaServico(false); - $widthHeader = array(26, 26, 26, 26, 26, 26, 26); - } else { - $widthHeader = array(26, 26, 26, 26, 26, 26); + $widthHeader = array(32, 32, 32, 32, 32, 32); + $totaliza = array('TMO', SecondToStrTime($somaDuracao), '', '', '', ''); + $table = array($dadosCabecalio, $dadosField, $dados, $widthHeader, $totaliza, 0); + + $legendaCabecalio = array( + "Atendida" => 'C', + "Não Atendida" => 'C', + 'Geral' => 'C' + ); + + $legendaField = array( + 1 => 'C', + 2 => 'C', + 3 => 'C' + ); + + $legDadosField = array(array( + 1 => $somaAtendida, + 2 => $somaNAtendida, + 3 => $somaReg + ) + ); + + $legendaHeader = array(31, 31, 31); + $table2 = array($legendaCabecalio, $legendaField, $legDadosField, $legendaHeader, 0, 1); + $this->___dataRel = array($table, $table2); } - $totaliza = $mostraColunaServicos ? array('DURAÇÃO', SecondToStrTime($somaDuracao), '', '', '', '', '') : array('DURAÇÃO', SecondToStrTime($somaDuracao), '', '', '', ''); - $table = array($dadosCabecalio, $dadosField, $dadosTable, $widthHeader, $totaliza, 0); - - $legendaCabecalio = array( - "Atendida" => 'C', - "Não Atendida" => 'C', - 'Geral' => 'C' - ); - - $legendaField = array( - 1 => 'C', - 2 => 'C', - 3 => 'C' - ); - - $legDadosField = array(array( - 1 => $somaAtendida, - 2 => $somaNAtendida, - 3 => $somaReg - ) - ); - - $legendaHeader = array(31, 31, 31); - $table2 = array($legendaCabecalio, $legendaField, $legDadosField, $legendaHeader, 0, 1); - $this->___dataRel = array($table, $table2); - } - protected function ___GetAgente() { + protected function ___GetAgente() { - $result = $this->GetData()[1]; + $result = $this->GetData()[1]; - $row = ""; + !$result ? $row .= "" : $row .= ""; + foreach ($result as $agentes) { + $sel = $this->___agente == $agentes['matricula'] ? "selected" : ''; + $row .= sprintf("", $agentes['matricula'], $agentes['apelido']); + } + $row .= ""; + return $row; } - $row .= ""; - return $row; - } - public function ExecutaRelatorio() { - global $jsStartup, $jsJQuery, $smarty; - try { - /* - * Use esta função para validar dados do formulário. - */ - $this->___ValidaForm(); + public function ExecutaRelatorio() { + global $jsStartup, $jsJQuery, $smarty; + try { + /* + * Use esta função para validar dados do formulário. + */ + $this->___ValidaForm(); + + /* + * 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(); + } /* - * Recupera os dados do banco. + * Inclua os scripts necessários aqui. */ - $this->___ConteudoRelatorio(); + $jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) "; + $jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) "; - /* - * 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(); + $smarty->assign('filtros', $this->___FiltrosRelatorio()); + $smarty->assign('conteudo', $conteudoRelatorio); + $smarty->assign('msg', $this->GetMsg()); + GetTemplate($smarty, 'relatoriosGrid.tpl'); } - $legendas = '* C.I.E.I.V: CHAMADAS INTERNAS/EMERGENCIA/INTERNACIONAL/VOIP.'; - - /* - * 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('legendas', $legendas); - $smarty->assign('msg', $this->GetMsg()); - GetTemplate($smarty, 'relatoriosGrid.tpl'); } -} - -$relRecebidasAgente = new RelRecebidasAgenteSrv($idProg, $dbcon, 1); -$relRecebidasAgente->ExecutaRelatorio(); + $relRecebidasAgente = new RelRecebidasAgente($idProg, $dbcon, 1); + $relRecebidasAgente->ExecutaRelatorio(); ?> diff --git a/scriptApl/functions15.js b/scriptApl/functions15.js index 860a3be..2c5e9f6 100644 --- a/scriptApl/functions15.js +++ b/scriptApl/functions15.js @@ -889,7 +889,7 @@ function ClassificaRegistraRt() var listaClasItem = document.getElementById("listaClasItem"); var classNome = listClas.options[listClas.selectedIndex].text; var proto = ''; - if ((classNome.toUpperCase() == 'VENDA') && ExigeProtoExt()) + if ((classNome.toUpperCase() == 'VENDA' || classNome.toUpperCase() == 'PROTOCOLO') && ExigeProtoExt()) { proto = soNumero(prompt('Informe o Protocolo', '')); @@ -3298,4 +3298,15 @@ function ComplementoCampanha() { ; } +} + +function SelectRel(prog){ + $.ajax({ + url: 'index.php?a=1&idProg=' + prog + "&slc=" + $('#campanha').val(), + type: 'GET', + success: function (res) { + $('#lista option').remove() + $('#lista').append(res) + } + }) } \ No newline at end of file