public GridResponseModel<ProductModel> Get(GridRequestModel gridRequestModel, ProductModel searchModel)
        {
            var query = _unitOfWork.ProductRepository.Queryable;
            if (searchModel != null)
            {
                if (searchModel.ProductTypeId > 0)
                    query = query.Where(p => p.ProductType.Id == searchModel.ProductTypeId);
                if (searchModel.SupplierId > 0)
                    query = query.Where(p => p.Supplier != null && p.Supplier.Id == searchModel.SupplierId);
                if (!string.IsNullOrWhiteSpace(searchModel.Name))
                    query = query.Where(p => p.Name.Contains(searchModel.Name));
            }

            switch (gridRequestModel.Sidx)
            {
                default:
                case "Name":
                    query = query.OrderBy(p => p.Name, gridRequestModel.IsSortAsending);
                    break;
            }

            var dbModel = query.ToPagingResult(gridRequestModel);

            var model = dbModel.Rows.Select(m => Mapper.Map<ProductModel>(m)).ToArray();

            var gridData = new GridResponseModel<ProductModel>(gridRequestModel, dbModel.RowCount, model);

            return gridData;
        }
 public GridResponseModel<SupplierModel> Get(GridRequestModel gridRequestModel, SupplierModel searchModel)
 {
     var query = _unitOfWork.SupplierRepository.Queryable;
     var dbModel = query.ToPagingResult(gridRequestModel);
     var model = dbModel.Rows.Select(m => Mapper.Map<SupplierModel>(m)).ToArray();
     var gridData = new GridResponseModel<SupplierModel>(gridRequestModel, dbModel.RowCount, model);
     return gridData;
 }
Beispiel #3
0
        public GridResponseModel <UserViewModel> GridView(GridRequestModel request)
        {
            GridResponseModel <UserViewModel> gridData = new GridResponseModel <UserViewModel>();

            var user = GetUserFromToken();

            gridData.Count = _repository.GetAllActive().Count();

            IQueryable <User> query = null;



            if (user.Role.Name == "SuperAdmin")
            {
                gridData.Count = _repository.GetAllActive().Count();
                query          = _repository.GetAllActive().Include(x => x.Role).Include(x => x.Company);
            }
            else
            {
                gridData.Count = _repository.GetAllActive(user.CompanyId).Count();
                query          = _repository.GetAllActive(user.CompanyId).Include(x => x.Role).Include(x => x.Company);
            }

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                query = query.Where(x => x.Name.Contains(request.Keyword) || x.Name.Contains(request.Keyword));
            }

            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderBy(l => l.Name); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderByDescending(l => l.Name); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }

            query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <User> users = query.ToList();

            foreach (var usr in users)
            {
                gridData.Data.Add(new UserViewModel(usr));
            }

            return(gridData);
        }
Beispiel #4
0
        public GridResponseModel <SaleViewModel> GetGridData(GridRequestModel request, DateTime startDate, DateTime endDate)
        {
            GridResponseModel <SaleViewModel> gridData = new GridResponseModel <SaleViewModel>();

            endDate = endDate.AddDays(1);

            gridData.Count = _repository.GetAllActive(getCreatedCompanyId())
                             .Where(x => x.Created >= startDate && x.Created <= endDate).Count();

            var query = _repository.GetAllActive(getCreatedCompanyId())
                        .Where(x => x.Created >= startDate && x.Created <= endDate)
                        .Include(x => x.SalesDetails)
                        .Include(x => x.SalesDetails.Select(y => y.Product))
                        .Include(x => x.SalesDetails.Select(y => y.Product.Group))
                        .Include(x => x.SalesDetails.Select(y => y.Product.Brand))
                        .Include(x => x.Customer);

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                query = query.Where(x => x.InvoiceNo.Contains(request.Keyword));
            }

            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderBy(l => l.InvoiceNo); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderByDescending(l => l.InvoiceNo); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }


            query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <Sale> sales = query.ToList();

            foreach (var sale in sales)
            {
                gridData.Data.Add(new SaleViewModel(sale));
            }

            return(gridData);
        }
Beispiel #5
0
        public GridResponseModel <PurchaseViewModel> GetPurchaseReportGridData(GridRequestModel request, DateTime startDate, DateTime endDate)
        {
            GridResponseModel <PurchaseViewModel> gridData = new GridResponseModel <PurchaseViewModel>();

            gridData.Count = _repository.GetAllActive(getCreatedCompanyId()).Count(x => x.Created >= startDate && x.Created <= endDate);
            gridData.Value = _repository.GetAllActive(getCreatedCompanyId())
                             .Where(x => x.Created >= startDate && x.Created <= endDate).Sum(x => (decimal?)x.Amount) ?? 0;

            var query = _repository.GetAllActive(getCreatedCompanyId())
                        .Where(x => x.Created >= startDate && x.Created <= endDate)
                        .Include(x => x.PurchaseDetails)
                        .Include(x => x.PurchaseDetails.Select(y => y.Product))
                        .Include(x => x.PurchaseDetails.Select(y => y.Product.Group))
                        .Include(x => x.PurchaseDetails.Select(y => y.Product.Brand));

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                query = query.Where(x => x.InvoiceNo.Contains(request.Keyword));
            }

            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderBy(l => l.InvoiceNo); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderByDescending(l => l.InvoiceNo); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }


            query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <Purchase> purchases = query.ToList();

            foreach (var purchase in purchases)
            {
                gridData.Data.Add(new PurchaseViewModel(purchase));
            }

            return(gridData);
        }
Beispiel #6
0
        public GridResponseModel <BrandViewModel> GetGridData(GridRequestModel request)
        {
            GridResponseModel <BrandViewModel> gridData = new GridResponseModel <BrandViewModel>();

            gridData.Count = _repository.GetAllActive(getCreatedCompanyId()).Count();

            var query = _repository.GetAllActive(getCreatedCompanyId());

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                query = query.Where(x => x.Name.Contains(request.Keyword));
            }

            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderBy(l => l.Name); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderByDescending(l => l.Name); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }


            query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <Brand> brands = query.ToList();

            foreach (var brand in brands)
            {
                gridData.Data.Add(new BrandViewModel(brand));
            }

            return(gridData);
        }
Beispiel #7
0
        public GridResponseModel <RoleViewModel> RoleGridView(GridRequestModel request)
        {
            GridResponseModel <RoleViewModel> gridData = new GridResponseModel <RoleViewModel>();

            gridData.Count = _repository.GetAllActive().Count();

            var query = _repository.GetAllActive().Include(x => x.PermissionMaps.Select(y => y.Permission));

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                query = query.Where(x => x.Name.Contains(request.Keyword) || x.Name.Contains(request.Keyword));
            }

            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderBy(l => l.Name); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderByDescending(l => l.Name); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }

            query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <Role> roles = query.ToList();

            foreach (var role in roles)
            {
                gridData.Data.Add(new RoleViewModel(role));
            }

            return(gridData);
        }
Beispiel #8
0
        public GridResponseModel <PermissionViewModel> PermissionGridView(GridRequestModel request)
        {
            GridResponseModel <PermissionViewModel> gridData = new GridResponseModel <PermissionViewModel>();

            gridData.Count = _repository.GetAllActive().Count();

            var query = _repository.GetAllActive();

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                query = query.Where(x => x.Resource.Contains(request.Keyword) || x.Resource.Contains(request.Keyword));
            }

            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderBy(l => l.Resource); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "Name": query = query.OrderByDescending(l => l.Resource); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }

            query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <Permission> permissions = query.ToList();

            foreach (var permission in permissions)
            {
                gridData.Data.Add(new PermissionViewModel(permission));
            }

            return(gridData);
        }
Beispiel #9
0
        public GridResponseModel <JournalTypeViewModel> GetJournalTypeGridData(GridRequestModel request)
        {
            GridResponseModel <JournalTypeViewModel> gridData = new GridResponseModel <JournalTypeViewModel>();

            gridData.Count = _journalTypeRepository.GetAllActive(getCreatedCompanyId()).Count();

            var query = _journalTypeRepository.GetAllActive(getCreatedCompanyId());

            query = query.OrderByDescending(l => l.Created);

            query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <JournalType> journalTypes = query.ToList();

            foreach (var journalTpe in journalTypes)
            {
                gridData.Data.Add(new JournalTypeViewModel(journalTpe));
            }
            return(gridData);
        }
Beispiel #10
0
        public GridResponseModel <JournalViewModel> GetGridData(GridRequestModel request, DateTime startDate, DateTime endDate)
        {
            GridResponseModel <JournalViewModel> gridData = new GridResponseModel <JournalViewModel>();

            endDate        = endDate.AddDays(1);
            gridData.Count = _repository.GetAllActive(getCreatedCompanyId()).Where(x => x.Status == JournalStatus.paid).Where(x => x.Created >= startDate && x.Created <= endDate).Count();
            var totalValue = _repository.GetAllActive(getCreatedCompanyId()).Where(x => x.Status == JournalStatus.paid).Where(x => x.Created >= startDate && x.Created <= endDate).Sum(x => x.Amount);

            gridData.Value = totalValue;
            var query = _repository.GetAllActive(getCreatedCompanyId());

            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "Status": query = query.OrderBy(l => l.Status); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "Status": query = query.OrderByDescending(l => l.Status); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }

            query = query.Where(x => x.Status == JournalStatus.paid).Where(x => x.Created >= startDate && x.Created <= endDate).Include(x => x.JournalType).Include(x => x.SubmittedBy).Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <Journal> journals = query.ToList();

            foreach (var journal in journals)
            {
                gridData.Data.Add(new JournalViewModel(journal));
            }
            return(gridData);
        }
Beispiel #11
0
        public GridResponseModel <JournalViewModel> GetGridDataByUser(GridRequestModel request)
        {
            GridResponseModel <JournalViewModel> gridData = new GridResponseModel <JournalViewModel>();
            var user = this.GetUserFromToken();

            gridData.Count = _repository.GetAllActive(getCreatedCompanyId()).Where(x => x.CreatedBy == user.UserId).Count();

            var query = _repository.GetAllActive(getCreatedCompanyId()).Where(x => x.CreatedBy == user.UserId);

            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "Status": query = query.OrderBy(l => l.Status); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "Status": query = query.OrderByDescending(l => l.Status); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }

            query = query.Include(x => x.JournalType).Include(x => x.SubmittedBy).Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <Journal> journals = query.ToList();

            foreach (var journal in journals)
            {
                gridData.Data.Add(new JournalViewModel(journal));
            }
            return(gridData);
        }
Beispiel #12
0
        public GridResponseModel <ProductViewModel> GetGridData(GridRequestModel request)
        {
            var firstCharOfKey = " ";

            if (request.Keyword != null && request.Keyword != "")
            {
                firstCharOfKey = request.Keyword[0].ToString();
            }
            GridResponseModel <ProductViewModel> gridData = new GridResponseModel <ProductViewModel>();
            List <Product> products = new List <Product>();

            gridData.Count = _repository.GetAllActive(getCreatedCompanyId()).Count();

            var query = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Group).Include(x => x.Brand);

            if (firstCharOfKey.All(char.IsDigit))
            {
                if (request.Keyword.Length > 9)
                {
                    products = _repository.GetAllActive(getCreatedCompanyId())
                               .Where(x => x.VendorBarcodeNo.Equals(request.Keyword)).Include(x => x.Group).Include(x => x.Brand).OrderBy(l => l.Name).Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount).ToList();
                }
                else
                {
                    products = _repository.GetAllActive(getCreatedCompanyId())
                               .Where(x => x.BarCodeNo.Equals(request.Keyword)).Include(x => x.Group).Include(x => x.Brand).OrderBy(l => l.Name).Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount).ToList();
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(request.Keyword))
                {
                    query = query.Where(x => x.Name.Contains(request.Keyword));
                }

                if (request.IsAscending)
                {
                    switch (request.OrderBy)
                    {
                    case "Name": query = query.OrderBy(l => l.Name); break;

                    default: query = query.OrderBy(l => l.Created); break;
                    }
                }
                else
                {
                    switch (request.OrderBy)
                    {
                    case "Name": query = query.OrderByDescending(l => l.Name); break;

                    default: query = query.OrderByDescending(l => l.Created); break;
                    }
                }
                query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

                products = query.ToList();
            }


            foreach (var product in products)
            {
                gridData.Data.Add(new ProductViewModel(product));
            }

            return(gridData);
        }
Beispiel #13
0
 public IQueryable <T> CreateQuery(IQueryable <T> query, GridRequestModel gridRequestModel)
 {
     return(CreateQuery(query, gridRequestModel.Sidx, gridRequestModel.IsSortAsending));
 }
Beispiel #14
0
 public IHttpActionResult GetPermission(GridRequestModel request)
 {
     return(Ok(_permissionService.PermissionGridView(request).Data));
 }
Beispiel #15
0
        public static Task <PagingResultModel <TQuery> > ToPagingResultAsync <TQuery>(this IQueryable <TQuery> query, GridRequestModel gridRequest)
        {
            var rowCount = query.ToFutureValue(q => q.Count());

            var query1 = query
                         .Skip((gridRequest.Page - 1) * gridRequest.Rows)
                         .Take(gridRequest.Rows);

            var gridData = query1.ToListAsync()
                           .ContinueWith(antecendent => new PagingResultModel <TQuery>(antecendent.Result, rowCount.Value));

            return(gridData);
        }
Beispiel #16
0
        public static PagingResultModel <TQuery> ToPagingResult <TQuery>(this IQueryable <TQuery> query, GridRequestModel gridRequest)
        {
            var rowCount = query.ToFutureValue(q => q.Count());

            var query1 = query
                         .Skip((gridRequest.Page - 1) * gridRequest.Rows)
                         .Take(gridRequest.Rows);

            var dbModel = query1.ToList();

            var gridData = new PagingResultModel <TQuery>(dbModel, rowCount.Value);

            return(gridData);
        }
        public ActionResult Get(GridRequestModel gridRequestModel, ProductTypeModel searchModel, bool _search)
        {
            var data = _productTypeService.Get(gridRequestModel, _search ? searchModel : null);

            return Json(data, JsonRequestBehavior.AllowGet);
        }
Beispiel #18
0
 public IHttpActionResult GetUsers(GridRequestModel request)
 {
     return(Ok(_service.GridView(request).Data));
 }
Beispiel #19
0
 public IHttpActionResult GetJournalType(GridRequestModel request)
 {
     return(Ok(_service.GetJournalTypeGridData(request)));
 }
Beispiel #20
0
 public IHttpActionResult GetRole(GridRequestModel request)
 {
     return(Ok(_roleService.RoleGridView(request).Data));
 }
        public ActionResult Get(GridRequestModel gridRequestModel, SupplierModel searchModel, bool _search)
        {
            var data = _supplierService.Get(gridRequestModel, _search ? searchModel : null);

            return Json(data, JsonRequestBehavior.AllowGet);
        }
Beispiel #22
0
 public IHttpActionResult GetRepost(GridRequestModel request, DateTime startDate, DateTime endDate)
 {
     return(Ok(_service.GetSalesReportGridData(request, startDate, endDate)));
 }
Beispiel #23
0
 public IHttpActionResult GetCustomer(GridRequestModel request)
 {
     return(Ok(_service.GetGridData(request)));
 }
Beispiel #24
0
 public IHttpActionResult GetJournal(GridRequestModel request, DateTime startDate, DateTime endDate)
 {
     return(Ok(_service.GetGridData(request, startDate, endDate)));
 }
        public ActionResult Get(GridRequestModel gridRequestModel, ProductModel searchModel, bool _search)
        {
            if (searchModel.ProductTypeId > 0 || searchModel.SupplierId > 0)  _search = true;
            var data = _productService.Get(gridRequestModel, _search ? searchModel : null);

            return Json(data, JsonRequestBehavior.AllowGet);
        }
Beispiel #26
0
        public SalesReportViewModel <SaleViewModel> GetSalesReportGridData(GridRequestModel request, DateTime startDate, DateTime endDate)
        {
            SalesReportViewModel <SaleViewModel> gridData = new SalesReportViewModel <SaleViewModel>();

            endDate = endDate.AddDays(1);

            var query = _repository.GetAllActive(getCreatedCompanyId())
                        .Where(x => x.Created >= startDate && x.Created <= endDate)
                        .Include(x => x.SalesDetails)
                        .Include(x => x.SalesDetails.Select(y => y.Product))
                        .Include(x => x.SalesDetails.Select(y => y.Product.Group))
                        .Include(x => x.SalesDetails.Select(y => y.Product.Brand))
                        .Include(x => x.Customer);

            var invoiceNo = request.Keyword.Contains("PB1-");

            if (request.Keyword == "")
            {
                gridData.Count = _repository.GetAllActive(getCreatedCompanyId())
                                 .Where(x => x.Created >= startDate && x.Created <= endDate).Count();

                gridData.DueCount = _repository.GetAllActive(getCreatedCompanyId())
                                    .Where(x => x.Created >= startDate && x.Created <= endDate && x.Due > 0).Count();

                gridData.TotalAmount = _repository.GetAllActive(getCreatedCompanyId())
                                       .Where(x => x.Created >= startDate && x.Created <= endDate).Sum(x => (decimal?)x.Amount) ?? 0;

                gridData.TotalDue = _repository.GetAllActive(getCreatedCompanyId())
                                    .Where(x => x.Created >= startDate && x.Created <= endDate && x.Due > 0).Sum(x => (decimal?)x.Due) ?? 0;

                gridData.Profit = _repository.GetAllActive(getCreatedCompanyId())
                                  .Where(x => x.Created >= startDate && x.Created <= endDate && x.Profit > 0).Sum(x => (decimal?)x.Profit) ?? 0;
            }
            else if (invoiceNo)
            {
                gridData.Count = _repository.GetAllActive(getCreatedCompanyId())
                                 .Where(x => x.InvoiceNo.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate).Count();

                gridData.DueCount = _repository.GetAllActive(getCreatedCompanyId())
                                    .Where(x => x.InvoiceNo.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Due > 0).Count();

                gridData.TotalAmount = _repository.GetAllActive(getCreatedCompanyId())
                                       .Where(x => x.InvoiceNo.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate).Sum(x => (decimal?)x.Amount) ?? 0;

                gridData.TotalDue = _repository.GetAllActive(getCreatedCompanyId())
                                    .Where(x => x.InvoiceNo.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Due > 0).Sum(x => (decimal?)x.Due) ?? 0;

                gridData.Profit = _repository.GetAllActive(getCreatedCompanyId())
                                  .Where(x => x.InvoiceNo.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Profit > 0).Sum(x => (decimal?)x.Profit) ?? 0;

                query = query.Where(x => x.InvoiceNo.Contains(request.Keyword));
            }
            else
            {
                if (request.Keyword.Contains("01"))
                {
                    gridData.Count = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                     .Where(x => x.Customer.Phone.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate).Count();

                    gridData.DueCount = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                        .Where(x => x.Customer.Phone.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Due > 0).Count();

                    gridData.TotalAmount = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                           .Where(x => x.Customer.Phone.Contains(request.Keyword) && x.Customer.Name.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate).Sum(x => (decimal?)x.Amount) ?? 0;

                    gridData.TotalDue = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                        .Where(x => x.Customer.Phone.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Due > 0).Sum(x => (decimal?)x.Due) ?? 0;

                    gridData.Profit = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                      .Where(x => x.Customer.Phone.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Profit > 0).Sum(x => (decimal?)x.Profit) ?? 0;

                    query = query.Where(x => x.Customer.Phone.Contains(request.Keyword));
                }
                else
                {
                    gridData.Count = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                     .Where(x => x.Customer.Name.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate).Count();

                    gridData.DueCount = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                        .Where(x => x.Customer.Name.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Due > 0).Count();

                    gridData.TotalAmount = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                           .Where(x => x.Customer.Name.Contains(request.Keyword) && x.Customer.Name.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate).Sum(x => (decimal?)x.Amount) ?? 0;

                    gridData.TotalDue = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                        .Where(x => x.Customer.Name.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Due > 0).Sum(x => (decimal?)x.Due) ?? 0;

                    gridData.Profit = _repository.GetAllActive(getCreatedCompanyId()).Include(x => x.Customer)
                                      .Where(x => x.Customer.Name.Contains(request.Keyword) && x.Created >= startDate && x.Created <= endDate && x.Profit > 0).Sum(x => (decimal?)x.Profit) ?? 0;

                    query = query.Where(x => x.Customer.Name.Contains(request.Keyword));
                }
            }



            if (request.IsAscending)
            {
                switch (request.OrderBy)
                {
                case "InvoiceNo": query = query.OrderBy(l => l.InvoiceNo); break;

                case "Due": query = query.OrderBy(l => l.Due); break;

                case "Created": query = query.OrderBy(l => l.Created); break;

                default: query = query.OrderBy(l => l.Created); break;
                }
            }
            else
            {
                switch (request.OrderBy)
                {
                case "InvoiceNo": query = query.OrderByDescending(l => l.InvoiceNo); break;

                case "Due": query = query.OrderByDescending(l => l.Due); break;

                case "Created": query = query.OrderByDescending(l => l.Created); break;

                default: query = query.OrderByDescending(l => l.Created); break;
                }
            }


            query = query.Skip(((request.Page - 1) * request.PerPageCount)).Take(request.PerPageCount);

            List <Sale> sales = query.ToList();

            foreach (var sale in sales)
            {
                gridData.Data.Add(new SaleViewModel(sale));
            }

            return(gridData);
        }