public async Task <IActionResult> StatisticByStatus( [FromQuery] TodoStatusEnum status, [FromQuery] DateTime?fromDate, [FromQuery] DateTime?toDate ) { ViewBag.currentFromDateParam = fromDate; ViewBag.currentToDateParam = toDate; ApplicationUser currentUser = await _userManager.GetUserAsync(User); var queryable = _context.Todos.AsQueryable(); if (fromDate != null) { queryable = queryable.Where(x => x.CreatedAt >= fromDate); } if (toDate != null) { queryable = queryable.Where(x => x.CreatedAt <= toDate); } var todos = await queryable .Where(x => x.Status == status) .Include(x => x.PersonInCharge) .ToListAsync(); ViewBag.UserId = currentUser.Id; return(View(_mapper.Map <List <TodoViewModel> >(todos))); }
public async Task <AjaxResultViewModel> ChangeStatusOfTodo( int todoId, TodoStatusEnum newStatus, ApplicationUser currentUser ) { var todo = await _context.Todos .SingleOrDefaultAsync(x => x.Id == todoId); if (todo == null) { return(new AjaxResultViewModel(false, $"Todo with id {todoId} does not exist")); } TodoStatusEnum oldStatus = todo.Status; /** Only allow user who own this todo or boss can add participant to this todo */ if (currentUser.Id != todo.PersonInChargeId) { bool isBoss = await _userManager.IsInRoleAsync( currentUser, RoleNameEnum.Boss); if (!isBoss) { return(new AjaxResultViewModel(false, "You don't have a permission to change status of this task")); } } todo.Status = newStatus; _context.Todos.Update(todo); await _activityServices.TrackActivity( currentUser.FirstName, currentUser.LastName, currentUser.Email, ActivityTypeEnum.RemoveAParticipantFromTodo, $"\"{todo.Name}\" from \"{oldStatus.ToString()}\" to \"{newStatus.ToString()}\"", currentUser.Id, _context ); await _context.SaveChangesAsync(); return(new AjaxResultViewModel(true, "")); }