RequestProcessingTaskHandlers.cs 3.9 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Storage.RequestProcessingTask;
using Newtonsoft.Json.Linq;

namespace DirRX.Storage
{
  partial class RequestProcessingTaskServerHandlers
  {

    public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
    {
      var requestKindLocalized = Storage.RequestProcessingTasks.Info.Properties.RequestKind.GetLocalizedValue(_obj.RequestKind);
      var initiator = string.Empty;
      
      if (!string.IsNullOrWhiteSpace(_obj.RequestData))
      {
        initiator = JObject.Parse(_obj.RequestData)["Initiator"].ToString();
        Logger.DebugFormat("initiator {0}", initiator);
      }
      else
      {
        var employee = Storage.PublicFunctions.Module.Remote.GetEmployeeForCurentUser();
        if (employee == null)
          initiator = Users.Current.Login.LoginName;
        else
          initiator = employee.DisplayValue;
      }
      _obj.Subject = RequestProcessingTasks.Resources.TaskSubjectFormat(requestKindLocalized, initiator, Calendar.Now.ToShortDateString(), _obj.Id);
    }

    public override void Created(Sungero.Domain.CreatedEventArgs e)
    {
      // Отв. за обработку запроса, исполнитель задания
      var archivist = Storage.PublicFunctions.Module.Remote.GetRequestResponsible();
      if (archivist != null)
      {
        _obj.Archivist = archivist;
        // Черновик темы. Полностью будет заполнена в задании архивисту.
        var requestKindLocalized = Storage.RequestProcessingTasks.Info.Properties.RequestKind.GetLocalizedValue(_obj.RequestKind);
        var initiator = string.Empty;
        var employee = Storage.PublicFunctions.Module.Remote.GetEmployeeForCurentUser();
        if (employee == null)
          initiator = Users.Current.Login.LoginName;
        else
          initiator = employee.DisplayValue;
        _obj.Subject = RequestProcessingTasks.Resources.TaskSubjectFormat(requestKindLocalized, initiator, Calendar.Now.ToShortDateString(), _obj.Id);
      
        // Конечный срок из константы
        _obj.MaxDeadline = Calendar.Now.AddWorkingDays(Constants.RequestProcessingTask.DefaultMaxDeadline);
      }
      else
      {
        Logger.Error(RequestProcessingTasks.Resources.ErrorResponsibleNoDefined);
        throw new Exception(RequestProcessingTasks.Resources.ErrorResponsibleNoDefined);
      }
    }

    public override void BeforeStart(Sungero.Workflow.Server.BeforeStartEventArgs e)
    {
      if (string.IsNullOrWhiteSpace(_obj.ActiveText) && string.IsNullOrWhiteSpace(_obj.RequestData))
      {
        e.AddError(RequestProcessingTasks.Resources.ErrorEmptyRequestText);
        return;
      }
      
      // Сформировать json-данные запроса, если задача создается в диалоге.
      if (string.IsNullOrWhiteSpace(_obj.RequestData))
      {
        var json = new JObject();
        var initiator = string.Empty;
        // Заполнить инициатора текущим пользователем.
        var employee = Storage.PublicFunctions.Module.Remote.GetEmployeeForCurentUser();
        if (employee == null || employee.IsSystem == true)
        {
          initiator = Sungero.CoreEntities.Users.Current.Login.LoginName;
        }
        else
        {
          initiator = employee.Name;
          _obj.Initiator = employee;
          if (!string.IsNullOrWhiteSpace(employee.Phone))
            json.Add("ContactInfo", employee.Phone);
        
          if (!string.IsNullOrWhiteSpace(employee.Email))
            json.Add("Email", employee.Email);
        }

        json.Add("RequestKind", _obj.RequestKind.ToString());
        json.Add("Initiator", initiator);
        json.Add("RequestText", _obj.ActiveText);

        _obj.RequestData = json.ToString();
      }
    }
  }
}