RequestProcessingAssignmentServerFunctions.cs 2.71 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Storage.RequestProcessingAssignment;
using Newtonsoft.Json.Linq;

namespace DirRX.Storage.Server
{
  partial class RequestProcessingAssignmentFunctions
  {
    /// <summary>
    /// Сформировать результаты выполнения запроса.
    /// </summary>
    /// <returns>Результаты выполнения запроса в виде json-строки.</returns>
    public virtual string GetRequestResults()
    {
      var json = new JObject();
      
      if (_obj.Result.HasValue)
      {
        var attachments = RequestProcessingTasks.As(_obj.Task).AttachmentGroup.All;
          
        // -----------------------------------------------------------------
        // Обработка результата "Выполнено".
        // -----------------------------------------------------------------
        if (_obj.Result == Storage.RequestProcessingAssignment.Result.Complete)
        {
          json.Add("Status", "Complete");

          // Добавить ссылку на папку, логин пользователя, сроки доступа.
          if (_obj.RequestKind == Storage.RequestProcessingAssignment.RequestKind.Access)
          {
            var folder = attachments.FirstOrDefault();
            
            if (folder != null)
            {
              json.Add("Url", Hyperlinks.Get(folder));
              
              if (_obj.AccessUser != null)
              {
                json.Add("UserLogin", _obj.AccessUser.Login.ToString());
                
                if (_obj.AccessTermFrom.HasValue)
                  json.Add("AccessTermFrom", _obj.AccessTermFrom.ToString());

                if (_obj.AccessTermTo.HasValue)
                  json.Add("AccessTermTo", _obj.AccessTermTo.ToString());                
              }
            }
          }
        }
        else if (_obj.Result == Storage.RequestProcessingAssignment.Result.Reject)
        {
          json.Add("Status", "Rejected");
        }
        
        var message = Storage.RequestProcessingAssignments.Info.Properties.Result.GetLocalizedValue(_obj.Result.Value);
        json.Add("Message", message);
        
        if (!message.EndsWith("."))
          message += ".";
        
        if (!string.IsNullOrEmpty(_obj.ActiveText) && _obj.ActiveText != message)
          json.Add("Note", _obj.ActiveText);
      }
      else
      {
        json.Add("Status", "Error");
        json.Add("Message", "Результат неопределен"); // для отладки, сюда попадать не должны
      }
      
      return json.ToString();
    }
  }
}