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.
354 lines
13 KiB
354 lines
13 KiB
<?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) { |
|
if (!$link) { |
|
throw new Exception('Não foi possível conectar ao banco de dados do King Dialer; Error: ' . mysqli_error($link)); |
|
} |
|
mysqli_select_db($data['king_base'], $link); |
|
|
|
if(mysqli_error($link)){ |
|
throw new Exception("Error:". mysqli_error($link)); |
|
} |
|
} |
|
|
|
|
|
} |
|
|
|
/** |
|
* 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; |
|
} |
|
} |
|
|