{$value['clo_id']}"; $lstdados .= "{$value['clo_titulo']}"; $lstdados .= "{$value['clo_descricao']}"; $lstdados .= "{$value['cfr_razao_social']}"; $lstdados .= "{$value['nome']} - {$value['apelido']}"; $lstdados .= sprintf("%s", $regDisponivel ? '#33cc33' : 'red', $regDisponivel); $lstdados .= "{$reg['registros']}"; $lstdados .= sprintf("%s", date('d/m/Y H:i:s', strtotime($value['data_reg']))); } /** * INFORMACOES DE INSERCAO DOS USUARIOS PERMITIDOS */ $lstUsuario = getClienteAgentes(); foreach ($lstUsuario as $value) { $dadosAgente = ___buscaDadosAgente(getUsuariosRegistros($_SESSION['SSCloId']), 'apelido', $value['apelido']); $lstAgente .= ""; $lstAgente .= "{$value['nome']} - {$value['apelido']}"; $lstAgente .= sprintf("", $dadosAgente['registros'] ? $dadosAgente['registros'] : 0); $lstAgente .= ""; } ########################### ## BOTAO SALVAR ## ########################### /** * REGISTRA OS CLIENTES PARA AS MATRICULAS */ $agentes = array(); $quantidade = 0; if ($input['btConfigurar']) { /** * COLETA OS DADOS DA REQUISICAO E TRANSFORMA EM ARRAY AS INFORMACOES COMPLEMENTARES */ foreach ($input as $key => $value) { if (strpos($key, 'input_') !== false && $value) { $stragente = str_replace('input_', '', $key); $agente = str_replace('_', '.', $stragente); $agentes[] = array('apelido' => $agente, 'cliente' => $value, 'matricula' => __getMatriculaAgente($agente)); $quantidade += $value; } } /** * VERIFICA A DISPONIBILIDADE DE REGISTROS */ $reg = getRegistrosMatricula($cloid); $regDisponivel = $reg['registros'] - $reg['registros_matricula']; if ($quantidade > getClienteOrigem($cloid)[0]['registros'] || $quantidade < 0 || $quantidade > $regDisponivel) { throw new Exception("A quantidade de registros não pode ser 0 (Zero) ou ultrapassar a quantidade de 'Clientes Disponíveis'!"); } if (!$agentes) { throw new Exception("É necessário informar o pelo menos um agente para a campanha!"); } /** * ADICIONA AS MATRICULAS NOS CLIENTES */ __transaction('BEGIN;'); foreach ($agentes as $value) { if ($value['cliente'] > 0) { setMatriculaCliente($value['matricula'], $_SESSION['SSCloId'], $value['cliente']); } } __transaction('COMMIT;'); $message = "Os clientes foram referenciados para as matriculas!"; } ########################### ## BOTAO GERAR ## ########################### /** * RESET DAS CONFIGURACOES DA MATRICULA */ if (isset($input['btFinalizar'])) { $registro = getRegistrosMatricula($_SESSION['SSCloId']); if (!$registro['registros_matricula']) { throw new Exception("É preciso configurar os registros de clientes antes de finalizar!"); } if ($input['campanha'] && $input['listaDacs'] && !$input['cmp_id']) { __createCamp($input['campanha'], $input['listaDacs']); $message = "A campanha foi gerada com sucesso!"; } else if ($input['cmp_id']) { if (verificaListaCampanha($input['cmp_id'])) { throw new Exception("Ainda existe uma lista ativa para essa campanha!"); } $resp = __createListaCamp($input['cmp_id']); if ($resp['status']) { $message = "A lista foi gerada com sucesso!"; } else { $message = $resp['message']; } } else { throw new Exception("É preciso inserir as informações da campanha para gerar uma nova lista ou campanha!"); } } $smarty->assign('color', 'darkgreen'); $smarty->assign('message', $message); } catch (Exception $ex) { /** * EM CASO DE ERROS COM TRASACAO TODAS SERAM FINALIZADAS */ __transaction('ROLLBACK;'); $smarty->assign('color', 'red'); $smarty->assign('message', $ex->getMessage()); echo $ex->getMessage(); } $smarty->assign('liberaCamp', LiberaCriarCampanha($cloid)); $smarty->assign('camp', __getSelectCamp($input['cmp_id'])); $smarty->assign('dacs', GetDac($dbcon, $input['listaDacs'], "", 0, 1, 0, 0, 0)); $smarty->assign('lstAgente', $lstAgente); $smarty->assign('lstdados', $lstdados); $templateName = 'cadastros/prevenda/listacampanhacliente.tpl'; GetTemplate($smarty, $templateName); /** * Consulta as informacoes de uma lista de acordo com o clo_id * @param int $clo_id * @return type * @throws Exception */ function getClienteOrigem($clo_id) { $query = "SELECT clo_id,clo_titulo,clo_descricao,a.cfr_id,cfr_razao_social,nome,apelido, (SELECT count(clo_id) FROM pbx_cliente WHERE clo_id = a.clo_id) AS registros, a.data_reg FROM pbx_cliente_origem a INNER JOIN pbx_cliente_fornecedor b ON a.cfr_id = b.cfr_id INNER JOIN pbx_usuarios c ON c.matricula = a.user_reg::VARCHAR WHERE clo_id = {$clo_id}; "; $result = pg_query($query); if (!$result) { throw new Exception("[Exception in " . __FUNCTION__ . "] - Não foi possível localizar a lista informada."); } $data = pg_fetch_all($result); return $data; } /** * Busca os agentes que tem permissao para operar na campanha * @param int $cfr_id * @return type * @throws Exception */ function getClienteAgentes() { $query = "SELECT DISTINCT id, nome, apelido, matricula FROM pbx_usuarios a INNER JOIN pbx_grupo_usuario b ON a.id = b.user_id INNER JOIN pbx_grupo_funcoes c ON c.gp_id = b.gp_id WHERE b.gp_id IN(SELECT gp_id FROM (SELECT CASE WHEN(COUNT(gp_id) > 1) THEN gp_id END AS gp_id FROM pbx_grupo_funcoes WHERE fun_id = 209 OR fun_id = 2 GROUP BY gp_id ORDER BY 1) AS DATA)"; $result = pg_query($query); if (!$result) { throw new Exception("[Exception in " . __FUNCTION__ . "] - Não foi possível localizar os Agentes da lista informada."); } $data = pg_fetch_all($result); return $data; } /** * Busca a matricula pelo apelido do usuario * @param string $apelido * @return boolean */ function __getMatriculaAgente($apelido) { $query = "SELECT matricula FROM pbx_usuarios WHERE apelido = '{$apelido}';"; $result = pg_query($query); $data = pg_fetch_assoc($result); if ($data) { return $data['matricula']; } return false; } /** * Retorna todos os cliente referentes a Cliente Origem. * Váriavel de parametro $apenasMatricula para buscar somente registros com o agente. * @param type $cloid * @param bool $apenasMatricula * @return boolean */ function __getClientesPorCloid($cloid) { $query = "SELECT * FROM pbx_cliente WHERE clo_id = '{$cloid}' AND client_user_contato <> '' AND list_id IS NULL AND cmp_id IS NULL and client_status <> '999'; "; $result = pg_query($query); if (!$result) { throw new Exception("[Exception in " . __FUNCTION__ . "] - Não foi possível buscar os clientes por origem."); } $data = pg_fetch_all($result); return $data; } /** * Realiza um update nos registros buscados de acordo com a quantidade de limit * @param string $matricula * @param int $cloid * @param int $reg * @return boolean */ function setMatriculaCliente($matricula, $cloid, $reg) { $query = "UPDATE pbx_cliente SET client_user_contato = '{$matricula}' WHERE client_id IN (SELECT client_id FROM pbx_cliente WHERE clo_id = $cloid AND list_id IS NULL AND cmp_id IS NULL AND client_user_contato IS NULL and client_status <> '999' LIMIT $reg);"; $result = pg_query($query); if (!$result) { throw new Exception("[Exception in " . __FUNCTION__ . "] - Não foi possível atribuir a matricula no registros de cliente."); } return true; } /** * Realiza o resete das matriculas cadastradas * @param int $cloid * @return boolean */ function resetMatriculaCliente($cloid) { $query = "UPDATE pbx_cliente SET client_user_contato = NULL WHERE client_id IN (SELECT client_id FROM pbx_cliente WHERE clo_id = {$cloid}) AND list_id IS NULL AND cmp_id IS NULL and client_status <> '999';"; $result = pg_query($query); if (!$result) { throw new Exception("[Exception in " . __FUNCTION__ . "] - Não foi possível resetar os dados referente a matricula referente aos registros de cliente."); } return true; } /** * Verifica a se a campanha possui os registros de matriculas * @param int $cloid * @return boolean */ function getRegistrosMatricula($cloid) { $query = "SELECT COUNT(client_id) AS registros, SUM(CASE WHEN(client_user_contato <> '')THEN 1 ELSE 0 END) AS registros_matricula FROM pbx_cliente WHERE clo_id = {$cloid} and client_status <> '999'"; $result = pg_query($query); if (!$result) { throw new Exception("[Exception in " . __FUNCTION__ . "] - Não foi possível localizar os dados referente a lista."); } $data = pg_fetch_assoc($result); return $data; } /** * Retorna a quantidade de registros para cada agente */ function getUsuariosRegistros($cloid) { $query = "SELECT apelido, matricula, count(client_user_contato) AS registros FROM pbx_cliente a INNER JOIN pbx_usuarios b ON b.matricula = a.client_user_contato WHERE clo_id = {$cloid} AND list_id IS NULL AND cmp_id IS NULL GROUP BY 1,2"; $result = pg_query($query); if (!$result) { throw new Exception("[Exception in " . __FUNCTION__ . "] - Não foi possível localizar os registros dos Agentes."); } $data = pg_fetch_all($result); return $data; } function __getSelectCamp($id = null) { $query = "SELECT cmp_id, cmp_descricao FROM pbx_campanha WHERE cmp_status IN (2,3) "; $result = pg_query($query); if (!$result) { throw new Exception("[Exception in " . __FUNCTION__ . "] - Não foi possível localizar as campanhas."); } $data = pg_fetch_all($result); if ($data) { foreach ($data as $value) { $select = $id == $value['cmp_id'] ? 'selected' : ''; $opt .= ""; } return $opt; } } /** * Possibilidade de criar/voltar/commitar uma transação * @param type $type */ function __transaction($type) { pg_query($type); } ############################################################################ #### CAMPANHA #### ############################################################################ /** * Cria uma nova campanha * > Esse evento é executado quando o operador fornece dados para um nova campanha a ser gerada. * * > cmp_tipo_campanha = Deve ser referencia a tabela pbx_campanha_tipo * - O número 9 é para o tipo Pré-Venda * @param type $descricao * @param type $dac * @throws Exception */ function __createCamp($descricao, $dac) { __transaction('BEGIN;'); $query = "INSERT INTO pbx_campanha(cmp_descricao, cmp_ramal, id_dac, cmp_aguarda_agente, cmp_numero_ligacoes_agente, ident_proc, cmp_status, cmp_tipo_campanha, cmp_seletiva) VALUES(%s,'-1',%s,'1','1',%s,'2','9','1') RETURNING cmp_id;"; $query = sprintf($query, QuotedStr(trim($descricao)), QuotedStr($dac), QuotedStr('Inserido: listacampanhacliente Data: ' . date('Y-m-d H:i:s'))); $result = pg_query($query); if (!$result) { __transaction('ROLLBACK;'); throw new Exception("[ERROR CAMPANHA 001] - Não foi possível criar a campanha! [$query]"); } $data = pg_fetch_assoc($result); /** * CRIA OS STATUS DEFINIDO NAS REFERENCIAS */ $queryRef = "SELECT * FROM pbx_campanha_referencia_status"; $resultRef = pg_query($queryRef); $dataRef = pg_fetch_all($resultRef); $queryRefinc = ""; foreach ($dataRef as $ref) { $queryRefinc .= "INSERT INTO pbx_status_contato_campanha(ctst_id,cmp_id) VALUES({$ref['ctst_id']},{$data['cmp_id']}); "; } if (!pg_query($queryRefinc)) { __transaction('ROLLBACK;'); throw new Exception("[ERROR CAMPANHA 007] - Não foi possível criar os status da campanha informado!"); } /** * Table: pbx_campanha_usuarios * PERMISSAO AOS USUARIOS A CAMPANHA CRIADA. */ $userPerm = getUsuariosRegistros($_SESSION['SSCloId']); foreach ($userPerm as $value) { $queryPerm .= " INSERT INTO pbx_campanha_usuarios (cmp_id, matricula) VALUES('{$data['cmp_id']}','{$value['matricula']}'); "; } if (!pg_query($queryPerm)) { __transaction('ROLLBACK;'); throw new Exception("[ERROR LIST 005] - Não foi possível inserir a permissao para os agentes! "); } $status = __createListaCamp($data['cmp_id'], true); if (!$status['status']) { __transaction('ROLLBACK;'); throw new Exception("[ERROR CAMPANHA 002] - Não foi possível criar a campanha. {$status['message']}."); } __transaction('COMMIT;'); } /** * Cria as listas com as informacoes dos clientes e suas expecificacoes, como, display de agente, contatos, lista de telefone e permissoes de campanha. * Tabelas: * > pbx_campanha * > pbx_campanha_lista * > pbx_campanha_contato_display * > pbx_campanha_contato * > pbx_campanha_contato_fone * > pbx_campanha_usuarios * @param type $cmp_id * @throws Exception */ function __createListaCamp($cmp_id, $crateCmp = false) { /** * variavel para retornar o status da lista */ $return = array('status' => false, 'message' => ""); try { __transaction('BEGIN;'); $userReg = GetIdUser(); /** * VERIFICA SE A CAMPANHA SELECIONADA ESTA COM STATUS ATIVA OU EXCLUIDA */ $statusCamp = verificaStatusCampanha($cmp_id); if ($statusCamp == 1 || $statusCamp == 0) { __transaction('ROLLBACK;'); // logger(__FILE__)->debug('[ERROR LIST 001] - A campanha não pode estar ativa!'); throw new Exception("[ERROR LIST 001] - A campanha não pode estar ativa! "); } /** * Table: pbx_campanha && pbx_campanha_lista * VERIFICA SE EXISTE UMA LISTA NA CAMPANHA */ $query = "SELECT COUNT(cmp_id), (SELECT cmp_descricao FROM pbx_campanha WHERE cmp_id = {$cmp_id} ORDER BY 1 DESC LIMIT 1) AS list_name FROM pbx_campanha_lista WHERE cmp_id = {$cmp_id} GROUP BY 2;"; $result = pg_query($query); if (!$result) { __transaction('ROLLBACK;'); throw new Exception("[ERROR LIST 002] - Não foi possível buscar as informações da campanha!"); } $data = pg_fetch_assoc($result); /** * SE NÃO HOUVER LISTA CRIADA, BUSCA OS DADOS DA CAMPANHA PARA COMPLEMENTAR */ if (!$data) { $data['count'] = '1'; $data['list_name'] = 'LISTA_INI'; } /** * Table: pbx_campanha_lista * CRIA UM LISTA PARA A CAMPANHA */ $sql = "INSERT INTO pbx_campanha_lista(cmp_id, list_nome, list_file, list_status, id_usuario) VALUES('$cmp_id', '{$data['count']}_{$data['list_name']}', 'CMP_CLIENTE_{$data['list_name']}', '1', '{$userReg}') RETURNING list_id;"; $result = pg_query($sql); if (!$result) { __transaction('ROLLBACK;'); throw new Exception("[ERROR LIST 003] - Não foi possível criar a lista para campanha!"); } $lstCamp = pg_fetch_assoc($result); /** * Table: pbx_campanha_contato_display * CRIA OS DADOS DO CONTATO DISPLAY */ $query = "INSERT INTO pbx_campanha_contato_display(cmp_id, list_id, disp_param1, disp_param2, disp_param3, disp_param4) VALUES('$cmp_id', '{$lstCamp['list_id']}', 'NOME', 'EMPRESA', 'CNPJ', 'REGIAO')"; pg_query($query); if (!pg_query($query)) { __transaction('ROLLBACK;'); throw new Exception("[ERROR LIST 004] - Não foi possível criar os campos de display a lista para campanha!"); } /** * Table: pbx_campanha_contato * BUSCA TODOS OS CLIENTE PARA INSERIR NA LISTA DE CONTATO */ $clientesLista = __getClientesPorCloid($_SESSION['SSCloId'], true); $queryContato = ""; $queryContatoFone = ""; foreach ($clientesLista as $value) { if ($value['client_telefone'] || $value['client_celular']) { $nomeContato = $value['client_nome_contato'] ? $value['client_nome_contato'] : '-'; $municipio = str_replace("'", '', $value['client_municipio']); $queryContato = sprintf(" INSERT INTO pbx_campanha_contato(cmp_id, list_id, cont_identificador, cont_param1, cont_param2, cont_param3, cont_param4, cont_status, conf_matricula_exclusiva) " . "VALUES('{$cmp_id}','{$lstCamp['list_id']}','{$value['client_id']}',%s,%s,%s,%s, '0', %s) RETURNING cont_id; ", QuotedStr($nomeContato), QuotedStr($value['client_razao_social']), QuotedStr($value['client_documento']), QuotedStr($municipio . '-' . $value['client_uf']), QuotedStr($value['client_user_contato'])); $result = pg_query($queryContato); $cont_id = pg_fetch_assoc($result)['cont_id']; /** * Table: pbx_campanha_contato_fone * PERMITE A INSERCAO DE VARIOS CONTATOS PARA O MESMO CLIENTE DE ACORDO COM O ARRAY $contats */ $contats = array($value['client_telefone'], $value['client_celular']); foreach ($contats as $fone) { if ($fone) { $queryContatoFone .= sprintf(" INSERT INTO pbx_campanha_contato_fone(cmp_id, list_id, cont_id, conf_fone, conf_status, conf_status_lista, conf_discado) " . "VALUES(%s, %s, %s, %s, '0', '1', '0'); ", QuotedStr($cmp_id), QuotedStr($lstCamp['list_id']), QuotedStr($cont_id), QuotedStr($fone)); } } $queryClient .= " UPDATE pbx_cliente SET list_id = '{$lstCamp['list_id']}', cmp_id = '{$cmp_id}', cont_id = '{$cont_id}', user_reg = '{$userReg}' WHERE client_id = {$value['client_id']}; "; } else { /** CLIENTE STATUS 10 -> INVALIDO */ $queryClient .= " UPDATE pbx_cliente SET list_id = '{$lstCamp['list_id']}', user_reg = '{$userReg}', client_status = '10' WHERE client_id = {$value['client_id']}; "; } } if (!pg_query($queryClient)) { __transaction('ROLLBACK;'); throw new Exception("[ERROR LIST 005] - Não foi possível inserir os clientes na lista de campanha!"); } if (!$res = pg_query($queryContatoFone)) { __transaction('ROLLBACK;'); throw new Exception("[ERROR LIST 006] - Não foi possível inserir o fone na lista de campanha contato!"); } /** * Table: pbx_campanha_usuarios * PERMISSAO AOS USUARIOS A CAMPANHA CRIADA. */ if ($crateCmp) { $userPerm = getUsuariosRegistros($_SESSION['SSCloId']); } else { $userPerm = getClienteCampanha($cmp_id); } if ($userPerm) { foreach ($userPerm as $value) { $queryPerm .= " INSERT INTO pbx_campanha_usuarios (cmp_id, matricula) VALUES('{$cmp_id}','{$value['matricula']}'); "; } if (!pg_query($queryPerm)) { __transaction('ROLLBACK;'); throw new Exception("[ERROR LIST 007] - Não foi possível inserir o fone na lista de campanha contato! Error: " . $queryPerm); } } __transaction('COMMIT;'); $return['status'] = true; $return['message'] = 'A lista da campanha foi gerada com sucesso!'; } catch (Exception $ex) { __transaction('ROLLBACK;'); $return['message'] = $ex->getMessage(); } return $return; } function verificaListaCampanha($cmp_id) { $query = "SELECT * FROM pbx_campanha_lista WHERE cmp_id = {$cmp_id} AND list_status = 1;"; $result = pg_query($query); $data = pg_fetch_all($result); if ($data) { $query = "UPDATE pbx_campanha_lista SET list_status = 2 WHERE cmp_id = {$cmp_id};"; $result = pg_query($query); } return false; } function verificaStatusCampanha($cmp_id) { $query = "SELECT cmp_status FROM pbx_campanha WHERE cmp_id = {$cmp_id};"; $result = pg_query($query); $data = pg_fetch_assoc($result); if ($data) { return $data; } return false; } /** * Busca os usuários que não estão na permissão da campanha * @param type $cmp_id * @return type */ function getClienteCampanha($cmp_id) { $query = "SELECT DISTINCT client_user_contato AS matricula FROM pbx_cliente WHERE cmp_id = {$cmp_id} " . "AND client_user_contato NOT IN (SELECT matricula FROM pbx_campanha_usuarios WHERE cmp_id = {$cmp_id})"; $result = pg_query($query); return pg_fetch_all($result); } ############################################################################ #### FUNCOES PARA CONTROLAR DADOS E ARQUIVOS #### ############################################################################ /** * Funcao para buscar dados em Array Multidimencional. */ function ___buscaDadosAgente($data, $chave, $valor) { foreach ($data as $value) { if ($value[$chave] == $valor) { return $value; } } return false; } function __reloadPage() { header("Location: index.php?idProg=341&clo_id={$_SESSION['SSCloId']}&window=1"); } function __messageFlash($message = null) { if ($_SESSION['SSMessageFlash']) { $message = $_SESSION['SSMessageFlash']; unset($_SESSION['SSMessageFlash']); } else { $_SESSION['SSMessageFlash'] = $message; } return $message; } function LiberaCriarCampanha($id) { $query = "SELECT * FROM pbx_cliente WHERE client_id IN (SELECT client_id FROM pbx_cliente WHERE clo_id = {$id}) AND list_id IS NULL AND cmp_id IS NULL AND client_user_contato <> '';"; $result = pg_query($query); $dados = pg_fetch_all($result); if ($dados) { return true; } return false; }