/// <summary>
/// Sets the registration state
/// </summary>
private void SetRegistrationState()
{
string registrationSlug = PageParameter( REGISTRATION_SLUG_PARAM_NAME );
int? registrationInstanceId = PageParameter( REGISTRATION_INSTANCE_ID_PARAM_NAME ).AsIntegerOrNull();
int? registrationId = PageParameter( REGISTRATION_ID_PARAM_NAME ).AsIntegerOrNull();
int? groupId = PageParameter( REGISTRATION_GROUP_ID_PARAM_NAME ).AsIntegerOrNull();
int? campusId = PageParameter( REGISTRATION_CAMPUS_ID_PARAM_NAME ).AsIntegerOrNull();
// Not inside a "using" due to serialization needing context to still be active
var rockContext = new RockContext();
// An existing registration id was specified
if ( registrationId.HasValue )
{
var registrationService = new RegistrationService( rockContext );
var registration = registrationService
.Queryable( "Registrants.PersonAlias.Person,Registrants.GroupMember,RegistrationInstance.Account,RegistrationInstance.RegistrationTemplate.Fees,RegistrationInstance.RegistrationTemplate.Discounts,RegistrationInstance.RegistrationTemplate.Forms.Fields.Attribute,RegistrationInstance.RegistrationTemplate.FinancialGateway" )
.Where( r => r.Id == registrationId.Value )
.FirstOrDefault();
if ( registration != null )
{
RegistrationInstanceState = registration.RegistrationInstance;
RegistrationState = new RegistrationInfo( registration, rockContext );
RegistrationState.PreviousPaymentTotal = registrationService.GetTotalPayments( registration.Id );
}
}
// A registration slug was specified
if ( RegistrationState == null && !string.IsNullOrWhiteSpace( registrationSlug ) )
{
var dateTime = RockDateTime.Now;
var linkage = new EventItemOccurrenceGroupMapService( rockContext )
.Queryable( "RegistrationInstance.Account,RegistrationInstance.RegistrationTemplate.Fees,RegistrationInstance.RegistrationTemplate.Discounts,RegistrationInstance.RegistrationTemplate.Forms.Fields.Attribute,RegistrationInstance.RegistrationTemplate.FinancialGateway" )
.Where( l =>
l.UrlSlug == registrationSlug &&
l.RegistrationInstance != null &&
l.RegistrationInstance.IsActive &&
l.RegistrationInstance.RegistrationTemplate != null &&
l.RegistrationInstance.RegistrationTemplate.IsActive &&
(!l.RegistrationInstance.StartDateTime.HasValue || l.RegistrationInstance.StartDateTime <= dateTime ) &&
(!l.RegistrationInstance.EndDateTime.HasValue || l.RegistrationInstance.EndDateTime > dateTime ) )
.FirstOrDefault();
if ( linkage != null )
{
RegistrationInstanceState = linkage.RegistrationInstance;
GroupId = linkage.GroupId;
RegistrationState = new RegistrationInfo( CurrentPerson );
}
}
// A group id and campus id were specified
if ( RegistrationState == null && groupId.HasValue && campusId.HasValue )
{
var dateTime = RockDateTime.Now;
var linkage = new EventItemOccurrenceGroupMapService( rockContext )
.Queryable( "RegistrationInstance.Account,RegistrationInstance.RegistrationTemplate.Fees,RegistrationInstance.RegistrationTemplate.Discounts,RegistrationInstance.RegistrationTemplate.Forms.Fields.Attribute,RegistrationInstance.RegistrationTemplate.FinancialGateway" )
.Where( l =>
l.GroupId == groupId &&
l.EventItemOccurrence != null &&
l.EventItemOccurrence.CampusId == campusId &&
l.RegistrationInstance != null &&
l.RegistrationInstance.IsActive &&
l.RegistrationInstance.RegistrationTemplate != null &&
l.RegistrationInstance.RegistrationTemplate.IsActive &&
( !l.RegistrationInstance.StartDateTime.HasValue || l.RegistrationInstance.StartDateTime <= dateTime ) &&
( !l.RegistrationInstance.EndDateTime.HasValue || l.RegistrationInstance.EndDateTime > dateTime ) )
.FirstOrDefault();
if ( linkage != null )
{
RegistrationInstanceState = linkage.RegistrationInstance;
GroupId = linkage.GroupId;
RegistrationState = new RegistrationInfo( CurrentPerson );
}
}
// A registratio instance id was specified
if ( RegistrationState == null && registrationInstanceId.HasValue )
{
var dateTime = RockDateTime.Now;
RegistrationInstanceState = new RegistrationInstanceService( rockContext )
.Queryable( "Account,RegistrationTemplate.Fees,RegistrationTemplate.Discounts,RegistrationTemplate.Forms.Fields.Attribute,RegistrationTemplate.FinancialGateway" )
.Where( r =>
r.Id == registrationInstanceId.Value &&
r.IsActive &&
r.RegistrationTemplate != null &&
r.RegistrationTemplate.IsActive &&
( !r.StartDateTime.HasValue || r.StartDateTime <= dateTime ) &&
( !r.EndDateTime.HasValue || r.EndDateTime > dateTime ) )
.FirstOrDefault();
if ( RegistrationInstanceState != null )
{
RegistrationState = new RegistrationInfo( CurrentPerson );
}
}
if ( RegistrationState != null && !RegistrationState.Registrants.Any() )
{
SetRegistrantState( 1 );
}
}