private void RemoveSelectedStory() { if (SelectedStory == null) { return; } _menuBasedShellViewModel.IsLoadingData = true; new Task(() => { try { _storiesDataModel.Remove(SelectedStory.Story); ComponentsContainer.Get <Dispatcher>().Invoke( delegate { AllUserStories.Remove(SelectedStory); }); HideDialog?.Invoke(this, null); } catch (Exception ex) { ShowMessage($"User story doesn't removed: technical issues encountered."); _logger.Fatal(ex); } _menuBasedShellViewModel.IsLoadingData = false; }).Start(); }
private void EditSelectedStory() { if (StoryDialogViewModel == null) { return; } if (!StoryDialogViewModel.CanExecuteConfirmCommand(null)) { return; } if (SelectedStory == null) { return; } _menuBasedShellViewModel.IsLoadingData = true; new Task(() => { try { StoryItem newStoryItem = SelectedStory.Clone() as StoryItem; newStoryItem.Name = StoryDialogViewModel.Name; newStoryItem.Importance = StoryDialogViewModel.Importance; newStoryItem.InitialEstimate = StoryDialogViewModel.InitialEstimate; newStoryItem.Status = StoryDialogViewModel.Status; newStoryItem.HowToDemo = StoryDialogViewModel.HowToDemo; newStoryItem.Notes = StoryDialogViewModel.Notes; string previousStatus = SelectedStory.Status; string newStatus = newStoryItem.Status; if (previousStatus != newStatus) // status was changed { if (previousStatus == _storyStatusesDataModel.GetStatusText(StoryStatus.WaitingForExecutor)) // it was "WaitingForExecutor" status { newStoryItem.ExecutorId = _menuBasedShellViewModel.CurrentUser.Id; } else if (previousStatus == _storyStatusesDataModel.GetStatusText(StoryStatus.InProgress)) // it was "InProgress" status { if (newStoryItem.ExecutorId != _menuBasedShellViewModel.CurrentUser.Id) { StoryDialogViewModel.ErrorMessage = "You can't change the task executing by another user."; StoryDialogViewModel.ShowErrorMessage = true; _menuBasedShellViewModel.IsLoadingData = false; return; } else { newStoryItem.ExecutorId = (newStatus == _storyStatusesDataModel.GetStatusText(StoryStatus.WaitingForExecutor)) ? 0 : _menuBasedShellViewModel.CurrentUser.Id; } } else if (previousStatus == _storyStatusesDataModel.GetStatusText(StoryStatus.Completed)) // it was "Completed" status { if (newStoryItem.ExecutorId != _menuBasedShellViewModel.CurrentUser.Id) { StoryDialogViewModel.ErrorMessage = "You can't change the task executed by another user."; StoryDialogViewModel.ShowErrorMessage = true; _menuBasedShellViewModel.IsLoadingData = false; return; } else { newStoryItem.ExecutorId = (newStatus == _storyStatusesDataModel.GetStatusText(StoryStatus.WaitingForExecutor)) ? 0 : _menuBasedShellViewModel.CurrentUser.Id; } } } if (SelectedStory.Equals(newStoryItem)) { StoryDialogViewModel.ErrorMessage = "Story data is not changed"; StoryDialogViewModel.ShowErrorMessage = true; _menuBasedShellViewModel.IsLoadingData = false; return; } List <StoryItem> storyItemsWithTheSameName = AllUserStories.Where(si => si.Name == newStoryItem.Name).ToList(); if (storyItemsWithTheSameName.Count > 0) { if (storyItemsWithTheSameName.First().Id != newStoryItem.Id) { StoryDialogViewModel.ErrorMessage = $"Story with name '{newStoryItem.Name}' already exists."; StoryDialogViewModel.ShowErrorMessage = true; _menuBasedShellViewModel.IsLoadingData = false; return; } } _logger.Debug($"Started editing story with id '{SelectedStory.Id}'."); _storiesDataModel.Update(newStoryItem.Story); StoryItem item = AllUserStories.FirstOrDefault(s => s.Id == newStoryItem.Id); if (item != null) { ComponentsContainer.Get <Dispatcher>().Invoke( delegate { AllUserStories.Remove(item); newStoryItem.StoryUpdated += OnStoryItemUpdated; AllUserStories.Add(newStoryItem); }); } HideDialog?.Invoke(this, null); } catch (Exception ex) { ShowMessage($"User story doesn't edited: technical issues encountered."); _logger.Fatal(ex); } _menuBasedShellViewModel.IsLoadingData = false; }).Start(); }