Ejemplo n.º 1
0
        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, ""));
        }