diff --git a/BeWo/View/Detail/AI/AiPromptbausteinComplexTreeView.xaml b/BeWo/View/Detail/AI/AiPromptbausteinComplexTreeView.xaml
index 52fe1cf74..69e64611a 100644
--- a/BeWo/View/Detail/AI/AiPromptbausteinComplexTreeView.xaml
+++ b/BeWo/View/Detail/AI/AiPromptbausteinComplexTreeView.xaml
@@ -137,9 +137,51 @@
Style="{StaticResource ObjectEditGroupBox}">
+ ItemsSource="{Binding SelectedFolder.SubPrompts.VMList, UpdateSourceTrigger=PropertyChanged}"
+ SelectedItem="{Binding SelectedPrompt, Mode=TwoWay}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BeWo/View/Detail/AI/AiPromptbausteinComplexTreeView.xaml.cs b/BeWo/View/Detail/AI/AiPromptbausteinComplexTreeView.xaml.cs
index b673b7542..2679629d3 100644
--- a/BeWo/View/Detail/AI/AiPromptbausteinComplexTreeView.xaml.cs
+++ b/BeWo/View/Detail/AI/AiPromptbausteinComplexTreeView.xaml.cs
@@ -107,5 +107,10 @@ namespace BeWo.View.Detail.AI
{
ViewModel.UpdateFolderCommands();
}
+
+ private void ListBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
+ {
+ ViewModel.UpdatePromptCommands();
+ }
}
}
diff --git a/BeWo/View/Detail/AI/AiPromptbausteinPromptView.xaml b/BeWo/View/Detail/AI/AiPromptbausteinPromptView.xaml
index 1035547ab..11ff9e5a8 100644
--- a/BeWo/View/Detail/AI/AiPromptbausteinPromptView.xaml
+++ b/BeWo/View/Detail/AI/AiPromptbausteinPromptView.xaml
@@ -77,16 +77,20 @@
IsChecked="{Binding Node.IsOnlyForCreator}"
IsEnabled="{Binding IsEditingMode, UpdateSourceTrigger=PropertyChanged}" />
-
+
+
+
+
diff --git a/BeWo/ViewModel/AiPromptbausteinPromptVM.cs b/BeWo/ViewModel/AiPromptbausteinPromptVM.cs
index 41760cb03..fe6420a55 100644
--- a/BeWo/ViewModel/AiPromptbausteinPromptVM.cs
+++ b/BeWo/ViewModel/AiPromptbausteinPromptVM.cs
@@ -2,6 +2,7 @@
using BS.Shared;
using BS.Shared.DataContracts;
+using BS.Shared.DataContracts.Compact;
namespace BeWo.ViewModel
{
@@ -9,9 +10,9 @@ namespace BeWo.ViewModel
{
private string _Title;
private string _Description;
- private long _ParentFolderOid;
- private long _CreatorOid;
- private bool _IsPrivate;
+ private long? _ParentFolderOid;
+ private CompactEmployeeDC _Creator;
+ private bool _IsPublic;
private int _Position;
private string _Prompt;
private bool _ShowPrompt;
@@ -36,22 +37,22 @@ namespace BeWo.ViewModel
set => SetProperty(ref _Description, value, nameof(Description), () => DataContract.Description);
}
- public long ParentFolderOid
+ public long? ParentFolderOid
{
get => _ParentFolderOid;
set => SetProperty(ref _ParentFolderOid, value, nameof(ParentFolderOid), () => DataContract.ParentFolderOid);
}
- public long CreatorOid
+ public CompactEmployeeDC Creator
{
- get => _CreatorOid;
- set => SetProperty(ref _CreatorOid, value, nameof(CreatorOid), () => DataContract.CreatorOid);
+ get => _Creator;
+ set => SetProperty(ref _Creator, value, nameof(Creator), () => DataContract.Creator);
}
- public bool IsPrivate
+ public bool IsPublic
{
- get => _IsPrivate;
- set => SetProperty(ref _IsPrivate, value, nameof(IsPrivate), () => DataContract.IsPrivate);
+ get => _IsPublic;
+ set => SetProperty(ref _IsPublic, value, nameof(IsPublic), () => DataContract.IsPublic);
}
public int Position
@@ -90,13 +91,19 @@ namespace BeWo.ViewModel
set => SetProperty(ref _OwnsoftRefLink, value, nameof(OwnsoftRefLink), () => DataContract.OwnsoftRefLink);
}
+ public bool CanEdit
+ {
+ get => DataContract.CanEdit;
+ set => DataContract.CanEdit = value;
+ }
+
protected override void InitByDataContract(AiPromptbausteinPromptDC pDataContract)
{
_Title = pDataContract.Title;
_Description = pDataContract.Description;
_ParentFolderOid = pDataContract.ParentFolderOid;
- _CreatorOid = pDataContract.CreatorOid;
- _IsPrivate = pDataContract.IsPrivate;
+ _Creator = pDataContract.Creator;
+ _IsPublic = pDataContract.IsPublic;
_Position = pDataContract.Position;
_Prompt = pDataContract.Prompt;
_ShowPrompt = pDataContract.ShowPrompt;
@@ -110,8 +117,8 @@ namespace BeWo.ViewModel
pDataContract.Title = _Title;
pDataContract.Description = _Description;
pDataContract.ParentFolderOid = _ParentFolderOid;
- pDataContract.CreatorOid = _CreatorOid;
- pDataContract.IsPrivate = _IsPrivate;
+ pDataContract.Creator = _Creator;
+ pDataContract.IsPublic = _IsPublic;
pDataContract.Position = _Position;
pDataContract.Prompt = _Prompt;
pDataContract.ShowPrompt = _ShowPrompt;
@@ -121,5 +128,20 @@ namespace BeWo.ViewModel
return pDataContract;
}
+
+ public override void UpdateByDataContract(AiPromptbausteinPromptDC pDataContract)
+ {
+ Title = pDataContract.Title;
+ Description = pDataContract.Description;
+ ParentFolderOid = pDataContract.ParentFolderOid;
+ Creator = pDataContract.Creator;
+ IsPublic = pDataContract.IsPublic;
+ Position = pDataContract.Position;
+ Prompt = pDataContract.Prompt;
+ ShowPrompt = pDataContract.ShowPrompt;
+ ShowPromptByTenant = pDataContract.ShowPromptByTenant;
+ IsOwnsoftPrompt = pDataContract.IsOwnsoftPrompt;
+ OwnsoftRefLink = pDataContract.OwnsoftRefLink;
+ }
}
}
diff --git a/BeWo/ViewModel/ListViewModel/AbstractDCListMapperVM.cs b/BeWo/ViewModel/ListViewModel/AbstractDCListMapperVM.cs
index f7a9b20fe..41b8e3513 100644
--- a/BeWo/ViewModel/ListViewModel/AbstractDCListMapperVM.cs
+++ b/BeWo/ViewModel/ListViewModel/AbstractDCListMapperVM.cs
@@ -271,7 +271,14 @@ namespace BeWo.ViewModel.ListViewModel
return lConstr.Invoke(new object[] { pDC }) as VMType;
}
- public void SetSelectByIndex(int index)
+ public virtual VMType CreateNewVM()
+ {
+ var lConstr = typeof(VMType).GetConstructor(new[] { typeof(DCType) });
+
+ return lConstr.Invoke(new object[] { new DCType() }) as VMType;
+ }
+
+ public void SetSelectByIndex(int index)
{
if(-1 < index && index < VMList.Count){
var x = VMList[index];
diff --git a/BeWo/ViewModel/View/Administration/AiPromptbausteinComplexTreeViewModel.cs b/BeWo/ViewModel/View/Administration/AiPromptbausteinComplexTreeViewModel.cs
index 875e47236..1a91f37d1 100644
--- a/BeWo/ViewModel/View/Administration/AiPromptbausteinComplexTreeViewModel.cs
+++ b/BeWo/ViewModel/View/Administration/AiPromptbausteinComplexTreeViewModel.cs
@@ -40,32 +40,41 @@ namespace BeWo.ViewModel.View.Administration
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()
+ public AiPromptbausteinComplexTreeViewModel() : this(null, AiActionType.ServiceRecordConversation)
{
if (BeWoApp.IsInDesignMode)
{
- AiActionType = AiActionType.ServiceRecordConversation;
ReloadVMList();
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);
- }
- public AiPromptbausteinComplexTreeViewModel(IBeWoWindowService windowService, AiActionType aiActionType) : this()
- {
- WindowService = windowService;
- AiActionType = aiActionType;
+ 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
@@ -86,6 +95,15 @@ namespace BeWo.ViewModel.View.Administration
PasteFolderCommand.RaiseCanExecuteChanged();
DeleteFolderCommand.RaiseCanExecuteChanged();
}
+
+ public void UpdatePromptCommands()
+ {
+ OpenAddPromptDialogCommand.RaiseCanExecuteChanged();
+ OpenEditPromptDialogCommand.RaiseCanExecuteChanged();
+ CopyPromptCommand.RaiseCanExecuteChanged();
+ PastePromptCommand.RaiseCanExecuteChanged();
+ DeletePromptCommand.RaiseCanExecuteChanged();
+ }
public void SaveVMList()
{
@@ -108,8 +126,7 @@ namespace BeWo.ViewModel.View.Administration
void OpenAddFolderDialog()
{
var sel_folder = SelectedFolder;
- var new_vm = sel_folder.SubFolders.NewVM;
- sel_folder.SubFolders.NewVM = null;
+ var new_vm = sel_folder.SubFolders.CreateNewVM();
new_vm.Creator = BeWoApp.CompactLoggedOnEmployee;
new_vm.Parent = sel_folder;
@@ -168,7 +185,6 @@ namespace BeWo.ViewModel.View.Administration
{
return SelectedFolder.CanAdd;
}
-
bool canOpenEditFolderDialog()
{
return SelectedFolder.CanEdit;
@@ -187,5 +203,84 @@ namespace BeWo.ViewModel.View.Administration
{
return SelectedFolder.CanEdit;
}
+
+ void OpenAddPromptDialog()
+ {
+ var sel_folder = SelectedFolder;
+ var new_vm = sel_folder.SubPrompts.CreateNewVM();
+
+ new_vm.Creator = BeWoApp.CompactLoggedOnEmployee;
+ 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()
+ {
+
+ }
+ void PastePrompt()
+ {
+
+ }
+ 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;
+ }
+ bool canOpenEditPromptDialog()
+ {
+ return SelectedPrompt?.CanEdit ?? false;
+ }
+ bool canCopyPrompt()
+ {
+ return false;
+ }
+ bool canPastePrompt()
+ {
+ return false;
+ }
+ bool canOpenDeletePromptDialog()
+ {
+ return SelectedPrompt?.CanEdit ?? false;
+ }
}
}
diff --git a/BeWo/ViewModel/View/Administration/AiPromptbausteinFolderViewModel.cs b/BeWo/ViewModel/View/Administration/AiPromptbausteinFolderViewModel.cs
index 8e52e4439..eee424b39 100644
--- a/BeWo/ViewModel/View/Administration/AiPromptbausteinFolderViewModel.cs
+++ b/BeWo/ViewModel/View/Administration/AiPromptbausteinFolderViewModel.cs
@@ -14,7 +14,7 @@ namespace BeWo.ViewModel.View.Administration
{
public class AiPromptbausteinFolderViewModel : AcceptCancelDialogViewModel
{
- private bool _IsNew;
+ private readonly bool _IsNew;
public AiPromptbausteinFolderViewModel(AiPromptbausteinFolderVM viewModel, bool isNew) : base()
{
diff --git a/BeWo/ViewModel/View/Administration/AiPromptbausteinPromptViewModel.cs b/BeWo/ViewModel/View/Administration/AiPromptbausteinPromptViewModel.cs
index d4d94c176..f5cba98b3 100644
--- a/BeWo/ViewModel/View/Administration/AiPromptbausteinPromptViewModel.cs
+++ b/BeWo/ViewModel/View/Administration/AiPromptbausteinPromptViewModel.cs
@@ -7,7 +7,31 @@ using System.Threading.Tasks;
namespace BeWo.ViewModel.View.Administration
{
- public class AiPromptbausteinPromptViewModel : DialogViewModel
+ public class AiPromptbausteinPromptViewModel : AcceptCancelDialogViewModel
{
+ private readonly bool _IsNew;
+
+ public AiPromptbausteinPromptViewModel(AiPromptbausteinPromptVM viewModel, bool isNew) : base()
+ {
+ ViewModel = viewModel;
+ _IsNew = isNew;
+
+ if (!_IsNew)
+ {
+ ViewModel.PropertyChanged += (s, e) =>
+ {
+ AcceptCommand.RaiseCanExecuteChanged();
+ };
+ }
+ }
+
+ public AiPromptbausteinPromptVM ViewModel { get; set; }
+
+ public string AcceptButtonText => _IsNew ? "Hinzufügen" : "Speichern";
+
+ protected override bool canAccept()
+ {
+ return _IsNew || ViewModel.IsDirty;
+ }
}
}
diff --git a/Shared/DataContracts/AiPromptbausteinFolderDC.cs b/Shared/DataContracts/AiPromptbausteinFolderDC.cs
index 054f617ee..4c96ad9ec 100644
--- a/Shared/DataContracts/AiPromptbausteinFolderDC.cs
+++ b/Shared/DataContracts/AiPromptbausteinFolderDC.cs
@@ -59,6 +59,7 @@ namespace BS.Shared.DataContracts
Title = AiPromptbausteineTexts.OwnBibNodeTitle,
Version = 1,
CanAdd = true,
+ IsExpanded = true,
};
}
@@ -73,7 +74,8 @@ namespace BS.Shared.DataContracts
SubFolders = new List(),
SubPrompts = new List(),
Title = AiPromptbausteineTexts.SharedBibNodeTitle,
- Version = 1
+ Version = 1,
+ IsExpanded = true,
};
}
@@ -88,7 +90,8 @@ namespace BS.Shared.DataContracts
SubFolders = new List(),
SubPrompts = new List(),
Title = AiPromptbausteineTexts.PublicBibNodeTitle,
- Version = 1
+ Version = 1,
+ IsExpanded = true,
};
}
diff --git a/Shared/DataContracts/AiPromptbausteinPromptDC.cs b/Shared/DataContracts/AiPromptbausteinPromptDC.cs
index 84da839ee..947576f26 100644
--- a/Shared/DataContracts/AiPromptbausteinPromptDC.cs
+++ b/Shared/DataContracts/AiPromptbausteinPromptDC.cs
@@ -1,4 +1,5 @@
-using System;
+using BS.Shared.DataContracts.Compact;
+using System;
using System.Runtime.Serialization;
namespace BS.Shared.DataContracts
@@ -8,14 +9,16 @@ namespace BS.Shared.DataContracts
{
[DataMember] public string Title { get; set; }
[DataMember] public string Description { get; set; }
- [DataMember] public long ParentFolderOid { get; set; }
- [DataMember] public long CreatorOid { get; set; }
- [DataMember] public bool IsPrivate { get; set; }
+ [DataMember] public long? ParentFolderOid { get; set; }
+ [DataMember] public CompactEmployeeDC Creator { get; set; }
+ [DataMember] public bool IsPublic { get; set; }
[DataMember] public int Position { get; set; }
[DataMember] public string Prompt { get; set; }
[DataMember] public bool ShowPrompt { get; set; }
[DataMember] public bool ShowPromptByTenant { get; set; }
[DataMember] public bool IsOwnsoftPrompt { get; set; }
[DataMember] public string OwnsoftRefLink { get; set; }
+
+ [DataMember] public bool CanEdit { get; set; }
}
}