private void InitializeCommands() { _requestUserStoryCreation = new Command( new Action( delegate { StoryDialogViewModel = new StoryDialogViewModel(); StoryDialogViewModel.IsStatusEditable = false; StoryDialogViewModel.Status = _storyStatusesDataModel.GetStatusText(StoryStatus.WaitingForExecutor); StoryDialogViewModel.ConfirmSelected += CreateStoryFromDialog; StoryDialogViewModel.CancelSelected += delegate { HideDialog?.Invoke(this, null); }; SetDialog?.Invoke(this, StoryDialogViewModel); }), null); _finishCommand = new Command( new Action( delegate { ConfirmationDialogViewModel = new ConfirmationDialogViewModel(); ConfirmationDialogViewModel.Text = "Do you really want to finish the sprint now?"; ConfirmationDialogViewModel.ConfirmSelected += FinishCurrentSprint; ConfirmationDialogViewModel.CancelSelected += delegate { HideDialog?.Invoke(this, null); }; SetDialog?.Invoke(this, ConfirmationDialogViewModel); }), null); _requestStoryEditing = new Command( parameterizedAction : delegate(object param) { StoryDialogViewModel = new StoryDialogViewModel(); StoryDialogViewModel.IsStatusEditable = true; StoryDialogViewModel.ConfirmSelected += EditSelectedStory; StoryDialogViewModel.CancelSelected += delegate { HideDialog?.Invoke(this, null); }; FillStoryDialog(param); SetDialog?.Invoke(this, StoryDialogViewModel); }, canExecute: null); _requestStoryRemoving = new Command( parameterizedAction : delegate(object param) { ConfirmationDialogViewModel = new ConfirmationDialogViewModel(); ConfirmationDialogViewModel.Text = "Are you sure you want to delete the user story?"; ConfirmationDialogViewModel.ConfirmSelected += RemoveSelectedStory; ConfirmationDialogViewModel.CancelSelected += delegate { HideDialog?.Invoke(this, null); }; SetDialog?.Invoke(this, ConfirmationDialogViewModel); }, canExecute: null); }
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(); }