Generic Business Logic + Oberfläche
This commit is contained in:
@@ -6,6 +6,7 @@ using BS.Shared.DataContracts.Compact;
|
||||
using BS.Shared.DataContracts.Feature.AI;
|
||||
using BS.Shared.Extensions.CustomInterfaces;
|
||||
using DevExpress.Mvvm;
|
||||
using DevExpress.Utils.Extensions;
|
||||
using DevExpress.Xpf.Layout.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -15,6 +16,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using static DevExpress.Utils.Drawing.Helpers.NativeMethods;
|
||||
|
||||
namespace BeWo.ViewModel.View.Administration
|
||||
{
|
||||
@@ -50,14 +52,24 @@ namespace BeWo.ViewModel.View.Administration
|
||||
public DelegateCommand DeleteRoutineCommand { get; private set; }
|
||||
public DelegateCommand ChangeFavoritenStateRoutineCommand { get; private set; }
|
||||
|
||||
|
||||
public bool CanEditPromptbausteine { get; set; }
|
||||
|
||||
public AiPromptbausteinFolderVM SelectedFolder
|
||||
{
|
||||
get => _SelectedFolder;
|
||||
set => SetProperty(ref _SelectedFolder, value, nameof(SelectedFolder));
|
||||
set
|
||||
{
|
||||
SetProperty(ref _SelectedFolder, value, nameof(SelectedFolder));
|
||||
|
||||
if (SelectedItem is AiPromptbausteinPromptVM vm)
|
||||
{
|
||||
vm.IsSelected = false;
|
||||
SelectedItem = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public AbstractBaseVM SelectedItem
|
||||
{
|
||||
get => _SelectedItem;
|
||||
@@ -104,11 +116,11 @@ namespace BeWo.ViewModel.View.Administration
|
||||
{
|
||||
get
|
||||
{
|
||||
return Folders?.ContainsDirtyObject() ?? false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public bool HasCopiedFolder => CopiedFolder is object;
|
||||
public bool HasCopiedPrompt => CopiedPrompt is object;
|
||||
public bool HasCopiedPrompt => CopiedPrompt is object;
|
||||
public CompactEmployeeDC CurrentEmployee => BeWoApp.CompactLoggedOnEmployee;
|
||||
|
||||
public void UpdateFolderCommands()
|
||||
@@ -118,7 +130,7 @@ namespace BeWo.ViewModel.View.Administration
|
||||
CopyFolderCommand.RaiseCanExecuteChanged();
|
||||
PasteFolderCommand.RaiseCanExecuteChanged();
|
||||
DeleteFolderCommand.RaiseCanExecuteChanged();
|
||||
}
|
||||
}
|
||||
public void UpdatePromptCommands()
|
||||
{
|
||||
OpenAddPromptDialogCommand.RaiseCanExecuteChanged();
|
||||
@@ -133,61 +145,6 @@ namespace BeWo.ViewModel.View.Administration
|
||||
ChangeFavoritenStateRoutineCommand.RaiseCanExecuteChanged();
|
||||
}
|
||||
|
||||
public void SaveVMList()
|
||||
{
|
||||
if (!IsDirty)
|
||||
return;
|
||||
|
||||
// DFS -> 1. Sobald Knoten gefunden wird mit IsNew=true: Teilbaum als neu markieren
|
||||
// 2. Sobald Knoten gefunden wird mit IsNew=false && IsDirty=true: Knoten als update markieren
|
||||
// 3. Checken, welche Knoten gelöscht wurden
|
||||
|
||||
var toadd_folder = new List<AiPromptbausteinFolderVM>();
|
||||
var toadd_prompts = new List<AiPromptbausteinPromptDC>();
|
||||
var toupdate_folder = new List<AiPromptbausteinFolderVM>();
|
||||
var toupdate_prompt = new List<AiPromptbausteinPromptDC>();
|
||||
DFS_Search_AddUpdate(Folders, ref toadd_folder, ref toadd_prompts, ref toupdate_folder, ref toupdate_prompt);
|
||||
|
||||
var todelete_folder = new List<AiPromptbausteinFolderDC>();
|
||||
var todelete_prompt = new List<AiPromptbausteinPromptDC>();
|
||||
DFS_Search_Delete(Folders, ref todelete_folder, ref todelete_prompt);
|
||||
|
||||
var toadd_folder_dcs = toadd_folder.Select(x => x.CommitToDataContract());
|
||||
var toupdate_folder_dcs = toupdate_folder.Select(x => x.CommitToDataContract());
|
||||
|
||||
var actions = new List<Action<IAiEnhancedService>>();
|
||||
|
||||
if (toadd_folder.Any())
|
||||
actions.Add(x => x.InsertAiPromptbausteinFolder(toadd_folder_dcs.ToList()));
|
||||
|
||||
if (toadd_prompts.Any())
|
||||
actions.Add(x => x.InsertAiPromptbausteinPrompt(toadd_prompts.ToList()));
|
||||
|
||||
if (toupdate_folder_dcs.Any())
|
||||
{
|
||||
foreach (var folder_dc in toupdate_folder_dcs)
|
||||
{
|
||||
folder_dc.SubPrompts = null;
|
||||
folder_dc.SubFolders = null;
|
||||
}
|
||||
|
||||
actions.Add(x => x.UpdateAiPromptbausteinFolder(toupdate_folder_dcs.ToList()));
|
||||
}
|
||||
|
||||
if (toupdate_prompt.Any())
|
||||
actions.Add(x => x.UpdateAiPromptbausteinPrompt(toupdate_prompt.ToList()));
|
||||
|
||||
if (todelete_folder.Any())
|
||||
actions.Add(x => x.DeleteAiPromptbausteinFolder(todelete_folder.ToDictionary(x1 => x1.Oid.Value, x2 => x2.Version.Value)));
|
||||
|
||||
if (todelete_prompt.Any())
|
||||
actions.Add(x => x.DeleteAiPromptbausteinPrompt(todelete_prompt.ToDictionary(x1 => x1.Oid.Value, x2 => x2.Version.Value)));
|
||||
|
||||
ServiceFacade.DoMultipleAiEnhancedServicesAsync(actions, () =>
|
||||
{
|
||||
ReloadVMList();
|
||||
});
|
||||
}
|
||||
internal void ReloadVMList()
|
||||
{
|
||||
VMFactory.CreateAiPromptbausteinFolderListVMAsync(
|
||||
@@ -203,76 +160,6 @@ namespace BeWo.ViewModel.View.Administration
|
||||
});
|
||||
}
|
||||
|
||||
void DFS_Search_AddUpdate(AiPromptbausteinFolderListVM folders, ref List<AiPromptbausteinFolderVM> toadd_Folder, ref List<AiPromptbausteinPromptDC> toadd_Prompts, ref List<AiPromptbausteinFolderVM> toupdate_Folder, ref List<AiPromptbausteinPromptDC> toupdate_Prompt)
|
||||
{
|
||||
foreach (var node in folders.VMList)
|
||||
{
|
||||
// Favoriten ignorieren
|
||||
if (node.DataContract.Oid is long oid && oid < -4)
|
||||
continue;
|
||||
|
||||
// Öffentlich
|
||||
if (node.DataContract.Oid is long oid2 && oid2 < -1){
|
||||
DFS_Search_UpdatePromptFavorite(node.SubFolders, ref toadd_Folder, ref toadd_Prompts, ref toupdate_Folder, ref toupdate_Prompt);
|
||||
if (node.SubPrompts.ChangedCount > 0)
|
||||
toupdate_Prompt.AddRange(node.SubPrompts.CommitChanged());
|
||||
continue;
|
||||
}
|
||||
|
||||
// Eigene
|
||||
if (node.IsNew)
|
||||
{
|
||||
toadd_Folder.Add(node);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (node.IsDirty)
|
||||
toupdate_Folder.Add(node);
|
||||
|
||||
if (node.HasSubFolders)
|
||||
DFS_Search_AddUpdate(node.SubFolders, ref toadd_Folder, ref toadd_Prompts, ref toupdate_Folder, ref toupdate_Prompt);
|
||||
|
||||
if (node.SubPrompts.AddedCount > 0)
|
||||
toadd_Prompts.AddRange(node.SubPrompts.CommitAdded());
|
||||
|
||||
if (node.SubPrompts.ChangedCount > 0)
|
||||
toupdate_Prompt.AddRange(node.SubPrompts.CommitChanged());
|
||||
}
|
||||
}
|
||||
}
|
||||
void DFS_Search_UpdatePromptFavorite(AiPromptbausteinFolderListVM folders, ref List<AiPromptbausteinFolderVM> toadd_Folder, ref List<AiPromptbausteinPromptDC> toadd_Prompts, ref List<AiPromptbausteinFolderVM> toupdate_Folder, ref List<AiPromptbausteinPromptDC> toupdate_Prompt)
|
||||
{
|
||||
foreach (var node in folders.VMList)
|
||||
{
|
||||
if (node.HasSubFolders)
|
||||
DFS_Search_UpdatePromptFavorite(node.SubFolders, ref toadd_Folder, ref toadd_Prompts, ref toupdate_Folder, ref toupdate_Prompt);
|
||||
|
||||
if (node.SubPrompts.ChangedCount > 0)
|
||||
toupdate_Prompt.AddRange(node.SubPrompts.CommitChanged());
|
||||
}
|
||||
}
|
||||
void DFS_Search_Delete(AiPromptbausteinFolderListVM folders, ref List<AiPromptbausteinFolderDC> todelete_Folder, ref List<AiPromptbausteinPromptDC> todelete_Prompt)
|
||||
{
|
||||
foreach (var node_dc in folders.DCBackup)
|
||||
{
|
||||
if (node_dc.Oid is long oid && oid < -1)
|
||||
continue;
|
||||
|
||||
if (folders.VMList.FirstOrDefault(vm => vm.DataContract == node_dc) is AiPromptbausteinFolderVM node_vm)
|
||||
{
|
||||
if (node_vm.SubFolders.DCBackup is object && node_vm.SubFolders.DCBackup.Count > 0)
|
||||
DFS_Search_Delete(node_vm.SubFolders, ref todelete_Folder, ref todelete_Prompt);
|
||||
|
||||
if (node_vm.SubPrompts.RemovedCount > 0)
|
||||
todelete_Prompt.AddRange(node_vm.SubPrompts.GetRemoved());
|
||||
}
|
||||
else
|
||||
{
|
||||
todelete_Folder.Add(node_dc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OpenAddFolderDialog()
|
||||
{
|
||||
var sel_folder = SelectedFolder;
|
||||
@@ -290,8 +177,15 @@ namespace BeWo.ViewModel.View.Administration
|
||||
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
sel_folder.SubFolders.VMList.Add(new_vm);
|
||||
sel_folder.IsExpanded = true;
|
||||
var dc = new_vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinFolder(dc),
|
||||
new_dc =>
|
||||
{
|
||||
new_vm.UpdateByDataContract(new_dc);
|
||||
sel_folder.SubFolders.VMList.Add(new_vm);
|
||||
sel_folder.IsExpanded = true;
|
||||
});
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
@@ -301,6 +195,8 @@ namespace BeWo.ViewModel.View.Administration
|
||||
var sel_folder = SelectedFolder;
|
||||
var sel_dc = sel_folder.CopyToEmptyDataContract();
|
||||
sel_dc.CanEdit = SelectedFolder.CanEdit;
|
||||
sel_dc.Oid = sel_folder.DataContract.Oid;
|
||||
sel_dc.Version = sel_folder.DataContract.Version;
|
||||
var edit_vm = new AiPromptbausteinFolderVM(sel_dc);
|
||||
|
||||
var vm = new AiPromptbausteinFolderViewModel(edit_vm, false);
|
||||
@@ -308,7 +204,12 @@ namespace BeWo.ViewModel.View.Administration
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
var edit_dc = edit_vm.CommitToDataContract();
|
||||
sel_folder.UpdateByDataContract(edit_dc);
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinFolder(edit_dc),
|
||||
new_dc =>
|
||||
{
|
||||
sel_folder.UpdateByDataContract(new_dc);
|
||||
});
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
@@ -332,7 +233,9 @@ namespace BeWo.ViewModel.View.Administration
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
|
||||
parent.SubFolders.VMList.Remove(sel_folder);
|
||||
var delete_dc = sel_folder.CommitToDataContract();
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiPromptbausteinFolder(delete_dc),
|
||||
() => parent.SubFolders.VMList.Remove(sel_folder));
|
||||
}
|
||||
|
||||
bool canOpenAddFolderDialog()
|
||||
@@ -374,8 +277,15 @@ namespace BeWo.ViewModel.View.Administration
|
||||
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
sel_folder.SubPrompts.VMList.Add(new_vm);
|
||||
SelectedItem = new_vm;
|
||||
var dc = new_vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinPrompt(dc),
|
||||
new_dc =>
|
||||
{
|
||||
new_vm.UpdateByDataContract(new_dc);
|
||||
sel_folder.SubPrompts.VMList.Add(new_vm);
|
||||
SelectedItem = new_vm;
|
||||
});
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
@@ -389,6 +299,8 @@ namespace BeWo.ViewModel.View.Administration
|
||||
|
||||
var sel_dc = sel_prompt.CopyToEmptyDataContract();
|
||||
sel_dc.CanEdit = sel_prompt.CanEdit;
|
||||
sel_dc.Oid = sel_prompt.DataContract.Oid;
|
||||
sel_dc.Version = sel_prompt.DataContract.Version;
|
||||
var edit_vm = new AiPromptbausteinPromptVM(sel_dc);
|
||||
|
||||
var vm = new AiPromptbausteinPromptViewModel(edit_vm, false);
|
||||
@@ -396,9 +308,13 @@ namespace BeWo.ViewModel.View.Administration
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
var edit_dc = edit_vm.CommitToDataContract();
|
||||
sel_prompt.UpdateByDataContract(edit_dc);
|
||||
|
||||
UpdateSelectedPromptFavorite(sel_prompt);
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinPrompt(edit_dc),
|
||||
new_dc =>
|
||||
{
|
||||
sel_prompt.UpdateByDataContract(new_dc);
|
||||
UpdateSelectedPromptFavorite(sel_prompt);
|
||||
});
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
@@ -474,7 +390,25 @@ namespace BeWo.ViewModel.View.Administration
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
|
||||
folder.SubPrompts.VMList.Remove(sel_prompt);
|
||||
if (sel_prompt.IsFavorite)
|
||||
{
|
||||
sel_prompt.IsFavorite = false;
|
||||
UpdateSelectedPromptFavorite();
|
||||
}
|
||||
|
||||
var delete_dc = sel_prompt.CommitToDataContract();
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiPromptbausteinPrompt(delete_dc),
|
||||
() =>
|
||||
{
|
||||
if (folder.SubPrompts.VMList.Contains(sel_prompt))
|
||||
{
|
||||
folder.SubPrompts.VMList.Remove(sel_prompt);
|
||||
}
|
||||
else
|
||||
{
|
||||
ReloadVMList();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void ChangeFavoritenStatePrompt()
|
||||
@@ -483,7 +417,14 @@ namespace BeWo.ViewModel.View.Administration
|
||||
|
||||
sel_prompt.IsFavorite = !sel_prompt.IsFavorite;
|
||||
|
||||
UpdateSelectedPromptFavorite(sel_prompt);
|
||||
var edit_dc = sel_prompt.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinPrompt(edit_dc),
|
||||
new_dc =>
|
||||
{
|
||||
sel_prompt.UpdateByDataContract(new_dc);
|
||||
UpdateSelectedPromptFavorite(sel_prompt);
|
||||
});
|
||||
}
|
||||
|
||||
bool canOpenAddPromptDialog()
|
||||
@@ -528,8 +469,15 @@ namespace BeWo.ViewModel.View.Administration
|
||||
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
sel_folder.SubRoutines.VMList.Add(new_vm);
|
||||
SelectedItem = new_vm;
|
||||
var dc = new_vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinRoutine(dc),
|
||||
new_dc =>
|
||||
{
|
||||
new_vm.UpdateByDataContract(new_dc);
|
||||
sel_folder.SubRoutines.VMList.Add(new_vm);
|
||||
SelectedItem = new_vm;
|
||||
});
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
@@ -543,6 +491,8 @@ namespace BeWo.ViewModel.View.Administration
|
||||
|
||||
var sel_dc = sel_prompt.CopyToEmptyDataContract();
|
||||
sel_dc.CanEdit = sel_prompt.CanEdit;
|
||||
sel_dc.Oid = sel_prompt.DataContract.Oid;
|
||||
sel_dc.Version = sel_prompt.DataContract.Version;
|
||||
var edit_vm = new AiPromptbausteinRoutineVM(sel_dc);
|
||||
|
||||
var vm = new AiPromptbausteinRoutineViewModel(edit_vm, Folders, false);
|
||||
@@ -550,9 +500,13 @@ namespace BeWo.ViewModel.View.Administration
|
||||
vm.Accept_Button_Clicked += (s, e) =>
|
||||
{
|
||||
var edit_dc = edit_vm.CommitToDataContract();
|
||||
sel_prompt.UpdateByDataContract(edit_dc);
|
||||
|
||||
UpdateSelectedRoutineFavorite(sel_prompt);
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinRoutine(edit_dc),
|
||||
new_dc =>
|
||||
{
|
||||
sel_prompt.UpdateByDataContract(new_dc);
|
||||
UpdateSelectedRoutineFavorite(sel_prompt);
|
||||
});
|
||||
};
|
||||
|
||||
WindowService.Show(vm);
|
||||
@@ -568,7 +522,25 @@ namespace BeWo.ViewModel.View.Administration
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
|
||||
folder.SubRoutines.VMList.Remove(sel_prompt);
|
||||
if (sel_prompt.IsFavorite)
|
||||
{
|
||||
sel_prompt.IsFavorite = false;
|
||||
UpdateSelectedRoutineFavorite();
|
||||
}
|
||||
|
||||
var delete_dc = sel_prompt.CommitToDataContract();
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiPromptbausteinRoutine(delete_dc),
|
||||
() =>
|
||||
{
|
||||
if (folder.SubRoutines.VMList.Contains(sel_prompt))
|
||||
{
|
||||
folder.SubRoutines.VMList.Remove(sel_prompt);
|
||||
}
|
||||
else
|
||||
{
|
||||
ReloadVMList();
|
||||
}
|
||||
});
|
||||
}
|
||||
void ChangeFavoritenStateRoutine()
|
||||
{
|
||||
@@ -576,7 +548,14 @@ namespace BeWo.ViewModel.View.Administration
|
||||
|
||||
sel_routine.IsFavorite = !sel_routine.IsFavorite;
|
||||
|
||||
UpdateSelectedRoutineFavorite(sel_routine);
|
||||
var edit_dc = sel_routine.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinRoutine(edit_dc),
|
||||
new_dc =>
|
||||
{
|
||||
sel_routine.UpdateByDataContract(new_dc);
|
||||
UpdateSelectedRoutineFavorite(sel_routine);
|
||||
});
|
||||
}
|
||||
|
||||
bool canOpenAddRoutineDialog() => CanEditPromptbausteine && (SelectedFolder?.CanAddPrompt ?? false);
|
||||
|
||||
Reference in New Issue
Block a user