_.each(menus, function(menu){
   if (_.definedPath(menu, 'step.nextStepId')){
     menu.nextStep = _.find(menus, function(item){
       return item.id===menu.step.nextStepId;
     });
   }
 });
 _.each(menus, function(menu){
   if(_.definedPath(menu, 'step.taskCodes')){
     delete menu.step.status;
     _.each(menu.step.taskCodes, function(taskCode){
       if(_.definedPath(validationDTO, 'taskList['+taskCode+']')){
         menu.step.status = 'ERROR';
         return;
       }
     });
   }
 });
 $scope.showConfgurationsErrors = function() {
   var show = false;
   if( _.definedPath($scope.deploymentContext, 'deploymentTopologyDTO.validation.taskList')){
     _.each(globalConfTaskCodes, function(taskCode){
       if (_.defined($scope.deploymentContext.deploymentTopologyDTO.validation.taskList[taskCode])){
         show= true;
         return;
       }
     });
   }
   return show;
 };
 $scope.isPropertyEditable = function(propertyPath) {
   if($scope.selectedResourceTemplate.service) {
     // do not edit servie properties
     return false;
   }
   if($scope.getSubstitutedTemplate($scope.selectedNodeName).id === $scope.selectedResourceTemplate.id){
     if(_.definedPath(propertyPath, 'capabilityName')){
       return isCapabilityPropertyEditable(propertyPath.capabilityName, propertyPath.propertyName);
     }else{
       return isNodePropertyEditable(propertyPath.propertyName);
     }
   }
   return false;
 };
 $scope.isUpdatable = function() {
   return _.includes(['DEPLOYED', 'UPDATED'], $scope.deploymentContext.selectedEnvironment.status) &&
          _.definedPath($scope.deploymentContext, 'deploymentTopologyDTO.locationPolicies._A4C_ALL') &&
          _.get($scope.deploymentContext, 'deploymentTopologyDTO.locationPolicies._A4C_ALL') === _.get($scope.deployedContext, 'dto.topology.locationGroups._A4C_ALL.policies[0].locationId');
 };