setName('workflow:default') ->setDescription('Set class default workflow and assign to all class entities') ->setHelp('Set class default workflow and assign to all class entities') ->addOption( 'class', null, InputOption::VALUE_REQUIRED, 'Entity Class name. e.g.: FTTHBundle\\Entity\\ONU' ) ->addOption( 'all', null, InputOption::VALUE_NONE, 'Assign default workflow to all class entities passed by parameters' ) ; } /** * @param InputInterface $input * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { $class = $input->getOption('class'); if (is_null($class)) { $output->writeln("El parametro --class es requerido"); } $em = $this->getContainer()->get("doctrine.orm.entity_manager"); $workworkflowRepository = $em->getRepository(Workflow::class); $workflow = null; $workflows = $workworkflowRepository->findAllByClass($class); if (count($workflows)) { // Hay workflows habilitados $workflow = current($workflows); // en el caso que haya varios workflows, seteo por defecto el primero if ($workflow->getUsedByDefault() == false) { $workflow->setUsedByDefault(true); $em->flush(); } $output->writeln("Workflow asignado por defecto: {$workflow}"); } if (!is_null($workflow) && $input->getOption('all')) { // actualizo las onus que no tengan currentState. // por ej si fueron importadas $qb = $em->getRepository($class)->createQueryBuilder($class); $result = $qb->update($class, 'o') ->set('o.currentState', ':currentState') ->setParameter('currentState', 'active') ->where('o.currentState IS NULL') ->getQuery()->getResult(); $qb = $em->getRepository($class)->createQueryBuilder($class); $result = $qb->update($class, 'o') ->set('o.workflow', ':workflow') ->setParameter('workflow', $workflow) ->getQuery()->getResult(); $output->writeln("Se ejecutó la actualización de entidates {$class}"); $output->writeln("Result: {$result}"); } elseif (is_null($workflow)) { $output->writeln("No hay workflows para la clase"); } } }