From 2893c0921edaef0cf178113c80fe6aa98e635d7c Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 12 Jun 2024 12:40:38 +0200 Subject: [PATCH] refs #452. Migrate clients and hardware profile ended --- composer.lock | 20 ++--- config/packages/doctrine.yaml | 2 + .../Migration/MigrateClientsCommand.php | 78 +++++++++---------- ...grateHardwareAndHardwareProfileCommand.php | 41 ++++++++-- .../MigrateOrganizationalUnitCommand.php | 26 ++++--- src/Entity/Client.php | 16 +--- tests/Functional/AbstractTest.php | 1 - 7 files changed, 102 insertions(+), 82 deletions(-) diff --git a/composer.lock b/composer.lock index 98d87a8..f49d68c 100644 --- a/composer.lock +++ b/composer.lock @@ -575,16 +575,16 @@ }, { "name": "doctrine/dbal", - "version": "3.8.4", + "version": "3.8.5", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd" + "reference": "0e3536ba088a749985c8801105b6b3ac6c1280b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b05e48a745f722801f55408d0dbd8003b403dbbd", - "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/0e3536ba088a749985c8801105b6b3ac6c1280b6", + "reference": "0e3536ba088a749985c8801105b6b3ac6c1280b6", "shasum": "" }, "require": { @@ -600,12 +600,12 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.58", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.16", + "phpstan/phpstan": "1.11.1", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "9.6.19", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.9.0", + "squizlabs/php_codesniffer": "3.9.2", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/console": "^4.4|^5.4|^6.0|^7.0", "vimeo/psalm": "4.30.0" @@ -668,7 +668,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.4" + "source": "https://github.com/doctrine/dbal/tree/3.8.5" }, "funding": [ { @@ -684,7 +684,7 @@ "type": "tidelift" } ], - "time": "2024-04-25T07:04:44+00:00" + "time": "2024-06-08T17:49:56+00:00" }, { "name": "doctrine/deprecations", diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 9979dcc..5dedfc1 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -4,10 +4,12 @@ doctrine: default: url: '%env(resolve:DATABASE_URL)%' profiling_collect_backtrace: '%kernel.debug%' + use_savepoints: true mapping_types: enum: string og_1: url: '%env(resolve:OG_1_DATABASE_URL)%' + use_savepoints: true default_connection: default orm: diff --git a/src/Command/Migration/MigrateClientsCommand.php b/src/Command/Migration/MigrateClientsCommand.php index 9d0560a..1dc517c 100644 --- a/src/Command/Migration/MigrateClientsCommand.php +++ b/src/Command/Migration/MigrateClientsCommand.php @@ -3,6 +3,7 @@ namespace App\Command\Migration; use App\Entity\Client; +use App\Entity\HardwareProfile; use App\Entity\OrganizationalUnit; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Query\ResultSetMapping; @@ -30,57 +31,56 @@ class MigrateClientsCommand extends Command $clientRepository = $this->entityManager->getRepository(Client::class); $organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class); + $hardwareProfileRepository = $this->entityManager->getRepository(HardwareProfile::class); /** Obtener los ordenadores de la base de datos antigua **/ $rsmClients = new ResultSetMapping(); $rsmClients->addScalarResult('idordenador', 'idordenador'); - $rsmClients->addScalarResult('nombrgrupoordenador', 'nombrgrupoordenador'); - $rsmClients->addScalarResult('comentarios', 'comentarios'); - $pcsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idordenador FROM ordenadores', $rsmClients); - $pcs = $pcsQuery->getResult(); + $rsmClients->addScalarResult('nombreordenador', 'nombreordenador'); + $rsmClients->addScalarResult('numserie', 'numserie'); + $rsmClients->addScalarResult('mac', 'mac'); + $rsmClients->addScalarResult('ip', 'ip'); + $rsmClients->addScalarResult('netiface', 'netiface'); + $rsmClients->addScalarResult('netdriver', 'netdriver'); + $rsmClients->addScalarResult('idperfilhard', 'ordenadores.idperfilhard'); + $rsmClients->addScalarResult('grupoid', 'ordenadores.grupoid'); + $rsmClients->addScalarResult('idaula', 'ordenadores.idaula'); + + $clientsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idordenador, nombreordenador, numserie, ip, mac, netiface, netdriver, ordenadores.idaula, ordenadores.grupoid, ordenadores.idperfilhard FROM ordenadores LEFT JOIN aulas ON ordenadores.idaula = aulas.idaula LEFT JOIN perfileshard ON ordenadores.idperfilhard = perfileshard.idperfilhard', $rsmClients); + $clients = $clientsQuery->getResult(); /** Ordenadores **/ - foreach ($pcs as $pc){ - $newClient = $clientRepository->findOneBy(['migrationId' => $pc->getIdordenador()]); - if(!$newClient){ - $newClient = new Client(); - $newClient->setMigrationId($pc->getIdordenador()); - $this->entityManager->persist($newClient); + $output->writeln("CLIENTES TOTAL: ". count($clients)); + foreach ($clients as $client){ + $clientEntity = $clientRepository->findOneBy(['migrationId' => $client['idordenador']]); + if(!$clientEntity){ + $clientEntity = new Client(); + $clientEntity->setMigrationId($client['idordenador']); + $clientEntity->setName($client['nombreordenador']); + $clientEntity->setSerialNumber($client['numserie']); + $clientEntity->setNetiface($client['netiface']); + $clientEntity->setNetdriver($client['netdriver']); + $clientEntity->setMac($client['mac']); + $clientEntity->setIp($client['ip']); } - $newClient->setName($pc->getNombreordenador()); - $newClient->setSerialNumber($pc->getNumserie()); - $newClient->setNetiface($pc->getNetiface()); - $newClient->setNetdriver($pc->getNetdriver()); - $newClient->setMac($pc->getMac()); - $newClient->setIp($pc->getIp()); - //$client->setStatus(); - //$newClient->setCache($pc->getCache()); - //$newClient->setIdproautoexec($pc->getIdproautoexec()); - //$newClient->setOglive($pc->getOglivedir()); - // Netboot - - //$migrationId = "" - - // HardwareProfile - //$hardwareProfile = $hardwareProfileRepository->findOneBy(['migrationId' => $pc->getIdperfilhard()]); - //$newClient->setHardwareProfile($hardwareProfile); - - // Menu - //$menu = $menuRepository->findOneBy(['migrationId' => $pc->getIdmenu()]); - //$newClient->setMenu($menu); - - // Repository - //$repository = $repositoryRepository->findOneBy(['migrationId' => $pc->getIdrepositorio()]); - //$newClient->setRepository($repository); - - // OrganizationalUnit - $migrationId = $pc->getGrupoid() == 0 ? $pc->getIdaula() : $pc->getGrupoid(); + $migrationId = $client['ordenadores.grupoid'] === 0 ? $client['ordenadores.idaula'] : $client['ordenadores.grupoid']; $organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]); - $newClient->setOrganizationalUnit($organizationalUnit); + if ($organizationalUnit){ + $clientEntity->setOrganizationalUnit($organizationalUnit); + } + + $hardwareProfile = $hardwareProfileRepository->findOneBy(['migrationId' => $client['ordenadores.idperfilhard']]); + if ($hardwareProfile){ + $clientEntity->setHardwareProfile($hardwareProfile); + } + + $this->entityManager->persist($clientEntity); } $this->entityManager->flush(); + + return Command::SUCCESS; } } \ No newline at end of file diff --git a/src/Command/Migration/MigrateHardwareAndHardwareProfileCommand.php b/src/Command/Migration/MigrateHardwareAndHardwareProfileCommand.php index 96d8c24..890f0fd 100644 --- a/src/Command/Migration/MigrateHardwareAndHardwareProfileCommand.php +++ b/src/Command/Migration/MigrateHardwareAndHardwareProfileCommand.php @@ -2,6 +2,8 @@ namespace App\Command\Migration; +use App\Entity\HardwareProfile; +use App\Entity\OrganizationalUnit; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Persistence\ManagerRegistry; @@ -10,7 +12,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -#[AsCommand(name: 'opengnsys:migrate_hardware_and_hardware_profile', description: 'Migrate hardware and hardware profile data')] +#[AsCommand(name: 'opengnsys:migrate-hardware-profile', description: 'Migrate hardware and hardware profile data')] class MigrateHardwareAndHardwareProfileCommand extends Command { public function __construct( @@ -27,13 +29,42 @@ class MigrateHardwareAndHardwareProfileCommand extends Command /** @var EntityManagerInterface $oldDatabaseEntityManager */ $oldDatabaseEntityManager = $this->doctrine->getManager('og_1'); + $organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class); + $hardwareProfileRepository = $this->entityManager->getRepository(HardwareProfile::class); + /** Obtener los centros de la base de datos antigua **/ - $rsmCenters = new ResultSetMapping(); - $rsmCenters->addScalarResult('idcentro', 'idcentro'); - $rsmCenters->addScalarResult('nombrecentro', 'nombrecentro'); - $rsmCenters->addScalarResult('comentarios', 'comentarios'); + $rsmHardwareProfiles = new ResultSetMapping(); + $rsmHardwareProfiles->addScalarResult('idperfilhard', 'idperfilhard'); + $rsmHardwareProfiles->addScalarResult('descripcion', 'descripcion'); + $rsmHardwareProfiles->addScalarResult('comentarios', 'perfilhard.comentarios'); + $rsmHardwareProfiles->addScalarResult('grupoid', 'perfilhard.grupoid'); + $rsmHardwareProfiles->addScalarResult('idcentro', 'perfilhard.idcentro'); + $hardwareProfilesQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idperfilhard, descripcion, grupos.comentarios, perfileshard.grupoid, perfileshard.idcentro FROM perfileshard LEFT JOIN grupos ON perfileshard.grupoid = grupos.idgrupo', $rsmHardwareProfiles); + $hardwareProfiles = $hardwareProfilesQuery->getResult(); + /** Perfiles hardware **/ + $output->writeln("PERFILES HARDWARE TOTAL: ". count($hardwareProfiles)); + foreach ($hardwareProfiles as $hardwareProfile){ + $hardwareProfileEntity = null; + $hardwareProfileEntity = $hardwareProfileRepository->findOneBy(['migrationId' => $hardwareProfile['idperfilhard']]); + if(!$hardwareProfileEntity){ + $hardwareProfileEntity = new HardwareProfile(); + $hardwareProfileEntity->setMigrationId($hardwareProfile['idperfilhard']); + $hardwareProfileEntity->setDescription($hardwareProfile['descripcion']); + $hardwareProfileEntity->setComments($hardwareProfile['perfilhard.comentarios']); + } + + $migrationId = $hardwareProfile['perfilhard.grupoid'] === 0 ? $hardwareProfile['perfilhard.idcentro'] : $hardwareProfile['perfilhard.grupoid']; + $organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]); + + if ($organizationalUnit){ + $hardwareProfileEntity->setOrganizationalUnit($organizationalUnit); + } + + $this->entityManager->persist($hardwareProfileEntity); + } + $this->entityManager->flush(); return Command::SUCCESS; } diff --git a/src/Command/Migration/MigrateOrganizationalUnitCommand.php b/src/Command/Migration/MigrateOrganizationalUnitCommand.php index 3e561d4..7234b26 100644 --- a/src/Command/Migration/MigrateOrganizationalUnitCommand.php +++ b/src/Command/Migration/MigrateOrganizationalUnitCommand.php @@ -46,7 +46,7 @@ class MigrateOrganizationalUnitCommand extends Command $rsmGroups->addScalarResult('comentarios', 'grupos.comentarios'); $rsmGroups->addScalarResult('idcentro', 'grupos.idcentro'); - $groupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupo, grupos.comentarios, grupos.idcentro FROM grupos INNER JOIN centros ON grupos.idcentro = centros.idcentro', $rsmGroups); + $groupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupo, grupos.comentarios, grupos.idcentro FROM grupos LEFT JOIN centros ON grupos.idcentro = centros.idcentro', $rsmGroups); $groups = $groupsQuery->getResult(); /** Obtener las aulas de la base de datos antigua **/ @@ -55,6 +55,7 @@ class MigrateOrganizationalUnitCommand extends Command $rsmClassrooms->addScalarResult('nombreaula', 'nombreaula'); $rsmClassrooms->addScalarResult('comentarios', 'aulas.comentarios'); $rsmClassrooms->addScalarResult('grupoid', 'aulas.grupoid'); + $rsmClassrooms->addScalarResult('idcentro', 'aulas.idcentro'); $rsmClassrooms->addScalarResult('proxy', 'proxy'); $rsmClassrooms->addScalarResult('dns', 'dns'); $rsmClassrooms->addScalarResult('netmask', 'netmask'); @@ -70,7 +71,7 @@ class MigrateOrganizationalUnitCommand extends Command $rsmClassrooms->addScalarResult('cagnon', 'cagnon'); $rsmClassrooms->addScalarResult('ubicacion', 'ubicacion'); - $roomsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idaula, nombreaula, aulas.comentarios, aulas.grupoid, proxy, dns, netmask, router, ntp, timep2p, modp2p, modomul, ipmul, velmul, pormul, pizarra, cagnon, ubicacion FROM aulas INNER JOIN grupos ON aulas.grupoid = grupos.idgrupo', $rsmClassrooms); + $roomsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idaula, nombreaula, aulas.comentarios, aulas.grupoid, aulas.idcentro, proxy, dns, netmask, router, ntp, timep2p, modp2p, modomul, ipmul, velmul, pormul, pizarra, cagnon, ubicacion FROM aulas LEFT JOIN grupos ON aulas.grupoid = grupos.idgrupo', $rsmClassrooms); $rooms = $roomsQuery->getResult(); /** Obtener los grupos de ordenadores de la base de datos antigua **/ @@ -79,7 +80,7 @@ class MigrateOrganizationalUnitCommand extends Command $rsmClientGroups->addScalarResult('nombregrupoordenador', 'nombregrupoordenador'); $rsmClientGroups->addScalarResult('comentarios', 'gruposordenadores.comentarios'); $rsmClientGroups->addScalarResult('idaula', 'gruposordenadores.idaula'); - $clientGroupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupoordenador, gruposordenadores.comentarios, gruposordenadores.idaula FROM gruposordenadores INNER JOIN aulas ON gruposordenadores.idaula = aulas.idaula', $rsmClientGroups); + $clientGroupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupoordenador, gruposordenadores.comentarios, gruposordenadores.idaula FROM gruposordenadores LEFT JOIN aulas ON gruposordenadores.idaula = aulas.idaula', $rsmClientGroups); $clientGroups = $clientGroupsQuery->getResult(); $organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class); @@ -88,7 +89,7 @@ class MigrateOrganizationalUnitCommand extends Command $output->writeln("CENTROS TOTAL: ". count($centers)); foreach ($centers as $center){ $centerOrganizationalUnit = null; - $centerOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $center['idcentro']]); + $centerOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $center['idcentro'], 'type' => OrganizationalUnitTypes::ORGANIZATIONAL_UNIT]); if(!$centerOrganizationalUnit){ $centerOrganizationalUnit = new OrganizationalUnit(); $centerOrganizationalUnit->setMigrationId($center['idcentro']); @@ -104,7 +105,7 @@ class MigrateOrganizationalUnitCommand extends Command $output->writeln("GRUPOS DE AULAS TOTAL: ". count($groups)); foreach ($groups as $group){ $groupPcOrganizationalUnit = null; - $groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $group['idgrupo']]); + $groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $group['idgrupo'], 'type' => OrganizationalUnitTypes::CLASSROOMS_GROUP]); if(!$groupPcOrganizationalUnit){ $groupPcOrganizationalUnit = new OrganizationalUnit(); $groupPcOrganizationalUnit->setMigrationId($group['idgrupo']); @@ -126,7 +127,7 @@ class MigrateOrganizationalUnitCommand extends Command $output->writeln("AULAS TOTAL: ". count($rooms)); foreach ($rooms as $room){ $roomOrganizationalUnit = null; - $roomOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $room['idaula']]); + $roomOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $room['idaula'], 'type' => OrganizationalUnitTypes::CLASSROOM]); if(!$roomOrganizationalUnit){ $roomOrganizationalUnit = new OrganizationalUnit(); $roomOrganizationalUnit->setMigrationId($room['idaula']); @@ -137,9 +138,11 @@ class MigrateOrganizationalUnitCommand extends Command $roomOrganizationalUnit->setLocation($room['ubicacion']); $roomOrganizationalUnit->setType(OrganizationalUnitTypes::CLASSROOM); - $group = $organizationalUnitRepository->findOneBy(['migrationId' => $room['aulas.grupoid']]); - if ($group){ - $roomOrganizationalUnit->setParent($group); + $migrationId = $room['aulas.grupoid'] === 0 ? $room['aulas.idcentro'] : $room['aulas.grupoid']; + $organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]); + + if ($organizationalUnit){ + $roomOrganizationalUnit->setParent($organizationalUnit); } $this->entityManager->persist($roomOrganizationalUnit); @@ -167,11 +170,10 @@ class MigrateOrganizationalUnitCommand extends Command $this->entityManager->flush(); /** Grupo Ordenador **/ - $output->writeln("GRUPOS ORDENADORES ". count($rooms)); + $output->writeln("GRUPOS ORDENADORES ". count($clientGroups)); foreach ($clientGroups as $clientGroup){ - var_dump($clientGroup ); $groupPcOrganizationalUnit = null; - $groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $clientGroup['idgrupo']]); + $groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $clientGroup['idgrupo'], 'type' => OrganizationalUnitTypes::CLIENTS_GROUP]); if(!$groupPcOrganizationalUnit){ $groupPcOrganizationalUnit = new OrganizationalUnit(); $groupPcOrganizationalUnit->setMigrationId($clientGroup['idgrupo']); diff --git a/src/Entity/Client.php b/src/Entity/Client.php index fab44f4..6aba709 100644 --- a/src/Entity/Client.php +++ b/src/Entity/Client.php @@ -8,8 +8,7 @@ use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: ClientRepository::class)] class Client extends AbstractEntity { - #[ORM\Column(length: 255, nullable: true)] - private ?string $name = null; + use NameableTrait; #[ORM\Column(length: 255, nullable: true)] private ?string $serialNumber = null; @@ -35,19 +34,6 @@ class Client extends AbstractEntity #[ORM\ManyToOne(inversedBy: 'clients')] private ?HardwareProfile $hardwareProfile = null; - - public function getName(): ?string - { - return $this->name; - } - - public function setName(?string $name): static - { - $this->name = $name; - - return $this; - } - public function getSerialNumber(): ?string { return $this->serialNumber; diff --git a/tests/Functional/AbstractTest.php b/tests/Functional/AbstractTest.php index 956517f..089d7cc 100644 --- a/tests/Functional/AbstractTest.php +++ b/tests/Functional/AbstractTest.php @@ -4,7 +4,6 @@ namespace Functional; use ApiPlatform\Symfony\Bundle\Test\ApiTestCase; use ApiPlatform\Symfony\Bundle\Test\Client; -use App\Factory\UserFactory; use Faker\Factory; use Faker\Generator; use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;