Ejemplo n.º 1
0
        public async Task <ActionResult <ProjectTaskViewModel> > CreateItem([FromForm] ProjectTaskViewModel item)
        {
            try
            {
                if (item.ProjectTaskId > 0)
                {
                    return(BadRequest("Идентификатор записи должен быть равен 0"));
                }

                var project = await ProjectByIdAsync(item.ProjectId);

                if (project == null)
                {
                    return(BadRequest("Выбранный проект не найден"));
                }

                var group = await GroupByIdAsync(item.GroupId);

                if (group == null)
                {
                    return(BadRequest("Выбранная группа не найдена"));
                }

                var taskType = await TaskTypeByIdAsync(item.TaskTypeId);

                if (taskType == null)
                {
                    return(BadRequest("Выбранный тип задачи не найден"));
                }

                var taskStatus = await ProjectTaskStatusByIdAsync(item.ProjectTaskStatusId);

                if (taskStatus == null)
                {
                    return(BadRequest("Выбранный статус не найден"));
                }

                var block = await BlockByIdAsync(item.BlockId);

                var newItem = _mapper.Map <ProjectTask>(item);

                newItem.Project    = project;
                newItem.Group      = group;
                newItem.TaskStatus = taskStatus;
                newItem.TaskType   = taskType;

                if (block != null)
                {
                    newItem.Block = block;
                }

                newItem.DateCreated = DateTime.Now;

                var userCreated = (await _userRepository.FindAsync(e => !e.Deleted && e.Login.ToLower().Equals(_userService.userLogin.ToLower()))).SingleOrDefault();
                newItem.LoginCreated = userCreated != null ? userCreated.ShortName : _userService.userLogin;

                newItem.ProjectTaskPerformers = new List <ProjectTaskPerformer>();

                if (!string.IsNullOrEmpty(item.Users))
                {
                    var userIds = item.Users.Split(",").Select(e => int.Parse(e)).ToList();
                    foreach (int userId in userIds)
                    {
                        var user = await _userRepository.FindByIdAsync(userId);

                        newItem.ProjectTaskPerformers.Add(new ProjectTaskPerformer()
                        {
                            User = user
                        });
                    }
                }

                await _projectTaskRepository.CreateAsync(newItem);

                // формируем почтовые уведомления
                await _mailRepository.CreateMailsForNewPerformersAsync(newItem.ProjectTaskPerformers.Select(e => e.User).ToList(), newItem);

                return(_mapper.Map <ProjectTaskViewModel>(newItem));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }