/**
  * @param string $workflowName
  * @param array $attributes
  * @param array $steps
  * @return Workflow
  */
 protected function createWorkflow($workflowName, array $attributes = array(), array $steps = array())
 {
     $workflow = new Workflow();
     $workflow->setName($workflowName);
     foreach ($attributes as $name => $attribute) {
         $workflow->getAttributeManager()->getAttributes()->set($name, $attribute);
     }
     $workflow->getStepManager()->setSteps($steps);
     return $workflow;
 }
 /**
  * @param string $workflowName
  * @param array $attributes
  * @param array $steps
  * @param string|null $relatedEntity
  * @return Workflow
  */
 protected function createWorkflow($workflowName, array $attributes = array(), array $steps = array(), $relatedEntity = null)
 {
     $entityConnector = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Model\\EntityConnector')->disableOriginalConstructor()->getMock();
     $aclManager = $this->getMockBuilder('Oro\\Bundle\\WorkflowBundle\\Acl\\AclManager')->disableOriginalConstructor()->getMock();
     $workflow = new Workflow($entityConnector, $aclManager);
     $workflow->setName($workflowName);
     foreach ($attributes as $name => $attribute) {
         $workflow->getAttributeManager()->getAttributes()->set($name, $attribute);
     }
     $workflow->getStepManager()->setSteps($steps);
     $definition = new WorkflowDefinition();
     $definition->setRelatedEntity($relatedEntity);
     $workflow->setDefinition($definition);
     return $workflow;
 }
 /**
  * @param WorkflowDefinition $workflowDefinition
  * @param Workflow $workflow
  */
 protected function setEntityAcls(WorkflowDefinition $workflowDefinition, Workflow $workflow)
 {
     $entityAcls = array();
     foreach ($workflow->getAttributeManager()->getEntityAttributes() as $attribute) {
         foreach ($workflow->getStepManager()->getSteps() as $step) {
             $updatable = $attribute->isEntityUpdateAllowed() && $step->isEntityUpdateAllowed($attribute->getName());
             $deletable = $attribute->isEntityDeleteAllowed() && $step->isEntityDeleteAllowed($attribute->getName());
             if (!$updatable || !$deletable) {
                 $entityAcl = new WorkflowEntityAcl();
                 $entityAcl->setAttribute($attribute->getName())->setStep($workflowDefinition->getStepByName($step->getName()))->setEntityClass($attribute->getOption('class'))->setUpdatable($updatable)->setDeletable($deletable);
                 $entityAcls[] = $entityAcl;
             }
         }
     }
     $workflowDefinition->setEntityAcls($entityAcls);
 }
 /**
  * @param Workflow $workflow
  * @throws AssemblerException
  */
 protected function validateWorkflow(Workflow $workflow)
 {
     $startTransitions = $workflow->getTransitionManager()->getTransitions()->filter(function (Transition $transition) {
         return $transition->isStart();
     });
     if (!$startTransitions->count()) {
         throw new AssemblerException(sprintf('Workflow "%s" does not contains neither start step nor start transitions', $workflow->getName()));
     }
     if ($workflow->getType() == Workflow::TYPE_ENTITY) {
         /** @var Step $step */
         foreach ($workflow->getStepManager()->getSteps() as $step) {
             if ($step->getFormOptions()) {
                 throw new AssemblerException(sprintf('Workflow "%s" has type "entity" and cannot support form options in step "%s"', $workflow->getName(), $step->getName()));
             }
         }
     }
 }
Ejemplo n.º 5
0
 /**
  * @param \DateTime $dateFrom
  * @param \DateTime $dateTo
  * @param Workflow  $workflow
  * @param AclHelper $aclHelper
  *
  * @return array
  */
 public function getFunnelChartData(\DateTime $dateFrom, \DateTime $dateTo, Workflow $workflow = null, AclHelper $aclHelper = null)
 {
     if (!$workflow) {
         return ['items' => [], 'nozzleSteps' => []];
     }
     $steps = $workflow->getStepManager()->getOrderedSteps();
     // regular and final steps should be calculated separately
     $regularSteps = [];
     $finalSteps = [];
     foreach ($steps as $step) {
         if (!in_array($step->getName(), $this->excludedSteps)) {
             if ($step->isFinal()) {
                 $finalSteps[] = $step->getName();
             } else {
                 $regularSteps[] = $step->getName();
             }
         }
     }
     // regular steps should be calculated for whole period, final steps - for specified period
     $regularStepsData = $this->getStepData($regularSteps, null, null, $aclHelper);
     $finalStepsData = $this->getStepData($finalSteps, $dateFrom, $dateTo, $aclHelper);
     // final calculation
     $data = [];
     foreach ($steps as $step) {
         $stepName = $step->getName();
         if (!in_array($stepName, $this->excludedSteps)) {
             if ($step->isFinal()) {
                 $stepValue = isset($finalStepsData[$stepName]) ? $finalStepsData[$stepName] : 0;
                 $data[] = ['label' => $step->getLabel(), 'value' => $stepValue, 'isNozzle' => true];
             } else {
                 $stepValue = isset($regularStepsData[$stepName]) ? $regularStepsData[$stepName] : 0;
                 $data[] = ['label' => $step->getLabel(), 'value' => $stepValue, 'isNozzle' => false];
             }
         }
     }
     return $data;
 }