Commit ea927f39755b74ed19811f47b6a8a7f2a1b21964
Committed by
Eduardo Santos
Exists in
master
and in
1 other branch
Várias mudanças no relatório e coleta de software, otimizando consultas e remove…
…ndo entradas repetidas
Showing
13 changed files
with
398 additions
and
13 deletions
Show diff stats
src/Cacic/CommonBundle/DoctrineMigrations/Version20140424143235.php
0 → 100644
@@ -0,0 +1,53 @@ | @@ -0,0 +1,53 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +namespace Cacic\CommonBundle\Migrations; | ||
4 | + | ||
5 | +use Symfony\Component\DependencyInjection\ContainerAwareInterface; | ||
6 | +use Symfony\Component\DependencyInjection\ContainerInterface; | ||
7 | +use Doctrine\DBAL\Migrations\AbstractMigration; | ||
8 | +use Doctrine\DBAL\Schema\Schema; | ||
9 | + | ||
10 | +/** | ||
11 | + * Auto-generated Migration: Please modify to your needs! | ||
12 | + */ | ||
13 | +class Version20140424143235 extends AbstractMigration implements ContainerAwareInterface | ||
14 | +{ | ||
15 | + private $container; | ||
16 | + | ||
17 | + public function setContainer(ContainerInterface $container = null) | ||
18 | + { | ||
19 | + $this->container = $container; | ||
20 | + } | ||
21 | + | ||
22 | + public function up(Schema $schema) | ||
23 | + { | ||
24 | + // this up() migration is auto-generated, please modify it to your needs | ||
25 | + $this->abortIf($this->connection->getDatabasePlatform()->getName() != "postgresql", "Migration can only be executed safely on 'postgresql'."); | ||
26 | + | ||
27 | + $logger = $this->container->get('logger'); | ||
28 | + $rootDir = $this->container->get('kernel')->getRootDir(); | ||
29 | + $upgrade1 = $rootDir."/../src/Cacic/CommonBundle/Resources/data/upgrade-3.0b4.sql"; | ||
30 | + $upgradeSQL1 = file_get_contents($upgrade1); | ||
31 | + $upgrade2 = $rootDir."/../src/Cacic/CommonBundle/Resources/data/upgrade-3.0b4-2.sql"; | ||
32 | + $upgradeSQL2 = file_get_contents($upgrade2); | ||
33 | + | ||
34 | + $logger->debug("Arquivo de atualização: $upgrade1"); | ||
35 | + | ||
36 | + // Chama o container para executar o arquivo de atualização | ||
37 | + // FIXME: Só funciona no PostgreSQL | ||
38 | + $this->addSql($upgradeSQL1); | ||
39 | + $this->addSql("SELECT upgrade()"); | ||
40 | + | ||
41 | + $logger->debug("Arquivo de atualização: $upgrade2"); | ||
42 | + | ||
43 | + $this->addSql($upgradeSQL2); | ||
44 | + $this->addSql("SELECT upgrade()"); | ||
45 | + | ||
46 | + } | ||
47 | + | ||
48 | + public function down(Schema $schema) | ||
49 | + { | ||
50 | + // this down() migration is auto-generated, please modify it to your needs | ||
51 | + | ||
52 | + } | ||
53 | +} |
src/Cacic/CommonBundle/DoctrineMigrations/Version20140424182701.php
0 → 100644
@@ -0,0 +1,52 @@ | @@ -0,0 +1,52 @@ | ||
1 | +<?php | ||
2 | + | ||
3 | +namespace Cacic\CommonBundle\Migrations; | ||
4 | + | ||
5 | +use Symfony\Component\DependencyInjection\ContainerAwareInterface; | ||
6 | +use Symfony\Component\DependencyInjection\ContainerInterface; | ||
7 | +use Doctrine\DBAL\Migrations\AbstractMigration; | ||
8 | +use Doctrine\DBAL\Schema\Schema; | ||
9 | + | ||
10 | +/** | ||
11 | + * Auto-generated Migration: Please modify to your needs! | ||
12 | + */ | ||
13 | +class Version20140424182701 extends AbstractMigration implements ContainerAwareInterface | ||
14 | +{ | ||
15 | + private $container; | ||
16 | + | ||
17 | + public function setContainer(ContainerInterface $container = null) | ||
18 | + { | ||
19 | + $this->container = $container; | ||
20 | + } | ||
21 | + | ||
22 | + public function up(Schema $schema) | ||
23 | + { | ||
24 | + // this up() migration is auto-generated, please modify it to your needs | ||
25 | + $this->abortIf($this->connection->getDatabasePlatform()->getName() != "postgresql", "Migration can only be executed safely on 'postgresql'."); | ||
26 | + | ||
27 | + $logger = $this->container->get('logger'); | ||
28 | + $rootDir = $this->container->get('kernel')->getRootDir(); | ||
29 | + $upgrade1 = $rootDir."/../src/Cacic/CommonBundle/Resources/data/upgrade-3.0b4-3.sql"; | ||
30 | + $upgradeSQL1 = file_get_contents($upgrade1); | ||
31 | + | ||
32 | + // Altera o modelo de dados | ||
33 | + $this->addSql("ALTER TABLE computador_coleta ADD dt_hr_inclusao TIMESTAMP(0) WITHOUT TIME ZONE"); | ||
34 | + | ||
35 | + $logger->debug("Arquivo de atualização: $upgrade1"); | ||
36 | + | ||
37 | + // Chama o container para executar o arquivo de atualização | ||
38 | + // FIXME: Só funciona no PostgreSQL | ||
39 | + $this->addSql($upgradeSQL1); | ||
40 | + $this->addSql("SELECT upgrade()"); | ||
41 | + | ||
42 | + // Impede que o campo seja nulO | ||
43 | + $this->addSql("ALTER TABLE computador_coleta ALTER COLUMN dt_hr_inclusao SET NOT NULL"); | ||
44 | + | ||
45 | + } | ||
46 | + | ||
47 | + public function down(Schema $schema) | ||
48 | + { | ||
49 | + // this down() migration is auto-generated, please modify it to your needs | ||
50 | + | ||
51 | + } | ||
52 | +} |
src/Cacic/CommonBundle/Entity/ComputadorColeta.php
@@ -135,4 +135,55 @@ class ComputadorColeta | @@ -135,4 +135,55 @@ class ComputadorColeta | ||
135 | { | 135 | { |
136 | return $this->classe; | 136 | return $this->classe; |
137 | } | 137 | } |
138 | + /** | ||
139 | + * @var \DateTime | ||
140 | + */ | ||
141 | + private $dtHrInclusao; | ||
142 | + | ||
143 | + | ||
144 | + /** | ||
145 | + * Set dtHrInclusao | ||
146 | + * | ||
147 | + * @param \DateTime $dtHrInclusao | ||
148 | + * @return ComputadorColeta | ||
149 | + */ | ||
150 | + public function setDtHrInclusao($dtHrInclusao) | ||
151 | + { | ||
152 | + $this->dtHrInclusao = $dtHrInclusao; | ||
153 | + | ||
154 | + return $this; | ||
155 | + } | ||
156 | + | ||
157 | + /** | ||
158 | + * Get dtHrInclusao | ||
159 | + * | ||
160 | + * @return \DateTime | ||
161 | + */ | ||
162 | + public function getDtHrInclusao() | ||
163 | + { | ||
164 | + return $this->dtHrInclusao; | ||
165 | + } | ||
166 | + | ||
167 | + /** | ||
168 | + * Set idClass | ||
169 | + * | ||
170 | + * @param \Cacic\CommonBundle\Entity\Classe $idClass | ||
171 | + * @return ComputadorColeta | ||
172 | + */ | ||
173 | + public function setIdClass(\Cacic\CommonBundle\Entity\Classe $idClass = null) | ||
174 | + { | ||
175 | + $this->idClass = $idClass; | ||
176 | + | ||
177 | + return $this; | ||
178 | + } | ||
179 | + | ||
180 | + /** | ||
181 | + * Get idClass | ||
182 | + * | ||
183 | + * @return \Cacic\CommonBundle\Entity\Classe | ||
184 | + */ | ||
185 | + public function getIdClass() | ||
186 | + { | ||
187 | + return $this->idClass; | ||
188 | + } | ||
138 | } | 189 | } |
139 | \ No newline at end of file | 190 | \ No newline at end of file |
src/Cacic/CommonBundle/Entity/ComputadorColetaRepository.php
@@ -147,14 +147,21 @@ class ComputadorColetaRepository extends EntityRepository | @@ -147,14 +147,21 @@ class ComputadorColetaRepository extends EntityRepository | ||
147 | return $qb->getQuery()->execute(); | 147 | return $qb->getQuery()->execute(); |
148 | } | 148 | } |
149 | 149 | ||
150 | - public function gerarRelatorioSoftware( $filtros, $software, $local ) | 150 | + /** |
151 | + * Relatório geral de softwares inventariados | ||
152 | + * | ||
153 | + * @param $filtros | ||
154 | + * @param $software | ||
155 | + * @param $local | ||
156 | + * @return mixed | ||
157 | + */ | ||
158 | + | ||
159 | + public function gerarRelatorioSoftware( $filtros, $software) | ||
151 | { | 160 | { |
152 | $qb = $this->createQueryBuilder('coleta') | 161 | $qb = $this->createQueryBuilder('coleta') |
153 | ->select('DISTINCT IDENTITY(coleta.computador), comp.nmComputador, comp.teNodeAddress, | 162 | ->select('DISTINCT IDENTITY(coleta.computador), comp.nmComputador, comp.teNodeAddress, |
154 | - comp.teIpComputador, so.inMswindows, so.sgSo, rede.idRede, rede.nmRede, rede.teIpRede, local.nmLocal, max(hist.dtHrInclusao) as dtHrInclusao') | ||
155 | - ->innerJoin('CacicCommonBundle:ComputadorColetaHistorico','hist', 'WITH', 'coleta.idComputadorColeta = hist.computadorColeta') | 163 | + comp.teIpComputador, so.inMswindows, so.sgSo, rede.idRede, rede.nmRede, rede.teIpRede, local.nmLocal, max(coleta.dtHrInclusao) as dtHrInclusao') |
156 | ->innerJoin('coleta.classProperty', 'property') | 164 | ->innerJoin('coleta.classProperty', 'property') |
157 | - ->innerJoin('property.idClass', 'classe') | ||
158 | ->innerJoin('coleta.computador', 'comp') | 165 | ->innerJoin('coleta.computador', 'comp') |
159 | ->innerJoin('comp.idSo', 'so') | 166 | ->innerJoin('comp.idSo', 'so') |
160 | ->innerJoin('comp.idRede', 'rede') | 167 | ->innerJoin('comp.idRede', 'rede') |
@@ -164,14 +171,15 @@ class ComputadorColetaRepository extends EntityRepository | @@ -164,14 +171,15 @@ class ComputadorColetaRepository extends EntityRepository | ||
164 | ->andWhere('soft.nmSoftware = :software') | 171 | ->andWhere('soft.nmSoftware = :software') |
165 | ->groupBy('coleta.computador, comp.nmComputador, comp.teNodeAddress, | 172 | ->groupBy('coleta.computador, comp.nmComputador, comp.teNodeAddress, |
166 | comp.teIpComputador, so.inMswindows, so.sgSo, rede.idRede, rede.nmRede, rede.teIpRede, local.nmLocal') | 173 | comp.teIpComputador, so.inMswindows, so.sgSo, rede.idRede, rede.nmRede, rede.teIpRede, local.nmLocal') |
174 | + ->orderBy('coleta.computador, local.nmLocal, rede.teIpRede') | ||
167 | ->setParameter('software', $software); | 175 | ->setParameter('software', $software); |
168 | 176 | ||
169 | /** | 177 | /** |
170 | * Verifica os filtros | 178 | * Verifica os filtros |
171 | */ | 179 | */ |
172 | 180 | ||
173 | - if ( array_key_exists('local', $filtros) && !empty($filtros['local']) ) | ||
174 | - $qb->andWhere('local.idLocal IN (:locais)')->setParameter('locais', explode( ',', $filtros['locais'] )); | 181 | + if ( array_key_exists('locais', $filtros) && !empty($filtros['locais']) ) |
182 | + $qb->andWhere('local.nmLocal IN (:locais)')->setParameter('locais', explode( ',', $filtros['locais'] )); | ||
175 | 183 | ||
176 | if ( array_key_exists('redes', $filtros) && !empty($filtros['redes']) ) | 184 | if ( array_key_exists('redes', $filtros) && !empty($filtros['redes']) ) |
177 | $qb->andWhere('rede.idRede IN (:redes)')->setParameter('redes', explode( ',', $filtros['redes'] )); | 185 | $qb->andWhere('rede.idRede IN (:redes)')->setParameter('redes', explode( ',', $filtros['redes'] )); |
@@ -180,13 +188,53 @@ class ComputadorColetaRepository extends EntityRepository | @@ -180,13 +188,53 @@ class ComputadorColetaRepository extends EntityRepository | ||
180 | $qb->andWhere('comp.idSo IN (:so)')->setParameter('so', explode( ',', $filtros['so'] )); | 188 | $qb->andWhere('comp.idSo IN (:so)')->setParameter('so', explode( ',', $filtros['so'] )); |
181 | 189 | ||
182 | if ( array_key_exists('conf', $filtros) && !empty($filtros['conf']) ) | 190 | if ( array_key_exists('conf', $filtros) && !empty($filtros['conf']) ) |
183 | - $qb->andWhere('property.idClassProperty IN (:conf)')->setParameter('conf', explode( ',', $filtros['conf'] )); | 191 | + $qb->andWhere('soft.idSoftware IN (:conf)')->setParameter('conf', explode( ',', $filtros['conf'] )); |
184 | 192 | ||
185 | 193 | ||
186 | return $qb->getQuery()->execute(); | 194 | return $qb->getQuery()->execute(); |
187 | } | 195 | } |
188 | 196 | ||
189 | /** | 197 | /** |
198 | + * Gera relatório de softwares inventariados | ||
199 | + * | ||
200 | + * @param $filtros | ||
201 | + * @return mixed | ||
202 | + */ | ||
203 | + | ||
204 | + public function gerarRelatorioSoftwaresInventariados( $filtros) | ||
205 | + { | ||
206 | + $qb = $this->createQueryBuilder('coleta') | ||
207 | + ->select('soft.nmSoftware', 'rede.idRede', 'rede.nmRede', 'rede.teIpRede', 'local.nmLocal','COUNT(DISTINCT coleta.computador) AS numComp') | ||
208 | + ->innerJoin('coleta.classProperty', 'property') | ||
209 | + ->innerJoin('property.idClass', 'classe') | ||
210 | + ->innerJoin('coleta.computador', 'comp') | ||
211 | + ->innerJoin('comp.idSo', 'so') | ||
212 | + ->innerJoin('comp.idRede', 'rede') | ||
213 | + ->innerJoin('rede.idLocal', 'local') | ||
214 | + ->innerJoin('CacicCommonBundle:PropriedadeSoftware', 'prop', 'WITH', 'prop.classProperty = coleta.classProperty') | ||
215 | + ->innerJoin('prop.software', 'soft') | ||
216 | + ->groupBy('soft.nmSoftware', 'rede.idRede', 'rede.nmRede', 'rede.teIpRede', 'local.nmLocal'); | ||
217 | + | ||
218 | + /** | ||
219 | + * Verifica os filtros | ||
220 | + */ | ||
221 | + | ||
222 | + if ( array_key_exists('softwares', $filtros) && !empty($filtros['softwares']) ) | ||
223 | + $qb->andWhere('soft.idSoftware IN (:softwares)')->setParameter('softwares', explode( ',', $filtros['softwares'] )); | ||
224 | + | ||
225 | + if ( array_key_exists('local', $filtros) && !empty($filtros['local']) ) | ||
226 | + $qb->andWhere('local.idLocal IN (:locais)')->setParameter('locais', explode( ',', $filtros['locais'] )); | ||
227 | + | ||
228 | + if ( array_key_exists('redes', $filtros) && !empty($filtros['redes']) ) | ||
229 | + $qb->andWhere('rede.idRede IN (:redes)')->setParameter('redes', explode( ',', $filtros['redes'] )); | ||
230 | + | ||
231 | + if ( array_key_exists('so', $filtros) && !empty($filtros['so']) ) | ||
232 | + $qb->andWhere('comp.idSo IN (:so)')->setParameter('so', explode( ',', $filtros['so'] )); | ||
233 | + | ||
234 | + return $qb->getQuery()->execute(); | ||
235 | + } | ||
236 | + | ||
237 | + /** | ||
190 | * | 238 | * |
191 | * Gera relatório de propriedades WMI coletadas dos computadores detalhado | 239 | * Gera relatório de propriedades WMI coletadas dos computadores detalhado |
192 | * | 240 | * |
src/Cacic/CommonBundle/Entity/SoftwareRepository.php
@@ -42,11 +42,11 @@ class SoftwareRepository extends EntityRepository | @@ -42,11 +42,11 @@ class SoftwareRepository extends EntityRepository | ||
42 | public function listarSoftware() | 42 | public function listarSoftware() |
43 | { | 43 | { |
44 | $qb = $this->createQueryBuilder('sw') | 44 | $qb = $this->createQueryBuilder('sw') |
45 | - ->select('sw.nmSoftware','class.idClassProperty') | 45 | + ->select('sw.nmSoftware','sw.idSoftware') |
46 | ->innerJoin('CacicCommonBundle:PropriedadeSoftware', 'prop', 'WITH', 'sw.idSoftware = prop.software') | 46 | ->innerJoin('CacicCommonBundle:PropriedadeSoftware', 'prop', 'WITH', 'sw.idSoftware = prop.software') |
47 | ->innerJoin('CacicCommonBundle:ClassProperty', 'class','WITH', 'prop.classProperty = class.idClassProperty') | 47 | ->innerJoin('CacicCommonBundle:ClassProperty', 'class','WITH', 'prop.classProperty = class.idClassProperty') |
48 | - ->groupBy('sw.nmSoftware,class.idClassProperty, class.nmPropertyName') | ||
49 | - ->orderBy(' sw.nmSoftware'); | 48 | + ->groupBy('sw.nmSoftware, sw.idSoftware') |
49 | + ->orderBy('sw.nmSoftware'); | ||
50 | 50 | ||
51 | return $qb->getQuery()->execute(); | 51 | return $qb->getQuery()->execute(); |
52 | } | 52 | } |
@@ -108,7 +108,7 @@ class SoftwareRepository extends EntityRepository | @@ -108,7 +108,7 @@ class SoftwareRepository extends EntityRepository | ||
108 | ->innerJoin('CacicCommonBundle:ComputadorColeta', 'col', 'WITH', 'col.computador = prop.computador') | 108 | ->innerJoin('CacicCommonBundle:ComputadorColeta', 'col', 'WITH', 'col.computador = prop.computador') |
109 | ->innerJoin('CacicCommonBundle:Computador', 'comp', 'WITH', 'col.computador = comp.idComputador') | 109 | ->innerJoin('CacicCommonBundle:Computador', 'comp', 'WITH', 'col.computador = comp.idComputador') |
110 | ->innerJoin('comp.idRede','r') | 110 | ->innerJoin('comp.idRede','r') |
111 | - ->leftJoin('r.idLocal', 'l') | 111 | + ->innerJoin('r.idLocal', 'l') |
112 | ->groupBy('sw.nmSoftware, r.idRede, r.nmRede, r.teIpRede, l.nmLocal') | 112 | ->groupBy('sw.nmSoftware, r.idRede, r.nmRede, r.teIpRede, l.nmLocal') |
113 | ->orderBy('sw.nmSoftware, l.nmLocal'); | 113 | ->orderBy('sw.nmSoftware, l.nmLocal'); |
114 | 114 |
src/Cacic/CommonBundle/Resources/config/doctrine/ComputadorColeta.orm.yml
@@ -15,6 +15,10 @@ Cacic\CommonBundle\Entity\ComputadorColeta: | @@ -15,6 +15,10 @@ Cacic\CommonBundle\Entity\ComputadorColeta: | ||
15 | type: text | 15 | type: text |
16 | nullable: false | 16 | nullable: false |
17 | column: te_class_property_value | 17 | column: te_class_property_value |
18 | + dtHrInclusao: | ||
19 | + type: datetime | ||
20 | + nullable: false | ||
21 | + column: dt_hr_inclusao | ||
18 | manyToOne: | 22 | manyToOne: |
19 | computador: | 23 | computador: |
20 | targetEntity: Computador | 24 | targetEntity: Computador |
src/Cacic/CommonBundle/Resources/config/doctrine/Software.orm.yml
@@ -57,4 +57,7 @@ Cacic\CommonBundle\Entity\Software: | @@ -57,4 +57,7 @@ Cacic\CommonBundle\Entity\Software: | ||
57 | licencas: | 57 | licencas: |
58 | targetEntity: AquisicaoItem | 58 | targetEntity: AquisicaoItem |
59 | mappedBy: idSoftware | 59 | mappedBy: idSoftware |
60 | + uniqueConstraints: | ||
61 | + software_nm_software_idx: | ||
62 | + columns: [ nm_software ] | ||
60 | lifecycleCallbacks: { } | 63 | lifecycleCallbacks: { } |
src/Cacic/CommonBundle/Resources/data/upgrade-3.0b4-2.sql
0 → 100644
@@ -0,0 +1,66 @@ | @@ -0,0 +1,66 @@ | ||
1 | +CREATE OR REPLACE FUNCTION upgrade() RETURNS VOID AS $$ | ||
2 | + DECLARE | ||
3 | + | ||
4 | + soft record; | ||
5 | + nm integer; | ||
6 | + atualiza record; | ||
7 | + comp integer; | ||
8 | + | ||
9 | + BEGIN | ||
10 | + | ||
11 | + FOR soft IN select sw.nm_software, count(distinct sw.id_software) as n_repeticoes | ||
12 | + from software sw | ||
13 | + group by sw.nm_software | ||
14 | + having count(distinct sw.id_software) > 1 | ||
15 | + order by count(distinct sw.id_software) desc LOOP | ||
16 | + | ||
17 | + RAISE NOTICE 'O seguinte software possui entradas repetidas: %',soft.nm_software; | ||
18 | + | ||
19 | + -- Escolhe um software para colocar em todos | ||
20 | + SELECT DISTINCT id_software INTO nm | ||
21 | + FROM software | ||
22 | + WHERE nm_software = soft.nm_software | ||
23 | + ORDER BY id_software asc | ||
24 | + LIMIT 1; | ||
25 | + | ||
26 | + -- Atualiza o valor de todas as entradas na tabela para o primeiro valor | ||
27 | + FOR atualiza IN select distinct pr.id_propriedade_software, pr.id_class_property, pr.id_software, aq.id_software | ||
28 | + from software st | ||
29 | + inner join proriedade_software pr on st.id_software = pr.id_software | ||
30 | + left join aquisicao_item aq on st.id_software = aq.id_software | ||
31 | + where st.nm_software = soft.nm_software | ||
32 | + and st.id_software <> nm LOOP | ||
33 | + | ||
34 | + RAISE NOTICE 'Removendo propriedade = % com o software = %',atualiza.id_class_property,nm; | ||
35 | + | ||
36 | + DELETE FROM proriedade_software | ||
37 | + WHERE id_class_property = atualiza.id_class_property; | ||
38 | + | ||
39 | + DELETE FROM computador_coleta_historico | ||
40 | + WHERE id_class_property = atualiza.id_class_property; | ||
41 | + | ||
42 | + DELETE FROM computador_coleta | ||
43 | + WHERE id_class_property = atualiza.id_class_property; | ||
44 | + | ||
45 | + DELETE FROM class_property | ||
46 | + WHERE id_class_property = atualiza.id_class_property; | ||
47 | + | ||
48 | + IF atualiza.id_software IS NOT NULL THEN | ||
49 | + DELETE FROM aquisicao_item | ||
50 | + WHERE id_software = atualiza.id_software; | ||
51 | + END IF; | ||
52 | + | ||
53 | + DELETE FROM software | ||
54 | + WHERE id_software = atualiza.id_software; | ||
55 | + | ||
56 | + RAISE NOTICE 'Software = % com o nome = % foi removido com sucesso',atualiza.id_software,soft.nm_software; | ||
57 | + | ||
58 | + END LOOP; | ||
59 | + | ||
60 | + END LOOP; | ||
61 | + | ||
62 | + RETURN; | ||
63 | + | ||
64 | + END; | ||
65 | + | ||
66 | +$$ LANGUAGE 'plpgsql'; | ||
0 | \ No newline at end of file | 67 | \ No newline at end of file |
src/Cacic/CommonBundle/Resources/data/upgrade-3.0b4-3.sql
0 → 100644
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +CREATE OR REPLACE FUNCTION upgrade() RETURNS VOID AS $$ | ||
2 | + DECLARE | ||
3 | + | ||
4 | + comp record; | ||
5 | + | ||
6 | + BEGIN | ||
7 | + | ||
8 | + FOR comp IN select c.id_computador_coleta, max(h.dt_hr_inclusao) as dt_hr_inclusao | ||
9 | + from computador_coleta c | ||
10 | + inner join computador_coleta_historico h on (c.id_computador_coleta = h.id_computador_coleta) | ||
11 | + group by c.id_computador_coleta LOOP | ||
12 | + | ||
13 | + RAISE NOTICE 'Atualizando computador coleta id = %',comp.id_computador_coleta; | ||
14 | + | ||
15 | + UPDATE computador_coleta | ||
16 | + SET dt_hr_inclusao = comp.dt_hr_inclusao | ||
17 | + WHERE id_computador_coleta = comp.id_computador_coleta; | ||
18 | + | ||
19 | + END LOOP; | ||
20 | + | ||
21 | + RETURN; | ||
22 | + | ||
23 | + END; | ||
24 | + | ||
25 | +$$ LANGUAGE 'plpgsql'; | ||
0 | \ No newline at end of file | 26 | \ No newline at end of file |
@@ -0,0 +1,81 @@ | @@ -0,0 +1,81 @@ | ||
1 | +CREATE OR REPLACE FUNCTION upgrade() RETURNS VOID AS $$ | ||
2 | + DECLARE | ||
3 | + | ||
4 | + soft record; | ||
5 | + nm integer; | ||
6 | + atualiza record; | ||
7 | + comp integer; | ||
8 | + | ||
9 | + BEGIN | ||
10 | + | ||
11 | + FOR soft IN select sw.nm_software, count(distinct prop.id_software) as n_repeticoes | ||
12 | + from software sw | ||
13 | + inner join proriedade_software prop on sw.id_software = prop.id_software | ||
14 | + group by sw.nm_software | ||
15 | + having count(distinct prop.id_software) > 1 | ||
16 | + order by count(distinct prop.id_software) desc LOOP | ||
17 | + | ||
18 | + RAISE NOTICE 'O seguinte software possui entradas repetidas: %',soft.nm_software; | ||
19 | + | ||
20 | + -- Escolhe um software para colocar em todos | ||
21 | + SELECT DISTINCT id_software INTO nm | ||
22 | + FROM software | ||
23 | + WHERE nm_software = soft.nm_software | ||
24 | + ORDER BY id_software asc | ||
25 | + LIMIT 1; | ||
26 | + | ||
27 | + -- Atualiza o valor de todas as entradas na tabela para o primeiro valor | ||
28 | + FOR atualiza IN select distinct pr.id_propriedade_software | ||
29 | + from software st | ||
30 | + inner join proriedade_software pr on st.id_software = pr.id_software | ||
31 | + where st.nm_software = soft.nm_software LOOP | ||
32 | + | ||
33 | + | ||
34 | + RAISE NOTICE 'Atualizando o valor da propriedade = % com o software = %',atualiza.id_propriedade_software,nm; | ||
35 | + | ||
36 | + BEGIN | ||
37 | + | ||
38 | + UPDATE proriedade_software | ||
39 | + SET id_software = nm | ||
40 | + WHERE id_propriedade_software = atualiza.id_propriedade_software; | ||
41 | + | ||
42 | + EXCEPTION WHEN OTHERS THEN | ||
43 | + | ||
44 | + RAISE NOTICE 'ERRO!!!! Provavelmente a coleta estava repetida'; | ||
45 | + | ||
46 | + END; | ||
47 | + | ||
48 | + END LOOP ; | ||
49 | + | ||
50 | + END LOOP; | ||
51 | + | ||
52 | + -- Finalmente limpa todos os softwares sem coleta | ||
53 | + | ||
54 | + FOR soft IN select distinct sw.id_software | ||
55 | + from software sw | ||
56 | + left join proriedade_software prop on sw.id_software = prop.id_software | ||
57 | + left join aquisicao_item aq on sw.id_software = aq.id_software | ||
58 | + where prop.id_software is null | ||
59 | + and aq.id_software is null LOOP | ||
60 | + | ||
61 | + RAISE NOTICE 'Removendo software = %',soft.id_software; | ||
62 | + | ||
63 | + BEGIN | ||
64 | + | ||
65 | + DELETE FROM software | ||
66 | + WHERE id_software = soft.id_software; | ||
67 | + | ||
68 | + EXCEPTION WHEN OTHERS THEN | ||
69 | + | ||
70 | + RAISE NOTICE 'Erro na exclusão do software %',soft.id_software; | ||
71 | + | ||
72 | + END ; | ||
73 | + | ||
74 | + END LOOP ; | ||
75 | + | ||
76 | + | ||
77 | + RETURN; | ||
78 | + | ||
79 | + END; | ||
80 | + | ||
81 | +$$ LANGUAGE 'plpgsql'; | ||
0 | \ No newline at end of file | 82 | \ No newline at end of file |
src/Cacic/RelatorioBundle/Controller/SoftwareController.php
@@ -39,7 +39,7 @@ class SoftwareController extends Controller | @@ -39,7 +39,7 @@ class SoftwareController extends Controller | ||
39 | { | 39 | { |
40 | $locale = $request->getLocale(); | 40 | $locale = $request->getLocale(); |
41 | $dados = $this->getDoctrine() | 41 | $dados = $this->getDoctrine() |
42 | - ->getRepository('CacicCommonBundle:Software') | 42 | + ->getRepository('CacicCommonBundle:ComputadorColeta') |
43 | ->gerarRelatorioSoftwaresInventariados( $request->get('rel_filtro_software') ); | 43 | ->gerarRelatorioSoftwaresInventariados( $request->get('rel_filtro_software') ); |
44 | 44 | ||
45 | return $this->render( | 45 | return $this->render( |
src/Cacic/RelatorioBundle/Resources/views/Software/inventariados_filtro.html.twig
@@ -21,7 +21,7 @@ | @@ -21,7 +21,7 @@ | ||
21 | 21 | ||
22 | tSW.populate([ // Popula o TRANSFER com Softwares | 22 | tSW.populate([ // Popula o TRANSFER com Softwares |
23 | {% for sw in softwares %} | 23 | {% for sw in softwares %} |
24 | - {value: "{{ sw['idClassProperty'] }}", content:"{{ sw['nmSoftware'] }}"}{% if loop.last != true %},{% endif %} | 24 | + {value: "{{ sw['idSoftware'] }}", content:"{{ sw['nmSoftware'] }}"}{% if loop.last != true %},{% endif %} |
25 | 25 | ||
26 | {% endfor %} | 26 | {% endfor %} |
27 | ]); | 27 | ]); |
src/Cacic/WSBundle/Controller/ColetaController.php
@@ -197,6 +197,7 @@ class ColetaController extends Controller | @@ -197,6 +197,7 @@ class ColetaController extends Controller | ||
197 | // Armazena no banco o objeto | 197 | // Armazena no banco o objeto |
198 | $computadorColeta->setClassProperty($classPropertyObject); | 198 | $computadorColeta->setClassProperty($classPropertyObject); |
199 | $computadorColeta->setTeClassPropertyValue($classProperty); | 199 | $computadorColeta->setTeClassPropertyValue($classProperty); |
200 | + $computadorColeta->setDtHrInclusao( new \DateTime() ); | ||
200 | 201 | ||
201 | // Mando salvar os dados do computador | 202 | // Mando salvar os dados do computador |
202 | $this->getDoctrine()->getManager()->persist( $computadorColeta ); | 203 | $this->getDoctrine()->getManager()->persist( $computadorColeta ); |
@@ -226,6 +227,7 @@ class ColetaController extends Controller | @@ -226,6 +227,7 @@ class ColetaController extends Controller | ||
226 | // Armazena no banco o objeto | 227 | // Armazena no banco o objeto |
227 | $computadorColeta->setClassProperty($classPropertyObject); | 228 | $computadorColeta->setClassProperty($classPropertyObject); |
228 | $computadorColeta->setTeClassPropertyValue($classProperty); | 229 | $computadorColeta->setTeClassPropertyValue($classProperty); |
230 | + $computadorColeta->setDtHrInclusao( new \DateTime() ); | ||
229 | 231 | ||
230 | // Mando salvar os dados do computador | 232 | // Mando salvar os dados do computador |
231 | $this->getDoctrine()->getManager()->persist( $computadorColeta ); | 233 | $this->getDoctrine()->getManager()->persist( $computadorColeta ); |