LogAcessoRepository.php 5.95 KB
<?php

namespace Cacic\CommonBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * LogAcessoRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class LogAcessoRepository extends EntityRepository
{
    /**
     * Função que retorna o último acesso para o computador solicitado
     *
     * @param $computador
     */
    public function ultimoAcesso( $computador ) {
        $qb = $this->createQueryBuilder('acesso')
            ->select('acesso')
            ->where('acesso.idComputador = :computador')
            ->orderBy('acesso.data', 'desc')
            ->setMaxResults(1)
            ->setParameter('computador', $computador );

        return $qb->getQuery()->getOneOrNullResult();
    }


    /**
     *
     * Realiza pesquisa por LOGs de ACESSO ou ATIVIDADES segundo parâmetros informados
     * @param string|array $tipoPesquisa
     * @param date $dataInicio
     * @param date $dataFim
     * @param array $locais
     */
    public function pesquisar( $dataInicio, $dataFim, $locais )
    {

        // Monta a Consulta básica...
        $query = $this->createQueryBuilder('log')
            ->select('rede.idRede', 'rede.nmRede', 'rede.teIpRede', 'loc.nmLocal', 'loc.sgLocal', 'COUNT(DISTINCT log.idComputador) as numComp')
            ->innerJoin('log.idComputador', 'comp')
            ->innerJoin('comp.idRede', 'rede')
            ->innerJoin('rede.idLocal', 'loc')
            ->groupBy('rede', 'loc.nmLocal', 'loc.sgLocal');

        /**
         * Verifica os filtros que foram parametrizados
         */
        if ( $dataInicio )
            $query->andWhere( 'log.data >= :dtInicio' )->setParameter('dtInicio', ( $dataInicio.' 00:00:00' ));

        if ( $dataFim )
            $query->andWhere( 'log.data <= :dtFim' )->setParameter('dtFim', ( $dataFim.' 23:59:59' ));

        if ( count($locais) )
            $query->andWhere( 'loc.idLocal IN (:locais)' )->setParameter('locais', $locais);


        return $query->getQuery()->execute();
    }
    public function gerarRelatorioRede( $filtros, $idRede,$dataInicio, $dataFim )
    {
        $query = $this->createQueryBuilder('log')
            ->select('comp.idComputador', 'comp.nmComputador', 'comp.teNodeAddress','comp.teIpComputador', 'max(log.data) AS data', 'so.idSo', 'so.inMswindows', 'so.sgSo', 'rede.idRede', 'rede.nmRede', 'rede.teIpRede', 'local.nmLocal', 'local.idLocal')
            ->innerJoin('log.idComputador','comp')
            ->innerJoin('comp.idSo', 'so')
            ->innerJoin('comp.idRede','rede')
            ->innerJoin('rede.idLocal', 'local')
            ->groupBy('comp.idComputador', 'comp.nmComputador', 'comp.teNodeAddress','comp.teIpComputador', 'so.idSo', 'so.inMswindows', 'so.sgSo', 'rede.idRede', 'rede.nmRede', 'rede.teIpRede', 'local.nmLocal', 'local.idLocal');

        /**
         * Verifica os filtros que foram parametrizados
         */
        if ( $dataInicio )
            $query->andWhere( 'log.data >= :dtInicio' )->setParameter('dtInicio', ( $dataInicio.' 00:00:00' ));

        if ( $dataFim )
            $query->andWhere( 'log.data <= :dtFim' )->setParameter('dtFim', ( $dataFim.' 23:59:59' ));

        if ( ($idRede) )
            $query->andWhere( 'comp.idRede IN (:rede)' )->setParameter('rede', $idRede);

        return $query->getQuery()->execute();
    }

    /**
     *
     * Total de computadores monitorados nos últimos 30 dias
     *
     */

    public function countPorComputador() {

        $query = $this->createQueryBuilder('log')
            ->select('COUNT(DISTINCT comp.idComputador)')
            ->innerJoin('CacicCommonBundle:Computador','comp', 'WITH', 'log.idComputador = comp.idComputador')
            ->andWhere( 'log.data >= (current_date() - 30)' );

        return $query->getQuery()->execute();
    }
    public function faturamentoCsv( $dataInicio, $dataFim, $locais )
    {

        // Monta a Consulta básica...
        $query = $this->createQueryBuilder('log')
            ->select( 'loc.nmLocal', 'rede.nmRede', 'rede.teIpRede', 'COUNT(DISTINCT log.idComputador) as numComp')
            ->innerJoin('log.idComputador', 'comp')
            ->innerJoin('comp.idRede', 'rede')
            ->innerJoin('rede.idLocal', 'loc')
            ->groupBy('rede', 'loc.nmLocal', 'loc.sgLocal');

        /**
         * Verifica os filtros que foram parametrizados
         */
        if ( $dataInicio )
            $query->andWhere( 'log.data >= :dtInicio' )->setParameter('dtInicio', ( $dataInicio.' 00:00:00' ));

        if ( $dataFim )
            $query->andWhere( 'log.data <= :dtFim' )->setParameter('dtFim', ( $dataFim.' 23:59:59' ));

        if ( count($locais) )
            $query->andWhere( 'loc.idLocal IN (:locais)' )->setParameter('locais', $locais);


        return $query->getQuery()->execute();
    }
    public function listarCsv( $filtros, $idRede, $dataInicio, $dataFim )
    {
        $query = $this->createQueryBuilder('log')
            ->select('comp.nmComputador', 'comp.teNodeAddress','comp.teIpComputador', 'so.sgSo', 'local.nmLocal', 'rede.nmRede','max(log.data) AS data')
            ->innerJoin('log.idComputador','comp')
            ->innerJoin('comp.idSo', 'so')
            ->innerJoin('comp.idRede','rede')
            ->innerJoin('rede.idLocal', 'local')
            ->groupBy( 'comp.idComputador', 'comp.nmComputador', 'comp.teNodeAddress','comp.teIpComputador', 'so.idSo', 'so.inMswindows', 'so.sgSo', 'rede.idRede', 'rede.nmRede', 'rede.teIpRede', 'local.nmLocal', 'local.idLocal');

        /**
         * Verifica os filtros que foram parametrizados
         */
        if ( $dataInicio )
            $query->andWhere( 'log.data >= :dtInicio' )->setParameter('dtInicio', ( $dataInicio.' 00:00:00' ));

        if ( $dataFim )
            $query->andWhere( 'log.data <= :dtFim' )->setParameter('dtFim', ( $dataFim.' 23:59:59' ));

        if ( count($idRede) )
            $query->andWhere( 'comp.idRede IN (:rede)' )->setParameter('rede', $idRede);

        return $query->getQuery()->execute();
    }

}