/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The 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 mergeFields = GetMergeFields(action); var homePhoneValueId = DefinedValueCache.Get(SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME).Id; var mobilePhoneValueId = DefinedValueCache.Get(SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE).Id; var workPhoneValueId = DefinedValueCache.Get(SystemGuid.DefinedValue.PERSON_PHONE_TYPE_WORK).Id; // get requester var requestPerson = new PersonAliasService(rockContext).Get(GetAttributeValue(action, "Person", true).AsGuid()).Person; if (requestPerson == null) { var errorMessage = "Could not determine the person for the request."; errorMessages.Add(errorMessage); action.AddLogEntry(errorMessage, true); return(false); } // get case worker var caseWorker = new PersonAliasService(rockContext).Get(GetAttributeValue(action, "CaseWorker", true).AsGuid())?.Person; // get request status var statusValue = DefinedValueCache.Get(GetAttributeValue(action, "RequestStatus")); if (statusValue == null) { var errorMessage = "Invalid request status provided."; errorMessages.Add(errorMessage); action.AddLogEntry(errorMessage, true); return(false); } // get request description var requestDescription = GetAttributeValue(action, "RequestDescription", true).ResolveMergeFields(mergeFields); if (string.IsNullOrWhiteSpace(requestDescription)) { var errorMessage = "Request description is required."; errorMessages.Add(errorMessage); action.AddLogEntry(errorMessage, true); return(false); } // get government id var governmentId = GetAttributeValue(action, "GovernmentId", true).ResolveMergeFields(mergeFields); // get campus int?campusId = CampusCache.Get(GetAttributeValue(action, "Campus").AsGuid())?.Id; // create benevolence request BenevolenceRequestService benevolenceRequestService = new BenevolenceRequestService(rockContext); BenevolenceRequest request = new BenevolenceRequest(); benevolenceRequestService.Add(request); request.RequestDateTime = RockDateTime.Now; request.RequestText = requestDescription; request.RequestedByPersonAliasId = requestPerson.PrimaryAliasId; request.FirstName = requestPerson.NickName; request.LastName = requestPerson.LastName; request.Email = requestPerson.Email; request.LocationId = requestPerson.GetHomeLocation()?.Id; request.GovernmentId = governmentId; if (campusId.HasValue) { request.CampusId = campusId.Value; } else { request.CampusId = requestPerson.GetCampus()?.Id; } var requestorPhoneNumbers = requestPerson.PhoneNumbers; if (requestorPhoneNumbers != null) { request.HomePhoneNumber = requestorPhoneNumbers.Where(p => p.NumberTypeValueId == homePhoneValueId).FirstOrDefault()?.NumberFormatted; request.CellPhoneNumber = requestorPhoneNumbers.Where(p => p.NumberTypeValueId == mobilePhoneValueId).FirstOrDefault()?.NumberFormatted; request.WorkPhoneNumber = requestorPhoneNumbers.Where(p => p.NumberTypeValueId == workPhoneValueId).FirstOrDefault()?.NumberFormatted; } if (caseWorker != null) { request.CaseWorkerPersonAliasId = caseWorker.PrimaryAliasId; } request.ConnectionStatusValueId = requestPerson.ConnectionStatusValueId; request.RequestStatusValueId = statusValue.Id; rockContext.SaveChanges(); SetWorkflowAttributeValue(action, "BenevolenceRequest", request.Guid); action.AddLogEntry($"Set 'Benevolence Request' attribute to '{request.Guid}'."); return(true); }