Ejemplo n.º 1
0
        public async Task <IActionResult> DeleteItem(int id)
        {
            try
            {
                var item = await _projectRepository.FindByIdAsync(id);

                if (item == null)
                {
                    return(NotFound());
                }
                else
                {
                    // удалить все связанные записи...
                    var tasks = await _projectTaskRepository.FindAsync(e => e.ProjectId.Equals(id) && !e.Deleted);

                    foreach (var task in tasks)
                    {
                        task.Deleted = true;
                    }

                    item.Deleted = true;
                    await _projectRepository.EditAsync(item);

                    if (tasks.Count > 0)
                    {
                        await _projectTaskRepository.EditAsync(tasks.ToList());
                    }

                    return(NoContent());
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <ProjectTaskViewModel> > UpdateItem([FromForm] ProjectTaskViewModel item)
        {
            try
            {
                var existItem = await _projectTaskRepository.ProjectTaskByIdAsync(item.ProjectTaskId);

                if (existItem == null)
                {
                    return(NotFound());
                }

                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("Выбранный статус не найден"));
                }

                existItem.Block = await BlockByIdAsync(item.BlockId);

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

                existItem.Details       = item.Details;
                existItem.Note          = item.Note;
                existItem.Priority      = item.Priority;
                existItem.DurationHours = item.DurationHours;

                existItem.StartPlan = item.StartPlan;
                existItem.EndPlan   = item.EndPlan;

                existItem.StartFact = item.StartFact;
                existItem.EndFact   = item.EndFact;

                existItem.EffectAfterHours = item.EffectAfterHours;
                existItem.EffectAfterHours = item.EffectAfterHours;

                existItem.Important = item.Important;

                existItem.DateEdited = DateTime.Now;

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

                var newPerformers = new List <User>();

                if (!string.IsNullOrEmpty(item.Users))
                {
                    existItem.ProjectTaskPerformers ??= new List <ProjectTaskPerformer>();

                    var userIds = item.Users.Split(",").Select(e => int.Parse(e)).ToList();

                    foreach (var p in existItem.ProjectTaskPerformers)
                    {
                        // пользователя нет в новых данных
                        if (!userIds.Any(e => e == p.UserId))
                        {
                            p.Deleted = true;
                        }
                    }

                    foreach (int userId in userIds)
                    {
                        // проверяем
                        if (!existItem.ProjectTaskPerformers.Any(e => e.UserId.Equals(userId) && !e.Deleted))
                        {
                            var user = await _userRepository.FindByIdAsync(userId);

                            if (user != null)
                            {
                                existItem.ProjectTaskPerformers.Add(new ProjectTaskPerformer()
                                {
                                    User = user
                                });

                                newPerformers.Add(user);
                            }
                        }
                    }
                }
                else if (existItem.ProjectTaskPerformers != null && existItem.ProjectTaskPerformers.Count > 0)
                {
                    foreach (var p in existItem.ProjectTaskPerformers)
                    {
                        p.Deleted = true;
                    }
                }

                await _projectTaskRepository.EditAsync(existItem);

                //тут - для новых пользователей создается почтовое уведомление о задаче
                await _mailRepository.CreateMailsForNewPerformersAsync(newPerformers, existItem);

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