ModuleHandlers.cs 8.86 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using caseFileStages = DirRX.LongTermArchive.CaseFile.LTAStageDirRX;

namespace DirRX.Storage.Server
{
  partial class FolderCaseFileToConsInventFolderHandlers
  {

    public virtual IQueryable<DirRX.LongTermArchive.ICaseFile> FolderCaseFileToConsInventDataQuery(IQueryable<DirRX.LongTermArchive.ICaseFile> query)
    {
      query = Storage.PublicFunctions.Module.Remote.GetCaseFilesToInventory();
      var filter = _filter;
      if (filter == null)
        return query;
      // Фильтр по НОР.
      if (filter.BusinessUnit != null)
      {
        var departmentIds = Sungero.Company.PublicFunctions.BusinessUnit.Remote.GetAllDepartmentIds(filter.BusinessUnit);
        query = query.Where(f => f.BusinessUnit != null && Equals(f.BusinessUnit, filter.BusinessUnit) ||
                            f.BusinessUnit == null && f.Department != null && departmentIds.Contains(f.Department.Id));
      }
      
      // Фильтр по подразделению.
      if (filter.Department != null)
        query = query.Where(f => f.Department == filter.Department);
      
      // Фильтр по признаку "Переходящее".
      if (filter.Transient)
        query = query.Where(f => f.LongTerm.HasValue && f.LongTerm.Value);
      
      var currentYear = Calendar.UserToday.Year;
      
      // Фильтр по текущему году.
      if (filter.CurrentYear)
        query = query.Where(f => f.StartDate.Value.Year <= currentYear && (!f.EndDate.HasValue || f.EndDate.Value.Year >= currentYear));
      
      // Фильтр по предыдущему году.
      var previousYear = currentYear - 1;
      if (filter.PreviousYear)
        query = query.Where(f => f.StartDate.Value.Year <= previousYear && (!f.EndDate.HasValue || f.EndDate.Value.Year >= previousYear));
      
      // Фильтр по следующему году.
      var nextYear = currentYear + 1;
      if (filter.NextYear)
        query = query.Where(f => f.StartDate.Value.Year <= nextYear && (!f.EndDate.HasValue || f.EndDate.Value.Year >= nextYear));
      
      // Фильтр по диапазону лет.
      if (filter.ManualPeriod)
      {
        if (filter.DateRangeTo != null)
          query = query.Where(f => f.StartDate.Value.Year <= filter.DateRangeTo.Value.Year);
        if (filter.DateRangeFrom != null)
          query = query.Where(f => !f.EndDate.HasValue || f.EndDate.Value.Year >= filter.DateRangeFrom.Value.Year);
      }
      
      // Фильтр по ДА-ответственному.
      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));
      return query;
    }
  }

  partial class FolderCaseFilesInArchiveFolderHandlers
  {

    public virtual IQueryable<DirRX.LongTermArchive.ICaseFile> FolderCaseFilesInArchiveDataQuery(IQueryable<DirRX.LongTermArchive.ICaseFile> query)
    {
      // Применить фильтры панели.
      var filter = _filter;
      
      // Фильтр по ДА-ответственному.
      if (filter.Responsible != null)
        query = query.Where(f => f.LTAResponsibleDirRX == filter.Responsible);
      
      // Фильтр по ДА-состоянию.
      var stages = new List<Sungero.Core.Enumeration>();

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

      if (filter.DestructionActDirRX)
        stages.Add(caseFileStages.DestructionActDirRX);
      
      if (filter.DestroyedDirRX)
        stages.Add(caseFileStages.DestroyedDirRX);
      
      // Если флажки не выставлены, отображать все архивные статусы.
      if (!stages.Any())
      {
        stages.Add(caseFileStages.ArchivedDirRX);
        stages.Add(caseFileStages.DestructionActDirRX);
        stages.Add(caseFileStages.DestroyedDirRX);
      }
      
      query = query.Where(x => stages.Contains(x.LTAStageDirRX.Value));
      
      // Фильтр по дате передачи в архив.
      if (filter.DateRangeTo != null)
        query = query.Where(f => f.LTAArchiveDateDirRX.Value <= filter.DateRangeTo.Value);
      
      if (filter.DateRangeFrom != null)
        query = query.Where(f => f.LTAArchiveDateDirRX.Value >= filter.DateRangeFrom.Value);
      return query;
    }
  }

  partial class FolderCaseFilesInWorkFolderHandlers
  {

    public virtual IQueryable<DirRX.LongTermArchive.ICaseFile> FolderCaseFilesInWorkDataQuery(IQueryable<DirRX.LongTermArchive.ICaseFile> query)
    {
      // Применить фильтры панели.
      var filter = _filter;

      // Фильтр по подразделению.
      if (filter.Department != null)
        query = query.Where(f => f.Department == filter.Department);
      
      // Фильтр по признаку "Переходящее".
      if (filter.Transient)
        query = query.Where(f => f.LongTerm.HasValue && f.LongTerm.Value);
      
      // Фильтр по ДА-ответственному.
      if (filter.Responsible != null)
        query = query.Where(f => f.LTAResponsibleDirRX == filter.Responsible);
      
      // Фильтр по ДА-состоянию.
      var stages = new List<Sungero.Core.Enumeration>();

      if (filter.InWorkDirRX)
        stages.Add(caseFileStages.InWork);

      if (filter.CompletedDirRX)
        stages.Add(caseFileStages.CompletedDirRX);
      
      if (filter.InventoriedDirRX)
        stages.Add(caseFileStages.InventoriedDirRX);
      
      // Если флажки не выставлены, отображать все статусы.
      if (!stages.Any())
      {
        stages.Add(caseFileStages.InWork);
        stages.Add(caseFileStages.CompletedDirRX);
        stages.Add(caseFileStages.InventoriedDirRX);
      }

      // Фильтр по текущему году.
      var currentYear = Calendar.UserToday.Year;
      if (filter.CurrentYear)
        query = query.Where(f => f.StartDate.Value.Year <= currentYear && (!f.EndDate.HasValue || f.EndDate.Value.Year >= currentYear));
      
      // Фильтр по предыдущему году.
      var previousYear = currentYear - 1;
      if (filter.PreviousYear)
        query = query.Where(f => f.StartDate.Value.Year <= previousYear && (!f.EndDate.HasValue || f.EndDate.Value.Year >= previousYear));
      
      // Фильтр по диапазону лет.
      if (filter.ManualPeriod)
      {
        if (filter.DateRangeTo != null)
          query = query.Where(f => f.StartDate.Value.Year <= filter.DateRangeTo.Value.Year);
        if (filter.DateRangeFrom != null)
          query = query.Where(f => !f.EndDate.HasValue || f.EndDate.Value.Year >= filter.DateRangeFrom.Value.Year);
      }
      
      query = query.Where(x => stages.Contains(x.LTAStageDirRX.Value));
      return query;
    }
  }

  partial class FolderTransferEventLogFolderHandlers
  {

    public virtual IQueryable<DirRX.Container.ITransferEventLog> FolderTransferEventLogDataQuery(IQueryable<DirRX.Container.ITransferEventLog> query)
    {
      var filter = _filter;
      if (filter == null)
        return query;
      
      // Фильтр по Правилу отбора и передачи.
      if (filter.SelectionRule != null)
        query = query.Where(f => f.SelectionRule == filter.SelectionRule);
      
      // Фильтр по Инвентарной описи.
      if (filter.CaseInventory != null)
        query = query.Where(f => f.InventoryId == filter.CaseInventory.Id);
      
      // Фильтр по Состоянию. Если ни один флажок не выбран, отображать все.
      var stages = new List<Sungero.Core.Enumeration>();
      
      if (filter.InQueue)
        stages.Add(Container.TransferEventLog.CurrentState.InQueue);
      
      if (filter.InProcess)
      {
        stages.Add(Container.TransferEventLog.CurrentState.Sending);
        stages.Add(Container.TransferEventLog.CurrentState.InProcess);
        stages.Add(Container.TransferEventLog.CurrentState.Creating);
        stages.Add(Container.TransferEventLog.CurrentState.Accepted);
      }

      if (filter.Completed)
        stages.Add(Container.TransferEventLog.CurrentState.Complete);

      if (filter.Error)
        stages.Add(Container.TransferEventLog.CurrentState.Error);
      
      if (stages.Any())
        query = query.Where(x => stages.Contains(x.CurrentState.Value));
      
      return query;
    }
  }

  partial class StorageHandlers
  {
  }
}