Exemplo n.º 1
0
        private static void AddExternalSignatureInfoToBlock(StateBlock signingBlock, Sungero.Domain.Shared.ISignature signature, int?versionNumber, IOfficialDocument document)
        {
            var subject       = Docflow.PublicFunctions.Module.GetSignatureCertificate(signature.GetDataSignature()).SubjectName.Format(true);
            var parsedSubject = ParseSignatureSubject(subject);

            signingBlock.AddLabel(ApprovalReviewAssignments.Resources.SignatureBlockFormat(parsedSubject.JobTitle,
                                                                                           Docflow.Server.ModuleFunctions.GetCertificateOwnerShortName(parsedSubject),
                                                                                           parsedSubject.OrganizationName,
                                                                                           parsedSubject.TIN),
                                  Functions.Module.CreateHeaderStyle());
            signingBlock.AddLineBreak();
            signingBlock.AddLabel(Constants.Module.SeparatorText, Docflow.PublicFunctions.Module.CreateSeparatorStyle());
            signingBlock.AddLineBreak();

            var exchangeServiceName = GetOriginalExchangeServiceNameByDocument(document);

            signingBlock.AddLabel(ApprovalReviewAssignments.Resources.DocumentSignedByCounterpartyIsExchangeServiceNoteFormat(exchangeServiceName),
                                  Docflow.PublicFunctions.Module.CreateNoteStyle());

            var number      = versionNumber.HasValue ? versionNumber.Value.ToString() : string.Empty;
            var numberLabel = string.Format("{0} {1}", ApprovalReviewAssignments.Resources.StateViewVersion, number);

            Functions.Module.AddInfoToRightContent(signingBlock, numberLabel, Docflow.PublicFunctions.Module.CreateNoteStyle());

            // Добавить информацию о валидности подписи.
            AddValidationInfoToBlock(signingBlock, signature);

            // Установить иконку.
            signingBlock.AssignIcon(Docflow.ApprovalReviewAssignments.Resources.ExternalSignatureIcon, StateBlockIconSize.Small);

            signingBlock.DockType = DockType.Bottom;
        }
Exemplo n.º 2
0
 private static void SetIconToBlock(StateBlock signingBlock, Sungero.Domain.Shared.ISignature signature)
 {
     if (signature.IsValid)
     {
         if (signature.SignatureType == Core.SignatureType.Approval)
         {
             signingBlock.AssignIcon(ApprovalTasks.Resources.Sign, StateBlockIconSize.Small);
         }
         else
         {
             signingBlock.AssignIcon(ApprovalTasks.Resources.Approve, StateBlockIconSize.Small);
         }
     }
     else
     {
         if (signature.ValidationErrors.Any(e => e.ErrorType == Sungero.Domain.Shared.SignatureValidationErrorType.Signature))
         {
             signingBlock.AssignIcon(ApprovalReviewAssignments.Resources.SignatureAttributeChanged, StateBlockIconSize.Small);
         }
         else
         {
             signingBlock.AssignIcon(ApprovalReviewAssignments.Resources.SignedDataChanged, StateBlockIconSize.Small);
         }
     }
 }
Exemplo n.º 3
0
        private static void AddSignatureInfoToBlock(StateBlock signingBlock, Sungero.Domain.Shared.ISignature signature, int?versionNumber)
        {
            // Добавить подписавшего.
            var signatory = Sungero.Company.Employees.As(signature.Signatory);

            if (signatory != null)
            {
                signingBlock.AddLabel(string.Format("{0} {1}", signatory.JobTitle, Company.PublicFunctions.Employee.GetShortName(signatory, false)), Functions.Module.CreateHeaderStyle());
            }
            else
            {
                signingBlock.AddLabel(signature.Signatory.Name, Functions.Module.CreateHeaderStyle());
            }

            // Добавить дату подписания.
            var signDate = signature.SigningDate.FromUtcTime().ToUserTime();

            signingBlock.AddLabel(string.Format("{0}: {1}",
                                                OfficialDocuments.Resources.StateViewDate.ToString(),
                                                Functions.Module.ToShortDateShortTime(signDate)),
                                  Functions.Module.CreatePerformerDeadlineStyle());

            // Добавить замещаемого.
            var substitutedUser = GetSubstitutedEmployee(signature);

            if (!string.IsNullOrEmpty(substitutedUser))
            {
                signingBlock.AddLineBreak();
                signingBlock.AddLabel(substitutedUser);
            }

            // Добавить комментарий пользователя.
            var comment = GetSignatureComment(signature);

            if (!string.IsNullOrEmpty(comment))
            {
                signingBlock.AddLineBreak();
                signingBlock.AddLabel(Constants.Module.SeparatorText, Docflow.PublicFunctions.Module.CreateSeparatorStyle());
                signingBlock.AddLineBreak();

                var commentStyle = Functions.Module.CreateNoteStyle();
                signingBlock.AddLabel(comment, commentStyle);
            }

            // Добавить номер версии документа.
            var number      = versionNumber.HasValue ? versionNumber.Value.ToString() : string.Empty;
            var numberLabel = string.Format("{0} {1}", ApprovalReviewAssignments.Resources.StateViewVersion, number);

            Functions.Module.AddInfoToRightContent(signingBlock, numberLabel, Docflow.PublicFunctions.Module.CreateNoteStyle());

            // Добавить информацию о валидности подписи.
            AddValidationInfoToBlock(signingBlock, signature);

            // Установить иконку.
            SetIconToBlock(signingBlock, signature);
        }
Exemplo n.º 4
0
        private static void AddValidationInfoToBlock(StateBlock block, Sungero.Domain.Shared.ISignature signature)
        {
            var redTextStyle   = Functions.Module.CreateStyle(Sungero.Core.Colors.Common.Red);
            var greenTextStyle = Functions.Module.CreateStyle(Sungero.Core.Colors.Common.Green);
            var separator      = ". ";

            var errorValidationText = string.Empty;
            var validationInfo      = GetValidationInfo(signature);

            if (validationInfo.IsInvalidCertificate)
            {
                errorValidationText += ApprovalReviewAssignments.Resources.StateViewCertificateIsNotValid + separator;
            }

            if (validationInfo.IsInvalidData)
            {
                errorValidationText += ApprovalReviewAssignments.Resources.StateViewDocumentIsChanged + separator;
            }

            if (validationInfo.IsInvalidAttributes)
            {
                errorValidationText += ApprovalReviewAssignments.Resources.StateViewSignatureAttributesNotValid + separator;
            }

            // Если нет ошибок - выйти.
            if (string.IsNullOrWhiteSpace(errorValidationText))
            {
                return;
            }

            block.AddLineBreak();
            block.AddLabel(errorValidationText, redTextStyle);

            // Для подписи с невалидными атрибутами добавить информацию, что тело небыло изменено.
            if (validationInfo.IsInvalidAttributes && !validationInfo.IsInvalidData)
            {
                var trueValidationText = ApprovalReviewAssignments.Resources.StateViewDocumentIsValid + separator;
                block.AddLabel(trueValidationText, greenTextStyle);
            }
        }
Exemplo n.º 5
0
        private static string GetSignatureComment(Sungero.Domain.Shared.ISignature signature)
        {
            if (string.IsNullOrEmpty(signature.Comment))
            {
                return(string.Empty);
            }

            var comment = signature.Comment;

            // Взять первые 2 строки комментария.
            // TODO Убрать укорачивание комментария после исправления 33192, 33195, 33196. Или укорачивать по-другому.
            var linesCount = comment.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Length;

            if (linesCount > 2)
            {
                var strings = comment.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                comment  = string.Join(Environment.NewLine, strings, 0, 2);
                comment += "…";
            }

            return(comment);
        }
Exemplo n.º 6
0
        private static string GetSubstitutedEmployee(Sungero.Domain.Shared.ISignature signature)
        {
            var substituted = Sungero.Company.Employees.As(signature.SubstitutedUser);

            if (substituted == null)
            {
                return(string.Empty);
            }

            var jobTitle = Company.PublicFunctions.Employee.GetJobTitle(substituted, DeclensionCase.Accusative);

            // TODO: 35010.
            if (System.Threading.Thread.CurrentThread.CurrentUICulture.Equals(System.Globalization.CultureInfo.CreateSpecificCulture("ru-RU")))
            {
                jobTitle = jobTitle.ToLower();
            }

            jobTitle = string.IsNullOrEmpty(jobTitle) ? jobTitle : string.Format("{0} ", jobTitle);

            return(string.Format("{0} {1}{2}",
                                 ApprovalReviewAssignments.Resources.StateViewSubstitutedUser,
                                 jobTitle,
                                 Company.PublicFunctions.Employee.GetShortName(substituted, DeclensionCase.Accusative, false)));
        }
Exemplo n.º 7
0
        /// <summary>
        /// Получить ошибки валидации подписи.
        /// </summary>
        /// <param name="signature">Электронная подпись.</param>
        /// <returns>Ошибки валидации подписи.</returns>
        public static Structures.ApprovalTask.SignatureValidationErrors GetValidationInfo(Sungero.Domain.Shared.ISignature signature)
        {
            var validationErrors = Structures.ApprovalTask.SignatureValidationErrors.Create(false, false, false);

            if (signature.IsValid)
            {
                return(validationErrors);
            }

            // Проверить, действителен ли сертификат.
            validationErrors.IsInvalidCertificate = signature.ValidationErrors.Any(e => e.ErrorType == Sungero.Domain.Shared.SignatureValidationErrorType.Certificate);

            // Проверить, были ли изменены подписываемые данные.
            validationErrors.IsInvalidData = signature.ValidationErrors.Any(e => e.ErrorType == Sungero.Domain.Shared.SignatureValidationErrorType.Data);

            // Проверить, были ли изменены атрибуты подписи.
            validationErrors.IsInvalidAttributes = signature.ValidationErrors.Any(e => e.ErrorType == Sungero.Domain.Shared.SignatureValidationErrorType.Signature);

            return(validationErrors);
        }