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