VerificationActAssignmentActions.cs 3.06 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Storage.VerificationActAssignment;

namespace DirRX.Storage.Client
{
  partial class VerificationActAssignmentActions
  {
    public virtual void Terminate(Sungero.Workflow.Client.ExecuteResultActionArgs e)
    {
      var document = _obj.DocumentGroup.DestructionActs.Single();
      PublicFunctions.DestructionAct.Remote.RemoveAllCaseFiles(document);
    }

    public virtual bool CanTerminate(Sungero.Workflow.Client.CanExecuteResultActionArgs e)
    {
      return true;
    }

    public virtual void Forward(Sungero.Workflow.Client.ExecuteResultActionArgs e)
    {
      if (_obj.Addressee == null)
      {
        e.AddError(VerificationActTasks.Resources.CantRedirectWithoutAddressee);
        e.Cancel();
      }

      var document = _obj.DocumentGroup.DestructionActs.SingleOrDefault();
      document.Archivist = _obj.Addressee;
      document.Save();
      
    }

    public virtual bool CanForward(Sungero.Workflow.Client.CanExecuteResultActionArgs e)
    {
      return true;
    }

    public virtual void Complete(Sungero.Workflow.Client.ExecuteResultActionArgs e)
    {
      var document = _obj.DocumentGroup.DestructionActs.SingleOrDefault();
      document.LifeCycleState = Storage.DestructionAct.LifeCycleState.Active;
      document.Save();
      
      // Проверить наличие документа.
      if (document == null || !document.HasVersions)
      {
        e.AddError(VerificationActTasks.Resources.ErrorDocumentNotFound);
        return;
      }
      
      // Проверить тип текущего пользователя.
      var currentUser = Sungero.CoreEntities.Users.Current;
      if (currentUser == null || currentUser.IsSystem == true)
      {
        e.AddError(VerificationActTasks.Resources.ErrorSystemUserIsNotAllowed);
        return;
      }
      
      // Проверить подписанта в акте.
      if (document.Signatory == null)
      {
        e.AddError(VerificationActTasks.Resources.ErrorSignatoryNotFound);
        return;
      }
      
      // Переформировать акт (для добавления утверждающего).
      Storage.PublicFunctions.DestructionAct.GenerateLastVersionFromReport(document);
      
      // Подписать документ, если еще не подписан.
      if (!Signatures.Get(document.LastVersion).Where(s => s.Signatory.Equals(currentUser) && s.SignatureType == SignatureType.Endorsing).Any())
      {
        if (!Signatures.Endorse(document.LastVersion, VerificationActTasks.Resources.EndorseNote))
        {
          e.AddError(VerificationActTasks.Resources.ErrorUnableToSign);
          return;
        }
      }
      
      // Отправить на согласование по регламенту.
      PublicFunctions.Module.SendDestructionActForApproving(document, _obj.Performer);
    }

    public virtual bool CanComplete(Sungero.Workflow.Client.CanExecuteResultActionArgs e)
    {
      return true;
    }
  }
}