RequestProcessingAssignmentHandlers.cs 3.79 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Storage.RequestProcessingAssignment;

namespace DirRX.Storage
{
  partial class RequestProcessingAssignmentAccessUserPropertyFilteringServerHandler<T>
  {

    public virtual IQueryable<T> AccessUserFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
    {
      // Фильтровать пользователей из роли "Пользователи архива".
      var archiveUsers = Storage.PublicFunctions.Module.Remote.GetArchiveUsers();
      return query.Where(x => archiveUsers.Contains(x));
    }
  }

  partial class RequestProcessingAssignmentServerHandlers
  {

    public override void BeforeComplete(Sungero.Workflow.Server.BeforeCompleteEventArgs e)
    {
      // Проверить вложения и наличие тектса в зависимости от вида запроса и результата выполнения.
      if (_obj.Result.Value == Result.Complete)
      {
        var requestKind = _obj.RequestKind.Value;
        if (requestKind == RequestKind.Access)
        {
          // Папка с документами не должна быть пуста.
          var folder = _obj.AttachmentGroup.All.FirstOrDefault(x => Folders.Is(x));
          
          if (folder != null && !Folders.As(folder).Items.Any())
            e.AddError(RequestProcessingTasks.Resources.WarningAddRequestedDocuments);
        }
        else if (requestKind == RequestKind.Reference)
        {
          // Во вложениях должен быть документ с видом "Архивная справка".
          var externalLink = Sungero.Docflow.PublicFunctions.Module.GetExternalLink(Storage.PublicConstants.Module.Initialize.DocumentKindTypeGuid,
                                                                                    Storage.PublicConstants.Module.Initialize.ArchivalReferenceDocumentKind);
          var documentKind = Sungero.Docflow.DocumentKinds.GetAll(x => x.Id == externalLink.EntityId).FirstOrDefault();
          if (documentKind != null)
          {
            if (!_obj.AttachmentGroup.All.Any(x => Sungero.Docflow.SimpleDocuments.Is(x) && Sungero.Docflow.SimpleDocuments.As(x).DocumentKind.Equals(documentKind)))
              e.AddError(RequestProcessingTasks.Resources.WarningAddReference);
          }
          else
            Logger.Debug("Не найден вид документа Архивная справка.");
        }
        else if (requestKind == RequestKind.Extract)
        {
          // Во вложениях должен быть документ с видом "Архивная выписка".
          var externalLink = Sungero.Docflow.PublicFunctions.Module.GetExternalLink(Storage.PublicConstants.Module.Initialize.DocumentKindTypeGuid,
                                                                                    Storage.PublicConstants.Module.Initialize.ArchiveExtractDocumentKind);
          var documentKind = Sungero.Docflow.DocumentKinds.GetAll(x => x.Id == externalLink.EntityId).FirstOrDefault();
          if (documentKind != null)
          {
            if (!_obj.AttachmentGroup.All.Any(x => Sungero.Docflow.SimpleDocuments.Is(x) && Sungero.Docflow.SimpleDocuments.As(x).DocumentKind.Equals(documentKind)))
              e.AddError(RequestProcessingTasks.Resources.WarningAddExtract);
          }
          else
            Logger.Debug("Не найден вид документа Архивная выписка.");
        }
      }
      else if (string.IsNullOrEmpty(_obj.ActiveText) || _obj.ActiveText.Trim() == (_obj.Info.Properties.Result.GetLocalizedValue(_obj.Result.Value) + "."))
      {
        e.AddError(RequestProcessingTasks.Resources.WarningAddText);
      }

    }
  }

}