setName('workflow:apply') ->setDescription('Ejecuta una transiciĆn (de un workflow) en una entidad') ->setHelp('Ejecuta un Action (WorflowBundle\Entity\Action) de workflow para una Entidad (WorkflowBundle\Utils\WorkFlowEntityClasses)') ->addOption( 'transition', null, InputOption::VALUE_REQUIRED, 'Transition name' ) ->addOption( 'workflow', null, InputOption::VALUE_REQUIRED, 'Workflow name' ) ->addOption( 'entity', null, InputOption::VALUE_REQUIRED, 'Entity Class. Possible values: ' . implode(', ', WorkFlowEntityClasses::getConstants()) ) ->addOption( 'id', null, InputOption::VALUE_REQUIRED, 'Entity id' ) ; } /** * @param InputInterface $input * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { $entity_manager = $this->getContainer()->get("doctrine.orm.entity_manager"); $transition = $input->getOption('transition'); $workflow = $input->getOption('workflow'); $entityClass = $input->getOption('entity'); $entityId = $input->getOption('id'); $entity = $entity_manager->getRepository($entityClass)->find($entityId); if(!$entity){ throw \Exception("Entity $entityClass with id $entityId not found"); } $wreg = $this->getContainer()->get("workflow.registry"); $wf = $wreg->get($entity, $workflow); $newState = $wf->apply($entity, $transition); $entity_manager->persist($entity); $entity_manager->flush($entity); } }