Skip to content

Instantly share code, notes, and snippets.

@ThiagoLimah
Created February 22, 2018 21:18
Show Gist options
  • Save ThiagoLimah/fe51686a3a11e762fbddebde41ef2922 to your computer and use it in GitHub Desktop.
Save ThiagoLimah/fe51686a3a11e762fbddebde41ef2922 to your computer and use it in GitHub Desktop.
<?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