Пример #1
0
        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();
            }
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
            }
        }