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> /// Executes the action. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The workflow action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute(RockContext rockContext, WorkflowAction action, Object entity, out List <string> errorMessages) { errorMessages = new List <string>(); var documentTemplateId = GetAttributeValue(action, AttributeKeys.DocumentTemplate).AsIntegerOrNull(); Person person = null; DigitalSignatureComponent DigitalSignatureComponent = null; // get person Guid?personAttributeGuid = GetAttributeValue(action, AttributeKeys.Person).AsGuidOrNull(); if (personAttributeGuid.HasValue) { Guid?personAliasGuid = action.GetWorkflowAttributeValue(personAttributeGuid.Value).AsGuidOrNull(); if (personAliasGuid.HasValue) { var personAlias = new PersonAliasService(rockContext).Get(personAliasGuid.Value); if (personAlias != null) { person = personAlias.Person; } } } if (person == null) { errorMessages.Add("There is no person set on the attribute. Please try again."); return(false); } if (string.IsNullOrWhiteSpace(person.Email)) { errorMessages.Add("There is no valid email address set on the person."); return(false); } if (documentTemplateId.HasValue) { var signatureDocument = new SignatureDocumentService(rockContext) .Queryable().AsNoTracking() .Where(d => d.SignatureDocumentTemplateId == documentTemplateId.Value && d.AppliesToPersonAlias != null && d.AppliesToPersonAlias.PersonId == person.Id && d.LastStatusDate.HasValue && d.Status == SignatureDocumentStatus.Signed && d.BinaryFile != null) .OrderByDescending(d => d.LastStatusDate.Value) .FirstOrDefault(); var documentTemplate = new SignatureDocumentTemplateService(rockContext).Get(documentTemplateId.Value); if (documentTemplate.ProviderEntityType != null) { var provider = DigitalSignatureContainer.GetComponent(documentTemplate.ProviderEntityType.Name); if (provider != null && provider.IsActive) { DigitalSignatureComponent = provider; } } if (documentTemplate != null && signatureDocument != null) { // get the attribute to store the document/file guid var signatureDocumentAttributeGuid = GetAttributeValue(action, AttributeKeys.SignatureDocument).AsGuidOrNull(); if (signatureDocumentAttributeGuid.HasValue) { var signatureDocumentAttribute = AttributeCache.Get(signatureDocumentAttributeGuid.Value, rockContext); if (signatureDocumentAttribute != null) { if (signatureDocumentAttribute.FieldTypeId == FieldTypeCache.Get(Rock.SystemGuid.FieldType.FILE.AsGuid(), rockContext).Id) { SetWorkflowAttributeValue(action, signatureDocumentAttributeGuid.Value, signatureDocument.BinaryFile.Guid.ToString()); return(true); } else { errorMessages.Add("Invalid field type for signature document attribute set."); return(false); } } else { errorMessages.Add("Invalid signature document attribute set."); return(false); } } else { errorMessages.Add("Signature document attribute must be set."); return(false); } } else if (DigitalSignatureComponent != null) { var sendDocumentTxn = new Rock.Transactions.SendDigitalSignatureRequestTransaction(); sendDocumentTxn.SignatureDocumentTemplateId = documentTemplateId.Value; sendDocumentTxn.AppliesToPersonAliasId = person.PrimaryAliasId ?? 0; sendDocumentTxn.AssignedToPersonAliasId = person.PrimaryAliasId ?? 0; sendDocumentTxn.DocumentName = string.Format("{0}_{1}", action.Activity.Workflow.Name.RemoveSpecialCharacters(), person.FullName.RemoveSpecialCharacters()); sendDocumentTxn.Email = person.Email; Rock.Transactions.RockQueue.TransactionQueue.Enqueue(sendDocumentTxn); return(true); } else { errorMessages.Add("There was an error loading the Digital Signature component, please check your document template."); return(false); } } else { errorMessages.Add("There was no valid document template id set on this action"); return(false); } }