Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method CanProcessActivity ( 
 | 
  output String feedback_o, 
 | 
  const SWF_ActivityBase activity, 
 | 
  String action 
 | 
) const declarative remote as Boolean 
 | 
{ 
 | 
  Description: 'Indicate if this user can process the [action] for the given [activity].' 
 | 
  TextBody: 
 | 
  [* 
 | 
    result := true; 
 | 
     
 | 
    // Only admin or creator can edit delete the activity 
 | 
    if( action = SWF_ActivityBase::ACTION_EditDelete() 
 | 
        and ( ( not this.IsAdministrator()  
 | 
                and this <> activity.Creator() )  
 | 
               or activity.HasDefinition() ) ) 
 | 
    { 
 | 
      result := false; 
 | 
      feedback_o := SWF_Translation::TRANSLATE_Auth_ProcessActivity_NotCreator(); 
 | 
    }    
 | 
    // Only admin or the assign user can process the activity 
 | 
    else if( action <> SWF_ActivityBase::ACTION_EditDelete() 
 | 
             and not this.IsAdministrator() 
 | 
             and not activity.AssignedUser() = this ) 
 | 
    { 
 | 
      result := false; 
 | 
      feedback_o := SWF_Translation::TRANSLATE_Auth_ProcessActivity_UnauthorizedAction(); 
 | 
    }          
 | 
    // Activity from definition cannot be replied                  
 | 
    else if( SWF_ActivityBase::GetIsReplyAction( action ) 
 | 
             and ( activity.HasDefinition() 
 | 
                   or activity.IsExternal() ) ) 
 | 
    { 
 | 
      result := false; 
 | 
      feedback_o := SWF_Translation::TRANSLATE_Auth_ProcessActivity_NonUserCreatedActivity(); 
 | 
    } 
 | 
    // Only open activity can be close, activity is locked 
 | 
    else if( ( SWF_ActivityBase::GetIsCloseAction( action ) 
 | 
             or action = SWF_ActivityBase::ACTION_SetToOpen() ) 
 | 
             and not activity.IsActive() ) 
 | 
    { 
 | 
      result := false; 
 | 
       
 | 
      previousIncompleteStep := activity.GetPreviousIncompleteStep() 
 | 
       
 | 
      if( not isnull( previousIncompleteStep ) ) 
 | 
      { 
 | 
        feedback_o := SWF_Translation::TRANSLATE_Auth_ProcessActivity_IsLocked( activity.GetPreviousIncompleteStep() ); 
 | 
      } 
 | 
      else if( guard( not activity.ParentStep().IsActive(), false ) ) 
 | 
      { 
 | 
        feedback_o := SWF_Translation::TRANSLATE_Auth_ProcessActivityParentStep_IsInactive( activity.ParentStep() ); 
 | 
      } 
 | 
      else if( guard( activity.IsExternal() and not activity.IsActive(), false ) ) 
 | 
      { 
 | 
        feedback_o := SWF_Translation::TRANSLATE_Auth_ProcessActivity_ExternalActivityNotActive( activity.Name() ); 
 | 
      }  
 | 
    } 
 | 
    // Only closed activity can be open 
 | 
    else if( ( SWF_ActivityBase::GetIsCloseAction( action ) 
 | 
             or action = SWF_ActivityBase::ACTION_Reply() 
 | 
             or action = SWF_ActivityBase::ACTION_Forward() ) 
 | 
             and activity.IsCompleted() ) 
 | 
    { 
 | 
      result := false; 
 | 
      feedback_o := SWF_Translation::TRANSLATE_Auth_ProcessActivity_IsClosed(); 
 | 
    } 
 | 
    // Only open activity can be close, activity is closed 
 | 
    else if( action = SWF_ActivityBase::ACTION_SetToOpen() 
 | 
             and not activity.IsCompleted() ) 
 | 
    { 
 | 
      result := false; 
 | 
      feedback_o := SWF_Translation::TRANSLATE_Auth_ProcessActivity_IsOpen(); 
 | 
    } 
 | 
     
 | 
    return result; 
 | 
  *] 
 | 
} 
 |