forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
7.2 KiB
208 lines
7.2 KiB
<?php |
|
|
|
ob_flush(); |
|
$strJS = array(); |
|
|
|
define('CONF_CONEXAO_DB', connection()); |
|
|
|
############################################################################ |
|
######### FUNCOES IMPORTANTES ######### |
|
############################################################################ |
|
|
|
/** |
|
* ADICIONA OS RELATÓRIOS QUE SERÃO UTILIZADOS |
|
* |
|
* @param array $relatorio |
|
*/ |
|
function relatorios($relatorio, $fields) { |
|
if (function_exists($relatorio)) { |
|
return $relatorio($fields); |
|
} |
|
} |
|
|
|
/** |
|
* FORMATA DADOS COM O PROPRIO NOME NO VALOR DA TABELA COM MODO ASSOCIATIVO |
|
* |
|
* @param array $data |
|
*/ |
|
function formatAssocJS($data) { |
|
$posicao = 0; |
|
foreach ($data as $key => $value) { |
|
$posicao++; |
|
$js = array('title' => "$key", 'value' => $value); |
|
SetStringJS($js); |
|
} |
|
} |
|
|
|
/** |
|
* FORMATA DADOS COM O PROPRIO NOME NO VALOR DA TABELA COM MODO MULTIDIMENSIONAL |
|
* |
|
* @param array $data |
|
*/ |
|
function formatAllJS($data) { |
|
foreach ($data as $value) { |
|
SetStringJS($value); |
|
} |
|
} |
|
|
|
/** |
|
* ADICIONA VALORES EM ARRAY PARA UMA VARIÁRAVEL GLOBAL |
|
* |
|
* @global array $strJS |
|
* @param array $js |
|
*/ |
|
function SetStringJS($js) { |
|
global $strJS; |
|
array_push($strJS, $js); |
|
} |
|
|
|
/** |
|
* RETORNA OS DADOS EM JSON DA VARIÁVEL GLOBAL PARA SER CONSUMIDA NO RELATORIO EM CHART |
|
* |
|
* @global array $strJS |
|
* @return string |
|
*/ |
|
function GetStringJS() { |
|
global $strJS; |
|
return json_encode($strJS); |
|
} |
|
|
|
############################################################################ |
|
######### RELATORIOS ######### |
|
############################################################################ |
|
|
|
function desempenhoMedia($fields) { |
|
$dataIni = ValidaData($fields['dataIni']) ? FormatDtMssql($fields['dataIni']) : date('Y-m-d'); |
|
$dataFim = ValidaData($fields['dataFim']) ? FormatDtMssql($fields['dataFim']) : date('Y-m-d'); |
|
$matricula = getAgente(); |
|
|
|
$query = "SELECT apelido, SUM(CASE WHEN client_status = '21' THEN 1 ELSE 0 END) AS exportados |
|
FROM pbx_cliente a |
|
INNER JOIN pbx_usuarios b ON a.client_user_contato = b.matricula |
|
WHERE client_update::DATE >= '$dataIni' |
|
AND client_update::DATE <= '$dataFim' "; |
|
|
|
if ($matricula || !IsAdmin()) { |
|
// $query .= " AND c.matricula = '{$matricula}' "; |
|
} |
|
|
|
$query .= " GROUP BY apelido"; |
|
$data = exec_query($query, 'all'); |
|
|
|
$m = array_map(function($data) { |
|
return $media += $data['exportados']; |
|
}, $data); |
|
|
|
foreach ($data as $key => $agente) { |
|
$data[$key]['media'] = array_sum($m) / count($m); |
|
} |
|
|
|
formatAllJS($data); |
|
return GetStringJS(); |
|
} |
|
|
|
function performacePorAgente($fields) { |
|
$dataIni = ValidaData($fields['dataIni']) ? FormatDtMssql($fields['dataIni']) : date('Y-m-d'); |
|
$dataFim = ValidaData($fields['dataFim']) ? FormatDtMssql($fields['dataFim']) : date('Y-m-d'); |
|
$idDac = (!isset($fields['listaDacs']) || !$fields['listaDacs']) ? '0' : $fields['listaDacs']; |
|
|
|
$query = "SELECT apelido, |
|
SUM(CASE WHEN(client_status = '16')THEN 1 ELSE 0 END) AS ENVIADOS, |
|
SUM(CASE WHEN(client_status = '21')THEN 1 ELSE 0 END) AS EXPORTADOS, |
|
(SELECT count(*) FROM pbx_bilhetes a |
|
INNER JOIN pbx_eventos_dacs b ON a.uniqueid = b.uid2 |
|
INNER JOIN pbx_queues_grupos f ON f.nome = b.fila |
|
WHERE f.id = '{$idDac}' |
|
AND evento IN ('COMPLETAAGENT','COMPLETACALLER') |
|
AND calldate::DATE >= '$dataIni' |
|
AND calldate::DATE <= '$dataFim' |
|
AND substring(b.agente, 7, 4) = matricula) AS chamadas |
|
FROM pbx_cliente a |
|
INNER JOIN pbx_usuarios b ON a.client_user_contato = b.matricula |
|
WHERE client_update::DATE >= '$dataIni' |
|
AND client_update::DATE <= '$dataFim' "; |
|
$query .= " GROUP BY apelido, matricula"; |
|
|
|
formatAllJS(exec_query($query, 'all')); |
|
return GetStringJS(); |
|
} |
|
|
|
function funilDeVendas($fields) { |
|
$dataIni = ValidaData($fields['dataIni']) ? FormatDtMssql($fields['dataIni']) : date('Y-m-d'); |
|
$dataFim = ValidaData($fields['dataFim']) ? FormatDtMssql($fields['dataFim']) : date('Y-m-d'); |
|
$idDac = (!isset($fields['listaDacs']) || !$fields['listaDacs']) ? '0' : $fields['listaDacs']; |
|
|
|
$query = "SELECT (SELECT count(*) FROM pbx_bilhetes a |
|
INNER JOIN pbx_eventos_dacs b ON a.uniqueid = b.uid2 |
|
INNER JOIN pbx_queues_grupos f ON f.nome = b.fila |
|
WHERE f.id = '{$idDac}' |
|
AND evento IN ('COMPLETAAGENT','COMPLETACALLER') |
|
AND calldate::DATE >= '$dataIni' |
|
AND calldate::DATE <= '$dataFim') AS chamadas, |
|
SUM(CASE WHEN(client_status = '16')THEN 1 ELSE 0 END) AS ENVIADOS, |
|
SUM(CASE WHEN(client_status = '21')THEN 1 ELSE 0 END) AS EXPORTADOS |
|
FROM pbx_cliente a |
|
INNER JOIN pbx_usuarios b ON a.client_user_contato = b.matricula |
|
WHERE client_update::DATE >= '$dataIni' |
|
AND client_update::DATE <= '$dataFim' "; |
|
|
|
formatAssocJS(exec_query($query)); |
|
return GetStringJS(); |
|
} |
|
|
|
############################################################################ |
|
######### BANCO DE DADOS ######### |
|
############################################################################ |
|
|
|
function getAgente() { |
|
$query = sprintf("SELECT apelido, matricula |
|
FROM pbx_fornecedor_permissao a |
|
INNER JOIN pbx_usuarios b ON a.matricula_permissao = b.matricula |
|
WHERE b.matricula = '%s' ", GetMatricula()); |
|
$result = exec_query($query); |
|
if($result){ |
|
return false; |
|
} |
|
return GetMatricula(); |
|
} |
|
|
|
/** |
|
* FUNCAO PARA REALIZAR CONEXAO COM O BANCO DE DADOS |
|
* |
|
* @return object |
|
* @throws Exception |
|
*/ |
|
function connection() { |
|
$connect = pg_connect(sprintf('host=%s port=%s dbname=%s user=%s password=%s', '127.0.0.1', '5432', 'pbx', 'contacte', 'ctepgSQL')); |
|
if (pg_last_error()) { |
|
throw new Exception("Nao foi possivel conectar no banco de dados!"); |
|
} |
|
return $connect; |
|
} |
|
|
|
/** |
|
* EXECUTA QUERYS NO BANCO DE DADOS |
|
* @param string $query |
|
* @param string $type |
|
* @return array |
|
* @throws Exception |
|
*/ |
|
function exec_query($query, $type = 'assoc') { |
|
$result = pg_query(CONF_CONEXAO_DB, $query); |
|
switch (strtoupper($type)) { |
|
case "ASSOC": |
|
$resp = pg_fetch_assoc($result); |
|
break; |
|
case "ALL": |
|
$resp = pg_fetch_all($result); |
|
break; |
|
case "ROW": |
|
$resp = pg_fetch_row($result); |
|
break; |
|
case "ARRAY": |
|
$resp = pg_fetch_array($result); |
|
break; |
|
} |
|
return $resp; |
|
} |
|
|