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; }
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); } }