CaseFileHandlers.cs 3.66 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.LongTermArchive.CaseFile;

namespace DirRX.LongTermArchive
{
  partial class CaseFileCreatingFromServerHandler
  {

    public override void CreatingFrom(Sungero.Domain.CreatingFromEventArgs e)
    {
      base.CreatingFrom(e);
      
      // Не трогать при копировании архивные реквизиты.
      e.Without(_info.Properties.LTAArchiveDateDirRX);
      e.Without(_info.Properties.LTAArchiveDocumentsDirRX);
      e.Without(_info.Properties.LTACaseInventoryDirRX);
      e.Without(_info.Properties.LTAConsInventoryDirRX);
      e.Without(_info.Properties.LTAConsInventoryYearDirRX);
      e.Without(_info.Properties.LTADestructionActDirRX);
      e.Without(_info.Properties.LTADestructionDateDirRX);
      e.Without(_info.Properties.LTAInventoryKindDirRX);
      e.Without(_info.Properties.LTAIsSymbolNumDirRX);
      e.Without(_info.Properties.LTANumInConsInventDirRX);
      e.Without(_info.Properties.LTAResponsibleDirRX);
      e.Without(_info.Properties.LTAStageDirRX);
      e.Without(_info.Properties.LTASheetsCountDirRX);
    }
  }

  partial class CaseFileFilteringServerHandler<T>
  {

    public override IQueryable<T> Filtering(IQueryable<T> query, Sungero.Domain.FilteringEventArgs e)
    {
      var filter = _filter;
      if (filter == null)
        return query;
      
      query = base.Filtering(query, e);

      // Фильтр по ДА-ответственному.
      if (filter.Responsible != null)
        query = query.Where(f => f.LTAResponsibleDirRX == filter.Responsible);
      
      // Фильтр по сроку хранения.
      if (filter.RetentionPeriod != null)
        query = query.Where(f => f.RetentionPeriod.Equals(filter.RetentionPeriod));
      
      // Фильтр по сдаточной описи.
      if (filter.CaseInventory != null)
        query = query.Where(f => f.LTACaseInventoryDirRX.Equals(filter.CaseInventory));
      
      // Фильтр по ДА-состоянию.
      var stages = new List<Sungero.Core.Enumeration>();
      
      if (filter.InWorkDirRX)
        stages.Add(LTAStageDirRX.InWork);
      
      if (filter.CompletedDirRX)
        stages.Add(LTAStageDirRX.CompletedDirRX);

      if (filter.InventoriedDirRX)
        stages.Add(LTAStageDirRX.InventoriedDirRX);

      if (filter.ArchivedDirRX)
        stages.Add(LTAStageDirRX.ArchivedDirRX);

      if (filter.DestructionActDirRX)
        stages.Add(LTAStageDirRX.DestructionActDirRX);
      
      if (filter.DestroyedDirRX)
        stages.Add(LTAStageDirRX.DestroyedDirRX);
      
      if (stages.Any())
        query = query.Where(x => stages.Contains(x.LTAStageDirRX.Value));
      
      return query;
    }
  }

  partial class CaseFileServerHandlers
  {

    public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
    {
      base.BeforeSave(e);
      
      if (_obj.LTASheetsCountDirRX.HasValue && _obj.LTASheetsCountDirRX.Value > DirRX.LongTermArchive.Constants.Docflow.CaseFile.MaxPages)
        e.AddError(DirRX.LongTermArchive.CaseFiles.Resources.ErrorMaxPagesFormat(DirRX.LongTermArchive.Constants.Docflow.CaseFile.MaxPages));
    }

    public override void Created(Sungero.Domain.CreatedEventArgs e)
    {
      base.Created(e);
      
      _obj.LTAStageDirRX = LTAStageDirRX.InWork;
      _obj.Status = Status.Active;
      if (_obj.State.IsCopied)
      {
        _obj.LTAConsInventoryDirRX = null;
        _obj.LTAConsInventoryYearDirRX = null;
        _obj.LTANumInConsInventDirRX = null;
        _obj.LTALocationDirRX = null;
      }
      else
        _obj.LTAIsPaperDirRX = false;
    }
  }
}