setDescription('Unpacks water_drawing_paperworks from Snapshots and store them to unpacked_water_drawing_paperwork_snapshots table with the last unpacking version number available'); $parser ->addOptions([ 'limit' => [ 'short' => 'l', 'help' => 'Number of rows to process', 'boolean' => false, 'required' => true, ], ]); return $parser; } /** * Implement this method with your command's logic. * * @param \Cake\Console\Arguments $args The command arguments. * @param \Cake\Console\ConsoleIo $io The console io * @return null|void|int The exit code or null for success */ public function execute(Arguments $args, ConsoleIo $io) { $limit = $args->getOption('limit'); if ($limit < 1) $io->abort("You must specify an Int number greater than ZERO!"); $io->info("trying processing $limit items..."); $lastWaterDrawingPaperworkUnpackingVersion = SnapshotsHandler::getLastWaterDrawingPaperworkUnpackingVersion(); $io->info("lastWaterDrawingPaperworkUnpackingVersion: $lastWaterDrawingPaperworkUnpackingVersion"); $processed = 0; $unpackable_water_drawing_paperwork_snapshots = $this->fetchTable('Snapshots')->find()->where(['Snapshots.controllable_object_type_id' => 9, 'OR' => ['Snapshots.unpacked_with_version is NULL', 'Snapshots.unpacked_with_version <>' => $lastWaterDrawingPaperworkUnpackingVersion]])->limit((int)$limit)->toArray(); $io->info("found " . count($unpackable_water_drawing_paperwork_snapshots) . " unpackable items."); if (count($unpackable_water_drawing_paperwork_snapshots) > 0) ConnectionManager::get('default')->begin(); $this->fetchTable('WaterDrawingPaperworks')->removeBehavior('Trash'); foreach ($unpackable_water_drawing_paperwork_snapshots as $unpackable_water_drawing_paperwork_snapshot) { $io->info("\nUnpackedWaterDrawingPaperworkSnapshot entity:"); $unpackedWaterDrawingPaperworkSnapshot = SnapshotsHandler::getUnpackedWaterDrawingPaperworkSnapshot($unpackable_water_drawing_paperwork_snapshot->id); if (!$unpackedWaterDrawingPaperworkSnapshot) { ConnectionManager::get('default')->rollback(); $io->abort("\nError retrieving unpackedWaterDrawingPaperworkSnapshot!"); } $io->info(json_encode($unpackedWaterDrawingPaperworkSnapshot)); $io->info("\nSaving unpacked water_drawing_paperwork snapshot to unpackedWaterDrawingPaperworkSnapshots table..."); if (!$this->fetchTable('UnpackedWaterDrawingPaperworkSnapshots')->save($unpackedWaterDrawingPaperworkSnapshot)) { ConnectionManager::get('default')->rollback(); $io->abort("\nError saving unpackedWaterDrawingPaperworkSnapshot: " . json_encode($unpackedWaterDrawingPaperworkSnapshot->getErrors())); } $io->info("\nMarking and saving snapshot with ID " . $unpackable_water_drawing_paperwork_snapshot->id . " as unpacked with version: " . $lastWaterDrawingPaperworkUnpackingVersion); $unpackable_water_drawing_paperwork_snapshot->unpacked_with_version = $lastWaterDrawingPaperworkUnpackingVersion; if (!$this->fetchTable('Snapshots')->save($unpackable_water_drawing_paperwork_snapshot)) { ConnectionManager::get('default')->rollback(); $io->abort("\nError saving snapshot: " . json_encode($unpackable_water_drawing_paperwork_snapshot->getErrors())); } $processed++; $io->success("\nSUCCESSFULLY PROCESSED: $processed !\n"); } $this->fetchTable('WaterDrawingPaperworks')->addBehavior('Muffin/Trash.Trash'); $io->success("\nJOB IS DONE. REQUESTED: $limit, UNPACKABLE: " . count($unpackable_water_drawing_paperwork_snapshots) . " SUCCESSFULLY PROCESSED: $processed"); if (count($unpackable_water_drawing_paperwork_snapshots) > 0) ConnectionManager::get('default')->commit(); return static::CODE_SUCCESS; } }