299 lines
8.2 KiB
C#
299 lines
8.2 KiB
C#
using BeWo.ServiceProxy;
|
|
using BeWo.Services;
|
|
using BeWo.ViewModel.ListViewModel;
|
|
using BS.Shared;
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.DataContracts.Compact;
|
|
using BS.Shared.DataContracts.Feature.AI;
|
|
using BS.Shared.Extensions.CustomInterfaces;
|
|
using DevExpress.Mvvm;
|
|
using DevExpress.Xpf.Layout.Core;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
|
|
namespace BeWo.ViewModel.View.Administration
|
|
{
|
|
public class AiPromptbausteinComplexTreeViewModel : WindowViewModel
|
|
{
|
|
private AiPromptbausteinFolderVM _SelectedFolder;
|
|
|
|
private IBeWoWindowService WindowService { get; set; }
|
|
private AiActionType AiActionType { get; set; }
|
|
|
|
public AiPromptbausteinFolderListVM Folders { get; set; }
|
|
public AiPromptbausteinPromptVM SelectedPrompt { get; set; }
|
|
public AiPromptbausteinFolderVM CopiedFolder { get; set; }
|
|
public AiPromptbausteinPromptVM CopiedPrompt { get; set; }
|
|
|
|
public DelegateCommand OpenAddFolderDialogCommand { get; private set; }
|
|
public DelegateCommand OpenEditFolderDialogCommand { get; private set; }
|
|
public DelegateCommand CopyFolderCommand { get; private set; }
|
|
public DelegateCommand PasteFolderCommand { get; private set; }
|
|
public DelegateCommand DeleteFolderCommand { get; private set; }
|
|
|
|
public DelegateCommand OpenAddPromptDialogCommand { get; private set; }
|
|
public DelegateCommand OpenEditPromptDialogCommand { get; private set; }
|
|
public DelegateCommand CopyPromptCommand { get; private set; }
|
|
public DelegateCommand PastePromptCommand { get; private set; }
|
|
public DelegateCommand DeletePromptCommand { get; private set; }
|
|
|
|
public bool IsEditingMode { get; set; }
|
|
|
|
public AiPromptbausteinFolderVM SelectedFolder
|
|
{
|
|
get => _SelectedFolder;
|
|
set => SetProperty(ref _SelectedFolder, value, nameof(SelectedFolder));
|
|
}
|
|
|
|
|
|
public AiPromptbausteinComplexTreeViewModel() : this(null, AiActionType.ServiceRecordConversation)
|
|
{
|
|
if (BeWoApp.IsInDesignMode)
|
|
{
|
|
ReloadVMList();
|
|
SelectedFolder = Folders.VMList.FirstOrDefault();
|
|
return;
|
|
}
|
|
}
|
|
public AiPromptbausteinComplexTreeViewModel(IBeWoWindowService windowService, AiActionType aiActionType)
|
|
{
|
|
WindowService = windowService;
|
|
AiActionType = aiActionType;
|
|
|
|
OpenAddFolderDialogCommand = new DelegateCommand(OpenAddFolderDialog, canOpenAddFolderDialog, false);
|
|
OpenEditFolderDialogCommand = new DelegateCommand(OpenEditFolderDialog, canOpenEditFolderDialog, false);
|
|
CopyFolderCommand = new DelegateCommand(CopyFolder, canCopyFolder, false);
|
|
PasteFolderCommand = new DelegateCommand(PasteFolder, canPasteFolder, false);
|
|
DeleteFolderCommand = new DelegateCommand(DeleteFolder, canDeleteFolder, false);
|
|
|
|
OpenAddPromptDialogCommand = new DelegateCommand(OpenAddPromptDialog, canOpenAddPromptDialog, false);
|
|
OpenEditPromptDialogCommand = new DelegateCommand(OpenEditPromptDialog, canOpenEditPromptDialog, false);
|
|
CopyPromptCommand = new DelegateCommand(CopyPrompt, canCopyPrompt, false);
|
|
PastePromptCommand = new DelegateCommand(PastePrompt, canPastePrompt, false);
|
|
DeletePromptCommand = new DelegateCommand(OpenDeletePromptDialog, canOpenDeletePromptDialog, false);
|
|
|
|
IsEditingMode = true;
|
|
}
|
|
|
|
|
|
public override bool IsDirty
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public bool HasCopiedFolder => CopiedFolder is object;
|
|
public bool HasCopiedPrompt => CopiedPrompt is object;
|
|
public CompactEmployeeDC CurrentEmployee => BeWoApp.CompactLoggedOnEmployee;
|
|
|
|
|
|
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();
|
|
}
|
|
|
|
public void SaveVMList()
|
|
{
|
|
|
|
}
|
|
internal void ReloadVMList()
|
|
{
|
|
var folders_dc = PredefinedAiPromptbausteinFolders.CreateSubTree(AiActionType);
|
|
|
|
Folders = new AiPromptbausteinFolderListVM(folders_dc);
|
|
|
|
FirePropertyChanged(nameof(Folders));
|
|
}
|
|
public void UpdateVMList(AiPromptbausteinTreeListVM new_list)
|
|
{
|
|
|
|
}
|
|
|
|
void OpenAddFolderDialog()
|
|
{
|
|
var sel_folder = SelectedFolder;
|
|
var new_vm = sel_folder.SubFolders.CreateNewVM();
|
|
|
|
new_vm.Creator = CurrentEmployee;
|
|
new_vm.Parent = sel_folder;
|
|
new_vm.CanAdd = true;
|
|
new_vm.CanEdit = true;
|
|
|
|
var vm = new AiPromptbausteinFolderViewModel(new_vm, true);
|
|
|
|
vm.Accept_Button_Clicked += (s, e) =>
|
|
{
|
|
sel_folder.SubFolders.VMList.Add(new_vm);
|
|
sel_folder.IsExpanded = true;
|
|
};
|
|
|
|
WindowService.Show(vm);
|
|
}
|
|
void OpenEditFolderDialog()
|
|
{
|
|
var sel_folder = SelectedFolder;
|
|
var sel_dc = sel_folder.CommitToDataContract();
|
|
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();
|
|
sel_folder.UpdateByDataContract(edit_dc);
|
|
};
|
|
|
|
WindowService.Show(vm);
|
|
}
|
|
void CopyFolder()
|
|
{
|
|
|
|
}
|
|
void PasteFolder()
|
|
{
|
|
|
|
}
|
|
void DeleteFolder()
|
|
{
|
|
var sel_folder = SelectedFolder;
|
|
var parent = sel_folder.Parent;
|
|
|
|
var txt = "Möchten Sie den ausgewählten Ordner wirklich löschen?";
|
|
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel);
|
|
|
|
if (result != MessageBoxResult.OK)
|
|
return;
|
|
|
|
parent.SubFolders.VMList.Remove(sel_folder);
|
|
}
|
|
|
|
bool canOpenAddFolderDialog()
|
|
{
|
|
return SelectedFolder?.CanAdd ?? true;
|
|
}
|
|
bool canOpenEditFolderDialog()
|
|
{
|
|
return SelectedFolder?.CanEdit ?? false;
|
|
}
|
|
bool canCopyFolder()
|
|
{
|
|
return false;
|
|
//return SelectedFolder.CanEdit;
|
|
}
|
|
bool canPasteFolder()
|
|
{
|
|
return false;
|
|
//return HasCopiedFolder && SelectedFolder.CanAdd;
|
|
}
|
|
bool canDeleteFolder()
|
|
{
|
|
return SelectedFolder?.CanEdit ?? false;
|
|
}
|
|
|
|
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;
|
|
|
|
var vm = new AiPromptbausteinPromptViewModel(new_vm, true);
|
|
|
|
vm.Accept_Button_Clicked += (s, e) =>
|
|
{
|
|
sel_folder.SubPrompts.VMList.Add(new_vm);
|
|
SelectedPrompt = new_vm;
|
|
};
|
|
|
|
WindowService.Show(vm);
|
|
}
|
|
void OpenEditPromptDialog()
|
|
{
|
|
var sel_prompt = SelectedPrompt;
|
|
var sel_dc = sel_prompt.CommitToDataContract();
|
|
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();
|
|
sel_prompt.UpdateByDataContract(edit_dc);
|
|
};
|
|
|
|
WindowService.Show(vm);
|
|
}
|
|
void CopyPrompt()
|
|
{
|
|
CopiedPrompt = SelectedPrompt;
|
|
}
|
|
void PastePrompt()
|
|
{
|
|
var copied_dc = CopiedPrompt.CommitToDataContract();
|
|
copied_dc.Creator = CurrentEmployee;
|
|
copied_dc.CanEdit = true;
|
|
copied_dc.IsPublic = false;
|
|
copied_dc.Oid = null;
|
|
copied_dc.Version = 0;
|
|
var copied_vm = new AiPromptbausteinPromptVM(copied_dc);
|
|
|
|
SelectedFolder.SubPrompts.VMList.Add(copied_vm);
|
|
}
|
|
void OpenDeletePromptDialog()
|
|
{
|
|
var sel_prompt = SelectedPrompt;
|
|
var folder = SelectedFolder;
|
|
|
|
var txt = "Möchten Sie den ausgewählten Prompt wirklich löschen?";
|
|
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel);
|
|
|
|
if (result != MessageBoxResult.OK)
|
|
return;
|
|
|
|
folder.SubPrompts.VMList.Remove(SelectedPrompt);
|
|
}
|
|
bool canOpenAddPromptDialog()
|
|
{
|
|
return SelectedFolder?.CanAdd ?? false;
|
|
}
|
|
bool canOpenEditPromptDialog()
|
|
{
|
|
return SelectedPrompt?.CanEdit ?? false;
|
|
}
|
|
bool canCopyPrompt()
|
|
{
|
|
return SelectedPrompt is object;
|
|
}
|
|
bool canPastePrompt()
|
|
{
|
|
return canOpenAddPromptDialog() && HasCopiedPrompt;
|
|
}
|
|
bool canOpenDeletePromptDialog()
|
|
{
|
|
return SelectedPrompt?.CanEdit ?? false;
|
|
}
|
|
}
|
|
}
|