public static OrderLine[] GetOrderLinesForLiteRMM(OrderLineFilter filter, OrderLineSortFields orderLineSortFields, int startIndex, int size) { using (var dc = new DCFactory<StoreDataContext>()) { DataLoadOptions options = new DataLoadOptions(); options.LoadWith<OrderLine>(l => l.OrderLineStatusChanges); options.LoadWith<OrderLine>(l => l.Order); dc.DataContext.LoadOptions = options; // deas 23.05.2011 task4130 Ускорение работы со статусами //var stRejected = OrderLineStatusUtil.StatusByte(dc, "Rejected"); var stRejected = OrderLineStatusUtil.StatusByte("Rejected"); var orderLines = dc.DataContext.OrderLines.Where(x => x.InternalFranchName == SiteContext.Current.InternalFranchName).AsQueryable(); //пока закоментировано .Where(l => l.CurrentStatus != stRejected); /*if( filter != null ) orderLines = ApplyOrderLineFilter( orderLines, filter );*/ if (filter != null) { if (filter is OrderLineFilter) { orderLines = ApplyOrderLineFilter(orderLines, (OrderLineFilter)filter); } else { throw new Exception("Incorrect filter object."); } } orderLines = ApplyOrderLineSort(orderLines, orderLineSortFields); //orderLines = ApplyOrderLineSort(orderLines, sortField); return orderLines.Skip(startIndex).Take(size).ToArray(); } }
static IQueryable<OrderLine> ApplyOrderLineFilter( IQueryable<OrderLine> orderLines, OrderLineFilter filter ) { if( filter.OrderIDs != null ) { Expression<Func<OrderLine, bool>> condition = PredicateBuilder.False<OrderLine>(); filter.OrderIDs.Each( orderID => condition = condition.Or<OrderLine>( o => o.OrderID == orderID ) ); orderLines = orderLines.Where( condition ); } if( !string.IsNullOrEmpty( filter.CustOrderNum ) ) { orderLines = orderLines.Where( l => l.Order.CustOrderNum == filter.CustOrderNum ); } if( filter.OrderDate.HasValue ) { orderLines = orderLines.Where( l => filter.OrderDate.Value.Date <= l.Order.OrderDate && l.Order.OrderDate < filter.OrderDate.Value.Date.AddDays( 1 ) ); } if( !string.IsNullOrEmpty( filter.Manufacturer ) ) { orderLines = orderLines.Where( l => l.Manufacturer == filter.Manufacturer ); } if( !string.IsNullOrEmpty( filter.PartNumber ) ) { orderLines = orderLines.Where( l => l.PartNumber.StartsWith( filter.PartNumber ) ); } if( !string.IsNullOrEmpty( filter.PartName ) ) { orderLines = orderLines.Where( l => l.PartName.Contains( filter.PartName ) ); } if( filter.EstSupplyDate.HasValue ) { orderLines = orderLines.Where( l => l.EstSupplyDate == filter.EstSupplyDate.Value ); } if( filter.OrderLineStatus.HasValue ) { orderLines = orderLines.Where( l => l.CurrentStatus == filter.OrderLineStatus.Value ); } var stRefusedBySupplier = OrderLineStatusUtil.StatusByte("RefusedBySupplier"); if (filter.Processed.HasValue) { orderLines = orderLines.Where(l => l.Processed == filter.Processed.Value && l.CurrentStatus == stRefusedBySupplier); } if( filter.ComplexStatusFilter.HasValue ) { if( filter.ComplexStatusFilter.Value == ComplexStatusFilter.NotCompleted ) { //orderLines = orderLines.Where( OrderBO.FinalStatusExpression.Not() ); orderLines = orderLines.Where( OrderBO.WorkStatusExpression ); } else if( filter.ComplexStatusFilter.Value == ComplexStatusFilter.RequiresReaction ) { orderLines = orderLines.Where( OrderBO.NecessarilyRequiresReactionStatusExpression ); } else if( filter.ComplexStatusFilter.Value == ComplexStatusFilter.Completed ) { orderLines = orderLines.Where( OrderBO.FinalStatusExpression ); } else { throw new InvalidOperationException(); } } return orderLines; }
public static OrderLineTotals GetOrderLinesCountForRMM(OrderLineFilter filter) { using (var dc = new DCFactory<StoreDataContext>()) { DataLoadOptions options = new DataLoadOptions(); options.LoadWith<OrderLine>(l => l.OrderLineStatusChanges); options.LoadWith<OrderLine>(l => l.Order); dc.DataContext.LoadOptions = options; // deas 23.05.2011 task4130 Ускорение работы со статусами //var stRejected = OrderLineStatusUtil.StatusByte(dc, "Rejected"); var stRejected = OrderLineStatusUtil.StatusByte("Rejected"); var orderLines = dc.DataContext.OrderLines.Where(l => l.CurrentStatus != stRejected); /*if( filter != null ) orderLines = ApplyOrderLineFilter( orderLines, filter );*/ if (filter != null) { if (filter is OrderLineFilter) { orderLines = ApplyOrderLineFilter(orderLines, (OrderLineFilter)filter); } else { throw new Exception("Incorrect filter object."); } } OrderLineTotals res = new OrderLineTotals(); res.TotalCount = orderLines.Count(); if (orderLines.Where(OrderBO.TotalStatusExpression).Count() != 0) res.TotalSum = orderLines.Where(OrderBO.TotalStatusExpression).Sum(l => l.UnitPrice * l.Qty); return res; } }