. */ namespace App\Command\Migrations; use App\Services\ImportExportSystem\PartKeeprImporter\PKDatastructureImporter; use App\Services\ImportExportSystem\PartKeeprImporter\MySQLDumpXMLConverter; use App\Services\ImportExportSystem\PartKeeprImporter\PKImportHelper; use App\Services\ImportExportSystem\PartKeeprImporter\PKPartImporter; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; class ImportPartKeeprCommand extends Command { protected static $defaultName = 'partdb:import-partkeepr'; protected EntityManagerInterface $em; protected MySQLDumpXMLConverter $xml_converter; protected PKDatastructureImporter $datastructureImporter; protected PKImportHelper $importHelper; protected PKPartImporter $partImporter; public function __construct(EntityManagerInterface $em, MySQLDumpXMLConverter $xml_converter, PKDatastructureImporter $datastructureImporter, PKPartImporter $partImporter, PKImportHelper $importHelper) { parent::__construct(self::$defaultName); $this->em = $em; $this->datastructureImporter = $datastructureImporter; $this->importHelper = $importHelper; $this->partImporter = $partImporter; $this->xml_converter = $xml_converter; } protected function configure() { $this->setDescription('Import a PartKeepr database dump into Part-DB'); $this->addArgument('file', InputArgument::REQUIRED, 'The file to which should be imported.'); } public function execute(InputInterface $input, OutputInterface $output) { $io = new SymfonyStyle($input, $output); $input_path = $input->getArgument('file'); //Make more checks here //$io->confirm('This will delete all data in the database. Do you want to continue?', false); //Purge the databse, so we will not have any conflicts $this->importHelper->purgeDatabaseForImport(); //Convert the XML file to an array $xml = file_get_contents($input_path); $data = $this->xml_converter->convertMySQLDumpXMLDataToArrayStructure($xml); //Import the data $this->doImport($io, $data); return 0; } private function doImport(SymfonyStyle $io, array $data): void { //First import the distributors $io->info('Importing distributors...'); $count = $this->datastructureImporter->importDistributors($data); $io->success('Imported '.$count.' distributors.'); //Import the measurement units $io->info('Importing part measurement units...'); $count = $this->datastructureImporter->importPartUnits($data); $io->success('Imported '.$count.' measurement units.'); //Import manufacturers $io->info('Importing manufacturers...'); $count = $this->datastructureImporter->importManufacturers($data); $io->success('Imported '.$count.' manufacturers.'); $io->info('Importing categories...'); $count = $this->datastructureImporter->importCategories($data); $io->success('Imported '.$count.' categories.'); $io->info('Importing Footprints...'); $count = $this->datastructureImporter->importFootprints($data); $io->success('Imported '.$count.' footprints.'); $io->info('Importing storage locations...'); $count = $this->datastructureImporter->importStorelocations($data); $io->success('Imported '.$count.' storage locations.'); $io->info('Importing parts...'); $count = $this->partImporter->importParts($data); $io->success('Imported '.$count.' parts.'); } }