public function taskStateChange(User $user, $taskId, $newState)
 {
     $this->task = $this->dataRepository->find($taskId);
     $roles = $this->dataRepository->getRolesInTask($taskId, $user->getId());
     $currentState = $this->task->getState();
     $model = $this->buildModel();
     foreach ($roles as $role) {
         if (array_key_exists($role['role'], $model)) {
             if (array_key_exists($currentState, $model[$role['role']])) {
                 if (in_array($newState, $model[$role['role']][$currentState])) {
                     $this->accessOpened = true;
                     break;
                 }
             }
         }
     }
     if (!$this->accessHasOpened()) {
         return;
     }
     $this->task->setState($newState);
     $states = (new Dictionary())->taskStates();
     switch ($newState) {
         case $states->RUNNING[0]:
             if (!$this->task->getDateAccept()) {
                 $this->task->setDateAccept(new \DateTime());
             }
             break;
         case $states->CANCELED[0]:
             $this->task->setDateCancel(new \DateTime());
             break;
         case $states->COMPLETED[0]:
             $this->task->setDateComplete(new \DateTime());
             break;
         default:
             break;
     }
     $this->wasChanged = true;
 }