docs: def get_next_action(self, request, application, label, roles):
          """ Process the get_next_action request at the current step. """
  
          # if user is logged and and not applicant, steal the
          # application
          if 'is_applicant' in roles:
              # if we got this far, then we either we are logged in as applicant,
              # or we know the secret for this application.
  
              new_person = None
              reason = None
              details = None
  
              attrs, _ = saml.parse_attributes(request)
              saml_id = attrs['persistent_id']
              if saml_id is not None:
                  query = Person.objects.filter(saml_id=saml_id)
                  if application.content_type.model == "person":
                      query = query.exclude(pk=application.applicant.pk)
                  if query.count() > 0:
                      new_person = Person.objects.get(saml_id=saml_id)
                      reason = "SAML id is already in use by existing person."
                      details = (
                          "It is not possible to continue this application "
                          + "as is because the saml identity already exists "
                          + "as a registered user.")
                  del query
  
              if request.user.is_authenticated:
                  new_person = request.user
                  reason = "%s was logged in " \
                      "and accessed the secret URL." % new_person
                  details = (
                      "If you want to access this application "
                      + "as %s " % application.applicant
                      + "without %s stealing it, " % new_person
                      + "you will have to ensure %s is " % new_person
                      + "logged out first.")
  
              if new_person is not None:
                  if application.applicant != new_person:
                      if 'steal' in request.POST:
                          old_applicant = application.applicant
                          application.applicant = new_person
                          application.save()
                          log.change(
                              application.application_ptr,
                              "Stolen application from %s" % old_applicant)
                          messages.success(
                              request,
                              "Stolen application from %s" % old_applicant)
                          url = base.get_url(request, application, roles, label)
                          return HttpResponseRedirect(url)
                      else:
                          return render(
                              template_name='kgapplications'
                              '/project_aed_steal.html',
                              context={
                                  'application': application,
                                  'person': new_person,
                                  'reason': reason,
                                  'details': details,
                              },
                              request=request)
  
          # if the user is the leader, show him the leader specific page.
          if ('is_leader' in roles or 'is_delegate' in roles) \
                  and 'is_admin' not in roles \
                  and 'is_applicant' not in roles:
              actions = ['reopen']
              if 'reopen' in request.POST:
                  return 'reopen'
              return render(
                  template_name='kgapplications/project_aed_for_leader.html',
                  context={'application': application,
                           'actions': actions, 'roles': roles, },
                  request=request)
  
          # otherwise do the default behaviour for StateWithSteps
          return super(StateApplicantEnteringDetails, self) \
              .get_next_action(request, application, label, roles)