public function cadastrarAction(Request $request, $idComputador)
 {
     $logger = $this->get('logger');
     $em = $this->getDoctrine()->getManager();
     // Cria array com dados anteriores de patrimonio
     $patrimonio_list = $em->getRepository('CacicCommonBundle:ComputadorColeta')->patrimonioComputador($idComputador);
     $patrimonio = array('ComputerName' => $patrimonio_list[0]['nmComputador']);
     foreach ($patrimonio_list as $elm) {
         $patrimonio[$elm['nmPropertyName']] = $elm['teClassPropertyValue'];
     }
     // Acha computador
     $computador = $em->getRepository('CacicCommonBundle:Computador')->find($idComputador);
     if (empty($patrimonio['IPComputer'])) {
         $patrimonio['IPComputer'] = $computador->getTeIpComputador();
     }
     if (empty($patrimonio['ComputerName'])) {
         $patrimonio['ComputerName'] = $computador->getNmComputador();
     }
     $form = $this->createForm(new PatrimonioType(), $patrimonio);
     if ($request->isMethod('POST')) {
         $form->handleRequest($request);
         if ($form->isValid()) {
             $data = $form->getData();
             $classe = $em->getRepository('CacicCommonBundle:Classe')->findOneBy(array('nmClassName' => 'Patrimonio'));
             $idClass = $classe->getIdClass();
             foreach ($data as $classPropertyName => $classProperty) {
                 // Processa um campo do formulário de cada vez
                 $classPropertyObject = $em->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('nmPropertyName' => $classPropertyName));
                 if (empty($classPropertyObject)) {
                     // Cria a propriedade se não existe
                     $classPropertyObject = new ClassProperty();
                     $classPropertyObject->setIdClass($classe);
                     $classPropertyObject->setNmPropertyName($classPropertyName);
                     $classPropertyObject->setTePropertyDescription('On the fly created Property');
                     $em->persist($classPropertyObject);
                 }
                 $computadorColeta = $em->getRepository('CacicCommonBundle:ComputadorColeta')->findOneBy(array('computador' => $computador, 'classProperty' => $classPropertyObject->getIdClassProperty()));
                 //$idClass = $classPropertyObject->getIdClass()->getIdClass();
                 if (empty($computadorColeta)) {
                     // Se não existir nenhuma ocorrência para esse atributo, apenas adiciono
                     //error_log("3333333333333333333333333333333333333333333: Criando objeto");
                     $computadorColeta = new ComputadorColeta();
                     $computadorColeta->setComputador($computador);
                     // Armazena no banco o objeto
                     $computadorColeta->setClassProperty($classPropertyObject);
                     $computadorColeta->setTeClassPropertyValue($classProperty);
                     $computadorColeta->setDtHrInclusao(new \DateTime());
                     // Mando salvar os dados do computador
                     $em->persist($computadorColeta);
                     // Persistencia de Historico
                     $computadorColetaHistorico = new ComputadorColetaHistorico();
                     $computadorColetaHistorico->setComputadorColeta($computadorColeta);
                     $computadorColetaHistorico->setComputador($computador);
                     $computadorColetaHistorico->setClassProperty($classPropertyObject);
                     $computadorColetaHistorico->setTeClassPropertyValue($classProperty);
                     $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
                     $em->persist($computadorColetaHistorico);
                 } else {
                     //error_log("444444444444444444444444444444444444444444444444: Criando histórico");
                     // Caso exista, registro um histórico e atualiza o valor atual
                     $coletaOld = "Classe WMI: " . $computadorColeta->getClassProperty()->getIdClass()->getNmClassName() . " | " . "Propriedade: " . $computadorColeta->getClassProperty()->getNmPropertyName() . " | Valor: " . $computadorColeta->getTeClassPropertyValue();
                     $computadorColeta->setComputador($computador);
                     // Pega o objeto para gravar
                     $classPropertyObject = $em->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('idClassProperty' => $classPropertyObject->getIdClassProperty()));
                     // Armazena no banco o objeto
                     $computadorColeta->setClassProperty($classPropertyObject);
                     $computadorColeta->setTeClassPropertyValue($classProperty);
                     $computadorColeta->setDtHrInclusao(new \DateTime());
                     // Mando salvar os dados do computador
                     $em->persist($computadorColeta);
                     // Persistencia de Historico
                     $computadorColetaHistorico = new ComputadorColetaHistorico();
                     $computadorColetaHistorico->setComputadorColeta($computadorColeta);
                     $computadorColetaHistorico->setComputador($computador);
                     $computadorColetaHistorico->setClassProperty($classPropertyObject);
                     $computadorColetaHistorico->setTeClassPropertyValue($classProperty);
                     $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
                     $em->persist($computadorColetaHistorico);
                     // Commit
                     $this->getDoctrine()->getManager()->flush();
                     // Notifica alteração
                     $coletaNew = "Classe WMI: " . $computadorColeta->getClassProperty()->getIdClass()->getNmClassName() . " | " . "Propriedade: " . $computadorColeta->getClassProperty()->getNmPropertyName() . " | Valor: " . $computadorColeta->getTeClassPropertyValue();
                     //$this->notificaAlteracao($coletaOld, $coletaNew, $computador);
                 }
             }
             // Commit
             $em->flush();
             $this->get('session')->getFlashBag()->add('success', 'Dados salvos com sucesso!');
         }
     }
     return $this->render('CacicCommonBundle:PatrimonioConfigInterface:cadastrar.html.twig', array('form' => $form->createView(), 'idComputador' => $idComputador));
 }
 public function setSoftwareElement($software, $valor, $computador, $classObject)
 {
     $logger = $this->get('logger');
     $em = $this->getDoctrine()->getManager();
     if (empty($software)) {
         $logger->error("COLETA: Erro na coleta de software. Elemento nulo {$software}");
         return false;
     }
     try {
         // FIX: alteração para igualar os campos nome do software e descrição
         $idSoftware = $software;
         if (array_key_exists('description', $valor)) {
             $software = $valor['description'];
         }
         // Recupera classProperty para o software
         $classProperty = $em->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('idClass' => $classObject, 'nmPropertyName' => $idSoftware));
         if (empty($classProperty)) {
             $classProperty = new ClassProperty();
             $classProperty->setTePropertyDescription("Software detectado: {$software}");
             $classProperty->setNmPropertyName($idSoftware);
             $classProperty->setIdClass($classObject);
             $classProperty->setAtivo(true);
             // Se não der o flush aqui, as consultas de baixo não encontram o objeto
             $em->persist($classProperty);
             $em->flush();
         }
         $ativo = $classProperty->getAtivo();
         //$logger->debug("11111111111111111111111111111111111111111: |$ativo| |$propriedade|");
         if ($ativo === false) {
             // Só vou gravar o software se a propriedade estiver ativa
             $logger->debug("COLETA: Pulando software inativo: {$software}");
             return false;
         }
         // Eduardo: 2015-08-06
         // A propriedade passa a ser um identificador para o Software
         $softwareObject = $em->getRepository('CacicCommonBundle:Software')->getByNameOrProperty($software, $classProperty->getIdClassProperty());
         if (empty($softwareObject)) {
             // Se nao existir, cria
             $logger->info("COLETA: Cadastrando software não encontrado {$software}");
             $softwareObject = new Software();
             $softwareObject->setNmSoftware($software);
             $softwareObject->setIdClassProperty($classProperty);
             // Se não der o flush aqui, as consultas de baixo não encontram o objeto
             $em->persist($softwareObject);
             $em->flush();
         }
         // Adiciona software ao computador
         $propSoftware = $em->getRepository('CacicCommonBundle:PropriedadeSoftware')->findOneBy(array('classProperty' => $classProperty, 'computador' => $computador, 'software' => $softwareObject));
         if (empty($propSoftware)) {
             $propSoftware = new PropriedadeSoftware();
             $propSoftware->setComputador($computador);
             $propSoftware->setSoftware($softwareObject);
             $propSoftware->setClassProperty($classProperty);
         }
         // Garante que o software deve estar ativo
         $propSoftware->setAtivo(true);
         $propSoftware->setDataExclusao(null);
         // Encontra coleta já feita para o Computador
         $computadorColeta = $em->getRepository('CacicCommonBundle:ComputadorColeta')->findOneBy(array('computador' => $computador, 'classProperty' => $classProperty));
         if (empty($computadorColeta)) {
             //$logger->debug("COLETA: Registrando nova coleta para o software $software no computador ".$computador->getIdComputador());
             // Armazena no banco o objeto
             $computadorColeta = new ComputadorColeta();
             $computadorColeta->setComputador($computador);
             $computadorColeta->setClassProperty($classProperty);
             $computadorColeta->setTeClassPropertyValue($software);
             $computadorColeta->setIdClass($classObject);
             $computadorColeta->setDtHrInclusao(new \DateTime());
             $computadorColeta->setAtivo(true);
             $computadorColeta->setDtHrExclusao(null);
             $em->persist($computadorColeta);
             // Pega novo computador gerado no computador coleta
             $computador = $computadorColeta->getComputador();
             // Gravo um histórico
             $computadorColetaHistorico = new ComputadorColetaHistorico();
             $computadorColetaHistorico->setComputadorColeta($computadorColeta);
             $computadorColetaHistorico->setComputador($computador);
             $computadorColetaHistorico->setClassProperty($classProperty);
             $computadorColetaHistorico->setTeClassPropertyValue($software);
             $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
             $em->persist($computadorColetaHistorico);
         } elseif ($computadorColeta->getTeClassPropertyValue() != $software) {
             // Armazena no banco o objeto
             $computadorColeta->setComputador($computador);
             $computadorColeta->setClassProperty($classProperty);
             $computadorColeta->setTeClassPropertyValue($software);
             $computadorColeta->setIdClass($classObject);
             $computadorColeta->setDtHrInclusao(new \DateTime());
             $computadorColeta->setAtivo(true);
             $computadorColeta->setDtHrExclusao(null);
             $em->persist($computadorColeta);
             // Pega novo computador gerado no computador coleta
             $computador = $computadorColeta->getComputador();
             // Aqui é necessário uma entrada no histórico
             $computadorColetaHistorico = new ComputadorColetaHistorico();
             $computadorColetaHistorico->setComputadorColeta($computadorColeta);
             $computadorColetaHistorico->setComputador($computador);
             $computadorColetaHistorico->setClassProperty($classProperty);
             $computadorColetaHistorico->setTeClassPropertyValue($software);
             $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
             $em->persist($computadorColetaHistorico);
         }
         // Atualiza valores do Software
         // $softwareObject->setNmSoftware($software);
         if (array_key_exists('description', $valor)) {
             $softwareObject->setTeDescricaoSoftware($valor['description']);
             $propSoftware->setDisplayName($valor['description']);
             $classProperty->setPrettyName($valor['description']);
         }
         /*
         if (array_key_exists('name', $valor)) {
             $classProperty->setNmPropertyName($valor['name']);
         }
         */
         if (array_key_exists('url', $valor)) {
             $propSoftware->setUrlInfoAbout($valor['url']);
         }
         if (array_key_exists('version', $valor)) {
             $propSoftware->setDisplayVersion($valor['version']);
         }
         if (array_key_exists('publisher', $valor)) {
             $propSoftware->setPublisher($valor['publisher']);
         }
         // Persiste os objetos
         $em->persist($propSoftware);
         // Tem que adicionar isso aqui ou o Doctrine vai duplicar o software
         $em->flush();
     } catch (ORMException $e) {
         // Reopen Entity Manager
         if (!$em->isOpen()) {
             // reset the EM and all alias
             $container = $this->container;
             $container->set('doctrine.orm.entity_manager', null);
             $container->set('doctrine.orm.default_entity_manager', null);
         }
         $logger->error("COLETA: Erro na inserçao de dados do software {$software}.");
         $logger->debug($e);
         return false;
     } catch (DBALException $e) {
         // Reopen Entity Manager
         if (!$em->isOpen()) {
             // reset the EM and all alias
             $container = $this->container;
             $container->set('doctrine.orm.entity_manager', null);
             $container->set('doctrine.orm.default_entity_manager', null);
         }
         $logger->error("COLETA: Erro impossível de software repetido para {$software}.");
         $logger->debug($e);
         return false;
     }
     return true;
 }
Esempio n. 3
0
 public function gerColsSetProperty($classPropertyName, $strNewClassValues, $idClassProperty, $computador)
 {
     $logger = $this->get('logger');
     $grava_teste = "";
     // pego o valor da classe presente na requisição
     $classProperty = TagValueHelper::getValueFromTags($classPropertyName, $strNewClassValues);
     // Se não encontrar o valor, loga o erro e sai
     if (is_null($classProperty) || $classProperty == "") {
         $logger->debug("ERRO NA COLETA! Propriedade {$classPropertyName} não encontrada na requisição ou valor vazio");
         return;
     }
     //error_log("888888888888888888888888888888888888888888888: $strNewClassValues | $idClassProperty | $classPropertyName | $classProperty");
     // Preparo o objeto da coleta para gravação
     $computadorColeta = $this->getDoctrine()->getRepository('CacicCommonBundle:ComputadorColeta')->findOneBy(array('computador' => $computador, 'classProperty' => $idClassProperty));
     if (empty($computadorColeta)) {
         // Se não existir nenhuma ocorrência para esse atributo, apenas adiciono
         //error_log("3333333333333333333333333333333333333333333: Criando objeto");
         $computadorColeta = new ComputadorColeta();
         $computadorColeta->setComputador($computador);
         // Pega o objeto para gravar
         $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('idClassProperty' => $idClassProperty));
         if (empty($classPropertyObject)) {
             $logger->error("FALHA! Propriedade não encontrada: {$idClassProperty}");
         }
         // Armazena no banco o objeto
         $computadorColeta->setClassProperty($classPropertyObject);
         $computadorColeta->setTeClassPropertyValue($classProperty);
         $computadorColeta->setDtHrInclusao(new \DateTime());
         // Mando salvar os dados do computador
         $this->getDoctrine()->getManager()->persist($computadorColeta);
         $grava_teste .= "3: Persistindo na tabela computador_coleta, id_computador:" . $computador->getIdComputador() . ", class_value: " . $strNewClassValues . "\n";
         // Persistencia de Historico
         $computadorColetaHistorico = new ComputadorColetaHistorico();
         $computadorColetaHistorico->setComputadorColeta($computadorColeta);
         $computadorColetaHistorico->setComputador($computador);
         $computadorColetaHistorico->setClassProperty($classPropertyObject);
         $computadorColetaHistorico->setTeClassPropertyValue($classProperty);
         $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
         $this->getDoctrine()->getManager()->persist($computadorColetaHistorico);
         $grava_teste .= "4: Persistindo na tabela computador_coleta_historico, id_computador:" . $computador->getIdComputador() . ", class_value: " . $strNewClassValues . ', id_coleta_computador: ' . $computadorColeta->getIdComputadorColeta() . "\n";
         // Commit
         $this->getDoctrine()->getManager()->flush();
     } else {
         //error_log("444444444444444444444444444444444444444444444444: Criando histórico");
         // Caso exista, registro um histórico e atualiza o valor atual
         $coletaOld = "Classe WMI: " . $computadorColeta->getClassProperty()->getIdClass()->getNmClassName() . " | " . "Propriedade: " . $computadorColeta->getClassProperty()->getNmPropertyName() . " | Valor: " . $computadorColeta->getTeClassPropertyValue();
         $computadorColeta->setComputador($computador);
         // Pega o objeto para gravar
         $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('idClassProperty' => $idClassProperty));
         // Armazena no banco o objeto
         $computadorColeta->setClassProperty($classPropertyObject);
         $computadorColeta->setTeClassPropertyValue($classProperty);
         $computadorColeta->setDtHrInclusao(new \DateTime());
         // Mando salvar os dados do computador
         $this->getDoctrine()->getManager()->persist($computadorColeta);
         $grava_teste .= "3: Persistindo na tabela computador_coleta, id_computador:" . $computador->getIdComputador() . ", class_value: " . $strNewClassValues . "\n";
         // Persistencia de Historico
         $computadorColetaHistorico = new ComputadorColetaHistorico();
         $computadorColetaHistorico->setComputadorColeta($computadorColeta);
         $computadorColetaHistorico->setComputador($computador);
         $computadorColetaHistorico->setClassProperty($classPropertyObject);
         $computadorColetaHistorico->setTeClassPropertyValue($classProperty);
         $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
         $this->getDoctrine()->getManager()->persist($computadorColetaHistorico);
         $grava_teste .= "4: Persistindo na tabela computador_coleta_historico, id_computador:" . $computador->getIdComputador() . ", class_value: " . $strNewClassValues . ', id_coleta_computador: ' . $computadorColeta->getIdComputadorColeta();
         // Commit
         $this->getDoctrine()->getManager()->flush();
         // Notifica alteração
         $coletaNew = "Classe WMI: " . $computadorColeta->getClassProperty()->getIdClass()->getNmClassName() . " | " . "Propriedade: " . $computadorColeta->getClassProperty()->getNmPropertyName() . " | Valor: " . $computadorColeta->getTeClassPropertyValue();
         //$this->notificaAlteracao($coletaOld, $coletaNew, $computador);
     }
 }