CaseInventorySharedFunctions.cs 2.81 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.CaseArchiving.CaseInventory;

namespace DirRX.CaseArchiving.Shared
{
  partial class CaseInventoryFunctions
  {   
    /// <summary>
    /// Заполнить имя документа.
    /// </summary>
    public override void FillName()
    {
      // Вид документа.
      var name = _obj.DocumentKind.DisplayValue;
      
      // Подразделение.
      if (_obj.Department != null && Functions.Module.Remote.IsCreateCaseInventoryByDepartments())
        name += " " + _obj.Department.DisplayValue;
      
      using (TenantInfo.Culture.SwitchTo())
      {
        // Номер описи.
        name += _obj.DocumentNumber.HasValue ? " № " + _obj.DocumentNumber.ToString() : string.Empty;
        
        // Год.
        name += _obj.EndOfYear.HasValue ? " за " + _obj.EndOfYear.Value.Year.ToString() + " год" : string.Empty;
      }
      
      _obj.Name = name.Length > _obj.Info.Properties.Name.Length ? name.Substring(0, _obj.Info.Properties.Name.Length - 1)  : name;
    }

    /// <summary>
    /// Отправить уведомление о завершении обработки сдаточной описи.
    /// </summary>
    [Public]
    public virtual void SendCompletionNotification()
    {
      if (_obj.Archivist == null)
        return;
      
      var simpleTask = Sungero.Workflow.SimpleTasks.Create();

      // Вложить опись.
      simpleTask.Attachments.Add(_obj);
      
      // Уведомить архивиста.
      var step = simpleTask.RouteSteps.AddNew();
      step.AssignmentType = Sungero.Workflow.SimpleTask.AssignmentType.Notice;
      step.Performer = _obj.Archivist;
      
      // Получить тему и текст уведомления в зависимости от статуса.
      if (_obj.ArchiveState == ArchiveState.Complete)
      {
        simpleTask.Subject = Resources.InfoArchivingCompleted;
        simpleTask.ActiveText = _obj.Name;
        
        // Уведомить делопроизводителя.
        if (_obj.Responsible != null && _obj.Responsible != _obj.Archivist)
        {
          step = simpleTask.RouteSteps.AddNew();
          step.AssignmentType = Sungero.Workflow.SimpleTask.AssignmentType.Notice;
          step.Performer = _obj.Responsible;
        }
      }
      else
      {
        simpleTask.Subject = Resources.InfoArchivingError;
        simpleTask.ActiveText = _obj.Name;
        simpleTask.ActiveText += Environment.NewLine;
        simpleTask.ActiveText += "При обработке описи возникли ошибки. Обратитесь к Администратору системы.";
      }
      
      simpleTask.Save();
      simpleTask.Start();
    }

  }
}