History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: CRM-3086
Type: New Feature New Feature
Status: Closed Closed
Resolution: Fixed/Completed
Priority: Major Major
Assignee: mari tilos
Reporter: David Greenberg
Votes: 4
Watchers: 5
Available Workflow Actions

Unclose Issue
Operations

If you were logged in you would be able to see more operations.
CiviCRM

Option to Register Multiple Participants During Online Event Registration

Created: 07/May/08 11:12 AM   Updated: 05/Aug/08 01:43 PM
Component/s: CiviEvent
Affects Version/s: 2.0
Fix Version/s: 2.1

Time Tracking:
Not Specified

Verified for 2.1: Yes
Verified for 2.0: No


 Description  « Hide
Summary
------------
An event can be configured to allow someone to register multiple participants at the same time using the online registration process. When this option is enabled, the person completing the online registration form can click a link saying they want to "Register additional people". They then get prompted for "How many additional people?" and enter a number. Additional text will tell them "You will be able to enter registration information for each additional person after you complete this page and click Continue."

After submitting the initial registration page, including any embedded Profile field(s) and billing info, they will be presented with a new page (form) to complete for each additional participant. Each of these pages will contain the configured Fee Levels form element (radio buttons), an optional email address field, and any profile fields configured for the event. (Example: If the event is configured to include a participant field for Meal Choice - this field is presented for each additional participant.)

A contact record is saved (or if matching, updated) and a pending participant record is created on each form submit.

The Confirm page needs to display a block for each participant, including their "profile" values and the selected Fee Level.


1. Schema Changes
----------------------------
1.1 New column for civicrm_event_page, stores event configuration option to allow multiple participant registration:

 is_multiple_registrations BOOLEAN Default = 0

1.2 New column for civicrm_participant, stores ID of the participant who registered this participant:

 registered_by_id INT FK to civicrm_participant.id (on delete of related record, set NULL)


2. User Interface Changes
------------------------------------
2.1 Manage Events >> Configure >> Online Registration
* Add checkbox form field to this form below the Registration End Date field.
  - Field Label = Register Multiple Participants?

2.2 Online Registration >> Register
* If is_multiple_registrations = true, add clickable link below Event Fees form element: "Register additional people for this event?"

* Onclick, show a text field with prompt: "How many additional people?" Help text below this field is "You will be able to enter registration information for each additional person after you complete this page and click Continue."

* When Register form is submitted, if "additional_participants" > 0 - load an instance of a new form. Form title: "Register Additional Participant". Form contains:
  - Fee field(s) - Fee levels or Price Set fields
  - Email Address
  - Each configured Profile fieldset (in weight order)
  - Form buttons: Previous, Continue
  - These pages also need a "Skip this person" Link which submits the form - but WITHOUT saving any contact and participant info.

* Load an instance of this form for each count of additional_participants.

NOTE: For "free" events, the flow is the same as above up to this point.

2.3 Online Registration >> Confirm
(Confirmation page is skipped for free events as usual.)

* Confirmation page includes a complete set of information for EACH participant to be registered

* The total fee for all participants is calculated and displayed prominently.

2.4 Online Registration >> Thankyou
* Thankyou page includes a complete set of information for EACH registered participant

2.5 Confirmation / Receipt
* A receipt/confirmation is sent to the "primary" participant which includes participant and fee info for EACH registered participant along with total fee. (This is the same as our existing event "receipt" but with "loop" to show info for each participant and a new "Total Fees" line.)

* A "confirmation" is sent to each additional participant for whom an Email Address has been entered. The content of this email is limited to the event-configured email text and the "Event Information" section from the template.

3. Processing Changes
--------------------------------
3.1 Modify existing post process logic to move creating (or updating) the contact and the pending participant record from the Confirm form submit to the Register form (step 1) submit.

(Note that we already do this for "free" (is_monetary = false) events - so this should make the code more consistent.)

3.2 *** Make the same change in online contribution page processing - so we are consistent in how we do this. ****

3.3 Save (or update existing) contact record and a linked participant record for each submitted "additional participant" form. The "primary participant" ID is saved to the registered_by_id column when creating these participant records.

3.4 Payments:
* Modify Confirm post process to submit aggregate fee total to payment processor
* Create one contribution record with the total aggregated amount and one participant_payment record linked to the "primary" participant.

EXAMPLE:
Registering person says they want to register 2 additional participants and completes the forms for themselves and two other people. On successful completion of this registration there should be:
* 3 contact records (assuming none are matches to existing records)
* 3 participant records
* 1 contribution record
* 1 participant_payment record

NOTE: The related specification for "Discount pricing by date" includes changes to the civicrm_participant record which also affect post processing here. The Label corresponding to the selected event level for each participant should be stored in participant.fee_level and the actual amount for each participant is stored in fee_amount. The fee_level/fee_amount can be different for each of the multiple participants.



 All   Comments   Work Log   Change History   FishEye      Sort Order:
peter davis - 12/May/08 06:14 AM
Just need to ensure that these changes also work for Pay Later. cheers

Joe Murray - 12/May/08 03:43 PM
This is a good general implementation.

Feedback on one point from client. In 2.2 they would greatly prefer to use a tabular layout on a single page rather than a columnar one on several pages. I think this is standard UI pattern for repeated info like this myself, and greatly eases input.

In terms of implementation, it would involve AJAXifying a form so that profile fields appeared in a table under each fee level when the user entered a total of more than one ticket on the event registration form.

For example:

Basic fee ($100): Number of tickets: 3
First Name Last Name Email Organization Title

__________ __________ __________ ____________ __________

__________ __________ __________ ____________ __________

__________ __________ __________ ____________ __________

Basic plus meals fee ($150): Number of tickets: 2
First Name Last Name Email Organization Title

__________ __________ __________ ____________ __________

__________ __________ __________ ____________ __________

The rest of the spec would be the same.

shawn holt - 16/May/08 08:53 PM
Request to please make sure that this is tested with refunds, partial refunds and search/reports. thx!

David Greenberg - 19/Jun/08 11:04 PM
QA Exceptions - testing w/ r15233
==========================
* Testing w/ PayPal Pro (test-drive) we created a Primary and a Billing location for each "additional participant" contact record. I don't see a good reason to create the Billing location for the "additional participants" - they are NOT "paying" for the registration - only the "main contact" is.

* BUG with PROFILE DATA and PAY-LATER: I asked for 2 additional participants in an event that had 2 profiles and Pay Later enabled. I filled out Additional Participant info for both participants. On the Confirm Page, the Additional Participant : 1 and 2 fieldsets were present but they were EMPTY (no inner profile fieldsets and do fields : values). Used "Go Back" button and verified that data was persisted in the session for participants - and it was. When I continued from Confirm page - the Thank You HAD the data for participant 1 and 2 - so apparently just an issue w/ Confirm.php and Pay Later. NOTE: This flow works fine for non-pay-later case.

* BUG in receipt with PRICE SETS (minor issue): When a price set is used for the event, the receipt that goes to the "additional participant" has the label "Primary Participant" on a line above the line item(s). This should just be suppressed for them. (It's good to have that label in the receipt for the primary participant).

* Not sure whether the show/hide feature is needed when displaying the "Additional Participants". Seems like it's slightly confusing - and probably fine just to have the fieldsets expanded. In this case, I might replace the outer fieldset (foreach additional participant) - with just a <div><label>Participant 1</label><br /> followed by the inner fieldset(s) for each profile, and then </div>. Assigning a class to the div so it has a 1 px bottom-border (like the section-hidden-border class) to separate each participant's div.

* I added red asterisk to Email Address on AdditionalParticipant.tpl (since we're requiring an email). I noticed that you have this line in the tpl - but arent' using the var ??
{capture assign='reqMark'}<span class="marker" title="{ts}This field is required.{/ts}">*</span>{/capture}


David Greenberg - 02/Jul/08 03:04 AM
Tested exception cases. Modified Confirm and Thankyou to eliminate show-hide feature (simplifies layout). r15503.