|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
############################################################################
|
|
|
|
|
##### ARQUIVO DE ACESSO AO BANCO DE DADOS DO KING DIALER #####
|
|
|
|
|
############################################################################
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Cria uma conexao com a base de dados do king
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
function connectMysql() {
|
|
|
|
|
$data = GetConfKing();
|
|
|
|
|
|
|
|
|
|
if ($data) {
|
|
|
|
|
$link = mysql_connect($data['king_host'], $data['king_user'], $data['king_password']);
|
|
|
|
|
if (!$link) {
|
|
|
|
|
throw new Exception('N<EFBFBD>o foi poss<EFBFBD>vel conectar ao banco de dados do King Dialer; Error: ' . mysql_error());
|
|
|
|
|
}
|
|
|
|
|
mysql_select_db($data['king_base'], $link);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mysql_error()) {
|
|
|
|
|
throw new Exception("Error: " . mysql_error());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Configuracao de acesso a base de dados do king
|
|
|
|
|
* @global type $dbcon
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
function GetConfKing() {
|
|
|
|
|
global $dbcon;
|
|
|
|
|
$query = "SELECT * FROM pbx_kingdialer_config WHERE id_king = 1";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
return pg_fetch_assoc($result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Configuracoes da campanha para ser adicionadas no banco de dados.
|
|
|
|
|
* @global type $dbcon
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
function GetConfCampanha() {
|
|
|
|
|
global $dbcon;
|
|
|
|
|
$query = "SELECT * FROM pbx_kingdialer_campanha WHERE id_camp_king = 1";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
return pg_fetch_assoc($result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Insere uma nova campanha no king para ser processada as chamadas
|
|
|
|
|
* @param string $campanha
|
|
|
|
|
* @return int
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
function criarCampanhaKing($campanha) {
|
|
|
|
|
$data = GetConfCampanha();
|
|
|
|
|
$query = "INSERT INTO campanha (login, datetime_ini, datetime_fin, campanha, ramal, fluxo, "
|
|
|
|
|
. "numrediscagem, pausa, maxcall, ringtime, intervalo, amd, nds, priomovel, maxcallagent) "
|
|
|
|
|
. "VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');";
|
|
|
|
|
|
|
|
|
|
if ($data) {
|
|
|
|
|
$sql = sprintf($query, $data['king_camp_login'], date("Y-m-d {$data['king_camp_horaini']}:00"), date("Y-m-d {$data['king_camp_horafim']}:59"), $campanha,
|
|
|
|
|
$data['king_camp_ramal'], $data['king_camp_fluxo'], $data['king_camp_numrediscagem'], $data['king_camp_pausa'], $data['king_camp_maxcall'],
|
|
|
|
|
$data['king_camp_ringtime'], $data['king_camp_intervalo'], $data['king_camp_amd'], $data['king_camp_nds'],
|
|
|
|
|
$data['king_camp_priomovel'], $data['king_camp_maxcallagent']);
|
|
|
|
|
mysql_query($sql);
|
|
|
|
|
return mysql_insert_id();
|
|
|
|
|
} else {
|
|
|
|
|
throw new Exception("Nao foi possivel encontrar as configuracoes da campanha!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mysql_error()) {
|
|
|
|
|
throw new Exception("Nao foi possivel incluir a campanha. Error: " . mysql_error());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Altera uma campanha do king para ser processada as chamadas
|
|
|
|
|
* @param string $campanha
|
|
|
|
|
* @return int
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
function alteraCampanhaKing($id, $data) {
|
|
|
|
|
$query = "UPDATE campanha SET login = '%s', datetime_ini = '%s', datetime_fin = '%s', "
|
|
|
|
|
. "ramal = '%s', fluxo = '%s', numrediscagem = '%s', pausa = '%s', maxcall = '%s', "
|
|
|
|
|
. "ringtime = '%s', intervalo = '%s', amd = '%s', nds = '%s', priomovel = '%s', maxcallagent = '%s' "
|
|
|
|
|
. "WHERE id = {$id}";
|
|
|
|
|
|
|
|
|
|
if ($data) {
|
|
|
|
|
$sql = sprintf($query, $data['king_camp_login'], date("Y-m-d {$data['king_camp_horaini']}"), date("Y-m-d {$data['king_camp_horafim']}"),
|
|
|
|
|
$data['king_camp_ramal'], $data['king_camp_fluxo'], $data['king_camp_numrediscagem'], $data['king_camp_pausa'], $data['king_camp_maxcall'],
|
|
|
|
|
$data['king_camp_ringtime'], $data['king_camp_intervalo'], $data['king_camp_amd'], $data['king_camp_nds'],
|
|
|
|
|
$data['king_camp_priomovel'], $data['king_camp_maxcallagent']);
|
|
|
|
|
mysql_query($sql);
|
|
|
|
|
return mysql_insert_id();
|
|
|
|
|
} else {
|
|
|
|
|
throw new Exception("Nao foi possivel encontrar as configuracoes da campanha!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mysql_error()) {
|
|
|
|
|
throw new Exception("Nao foi possivel incluir a campanha. Error: " . mysql_error());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
############################################################################
|
|
|
|
|
#### FUNCOES DE VERIFICACAO CAMPANHA ####
|
|
|
|
|
############################################################################
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Busca os contato bloqueados de acordo com o tipo.
|
|
|
|
|
*
|
|
|
|
|
* DIA = Busca no periodo de data atual.
|
|
|
|
|
* MES = Busca pelo numero do mes atual.
|
|
|
|
|
*
|
|
|
|
|
* @param string $dbcon
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
function contatosTelevendas($dbcon, $numero, $tipo) {
|
|
|
|
|
$query = "SELECT tlvb_id, src, tlvb_status, tlvb_data FROM pbx_televendas_bloqueio WHERE src = '{$numero}' ";
|
|
|
|
|
|
|
|
|
|
if (strtoupper($tipo) == 'MES') {
|
|
|
|
|
$query .= " AND tlvb_mes = " . date('m');
|
|
|
|
|
} else if (strtoupper($tipo) == 'DIA') {
|
|
|
|
|
$query .= " AND tlvb_data = '" . date('Y-m-d') . "'";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query .= " GROUP BY tlvb_id, src, tlvb_status, tlvb_data";
|
|
|
|
|
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
$resp = pg_fetch_all($result);
|
|
|
|
|
|
|
|
|
|
if (pg_last_error()) {
|
|
|
|
|
throw new Exception("Nao foi possivel realizar consulta em Televendas! Query: {$query} | Error: " . pg_last_error());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Busca os contato da lista enviada e compara com os bloqueio ocorridos.
|
|
|
|
|
*
|
|
|
|
|
* Possui error = true
|
|
|
|
|
* Possui bloqueio = true
|
|
|
|
|
*
|
|
|
|
|
* @param type $dbcon
|
|
|
|
|
* @param type $ldid
|
|
|
|
|
*/
|
|
|
|
|
function verificaContatoLista($dbcon, $ldid, $idcamp, $campanha) {
|
|
|
|
|
$numeroList = array();
|
|
|
|
|
$error = array();
|
|
|
|
|
$query = "SELECT DISTINCT numero, nome, codigo, data FROM tb_lista_discador WHERE ld_id = {$ldid}";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
$resp = pg_fetch_all($result);
|
|
|
|
|
|
|
|
|
|
if (pg_last_error()) {
|
|
|
|
|
throw new Exception("Nao foi possivel realizar consulta em Lista dicador!. Error: " . pg_last_error());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($resp as $value) {
|
|
|
|
|
$response = verificaContatoTelevendas($idcamp, $campanha, $value['numero'], $dbcon);
|
|
|
|
|
if ($response['error']) {
|
|
|
|
|
$error[] = $value['numero'];
|
|
|
|
|
}
|
|
|
|
|
if (!$response['bloqueio'] && !$response['error']) {
|
|
|
|
|
$numeroList[] = $value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return array('error' => $error, 'contatos' => $numeroList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Valida o contato passado se possui bloqueio no dia ou mes. Caso possua
|
|
|
|
|
* adiciona na tabela de bloqueios.
|
|
|
|
|
*
|
|
|
|
|
* Status 2 => Bloqueio Diario;
|
|
|
|
|
* Status 3 => Bloqueio Mesal;
|
|
|
|
|
* @param int $idcamp
|
|
|
|
|
* @param string $campanha
|
|
|
|
|
* @param string $numero
|
|
|
|
|
* @param string $dbcon
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
function verificaContatoTelevendas($idcamp, $campanha, $numero, $dbcon) {
|
|
|
|
|
|
|
|
|
|
$response = array('error' => false, 'bloqueio' => false);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* BLOQUEIO MES 15 TENTATIVAS
|
|
|
|
|
*/
|
|
|
|
|
$contatoMes = count(contatosTelevendas($dbcon, $numero, 'MES'));
|
|
|
|
|
if ($contatoMes >= 14) {
|
|
|
|
|
$bloqueio = insereBloqueioCampanha($dbcon, $idcamp, $numero, 3, $campanha);
|
|
|
|
|
$response['bloqueio'] = true;
|
|
|
|
|
return $response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* BLOQUEIO DIA 2 TENTATIVAS
|
|
|
|
|
*/
|
|
|
|
|
$contatoDia = contatosTelevendas($dbcon, $numero, 'DIA');
|
|
|
|
|
if (count($contatoDia) > 1) {
|
|
|
|
|
$bloqueio = insereBloqueioCampanha($dbcon, $idcamp, $numero, 2, $campanha);
|
|
|
|
|
$response['bloqueio'] = true;
|
|
|
|
|
return $response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
insereContato($dbcon, $numero);
|
|
|
|
|
|
|
|
|
|
return $response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Cria um novo contato na tabela televendas_bloqueio
|
|
|
|
|
*
|
|
|
|
|
* @param type $dbcon
|
|
|
|
|
* @param type $numero
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
function insereContato($dbcon, $numero) {
|
|
|
|
|
$query = "INSERT INTO pbx_televendas_bloqueio (src, tlvb_status) VALUES ('{$numero}', 1);";
|
|
|
|
|
pg_query($dbcon, $query);
|
|
|
|
|
if (pg_last_error()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* TIPO DE BLOQUEIO
|
|
|
|
|
* 1 - CONTATO PENDENTE NO KING
|
|
|
|
|
* 2 - CONTATO DISCADO NO DIA
|
|
|
|
|
* 3 - 15 CONTATO FEITO NO MES
|
|
|
|
|
* 4 - CONTATO DUPLICADO OU INVALIDO NO ARQUIVO
|
|
|
|
|
*/
|
|
|
|
|
function insereBloqueioCampanha($dbcon, $idcamp, $numero, $tipo, $nomeCamp = null) {
|
|
|
|
|
$query = "INSERT INTO pbx_kingdialer_bloqueios (id_camp_bloq, nome_camp_bloq, numero_bloq, tipo_bloq) VALUES({$idcamp},'{$nomeCamp}','{$numero}',{$tipo});";
|
|
|
|
|
pg_query($dbcon, $query);
|
|
|
|
|
if (pg_last_error()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
############################################################################
|
|
|
|
|
#### FUNCOES DE CONF. CAMPANHA ####
|
|
|
|
|
############################################################################
|
|
|
|
|
|
|
|
|
|
function criarContatosCampanha($id, $dados) {
|
|
|
|
|
$sql = "INSERT INTO campanha_contatos (id_camp, numero, nome, codigo, outro, tipo_telefone) VALUES('%s','%s','%s','%s','%s','%s'); \n";
|
|
|
|
|
$query = "";
|
|
|
|
|
foreach ($dados as $contact) {
|
|
|
|
|
$query = sprintf($sql, $id, $contact['numero'], $contact['nome'] ? $contact['nome'] : null, $contact['codigo'] ? $contact['codigo'] : null, $contact['data'] ? $contact['data'] : null, verificaTelefone($contact['numero']));
|
|
|
|
|
mysql_query($query);
|
|
|
|
|
if (mysql_error()) {
|
|
|
|
|
throw new Exception("Error:" . mysql_error() . " | Query: " . $query);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function deletaCampanha($id) {
|
|
|
|
|
$query1 = "DELETE FROM campanha WHERE id = {$id};";
|
|
|
|
|
mysql_query($query1);
|
|
|
|
|
|
|
|
|
|
$query2 = "DELETE FROM campanha_contatos WHERE id_camp = {$id};";
|
|
|
|
|
mysql_query($query2);
|
|
|
|
|
|
|
|
|
|
if (mysql_error()) {
|
|
|
|
|
throw new Exception("Error:" . mysql_error());
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Busca campanha de acordo pelo ID.
|
|
|
|
|
* Se para passar $param atualiza os status de pausa de acordo com o ID.
|
|
|
|
|
* @param type $id
|
|
|
|
|
* @param type $status
|
|
|
|
|
* @return type
|
|
|
|
|
*/
|
|
|
|
|
function campanhasPausa($id, $status = null) {
|
|
|
|
|
if (is_int($status)) {
|
|
|
|
|
$query = "UPDATE campanha SET pausa = {$status} WHERE id = {$id};";
|
|
|
|
|
mysql_query($query);
|
|
|
|
|
return $status ? 'Off' : 'On';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query = "SELECT * FROM campanha WHERE id = {$id};";
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
return mysql_fetch_assoc($result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function chamadasCorrente() {
|
|
|
|
|
$query = 'SELECT data, ramal, agent, campanha, numero, nome, codigo, CONCAT (numdiscagem , " de " , numrediscagem) AS discagem FROM discador_spool';
|
|
|
|
|
mysql_query($query);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
$data = array();
|
|
|
|
|
while ($dados = mysql_fetch_array($result)) {
|
|
|
|
|
$data[] = $dados;
|
|
|
|
|
}
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetLigacoesPorNumero($numero, $periodo) {
|
|
|
|
|
$query = "";
|
|
|
|
|
$dataDay = date('Y-m-d 00:00:00');
|
|
|
|
|
$dataIni = date('Y-m-01 00:00:00');
|
|
|
|
|
$dataFim = date('Y-m-t 23:59:59');
|
|
|
|
|
|
|
|
|
|
switch (strtoupper($periodo)) {
|
|
|
|
|
case 'PENDENTES' || 'P':
|
|
|
|
|
$query = "SELECT count(*) as ligacoes FROM campanha_contatos WHERE numero = '{$numero}' AND calldate = '0000-00-00 00:00:00';";
|
|
|
|
|
break;
|
|
|
|
|
case 'DIA' || 'D':
|
|
|
|
|
$query = "SELECT count(*) as ligacoes FROM campanha_contatos WHERE numero = '{$numero}' AND calldate >= '{$dataDay}';";
|
|
|
|
|
break;
|
|
|
|
|
case 'MES' || 'M':
|
|
|
|
|
$query = "SELECT count(*) as ligacoes FROM campanha_contatos WHERE numero = '{$numero}' AND calldate >= '{$dataIni}' AND calldate <= '{$dataFim}';";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($query && $result = mysql_query($query)) {
|
|
|
|
|
return mysql_fetch_assoc($result)['ligacoes'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function deleteListaDiscador($dbcon, $ldid) {
|
|
|
|
|
$query = "DELETE FROM tb_lista_discador WHERE ld_id = {$ldid}";
|
|
|
|
|
pg_query($dbcon, $query);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Verifica o tipo de telefone Movel ou Fixo
|
|
|
|
|
* @param type $telefone
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
function verificaTelefone($telefone) {
|
|
|
|
|
switch (strlen($telefone)) {
|
|
|
|
|
case 12:
|
|
|
|
|
return 0;
|
|
|
|
|
case 11:
|
|
|
|
|
return 1;
|
|
|
|
|
case 9:
|
|
|
|
|
return 0;
|
|
|
|
|
case 8:
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|