TransferEventLogHandlers.cs 2.38 KB
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.Container.TransferEventLog;

namespace DirRX.Container
{
  partial class TransferEventLogFilteringServerHandler<T>
  {

    public override IQueryable<T> Filtering(IQueryable<T> query, Sungero.Domain.FilteringEventArgs e)
    {
      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(CurrentState.InQueue);
      
      if (filter.InProcess)
      {
        stages.Add(CurrentState.Sending);
        stages.Add(CurrentState.InProcess);
        stages.Add(CurrentState.Creating);
        stages.Add(CurrentState.Accepted);
      }

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

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

  partial class TransferEventLogServerHandlers
  {
    public override void BeforeDelete(Sungero.Domain.BeforeDeleteEventArgs e)
    {
      if (_obj.CurrentState == CurrentState.Complete)
        e.AddError("Нельзя удалить запись, т.к. контейнер уже передан в архивную систему.");
      else if (_obj.InventoryId.HasValue)
        e.AddError("Нельзя удалить запись, созданную для описи электронных дел.");
    }
    
    public override void Saving(Sungero.Domain.SavingEventArgs e)
    {
      var lockInfo = Locks.GetLockInfo(_obj);
      if (lockInfo != null && lockInfo.IsLocked)
        Locks.Unlock(_obj);
      
      _obj.Updated = Calendar.Now;
      if (_obj.State.IsInserted)
        _obj.Created = _obj.Updated;
    }
  }

}