SyncDataHandlers.cs 1.88 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Storage.SyncData;

namespace DirRX.Storage
{
  partial class SyncDataFilteringServerHandler<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.SourceSystem != null)
        query = query.Where(f => f.ExternalSystem == filter.SourceSystem);
      
      // Фильтр по состоянию.
      var stages = new List<Sungero.Core.Enumeration>();
      
      if (filter.InQueue)
        stages.Add(CurrentState.InQueue);
      
      if (filter.InProcess)
        stages.Add(CurrentState.InProcess);

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

      if (filter.Error)
        stages.Add(CurrentState.Error);
      
      query = query.Where(x => stages.Contains(x.CurrentState.Value));
      
      // Фильтр по подтверждению.
      if (filter.Confirmed && !filter.NotConfirmed)
        query = query.Where(x => x.Accepted.HasValue);
      else if (!filter.Confirmed && filter.NotConfirmed)
        query = query.Where(x => !x.Accepted.HasValue);
      
      // Фильтр по диапазону лет.
      if (filter.DateRangeTo != null)
        query = query.Where(f => f.Created <= filter.DateRangeTo.Value);
      if (filter.DateRangeFrom != null)
        query = query.Where(f => f.Created >= filter.DateRangeFrom.Value);
            
      return query;
    }
  }

  partial class SyncDataServerHandlers
  {

    public override void Saving(Sungero.Domain.SavingEventArgs e)
    {
      _obj.Name = "Пакет " + _obj.Created.Value.ToString();
    }
  }

}