Rock.Model.SignatureDocumentTemplateService.SendDocument C# (CSharp) Method

SendDocument() private method

Sends the document.
private SendDocument ( SignatureDocument document, SignatureDocumentTemplate signatureDocumentTemplate, Person appliesToPerson, Person assignedToPerson, string documentName, string alternateEmail, List &errorMessages ) : bool
document SignatureDocument The document.
signatureDocumentTemplate SignatureDocumentTemplate Type of the signature document.
appliesToPerson Person The person.
assignedToPerson Person The assigned to person.
documentName string Name of the document.
alternateEmail string The alternate email.
errorMessages List The error messages.
return bool
        private bool SendDocument( SignatureDocument document, SignatureDocumentTemplate signatureDocumentTemplate, Person appliesToPerson, Person assignedToPerson, string documentName, string alternateEmail, out List<string> errorMessages )
        {
            errorMessages = new List<string>();

            // If document was passed and other values were not, set them from the document
            if ( document != null )
            {
                signatureDocumentTemplate = signatureDocumentTemplate ?? document.SignatureDocumentTemplate;
                if ( document.AppliesToPersonAlias != null && document.AppliesToPersonAlias.Person != null )
                {
                    appliesToPerson = appliesToPerson ?? document.AppliesToPersonAlias.Person;
                }
                if ( document.AssignedToPersonAlias != null && document.AssignedToPersonAlias.Person != null )
                {
                    assignedToPerson = assignedToPerson ?? document.AppliesToPersonAlias.Person;
                    alternateEmail = !string.IsNullOrWhiteSpace( alternateEmail ) ? alternateEmail : document.AppliesToPersonAlias.Person.Email;
                }

                documentName = !string.IsNullOrWhiteSpace( documentName ) ? documentName : document.Name;
            }

            if ( signatureDocumentTemplate == null )
            {
                errorMessages.Add( "Invalid Document Type." );
            }

            if ( appliesToPerson == null )
            {
                errorMessages.Add( "Invalid Applies To Person." );
            }

            if ( assignedToPerson == null )
            {
                errorMessages.Add( "Invalid Assigned To Person." );
            }

            if ( !errorMessages.Any() )
            {
                var provider = DigitalSignatureContainer.GetComponent( signatureDocumentTemplate.ProviderEntityType.Name );
                if ( provider == null || !provider.IsActive )
                {
                    errorMessages.Add( "Digital Signature provider was not found or is not active." );
                }
                else
                {
                    string email = string.IsNullOrWhiteSpace( alternateEmail ) ? assignedToPerson.Email : alternateEmail;
                    if ( string.IsNullOrWhiteSpace( email ) )
                    {
                        errorMessages.Add( string.Format( "There is no email address for {0}.", assignedToPerson.FullName ) );
                    }
                    else
                    {
                        var sendErrors = new List<string>();

                        var rockContext = this.Context as RockContext;
                        var documentService = new SignatureDocumentService( rockContext );

                        if ( document == null )
                        {
                            document = documentService.Queryable()
                                .Where( d =>
                                    d.SignatureDocumentTemplateId == signatureDocumentTemplate.Id &&
                                    d.AppliesToPersonAlias.PersonId == appliesToPerson.Id &&
                                    d.AssignedToPersonAlias.PersonId == assignedToPerson.Id &&
                                    d.Status != SignatureDocumentStatus.Signed )
                                .OrderByDescending( d => d.CreatedDateTime )
                                .FirstOrDefault();
                        }

                        string documentKey = string.Empty;
                        if ( document == null || string.IsNullOrWhiteSpace( documentKey ) )
                        {
                            documentKey = provider.CreateDocument( signatureDocumentTemplate, appliesToPerson, assignedToPerson, documentName, out sendErrors, true );
                        }
                        else
                        {
                            documentKey = document.DocumentKey;
                            provider.ResendDocument( document, out sendErrors );
                        }

                        if ( document == null )
                        {
                            document = new SignatureDocument();
                            document.SignatureDocumentTemplate = signatureDocumentTemplate;
                            document.SignatureDocumentTemplateId = signatureDocumentTemplate.Id;
                            document.Name = documentName;
                            document.AppliesToPersonAliasId = appliesToPerson.PrimaryAliasId;
                            document.AssignedToPersonAliasId = assignedToPerson.PrimaryAliasId;
                            documentService.Add( document );
                        }

                        if ( !sendErrors.Any() )
                        {
                            document.DocumentKey = documentKey;
                            document.LastInviteDate = RockDateTime.Now;
                            document.InviteCount = document.InviteCount + 1;
                            if ( document.Status != SignatureDocumentStatus.Sent )
                            {
                                document.LastStatusDate = document.LastInviteDate;
                            }
                            document.Status = SignatureDocumentStatus.Sent;

                            return true;
                        }
                        else
                        {
                            errorMessages.AddRange( sendErrors );
                        }
                    }
                }
            }

            return false;
        }

Same methods

SignatureDocumentTemplateService::SendDocument ( SignatureDocument document, string alternateEmail, List &errorMessages ) : bool
SignatureDocumentTemplateService::SendDocument ( SignatureDocumentTemplate signatureDocumentTemplate, Person appliesToPerson, Person assignedToPerson, string documentName, string alternateEmail, List &errorMessages ) : bool

Usage Example

Ejemplo n.º 1
0
        /// <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.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 );
        }
All Usage Examples Of Rock.Model.SignatureDocumentTemplateService::SendDocument