예제 #1
0
        /// <summary>
        /// Method for getting a list of all roles
        /// </summary>
        /// <param name = "model"> Search Model </param>
        /// <param name = "onlyActive"> Activity flag </param>
        /// <returns> </returns>
        public RoleListVm GetAllPaged(PaginatedQueryM model, bool onlyActive)
        {
            var listRoles = onlyActive
                ? _context.Roles.Where(x => x.Status == RoleStatuses.Active)
                : _context.Roles;
            var total = listRoles.Count();
            var roles = listRoles
                        .Skip(Pagination.CalculateSkip(model.PageSize, model.Page, total))
                        .Take(model.PageSize)
                        .OrderBy(x => x.Name)
                        .ToList();

            var rolesIds = roles.Select(v => v.Id).ToList();

            var usersCount =
                (from u in _context.Users
                 join ur in _context.UserRoles on u.Id equals ur.UserId
                 join r in _context.Roles on ur.RoleId equals r.Id
                 where rolesIds.Contains(r.Id) && u.Status == UserStatuses.Active
                 group r by r.Id
                 into g
                 select new { RoleId = g.Key, Count = g.Count() }).ToDictionary(v => v.RoleId, v => v.Count);

            foreach (var role in roles)
            {
                usersCount.TryGetValue(role.Id, out var value);
                role.ActiveUsers = value;
            }

            return(RoleListVm.Create(roles.Select(RoleVm.Create), total,
                                     (int)Math.Ceiling((double)total / model.PageSize)));
        }
예제 #2
0
        public async Task <SearchVm <QueueLogVm> > GetQueueLog(int queueId, PaginatedQueryM query)
        {
            var queue = await _dbContext.DataSourceQueues.Include(x => x.DataSource).FirstAsync(x => x.Id == queueId);

            switch (queue.DataSource.DataSourceUploadType)
            {
            case DataSourceUploadTypes.StatUnits:
                return(await GetQueueLogForStatUnitUpload(queueId, query));

            case DataSourceUploadTypes.Activities:
                return(await GetQueueLogForActivityUpload(queueId, query));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #3
0
        /// <summary>
        /// Method for obtaining a list of regions
        /// </summary>
        /// <param name = "model"> Model </param>
        /// <param name = "predicate"> Predicate </param>
        /// <returns> </returns>
        public async Task <SearchVm <Region> > ListAsync(PaginatedQueryM model,
                                                         Expression <Func <Region, bool> > predicate = null)
        {
            IQueryable <Region> query = _context.Regions;

            if (predicate != null)
            {
                query = query.Where(predicate);
            }
            var total = await query.CountAsync();

            var regions = await query.OrderBy(v => v.Code)
                          .Skip(Pagination.CalculateSkip(model.PageSize, model.Page, total))
                          .Take(model.PageSize)
                          .ToListAsync();

            return(SearchVm <Region> .Create(regions, total));
        }
예제 #4
0
 public async Task <IActionResult> List([FromQuery] PaginatedQueryM model) =>
 Ok(await _regionsService.ListAsync(model));
예제 #5
0
 public IActionResult GetAllRoles(
     [FromQuery] PaginatedQueryM model,
     bool onlyActive = true) =>
 Ok(_roleService.GetAllPaged(model, onlyActive));
예제 #6
0
        private async Task <SearchVm <QueueLogVm> > GetQueueLogForStatUnitUpload(int queueId, PaginatedQueryM query)
        {
            var orderBy   = string.IsNullOrEmpty(query.SortBy) ? nameof(DataUploadingLog.Id) : query.SortBy;
            var orderRule = query.SortAscending ? "ASC" : "DESC";
            var filtered  = _dbContext.DataUploadingLogs
                            .Where(x => x.DataSourceQueueId == queueId)
                            .OrderBy($"{orderBy} {orderRule}");

            var total = await filtered.CountAsync();

            var result = await filtered
                         .Skip(Pagination.CalculateSkip(query.PageSize, query.Page, total))
                         .Take(query.PageSize)
                         .AsNoTracking()
                         .ToListAsync();

            return(SearchVm <QueueLogVm> .Create(result.Select(QueueLogVm.Create), total));
        }
예제 #7
0
        private async Task <SearchVm <QueueLogVm> > GetQueueLogForActivityUpload(int queueId, PaginatedQueryM query)
        {
            var orderBy   = string.IsNullOrEmpty(query.SortBy) ? nameof(DataUploadingLog.Id) : query.SortBy;
            var orderRule = query.SortAscending ? "ASC" : "DESC";
            var filtered  = _dbContext.DataUploadingLogs
                            .Where(x => x.DataSourceQueueId == queueId)
                            .OrderBy($"{orderBy} {orderRule}")
                            .GroupBy(x => x.TargetStatId);
            var total = await filtered.CountAsync();

            var result = (await filtered
                          .Skip(Pagination.CalculateSkip(query.PageSize, query.Page, total))
                          .Take(query.PageSize)
                          .AsNoTracking()
                          .ToListAsync())
                         .Select(x => new DataUploadingLog
            {
                DataSourceQueue = x.FirstOrDefault()?.DataSourceQueue,
                EndImportDate   = x.Select(y => y.EndImportDate).Max(),
                StartImportDate = x.Select(y => y.StartImportDate).Max(),
                TargetStatId    = x.FirstOrDefault()?.TargetStatId,
                StatUnitName    = x.FirstOrDefault()?.StatUnitName,
                Status          = x.Any(y => y.Status == DataUploadingLogStatuses.Error)
                        ? DataUploadingLogStatuses.Error
                        : x.Any(y => y.Status == DataUploadingLogStatuses.Warning)
                            ? DataUploadingLogStatuses.Warning
                            : DataUploadingLogStatuses.Done,
                Note = x.FirstOrDefault()?.Note,
            });

            return(SearchVm <QueueLogVm> .Create(result.Select(QueueLogVm.Create), total));
        }
예제 #8
0
 public async Task <IActionResult> GetQueueLog(int queueId, [FromQuery] PaginatedQueryM query) =>
 Ok(await _svc.GetQueueLog(queueId, query));