private IQueryable <Application> BuildQueryForAdministrator(ApplicationsFilter filter)
        {
            var query = UnitOfWork.Repository <IApplicationRepository>().GetAll(true);

            if (filter.State.HasValue)
            {
                if (filter.State.Value != ApplicationState.Deleted)
                {
                    query = query.Where(app => !app.IsDeleted);
                }
                query = query.Where(app => app.State == filter.State.Value);
            }
            else
            {
                query = query.Where(app => !app.IsDeleted);
            }

            if (filter.CreatedFrom.HasValue)
            {
                query = query.Where(app => app.Created >= filter.CreatedFrom.Value);
            }

            if (filter.CreatedTo.HasValue)
            {
                query = query.Where(app => app.Created <= filter.CreatedTo.Value);
            }

            return(query.OrderByDescending(app => app.Created));
        }
        private IQueryable <Application> BuildQueryForCarService(ApplicationsFilter filter, string currentUserId)
        {
            var query = UnitOfWork.Repository <IApplicationRepository>().GetAll(true)
                        .Where(app => !app.IsDeleted && app.Service != null && app.Service.ApplicationUser.Id == currentUserId);

            if (filter.State.HasValue)
            {
                query = query.Where(app => app.State == filter.State.Value);
            }

            if (filter.CreatedFrom.HasValue)
            {
                query = query.Where(app => app.Created >= filter.CreatedFrom.Value);
            }

            if (filter.CreatedTo.HasValue)
            {
                query = query.Where(app => app.Created <= filter.CreatedTo.Value);
            }

            return(query.OrderByDescending(app => app.Created));
        }
        public CollectionResult <ApplicationShortInfoForServiceDto> GetApplicationsForService(ApplicationsFilter filter, string currentUserId)
        {
            UserManager.IsUserInCarServiceRole(currentUserId);

            if (filter == null)
            {
                filter = new ApplicationsFilter
                {
                    CurrentPage  = Common.Constants.FilterConstants.DefaultCurrentPage,
                    ItemsPerPage = Common.Constants.FilterConstants.DefaultItemsPerPage
                };
            }

            var result = Paginate(filter.CurrentPage, filter.ItemsPerPage, BuildQueryForCarService(filter, currentUserId), out var itemsCount)
                         .ToList()
                         .Select(item =>
            {
                var dto         = Mapper.Map <ApplicationShortInfoForServiceDto>(item);
                dto.OfferId     = item.Offers.FirstOrDefault(of => !of.IsDeleted && of.Service.ApplicationUser.Id == currentUserId)?.Id;
                dto.WorkClasses = item.WorkTypes
                                  .GroupBy(y => y.Class.Name)
                                  .Select(y => new WorkClassDto
                {
                    Name  = y.Key,
                    Types = Mapper.Map <IEnumerable <WorkTypeDto> >(y.ToList())
                })
                                  .ToList();
                return(dto);
            });

            return(new CollectionResult <ApplicationShortInfoForServiceDto>
            {
                ItemsCount = itemsCount,
                CurrentPage = filter.CurrentPage,
                ItemsPerPage = filter.ItemsPerPage,
                Items = result
            });
        }
        public CollectionResult <ApplicationShortInfoForAdministratorDto> GetApplicationsForAdministrator(ApplicationsFilter filter, string currentUserId)
        {
            UserManager.IsUserInAdministrationRole(currentUserId);

            if (filter == null)
            {
                filter = new ApplicationsFilter
                {
                    CurrentPage  = Common.Constants.FilterConstants.DefaultCurrentPage,
                    ItemsPerPage = Common.Constants.FilterConstants.DefaultItemsPerPage
                };
            }

            var result = Paginate(filter.CurrentPage, filter.ItemsPerPage, BuildQueryForAdministrator(filter), out var itemsCount)
                         .ToList()
                         .Select(x =>
            {
                var dto         = Mapper.Map <ApplicationShortInfoForAdministratorDto>(x);
                dto.WorkClasses = x.WorkTypes
                                  .GroupBy(y => y.Class.Name)
                                  .Select(y => new WorkClassDto
                {
                    Name  = y.Key,
                    Types = Mapper.Map <IEnumerable <WorkTypeDto> >(y.ToList())
                })
                                  .ToList();
                return(dto);
            });

            return(new CollectionResult <ApplicationShortInfoForAdministratorDto>
            {
                ItemsCount = itemsCount,
                CurrentPage = filter.CurrentPage,
                ItemsPerPage = filter.ItemsPerPage,
                Items = result
            });
        }
        private IQueryable <Application> BuildQueryForUser(ApplicationsFilter filter, string currentUserId)
        {
            var query = UnitOfWork.Repository <IApplicationRepository>().GetAll(true)
                        .Include(app => app.WorkTypes)
                        .Where(app => app.Car.User.ApplicationUser.Id == currentUserId);

            if (filter.State.HasValue)
            {
                if (filter.State.Value != ApplicationState.Deleted)
                {
                    query = query.Where(app => !app.IsDeleted);
                }
                query = query.Where(app => app.State == filter.State.Value);
            }
            else
            {
                query = query.Where(app => !app.IsDeleted);
            }

            if (filter.CreatedFrom.HasValue)
            {
                query = query.Where(app => app.Created >= filter.CreatedFrom.Value);
            }

            if (filter.CreatedTo.HasValue)
            {
                query = query.Where(app => app.Created <= filter.CreatedTo.Value);
            }

            if (filter.CarId.HasValue)
            {
                query = query.Where(app => app.Car.Id == filter.CarId.Value);
            }

            return(query.OrderByDescending(app => app.Created));
        }
 public IHttpActionResult GetInfosForService(ApplicationsFilter filter)
 {
     return(CallBusinessLogicActionWithResult(() => _manager.GetApplicationsForService(filter, User.Identity.GetUserId())));
 }