Problem to Solve

There are a handful of event registrations where we allow a partial payment before requiring the entire payment for the event. However, the only person who can pay the remainder is the original registrar, no one else in the family. This creates inconveniences and occassional barriers to paying for events which needs to be seamless as we must have people pay for events in full. And as we all have likely experienced, not everyone pays their outstanding balances quickly, so we don't want accessibility to be a barrier.

The Solution

Use an HTML block and a workflow on a new webpage to edit the existing registrar on the registration when someone clicks on the registration link through their "My Account" page. See video for an example of what I'm referring to.

How-To

There are 3 steps to creating this:

  1. Create a new workflow that changes the registrar information on the registration.
  2. Create a new webpage where the HTML block will link to that has a workflow entry block on it with this new workflow you created. The workflow will redirect off of this page to https://my.churchname.com/Registration?RegistrationId={{ RegistrationId }}.
  3. Use an HTML block on the MyAccount page to display registrations connected to a person's PrimaryFamilyId that have an outstanding balance.

  1. Create a New Workflow
  2. Purpose: To change the registrar information: the Person, First Name, Last Name and Email attached to the registration in order to allow a different person to make payments on behalf of this registration.

    Workflow Attributes: Screenshot_2025-06-25_at_2.40.21_PM.png
    Actions:

    1. Set Entity Properties (from Blue Box Moon plugin)
      • Entity Type: Registration
      • Attribute: Registration Id
      • Properties
        • PersonAliasId: {{ Workflow | Attribute:'CurrentPerson', 'PrimaryAliasId' }}
        • FirstName: {{ Workflow | Attribute:'CurrentPerson', 'FirstName' }}
        • LastName: {{ Workflow | Attribute:'CurrentPerson', 'LastName' }}
        • ConfirmationEmail: {{ Workflow | Attribute:'CurrentPerson', 'Email' }}
        • Screenshot_2025-06-25_at_2.47.09_PM.png

    2. Redirect to Page
      • Url: https://my.churchname.com/Registration?RegistrationId={{ Workflow | Attribute:'RegistrationId' | AsInteger }}
      • Screenshot_2025-06-25_at_2.48.31_PM.png

  3. Create new webpage
  4. Purpose: This page strictly exists to kick off the workflow. The user most likely won't be able to even see this page.

    1. Go to CMS Configuration
    2. Select Pages
    3. Add a new page
    4. Go to that new page and add a "Workflow Entry" block.
    5. On the block settings, select the "Workflow Type" as the new workflow you just created.

  5. Add HTML block to MyAccount page
  6. Purpose: To display all registrations with an outstanding balance and link it to the new page you just created while passing page parameters that match the workflow attributes in order to kick off that workflow.

    1. You need to figure out what section you want this list of links to live on a MyAccount page. Add a new "HTML Content" block to that section.
    2. Add the code below to your new block. Make sure to edit the <a> tag to be the link to your new page BUT leave the page parameters as is (unless you changed the names of the workflow attributes - then update the page parameter to that new attribute name).
    3. 
      {% capture externalSite %}
          https://{{ 'Global' | Page:'Host' }}
      {% endcapture %}
      
      {% sql %}
          DECLARE @Date datetime = CAST(SYSDATETIMEOFFSET() AT TIME ZONE 'Eastern Standard Time' AS datetime)
      
          SELECT
              R.Id,
              RI.Name,
              R.CreatedDateTime,
              RT.AllowExternalRegistrationUpdates AS [Updates],
              P.FirstName + ' ' + P.LastName AS [Registered By]
          FROM Registration R
          INNER JOIN PersonAlias PA ON PA.Id = R.PersonAliasId
          INNER JOIN Person P ON P.Id = PA.PersonId
          INNER JOIN RegistrationInstance RI ON RI.Id = R.RegistrationInstanceId
          INNER JOIN RegistrationTemplate RT ON RT.Id = RI.RegistrationTemplateId
          WHERE P.PrimaryFamilyId = (
              SELECT PrimaryFamilyId
              FROM Person
              WHERE Id = {{ CurrentPerson.Id }}
          )
          AND RI.StartDateTime >= DATEADD(YEAR, -1, SYSDATETIMEOFFSET() AT TIME ZONE 'Eastern Standard Time')
          AND RI.IsActive = 1
          AND RT.IsActive = 1
          ORDER BY R.CreatedDateTime DESC
      {% endsql %}
      
      {% assign registrationCount = results | Size %}
      {% if registrationCount > 0 %}
          {% assign count = 0 %}
      
          {% for row in results %}
              {% assign balanceDue = 0 %}
              {% registration where:'Id == {{ row.Id }}' %}
                  {% for item in registrationItems %}
                      {% assign balanceDue = item.BalanceDue %}
                  {% endfor %}
              {% endregistration %}
      
              {% if balanceDue != 0 %}
                  {% if count == 0 %}
      <div class="panel panel-default">
          <div class="panel-heading">Outstanding Balances</div>
          <ul class="list-group list-group-panel">
                  {% assign count = 1 %}
                  {% endif %}
      
      <li class="list-group-item">
          <a href="{{ externalSite }}/page/1262?RegistrationId={{ row.Id }}&CurrentPerson={{ CurrentPerson.PrimaryAlias.Guid }}" class="js-group-item">
              {{ row.Name }}
          </a>
          <label class="label label-warning">{{ 'Global' | Attribute:'CurrencySymbol' }}</label><br />
          <p>
              Balance Due: {{ balanceDue | FormatAsCurrency }}<br />
          </p>
      </li>
              {% endif %}
          {% endfor %}
      
          {% if count > 0 %}
          </ul>
      </div>
          {% endif %}
      {% endif %}
      
      

    What should occur now is when you click the link to the registration, technically, it's going to the new webpage you created, kicking off the workflow, changing the registrar to the person who clicked the link, then redirecting to the registration page without a hitch and without the default security that only allows the original registrar to make the remaining payment.

Other Things to Know

  1. The registrar is different once the link is clicked to the registration which likely means the email is different. So be aware that communication to registrars will go to the new person, not the original.
  2. The link a registrar would get from a payment reminder email has not changed and is not shareable to different people. It will display the same error message if someone is logged in as anyone other than the registrar. This function only works if they access the registration from their MyAccount page specifically.
  3. The only people who have access to this new link is anyone in the existing registrar's family. Therefore, if there are any duplicate profiles in a family, you will experience issues with this link appearing for the duplicate profile as that duplicate isn't in the family group of the existing registrar.

Complete!

You should be set up and ready to go. I'd recommend doing this on a training server first before moving it to your live, production server as testing different scenarios is necessary before making this go-live to the public.

If you find ways to improve upon this, please let me know! I always love to find better or more efficient ways to solve problems. Hopefully this is helpful for you and your church as you serve your people!