Commit 99658c82f01debeeb668cda8d7c662518489e6f1
Exists in
master
and in
1 other branch
Merge remote-tracking branch 'origin/master'
Showing
12 changed files
with
291 additions
and
32 deletions
Show diff stats
src/Cacic/CommonBundle/Controller/LocalController.php
| @@ -136,7 +136,7 @@ class LocalController extends Controller | @@ -136,7 +136,7 @@ class LocalController extends Controller | ||
| 136 | /** | 136 | /** |
| 137 | * Primeiramente, remove as configurações aplicadas ao Local | 137 | * Primeiramente, remove as configurações aplicadas ao Local |
| 138 | */ | 138 | */ |
| 139 | - $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->removerConfiguracoesDoLocal( $local ); | 139 | + $this->getDoctrine()->getManager()->getRepository('CacicCommonBundle:Local')->excluirLocal( $local ); |
| 140 | 140 | ||
| 141 | $em->remove( $local ); // Tenta excluir o registro da base de dados | 141 | $em->remove( $local ); // Tenta excluir o registro da base de dados |
| 142 | $em->flush(); | 142 | $em->flush(); |
| @@ -147,6 +147,7 @@ class LocalController extends Controller | @@ -147,6 +147,7 @@ class LocalController extends Controller | ||
| 147 | } | 147 | } |
| 148 | catch ( \Doctrine\DBAL\DBALException $e ) | 148 | catch ( \Doctrine\DBAL\DBALException $e ) |
| 149 | { | 149 | { |
| 150 | + $this->get('logger')->error("Erro na exclusão do local\n".$e->getMessage()); | ||
| 150 | $out = array('status' => 'error', 'code' => false); | 151 | $out = array('status' => 'error', 'code' => false); |
| 151 | if ( preg_match('#SQLSTATE\[(\d+)\]#', $e->getMessage(), $tmp) ) | 152 | if ( preg_match('#SQLSTATE\[(\d+)\]#', $e->getMessage(), $tmp) ) |
| 152 | $out['code'] = $tmp[1]; | 153 | $out['code'] = $tmp[1]; |
src/Cacic/CommonBundle/Controller/UorgController.php
| @@ -46,6 +46,7 @@ class UorgController extends Controller | @@ -46,6 +46,7 @@ class UorgController extends Controller | ||
| 46 | $_tree[] = array( | 46 | $_tree[] = array( |
| 47 | 'label' => $uorg['nmUorg'], | 47 | 'label' => $uorg['nmUorg'], |
| 48 | 'filho' => $uorg['numFilhas'], | 48 | 'filho' => $uorg['numFilhas'], |
| 49 | + 'rede' => $uorg['idRede'], | ||
| 49 | 'id' => $uorg['idUorg'], | 50 | 'id' => $uorg['idUorg'], |
| 50 | 'load_on_demand' => (bool) $uorg['numFilhas'] | 51 | 'load_on_demand' => (bool) $uorg['numFilhas'] |
| 51 | ); | 52 | ); |
src/Cacic/CommonBundle/Entity/ComputadorColetaRepository.php
| @@ -46,7 +46,7 @@ class ComputadorColetaRepository extends EntityRepository | @@ -46,7 +46,7 @@ class ComputadorColetaRepository extends EntityRepository | ||
| 46 | public function gerarRelatorioConfiguracoes( $filtros ) | 46 | public function gerarRelatorioConfiguracoes( $filtros ) |
| 47 | { | 47 | { |
| 48 | $qb = $this->createQueryBuilder('coleta') | 48 | $qb = $this->createQueryBuilder('coleta') |
| 49 | - ->select('IDENTITY(coleta.computador), coleta.teClassPropertyValue, comp.nmComputador, comp.teNodeAddress, comp.teIpComputador, so.idSo, so.inMswindows, so.sgSo, rede.idRede, local.nmLocal, local.idLocal') | 49 | + ->select('IDENTITY(coleta.computador), coleta.teClassPropertyValue, comp.nmComputador, comp.teNodeAddress, comp.teIpComputador, so.idSo, so.inMswindows, so.sgSo, so.teDescSo, rede.idRede, local.nmLocal, local.idLocal') |
| 50 | ->innerJoin('coleta.classProperty', 'property') | 50 | ->innerJoin('coleta.classProperty', 'property') |
| 51 | ->innerJoin('property.idClass', 'classe') | 51 | ->innerJoin('property.idClass', 'classe') |
| 52 | ->innerJoin('coleta.computador', 'comp') | 52 | ->innerJoin('coleta.computador', 'comp') |
| @@ -244,7 +244,7 @@ class ComputadorColetaRepository extends EntityRepository | @@ -244,7 +244,7 @@ class ComputadorColetaRepository extends EntityRepository | ||
| 244 | public function gerarRelatorioWMI( $filtros, $classe ) | 244 | public function gerarRelatorioWMI( $filtros, $classe ) |
| 245 | { | 245 | { |
| 246 | $qb = $this->createQueryBuilder('coleta') | 246 | $qb = $this->createQueryBuilder('coleta') |
| 247 | - ->select('property.nmPropertyName', 'coleta.teClassPropertyValue', 'so.idSo', 'so.inMswindows', 'so.sgSo', 'rede.idRede', 'rede.nmRede', 'rede.teIpRede', 'local.nmLocal', 'local.idLocal', 'count(DISTINCT coleta.computador) as numComp') | 247 | + ->select('property.nmPropertyName', 'coleta.teClassPropertyValue', 'so.idSo', 'so.inMswindows', 'so.sgSo', 'so.teDescSo', 'rede.idRede', 'rede.nmRede', 'rede.teIpRede', 'local.nmLocal', 'local.idLocal', 'count(DISTINCT coleta.computador) as numComp') |
| 248 | ->innerJoin('coleta.classProperty', 'property') | 248 | ->innerJoin('coleta.classProperty', 'property') |
| 249 | ->innerJoin('property.idClass', 'classe') | 249 | ->innerJoin('property.idClass', 'classe') |
| 250 | ->innerJoin('coleta.computador', 'comp') | 250 | ->innerJoin('coleta.computador', 'comp') |
src/Cacic/CommonBundle/Entity/LocalRepository.php
| @@ -43,5 +43,73 @@ class LocalRepository extends EntityRepository | @@ -43,5 +43,73 @@ class LocalRepository extends EntityRepository | ||
| 43 | 43 | ||
| 44 | return $this->getEntityManager()->createQuery( $_dql )->getArrayResult(); | 44 | return $this->getEntityManager()->createQuery( $_dql )->getArrayResult(); |
| 45 | } | 45 | } |
| 46 | + | ||
| 47 | + /** | ||
| 48 | + * Retorna o último local cadastrado | ||
| 49 | + * | ||
| 50 | + * @return mixed | ||
| 51 | + */ | ||
| 52 | + | ||
| 53 | + public function getMaxLocal($local) { | ||
| 54 | + $_dql = "SELECT l | ||
| 55 | + FROM CacicCommonBundle:Local l | ||
| 56 | + WHERE l.idLocal <> :local | ||
| 57 | + ORDER BY l.idLocal desc | ||
| 58 | + "; | ||
| 59 | + | ||
| 60 | + return $this->getEntityManager() | ||
| 61 | + ->createQuery( $_dql ) | ||
| 62 | + ->setMaxResults(1) | ||
| 63 | + ->setParameter('local', $local) | ||
| 64 | + ->getSingleResult(); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + /** | ||
| 68 | + * Move os usuários de local | ||
| 69 | + * | ||
| 70 | + * @param $local | ||
| 71 | + */ | ||
| 72 | + | ||
| 73 | + public function moveUsuarios($local) { | ||
| 74 | + $em = $this->getEntityManager(); | ||
| 75 | + $usuarios = $local->getUsuarios(); | ||
| 76 | + $maxLocal = $em->getRepository('CacicCommonBundle:Local')->getMaxLocal($local->getIdLocal()); | ||
| 77 | + // Coloca cada usuário em no último local cadastrado | ||
| 78 | + foreach ($usuarios as $modificar) { | ||
| 79 | + $modificar->setIdLocal($maxLocal); | ||
| 80 | + $em->persist($modificar); | ||
| 81 | + } | ||
| 82 | + $em->flush(); | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + /** | ||
| 86 | + * Excluir local | ||
| 87 | + * | ||
| 88 | + * @param $local | ||
| 89 | + */ | ||
| 90 | + | ||
| 91 | + public function excluirLocal($local) { | ||
| 92 | + $em = $this->getEntityManager(); | ||
| 93 | + $em->getRepository('CacicCommonBundle:ConfiguracaoLocal')->removerConfiguracoesDoLocal( $local ); | ||
| 94 | + $em->getRepository('CacicCommonBundle:Local')->moveUsuarios( $local ); | ||
| 95 | + | ||
| 96 | + $config = $em->getRepository('CacicCommonBundle:PatrimonioConfigInterface')->findBy(array('local' => $local->getIdLocal())); | ||
| 97 | + foreach ($config as $excluir) { | ||
| 98 | + $em->remove($excluir); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + $config = $em->getRepository('CacicCommonBundle:UnidOrganizacionalNivel2')->findBy(array('idLocal' => $local->getIdLocal())); | ||
| 102 | + foreach ($config as $excluir) { | ||
| 103 | + $em->remove($excluir); | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + $config = $em->getRepository('CacicCommonBundle:Rede')->findBy(array('idLocal' => $local->getIdLocal())); | ||
| 107 | + foreach ($config as $excluir) { | ||
| 108 | + $excluir->setIdLocal(null); | ||
| 109 | + $em->persist($excluir); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + $em->flush(); | ||
| 113 | + } | ||
| 46 | 114 | ||
| 47 | } | 115 | } |
| 48 | \ No newline at end of file | 116 | \ No newline at end of file |
src/Cacic/CommonBundle/Entity/RedeRepository.php
| @@ -38,13 +38,13 @@ class RedeRepository extends EntityRepository | @@ -38,13 +38,13 @@ class RedeRepository extends EntityRepository | ||
| 38 | { | 38 | { |
| 39 | $qb = $this->createQueryBuilder('r') | 39 | $qb = $this->createQueryBuilder('r') |
| 40 | ->select('r.idRede','r.nmRede','r.teIpRede','r.teServCacic', 'r.teServUpdates', | 40 | ->select('r.idRede','r.nmRede','r.teIpRede','r.teServCacic', 'r.teServUpdates', |
| 41 | - 'r.teMascaraRede', 'l.nmLocal', 'COUNT(comp.idComputador) AS numComp', 's.nmServidorAutenticacao','uorg.nmUorg') | 41 | + 'r.teMascaraRede', 'l.sgLocal', 'COUNT(comp.idComputador) AS numComp', 's.nmServidorAutenticacao','uorg.nmUorg') |
| 42 | ->innerJoin('CacicCommonBundle:Local', 'l', 'WITH', 'l.idLocal = r.idLocal') | 42 | ->innerJoin('CacicCommonBundle:Local', 'l', 'WITH', 'l.idLocal = r.idLocal') |
| 43 | ->leftJoin('CacicCommonBundle:ServidorAutenticacao', 's', 'WITH', 's.idServidorAutenticacao = r.idServidorAutenticacao') | 43 | ->leftJoin('CacicCommonBundle:ServidorAutenticacao', 's', 'WITH', 's.idServidorAutenticacao = r.idServidorAutenticacao') |
| 44 | ->leftJoin('CacicCommonBundle:Computador', 'comp', 'WITH', 'comp.idRede = r.idRede') | 44 | ->leftJoin('CacicCommonBundle:Computador', 'comp', 'WITH', 'comp.idRede = r.idRede') |
| 45 | ->leftJoin('CacicCommonBundle:Uorg', 'uorg', 'WITH', 'uorg.rede = r.idRede') | 45 | ->leftJoin('CacicCommonBundle:Uorg', 'uorg', 'WITH', 'uorg.rede = r.idRede') |
| 46 | - ->groupBy('r.idRede, r.nmRede, r.teIpRede, r.teServCacic, r.teServUpdates, r.teMascaraRede, l.nmLocal, s.nmServidorAutenticacao, uorg.nmUorg') | ||
| 47 | - ->orderBy('r.teIpRede, l.nmLocal'); | 46 | + ->groupBy('r.idRede, r.nmRede, r.teIpRede, r.teServCacic, r.teServUpdates, r.teMascaraRede, l.sgLocal, s.nmServidorAutenticacao, uorg.nmUorg') |
| 47 | + ->orderBy('r.teIpRede, l.sgLocal'); | ||
| 48 | 48 | ||
| 49 | return $paginator->paginate( | 49 | return $paginator->paginate( |
| 50 | $qb->getQuery()->execute(), | 50 | $qb->getQuery()->execute(), |
src/Cacic/CommonBundle/Entity/UorgRepository.php
| @@ -42,12 +42,13 @@ class UorgRepository extends EntityRepository | @@ -42,12 +42,13 @@ class UorgRepository extends EntityRepository | ||
| 42 | */ | 42 | */ |
| 43 | public function getFolhasDoNo( $idUorgPai ) | 43 | public function getFolhasDoNo( $idUorgPai ) |
| 44 | { | 44 | { |
| 45 | - $_dql = "SELECT uorg.idUorg, uorg.nmUorg, COUNT(filhas.idUorg) AS numFilhas | 45 | + $_dql = "SELECT uorg.idUorg, uorg.nmUorg, r.idRede, COUNT(filhas.idUorg) AS numFilhas |
| 46 | FROM CacicCommonBundle:Uorg uorg | 46 | FROM CacicCommonBundle:Uorg uorg |
| 47 | INNER JOIN uorg.uorgPai pai | 47 | INNER JOIN uorg.uorgPai pai |
| 48 | LEFT JOIN uorg.uorgFilhas filhas | 48 | LEFT JOIN uorg.uorgFilhas filhas |
| 49 | + LEFT JOIN uorg.rede r | ||
| 49 | WHERE pai.idUorg = :idUorgPai | 50 | WHERE pai.idUorg = :idUorgPai |
| 50 | - GROUP BY uorg.idUorg, uorg.nmUorg"; | 51 | + GROUP BY uorg.idUorg, uorg.nmUorg, r.idRede"; |
| 51 | 52 | ||
| 52 | return $this->getEntityManager()->createQuery( $_dql ) | 53 | return $this->getEntityManager()->createQuery( $_dql ) |
| 53 | ->setParameter('idUorgPai', $idUorgPai) | 54 | ->setParameter('idUorgPai', $idUorgPai) |
src/Cacic/CommonBundle/Resources/views/Rede/index.html.twig
| @@ -39,7 +39,7 @@ | @@ -39,7 +39,7 @@ | ||
| 39 | <tr id="item_{{ rede['idRede'] }}" class="{{ cycle(['row0', 'row1'], loop.index) }}"> | 39 | <tr id="item_{{ rede['idRede'] }}" class="{{ cycle(['row0', 'row1'], loop.index) }}"> |
| 40 | <td>{{ rede['teIpRede'] }}/{{ rede['teMascaraRede']}}</td> | 40 | <td>{{ rede['teIpRede'] }}/{{ rede['teMascaraRede']}}</td> |
| 41 | <td id="item_desc_{{ rede['idRede'] }}">{{ rede['nmRede'] }}</td> | 41 | <td id="item_desc_{{ rede['idRede'] }}">{{ rede['nmRede'] }}</td> |
| 42 | - <td style="text-align: center">{{ rede['nmLocal']}}</td> | 42 | + <td style="text-align: center">{{ rede['sgLocal']}}</td> |
| 43 | <td style="text-align: center">{{ rede['numComp'] }}</td> | 43 | <td style="text-align: center">{{ rede['numComp'] }}</td> |
| 44 | <td style="text-align: center">{{ rede['nmServidorAutenticacao'] }}</td> | 44 | <td style="text-align: center">{{ rede['nmServidorAutenticacao'] }}</td> |
| 45 | <td style="text-align: center">{{ rede['teServCacic'] }}</td> | 45 | <td style="text-align: center">{{ rede['teServCacic'] }}</td> |
| @@ -121,13 +121,20 @@ | @@ -121,13 +121,20 @@ | ||
| 121 | <script type="text/javascript" src="{{ asset('bundles/caciccommon/jqTree-0.15/tree.jquery.js') }}"></script> | 121 | <script type="text/javascript" src="{{ asset('bundles/caciccommon/jqTree-0.15/tree.jquery.js') }}"></script> |
| 122 | 122 | ||
| 123 | <script type="text/javascript"> | 123 | <script type="text/javascript"> |
| 124 | + $( ".bt-vincular" ).click(function(){ | ||
| 125 | + | ||
| 126 | + var id = $( this ).parent().parent().attr( 'id' ).replace( /.*?(\d+)$/, '$1' ); | ||
| 127 | + | ||
| 128 | + $( "#vincularUORGs" ).data( 'id', id ).dialog( "open" ); | ||
| 129 | + | ||
| 124 | 130 | ||
| 125 | - var _dados = [ // Unidades de primeiro nível | 131 | + var _dados = [ // Unidades de primeiro nível |
| 126 | {% for uorg in uorgs %} | 132 | {% for uorg in uorgs %} |
| 127 | { | 133 | { |
| 128 | label: '{{ uorg.nmUorg }}', | 134 | label: '{{ uorg.nmUorg }}', |
| 129 | id: {{ uorg.idUorg }}, | 135 | id: {{ uorg.idUorg }}, |
| 130 | - filha:{{ uorg.numFilhas }}, | 136 | + rede: {% if uorg.idRede > 0%}{{ uorg.idRede }}{% else %}0{% endif %}, |
| 137 | + filha: {{ uorg.numFilhas }}, | ||
| 131 | load_on_demand: {% if uorg.numFilhas %}true {% else %}false{% endif %} | 138 | load_on_demand: {% if uorg.numFilhas %}true {% else %}false{% endif %} |
| 132 | 139 | ||
| 133 | }{% if loop.last != true %},{% endif %} | 140 | }{% if loop.last != true %},{% endif %} |
| @@ -136,8 +143,6 @@ | @@ -136,8 +143,6 @@ | ||
| 136 | ]; | 143 | ]; |
| 137 | 144 | ||
| 138 | $(function() { | 145 | $(function() { |
| 139 | - | ||
| 140 | - | ||
| 141 | $('#vincularUORGs').tree({ | 146 | $('#vincularUORGs').tree({ |
| 142 | data: _dados, | 147 | data: _dados, |
| 143 | dataUrl: function( node ) { | 148 | dataUrl: function( node ) { |
| @@ -145,15 +150,21 @@ | @@ -145,15 +150,21 @@ | ||
| 145 | }, | 150 | }, |
| 146 | onCreateLi: function(node, $li) { | 151 | onCreateLi: function(node, $li) { |
| 147 | 152 | ||
| 153 | + console.log(id); | ||
| 148 | if(node.filha <= 0){ | 154 | if(node.filha <= 0){ |
| 149 | - | ||
| 150 | - var _acoesNode = ' <a onclick="('+ node.id +');"> <input type="checkbox" name="uorg" value="'+node.id+'" /></a> ' | ||
| 151 | - } | 155 | + if(node.rede == id){ |
| 156 | + var _acoesNode = ' <a onclick="('+ node.id +');"> <input type="checkbox" checked name="uorg" value="'+node.id+'" /></a> ' | ||
| 157 | + }else{ | ||
| 158 | + var _acoesNode = ' <a onclick="('+ node.id +');"> <input type="checkbox" name="uorg" value="'+node.id+'" /></a> ' | ||
| 159 | + } | ||
| 160 | + } | ||
| 152 | 161 | ||
| 153 | if(node.filho <= 0){ | 162 | if(node.filho <= 0){ |
| 154 | - | ||
| 155 | - var _acoesNode = ' <a onclick="('+ node.id +');"> <input type="checkbox" name="uorg" value="'+node.id+'" /></a> ' | ||
| 156 | - | 163 | + if(node.rede == id){ |
| 164 | + var _acoesNode = ' <a onclick="('+ node.id +');"> <input type="checkbox" checked name="uorg" value="'+node.id+'" /></a> ' | ||
| 165 | + }else{ | ||
| 166 | + var _acoesNode = ' <a onclick="('+ node.id +');"> <input type="checkbox" name="uorg" value="'+node.id+'" /></a> ' | ||
| 167 | + } | ||
| 157 | } | 168 | } |
| 158 | 169 | ||
| 159 | $li.find('span.jqtree-title').after( _acoesNode ); | 170 | $li.find('span.jqtree-title').after( _acoesNode ); |
| @@ -176,7 +187,7 @@ | @@ -176,7 +187,7 @@ | ||
| 176 | }); | 187 | }); |
| 177 | var senha = $( '#uorg' ).val(); | 188 | var senha = $( '#uorg' ).val(); |
| 178 | $( "#vincularUORGs" ).dialog({ | 189 | $( "#vincularUORGs" ).dialog({ |
| 179 | - autoOpen: false, | 190 | + autoOpen: true, |
| 180 | height: 550, | 191 | height: 550, |
| 181 | width: 550, | 192 | width: 550, |
| 182 | modal: true, | 193 | modal: true, |
| @@ -217,10 +228,7 @@ | @@ -217,10 +228,7 @@ | ||
| 217 | 228 | ||
| 218 | }); | 229 | }); |
| 219 | 230 | ||
| 220 | - $( ".bt-vincular" ).click(function(){ | ||
| 221 | 231 | ||
| 222 | - var id = $( this ).parent().parent().attr( 'id' ).replace( /.*?(\d+)$/, '$1' ); | ||
| 223 | - $( "#vincularUORGs" ).data( 'id', id ).dialog( "open" ); | ||
| 224 | }); | 232 | }); |
| 225 | </script> | 233 | </script> |
| 226 | {% endblock %} | 234 | {% endblock %} |
src/Cacic/RelatorioBundle/Controller/HardwareController.php
| @@ -6,6 +6,12 @@ use Doctrine\Common\Util\Debug; | @@ -6,6 +6,12 @@ use Doctrine\Common\Util\Debug; | ||
| 6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
| 7 | use Symfony\Component\HttpFoundation\Request; | 7 | use Symfony\Component\HttpFoundation\Request; |
| 8 | 8 | ||
| 9 | +use Ddeboer\DataImport\Workflow; | ||
| 10 | +use Ddeboer\DataImport\Reader\ArrayReader; | ||
| 11 | +use Ddeboer\DataImport\Writer\CsvWriter; | ||
| 12 | +use Ddeboer\DataImport\ValueConverter\CallbackValueConverter; | ||
| 13 | +use Symfony\Component\HttpFoundation\BinaryFileResponse; | ||
| 14 | + | ||
| 9 | class HardwareController extends Controller | 15 | class HardwareController extends Controller |
| 10 | { | 16 | { |
| 11 | 17 | ||
| @@ -75,9 +81,12 @@ class HardwareController extends Controller | @@ -75,9 +81,12 @@ class HardwareController extends Controller | ||
| 75 | */ | 81 | */ |
| 76 | public function wmiRelatorioAction( Request $request, $classe ) | 82 | public function wmiRelatorioAction( Request $request, $classe ) |
| 77 | { | 83 | { |
| 84 | + $filtros = $request->get('rel_filtro_hardware'); | ||
| 85 | + | ||
| 78 | $dados = $this->getDoctrine() | 86 | $dados = $this->getDoctrine() |
| 79 | ->getRepository('CacicCommonBundle:ComputadorColeta') | 87 | ->getRepository('CacicCommonBundle:ComputadorColeta') |
| 80 | - ->gerarRelatorioWMI( $filtros = $request->get('rel_filtro_hardware'), $classe = $classe ); | 88 | + ->gerarRelatorioWMI($filtros , $classe = $classe ); |
| 89 | + | ||
| 81 | 90 | ||
| 82 | $locale = $request->getLocale(); | 91 | $locale = $request->getLocale(); |
| 83 | return $this->render( | 92 | return $this->render( |
| @@ -85,6 +94,7 @@ class HardwareController extends Controller | @@ -85,6 +94,7 @@ class HardwareController extends Controller | ||
| 85 | array( | 94 | array( |
| 86 | 'idioma'=> $locale, | 95 | 'idioma'=> $locale, |
| 87 | 'dados' => $dados, | 96 | 'dados' => $dados, |
| 97 | + 'filtros' => $filtros, | ||
| 88 | 'classe' => $classe | 98 | 'classe' => $classe |
| 89 | ) | 99 | ) |
| 90 | ); | 100 | ); |
| @@ -117,18 +127,159 @@ class HardwareController extends Controller | @@ -117,18 +127,159 @@ class HardwareController extends Controller | ||
| 117 | 127 | ||
| 118 | $dados = $this->getDoctrine() | 128 | $dados = $this->getDoctrine() |
| 119 | ->getRepository('CacicCommonBundle:ComputadorColeta') | 129 | ->getRepository('CacicCommonBundle:ComputadorColeta') |
| 120 | - ->gerarRelatorioWMIDetalhe( $filtros = $filtros, $classe = $classe ); | 130 | + ->gerarRelatorioWMIDetalhe( $filtros, $classe ); |
| 121 | 131 | ||
| 122 | $locale = $request->getLocale(); | 132 | $locale = $request->getLocale(); |
| 133 | + | ||
| 134 | + // Pega o idClassProperty | ||
| 135 | + $idClassProperty = $this | ||
| 136 | + ->getDoctrine() | ||
| 137 | + ->getManager() | ||
| 138 | + ->createQuery("SELECT p.idClassProperty FROM CacicCommonBundle:ClassProperty p WHERE p.nmPropertyName = :propriedade") | ||
| 139 | + ->setParameter('propriedade', $propriedade) | ||
| 140 | + ->getArrayResult(); | ||
| 141 | + | ||
| 142 | + // Corrige para fazer o parsing da variável | ||
| 143 | + $item = array(); | ||
| 144 | + foreach ($idClassProperty as $elm) { | ||
| 145 | + array_push($item, $elm['idClassProperty']); | ||
| 146 | + } | ||
| 147 | + $filtros['conf'] = join($item, ","); | ||
| 148 | + | ||
| 123 | return $this->render( | 149 | return $this->render( |
| 124 | 'CacicRelatorioBundle:Hardware:rel_wmi_detalhe.html.twig', | 150 | 'CacicRelatorioBundle:Hardware:rel_wmi_detalhe.html.twig', |
| 125 | array( | 151 | array( |
| 126 | 'idioma'=> $locale, | 152 | 'idioma'=> $locale, |
| 127 | 'dados' => $dados, | 153 | 'dados' => $dados, |
| 128 | 'propriedade' => $propriedade, | 154 | 'propriedade' => $propriedade, |
| 155 | + 'filtros' => $filtros, | ||
| 129 | 'classe' => $classe | 156 | 'classe' => $classe |
| 130 | ) | 157 | ) |
| 131 | ); | 158 | ); |
| 132 | } | 159 | } |
| 160 | + | ||
| 161 | + /** | ||
| 162 | + * [RELATÓRIO] Relatório CSV de atributos da classe WMI gerado à partir dos filtros informados | ||
| 163 | + */ | ||
| 164 | + public function csvWMIRelatorioAction( Request $request, $classe ) | ||
| 165 | + { | ||
| 166 | + $conf = $request->get('conf'); | ||
| 167 | + $rede = $request->get('rede'); | ||
| 168 | + $local = $request->get('local'); | ||
| 169 | + $so = $request->get('so'); | ||
| 170 | + | ||
| 171 | + // Adiciona rede à lista de filtros se for fornecido | ||
| 172 | + if (!empty($rede)) { | ||
| 173 | + $filtros['redes'] = $rede; | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + // Adiciona local à lista de filtros se for fornecido | ||
| 177 | + if (!empty($local)) { | ||
| 178 | + $filtros['locais'] = $local; | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + // Adiciona SO à lista de filtros se for fornecido | ||
| 182 | + if (!empty($so)) { | ||
| 183 | + $filtros['so'] = $so; | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + // Adiciona Propriedades à lista de filtros se for fornecido | ||
| 187 | + if (!empty($conf)) { | ||
| 188 | + $filtros['conf'] = $conf; | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + $dados = $this->getDoctrine() | ||
| 192 | + ->getRepository('CacicCommonBundle:ComputadorColeta') | ||
| 193 | + ->gerarRelatorioWMI( $filtros, $classe ); | ||
| 194 | + | ||
| 195 | + $locale = $request->getLocale(); | ||
| 196 | + | ||
| 197 | + // Gera cabeçalho | ||
| 198 | + $cabecalho = array(); | ||
| 199 | + foreach($dados as $elm) { | ||
| 200 | + array_push($cabecalho, array_keys($elm)); | ||
| 201 | + break; | ||
| 202 | + } | ||
| 203 | + // Gera CSV | ||
| 204 | + $reader = new ArrayReader(array_merge($cabecalho, $dados)); | ||
| 205 | + | ||
| 206 | + // Create the workflow from the reader | ||
| 207 | + $workflow = new Workflow($reader); | ||
| 208 | + | ||
| 209 | + // Add the writer to the workflow | ||
| 210 | + $tmpfile = tempnam(sys_get_temp_dir(), $classe.".csv"); | ||
| 211 | + $file = new \SplFileObject($tmpfile, 'w'); | ||
| 212 | + $writer = new CsvWriter($file); | ||
| 213 | + $workflow->addWriter($writer); | ||
| 214 | + | ||
| 215 | + // Process the workflow | ||
| 216 | + $workflow->process(); | ||
| 217 | + | ||
| 218 | + // Retorna o arquivo | ||
| 219 | + $response = new BinaryFileResponse($tmpfile); | ||
| 220 | + $response->headers->set('Content-Type', 'text/csv'); | ||
| 221 | + $response->headers->set('Content-Disposition', "attachment; filename=$classe.csv"); | ||
| 222 | + $response->headers->set('Content-Transfer-Encoding', 'binary'); | ||
| 223 | + | ||
| 224 | + return $response; | ||
| 225 | + } | ||
| 226 | + | ||
| 227 | + public function csvWMIRelatorioDetalheAction( Request $request, $classe, $propriedade ) | ||
| 228 | + { | ||
| 229 | + $filtros['conf'] = $propriedade; | ||
| 230 | + $rede = $request->get('rede'); | ||
| 231 | + $local = $request->get('local'); | ||
| 232 | + $so = $request->get('so'); | ||
| 233 | + | ||
| 234 | + // Adiciona rede à lista de filtros se for fornecido | ||
| 235 | + if (!empty($rede)) { | ||
| 236 | + $filtros['redes'] = $rede; | ||
| 237 | + } | ||
| 238 | + | ||
| 239 | + // Adiciona local à lista de filtros se for fornecido | ||
| 240 | + if (!empty($local)) { | ||
| 241 | + $filtros['locais'] = $local; | ||
| 242 | + } | ||
| 243 | + | ||
| 244 | + // Adiciona SO à lista de filtros se for fornecido | ||
| 245 | + if (!empty($so)) { | ||
| 246 | + $filtros['so'] = $so; | ||
| 247 | + } | ||
| 248 | + | ||
| 249 | + $dados = $this->getDoctrine() | ||
| 250 | + ->getRepository('CacicCommonBundle:ComputadorColeta') | ||
| 251 | + ->gerarRelatorioWMIDetalhe( $filtros, $classe ); | ||
| 252 | + | ||
| 253 | + $locale = $request->getLocale(); | ||
| 254 | + | ||
| 255 | + // Gera cabeçalho | ||
| 256 | + $cabecalho = array(); | ||
| 257 | + foreach($dados as $elm) { | ||
| 258 | + array_push($cabecalho, array_keys($elm)); | ||
| 259 | + break; | ||
| 260 | + } | ||
| 261 | + // Gera CSV | ||
| 262 | + $reader = new ArrayReader(array_merge($cabecalho, $dados)); | ||
| 263 | + | ||
| 264 | + // Create the workflow from the reader | ||
| 265 | + $workflow = new Workflow($reader); | ||
| 266 | + | ||
| 267 | + // Add the writer to the workflow | ||
| 268 | + $tmpfile = tempnam(sys_get_temp_dir(), $propriedade.".csv"); | ||
| 269 | + $file = new \SplFileObject($tmpfile, 'w'); | ||
| 270 | + $writer = new CsvWriter($file); | ||
| 271 | + $workflow->addWriter($writer); | ||
| 272 | + | ||
| 273 | + // Process the workflow | ||
| 274 | + $workflow->process(); | ||
| 275 | + | ||
| 276 | + // Retorna o arquivo | ||
| 277 | + $response = new BinaryFileResponse($tmpfile); | ||
| 278 | + $response->headers->set('Content-Type', 'text/csv'); | ||
| 279 | + $response->headers->set('Content-Disposition', "attachment; filename=$propriedade.csv"); | ||
| 280 | + $response->headers->set('Content-Transfer-Encoding', 'binary'); | ||
| 281 | + | ||
| 282 | + return $response; | ||
| 283 | + } | ||
| 133 | 284 | ||
| 134 | } | 285 | } |
src/Cacic/RelatorioBundle/Resources/config/routing.yml
| @@ -166,4 +166,12 @@ cacic_inativos_listar_csv: | @@ -166,4 +166,12 @@ cacic_inativos_listar_csv: | ||
| 166 | pattern: /inativos/listar/csv/{idRede}/{dtAcaoInicio}/{dtAcaoFim} | 166 | pattern: /inativos/listar/csv/{idRede}/{dtAcaoInicio}/{dtAcaoFim} |
| 167 | defaults: { _controller: CacicRelatorioBundle:Faturamento:listarInativosCsv, idRede: null, dtAcaoInicio: null, dtAcaoFim: null } | 167 | defaults: { _controller: CacicRelatorioBundle:Faturamento:listarInativosCsv, idRede: null, dtAcaoInicio: null, dtAcaoFim: null } |
| 168 | requirements: | 168 | requirements: |
| 169 | - idRede: \d+ | ||
| 170 | \ No newline at end of file | 169 | \ No newline at end of file |
| 170 | + idRede: \d+ | ||
| 171 | + | ||
| 172 | +cacic_relatorio_csv_hardware_wmi: | ||
| 173 | + pattern: /csv/hardware/{classe} | ||
| 174 | + defaults: { _controller: CacicRelatorioBundle:Hardware:csvWMIRelatorio } | ||
| 175 | + | ||
| 176 | +cacic_relatorio_csv_hardware_wmi_detalhe: | ||
| 177 | + pattern: /csv/hardware/{classe}/{propriedade} | ||
| 178 | + defaults: { _controller: CacicRelatorioBundle:Hardware:csvWMIRelatorioDetalhe } | ||
| 171 | \ No newline at end of file | 179 | \ No newline at end of file |
src/Cacic/RelatorioBundle/Resources/views/Hardware/rel_wmi.html.twig
| @@ -5,14 +5,25 @@ | @@ -5,14 +5,25 @@ | ||
| 5 | <h2>{{ 'Relatório de Configurações da Classe '|trans }} {{ classe }}</h2> | 5 | <h2>{{ 'Relatório de Configurações da Classe '|trans }} {{ classe }}</h2> |
| 6 | <h5>{{ 'Relatório gerado em'|trans }} {% if idioma == 'pt_BR' %}{{ "now"|date("d/m/Y H\\hi") }}{% else %}{{ "now"|date("m/d/Y H\\hi") }}{% endif %}</h5> | 6 | <h5>{{ 'Relatório gerado em'|trans }} {% if idioma == 'pt_BR' %}{{ "now"|date("d/m/Y H\\hi") }}{% else %}{{ "now"|date("m/d/Y H\\hi") }}{% endif %}</h5> |
| 7 | 7 | ||
| 8 | + <form id="csv" action="{{ path('cacic_relatorio_csv_hardware_wmi', {'classe': classe}) }}" method="post"> | ||
| 9 | + {% for elm, value in filtros %} | ||
| 10 | + <input type="hidden" name="{{ elm }}" value="{{ value }}"> | ||
| 11 | + {% endfor %} | ||
| 12 | + <button class="btn btn-primary" type="submit"> | ||
| 13 | + <i class="icon-bar-chart"></i> | ||
| 14 | + Gerar CSV | ||
| 15 | + </button> | ||
| 16 | + </form> | ||
| 17 | + | ||
| 8 | <hr /> | 18 | <hr /> |
| 9 | 19 | ||
| 10 | -<table class="table table-striped table-bordered"> | 20 | + |
| 21 | +<table class="display datatable" id="datatable"> | ||
| 11 | <thead> | 22 | <thead> |
| 12 | <tr> | 23 | <tr> |
| 13 | - <th width="10%">{{ "Sistema Operacional"|trans }}</th> | 24 | + <th width="20%">{{ "Sistema Operacional"|trans }}</th> |
| 14 | <th width="10%">{{ "Local"|trans }}</th> | 25 | <th width="10%">{{ "Local"|trans }}</th> |
| 15 | - <th width="10%">{{ "Subrede"|trans }}</th> | 26 | + <th width="20%">{{ "Subrede"|trans }}</th> |
| 16 | <th width="10%">{{ "Propriedade"|trans }}</th> | 27 | <th width="10%">{{ "Propriedade"|trans }}</th> |
| 17 | <th width="10%">{{ "Computadores"|trans }}</th> | 28 | <th width="10%">{{ "Computadores"|trans }}</th> |
| 18 | <th>{{ "Valor"|trans }}</th> | 29 | <th>{{ "Valor"|trans }}</th> |
| @@ -22,7 +33,7 @@ | @@ -22,7 +33,7 @@ | ||
| 22 | <tbody> | 33 | <tbody> |
| 23 | {% for reg in dados %} | 34 | {% for reg in dados %} |
| 24 | <tr> | 35 | <tr> |
| 25 | - <td><span class="{% if reg.inMswindows == 'S' %}red{% else %}blue{% endif %}"><a href="{{ path('cacic_relatorio_hardware_wmi_detalhe', {'classe': classe, 'propriedade': reg.nmPropertyName, 'so': reg.idSo}) }}" title="{{ "Lista de computadores"|trans }}" target="_blank">{{ reg.sgSo }}</a></span></td> | 36 | + <td><span class="{% if reg.inMswindows == 'S' %}red{% else %}blue{% endif %}"><a href="{{ path('cacic_relatorio_hardware_wmi_detalhe', {'classe': classe, 'propriedade': reg.nmPropertyName, 'so': reg.idSo}) }}" title="{{ "Lista de computadores"|trans }}" target="_blank">{{ reg.teDescSo }}</a></span></td> |
| 26 | <td><a href="{{ path('cacic_relatorio_hardware_wmi_detalhe', {'classe': classe, 'propriedade': reg.nmPropertyName, 'local': reg.idLocal}) }}" title="{{ "Lista de computadores"|trans }}" target="_blank">{{ reg.nmLocal }}</a></td> | 37 | <td><a href="{{ path('cacic_relatorio_hardware_wmi_detalhe', {'classe': classe, 'propriedade': reg.nmPropertyName, 'local': reg.idLocal}) }}" title="{{ "Lista de computadores"|trans }}" target="_blank">{{ reg.nmLocal }}</a></td> |
| 27 | <td><a href="{{ path('cacic_relatorio_hardware_wmi_detalhe', {'classe': classe, 'propriedade': reg.nmPropertyName, 'rede': reg.idRede}) }}" title="{{ "Lista de computadores"|trans }}" target="_blank">{{ reg.nmRede }} / {{ reg.teIpRede }}</a></td> | 38 | <td><a href="{{ path('cacic_relatorio_hardware_wmi_detalhe', {'classe': classe, 'propriedade': reg.nmPropertyName, 'rede': reg.idRede}) }}" title="{{ "Lista de computadores"|trans }}" target="_blank">{{ reg.nmRede }} / {{ reg.teIpRede }}</a></td> |
| 28 | <td><a href="{{ path('cacic_relatorio_hardware_wmi_detalhe', {'classe': classe, 'propriedade': reg.nmPropertyName}) }}" title="{{ "Lista de computadores"|trans }}" target="_blank">{{ reg.nmPropertyName }}</a></td> | 39 | <td><a href="{{ path('cacic_relatorio_hardware_wmi_detalhe', {'classe': classe, 'propriedade': reg.nmPropertyName}) }}" title="{{ "Lista de computadores"|trans }}" target="_blank">{{ reg.nmPropertyName }}</a></td> |
src/Cacic/RelatorioBundle/Resources/views/Hardware/rel_wmi_detalhe.html.twig
| @@ -6,9 +6,19 @@ | @@ -6,9 +6,19 @@ | ||
| 6 | <h3>{{ 'Dados relativos à Propriedade '|trans }}{{ propriedade }}</h3> | 6 | <h3>{{ 'Dados relativos à Propriedade '|trans }}{{ propriedade }}</h3> |
| 7 | <h5>{{ 'Relatório gerado em'|trans }} {% if idioma == 'pt_BR' %}{{ "now"|date("d/m/Y H\\hi") }}{% else %}{{ "now"|date("m/d/Y H\\hi") }}{% endif %}</h5> | 7 | <h5>{{ 'Relatório gerado em'|trans }} {% if idioma == 'pt_BR' %}{{ "now"|date("d/m/Y H\\hi") }}{% else %}{{ "now"|date("m/d/Y H\\hi") }}{% endif %}</h5> |
| 8 | 8 | ||
| 9 | + <form id="csv" action="{{ path('cacic_relatorio_csv_hardware_wmi_detalhe', { 'classe': classe, 'propriedade': propriedade }) }}" method="post"> | ||
| 10 | + {% for elm, value in filtros %} | ||
| 11 | + <input type="hidden" name="{{ elm }}" value="{{ value }}"> | ||
| 12 | + {% endfor %} | ||
| 13 | + <button class="btn btn-primary" type="submit"> | ||
| 14 | + <i class="icon-bar-chart"></i> | ||
| 15 | + Gerar CSV | ||
| 16 | + </button> | ||
| 17 | + </form> | ||
| 18 | + | ||
| 9 | <hr /> | 19 | <hr /> |
| 10 | 20 | ||
| 11 | -<table class="table table-striped table-bordered"> | 21 | +<table class="display datatable" id="datatable"> |
| 12 | <thead> | 22 | <thead> |
| 13 | <tr> | 23 | <tr> |
| 14 | <th width="10%">{{ "Computador"|trans }}</th> | 24 | <th width="10%">{{ "Computador"|trans }}</th> |
src/Cacic/RelatorioBundle/Resources/views/Software/rel_inventariados.html.twig
| @@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
| 7 | 7 | ||
| 8 | <hr /> | 8 | <hr /> |
| 9 | 9 | ||
| 10 | -<table class="table table-striped table-bordered"> | 10 | + <table class="display datatable" id="datatable"> |
| 11 | <thead> | 11 | <thead> |
| 12 | <tr> | 12 | <tr> |
| 13 | <th width="5%" style="text-align: center"></th> | 13 | <th width="5%" style="text-align: center"></th> |