From 0c5e7a5b492e001677446b586fa36b0d4437b166 Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Fri, 27 Mar 2026 10:11:30 +0100 Subject: [PATCH] Bearbeiten in der ComplexSelectionView --- .../AiPromptbausteinComplexSelectionView.xaml | 73 +++++- ...PromptbausteinComplexSelectionView.xaml.cs | 61 ++++- ...PromptbausteinComplexSelectionViewModel.cs | 210 ++++++++++++++++++ 3 files changed, 342 insertions(+), 2 deletions(-) diff --git a/BeWo/View/Detail/AI/AiPromptbausteinComplexSelectionView.xaml b/BeWo/View/Detail/AI/AiPromptbausteinComplexSelectionView.xaml index 2f4f76926..18f2bb075 100644 --- a/BeWo/View/Detail/AI/AiPromptbausteinComplexSelectionView.xaml +++ b/BeWo/View/Detail/AI/AiPromptbausteinComplexSelectionView.xaml @@ -3,6 +3,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ai="clr-namespace:BeWo.ViewModel.View.AI" + xmlns:local1="clr-namespace:BeWo.View.Detail.AI" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:local="clr-namespace:BeWo.View.Detail.AI" @@ -46,16 +47,48 @@ x:Name="treeView" MinHeight="100" Padding="4,16,4,16" + AllowDrop="True" + ContextMenuOpening="treeView_ContextMenuOpening" ItemContainerStyle="{DynamicResource igoal_treeitemstyle}" ItemTemplate="{StaticResource ai_promptbaustein_folder_itemtemplate}" ItemsSource="{Binding Folders.VMList, UpdateSourceTrigger=PropertyChanged}" - SelectedItemChanged="treeView_SelectedItemChanged"> + PreviewMouseDown="Grid_PreviewMouseDown" + PreviewMouseRightButtonDown="OnPreviewMouseRightButtonDown" + SelectedItemChanged="treeView_SelectedItemChanged" + TreeViewItem.Selected="treeView_Selected"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CopiedFolder is object; + public bool HasCopiedPrompt => CopiedPrompt is object; + public CompactEmployeeDC CurrentEmployee => BeWoApp.CompactLoggedOnEmployee; + public AiPromptbausteinSelectionComplexViewModel() { SendCommand = new DelegateCommand(Send, CanSend, true); @@ -34,6 +63,8 @@ namespace BeWo.ViewModel.View.AI public AiPromptbausteinSelectionComplexViewModel(AiActionType aiActionType) : this() { AiActionType = aiActionType; + WindowService = BeWoApp.MainControl.WindowService; + InitCommands(); } public AiPromptbausteinSelectionComplexViewModel(AiActionType aiActionType, AiPromptbausteinFolderListVM viewModel, bool isFavorite = false) : this(aiActionType) { @@ -42,6 +73,20 @@ namespace BeWo.ViewModel.View.AI IsFavorite = isFavorite; } + private void InitCommands() + { + OpenAddFolderDialogCommand = new DelegateCommand(OpenAddFolderDialog, canOpenAddFolderDialog, false); + OpenEditFolderDialogCommand = new DelegateCommand(OpenEditFolderDialog, canOpenEditFolderDialog, false); + DeleteFolderCommand = new DelegateCommand(DeleteFolder, canDeleteFolder, false); + + OpenAddPromptDialogCommand = new DelegateCommand(OpenAddPromptDialog, canOpenAddPromptDialog, false); + OpenEditPromptDialogCommand = new DelegateCommand(OpenEditPromptDialog, canOpenEditPromptDialog, false); + DeletePromptCommand = new DelegateCommand(OpenDeletePromptDialog, canOpenDeletePromptDialog, false); + ChangeFavoritenStatePromptCommand = new DelegateCommand(ChangeFavoritenStatePrompt, canChangeFavoritenStatePrompt, false); + + CanEditPromptbausteine = BeWoApp.HasLoggedOnUserRight(UserRightType.AiModulePromptbausteineEdit); + } + public bool IsFavorite { get; set; } public DelegateCommand SendCommand { get; set; } @@ -120,7 +165,172 @@ namespace BeWo.ViewModel.View.AI private void UpdateVMList(AiPromptbausteinFolderListVM new_list) { Folders = new_list; + if (Folders.VMList.Count > 0 && Folders.VMList[0].DataContract.Oid == -5) + Favoriten = Folders.VMList[0]; FirePropertyChanged(nameof(Folders)); } + + public void UpdateFolderCommands() + { + OpenAddFolderDialogCommand?.RaiseCanExecuteChanged(); + OpenEditFolderDialogCommand?.RaiseCanExecuteChanged(); + CopyFolderCommand?.RaiseCanExecuteChanged(); + PasteFolderCommand?.RaiseCanExecuteChanged(); + DeleteFolderCommand?.RaiseCanExecuteChanged(); + } + public void UpdatePromptCommands() + { + OpenAddPromptDialogCommand?.RaiseCanExecuteChanged(); + OpenEditPromptDialogCommand?.RaiseCanExecuteChanged(); + CopyPromptCommand?.RaiseCanExecuteChanged(); + PastePromptCommand?.RaiseCanExecuteChanged(); + DeletePromptCommand?.RaiseCanExecuteChanged(); + ChangeFavoritenStatePromptCommand?.RaiseCanExecuteChanged(); + } + + // --- Folder Commands --- + + void OpenAddFolderDialog() + { + var sel_folder = SelectedFolder; + var new_vm = sel_folder.SubFolders.CreateNewVM(); + + new_vm.Creator = CurrentEmployee; + new_vm.Parent = sel_folder; + new_vm.ParentFolderOid = sel_folder?.DataContract?.Oid; + new_vm.CanAddFolder = true; + new_vm.CanAddPrompt = true; + new_vm.CanEdit = true; + new_vm.ActionType = AiActionType; + + var vm = new AiPromptbausteinFolderViewModel(new_vm, true); + + vm.Accept_Button_Clicked += (s, e) => + { + var new_dc = new_vm.CommitToDataContract(); + + ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinFolder(new List { new_dc }), + (new_dcs) => ReloadVMList()); + }; + + WindowService.Show(vm); + } + void OpenEditFolderDialog() + { + var sel_folder = SelectedFolder; + var sel_dc = sel_folder.CopyToEmptyDataContract(); + sel_dc.CanEdit = SelectedFolder.CanEdit; + var edit_vm = new AiPromptbausteinFolderVM(sel_dc); + + var vm = new AiPromptbausteinFolderViewModel(edit_vm, false); + + vm.Accept_Button_Clicked += (s, e) => + { + var edit_dc = edit_vm.CommitToDataContract(); + + ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinFolder(new List { edit_dc }), + (update_dc) => ReloadVMList()); + }; + + WindowService.Show(vm); + } + void DeleteFolder() + { + var sel_folder = SelectedFolder; + var parent = sel_folder.Parent; + + var result = MessageBox.Show("Möchten Sie den ausgewählten Ordner wirklich löschen?", "Hinweis", MessageBoxButton.OKCancel); + if (result != MessageBoxResult.OK) + return; + + var oid2version = new Dictionary() + { + {sel_folder.DataContract.Oid.Value, sel_folder.DataContract.Version.Value} + }; + + ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiPromptbausteinFolder(oid2version), + () => ReloadVMList()); + } + + bool canOpenAddFolderDialog() => CanEditPromptbausteine && (SelectedFolder?.CanAddFolder ?? true); + bool canOpenEditFolderDialog() => CanEditPromptbausteine && (SelectedFolder?.CanEdit ?? false); + bool canDeleteFolder() => CanEditPromptbausteine && (SelectedFolder?.CanEdit ?? false); + + // --- Prompt Commands --- + + void OpenAddPromptDialog() + { + var sel_folder = SelectedFolder; + var new_vm = sel_folder.SubPrompts.CreateNewVM(); + + new_vm.Creator = CurrentEmployee; + new_vm.ParentFolderOid = sel_folder.DataContract.Oid; + new_vm.ShowPrompt = true; + new_vm.ShowPromptByTenant = true; + new_vm.CanEdit = true; + new_vm.ActionType = AiActionType; + + var vm = new AiPromptbausteinPromptViewModel(new_vm, true); + + vm.Accept_Button_Clicked += (s, e) => + { + var new_dc = new_vm.CommitToDataContract(); + + ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinPrompt(new List { new_dc }), + (new_dcs) => ReloadVMList()); + }; + + WindowService.Show(vm); + } + void OpenEditPromptDialog() + { + var sel_prompt = SelectedPrompt; + var sel_dc = sel_prompt.CopyToEmptyDataContract(); + sel_dc.CanEdit = SelectedPrompt.CanEdit; + var edit_vm = new AiPromptbausteinPromptVM(sel_dc); + + var vm = new AiPromptbausteinPromptViewModel(edit_vm, false); + + vm.Accept_Button_Clicked += (s, e) => + { + var edit_dc = edit_vm.CommitToDataContract(); + + ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinPrompt(new List { edit_dc }), + (update_dc) => ReloadVMList()); + }; + + WindowService.Show(vm); + } + void OpenDeletePromptDialog() + { + var sel_prompt = SelectedPrompt; + var folder = SelectedFolder; + + var result = MessageBox.Show("Möchten Sie den ausgewählten Prompt wirklich löschen?", "Hinweis", MessageBoxButton.OKCancel); + if (result != MessageBoxResult.OK) + return; + + var oid2version = new Dictionary() + { + {sel_prompt.DataContract.Oid.Value, sel_prompt.DataContract.Version.Value} + }; + + ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiPromptbausteinPrompt(oid2version), + () => ReloadVMList()); + } + void ChangeFavoritenStatePrompt() + { + var sel_prompt = SelectedPrompt; + sel_prompt.IsFavorite = !sel_prompt.IsFavorite; + var edit_dc = sel_prompt.CommitToDataContract(); + + ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinPrompt(new List { edit_dc }), + (update_dc) => ReloadVMList()); + } + + bool canOpenAddPromptDialog() => CanEditPromptbausteine && (SelectedFolder?.CanAddPrompt ?? false); + bool canOpenEditPromptDialog() => SelectedPrompt is object; + bool canOpenDeletePromptDialog() => CanEditPromptbausteine && (SelectedPrompt?.CanEdit ?? false); + bool canChangeFavoritenStatePrompt() => SelectedPrompt is object; } }