/// <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 ); } }
/// <summary> /// Saves the changes. /// </summary> /// <returns></returns> private int? SaveChanges() { Registration registration = null; if ( !string.IsNullOrWhiteSpace( TransactionCode ) ) { ShowError( string.Empty, "You have already completed this " + RegistrationTerm.ToLower() ); } else { try { if ( RegistrationState != null && RegistrationState.Registrants.Any() && RegistrationTemplate != null ) { var rockContext = new RockContext(); rockContext.WrapTransaction( () => { bool hasPayment = ( RegistrationState.PaymentAmount ?? 0.0m ) > 0.0m; if ( RegistrationState.RegistrationId.HasValue ) { registration = new RegistrationService( rockContext ).Get( RegistrationState.RegistrationId.Value ); } else { registration = SaveRegistration( rockContext, hasPayment ); } if ( registration != null ) { if ( hasPayment ) { string errorMessage = string.Empty; if ( !ProcessPayment( rockContext, registration, out errorMessage ) ) { registration = null; throw new Exception( errorMessage ); } } if ( registration != null ) { string appRoot = ResolveRockUrl( "~/" ); string themeRoot = ResolveRockUrl( "~~/" ); var confirmation = new Rock.Transactions.SendRegistrationConfirmationTransaction(); confirmation.RegistrationId = registration.Id; confirmation.AppRoot = appRoot; confirmation.ThemeRoot = themeRoot; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( confirmation ); var notification = new Rock.Transactions.SendRegistrationNotificationTransaction(); notification.RegistrationId = registration.Id; notification.AppRoot = appRoot; notification.ThemeRoot = themeRoot; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( notification ); } } } ); // Re-create State if ( registration != null ) { var registrationService = new RegistrationService( rockContext ); var newRegistration = registrationService .Queryable( "Registrants.PersonAlias.Person,Registrants.GroupMember,RegistrationInstance.Account,RegistrationInstance.RegistrationTemplate.Fees,RegistrationInstance.RegistrationTemplate.Discounts,RegistrationInstance.RegistrationTemplate.Forms.Fields.Attribute,RegistrationInstance.RegistrationTemplate.FinancialGateway" ) .AsNoTracking() .Where( r => r.Id == registration.Id ) .FirstOrDefault(); if ( newRegistration != null ) { RegistrationInstanceState = newRegistration.RegistrationInstance; RegistrationState = new RegistrationInfo( newRegistration, rockContext ); RegistrationState.PreviousPaymentTotal = registrationService.GetTotalPayments( registration.Id ); } } } } catch ( Exception ex ) { ExceptionLogService.LogException( ex, Context, this.RockPage.PageId, this.RockPage.Site.Id, CurrentPersonAlias ); ShowError( "An Error Occurred Processing Your " + RegistrationTerm, ex.Message ); return (int?)null; } } return registration != null ? registration.Id : (int?)null; }
/// <summary> /// Sets the registration state /// </summary> private bool SetRegistrationState() { string registrationSlug = PageParameter( SLUG_PARAM_NAME ); int? registrationInstanceId = PageParameter( REGISTRATION_INSTANCE_ID_PARAM_NAME ).AsIntegerOrNull(); int? registrationId = PageParameter( REGISTRATION_ID_PARAM_NAME ).AsIntegerOrNull(); int? groupId = PageParameter( GROUP_ID_PARAM_NAME ).AsIntegerOrNull(); int? campusId = PageParameter( CAMPUS_ID_PARAM_NAME ).AsIntegerOrNull(); int? eventOccurrenceId = PageParameter( EVENT_OCCURRENCE_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 ) { ShowError( "Error", "Registration not found" ); return false; } if ( CurrentPersonId == null ) { ShowWarning( "Please log in", "You must be logged in to access this registration." ); return false; } // Only allow the person that was logged in when this registration was created. // If the logged in person, registered on someone elses behalf (for example, husband logged in, but entered wife's name as the Registrar), // also allow that person to access the regisratiuon if ( ( registration.PersonAlias != null && registration.PersonAlias.PersonId == CurrentPersonId.Value ) || ( registration.CreatedByPersonAlias != null && registration.CreatedByPersonAlias.PersonId == CurrentPersonId.Value ) ) { RegistrationInstanceState = registration.RegistrationInstance; RegistrationState = new RegistrationInfo( registration, rockContext ); RegistrationState.PreviousPaymentTotal = registrationService.GetTotalPayments( registration.Id ); } else { ShowWarning( "Sorry", "You are not allowed to view or edit the selected registration since you are not the one who created the registration." ); return false; } // set the max number of steps in the progress bar numHowMany.Value = registration.Registrants.Count(); this.ProgressBarSteps = numHowMany.Value * FormCount + 2; // set group id if ( groupId.HasValue ) { GroupId = groupId; } else if ( !string.IsNullOrWhiteSpace( registrationSlug ) ) { var dateTime = RockDateTime.Now; var linkage = new EventItemOccurrenceGroupMapService( rockContext ) .Queryable().AsNoTracking() .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 ) { GroupId = linkage.GroupId; } } } // 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(); CampusId = campusId; if ( linkage != null ) { RegistrationInstanceState = linkage.RegistrationInstance; GroupId = linkage.GroupId; RegistrationState = new RegistrationInfo( CurrentPerson ); } } // A registration 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 registration instance id and event occurrence were specified, but a group (linkage) hasn't been loaded, find the first group for the event occurrence if ( RegistrationInstanceState != null && eventOccurrenceId.HasValue && !groupId.HasValue ) { var eventItemOccurrence = new EventItemOccurrenceService( rockContext ) .Queryable() .Where( o => o.Id == eventOccurrenceId.Value ) .FirstOrDefault(); if ( eventItemOccurrence != null ) { CampusId = eventItemOccurrence.CampusId; var linkage = eventItemOccurrence.Linkages .Where( l => l.RegistrationInstanceId == RegistrationInstanceState.Id ) .FirstOrDefault(); if ( linkage != null ) { GroupId = linkage.GroupId; } } } if ( RegistrationState != null && RegistrationState.FamilyGuid == Guid.Empty && RegistrationTemplate != null && RegistrationTemplate.RegistrantsSameFamily != RegistrantsSameFamily.Ask ) { RegistrationState.FamilyGuid = Guid.NewGuid(); } if ( RegistrationState != null && !RegistrationState.Registrants.Any() ) { SetRegistrantState( 1 ); } if ( RegistrationTemplate != null && RegistrationTemplate.FinancialGateway != null ) { var threeStepGateway = RegistrationTemplate.FinancialGateway.GetGatewayComponent() as ThreeStepGatewayComponent; Using3StepGateway = threeStepGateway != null; if ( Using3StepGateway ) { Step2IFrameUrl = ResolveRockUrl( threeStepGateway.Step2FormUrl ); } } return true; }
private void ProcessPostSave( RegistrationService registrationService, Registration registration, List<int> previousRegistrantIds, RockContext rockContext ) { try { SavePersonNotes( rockContext, previousRegistrantIds, registration ); AddRegistrantsToGroup( rockContext, registration ); string appRoot = ResolveRockUrl( "~/" ); string themeRoot = ResolveRockUrl( "~~/" ); var confirmation = new Rock.Transactions.SendRegistrationConfirmationTransaction(); confirmation.RegistrationId = registration.Id; confirmation.AppRoot = appRoot; confirmation.ThemeRoot = themeRoot; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( confirmation ); var notification = new Rock.Transactions.SendRegistrationNotificationTransaction(); notification.RegistrationId = registration.Id; notification.AppRoot = appRoot; notification.ThemeRoot = themeRoot; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( notification ); var newRegistration = 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 == registration.Id ) .FirstOrDefault(); if ( newRegistration != null ) { RegistrationInstanceState = newRegistration.RegistrationInstance; RegistrationState = new RegistrationInfo( newRegistration, rockContext ); RegistrationState.PreviousPaymentTotal = registrationService.GetTotalPayments( registration.Id ); } } catch ( Exception postSaveEx ) { ShowWarning( "The following occurred after processing your " + RegistrationTerm, postSaveEx.Message ); ExceptionLogService.LogException( postSaveEx, Context, RockPage.PageId, RockPage.Layout.SiteId, CurrentPersonAlias ); } }
private void ProcessPostSave( bool isNewRegistration, Registration registration, List<int> previousRegistrantIds, RockContext rockContext ) { try { SavePersonNotes( rockContext, previousRegistrantIds, registration ); AddRegistrantsToGroup( rockContext, registration ); string appRoot = ResolveRockUrl( "~/" ); string themeRoot = ResolveRockUrl( "~~/" ); if ( isNewRegistration ) { var confirmation = new Rock.Transactions.SendRegistrationConfirmationTransaction(); confirmation.RegistrationId = registration.Id; confirmation.AppRoot = appRoot; confirmation.ThemeRoot = themeRoot; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( confirmation ); var notification = new Rock.Transactions.SendRegistrationNotificationTransaction(); notification.RegistrationId = registration.Id; notification.AppRoot = appRoot; notification.ThemeRoot = themeRoot; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( notification ); } var registrationService = new RegistrationService( new RockContext() ); var newRegistration = registrationService.Get( registration.Id ); if ( newRegistration != null ) { if ( isNewRegistration ) { if ( RegistrationTemplate.RequiredSignatureDocumentTemplateId.HasValue ) { string email = newRegistration.ConfirmationEmail; if ( string.IsNullOrWhiteSpace( email ) && newRegistration.PersonAlias != null && newRegistration.PersonAlias.Person != null ) { email = newRegistration.PersonAlias.Person.Email; } Guid? adultRole = Rock.SystemGuid.GroupRole.GROUPROLE_FAMILY_MEMBER_ADULT.AsGuid(); var groupMemberService = new GroupMemberService( rockContext ); foreach ( var registrant in newRegistration.Registrants.Where( r => r.PersonAlias != null && r.PersonAlias.Person != null ) ) { var assignedTo = registrant.PersonAlias.Person; var registrantIsAdult = adultRole.HasValue && groupMemberService .Queryable().AsNoTracking() .Any( m => m.PersonId == registrant.PersonAlias.PersonId && m.GroupRole.Guid.Equals( adultRole.Value ) ); if ( !registrantIsAdult && newRegistration.PersonAlias != null && newRegistration.PersonAlias.Person != null ) { assignedTo = newRegistration.PersonAlias.Person; } else { if ( !string.IsNullOrWhiteSpace( registrant.PersonAlias.Person.Email ) ) { email = registrant.PersonAlias.Person.Email; } } if ( DigitalSignatureComponent != null ) { var sendDocumentTxn = new Rock.Transactions.SendDigitalSignatureRequestTransaction(); sendDocumentTxn.SignatureDocumentTemplateId = RegistrationTemplate.RequiredSignatureDocumentTemplateId.Value; sendDocumentTxn.AppliesToPersonAliasId = registrant.PersonAlias.Id; sendDocumentTxn.AssignedToPersonAliasId = assignedTo.PrimaryAliasId ?? 0; sendDocumentTxn.DocumentName = string.Format( "{0}_{1}", RegistrationInstanceState.Name.RemoveSpecialCharacters(), registrant.PersonAlias.Person.FullName.RemoveSpecialCharacters() ); sendDocumentTxn.Email = email; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( sendDocumentTxn ); } } } newRegistration.LaunchWorkflow( RegistrationTemplate.RegistrationWorkflowTypeId, newRegistration.ToString() ); newRegistration.LaunchWorkflow( RegistrationInstanceState.RegistrationWorkflowTypeId, newRegistration.ToString() ); } RegistrationInstanceState = newRegistration.RegistrationInstance; RegistrationState = new RegistrationInfo( newRegistration, rockContext ); RegistrationState.PreviousPaymentTotal = registrationService.GetTotalPayments( registration.Id ); } } catch ( Exception postSaveEx ) { ShowWarning( "The following occurred after processing your " + RegistrationTerm, postSaveEx.Message ); ExceptionLogService.LogException( postSaveEx, Context, RockPage.PageId, RockPage.Layout.SiteId, CurrentPersonAlias ); } }
/// <summary> /// Saves the changes. /// </summary> /// <returns></returns> private int? SaveChanges() { if ( !string.IsNullOrWhiteSpace( TransactionCode ) ) { ShowError( string.Empty, "You have already completed this " + RegistrationTerm.ToLower() ); return null; } Registration registration = null; if ( RegistrationState != null && RegistrationState.Registrants.Any() && RegistrationTemplate != null ) { var rockContext = new RockContext(); var registrationService = new RegistrationService( rockContext ); bool isNewRegistration = true; var previousRegistrants = new List<int>(); if ( RegistrationState.RegistrationId.HasValue ) { var previousRegistration = registrationService.Get( RegistrationState.RegistrationId.Value ); if ( previousRegistration != null ) { isNewRegistration = false; previousRegistrants = previousRegistration.Registrants .Where( r => r.PersonAlias != null ) .Select( r => r.PersonAlias.PersonId ) .ToList(); } } try { bool hasPayment = ( RegistrationState.PaymentAmount ?? 0.0m ) > 0.0m; // Save the registration registration = SaveRegistration( rockContext, hasPayment ); if ( registration != null ) { // If there is a payment being made, process the payment if ( hasPayment ) { string errorMessage = string.Empty; if ( !ProcessPayment( rockContext, registration, out errorMessage ) ) { throw new Exception( errorMessage ); } } try { // If there is a valid registration, and nothing went wrong processing the payment, add registrants to group and send the notifications if ( registration != null ) { SavePersonNotes( rockContext, previousRegistrants, registration ); AddRegistrantsToGroup( rockContext, registration ); string appRoot = ResolveRockUrl( "~/" ); string themeRoot = ResolveRockUrl( "~~/" ); var confirmation = new Rock.Transactions.SendRegistrationConfirmationTransaction(); confirmation.RegistrationId = registration.Id; confirmation.AppRoot = appRoot; confirmation.ThemeRoot = themeRoot; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( confirmation ); var notification = new Rock.Transactions.SendRegistrationNotificationTransaction(); notification.RegistrationId = registration.Id; notification.AppRoot = appRoot; notification.ThemeRoot = themeRoot; Rock.Transactions.RockQueue.TransactionQueue.Enqueue( notification ); var newRegistration = 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 == registration.Id ) .FirstOrDefault(); if ( newRegistration != null ) { RegistrationInstanceState = newRegistration.RegistrationInstance; RegistrationState = new RegistrationInfo( newRegistration, rockContext ); RegistrationState.PreviousPaymentTotal = registrationService.GetTotalPayments( registration.Id ); } } } catch ( Exception postSaveEx ) { ShowWarning( "The following occurred after processing your " + RegistrationTerm, postSaveEx.Message ); ExceptionLogService.LogException( postSaveEx, Context, RockPage.PageId, RockPage.Layout.SiteId, CurrentPersonAlias ); } } } catch ( Exception ex ) { ExceptionLogService.LogException( ex, Context, this.RockPage.PageId, this.RockPage.Site.Id, CurrentPersonAlias ); string message = ex.Message; while ( ex.InnerException != null ) { ex = ex.InnerException; message = ex.Message; } ShowError( "An Error Occurred Processing Your " + RegistrationTerm, ex.Message ); // Try to delete the registration if it was just created try { if ( isNewRegistration && registration != null && registration.Id > 0 ) { RegistrationState.RegistrationId = null; using ( var newRockContext = new RockContext() ) { HistoryService.DeleteChanges( newRockContext, typeof( Registration ), registration.Id ); var newRegistrationService = new RegistrationService( newRockContext ); var newRegistration = newRegistrationService.Get( registration.Id ); if ( newRegistration != null ) { newRegistrationService.Delete( newRegistration ); newRockContext.SaveChanges(); } } } } catch { } return (int?)null; } } return registration != null ? registration.Id : (int?)null; }