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

namespace DirRX.Container.Server
{
  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 ContainerHandlers
  {
  }
}