public IPagedDocumentList<MainOrderSummary> PagedPurchaseDocumentList(int page, int pageSize, DateTime startdate,
                                                                              DateTime endDate,
                                                                              DocumentStatus? documentStatus,
                                                                              Guid? distributrId = null,
                                                                              string search = "")
        {
            IQueryable<tblDocument> orders =
                _GetAll(DocumentType.Order, startdate, endDate).Where(s => s.OrderParentId == s.Id);
            orders = orders.Where(s => s.OrderOrderTypeId == (int) OrderType.DistributorToProducer);
            if (!string.IsNullOrEmpty(search))
                orders = orders.Where(p => p.DocumentReference.ToLower().Contains(search.ToLower()));

            if (distributrId.HasValue && distributrId != Guid.Empty)
            {
                orders =
                    orders.Where(
                        s =>
                        s.DocumentRecipientCostCentre == distributrId.Value ||
                        s.DocumentIssuerCostCentreId == distributrId.Value);
            }
            if (documentStatus.HasValue && documentStatus != 0)
            {
                orders = orders.Where(s => s.DocumentStatusId == (int) documentStatus);
            }

            PagedDocumentList<MainOrderSummary> pages;
            pages = new PagedDocumentList<MainOrderSummary>(orders.Count(), page, pageSize);
            int skip = Skip(page, pageSize);
            var data = orders.OrderByDescending(d => d.IM_DateCreated).Skip(skip).Take(pageSize).ToList();
            pages.AddRange(data.Select(s => MapSummary(s)).ToList());
            return pages;
        }
        private IPagedDocumentList<MainOrderSummary> GetPendingApproval(int page, int pageSize, DateTime startdate,
            DateTime endDate, OrderType orderType)
        {
            int pageStart = ((page - 1)*pageSize) + 1;
            int pageEnd = (pageStart + pageSize) - 1;
            string sql = string.Format(MainOrderResource.PendingApproval, pageStart, pageEnd, (int) orderType,
                startdate.ToString("yyyy-MM-dd HH:mm:ss"), endDate.ToString("yyyy-MM-dd HH:mm:ss"));
            var result = _ctx.ExecuteStoreQuery<MainOrderSummary>(sql).ToList();
            int count = 0;
            if (result.Any())
            {
                count = result.FirstOrDefault().RowCount;
            }
            var pages = new PagedDocumentList<MainOrderSummary>(count, page, pageSize);
            pages.AddRange(result);
            return pages;

        }
        public IPagedDocumentList<MainOrderSummary> PagedDocumentList(int page, int pageSize, DateTime startdate,
                                                                      DateTime endDate, OrderType orderType,
                                                                      DocumentStatus? documentStatus = null,
                                                                      string search = "")
        {
            endDate=new DateTime(endDate.Year,endDate.Month,endDate.Day,23,59,0);
            bool calculateOutStandingPayment = false;
            IQueryable<tblDocument> orders =
                _GetAll(DocumentType.Order, startdate, endDate).Where(s => s.OrderParentId == s.Id);
            if (!string.IsNullOrEmpty(search))
                orders = orders.Where(p => p.DocumentReference.ToLower().StartsWith(search.ToLower()));
            if ((int) orderType != 0)
                //Go:we want outstanding for all order types,we pass 0 for outanding listing for all transactions
                orders = orders.Where(s => s.OrderOrderTypeId == (int) orderType);


            switch (documentStatus)
            {
                case DocumentStatus.Confirmed:
                    // calculateOutStandingPayment = true;
                   // orders = GetPendingApproval(orders);
                    return GetPendingApproval(page, pageSize, startdate, endDate,orderType);
                    break;
                case DocumentStatus.Approved:
                    orders = GetPendingDispatch(orders, startdate, endDate);
                    break;
                case DocumentStatus.Dispatched:
                    orders = GetDispatched(orders);
                    break;
                case DocumentStatus.OrderBackOrder:
                    orders = GetBackOrder(orders);
                    break;
                case DocumentStatus.OrderLossSale:
                    orders = GetOrderLossSale(orders);
                    break;
                case DocumentStatus.Rejected:
                    orders = GetRejected(orders);
                    break;
                case DocumentStatus.Closed:
                    calculateOutStandingPayment = true;
                    orders = GetClosed(orders);
                    break;
                case DocumentStatus.Outstanding:
                    calculateOutStandingPayment = true;
                    orders = GetOutStandingPayment(orders,startdate,endDate);
                    break;
                case DocumentStatus.UnconfirmedReceiptPayment:
                    calculateOutStandingPayment = true;
                    orders = GetUnconfirmedPayment(orders);
                    break;
                case DocumentStatus.FullyPaidOrders:
                    calculateOutStandingPayment = true;
                    orders = GetFullyPaidOrders(orders);
                    break;
                default:
                    orders = GetPendingConfirmation(orders);
                    break;

            }
            var count = orders.Count();

            PagedDocumentList<MainOrderSummary> pages;
            pages = new PagedDocumentList<MainOrderSummary>(count, page, pageSize);
            int skip = Skip(page, pageSize);
            var data = orders.OrderByDescending(d => d.IM_DateCreated).Skip(skip).Take(pageSize).ToList();

            pages.AddRange(data.Select(s => MapSummary(s, calculateOutStandingPayment)).ToList());
            return pages;
        }