예제 #1
0
        /// <summary>
        /// Handles the Delete event of the gSignatureDocumentTemplate control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param>
        protected void gSignatureDocumentTemplate_Delete(object sender, RowEventArgs e)
        {
            var rockContext = new RockContext();
            var signatureDocumentService         = new SignatureDocumentService(rockContext);
            var signatureDocumentTemplateService = new SignatureDocumentTemplateService(rockContext);

            SignatureDocumentTemplate type = signatureDocumentTemplateService.Get(e.RowKeyId);

            if (type != null)
            {
                if (!UserCanEdit && !type.IsAuthorized(Authorization.EDIT, CurrentPerson))
                {
                    mdGridWarning.Show("Sorry, you're not authorized to delete this signature document template.", ModalAlertType.Alert);
                    return;
                }

                string errorMessage;
                if (!signatureDocumentTemplateService.CanDelete(type, out errorMessage))
                {
                    mdGridWarning.Show(errorMessage, ModalAlertType.Information);
                    return;
                }

                signatureDocumentTemplateService.Delete(type);

                rockContext.SaveChanges();
            }

            BindGrid();
        }
예제 #2
0
        /// <summary>
        /// Handles the Click event of the btnDelete control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            RockContext rockContext = new RockContext();
            SignatureDocumentTemplateService signatureDocumentTemplateService = new SignatureDocumentTemplateService(rockContext);
            SignatureDocumentTemplate        signatureDocumentTemplate        = signatureDocumentTemplateService.Get(int.Parse(hfSignatureDocumentTemplateId.Value));

            if (signatureDocumentTemplate != null)
            {
                if (!signatureDocumentTemplate.IsAuthorized(Authorization.EDIT, this.CurrentPerson))
                {
                    mdDeleteWarning.Show("Sorry, You are not authorized to delete this document template.", ModalAlertType.Information);
                    return;
                }

                string errorMessage;
                if (!signatureDocumentTemplateService.CanDelete(signatureDocumentTemplate, out errorMessage))
                {
                    mdDeleteWarning.Show(errorMessage, ModalAlertType.Information);
                    return;
                }

                signatureDocumentTemplateService.Delete(signatureDocumentTemplate);

                rockContext.SaveChanges();
            }

            NavigateToParentPage();
        }
        /// <summary>
        /// Execute method to write transaction to the database.
        /// </summary>
        public void Execute()
        {
            using (var rockContext = new RockContext())
            {
                var documentService    = new SignatureDocumentService(rockContext);
                var personAliasService = new PersonAliasService(rockContext);
                var appliesPerson      = personAliasService.GetPerson(AppliesToPersonAliasId);
                var assignedPerson     = personAliasService.GetPerson(AssignedToPersonAliasId);

                if (!documentService.Queryable().Any(d =>
                                                     d.SignatureDocumentTemplateId == SignatureDocumentTemplateId &&
                                                     d.AppliesToPersonAliasId.HasValue &&
                                                     d.AppliesToPersonAliasId.Value == AppliesToPersonAliasId &&
                                                     d.Status == SignatureDocumentStatus.Signed))
                {
                    var documentTypeService       = new SignatureDocumentTemplateService(rockContext);
                    var SignatureDocumentTemplate = documentTypeService.Get(SignatureDocumentTemplateId);

                    var errorMessages = new List <string>();
                    if (documentTypeService.SendDocument(SignatureDocumentTemplate, appliesPerson, assignedPerson, DocumentName, Email, out errorMessages))
                    {
                        rockContext.SaveChanges();
                    }
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Handles the Click event of the btnEdit control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
        protected void btnEdit_Click(object sender, EventArgs e)
        {
            SignatureDocumentTemplateService signatureDocumentTemplateService = new SignatureDocumentTemplateService(new RockContext());
            SignatureDocumentTemplate        SignatureDocumentTemplate        = signatureDocumentTemplateService.Get(hfSignatureDocumentTemplateId.ValueAsInt());

            ShowEditDetails(SignatureDocumentTemplate);
        }
        /// <summary>
        /// Execute method to write transaction to the database.
        /// </summary>
        public void Execute()
        {
            using (var rockContext = new RockContext())
            {
                var docTypeService = new SignatureDocumentTemplateService(rockContext);
                var docService     = new SignatureDocumentService(rockContext);

                var document = docService.Get(SignatureDocumentId);
                if (document != null)
                {
                    var    status              = document.Status;
                    int?   binaryFileId        = document.BinaryFileId;
                    string folderPath          = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/Cache/SignNow");
                    var    updateErrorMessages = new List <string>();

                    if (docTypeService.UpdateDocumentStatus(document, folderPath, out updateErrorMessages))
                    {
                        if (status != document.Status || !binaryFileId.Equals(document.BinaryFileId))
                        {
                            rockContext.SaveChanges();
                        }
                    }
                }
            }
        }
예제 #6
0
        private void BindSttingControlls()
        {
            dpEndDate.Text = GetBlockUserPreference("dpEndDate");

            RockContext rockContext = new RockContext();
            SignatureDocumentTemplateService signatureDocumentTemplateService = new SignatureDocumentTemplateService(rockContext);

            var templates = signatureDocumentTemplateService.Queryable().ToList();

            cblMinorDocuments.DataSource = templates;
            cblAdultDocuments.DataSource = templates;
            cblMinorDocuments.DataBind();
            cblAdultDocuments.DataBind();

            var minorValues = GetBlockUserPreference("cblMinorDocuments");

            if (minorValues.IsNotNullOrWhiteSpace())
            {
                cblMinorDocuments.SetValues(minorValues.Split(','));
            }

            var adultValues = GetBlockUserPreference("cblAdultDocuments");

            if (adultValues.IsNotNullOrWhiteSpace())
            {
                cblAdultDocuments.SetValues(adultValues.Split(','));
            }

            gpGroup.SetValue(GetBlockUserPreference("gpGroup").AsInteger());
        }
예제 #7
0
        /// <summary>
        /// Binds the grid for signature document templates.
        /// </summary>
        private void BindGrid()
        {
            var queryable = new SignatureDocumentTemplateService(new RockContext()).Queryable();

            SortProperty sortProperty = gSignatureDocumentTemplate.SortProperty;

            if (sortProperty != null)
            {
                if (sortProperty.Property == "Documents")
                {
                    if (sortProperty.Direction == SortDirection.Ascending)
                    {
                        queryable = queryable.OrderBy(a => a.Documents.Count());
                    }
                    else
                    {
                        queryable = queryable.OrderByDescending(a => a.Documents.Count());
                    }
                }
                queryable = queryable.Sort(sortProperty);
            }
            else
            {
                queryable = queryable.OrderBy(a => a.Name);
            }

            var types = new List <SignatureDocumentTemplate>();

            foreach (var type in queryable)
            {
                if (type.IsAuthorized(Authorization.VIEW, CurrentPerson))
                {
                    types.Add(type);
                }
            }

            gSignatureDocumentTemplate.DataSource = types
                                                    .Select(a =>
                                                            new
            {
                a.Id,
                a.Name,
                a.Description,
                BinaryFileType = a.BinaryFileType.Name,
                a.ProviderTemplateKey,
                Documents = a.Documents.Count()
            })
                                                    .ToList();
            gSignatureDocumentTemplate.DataBind();
        }
예제 #8
0
 /// <summary>
 /// Handles the Click event of the btnCancelType control.
 /// </summary>
 /// <param name="sender">The source of the event.</param>
 /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
 protected void btnCancelType_Click(object sender, EventArgs e)
 {
     if (hfSignatureDocumentTemplateId.IsZero())
     {
         // Cancelling on Add.  Return to Grid
         NavigateToParentPage();
     }
     else
     {
         // Cancelling on Edit.  Return to Details
         SignatureDocumentTemplateService signatureDocumentTemplateService = new SignatureDocumentTemplateService(new RockContext());
         SignatureDocumentTemplate        signatureDocumentTemplate        = signatureDocumentTemplateService.Get(hfSignatureDocumentTemplateId.ValueAsInt());
         ShowReadonlyDetails(signatureDocumentTemplate);
     }
 }
예제 #9
0
        /// <summary>
        /// Handles the Click event of the btnSaveType control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
        protected void btnSaveType_Click(object sender, EventArgs e)
        {
            var rockContext = new RockContext();

            SignatureDocumentTemplate        signatureDocumentTemplate = null;
            SignatureDocumentTemplateService typeService = new SignatureDocumentTemplateService(rockContext);

            int SignatureDocumentTemplateId = hfSignatureDocumentTemplateId.ValueAsInt();

            if (SignatureDocumentTemplateId == 0)
            {
                signatureDocumentTemplate = new SignatureDocumentTemplate();
                typeService.Add(signatureDocumentTemplate);
            }
            else
            {
                signatureDocumentTemplate = typeService.Get(SignatureDocumentTemplateId);
            }

            signatureDocumentTemplate.Name                 = tbTypeName.Text;
            signatureDocumentTemplate.Description          = tbTypeDescription.Text;
            signatureDocumentTemplate.BinaryFileTypeId     = bftpFileType.SelectedValueAsInt();
            signatureDocumentTemplate.ProviderEntityTypeId = cpProvider.SelectedEntityTypeId;
            signatureDocumentTemplate.ProviderTemplateKey  = ddlTemplate.SelectedValue;
            signatureDocumentTemplate.InviteSystemEmailId  = ddlSystemEmail.SelectedValueAsInt();

            if (!signatureDocumentTemplate.IsValid)
            {
                // Controls will render the error messages
                return;
            }

            rockContext.SaveChanges();

            var qryParams = new Dictionary <string, string>();

            qryParams["SignatureDocumentTemplateId"] = signatureDocumentTemplate.Id.ToString();
            NavigateToCurrentPage(qryParams);
        }
예제 #10
0
        /// <summary>
        /// Shows the detail.
        /// </summary>
        /// <param name="signatureDocumentTemplateId">The signature document type identifier.</param>
        public void ShowDetail(int signatureDocumentTemplateId)
        {
            pnlDetails.Visible = true;
            SignatureDocumentTemplate signatureDocumentTemplate = null;

            using (var rockContext = new RockContext())
            {
                if (!signatureDocumentTemplateId.Equals(0))
                {
                    signatureDocumentTemplate = new SignatureDocumentTemplateService(rockContext).Get(signatureDocumentTemplateId);
                }

                if (signatureDocumentTemplate == null)
                {
                    signatureDocumentTemplate = new SignatureDocumentTemplate {
                        Id = 0
                    };
                    var components = DigitalSignatureContainer.Instance.Components;
                    var entityType = components.Where(c => c.Value.Value.IsActive).OrderBy(c => c.Value.Value.Order).Select(c => c.Value.Value.EntityType).FirstOrDefault();
                    if (entityType != null)
                    {
                        signatureDocumentTemplate.ProviderEntityType = new EntityTypeService(rockContext).Get(entityType.Id);
                    }

                    Guid?fileTypeGuid = GetAttributeValue("DefaultFileType").AsGuidOrNull();
                    if (fileTypeGuid.HasValue)
                    {
                        var binaryFileType = new BinaryFileTypeService(rockContext).Get(fileTypeGuid.Value);
                        if (binaryFileType != null)
                        {
                            signatureDocumentTemplate.BinaryFileType   = binaryFileType;
                            signatureDocumentTemplate.BinaryFileTypeId = binaryFileType.Id;
                        }
                    }

                    Guid?inviteEmailGuid = GetAttributeValue("DefaultInviteEmail").AsGuidOrNull();
                    if (inviteEmailGuid.HasValue)
                    {
                        var systemEmail = new SystemEmailService(rockContext).Get(inviteEmailGuid.Value);
                        if (systemEmail != null)
                        {
                            signatureDocumentTemplate.InviteSystemEmail   = systemEmail;
                            signatureDocumentTemplate.InviteSystemEmailId = systemEmail.Id;
                        }
                    }
                }

                hfSignatureDocumentTemplateId.SetValue(signatureDocumentTemplate.Id);


                // render UI based on Authorized and IsSystem
                bool readOnly = false;

                nbEditModeMessage.Text = string.Empty;
                bool canEdit = UserCanEdit || signatureDocumentTemplate.IsAuthorized(Authorization.EDIT, CurrentPerson);
                bool canView = canEdit || signatureDocumentTemplate.IsAuthorized(Authorization.VIEW, CurrentPerson);

                if (!canView)
                {
                    pnlDetails.Visible = false;
                }
                else
                {
                    pnlDetails.Visible = true;

                    if (!canEdit)
                    {
                        readOnly = true;
                        nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(SignatureDocumentTemplate.FriendlyTypeName);
                    }

                    if (readOnly)
                    {
                        btnEdit.Visible   = false;
                        btnDelete.Visible = false;
                        ShowReadonlyDetails(signatureDocumentTemplate);
                    }
                    else
                    {
                        btnEdit.Visible   = true;
                        btnDelete.Visible = false;
                        if (signatureDocumentTemplate.Id > 0)
                        {
                            ShowReadonlyDetails(signatureDocumentTemplate);
                        }
                        else
                        {
                            ShowEditDetails(signatureDocumentTemplate);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Called by the <see cref="IScheduler" /> when a <see cref="ITrigger" />
        /// fires that is associated with the <see cref="IJob" />.
        /// </summary>
        /// <param name="context">The execution context.</param>
        /// <remarks>
        /// The implementation may wish to set a  result object on the
        /// JobExecutionContext before this method exits.  The result itself
        /// is meaningless to Quartz, but may be informative to
        /// <see cref="IJobListener" />s or
        /// <see cref="ITriggerListener" />s that are watching the job's
        /// execution.
        /// </remarks>
        public virtual void Execute(IJobExecutionContext context)
        {
            JobDataMap dataMap    = context.JobDetail.JobDataMap;
            int        resendDays = dataMap.GetString("ResendInviteAfterNumberDays").AsIntegerOrNull() ?? 5;
            int        maxInvites = dataMap.GetString("MaxInvites").AsIntegerOrNull() ?? 2;
            int        checkDays  = dataMap.GetString("CheckForSignatureDays").AsIntegerOrNull() ?? 30;
            string     folderPath = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/Cache/SignNow");

            var errorMessages         = new List <string>();
            int signatureRequestsSent = 0;
            int documentsUpdated      = 0;

            // Send documents
            using (var rockContext = new RockContext())
            {
                var maxInviteDate  = RockDateTime.Today.AddDays(0 - resendDays);
                var maxCheckDays   = RockDateTime.Today.AddDays(0 - checkDays);
                var docTypeService = new SignatureDocumentTemplateService(rockContext);
                var docService     = new SignatureDocumentService(rockContext);

                // Check for status updates
                foreach (var document in new SignatureDocumentService(rockContext).Queryable()
                         .Where(d =>
                                (
                                    d.Status == SignatureDocumentStatus.Sent ||
                                    (d.Status == SignatureDocumentStatus.Signed && !d.BinaryFileId.HasValue)
                                ) &&
                                d.LastInviteDate.HasValue &&
                                d.LastInviteDate.Value > maxCheckDays)
                         .ToList())
                {
                    var updateErrorMessages = new List <string>();
                    var status       = document.Status;
                    int?binaryFileId = document.BinaryFileId;
                    if (docTypeService.UpdateDocumentStatus(document, folderPath, out updateErrorMessages))
                    {
                        if (status != document.Status || !binaryFileId.Equals(document.BinaryFileId))
                        {
                            rockContext.SaveChanges();
                            documentsUpdated++;
                        }
                    }
                    else
                    {
                        errorMessages.AddRange(updateErrorMessages);
                    }
                }

                // Send any needed signature requests
                var docsSent = new Dictionary <int, List <int> >();
                foreach (var gm in new GroupMemberService(rockContext).Queryable()
                         .Where(m =>
                                m.GroupMemberStatus == GroupMemberStatus.Active &&
                                m.Group.IsActive && !m.Group.IsArchived &&
                                m.Person.Email != null &&
                                m.Person.Email != "" &&
                                m.Group.RequiredSignatureDocumentTemplate != null &&
                                !m.Group.RequiredSignatureDocumentTemplate.Documents.Any(d =>
                                                                                         d.AppliesToPersonAlias.PersonId == m.PersonId &&
                                                                                         d.Status == SignatureDocumentStatus.Signed
                                                                                         )
                                )
                         .Select(m => new
                {
                    GroupName = m.Group.Name,
                    Person = m.Person,
                    DocumentType = m.Group.RequiredSignatureDocumentTemplate
                })
                         .ToList())
                {
                    if (docsSent.ContainsKey(gm.Person.Id))
                    {
                        if (docsSent[gm.Person.Id].Contains(gm.DocumentType.Id))
                        {
                            continue;
                        }
                        else
                        {
                            docsSent[gm.Person.Id].Add(gm.DocumentType.Id);
                        }
                    }
                    else
                    {
                        docsSent.Add(gm.Person.Id, new List <int> {
                            gm.DocumentType.Id
                        });
                    }

                    var document = docService.Queryable()
                                   .Where(d =>
                                          d.SignatureDocumentTemplateId == gm.DocumentType.Id &&
                                          d.AppliesToPersonAlias.PersonId == gm.Person.Id &&
                                          d.AssignedToPersonAlias.PersonId == gm.Person.Id &&
                                          d.Status != SignatureDocumentStatus.Signed
                                          )
                                   .OrderByDescending(d => d.CreatedDateTime)
                                   .FirstOrDefault();

                    if (document == null || (document.InviteCount < maxInvites && document.LastInviteDate < maxInviteDate))
                    {
                        string documentName = string.Format("{0}_{1}", gm.GroupName.RemoveSpecialCharacters(), gm.Person.FullName.RemoveSpecialCharacters());

                        var sendErrorMessages = new List <string>();
                        if (document != null)
                        {
                            docTypeService.SendDocument(document, gm.Person.Email, out sendErrorMessages);
                        }
                        else
                        {
                            docTypeService.SendDocument(gm.DocumentType, gm.Person, gm.Person, documentName, gm.Person.Email, out sendErrorMessages);
                        }

                        if (!errorMessages.Any())
                        {
                            rockContext.SaveChanges();
                            signatureRequestsSent++;
                        }
                        else
                        {
                            errorMessages.AddRange(sendErrorMessages);
                        }
                    }
                }
            }

            if (errorMessages.Any())
            {
                throw new Exception("One or more exceptions occurred processing signature documents..." + Environment.NewLine + errorMessages.AsDelimited(Environment.NewLine));
            }

            context.Result = string.Format("{0} signature requests sent; {1} existing document's status updated", signatureRequestsSent, documentsUpdated);
        }
예제 #12
0
        /// <summary>
        /// Shows the detail.
        /// </summary>
        /// <param name="signatureDocumentId">The signature document type identifier.</param>
        public void ShowDetail(int signatureDocumentId)
        {
            pnlDetails.Visible = true;
            SignatureDocument signatureDocument = null;

            using (var rockContext = new RockContext())
            {
                if (!signatureDocumentId.Equals(0))
                {
                    signatureDocument = new SignatureDocumentService(rockContext).Get(signatureDocumentId);
                }

                if (signatureDocument == null)
                {
                    signatureDocument = new SignatureDocument {
                        Id = 0
                    };

                    int?personId = PageParameter("personId").AsIntegerOrNull();
                    if (personId.HasValue)
                    {
                        var person = new PersonService(rockContext).Get(personId.Value);
                        if (person != null)
                        {
                            var personAlias = person.PrimaryAlias;
                            if (personAlias != null)
                            {
                                signatureDocument.AppliesToPersonAlias    = personAlias;
                                signatureDocument.AppliesToPersonAliasId  = personAlias.Id;
                                signatureDocument.AssignedToPersonAlias   = personAlias;
                                signatureDocument.AssignedToPersonAliasId = personAlias.Id;
                            }
                        }
                    }

                    int?documentTypeId = PageParameter("SignatureDocumentTemplateId").AsIntegerOrNull();
                    if (documentTypeId.HasValue)
                    {
                        var documentType = new SignatureDocumentTemplateService(rockContext).Get(documentTypeId.Value);
                        if (documentType != null)
                        {
                            signatureDocument.SignatureDocumentTemplate   = documentType;
                            signatureDocument.SignatureDocumentTemplateId = documentType.Id;
                        }
                    }
                }

                hfSignatureDocumentId.SetValue(signatureDocument.Id);

                // render UI based on Authorized and IsSystem
                bool readOnly = false;

                nbEditModeMessage.Text = string.Empty;
                bool canEdit = UserCanEdit || signatureDocument.IsAuthorized(Authorization.EDIT, CurrentPerson);
                bool canView = canEdit || signatureDocument.IsAuthorized(Authorization.VIEW, CurrentPerson);

                if (!canView)
                {
                    pnlDetails.Visible = false;
                }
                else
                {
                    pnlDetails.Visible = true;

                    if (!canEdit)
                    {
                        readOnly = true;
                        nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(SignatureDocument.FriendlyTypeName);
                    }

                    if (readOnly)
                    {
                        ShowReadonlyDetails(signatureDocument);
                    }
                    else
                    {
                        ShowEditDetails(signatureDocument, false);
                    }
                }
            }
        }
예제 #13
0
        /// <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);
            }
        }