PABX da Simples IP
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

<?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;
}