Created
February 22, 2018 21:18
-
-
Save ThiagoLimah/fe51686a3a11e762fbddebde41ef2922 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php namespace Conesul\Firmware; | |
class SaperX | |
{ | |
private $pdo; | |
private $host; | |
private $user; | |
private $pass; | |
private $dbname; | |
/** | |
* Seta as informações para acesso a base de dados. | |
*/ | |
private function setInformacoes() | |
{ | |
$this->host = "10.0.2.203"; | |
$this->user = "redeconesul"; | |
$this->pass = "h991SXA$$3zaaaL"; | |
$this->dbname = "spx_o"; | |
} | |
public function __construct() | |
{ | |
$this->setInformacoes(); | |
try { | |
$this->pdo = new \PDO($this->montaDSN(), $this->user, $this->pass, | |
array( | |
\PDO::ATTR_PERSISTENT => false, | |
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" | |
) | |
); | |
} | |
catch (\PDOException $e) { | |
throw new \Exception("PDO Erro: ".$e->getMessage()); | |
} | |
} | |
/** | |
* Retorna os dados de um circuito pelo número do circuito. | |
* | |
* @param string|int $circuito | |
* | |
* @return mixed|null | |
*/ | |
public function circuito($circuito) | |
{ | |
$result = $this->circuitos(1, null, ["circuito" => $circuito]); | |
if (isset($result[0])) { | |
return $result[0]; | |
} | |
return null; | |
} | |
/** | |
* Utilizado para buscar os circuitos cadastrados na central. | |
* | |
* Exemplo de Filtros: | |
* $filtro = array( | |
* "circuito" => 8009000, //Busca um circuito especifico | |
* "cliente" => "Thiago", //Busca clientes que o nome correspondam ao informado | |
* "ativo" => 1, //Retorna apenas circuitos ativos | |
* "status" => 1 //Retorna apenas circuitos conectados | |
* ); | |
* | |
* @param null|int $limit //Utilizado para paginação | |
* @param null|int $offset //Utilizado para paginação | |
* @param array $filtro | |
* | |
* @return array | |
*/ | |
public function circuitos($limit = null, $offset = null, array $filtro = array()) | |
{ | |
$retorno = array(); | |
$sql = " SELECT "; | |
$sql .= " sip_devices.name AS circuito, "; | |
$sql .= " sip_devices.ip AS ip, "; | |
$sql .= " sip_devices.status AS status, "; | |
$sql .= " ramais.id AS idRamal, "; | |
$sql .= " ramais.nome AS nomeCliente, "; | |
$sql .= " ramais.ativo AS situacao, "; | |
$sql .= " ramais.dia_fechamento AS dia_fechamento, "; | |
$sql .= " planos.nome AS nomePlano, "; | |
$sql .= " ramais.saldo_ligacao_devido AS saldo "; | |
$sql .= " FROM sip_devices "; | |
$sql .= " INNER JOIN ramais ON ramais.ramal = sip_devices.name "; | |
$sql .= " INNER JOIN planos ON planos.id = ramais.id_planos "; | |
$sql .= " WHERE 1=1 "; | |
if (isset($filtro["circuito"]) && !empty($filtro["circuito"])) { | |
$sql .= " AND sip_devices.name LIKE '%".filter_var($filtro["circuito"], FILTER_SANITIZE_STRING)."%' "; | |
} | |
if (isset($filtro["cliente"]) && !empty($filtro["cliente"])) { | |
$sql .= " AND ("; | |
$separador = ""; | |
/* Separo a string pelos espaços */ | |
$separado = (array) explode(" ", $filtro["cliente"]); | |
$separado = array_filter( $separado ); | |
foreach ( $separado AS $valor ) { | |
$sql .= $separador; | |
$sql .= " ( ramais.nome LIKE '%" . $valor . "%' ) "; | |
$separador = " AND "; | |
} | |
$sql .= " ) "; | |
} | |
if (isset($filtro["ativo"]) && trim($filtro["ativo"]) !== "") { | |
if (1 === (int) $filtro["ativo"]) { | |
$sql .= " AND ramais.ativo = 1 "; | |
} | |
else { | |
$sql .= " AND ramais.ativo = 0 "; | |
} | |
} | |
if (isset($filtro["status"]) && trim($filtro["status"]) !== "") { | |
if (1 === (int) $filtro["status"]) { | |
$sql .= " AND sip_devices.status IS NOT NULL "; | |
} | |
else { | |
$sql .= " AND sip_devices.status IS NULL "; | |
} | |
} | |
if (!is_null($limit) && is_numeric($limit)) { | |
$sql .= " LIMIT ".(int) $limit; | |
} | |
if (!is_null($offset) && is_numeric($offset)) { | |
$sql .= " OFFSET ".(int) $offset; | |
} | |
$result = $this->pdo->query($sql); | |
while ($row = $result->fetch(\PDO::FETCH_OBJ)) { | |
$circuito = new \stdClass(); | |
$circuito->ramal_codigo = (int) $row->idRamal; | |
$circuito->circuito = stripslashes($row->circuito); | |
$circuito->ip = stripslashes($row->ip); | |
$circuito->status = stripslashes($row->status); | |
$circuito->cliente_nome = stripslashes(utf8_decode($row->nomeCliente)); | |
$circuito->plano_nome = stripslashes(utf8_decode($row->nomePlano)); | |
$circuito->fechamento = stripslashes($row->dia_fechamento); | |
$circuito->situacao = stripslashes($row->situacao); | |
$circuito->saldo_float = (float) $row->saldo; | |
$circuito->saldo_str = "R$ " . number_format($row->saldo, 2, ',', '.'); | |
/* Busco os DIDs do circuito */ | |
$circuito->dids = $this->didsRamal($circuito->ramal_codigo); | |
/* Busco as Referências do circuito */ | |
$circuito->refs = $this->referenciasRamal($circuito->ramal_codigo); | |
$retorno[] = $circuito; | |
} | |
return $retorno; | |
} | |
/** | |
* Retorna todos os DIDs associados ao ramal informado. | |
* | |
* @param int $ramal | |
* | |
* @return array | |
*/ | |
public function didsRamal($ramal) | |
{ | |
$retorno = array(); | |
$sql = " SELECT numero, valor_cliente "; | |
$sql .= " FROM did "; | |
$sql .= " WHERE id_ramal = ".(int) $ramal; | |
$result = $this->pdo->query($sql); | |
while ($row = $result->fetch(\PDO::FETCH_OBJ)) { | |
$did = new \stdClass(); | |
$did->numero = mask(stripslashes($row->numero), "(##) ####-####"); | |
$did->valor_float = (float) $row->valor_cliente; | |
$did->valor_str = "R$ " . number_format($row->valor_cliente, 2, ',', '.'); | |
$retorno[] = $did; | |
} | |
return $retorno; | |
} | |
/** | |
* Retorna uma referência do ramal. | |
* | |
* @param int $ramal | |
* @param string $referencia | |
* | |
* @return mixed|null | |
*/ | |
public function refRamal($ramal, $referencia) | |
{ | |
$result = $this->referenciasRamal($ramal, ["referencia" => $referencia]); | |
if (isset($result[0])) { | |
return $result[0]; | |
} | |
return null; | |
} | |
/** | |
* Retorna todas as referências de cobrança do ramal informado. | |
* | |
* @param int $ramal | |
* @param array $filtro | |
* | |
* @return array | |
*/ | |
public function referenciasRamal($ramal, array $filtro = array()) | |
{ | |
$retorno = array(); | |
$sql = " SELECT mes_referencia, valor_did, valor_ligacao "; | |
$sql .= " FROM faturamento_fechado "; | |
$sql .= " WHERE id_ramais = ".(int) $ramal; | |
if (isset($filtro["referencia"]) && !empty($filtro["referencia"])) { | |
$sql .= " AND mes_referencia = '".filter_var($filtro["referencia"], FILTER_SANITIZE_STRING)."' "; | |
} | |
$result = $this->pdo->query($sql); | |
while ($row = $result->fetch(\PDO::FETCH_OBJ)) { | |
$ref = new \stdClass(); | |
$ref->referencia = $row->mes_referencia; | |
$ref->formatado = date_format(\DateTime::createFromFormat("Ym", $row->mes_referencia), "m/Y"); | |
$ref->mes = numberToMounth(date_format(\DateTime::createFromFormat("Ym", $row->mes_referencia), "m")); | |
$ref->ano = date_format(\DateTime::createFromFormat("Ym", $row->mes_referencia), "Y"); | |
$ref->valor_did = (float) $row->valor_did; | |
$ref->valor_ligacao = (float) $row->valor_ligacao; | |
$retorno[] = $ref; | |
} | |
return $retorno; | |
} | |
/** | |
* Retorna o extrato de ligações do mês atual do ramal. | |
* | |
* @param string|int $circuito | |
* | |
* @return array | |
*/ | |
public function extratoAtualRamal($circuito) | |
{ | |
$retorno = array(); | |
$sql = " SELECT "; | |
$sql .= " ligacoes.origem AS origem, "; | |
$sql .= " ligacoes.destino AS destino, "; | |
$sql .= " ligacoes.duracao AS duracao, "; | |
$sql .= " ligacoes.cidade AS cidade, "; | |
$sql .= " ligacoes.valor_ramal AS valorLigacao, "; | |
$sql .= " ligacoes.hora_inicial AS horaInicial, "; | |
$sql .= " ligacoes.ligacao_local AS ligacaoLocal "; | |
$sql .= " FROM ligacoes "; | |
$sql .= " INNER JOIN ramais ON ramais.id = ligacoes.id_ramal "; | |
$sql .= " WHERE ramais.ramal = '".filter_var($circuito, FILTER_SANITIZE_STRING)."' "; | |
$sql .= " AND ligacoes.mes_referencia IS NULL "; | |
$sql .= " ORDER BY "; | |
$sql .= " ligacoes.hora_inicial ASC "; | |
$result = $this->pdo->query($sql); | |
while ($row = $result->fetch(\PDO::FETCH_OBJ)) { | |
$ligacao = new \stdClass(); | |
$ligacao->origem = stripslashes($row->origem); | |
$ligacao->duracao = stripslashes($row->duracao); | |
$ligacao->cidade = stripslashes($row->cidade); | |
$ligacao->valor = (float) $row->valorLigacao; | |
$ligacao->ligacao_local = stripslashes($row->ligacaoLocal); | |
$ligacao->hora_inicial = date_format(new \DateTime($row->horaInicial), "d/m/Y H:i"); | |
if (substr($row->destino, 0, 4) == "0800" || substr($row->destino, 0, 4) == "0300") { | |
$ligacao->destino = mask(stripslashes($row->destino), "#### ### ####"); | |
} | |
elseif (strlen($row->destino) == 10) { | |
$ligacao->destino = mask(stripslashes($row->destino), "(##) ####-####"); | |
} | |
elseif (strlen($row->destino) == 11) { | |
$ligacao->destino = mask(stripslashes($row->destino), "(##) #####-####"); | |
} | |
else { | |
$ligacao->destino = stripslashes($row->destino); | |
} | |
$retorno[] = $ligacao; | |
} | |
return $retorno; | |
} | |
/** | |
* Retorna o extrato de ligações do mês atual do ramal. | |
* | |
* @param string|int $circuito | |
* | |
* @return array | |
*/ | |
public function extratoReferenciaRamal($circuito, $referencia) | |
{ | |
$retorno = array(); | |
$sql = " SELECT "; | |
$sql .= " ligacoes.origem AS origem, "; | |
$sql .= " ligacoes.destino AS destino, "; | |
$sql .= " ligacoes.duracao AS duracao, "; | |
$sql .= " ligacoes.cidade AS cidade, "; | |
$sql .= " ligacoes.valor_ramal AS valorLigacao, "; | |
$sql .= " ligacoes.hora_inicial AS horaInicial, "; | |
$sql .= " ligacoes.ligacao_local AS ligacaoLocal "; | |
$sql .= " FROM ligacoes "; | |
$sql .= " INNER JOIN ramais ON ramais.id = ligacoes.id_ramal "; | |
$sql .= " WHERE ramais.ramal = '".filter_var($circuito, FILTER_SANITIZE_STRING)."' "; | |
$sql .= " AND ligacoes.mes_referencia = '".filter_var($referencia, FILTER_SANITIZE_STRING)."' "; | |
$sql .= " ORDER BY "; | |
$sql .= " ligacoes.hora_inicial ASC "; | |
$result = $this->pdo->query($sql); | |
while ($row = $result->fetch(\PDO::FETCH_OBJ)) { | |
$ligacao = new \stdClass(); | |
$ligacao->origem = stripslashes($row->origem); | |
$ligacao->duracao = stripslashes($row->duracao); | |
$ligacao->cidade = stripslashes(str_replace("Intragrupo", "RCT", $row->cidade)); | |
$ligacao->valor = (float) $row->valorLigacao; | |
$ligacao->ligacao_local = stripslashes($row->ligacaoLocal); | |
$ligacao->hora_inicial = date_format(new \DateTime($row->horaInicial), "d/m/Y H:i"); | |
if (substr($row->destino, 0, 4) == "0800" || substr($row->destino, 0, 4) == "0300") { | |
$ligacao->destino = mask(stripslashes($row->destino), "#### ### ####"); | |
} | |
elseif (strlen($row->destino) == 10) { | |
$ligacao->destino = mask(stripslashes($row->destino), "(##) ####-####"); | |
} | |
elseif (strlen($row->destino) == 11) { | |
$ligacao->destino = mask(stripslashes($row->destino), "(##) #####-####"); | |
} | |
else { | |
$ligacao->destino = stripslashes($row->destino); | |
} | |
$retorno[] = $ligacao; | |
} | |
return $retorno; | |
} | |
/** | |
* Prepara a DSN para conexão do PDO com o banco de dados. | |
* | |
* @return string | |
*/ | |
private function montaDSN() | |
{ | |
$dsn = "mysql:host=".$this->host.";port=3306;dbname=".$this->dbname.";charset=utf8"; | |
return $dsn; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment