Browse Source

Merge pull request 'dev' (#8) from dev into lucas

Reviewed-on: amarildo.pereira/pabx-app#8
master
AMARILDO PEREIRA 2 years ago
parent
commit
6e63605ff3
  1. 2
      .gitignore
  2. 89
      admin/cadQgrupos.php
  3. 2
      admin/queues.php
  4. 73
      admin/usuarios.php
  5. 484
      agente/agenteAnota.php
  6. 12
      agente/agentert.php
  7. 2
      asterisk/var_lib_asterisk/scripts/abandonadas/retornoAbandonada.php
  8. 78
      asterisk/var_lib_asterisk/scripts/integracao/abdAgi.php
  9. 2
      cadastros/pesquisa/pesquisaFuncoes.php
  10. 267
      cadastros/pesquisa/pesquisaRel.php
  11. 58
      configGeral.php
  12. 15
      discador/campanha/processaLista.php
  13. 233
      doc/lgpd/TERMO DE USO E PRIVACIDADE APLICAÇÃO SIMPLES V_FINAL.txt
  14. BIN
      imgSite/Coração.png
  15. 49
      include/configBd.php~
  16. 4
      include/configs/config.php
  17. 2
      include/util/util.php
  18. 8
      login.php
  19. 30
      master.css
  20. 0
      nbproject/private/config.properties
  21. 8
      nbproject/private/private.properties
  22. 18
      nbproject/private/private.xml
  23. 7
      nbproject/project.properties
  24. 9
      nbproject/project.xml
  25. 90
      templates/callcenter/agente/agenteAnota.tpl
  26. 2
      templates/callcenter/agente/agentert.tpl
  27. 8
      templates/configSys.tpl

2
.gitignore vendored

@ -3,3 +3,5 @@ templates_c
integracao/arquivoCampanha
cadastro/licenca/*.lca
cadastro/licenca/tmp/*.lca
nbproject
audios

89
admin/cadQgrupos.php

@ -231,7 +231,6 @@
$exige_classificacao = $_POST["exige_classificacao"];
$justificativa_pausa = $_POST["justificativa_pausa"];
$retornar_abandonadas = isset($_POST["retornar_abandonadas"]) ? $_POST["retornar_abandonadas"] : 0;
$libera_pausa = isset($_POST['libera_pausa']) ? $_POST['libera_pausa'] : 0;
if ($acao == "inseri") {
if (strtoupper($nome) != 'TODOS') {// VERIFICA NOME DA FILA <> TODOS
@ -251,13 +250,13 @@
if (!$row[0] && !$row[1]) {
$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, disponivelfila, libera_pausa)
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, '$disponivelfila', '$libera_pausa')";
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, 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, '$disponivelfila')";
pg_query($dbcon, $query);
$query2 = "select id from pbx_queues_grupos order by id desc limit 1";
@ -298,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,disponivelfila = '$disponivelfila',libera_pausa = '$libera_pausa',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);
@ -425,69 +424,44 @@
$justificativa_pausa = $dados["justificativa_pausa"];
$exige_classificacao = $dados["exige_classificacao"];
$retornar_abandonadas = $dados["retornar_abandonadas"];
$libera_pausa = $dados['libera_pausa'];
}
if (!isset($monitor_format)) {
$monitor_format = "wav49";
}
}
?>
<form action="index.php?idProg=11002&pbxRequest=1&acao=<?php echo $acao; ?>&acao2=salva<?php echo $param ?>" onsubmit="return Verify();" method="post" name="form1" target="_self" id="form1">
<table width="750" height="335" border="1" align="center" cellpadding="0" cellspacing="0" class="tabela" style="min-width: 760px; width: 860px;">
<tr bordercolor="#EAEAEA" class="cabecalho" background="img/button03.gif">
<td height="18" colspan="4" class="cabecalho">
<div align="center">CADASTRO DE FILAS
<td height="18" colspan="4" class="cabecalho"><div align="center">CADASTRO DE FILAS
<input name="id" type="hidden" id="id2" value="<?php
if ($acao == 'edita') {
echo $id;
}
?>" />
</div>
</td>
</div></td>
</tr>
<tr bordercolor="#EAEAEA" bgcolor="#EAEAEA">
<td height="21" colspan="4" class="labels">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<td height="21" colspan="4" class="labels"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<fieldset>
<td><fieldset>
<legend class="labels">Nome:</legend>
<input name="nome" type="text" class="validate[required,length[0,100]] caixas" id="nome2" value="<?php
if ($acao == 'edita') {
echo $nome . '"'. 'disabled="disabled' ;
}
?>" />
</fieldset>
</td>
<td>
<fieldset>
</fieldset></td>
<td><fieldset>
<legend class="labels">N&uacute;mero:</legend>
<input name="numero" type="text" class="validate[required,custom[onlyNumber],length[0,100]] caixas" id="numero6" value="<?php
if ($acao == 'edita') {
echo $numero;
}
?>" />
</fieldset>
</td>
<td>
<fieldset>
<legend class="labels">Liberar Pausa <span title="PAUSA QUE O AGENTE NÃO PODERA REMOVER"><b>(?)</b></span></legend>
<?php
$query = "SELECT CASE WHEN (produtiva = 1) THEN motivo || '(PRODUTIVA)' ELSE motivo END AS motivo FROM pbx_motivos_pausas WHERE flag = 1";
$result = pg_query($dbcon, $query);
$motivos_pausa = pg_fetch_all($result);
?>
<select name="libera_pausa" class="caixas">
<option value="0">-----------</option>
<?php foreach($motivos_pausa as $v) { ?>
<option value="<?= str_replace('(PRODUTIVA)', '', $v['motivo']) ?>"><?= $v['motivo'] ?></option>
<?php } ?>
</select>
</fieldset>
</td>
<td>
<fieldset>
</fieldset></td>
<td><fieldset>
<legend class="labels">M&uacute;sica de Espera:</legend>
<input name="m_espera" id="m_espera" onclick="HablitaMusica();" type="radio" value="V" <?php
if ($acao == 'edita') {
@ -507,10 +481,8 @@
}
?> />
N&atilde;o
</fieldset>
</td>
<td>
<fieldset>
</fieldset></td>
<td><fieldset>
<legend class="labels">Classe de M&uacute;sica:</legend>
<select name="musicclass" id="musicclass" class="caixas" >
<option value="" selected>------------</option>
@ -529,21 +501,15 @@
?>><?php echo $dados2['nome']; ?></option>
<?php } ?>
</select>
</fieldset>
</td>
</fieldset></td>
</tr>
</table>
</td>
</table></td>
</tr>
<tr bordercolor="#EAEAEA" bgcolor="#EAEAEA">
<td height="21" colspan="4" class="labels">
<div align="right"></div>
<div align="right">
<td height="21" colspan="4" class="labels"><div align="right"></div> <div align="right">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<fieldset>
<td><fieldset>
<legend class="labels">Estrat&eacute;gia:</legend>
<div align="left">
<select name="strategy" class="validate[optional] caixas" id="strategy">
@ -619,15 +585,12 @@
</td>
</tr>
</table>
</div>
</td>
</div></td>
</tr>
<tr bordercolor="#EAEAEA" bgcolor="#EAEAEA">
<td height="16" colspan="4" bordercolor="#EAEAEA" bgcolor="#EAEAEA" class="labels">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<td height="16" colspan="4" bordercolor="#EAEAEA" bgcolor="#EAEAEA" class="labels"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="25%">
<fieldset>
<td width="25%"><fieldset>
<legend class="labels">Ligações sem Agentes?:</legend>
<input name="joinempty" type="radio" value="yes" <?php
if ($acao == 'edita') {

2
admin/queues.php

@ -68,7 +68,7 @@ if ($acao == "deleta") {
</table>
</td>
<td align="right" nowrap="nowrap">
<a href="#" onclick="NovaJanela('index.php?idProg=11002&pbxRequest=1&acao=inseri<?= $filtroNovo; ?>&status=<?= $status?>', 'CadFila', '880', '560.', 'resizable=YES,scrollbars=YES');"><img src="admin/images/novo.gif" width="20" height="20" border="0" align="absmiddle">NOVA FILA </a>
<a href="#" onclick="NovaJanela('index.php?idProg=11002&pbxRequest=1&acao=inseri<?= $filtroNovo; ?>&status=<?= $status?>', 'CadFila', '780', '560.', 'resizable=YES,scrollbars=YES');"><img src="admin/images/novo.gif" width="20" height="20" border="0" align="absmiddle">NOVA FILA </a>
</td>
</tr>

73
admin/usuarios.php

@ -1,12 +1,10 @@
<?php
<?
$acao = isset($_GET['acao']) ? trim($_GET['acao']) : 'select';
$id = isset($_GET['id']) ? trim($_GET['id']) : 0;
$filtro = isset($_GET["numRamal"]) ? trim($_GET["numRamal"]) : '';
$filtroNovo = !isset($_GET["pgn"]) ? '' : sprintf("&numRamal%s&pgn=%s&bloco=%s&pg=%s", $_GET["numRamal"], $_GET["pgn"], $_GET["bloco"], $_GET["pg"]);
$recontaPag = ($acao == 'inseri') || ($acao == "deleta") || isset($_GET['pesquisa']);
$statusAtivo = $_REQUEST["status"] ? trim($_REQUEST["status"]) : 'T';
if ($acao == "deleta") {
$query = "update pbx_cs_usuarios set status = 'D' where matricula='$id'";
$queryRpl = 'insert into pbx_replica(rpl_command, rpl_user, rpl_origem) values(%s, %s, %s)';
@ -44,43 +42,26 @@
$msg = $ex->getMessage();
$jsStartup[] = "alert('$msg');";
}
}
?>
?>
<? } ?>
<table width="99%" align="center" border="0" cellpadding="2" cellspacing="0" class="filtro">
<tr>
<td>
<table class="filtro" border="0" cellpadding="2" cellspacing="0">
<tr>
<td>Palavra Chave</td>
<td colspan="3">Filtro Status</td>
</tr>
<tr>
<td>
<input name="numRamal" type="text" id="numRamal" value="<?= $_GET["numRamal"]; ?>" onkeyup="ConsultaRamal('index.php?idProg=10028&pbxRequest=1', event);" size="20">
</td>
<td align="left" nowrap="nowrap">
<div class="geral" nowrap="nowrap">
<input name="status" class="clean" type="radio" value="T" <?= $statusAtivo == "T" ? 'checked' : '' ?>> Todos
<input name="status" class="clean" type="radio" value="A" <?= $statusAtivo == "A" ? 'checked' : '' ?>> Ativa
<input name="status" class="clean" type="radio" value="D" <?= $statusAtivo == "D" ? 'checked' : '' ?>> Desativada
</div>
</td>
<td>
<input name="locaRamal" type="submit" id="locaRamal" value="Localizar" >
</td>
<td align="right" width="80%" nowrap="nowrap">
<a href="#" onclick="abre_janela('700', '520', 'index.php?idProg=11028&pbxReqREQUESTuest=1&acao=inseri&acao2=novo<?php echo $filtroNovo; ?>');"><img src="admin/images/novo.gif" width="20" height="20" border="0" align="absmiddle">NOVA CONTA </a>
</td>
</tr>
</table>
<td colspan="2">Palavra Chave</td>
</tr>
<tr>
<td align="left" nowrap="nowrap" >
<input name="numRamal" type="text" id="numRamal" value="<? echo $_GET["numRamal"]; ?>" onkeyup="ConsultaRamal('index.php?idProg=10028&pbxRequest=1', event);" size="20">
<input name="locaRamal" type="button" id="locaRamal" value="Localizar" onClick="ConsultaRamal('index.php?idProg=10028&pbxRequest=1&pesquisa=1', 0);">
</td>
<td align="right" nowrap="nowrap">
<a href="#" onclick="abre_janela('700', '520', 'index.php?idProg=11028&pbxRequest=1&acao=inseri&acao2=novo<?php echo $filtroNovo; ?>');"><img src="admin/images/novo.gif" width="20" height="20" border="0" align="absmiddle">NOVA CONTA </a>
</td>
</tr>
<tr>
<td colspan="2">
<table width="100%" class="grid" border="0" cellspacing="0" cellpadding="2">
<table width="100%" class="grid" border="0" cellspacing="0" cellpadding="2">
<tr>
<th align="center">Id</th>
<th>Nome</div></th>
@ -91,7 +72,7 @@
<th>Status</th>
<th align="center">Ações</th>
</tr>
<?php
<?
$janW = '500';
$janH = '400';
@ -100,10 +81,6 @@
$compl = PreparaLike($filtro, true);
$compl = sprintf("and (a.nome ilike %s or a.apelido ilike %s or a.matricula::text ilike %s)", $compl, $compl, $compl);
}
if($statusAtivo == "A" || $statusAtivo == "D"){
$compl .= " AND a.status = '$statusAtivo' ";
}
$query = "select a.id, a.nome, a.apelido, a.matricula, b.nome as empresa, c.nome_depto as departamento, a.status
from pbx_cs_usuarios a, pbx_empresa b, pbx_departamentos c
@ -120,15 +97,15 @@
while ($dados = pg_fetch_array($result)) {
?>
<tr>
<td width="50" align="center"><?= $dados['id']; ?></td>
<td width="50" align="center"><? echo $dados['id']; ?></td>
<td><a href="#" style="color: #000;" onclick="abre_janela('700', '520', 'index.php?idProg=11028&pbxRequest=1&acao=edita&id=<? echo $dados['id']; ?><? echo $params; ?>');"><? echo $dados['nome']; ?></a></td>
<td><?= $dados['apelido']; ?></td>
<td><?= $dados['matricula']; ?></td>
<td><?= $dados['empresa']; ?></td>
<td><?= $dados['departamento']; ?></td>
<td><? echo $dados['apelido']; ?></td>
<td><? echo $dados['matricula']; ?></td>
<td><? echo $dados['empresa']; ?></td>
<td><? echo $dados['departamento']; ?></td>
<td align="center" width="20">
<div align="center">
<?= GetStatusModulo($dados['status']); ?>
<? echo GetStatusModulo($dados['status']); ?>
</div>
</td>
<td width="40">
@ -136,21 +113,21 @@
<tr>
<td style="border:0"><div align="center"><a href="#" onclick="abre_janela('700', '520', 'index.php?idProg=11028&pbxRequest=1&acao=edita&id=<? echo $dados['id']; ?><? echo $params; ?>');"><img src="images/edit.gif" title="EDITAR O USUÁRIO:<? echo $dados['nome']; ?>" width="16" height="16" border="0"></a></div></td>
<?php if ($dados['status'] == "A") { ?>
<? if ($dados['status'] == "A") { ?>
<td style="border:0"><div align="center"><a href="#" onclick="excluir('<? echo $dados['id']; ?>', '<? echo $dados['nome']; ?>', 'DESEJA REALMENTE DESABILITAR O USUÁRIO:<? echo $dados['nome']; ?>', 'index.php?idProg=10028&pbxRequest=1&acao=deleta&id=<? echo $dados['matricula']; ?><? echo $params; ?>', 'USUARIOS');"><img src="images/delete.gif" title="DESABILITAR O USUÁRIO:<? echo $dados['nome']; ?>" width="16" height="16" border="0"></a></div></td>
<?php } ?>
<? } ?>
</tr>
</table>
</td>
</tr>
<?php
<?
$z++;
} if ($z == 0) {
?>
<tr align="center" valign="middle" bordercolor="#999999" class="labels">
<td colspan="8"><div align="center" class="info"><img src="images/shutdown.gif" width="24" height="24" border="0" align="absmiddle" /> Não foram encontrados registros </div></td>
</tr>
<?php
<?
}
?>
<tr>

484
agente/agenteAnota.php

@ -1,370 +1,126 @@
<?php
$tpLayout = 1;
include_once 'util/relatoriosBase.php';
class AgenteAnota extends Relatorios {
private $___consultar;
private $___validar;
private $___agenteAnota;
private $___agenteFone;
private $___listaAgente;
private $___matricula;
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
$this->___consultar = isset($_POST["btPesquisa"]);
$this->___validar = isset($_POST["btAnota"]) && (trim($_POST["AnotaTexto"]) != "");
$this->___agenteAnota = isset($_POST["AnotaTexto"]) ? $_POST["AnotaTexto"] : "";
$this->___agenteFone = isset($_POST["AnotaFone"]) ? soNumero($_POST["AnotaFone"]) : (isset($_SESSION[RAMAL_DESTINO]) ? soNumero($_SESSION[RAMAL_DESTINO]) : '');
$this->___listaAgente = isset($_POST["listaAgente"]) ? $_POST["listaAgente"] : GetMatricula();
$this->___dataIni = IsPostBack() ? $_POST['dataIni'] : date('d/m/Y');
$this->___dataFim = IsPostBack() ? $_POST['dataFim'] : date('d/m/Y');
$this->___matricula = GetMatricula();
}
function ___ValidaForm() {
if (!is_date($this->___dataIni) && empty($this->___agenteFone)) {
GeraExcept('A "Data Inicial" informada é inválida!');
}
if (!is_date($this->___dataFim) && empty($this->___agenteFone)) {
GeraExcept('A "Data Final" informada é inválida!');
}
if (!$this->___consultar && $this->___validar && empty($this->___agenteFone)) {
$msg = GetAnotacoesKey() ? "Informe o número do telefone!" : "Informe o número do protocolo!";
GeraExcept($msg);
}
if($this->___validar && !$this->___consultar){
$this->___InserirAnotacao();
}
}
function ___FiltrosRelatorio() {
if ($this->___media != MEDIA_PRINT_GRID) {
/*
* Recupera os filtros da sess�o do usu�rio.
*/
list($this->___dataIni, $this->___dataFim, $this->___agenteFone) = $_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 Hora Emissao: " . date('d/m/Y H i s)');
$fltCsv[] = "Emitido Por: " . GetLogin();
return $fltCsv;
}
$lkPrint = "";
if ($this->___dataCount) {
$prt = '<a href="index.php?idProg=%s&media=%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', '%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, 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');
}
$filtro .= '<table border="0" align="center" cellpadding="8" cellspacing="0" style="border-top:0;font-size:12px;" >
<tr>
<td align="center">
<span style="font-face:Arial, Helvetica, sans-serif; font-size:16px; font-weight:bold;">
<img src="imgSite/anotacoes.png" alt="Bloco de Anota&ccedil;&otilde;es" align="absmiddle" width="32" height="32" border="0" title="Bloco de Anota&ccedil;&otilde;es">
Bloco de Anotações
</span>
</td>
</tr>
</table>';
/*
* Personalise esta função se necessitar de outras opções de filtro.
*/
$filtro .= '<table class="filtro" align="center" border="0" cellspacing="1" cellpadding="1">';
/*
* Rotulos.
*/
$filtro .= '<tr>';
$filtro .= IsSuper() ? '<td>Agentes</td>' : '';
$filtro .= '<td>Agentes</td>';
$filtro .= '<td>Data Inicial </td>';
$filtro .= '<td>Data Final </td>';
$filtro .= sprintf('<td>%s</td>', GetAnotacoesKey() ? 'Fone' : $_SESSION['prm_label_protoco_pesquisa']);
/*
* Valores.
*/
$filtro .= '<tr>';
$filtro .= IsSuper() ? sprintf("<td><select name='listaAgente'>%s</select></td>", $this->GetAgentesAnotacoes($this->___listaAgente)) : '';
$filtro .= sprintf("<td><select name='listaAgente'>%s</select></td>", $this->GetAgentesAnotacoes($this->___listaAgente));
$filtro .= '<td><input name="dataIni" id="dataIni" type="text" size="15" maxlength="16" value="%s" onkeyup="formataDataHora(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><input name="dataFim" id="dataFim" type="text" size="15" maxlength="16" value="%s" onkeyup="formataDataHora(this)" title="dd/mm/aaaa"></td>';
$filtro .= '<td><div> ';
$filtro .= sprintf('<input name="AnotaFone" size="20" type="text" id="AnotaFone" value="%s">'
. '<input name="btPesquisa" type="submit" id="btPesquisa" value="Pesquisar">'
. '<input name="btAnota" type="submit" id="btAnota" value="Salvar">', $this->___agenteFone);
$filtro .= '</div></td>';
$filtro .= '<td>%s</td>';
$filtro .= '</tr>';
$filtro .= '</table>';
$filtro .= "<br>";
$filtro .= '<table class="grid" align="center" border="0" cellspacing="1" cellpadding="1">';
$filtro .= "<tr><td class='destaque'>{$_SESSION['prm_label_protoco_texto']}</td></tr>";
$filtro .= "<tr>";
$filtro .= "<td><textarea name='AnotaTexto' cols='114' rows='8' id='AnotaTexto'></textarea></td>";
$filtro .= "</tr>";
$filtro .= "</table>";
/*
* Guarda os filtros passados para recuperar na emiss�o dos relat?ios para impress�o.
*/
$_SESSION["SSstorageFiltros"] = array($this->___dataIni, $this->___dataFim, $this->___agenteFone);
return sprintf($filtro, $this->___dataIni, $this->___dataFim, $lkPrint);
}
protected function ___GetDadosDb() {
$dataIni = FormatDtMssql($this->___dataIni);
$dataFim = FormatDtMssql($this->___dataFim);
$query = sprintf("SELECT a.id_text, a.conteudo, a.matricula_agente, a.fone_cliente, a.data, b.apelido
FROM pbx_anotacoes a
INNER JOIN pbx_usuarios b ON b.matricula = a.matricula_agente::text
WHERE data::DATE >= '$dataIni' AND data::DATE <= '$dataFim'");
if(empty($this->___agenteFone)){
$query .= $this->___listaAgente ? " AND a.matricula_agente::text = '$this->___listaAgente' " : "";
}
$query .= " AND fone_cliente LIKE '%$this->___agenteFone%'";
$query .= " ORDER BY b.apelido, a.data DESC";
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
}
protected function ___PreparaCsv() {
}
protected function ___PreparaExcel() {
$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('ID','Data', RemoveAcentos($_SESSION['prm_label_protoco_pesquisa']), 'Mensagem','Autor');
$dadosField = array('id_text', 'data', 'fone_cliente', 'conteudo', 'apelido');
/*
* 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["data"] = date('d/m/Y', strtotime($row["data"]));
$row["conteudo"] = RemoveAcentos($row['conteudo']);
// Formata linha de dados.
$linha = array('DADOS');
foreach ($dadosField as $key) {
$linha[] = $row["$key"];
}
$dataRel[] = $linha;
}
$dataRel[] = $linha;
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaGrid() {
$dadosCabecalio = array(
'ID' => 'align="center"',
'Data' => 'align="center"',
$_SESSION['prm_label_protoco_pesquisa'] => 'align="center"',
'Mensagem' => 'align="left"',
'Autor' => 'align="center"',
);
$dadosField = array(
'id_text' => 'align="center"',
'data' => 'align="center"',
'fone_cliente' => 'align="center"',
'conteudo' => 'align="left"',
'apelido' => 'align="center"',
);
/*
* Inicia o relat�rio.
*/
$dataRel[] = '<table width="99%" 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), (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$this->___dataRel[] = $dataRel;
return;
}
$somaQuantidade = 0;
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$row["data"] = date('d/m/Y', strtotime($row["data"]));
// 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 de totalizacao.
*/
//$linha = '<tr><th colspan="2" align="left">Total</th><th align="left" colspan="2">Registros: %s</th><th align="left" colspan="6">Duração: %s</th></tr>';
//$dataRel[] = sprintf($linha, $somaQuantidade, SecondToStrTime($somaTempo));
/*
* Fecha relatorio.
*/
$dataRel[] = '</table>';
$this->___dataRel[] = $dataRel;
}
protected function ___PreparaHtml() {
}
protected function ___PreparaPdf() {
}
private function ___InserirAnotacao(){
if ($this->___validar && empty($this->___agenteAnota)) {
GeraExcept("Insira uma anotação!");
}
$query = "SELECT * FROM pbx_anotacoes WHERE conteudo = '{$this->___agenteAnota}' AND fone_cliente = '{$this->___agenteFone}';";
$res = $this->___GetQuery($query);
if(pg_fetch_assoc($res)){
GeraExcept('Essas informações já foram registradas!');
}
$query = "INSERT INTO pbx_anotacoes (conteudo,matricula_agente,fone_cliente) VALUES('$this->___agenteAnota', '$this->___matricula', '$this->___agenteFone');";
$result = $this->___GetQuery($query);
if(!$result){
GeraExcept('Não foi possível inserir o registro');
}
}
private function GetAgentesAnotacoes($matricula) {
$query = "SELECT id, apelido, nome, matricula FROM pbx_usuarios WHERE delete_ = 0 AND apelido NOT IN('sinccontasenha') ORDER BY apelido"; //'admin',
$result = $this->___GetQuery($query);
$sel = $matricula == "0" ? ' Selected="selected" ' : '';
$item = "<option value=\"0\"$sel>Todos</option>\n";
while ($dados = pg_fetch_array($result, null, PGSQL_ASSOC)) {
$mat = $dados['matricula'];
$apelido = $dados['apelido'];
$sel = $mat == $matricula ? ' Selected="selected" ' : '';
$item .= "<option value=\"$mat\"$sel>$apelido-[$mat]</option>\n";
}
return $item;
}
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');
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
$tpLayout = 1;
$matricula = GetMatricula();
$consultar = isset($_POST["btPesquisa"]);
$valida = isset($_POST["btAnota"]) && (trim($_POST["AnotaTexto"]) != "");
$agtAnota = isset($_POST["AnotaTexto"]) ? $_POST["AnotaTexto"] : "";
$agtFone = isset($_POST["AnotaFone"]) ? soNumero($_POST["AnotaFone"]) : (isset($_SESSION[RAMAL_DESTINO]) ? soNumero($_SESSION[RAMAL_DESTINO]) : '');
$btAnota = isset($_POST["btAnota"]) ? $_POST["btAnota"] : "";
$listaAgente = isset($_POST["listaAgente"]) ? $_POST["listaAgente"] : GetMatricula();
$dataIni = !isset($_POST["dataIni"]) ? date('d/m/Y') : $_POST["dataIni"];
$dataFim = !isset($_POST["dataFim"]) ? date('d/m/Y') : $_POST["dataFim"];
$msg = "";
$pesquisa = "";
if (isset($_GET["formAction"])) {
$idDel = $_GET["id"];
$query = "delete from pbx_anotacoes where id_text = '$idDel'";
@pg_query($dbcon, $query);
}
if (!is_date($dataIni)) {
$jsStartup[] = "alert('Data inicial inválida!');";
$msg = "Data inicial inválida!";
$isValid = 0;
} else if (!is_date($dataFim)) {
$jsStartup[] = "alert('Data final inválida!');";
$msg = "Data final inválida!";
$isValid = 0;
} else if (!$consultar && $valida && empty($agtFone)) {
$msg = GetAnotacoesKey() ? "Informe o número do telefone!" : "Informe o número do protocolo!";
} else if ($valida && empty($agtAnota)) {
$msg = "Insira uma anotação!";
} else if (!$consultar && $valida) {
$query = "insert into pbx_anotacoes(conteudo, matricula_agente, fone_cliente)
values('$agtAnota', '$matricula', '$agtFone')";
$result = pg_query($dbcon, $query);
if ($result) {
$agtAnota = "";
$msg = "Operação realizada com sucesso!";
}
}
$pesquisa = PesquisaFone($dbcon, $agtFone);
if (empty($pesquisa))
$pesquisa = "<tr><td colspan=4>Nenhum registro encontrado!</td></tr>";
$cor = !$msg || stripos($msg, 'sucesso') ? '#0000FF' : '#FF0000';
$smarty->assign("AnotaFone", $agtFone);
$smarty->assign("AnotaTexto", $agtAnota);
$smarty->assign("corErro", $cor);
$smarty->assign("msg", $msg);
$smarty->assign("linhas", $pesquisa);
$smarty->assign("isFone", GetAnotacoesKey());
$smarty->assign("isSuper", IsSuper());
$smarty->assign("dataIni", $dataIni);
$smarty->assign("dataFim", $dataFim);
$smarty->assign("prm_label_protoco_pesquisa", $_SESSION['prm_label_protoco_pesquisa']);
$smarty->assign("prm_label_protoco_texto", $_SESSION['prm_label_protoco_texto']);
$smarty->assign("prm_label_protoco_grid", $_SESSION['prm_label_protoco_grid']);
if (IsSuper()) {
$agentes = GetAgentesAnotacoes($listaAgente);
$smarty->assign("listaAgente", $agentes);
}
DispLogin($smarty);
function PesquisaFone($db, $num) {
global $listaAgente, $dataIni, $dataFim;
$mat = IsSuper() ? $listaAgente : GetMatricula();
$query = "select a.id_text, a.conteudo, a.matricula_agente, a.fone_cliente, a.data, b.apelido from pbx_anotacoes a, pbx_usuarios b where b.matricula = a.matricula_agente::text ";
$query .= $mat ? " and a.matricula_agente::text = '$mat' " : "";
$query .= sprintf(" and data::date >= %s and data::date <= %s ", FormatDtMssql($dataIni, true), FormatDtMssql($dataFim, true));
$query .= " and fone_cliente like '%" . $num . "%'";
$query .= " order by b.apelido, a.data desc";
$result = @pg_query($db, $query);
//if(IsAdmin()) echo $query;
while (($result) && ($row = pg_fetch_array($result))) {
$fone = GetAnotacoesKey() ? FormataFone($row["fone_cliente"]) : $row["fone_cliente"];
$content = $row["conteudo"];
$matAgt = $row["matricula_agente"] . '-' . $row["apelido"];
$data = date('d/m/Y', strtotime($row["data"]));
$imgDel = GetLinkFormDelete($row["id_text"], 'DeletaAnotacao');
$linha .= "<tr>
<td align=left>$data</td>";
if (IsSuper()) {
$linha .= " <td align=left>$matAgt</td>";
}
$linha .= " <td align=left>$fone</td>
<td align=left>$content</td>
<td align=center>$imgDel</td>
</tr>";
}
$colspan = IsSuper() ? 4 : 3;
if (empty($linha))
$linha = "<tr><td colspan=\"$colspan\">Nenhum registro encontrado!</td></tr>";
return $linha;
}
function DispLogin($smarty) {
$smarty->display('callcenter/agente/agenteAnota.tpl');
}
function GetAgentesAnotacoes($matricula) {
$query = "select id, apelido, nome, matricula from pbx_usuarios where delete_ = 0 and apelido not in('sinccontasenha' )"; //'admin',
$result = pg_query($query);
$sel = $matricula == "0" ? ' Selected="selected" ' : '';
$item = "<option value=\"0\"$sel>Todos</option>\n";
while ($dados = pg_fetch_array($result, null, PGSQL_ASSOC)) {
$mat = $dados['matricula'];
$apelido = $dados['apelido'];
$sel = $mat == $matricula ? ' Selected="selected" ' : '';
$item .= "<option value=\"$mat\"$sel>$apelido-[$mat]</option>\n";
}
return $item;
}
$agenteAnota = new AgenteAnota($idProg, $dbcon, 0);
$agenteAnota->ExecutaRelatorio();
?>

12
agente/agentert.php

@ -1333,18 +1333,6 @@ function SairPausa($db) {
}
}
$query = "SELECT a.status, a.motivo_pausa, libera_pausa
FROM pbx_supervisor_agentes a
INNER JOIN pbx_queues_grupos b ON a.dac = b.nome
WHERE matricula = '$matricula'";
$result = pg_query($db, $query);
$resp = pg_fetch_assoc($result);
if($resp['status'] == 'PAUSA' && strtolower($resp['motivo_pausa']) == strtolower($resp['libera_pausa'])){
GeraExcept("Esta pausa é restrita para ser removida, por favor comunique seu supervisor!");
}
/*
* Remove da pausa do asterisk somente se a opçao disponivel atendimento nao
* estiver marcada,

2
asterisk/var_lib_asterisk/scripts/abandonadas/retornoAbandonada.php

@ -310,7 +310,7 @@ function __GetQueryRad($agentesLivres, $diasAbandon) {
and strtoint(c.espera) = 0
and d.retornar_abandonadas = 1
and a.abdsr_data >= (now()::date - $diasAbandon)
order by a.abdsr_data desc, a.abdsr_data_hora_inicio asc limit $agentesLivres";
order by a.abdsr_data_hora_inicio desc limit $agentesLivres";
GravaLog("cmd:", $pathLog);

78
asterisk/var_lib_asterisk/scripts/integracao/abdAgi.php

@ -455,6 +455,84 @@ $inTran = false;
include_once '/var/lib/asterisk/scripts/integracao/constServerIntegra.php';
include_once '/var/lib/asterisk/scripts/integracao/localDataBase.php';
$scrpt = $argv[0];
$UNIQUEID = $arg1;
$userfield = $agi->get_variable('MONITOR_FILENAME', true);
$userfield = trim($userfield) ? $userfield : 'AUDIO.WAV';
$path = '/var/log/asterisk/encerra_chamada_satelitenorte.log';
$query = sprintf("select a.chdr_id from pbx_chamada_ramal a where a.uniqueid = '%s' and a.chdr_fim is null", $UNIQUEID);
$result = pg_query($conn, $query);
if (pg_num_rows($result)) {
GravaLog($query . "\n AUDIO: " . $userfield . "\n", $path);
$dados = pg_fetch_array($result, null, PGSQL_ASSOC);
$chdr_id = $dados['chdr_id'];
$audio = str_ireplace('.WAV', '.MP3', $userfield);
$token = '026d3a4b331078aa09d096d11e495215';
$parametros = array('method' => 'terminachamada', 'audio' => $audio, 'id_chamada' => $UNIQUEID, 'token' => $token, 'login' => 'admin', 'senha' => 'SiP1029384756', 'tipoRetorno' => 'JSON');
//$parametros = array('audio' => $audio, 'id_chamada' => $UNIQUEID, 'token' => $token);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://satelitenorte.xpro.me/gestaodeleads/terminachamada");
//curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/aplicativo/integracao/index.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parametros);
$content = trim(curl_exec($ch));
curl_close($ch);
$retorno = json_decode($content, true);
$log = sprintf("Status: %s Msg: %s", $retorno["status"], $retorno["mensagem"]);
$query = sprintf("update pbx_chamada_ramal set chdr_fim = now(), chdr_log = %s where chdr_id = '%s'", QuotedStr($log), $chdr_id);
GravaLog($query . "\n", $path);
$result = pg_query($conn, $query);
if (!$result) {
GravaLog($query . "\n", $path);
}
}
$integra = $agi->get_variable('INTEGRA-SAIDA', true);
if ($integra == 'SAIDA') {
$intMetodo = $agi->get_variable('INTEGRA-METODO', true);
$intUniqueid = $agi->get_variable('UNIQUEID', true);
$intTelefone = $agi->get_variable('INTEGRA-FONE', true);
$intFone = str_replace('@', '|', $intTelefone);
$intRegIni = $agi->get_variable('INTEGRA-REGINI', true);
$intRegFim = $agi->get_variable('INTEGRA-REGFIM', true);
$intRetCliente = $agi->get_variable('INTEGRA-RETCLI', true);
$intRetCli = str_replace('@', '|', $intRetCliente);
$intRamal = $agi->get_variable('INTEGRA-RAMAL', true);
$intUra = $agi->get_variable('INTEGRA-URA', true);
$sql = "INSERT INTO pbx_integracao_reg("
. "reg_id_metodo,"
. "reg_uniqueid,"
. "reg_uniqueid_old,"
. "reg_fone,"
. "reg_retorno,"
. "reg_inicio,"
. "reg_fim,"
. "reg_msg,"
. "reg_status_exec,"
. "reg_status,"
. "retorno_cliente,"
. "reg_ramal,"
. "reg_ura) "
. "VALUES($intMetodo,'$intUniqueid','$intUniqueid','$intFone','$intFone','$intRegIni','$intRegFim','INTEGRACAO-ATIVO-SAIDA',"
. "1,0,'$intRetCli','$intRamal','$intUra');";
@pg_query($conn, $sql);
$pgError = pg_last_error();
if ($pgError) {
GravaLog($sql, '/var/log/asterisk/integracao_ativa_sainte.log');
GravaLog($pgError, '/var/log/asterisk/integracao_ativa_sainte.log');
}
}
$ligueme = $agi->get_variable('LIGUE-ME', true);
if ($ligueme) {
$ligueUniq = $agi->get_variable('UNIQUEID', true);

2
cadastros/pesquisa/pesquisaFuncoes.php

@ -19,7 +19,7 @@ function GetPesquisaRel($db, $plId, $matricula = null) {
$result = pg_query($db, $query);
if (!$plId) {
$ret = '<option value="0" selected="selected">Todos</option>';
$ret = '<option value="0" selected="selected">---------------------</option>';
}
while ($linhaBd = pg_fetch_array($result)) {

267
cadastros/pesquisa/pesquisaRel.php

@ -10,23 +10,21 @@
private $___plDescricao = '';
private $___ppId = 0;
private $___ppNome = '';
private $___tipoRelatorio;
private $___datas = array();
public function __construct($idProg, $dbcon, $incDac) {
parent::__construct($idProg, $dbcon, $incDac);
$this->___tipoRelatorio = isset($_REQUEST['tipoRelatorio']) ? $_REQUEST['tipoRelatorio'] : 0;
$this->___dac = isset($_POST["listaDacs"]) ? $_POST["listaDacs"] : 0;
$this->___lstPesquisa = isset($_POST["lstPesquisa"]) ? $_POST["lstPesquisa"] : '0| | | |0| ';
}
function ___FiltrosRelatorio() {
global $dbcon;
if ($this->___lstPesquisa) {
if($this->___lstPesquisa){
$this->___plId = explode('|', $this->___lstPesquisa)[0];
}
$lstPesquisa = GetPesquisaRel($dbcon, $this->___plId);
if ($this->___media != MEDIA_PRINT_GRID) {
/*
@ -57,16 +55,14 @@
$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>';
if (!$this->___tipoRelatorio) {
$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_PDF, $this->___tipoRelatorio, 'prt-pdf.png');
$lkPrint .= sprintf($prt, $this->GetidProg(), MEDIA_PRINT_CSV, $this->___tipoRelatorio, 'prt-csv.png');
}
$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"';
//$tipoRel = !$this->___tipoRelatorio ? '' : 'checked="checked"';
/*
* Personalise esta funcao se necessitar de outras opnioes de filtro.
*/
@ -80,7 +76,6 @@
$filtro .= '<td>Fila</td>';
$filtro .= '<td>Data Inicial</td>';
$filtro .= '<td>Data Final </td>';
$filtro .= '<td><input name="tipoRelatorio" type="checkbox" id="tipoRelatorio" value="1" %s/>Analitico</td>';
$filtro .= '<td align="center" valign="middle">&nbsp;</td>';
$filtro .= '</tr>';
@ -101,9 +96,9 @@
/*
* Guarda os filtros passados para recuperar na emissao dos relatoios para impressao.
*/
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___dataIni, $this->___dataFim, $this->___tipoRelatorio);
$_SESSION["SSstorageFiltros"] = array($this->___dac, $this->___dataIni, $this->___dataFim);
return sprintf($filtro, $tipoRel, $this->___dataIni, $this->___dataFim, $lkPrint);
return sprintf($filtro, $this->___dataIni, $this->___dataFim, $lkPrint);
}
protected function ___GetDadosDb($pqId = null) {
@ -120,42 +115,7 @@
GetDadosPesq($dbcon, $this->___lstPesquisa, $plId, $plDescricao, $ppId, $ppNome, $datas);
if ($this->___tipoRelatorio) {
$query = "select a.uniqueid::numeric, a.pl_id, a.pp_id, a.pm_data
,e.pp_nome as campanha
,getddd(f.src, '00') as ddd
,case when(length(f.src) >= 10)then substring(f.src,2) else f.src end as telefone
,'ATENDIDA' as condicao
,'1' as digito
,'NAO' as transferido
,'1' as tentativa
,f.calldate as datahora
,(min(f.duration) * interval '1 second' ) as duracao
,f.channel as canal
,'-' as campo_1
,case when((select count(*) from pbx_pesquisa_questoes where pp_id = a.pp_id) = count(b.pq_id))then 'RESPONDEU TODAS AS PERGUNDAS' else 'RESPONDEU ATE A PERGUNTA ' || max(b.pq_display) end as finalizacao
,(select STRING_AGG(remove_acentos(pq_questao), ';') from pbx_pesquisa_questoes where pp_id = a.pp_id) as perguntas
,STRING_AGG( remove_acentos(c.po_opcao), ';') as respostas
,split_part(e.pp_nome, '-', 1) as campo15
,split_part(e.pp_nome, '-', 2) as campo16
from pbx_pesquisa_movimento a
inner join pbx_pesquisa_questoes b on b.pp_id = a.pp_id and b.pq_id = a.pq_id
inner join pbx_pesquisa_opcoes c on c.pp_id = b.pp_id and c.pq_id = b.pq_id and c.po_id = a.po_id
inner join (select uniqueid, umv_ura_nome from pbx_ura_movimento where umv_ura_opcao is not null) d on d.uniqueid = a.uniqueid
inner join pbx_pesquisa e on e.pp_id = a.pp_id
inner join pbx_bilhetes f on f.uniqueid = a.uniqueid
where a.pm_data >= '$dataIni'
and a.pm_data <= '$dataFim'
and a.pp_id = $ppId
and a.pl_id = $plId
group by a.uniqueid, a.pl_id, a.pp_id, a.pm_data, e.pp_nome,getddd(f.src, '0'),f.src,case when(length(f.src) >= 10)then substring(f.src,2) else f.src end,f.calldate,f.duration,f.channel
order by a.uniqueid, calldate;";
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
} else {
$query = "SELECT pq_display, pq_questao,
$query = "SELECT pq_display, pq_questao,
(select count(*)
from pbx_pesquisa_movimento
where pl_id = $plId
@ -169,27 +129,45 @@
where b.pp_id = a.pp_id
and b.pl_id = '$plId'
and pq_status = 1 order by 1";
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
foreach ($row as $dataPsq) {
$sql = "select a.po_id, a.po_tecla, a.po_opcao, count(b.po_id) as num_resp
from pbx_pesquisa_opcoes a
left outer join pbx_pesquisa_movimento b on b.po_id = a.po_id
and pl_id = $plId
and b.pq_id = a.pq_id
and b.id_dac = $dac
and b.pm_data >= '$dataIni'
and b.pm_data <= '$dataFim'
where a.pq_id = {$dataPsq['pq_id']}
group by a.po_id, a.po_tecla, a.po_opcao
order by 2";
$res = $this->___GetQuery($sql);
$rows = pg_fetch_all($res);
$this->SetData($rows ? $rows : array());
}
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
foreach ($row as $dataPsq) {
$sql = "select a.po_id, a.po_tecla, a.po_opcao, count(b.po_id) as num_resp
from pbx_pesquisa_opcoes a
left outer join pbx_pesquisa_movimento b on b.po_id = a.po_id
and pl_id = $plId
and b.pq_id = a.pq_id
and b.id_dac = $dac
and b.pm_data >= '$dataIni'
and b.pm_data <= '$dataFim'
where a.pq_id = {$dataPsq['pq_id']}
group by a.po_id, a.po_tecla, a.po_opcao
order by 2";
$res = $this->___GetQuery($sql);
$rows = pg_fetch_all($res);
$this->SetData($rows ? $rows : array());
}
$query = "SELECT fila, d.matricula, apelido,
SUM(CASE WHEN (c.data_reg IS NOT NULL)THEN 1 ELSE 0 END) AS envio_pesquisa,
SUM(CASE WHEN (c.data_fim IS NOT NULL)THEN 1 ELSE 0 END) AS completou_pesquisa,
COUNT(*) AS chamadas_realizadas
FROM pbx_bilhetes a
INNER JOIN pbx_eventos_dacs b ON a.uniqueid = b.uid2
LEFT JOIN pbx_pesquisa_regitra c ON a.uniqueid = c.uniqueid
LEFT JOIN pbx_usuarios d ON d.matricula = SUBSTRING(b.agente, 7, 4)
WHERE calldate::DATE >= '$dataIni'
AND calldate::DATE <= '$dataFim'
AND b.evento IN('COMPLETEAGENT','COMPLETECALLER', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL', 'COMPLETACALLER', 'COMPLETAAGENT')
AND fila = 'SUPORTE_NIVEL1_ARAXA'
GROUP BY fila, d.matricula, apelido";
$result = $this->___GetQuery($query);
$row = pg_fetch_all($result);
$this->SetData($row ? $row : array());
}
protected function ___PreparaCsv() {
@ -243,7 +221,7 @@
$dataRel[] = GenerateCsvFromArray($linha);
unset($linha);
}
$dataRel[] = GenerateCsvFromArray(array('Total', '', 'Resp.: ' . $somaResp, number_format(($somaResp / $somaResp) * 100.0, 2, ',', '.') . '%'));
$dataRel[] = GenerateCsvFromArray(array('Total', '', 'Resp.: '.$somaResp,number_format(($somaResp / $somaResp) * 100.0, 2, ',', '.') . '%'));
$x++;
}
@ -255,6 +233,10 @@
$dataRel = array();
$filtro = $this->___FiltrosRelatorio();
/*
* Inicia o relatório.
*/
/*
* Cria os filtros
*/
@ -273,116 +255,54 @@
$dataRel[] = $linha;
$dadosCabecalio = array('Opcao', 'Resposta', 'Quantidade', 'Porcentagem');
$dadosField = array('po_tecla', 'po_opcao', 'num_resp', 'por_resp');
/*
* Inicia o relatório.
* Monta a linha de cabecalio.
*/
if ($this->___tipoRelatorio) {
$dadosCabecalio = array('CAMPANHA', 'DDD', 'TELEFONE', 'CONDICAO', 'DIGITO', 'TRANSFERIDO', 'TENTATIVA', 'DATA HORA', 'DURACAO', 'CANAL', 'CAMPO1', 'FINALIZACAO');
$dadosField = array('campanha', 'ddd', 'telefone', 'condicao', 'digito', 'transferido', 'tentativa', 'datahora', 'duracao', 'canal', 'campo_1', 'finalizacao');
$perCnt = 0;
foreach ($this->GetData()[0] as $k => $row) {
if ($k == 'perguntas') {
$resp = explode(';', $row['perguntas']);
foreach ($resp as $v) {
$dadosCabecalio[] = $v;
}
$perCnt = count($resp);
}
if ($perCnt) {
for ($x = 0; $x < $perCnt; $x++) {
$dadosField[] = "resposta_" . $x;
}
}
break;
}
$x = 1;
$somaResp = 0;
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$dadosCabecalio[] = 'Campo 15';
$dadosCabecalio[] = 'campo 16';
$dadosField[] = 'campo15';
$dadosField[] = 'campo16';
$somaResp = $this->__CalculaPorcentagem($row['pq_questao'], $this->GetData()[0]);
$dataRel[] = array('LABEL', '', '', RemoveAcentos($row['pq_questao']));
/*
* Monta a linha de cabecalio.
*/
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
}
$dataRel[] = $linha;
$x = 1;
$somaResp = 0;
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$row['datahora'] = date('d/m/Y H:i:s', strtotime($row['datahora']));
$rps = explode(";", $row['respostas']);
for ($x = 0; $x < $perCnt; $x++) {
$row["resposta_" . $x] = $rps[$x] ? str_replace("º","o",$rps[$x]) : " - ";
}
$dataRel[] = $linha;
//$row['po_opcao'] = RemoveAcentos($row['po_opcao']);
// Formata linha de dados.
foreach ($this->GetData()[$x] as $dataPsq) {
$linha = array('DADOS');
foreach ($dadosField as $key) {
$linha[] = $row["$key"];
}
$dataRel[] = $linha;
}
} else {
$dadosCabecalio = array('Opcao', 'Resposta', 'Quantidade', 'Porcentagem');
$dadosField = array('po_tecla', 'po_opcao', 'num_resp', 'por_resp');
/*
* Monta a linha de cabecalio.
*/
$x = 1;
$somaResp = 0;
/*
* Linhas de dados.
*/
foreach ($this->GetData()[0] as $row) {
$somaResp = $this->__CalculaPorcentagem($row['pq_questao'], $this->GetData()[0]);
$dataRel[] = array('LABEL', '', '', RemoveAcentos($row['pq_questao']));
$linha = array('LABEL');
foreach ($dadosCabecalio as $value) {
$linha[] = $value;
}
$dataRel[] = $linha;
//$row['po_opcao'] = RemoveAcentos($row['po_opcao']);
// Formata linha de dados.
foreach ($this->GetData()[$x] as $dataPsq) {
$linha = array('DADOS');
foreach ($dadosField as $key) {
if ($key == 'po_opcao') {
$linha[] = RemoveAcentos($dataPsq["$key"]);
} else if ($key == 'por_resp') {
$dataPsq['por_resp'] = number_format(($dataPsq["num_resp"] / $somaResp) * 100.0, 2, ',', '.') . '%';
$linha[] = $dataPsq['por_resp'];
} else {
$linha[] = $dataPsq["$key"];
}
if ($key == 'po_opcao') {
$linha[] = RemoveAcentos($dataPsq["$key"]);
} else if ($key == 'por_resp') {
$dataPsq['por_resp'] = number_format(($dataPsq["num_resp"] / $somaResp) * 100.0, 2, ',', '.') . '%';
$linha[] = $dataPsq['por_resp'];
} else {
$linha[] = $dataPsq["$key"];
}
$dataRel[] = $linha;
unset($linha);
}
$dataRel[] = array('LABEL', 'Total', '', 'Resp.: ' . $somaResp, number_format(($somaResp / $somaResp) * 100.0, 2, ',', '.') . '%');
$x++;
$dataRel[] = $linha;
unset($linha);
}
$dataRel[] = array('LABEL', 'Total', '', 'Resp.: '.$somaResp,number_format(($somaResp / $somaResp) * 100.0, 2, ',', '.') . '%');
$x++;
}
$this->___dataRel[] = $dataRel;
}
@ -417,13 +337,6 @@
/*
* Verifica se retornou dados
*/
if ($this->___tipoRelatorio) {
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\"><b>%s</b></td></tr></table>", count($dadosCabecalio), (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'O ARQUIVO FOI GERADO EM EXCEL CLICK NO ICONE PARA PODER REALIZAR O DOWNLOAD! Foram encontados ' . count($this->GetData()[0]) . ' registros para essa pesquisa!'));
$this->___dataRel[] = $dataRel;
return;
}
if (!IsPostBack() || !count($this->GetData()[0])) {
$dataRel[] = sprintf("<tr><td align=\"center\" colspan=\"%s\">%s</td></tr></table>", count($dadosCabecalio), (!IsPostBack() ? 'Informe os parametros e clique em consultar!' : 'Nenhum registro encontado!'));
$this->___dataRel[] = $dataRel;
@ -461,12 +374,12 @@
}
$linhas .= "</tr>";
}
$linhas .= sprintf("<tr><td colspan='2' align='center'><b>Total</b></td><td align='center'><b>$somaResp</b></td><td align='center'><b>%s</b></td></tr>", number_format(($somaResp / $somaResp) * 100.0, 2, ',', '.') . '%');
$linhas .= sprintf("<tr><td colspan='2' align='center'><b>Total</b></td><td align='center'><b>$somaResp</b></td><td align='center'><b>%s</b></td></tr>", number_format(($somaResp / $somaResp) * 100.0, 2, ',', '.').'%');
$x++;
$dataRel[] = $linhas;
unset($linhas);
}
/*
* Fecha relatorio.
*/
@ -492,15 +405,15 @@
. "<td align='center'>{$est['completou_pesquisa']}</td>"
. "<td align='center'>{$est['chamadas_realizadas']}</td>"
. "</tr>";
$ttDirect += $est['envio_pesquisa'];
$ttCC += $est['completou_pesquisa'];
$ttCall += $est['chamadas_realizadas'];
}
$dataRel[] = "<tr><th colspan='2'>Total</th> <th>$ttDirect</th> <th>$ttCC</th> <th>$ttCall</th></tr>";
$dataRel[] = '</table>';
$this->___dataRel[] = $dataRel;
}
@ -547,7 +460,7 @@
$dataQst[$z]['por_resp'] = number_format(($data["num_resp"] / $somaTotalQtd) * 100.0, 2, ',', '.') . '%';
$z++;
}
$totalizador = array('Total: ', $row['pq_questao'], 'Resp.: ' . $somaTotalQtd, number_format(($somaTotalQtd / $somaTotalQtd) * 100.0, 2, ',', '.') . '%');
$totalizador = array('Total: ', $row['pq_questao'], 'Resp.: '.$somaTotalQtd , number_format(($somaTotalQtd / $somaTotalQtd) * 100.0, 2, ',', '.') . '%');
$tables[] = array($dadosCabecalio, $dadosField, $dataQst, $widthHeader, $totalizador, 0);
$x++;
unset($dataQst);

58
configGeral.php

@ -6,7 +6,6 @@ define("CONFIG_SUPERVISOR", 3);
define("CONFIG_AGENTE", 2);
define("CONFIG_MANAGER", 4);
define("CONFIG_CHAT", 5);
define("CONFIG_LICENCA", 6);
$query = "";
//VerificaPerfilAcesso(SEG_CONFIGURACOES);
@ -522,63 +521,6 @@ if ($idSubProg == CONFIG_BASE_DADOS) {
$tpl = "configChatAgente.tpl";
DispRel($smarty, $tpl);
//template configGeral
$tpl = "configSys.tpl";
$smarty->assign("idSubProg", $idSubProg);
DispRel($smarty, $tpl);
} else if ($idSubProg == CONFIG_LICENCA) {
include "util/funcoesLicenca.php";
$fields = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);
$query = sprintf("SELECT perm_licenca FROM pbx_usuarios WHERE matricula = '%s';", GetMatricula());
$result = pg_query($query);
$infoUser = pg_fetch_assoc($result);
$mensagem = null;
if($fields['document'] && $fields['lcnca_perfil'] && $fields['btGerar']){
$contacts = [];
foreach ($fields as $k => $p){
if(strpos($k, 'lcnca_contato') !== false){
$contacts[] = $p;
}
}
$licenca = __dadosLicenca($fields['document'], $contacts);
GerarArquivo($licenca, $fields['lcnca_perfil']);
}
if(isset($fields['btValidar'])){
try{
$json = validarArquivo($_FILES);
if(!$json){
throw new Exception('Não foi possível ler o arquivo informado!');
}
if(!__validLicenca($dbcon, $json)){
$mensagem = ['type' => 'error', "msg" => "Não foi possível validar a licença!"];
}
$mensagem = ['type' => 'success', "msg" => "A licença foi registrada com sucesso!"];
} catch (Exception $ex) {
$mensagem = ['type' => 'error', "msg" => $ex->getMessage()];
}
}
$perfils = GetPerfilApl();
$slcOpt = "";
foreach($perfils as $k => $v){
$slcOpt .= "<option value='{$v['pfa_id']}'>{$v['prf_nome']} - [{$v['pfa_descricao']}]</option>";
}
$smarty->assign('select_perfil', $slcOpt);
foreach ($fields as $k => $v){
$smarty->assign($k, $v);
}
$smarty->assign('mensagem', $mensagem);
$smarty->assign('perm', $infoUser['perm_licenca']);
$smarty->assign('isAdmin', IsAdmin());
$tpl = "configLicenca.tpl";
DispRel($smarty, $tpl);
//template configGeral
$tpl = "configSys.tpl";
$smarty->assign("idSubProg", $idSubProg);

15
discador/campanha/processaLista.php

@ -17,7 +17,6 @@ try {
$tipo = $_FILES['list_file']['type'];
$nomeArquivo = $_FILES['list_file']['name'];
if (empty($nomeArquivo)) {
GeraExcept("Para realizar esta operação é necessario enviar um arquivo!");
}
@ -33,12 +32,13 @@ try {
GeraExcept("Não foi possível ler o arquivo!");
}
$fileProc = processaLista($listaClietne, $nomeArquivo);
processaLista($listaClietne, $nomeArquivo);
if ($fileProc) {
DownloadArquivo($fileProc);
$jsStartup[] = "alert('Arquivo gerado com sucesso!');";
}
$jsStartup[] = "alert('Arquivo gerado com sucesso!');";
// if ($fileProc = processaLista($listaClietne, $nomeArquivo)) {
// DownloadArquivo($fileProc);
// }
}
} catch (Exception $ex) {
$msg = $ex->getMessage();
@ -124,7 +124,7 @@ function processaLista($arquivo, $nomeArquivo) {
$idNtp = RegistroInc($dbcon, "select id from pbx_listanegra where UPPER(nome) = 'NAO PERTURBE' and id_pai is null");
$sql = "delete from tb_lista_discador a where exists(select '' from pbx_listanegra where numero = a.numero and (id_pai = '{$idNtp}' or flag = 'NAO PERTUBE'));";
if (!pg_query($dbcon, $sql)) {
throw new Exception("Não foi possível verificar a tabela de lista negra!" . pg_last_error());
throw new Exception("Não foi possível verificar a tabela de lista negra!");
}
$sql = "select numero from tb_lista_discador";
@ -140,6 +140,7 @@ function processaLista($arquivo, $nomeArquivo) {
fclose($handReproc);
if (!file_exists($arqReproc)) {
throw new Exception("Não foi possível criar o arquivo no diretório!");
}

233
doc/lgpd/TERMO DE USO E PRIVACIDADE APLICAÇÃO SIMPLES V_FINAL.txt

@ -1,233 +0,0 @@
TERMOS DE USO E PRIVACIDADE APLICAÇÃO SIMPLES IP
Última Atualização: 12 de julho de 2021
Esta aplicação e seu conteúdo ("SIMPLES IP") são controlados e operados pelo próprio
SIMPLES IP. Todos os direitos reservados.
De acordo com a disposição do artigo 41 da Lei Geral de Proteção de Dados, o SIMPLES
IP indica Gardemann & Vidotti Advogados Associados, como encarregado pelo
tratamento de dados, sendo possível o contato através o seguinte e-mail:
encarregado.simplesip@gev.adv.br e WhatsApp (43) 3373-9394.
Este Termo de Uso e Privacidade, pelas cláusulas adiante descritas, regulamentam o uso
da aplicação SIMPLES IP, e de seus conteúdos, adiante denominados como
CONTEÚDOS, sem prejuízo da aplicação da legislação vigente.
AO UTILIZAR O SIMPLES IP, VOCÊ AUTOMATICAMENTE CONCORDA COM ESTES
TERMOS DE USO E PRIVACIDADE, RESPONSABILIZANDO-SE INTEGRALMENTE POR
TODOS E QUAISQUER ATOS PRATICADOS POR VOCÊ NO SIMPLES IP OU EM SERVIÇOS A
ELE RELACIONADOS. CASO VOCÊ NÃO CONCORDE COM QUALQUER DOS TERMOS E
CONDIÇÕES ABAIXO ESTABELECIDOS, VOCÊ NÃO DEVE UTILIZAR O SIMPLES IP.
Integram os presentes TERMOS DE USO todos os avisos, regulamentos de uso e
instruções levados ao conhecimento do USUÁRIO pelo SIMPLES IP.
GLOSSÁRIO
Para fins destes Termos de Uso, devem-se considerar as seguintes definições e
descrições para melhor entendimento:
Conta de Acesso: Credencial de um usuário cadastrado que permite o acesso à área
restrita e às funcionalidades exclusivas, que é definida por nome de usuário (login) e
senha.
Dados Cadastrais: Conjunto de informações pessoais de um usuário, quando aplicável,
de modo que o identifique, diferenciando-o dos demais, a exemplo do número do
documento de identidade (RG), cadastro de pessoa física (CPF) ou jurídica (CNPJ),
endereço residencial ou comercial, sede, nome completo, "apelido" (login), entre
outros.
Layout: Conjunto compreendido entre aparência, design e fluxos da aplicação.
Login: Nome de Usuário escolhido pelo usuário quando preenche o cadastro para
acesso a funcionalidades exclusivas da aplicação.
Logon: Ato de o usuário cadastrado ingressar na área restrita da aplicação
utilizando login e senha.
Logs: Registros de atividades do usuário efetuadas na aplicação.
Senha: Conjunto de caracteres que serve como prova de identidade digital do usuário,
cujo conhecimento deve ser exclusivo e único.
Usuário: Indivíduo/pessoa jurídica que acessa a área restrita da aplicação mediante
login e senha.
1. O QUE É SIMPLES IP?
1.1. Serviços. O SIMPLES IP é uma aplicação que oferece os seguintes serviços:
gestão e provimento de comunicação por voz feita através da plataforma.
1.2. Suspensão. Nós nos reservamos o direito de suspender ou cancelar, a qualquer
momento, o seu acesso à aplicação em caso de suspeita de fraude, obtenção de
benefício ou vantagem de forma ilícita, ou pelo não cumprimento de quaisquer
condições previstas nestes Termo de Uso e Privacidade, ou legislação aplicável. Nesses
casos, não será devida qualquer indenização a você e o SIMPLES IP poderá promover a
competente ação de regresso, se necessário, bem como tomar quaisquer outras
medidas necessárias para perseguir e resguardar seus interesses.
2. COMO ACESSO O SIMPLES IP?
2.1. Acesso. Para acessar a plataforma SIMPLES IP e utilizar funcionalidades
exclusivas, o usuário deverá obter uma conta de acesso, por meio de procedimento de
cadastro, mais detalhado em seção própria.
Vale lembrar que não é permitido aos usuários acessar as áreas de programação da
plataforma, seu banco de dados ou qualquer conjunto de informações que faça parte
da atividade de webmastering, ficando sujeito quem o fizer à legislação penal brasileira
e obrigado a reparar os danos que causar.
Também não é autorizado realizar ou permitir engenharia reversa, nem traduzir,
decompilar, copiar, modificar, reproduzir, alugar, sublicenciar, publicar, divulgar,
transmitir, emprestar, distribuir ou, de outra maneira, dispor das ferramentas de
consulta desta plataforma e de suas funcionalidades.
Destaca-se que nessa plataforma é proibida a utilização de aplicativo spider, ou de
mineração de dados, de qualquer tipo ou espécie, além de outro aqui não tipificado,
mas que atue como um robô, tanto para realizar operações massificadas ou para
quaisquer outras finalidades, sob aplicação da legislação penal brasileira e de reparar os
danos que decorrerem desta utilização.
Ressalta-se, também, que é ônus dos visitantes e usuários arcar com os meios
necessários para utilizar esta plataforma.
2.2. Titularidade. A partir do cadastro, você será titular de uma conta que somente
poderá ser acessada por você.
3. A RELAÇÃO CONTRATUAL ENTRE O SIMPLES IP E O USUÁRIO
3.1. Relação Contratual. Os serviços e o conteúdo oferecidos pela plataforma são de
propriedade do SIMPLES IP. Ao estabelecer o contrato que permite ao usuário o gozo
das funcionalidades do sistema, o SIMPLES IP está oferecendo licença de uso de
plataforma de gestão e provimento de comunicação por voz, cuja a propriedade e
direitos de propriedade intelectual continuam sendo da SIMPLES IP.
4. DIREITOS AUTORAIS E PROPRIEDADE INTELECTUAL DO SIMPLES IP
4.1. Nossos Direitos. O uso comercial das expressões do SIMPLES IP, como marca,
nome empresarial ou nome de domínio, além dos conteúdos das telas da plataforma,
bancos de dados, redes, arquivos que permitem que o usuário acesse sua conta são de
propriedade do SIMPLES IP e estão protegidos pelas leis e tratados internacionais de
direito autoral, marcas e patentes, modelos e desenhos industriais.
4.2. Não concessão de Licença. O SIMPLES IP não concede nenhuma licença ou
autorização de uso de nenhum tipo sobre seus direitos de propriedade industrial e
intelectual, segredos empresariais ou sobre qualquer outra propriedade ou direito
relacionado com a plataforma e seus conteúdos.
4.3. Proibição de Reprodução. A reprodução dos conteúdos descritos anteriormente
está proibida, salvo com prévia autorização por escrito do SIMPLES IP ou se destinarem
a uso exclusivamente pessoal e sem que em nenhuma circunstância os visitantes e
usuários adquiram qualquer direito sobre os mesmos.
5. UTILIZAÇÃO DA APLICAÇÃO E DE SEUS CONTEÚDOS SOB A EXCLUSIVA
RESPONSABILIDADE DO USUÁRIO
5.1. Responsabilidade pelo Uso. O USUÁRIO reconhece e aceita voluntariamente que
o uso do SIMPLES IP e do CONTEÚDO seja feito, em qualquer caso, sob sua única e
exclusiva responsabilidade.
5.2. Responsabilização por Eventuais Danos. O SIMPLES IP não será, em hipótese
alguma, responsabilizado por danos diretos ou indiretos que resultem de, ou tenham
relação com o acesso, uso ou a incapacidade de acessar ou utilizar o SIMPLES IP.
6. UTILIZAÇÃO DA APLICAÇÃO E DOS SEUS CONTEÚDOS
6.1. Compromisso de Correta Utilização. Você se compromete a utilizar a plataforma
do SIMPLES IP e os seus conteúdos em conformidade com a lei, com o disposto neste
Termo de Uso e Privacidade, com a moral, os bons costumes e com a ordem pública,
assim como se obriga a não utilizar o SIMPLES IP e seus CONTEÚDOS de forma nociva
aos direitos e interesses de terceiros, ou de qualquer forma que possa vir a causar
dano, sobrecarregar, inutilizar ou impedir a normal utilização do SIMPLES IP e dos seus
CONTEÚDOS.
Ainda, você deve abster-se de obter informações, gráficos, mensagens, arquivos de
som, gravações, programas e/ou qualquer outro tipo de material acessível através do
SIMPLES IP ou dos CONTEÚDOS, inclusive de marca, empregando meios ou
procedimentos diversos daqueles que disponibilizados ou indicados com este propósito
na aplicação SIMPLES IP.
Bem como, você obriga-se a utilizar os CONTEÚDOS de forma lícita e, além disso:
- Se abstém de eliminar ou manipular o copyright ou outros dados que identifiquem os
direitos do SIMPLES IP ou ainda direitos incorporados ao SIMPLES IP e seus CONTEÚDOS
de propriedade de terceiros, bem como os dispositivos de proteção, as marcas ou
quaisquer mecanismos de informação.
6.2. Titularidade do Conteúdo. Qualquer conteúdo de usuário fornecido por você
permanece de sua propriedade quando a aplicação SIMPLES IP foi por você contratada,
ou de propriedade da pessoa jurídica que contratou o SIMPLES IP a qual você possui
ligação que justificou seu cadastro, como por exemplo, necessidade de que você possua
um ramal desta empresa.
6.3. Níveis de acesso. A SIMPLES IP informa que existem diferentes níveis de acesso,
sendo que a depender do tipo de acesso algumas funcionalidades não são disponíveis
ao usuário. A CONTRATANTE da aplicação SIMPLES IP é única e exclusiva responsável
por determinar os níveis de acesso dos usuários a serem cadastrados na aplicação.
6.4. Acesso ao conteúdo da comunicação por voz pela SIMPLES IP. A SIMPLES IP
declara que não acessa o conteúdo das comunicações por voz realizada através de sua
aplicação através de usuários da CONTRATANTE.
6.5. Acesso ao conteúdo da comunicação por voz pela CONTRATANTE. A depender
do nível de acesso os usuários da CONTRATANTE poderão ter acesso ao conteúdo e
gravação da comunicação por voz realizada através da plataforma SIMPLES IP, podendo
ter acesso ao conteúdo relacionado ao seu ramal ou a outros usuários. A permissão de
acesso ao conteúdo de outros usuários é relacionada ao nível de acesso à aplicação
SIMPLES IP, cuja determinação é de responsabilidade exclusiva da CONTRATANTE,
cabendo a CONTRATANTE limitar ou não tal funcionalidade ao usuário ou grupo de
usuários.
7. PRIVACIDADE E SEGURANÇA DA PLATAFORMA E DOS SEUS CONTEÚDOS
7.1. Compromisso com a Privacidade. O SIMPLES IP tem o compromisso com a
privacidade e a segurança de seus USUÁRIOS durante todo o processo de utilização da
aplicação. Os dados cadastrais dos usuários não são vendidos, trocados ou divulgados
para terceiros, exceto quando essas informações são necessárias para cumprimento de
obrigações legais ou determinações judiciais. Seus dados pessoais são peça
fundamental para que seu cadastro seja feito.
7.2. Recomendações quanto à Senha. Para que estes dados permaneçam intactos,
nós desaconselhamos expressamente a divulgação de sua senha a terceiros, mesmo a
amigos, colegas de trabalho ou supervisores. O SIMPLES IP exime-se de
responsabilidade pelos danos, prejuízos e/ou lucros cessantes de qualquer natureza que
possam advir do conhecimento que possam ter terceiros não autorizados a respeito de
condições, características e circunstâncias de uso que os usuários fazem do SIMPLES IP
ou de seus CONTEÚDOS.
8. OBTENÇÃO DOS DADOS E INFORMAÇÕES
8.1. Obtenção de Dados. Os dados e informações serão obtidos quando a
CONTRATANTE:
- Fornecer seus dados e de seus usuários para cadastros com preenchimento das
informações necessárias; ou
- Os usuários interagirem com as diversas funcionalidades existentes na aplicação,
fornecendo as informações voluntariamente, como nas funcionalidades de pausa, por
exemplo;
- Cadastrar e configurar o sistema, inclusive abertura de ramais, a depender do nível de
acesso da CONTRATANTE;
9. INFORMAÇÕES COLETADAS - FINALIDADE, ATUALIZAÇÃO OU MUDANÇA DE PERFIL
E FORMA DE UTILIZAÇÃO
9.1. Armazenamento. As informações cadastrais do usuário serão armazenadas em
um servidor seguro e têm o intuito exclusivo de fornecer acesso à área restrita que
permite a utilização das funcionalidades.
9.2. Exclusão de Responsabilidade. Contudo, considerando que nenhum sistema de
segurança é absolutamente seguro, o SIMPLES IP se exime de quaisquer
responsabilidades por eventuais danos e/ou prejuízos decorrentes de falhas, vírus ou
invasores do banco de dados da plataforma, salvo no caso de dolo ou culpa da mesma.
9.3. Precisão das Informações. A CONTRATANTE se responsabiliza pela precisão e
veracidade dos dados informados.
9.4. Exclusão dos Dados. A CONTRATANTE poderá, a qualquer momento, excluir a
conta de determinado usuário no SIMPLES IP sem necessitar solicitar à SIMPLES IP,
ficando ressalvada a guarda pelo SIMPLES IP das informações e/ou dados cuja
manutenção seja a eles imposta em razão de obrigações legais e/ou regulatórias ou,
ainda, cuja a manutenção seja necessária para cumprimento de ordem judicial, no
âmbito de processos judiciais e/ou administrativos e questionamento de terceiros
decorrentes das atividades desempenhadas pelo usuário no SIMPLES IP.
9.5. Do Não Compartilhamento com Terceiros. Os dados pessoais dos usuários não
serão compartilhados com terceiros, sendo que os dados adquiridos somente poderão
ser acessados por profissionais devidamente autorizados, respeitando a necessidade a
que serão submetidos. A SIMPLES IP se compromete em estabelecer com estes
profissionais termos de confidencialidade e sigilo.
10. DO REGISTRO DE ATIVIDADES
10.1. Consentimento do Registro. Você consente que o SIMPLES IP poderá registrar as
atividades efetuadas na plataforma, por meio de logs, incluindo: Ações efetuadas; Datas
e horários de cada acesso; e Session ID. Os referidos registros são realizados para o
estrito cumprimento legal, sendo que poderão ser utilizados pelo SIMPLES IP em casos
de investigação de fraudes ou de alterações indevidas em seus sistemas e cadastros,
bem como, em determinados casos, disponibilizados à CONTRATANTE em relação aos
seus usuários, inclusive podem a CONTRATANTE realizar consulta a determinados
registros.
11. ACEITE
11.1. Aceite Expresso. Ao acessar o SIMPLES IP e clicar no campo "Li e aceito os
Termos e Condições de Uso e Política de Privacidade" os usuários, expressamente e
sem ressalvas concordam com todos os referidos termos e condições.
12. LEI APLICÁVEL E FORO
Estes TERMOS DE USO E PRIVACIDADE são regidos pelas leis brasileiras. O SIMPLES IP e
USUÁRIOS, com renúncia expressa a qualquer outro foro, se submetem ao Foro de
Cuiabá/MT.

BIN
imgSite/Coração.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 745 B

49
include/configBd.php~

@ -1,49 +0,0 @@
<?php
/*
* Configuração para acesso ao banco de dados principal da aplicação.
*/
$dbPort = getenv('DB_PORT') ? getenv('DB_PORT') : '5432';
$dbHost = getenv('DB_HOST') ? getenv('DB_HOST') : 'algar.simplesip.com.br';
$dbName = getenv('DB_BASE') ? getenv('DB_BASE') : 'pbx';
$dbUser = getenv('DB_USER') ? getenv('DB_USER') : 'contacte';
$dbPassword = getenv('DB_PASSWD') ? getenv('DB_PASSWD') : 'ctepgSQL';
/*
* Esta configuração define se o servidor será Master
* e se havera sincronização da conta/senha entre os multiplos sites.
* Obs.: Quando não utilizar sincronização de conta/senha o valor de
* master deve ser 1.
*/
$master = 1;
$sincContaSenha = 0;
/*
* Quando o arquivo for configurado para slave(master=0) no parametro hostMaster deve ser
* informado o Ip do servidor master.
*/
$hostMaster = '127.0.0.1';
/*
*Informe uma identificação para o servidor
*/
$serverName = 'MASTER_SERVER';
/*
* Configurações para acesso a api.
*
*/
$hostApi = '127.0.0.1';
$portaApi = '';
/*
* Acesso ao mysql para real-time.
*
*/
$myParams = array('myPort' => '3306',
'myHost' => '127.0.0.1',
'myDatabase' => 'pabx',
'myUser' => 'root',
'myPassword' => 'SimpleS_root'
);
?>

4
include/configs/config.php

@ -14,7 +14,7 @@ define("PRM_DEF_SLOGAN", "Simples IP");
// #################################
define('ENDERECO_SITE', 'Av. Isaac Póvoas, Nº 901, Ed. Mirante do Coxim - Sala 102 - Centro - Cuiabá - MT - Cep: 78032-015');
define('POWERED_BY', 'Desenvolvido por '.NOME_SITE.' - Copyright © ' . date('Y') . ' simplesip.net.br');
define('POWERED_BY', 'Desenvolvido por Simples IP - Copyright © ' . date('Y') . ' simplesip.net.br');
define('EMAIL_SITE1', 'meajuda@simplesip.com.br');
define('EMAIL_SITE2', 'comercial@simplesip.com.br');
define('TELEFONE_SITE1', '+55(65)3616-8280');
@ -47,7 +47,7 @@ define('CONF_PARCEIRO_WORKFLOW','logoParceiro');
// ### CONFIGURAÇÃO DAS JANELAS POPUP ###
// ######################################
$myHeader = '<title>'.TITLE_SITE.'</title><link rel="shortcut icon" href='.FAVICON_SITE.'>';
$myHeader = '<title>Simples IP</title><link rel="shortcut icon" href='.FAVICON_SITE.'>';
define('TITLE_JANELA_SITE', $myHeader);
// #######################################################

2
include/util/util.php

@ -380,7 +380,7 @@ function LimpaString($str, $toUpeer = true, $removeSpace = true) {
$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);
$newstring = preg_replace(($removeSpace ? "/[^a-zA-Z0-9_.]/" : "/[^a-zA-Z0-9\s_.]/"), "", $string);
return $toUpeer ? $newstring : $newstring;
return $toUpeer ? strtoupper($newstring) : $newstring;
}
function GetFileExt($nomeArq) {

8
login.php

@ -20,8 +20,6 @@ $smarty->assign("recuperaSenha", ValidaRecuperaSenha($dbcon));
* usuario nao autenticado
*/
include "util/funcoesLicenca.php";
if (!isset($_POST["loginUser"])) {
$jsStartup[] = $setFocus;
DispLogin($smarty); // or $siteError->GetPhpError("Autentica Usuario", "", "Erro ao chamar funcao smarty!");
@ -31,12 +29,6 @@ if (!isset($_POST["loginUser"])) {
$senha = substr($_POST["loginPass"], 0, 14);
$validaTentativa = countTentativas($dbcon, $login, $tentativaErro);
if(!validarLicenca($dbcon) && ($_POST["loginUser"] != 'admin')){
$jsStartup[] = "alert('Sua licença é inválida por favor entre em contato com o suporte da Simples IP para ativar sua central!');";
DispLogin($smarty);
return;
}
if(!$validaTentativa && ($_POST["loginUser"] != 'admin')){
$jsStartup[] = "alert('Seu acesso foi bloqueado por inúmeras tentativas de acesso inválidos! Para o desbloqueio, realize a alteração de senha ou consulte seu Administrador.');";
$jsStartup[] = $setFocus;

30
master.css

@ -330,8 +330,9 @@ form input[type=submit], input[type=text]
border-collapse: collapse;
background-color:#F7F7F7;
font:Arial, Helvetica, sans-serif;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
overflow: hidden;
}
@ -992,34 +993,11 @@ table.gridClean td {
}
#agrupamentoTable th !important {
font-weight: bold;
padding: 0;
margin: 0;
padding-left: 6px;
padding-right: 6px;
background-color: #4F71C0;
}
.alert {
padding: 15px;
border-radius: 5px;
color: white;
font-size: 12px;
font-weight: bold;
}
.alert-error {
background-color: #f44336;
}
.alert-success {
background-color: #04AA6D;
}
.alert-info {
background-color: #2196F3;
}
.alert-warning {
background-color: #ff9800;
}

0
nbproject/private/config.properties

8
nbproject/private/private.properties

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

18
nbproject/private/private.xml

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="5"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/var/www/html/aplicativo/supervisor.php</file>
<file>file:/var/www/html/aplicativo/projeto/base/sql/versao-1.7.11.5.sql</file>
<file>file:/var/www/html/aplicativo/include/util/funcoesAmi.php</file>
<file>file:/var/www/html/aplicativo/include/util/display_errors.php</file>
<file>file:/var/www/html/aplicativo/asterisk/etc_asterisk/editado_manual/extensions_padrao.conf</file>
<file>file:/var/www/html/aplicativo/include/util/funcoesLgpd.php</file>
<file>file:/var/www/html/aplicativo/agente/agenteChamadasAbandon.php</file>
<file>file:/var/www/html/aplicativo/contacteFunc.php</file>
<file>file:/var/www/html/aplicativo/asterisk/var_lib_asterisk/scripts/abandonadas/retornoAbandonada.php</file>
<file>file:/var/www/html/aplicativo/include/util/funcoesApl.php</file>
</group>
</open-files>
</project-private>

7
nbproject/project.properties

@ -1,7 +0,0 @@
include.path=
php.version=PHP_56
source.encoding=ISO-8859-1
src.dir=.
tags.asp=false
tags.short=false
web.root=.

9
nbproject/project.xml

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.php.project</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/php-project/1">
<name>aplicativo</name>
</data>
</configuration>
</project>

90
templates/callcenter/agente/agenteAnota.tpl

@ -1,21 +1,18 @@
{capture name="display"}
<table width="100%" border="0" class="grid" cellpadding="1" cellspacing="0" style="border-top:0;font-size:12px;" >
<tr>
<td align="center">
<span style="font-face:Arial, Helvetica, sans-serif; font-size:16px; font-weight:bold;">
<img src="imgSite/anotacoes.png" alt="Bloco de Anota&ccedil;&otilde;es" align="absmiddle" width="32" height="32" border="0" title="Bloco de Anota&ccedil;&otilde;es">
Bloco de Anotações
</span>
</td>
<td align="center"><span style="font-face:Arial, Helvetica, sans-serif; font-size:16px; font-weight:bold;"><img src="imgSite/anotacoes.png" alt="Bloco de Anota&ccedil;&otilde;es" align="absmiddle" width="32" height="32" border="0" title="Bloco de Anota&ccedil;&otilde;es"> Bloco de Anotações</span></td>
</tr>
<tr>
<td valign="top" >
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
{if $isSuper}<th align="center" valign="top" >Agente</th>{/if}
{if $isSuper}
<th align="center" valign="top" >Agente</th>
{/if}
<th align="center" valign="top" >Data Inicial</th>
<th align="center" valign="top" >Data Final</th>
<th colspan="3" align="left" valign="top" >{if $isFone}Fone{else}{$prm_label_protoco_pesquisa}{/if}</th>
</tr>
<tr>
@ -30,50 +27,41 @@
<input name="btPesquisa" type="submit" id="btPesquisa" value="Pesquisar" title="Para pesquisar deixe o texto em branco!" />
<input name="btAnota" type="submit" id="btAnota" value="Gravar" title="Para pesquisar deixe o texto em branco!">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top"align="center">
<font face="Arial, Helvetica, sans-serif" color="{$corErro}" size="3">
<strong>{$msg}</strong>
</font>
</td>
</tr>
<tr>
<th align="left" valign="top" >{$prm_label_protoco_texto}</th>
</tr>
<tr>
<td valign="top" >
<textarea name="AnotaTexto" cols="59" rows="8" style="width: 100%" id="AnotaTexto">{$AnotaTexto}</textarea>
<span class="style1"></span>
</td>
</tr>
<tr>
<th align="left" valign="top" >Registros</th>
</tr>
<tr>
<td valign="top" >
<div style="width:99%; height: 320px; overflow:scroll; padding: 3px;">
<table width="100%" class="grid" border="0" cellspacing="0" cellpadding="2">
<tr align="left">
<th width="100">Data</th>
{if $isSuper}<th width="100">Agente</th>{/if}
<th width="100">{if $isFone}Fone{else}{$prm_label_protoco_grid}{/if}</th>
<th>Texto</th>
<th>&nbsp;</th>
</tr>
{$linhas}
</table>
</div>
</td>
</tr>
</table>
</table>
</td>
</tr>
<tr>
<td valign="top"align="center"><font face="Arial, Helvetica, sans-serif" color="{$corErro}" size="3"><strong>{$msg}</strong></font></td>
</tr>
<tr>
<th align="left" valign="top" >{$prm_label_protoco_texto}</th>
</tr>
<tr>
<td valign="top" >
<textarea name="AnotaTexto" cols="59" rows="8" style="width: 100%" id="AnotaTexto">{$AnotaTexto}</textarea>
<span class="style1"> </span></td>
</tr>
<tr>
<th align="left" valign="top" >Registros</th>
</tr>
<tr>
<td valign="top" >
<div style="width:99%; height: 320px; overflow:scroll; padding: 3px;">
<table width="100%" class="grid" border="0" cellspacing="0" cellpadding="2">
<tr align="left">
<th width="100">Data</th>
{if $isSuper}<th width="100">Agente</th>{/if}
<th width="100">{if $isFone}Fone{else}{$prm_label_protoco_grid}{/if}</th>
<th>Texto</th>
<th>&nbsp;</th>
</tr>
{$linhas}
</table>
</div> </td>
</tr>
</table>
{/capture}

2
templates/callcenter/agente/agentert.tpl

@ -307,7 +307,7 @@
<td style="border:0;"><a href="#" onclick="ComplementoCampanha();"><img src="imgSite/anexo16.png" alt="Infromações Detalhadas do Contato" width="25" height="25" border="0" title="Infromações Detalhadas do Contato" /></a></td>
{/if}
<td style="border:0;"><img class="copyjs" data-clipboard-target="#linkaudio" src="imgSite/link-closed-solid-25.png" alt="Link para Áudio" width="25" height="25" border="0" title="Copia link de áudio para área de transferência!" /></td>
<td style="border:0;"><a href="javaScript:NovaJanela('index.php?idProg=17', 'agenteAnota', '920', '600', 'resizable=NO,scrollbars=NO');"><img src="imgSite/anotacoes.png" alt="Bloco de Anota&ccedil;&otilde;es" width="25" height="25" border="0" title="Bloco de Anota&ccedil;&otilde;es" /></a></td>
<td style="border:0;"><a href="javaScript:NovaJanela('index.php?idProg=17', 'agenteAnota', '700', '600', 'resizable=NO,scrollbars=NO');"><img src="imgSite/anotacoes.png" alt="Bloco de Anota&ccedil;&otilde;es" width="25" height="25" border="0" title="Bloco de Anota&ccedil;&otilde;es" /></a></td>
<td style="border:0;"><a href="javaScript:NovaJanela('index.php?idProg=19&ramal={$ramal_monitor}', 'agenteHistorico', '850', '320', 'resizable=NO,scrollbars=NO');"><img src="imgSite/history.png" alt="Hist&oacute;rico das Chamadas" width="25" height="25" border="0" title="Hist&oacute;rico das Chamadas" /></a></td>
<td style="border:0;"><a href="javaScript:NovaJanela('index.php?idProg=18', 'agenteAgenda', '600', '400', 'resizable=NO,scrollbars=NO');"><img src="imgSite/agenda.png" alt="Agenda" width="25" height="25" border="0" title="Agenda" /></a></td>
<td style="border:0;"><a href="javaScript:NovaJanela('index.php?idProg=16&tpLayout=1', 'trocaSenha', '500', '207', 'resizable=NO,scrollbars=NO');"><img src="imgSite/security.png" alt="Trocar Senha" width="25" height="25" border="0" title="Trocar Senha" /></a></td>

8
templates/configSys.tpl

@ -1,21 +1,19 @@
{capture name="display"}
<input type="hidden" name="idSubProg" value="{$idSubProg}">
<table width="850" cellpadding="2" cellspacing="0" bgcolor="#F7F7F7" style="border: 1px solid #E1E1E1">
<table width="650" border="0" cellpadding="2" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td>
<table class="grid" width="100%" border="0" cellspacing="0" cellpadding="2">
<table class="grid" width="100%" border="0" cellspacing="0" cellpadding="2">
<tr align="center">
<th colspan="19">Configura&ccedil;&atilde;o Geral do Sistema </th>
<th colspan="7">Configura&ccedil;&atilde;o Geral do Sistema </th>
</tr>
<tr align="center" >
<th>&nbsp;</th>
<th><a style="color:#d9d9d9" href="index.php?idProg=20&idSubProg=0">Banco de Dados</a></th>
<th><a style="color:#d9d9d9" href="index.php?idProg=20&idSubProg=1">Sistema</a></th>
<th><a style="color:#d9d9d9" href="index.php?idProg=20&idSubProg=2">Agente</a></th>
<th><a style="color:#d9d9d9" href="index.php?idProg=20&idSubProg=3">Supervisor</a></th>
<th><a style="color:#d9d9d9" href="index.php?idProg=20&idSubProg=4">Socket Server</a></th>
<th><a style="color:#d9d9d9" href="index.php?idProg=20&idSubProg=5">Simples Chat</a></th>
<th><a style="color:#d9d9d9" href="index.php?idProg=20&idSubProg=6">Licença</a></th>
<th>&nbsp;</th>
</tr>
</table>

Loading…
Cancel
Save