diff --git a/BeWo/View/Controls/ValueListEntryEditControl.xaml.cs b/BeWo/View/Controls/ValueListEntryEditControl.xaml.cs index 74871ca7a..0833e85ce 100644 --- a/BeWo/View/Controls/ValueListEntryEditControl.xaml.cs +++ b/BeWo/View/Controls/ValueListEntryEditControl.xaml.cs @@ -56,7 +56,6 @@ namespace BeWo.View.Controls private void UpdateControls() { bool zeigeKatalogAuswahl = RBtnKatalog.IsChecked.HasValue && RBtnKatalog.IsChecked.Value; - LabelKatalog.Visibility = zeigeKatalogAuswahl ? Visibility.Visible : Visibility.Collapsed; CboCatalog.Visibility = zeigeKatalogAuswahl ? Visibility.Visible : Visibility.Collapsed; diff --git a/BeWo/View/Detail/MassnahmenHistory.cs b/BeWo/View/Detail/MassnahmenHistory.cs index c3e5a64de..8780a9505 100644 --- a/BeWo/View/Detail/MassnahmenHistory.cs +++ b/BeWo/View/Detail/MassnahmenHistory.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static BeWo.View.Detail.MassnahmenHistoryRecord; namespace BeWo.View.Detail { @@ -77,11 +78,12 @@ namespace BeWo.View.Detail public bool GotNextAction => LastChange is object && LastChange.Next is object; public bool GotChanges => LastChange is object && (GotNextAction || GotPrevAction); - public void RecordAdd(MassnahmenHistoryNodeParameter param) => RecordAction(new MassnahmenHistoryRecordAdd(param)); + public void RecordAdd(NodeRelation param) => RecordAction(new MassnahmenHistoryRecordAdd(param)); public void RecordMove(MassnahmenHistoryRecordMove move) => RecordAction(move); - public void RecordImport(List param) => RecordAction(new MassnahmenHistoryRecordImport(param)); + public void RecordImport(List param) => RecordAction(new MassnahmenHistoryRecordImport(param)); public void RecordDelete(MassnahmenHistoryRecordDelete del) => RecordAction(del); - public void RecordCopy(MassnahmenHistoryNodeParameter root, List param) => RecordAction(new MassnahmenHistoryRecordCopy(root, param)); + public void RecordCopy(NodeRelation root, List param) => RecordAction(new MassnahmenHistoryRecordCopy(root, param)); + public void RecordEdit(MassnahmenHistoryRecordEdit edit) => RecordAction(edit); private void RecordAction(MassnahmenHistoryRecord val) { diff --git a/BeWo/View/Detail/MassnahmenHistoryRecord.cs b/BeWo/View/Detail/MassnahmenHistoryRecord.cs index fde3d2b05..c9b0f4ad0 100644 --- a/BeWo/View/Detail/MassnahmenHistoryRecord.cs +++ b/BeWo/View/Detail/MassnahmenHistoryRecord.cs @@ -1,4 +1,5 @@ using BeWo.Core; +using BeWo.ViewModel; using System; using System.Collections.Generic; using System.Linq; @@ -9,6 +10,29 @@ namespace BeWo.View.Detail { public abstract class MassnahmenHistoryRecord { + public struct NodeRelation + { + public SupportConceptGoalTreeItem Current { get; set; } + public SupportConceptGoalTreeItem Parent { get; set; } + + public NodeRelation(SupportConceptGoalTreeItem newitem, SupportConceptGoalTreeItem parent) + { + Current = newitem; + Parent = parent; + } + public NodeRelation(SupportConceptGoalTreeItem newitem) + { + Current = newitem; + Parent = newitem.ParentGoal as SupportConceptGoalTreeItem; + } + } + + public struct NodeEditInformation + { + public string Abbreviation { get; set; } + public string Description { get; set; } + public string Notice { get; set; } + } } public class MassnahmenHistoryRecordOrigin : MassnahmenHistoryRecord @@ -18,13 +42,13 @@ namespace BeWo.View.Detail public class MassnahmenHistoryRecordAdd : MassnahmenHistoryRecord { - public MassnahmenHistoryNodeParameter Parameter { get; set; } + public NodeRelation Parameter { get; set; } public MassnahmenHistoryRecordAdd(SupportConceptGoalTreeItem newitem, SupportConceptGoalTreeItem parent) { - Parameter = new MassnahmenHistoryNodeParameter(newitem, parent); + Parameter = new NodeRelation(newitem, parent); } - public MassnahmenHistoryRecordAdd(MassnahmenHistoryNodeParameter param) + public MassnahmenHistoryRecordAdd(NodeRelation param) { Parameter = param; } @@ -32,22 +56,22 @@ namespace BeWo.View.Detail public class MassnahmenHistoryRecordImport : MassnahmenHistoryRecord { - public List Parameters { get; set; } - public List ParametersReversed { get; set; } + public List Parameters { get; set; } + public List ParametersReversed { get; set; } - public MassnahmenHistoryRecordImport(List list) + public MassnahmenHistoryRecordImport(List list) { Parameters = list; - ParametersReversed = new Stack(list).ToList(); + ParametersReversed = new Stack(list).ToList(); } } public class MassnahmenHistoryRecordDelete : MassnahmenHistoryRecord { - public MassnahmenHistoryNodeParameter ExNode { get; set; } - public List Parameters { get; set; } + public NodeRelation ExNode { get; set; } + public List Parameters { get; set; } - public MassnahmenHistoryRecordDelete(MassnahmenHistoryNodeParameter exnode, List list) + public MassnahmenHistoryRecordDelete(NodeRelation exnode, List list) { Parameters = list; ExNode = exnode; @@ -70,35 +94,36 @@ namespace BeWo.View.Detail public class MassnahmenHistoryRecordCopy : MassnahmenHistoryRecord { - public MassnahmenHistoryNodeParameter CurrentNode { get; set; } - public List Parameters { get; set; } + public NodeRelation CurrentNode { get; set; } + public List Parameters { get; set; } - public MassnahmenHistoryRecordCopy(MassnahmenHistoryNodeParameter root, List list) + public MassnahmenHistoryRecordCopy(NodeRelation root, List list) { Parameters = list; CurrentNode = root; } } - public abstract class MassnahmenHistoryParameter + public class MassnahmenHistoryRecordEdit : MassnahmenHistoryRecord { + public ValueListEntryVM VM { get; set; } - } - - public class MassnahmenHistoryNodeParameter : MassnahmenHistoryParameter - { - public SupportConceptGoalTreeItem Current { get; set; } - public SupportConceptGoalTreeItem Parent { get; set; } - - public MassnahmenHistoryNodeParameter(SupportConceptGoalTreeItem newitem, SupportConceptGoalTreeItem parent) + public NodeEditInformation Before { get; set; } + public NodeEditInformation After { get; set; } + + public MassnahmenHistoryRecordEdit(ValueListEntryVM vm, NodeEditInformation b, NodeEditInformation a) { - Current = newitem; - Parent = parent; + Before = b; + After = a; + VM = vm; } - public MassnahmenHistoryNodeParameter(SupportConceptGoalTreeItem newitem) + + public void SetVM(NodeEditInformation info) { - Current = newitem; - Parent = newitem.ParentGoal as SupportConceptGoalTreeItem; + VM.Abbreviation = info.Abbreviation; + VM.Description = info.Description; + VM.Notice = info.Notice; + VM.CommitToDataContract(); } } } diff --git a/BeWo/View/Detail/MassnahmenTreeTrimmer.cs b/BeWo/View/Detail/MassnahmenTreeTrimmer.cs index dcddcd5fa..7b824b139 100644 --- a/BeWo/View/Detail/MassnahmenTreeTrimmer.cs +++ b/BeWo/View/Detail/MassnahmenTreeTrimmer.cs @@ -1,11 +1,14 @@ using BeWo.Core; +using BeWo.ViewModel; using BeWo.ViewModel.ListViewModel; using BS.Shared; using BS.Shared.Core; +using BS.Shared.DataContracts; using BS.Shared.DataContracts.ClientPartials; using System; using System.Collections.Generic; using System.Linq; +using static BeWo.View.Detail.MassnahmenHistoryRecord; namespace BeWo.View.Detail { @@ -29,6 +32,7 @@ namespace BeWo.View.Detail { typeof(MassnahmenHistoryRecordDelete), GetTuple(UndoDeleteAction, RedoDeleteAction) }, { typeof(MassnahmenHistoryRecordImport), GetTuple(UndoImportAction, RedoImportAction) }, { typeof(MassnahmenHistoryRecordMove), GetTuple(UndoMoveAction, RedoMoveAction) }, + { typeof(MassnahmenHistoryRecordEdit), GetTuple(UndoEditAction, RedoEditAction) }, }; } @@ -36,13 +40,12 @@ namespace BeWo.View.Detail { Type2Actions[action.GetType()].Item1(action); } - public void RedoAction(MassnahmenHistoryRecord action) { Type2Actions[action.GetType()].Item2(action); } - public MassnahmenHistoryNodeParameter DoAddAction(SupportConceptGoalTreeItem parent, ValueListEntryType valueListEntryType, + public NodeRelation DoAddAction(SupportConceptGoalTreeItem parent, ValueListEntryType valueListEntryType, string description, string abbreviation, string notice) { if (!valueListEntryType.HasFlag(ValueListEntryType.SupportConceptGoalCategoryType) && @@ -63,7 +66,7 @@ namespace BeWo.View.Detail ParentGoal = parent }; - var rtn = new MassnahmenHistoryNodeParameter(newItem, parent); + var rtn = new NodeRelation(newItem, parent); ViewModel.AddNewVMToList(); @@ -86,17 +89,17 @@ namespace BeWo.View.Detail DeactivateNode(record.Parameter); } private void RedoAddAction(MassnahmenHistoryRecordAdd param) => RedoAddAction(param.Parameter); - private void RedoAddAction(MassnahmenHistoryNodeParameter addParam) + private void RedoAddAction(NodeRelation addParam) { ActivateNode(addParam); } - public List DoCopyAction(SupportConceptGoalTreeItem parent, SupportConceptGoalTreeItem source, + public List DoCopyAction(SupportConceptGoalTreeItem parent, SupportConceptGoalTreeItem source, MassnahmenTreeCopyType copyType, bool force_deep_copy, - out MassnahmenHistoryNodeParameter current, Stack records = null) + out NodeRelation current, Stack records = null) { if (records is null) - records = new Stack(); + records = new Stack(); if (source == null || parent == null) throw new NotImplementedException("#43298467891364987"); @@ -105,7 +108,7 @@ namespace BeWo.View.Detail var childs = source.Items.ToList(); var param = DoAddAction(parent, wm.Type, wm.Description, wm.Abbreviation, wm.Notice); var node = param.Current; - var parameter = new MassnahmenHistoryNodeParameter(node, parent); + var parameter = new NodeRelation(node, parent); current = parameter; @@ -130,11 +133,11 @@ namespace BeWo.View.Detail ActivateSubtree(record.CurrentNode, record.Parameters); } - public MassnahmenHistoryRecordDelete DoDeleteAction(MassnahmenHistoryNodeParameter param) + public MassnahmenHistoryRecordDelete DoDeleteAction(NodeRelation param) { // Delete Full Subtree - var stack = new Stack(); - var queue = new Queue(); + var stack = new Stack(); + var queue = new Queue(); DoDeleteActionRec(param.Current, ref stack, ref queue); @@ -142,18 +145,18 @@ namespace BeWo.View.Detail DeactivateSubtree(param, queue); //var list = stack.Select(x => new MassnahmenHistoryNodeParameter(x, View.GetParent(x))).ToList(); - var node = new MassnahmenHistoryNodeParameter(param.Current, param.Parent); + var node = new NodeRelation(param.Current, param.Parent); return new MassnahmenHistoryRecordDelete(node, stack.ToList()); } - public void DoDeleteActionRec(SupportConceptGoalTreeItem item, ref Stack stack, ref Queue queue) + public void DoDeleteActionRec(SupportConceptGoalTreeItem item, ref Stack stack, ref Queue queue) { foreach (var child in item.Items) { DoDeleteActionRec(child, ref stack, ref queue); } - var param = new MassnahmenHistoryNodeParameter(item); + var param = new NodeRelation(item); stack.Push(param); queue.Enqueue(param); } @@ -166,13 +169,13 @@ namespace BeWo.View.Detail DeactivateSubtree(param.ExNode, param.Parameters); } - public List DoImportAction(SupportConceptGoalDC goal, List records = null) + public List DoImportAction(SupportConceptGoalDC goal, List records = null) { if (goal == null) return null; if (records == null) - records = new List(); + records = new List(); goal.Children?.ForEach(x => DoImportAction(x, records)); @@ -225,9 +228,25 @@ namespace BeWo.View.Detail DoMoveAction(move.Child, move.ExParent, move.Parent); } + public MassnahmenHistoryRecordEdit DoEditAction(ValueListEntryDC b, ValueListEntryVM a) + { + var before = new NodeEditInformation { Abbreviation = b.Abbreviation, Description = b.TypeDescription, Notice = b.Notice }; + var after = new NodeEditInformation { Abbreviation = a.Abbreviation, Description = a.Description, Notice = a.Notice }; + + return new MassnahmenHistoryRecordEdit(a, before, after); + } + private void UndoEditAction(MassnahmenHistoryRecordEdit edit) + { + edit.SetVM(edit.Before); + } + private void RedoEditAction(MassnahmenHistoryRecordEdit edit) + { + edit.SetVM(edit.After); + } + private Tuple, Action> GetTuple(Action a, Action b) where T1 : MassnahmenHistoryRecord => new Tuple, Action>(x => a(x as T1), x => b(x as T1)); - private SupportConceptGoalTreeItem AddIcf(SupportConceptGoalDC goal, List records) + private SupportConceptGoalTreeItem AddIcf(SupportConceptGoalDC goal, List records) { if (goal == null) return null; @@ -270,7 +289,7 @@ namespace BeWo.View.Detail return record2.Current; } - private void ActivateSubtree(MassnahmenHistoryNodeParameter currentNode, List param) + private void ActivateSubtree(NodeRelation currentNode, List param) { foreach (var item in param) { @@ -282,7 +301,7 @@ namespace BeWo.View.Detail else GoalTree.Add(currentNode.Current); } - private void ActivateNode(MassnahmenHistoryNodeParameter currentNode) + private void ActivateNode(NodeRelation currentNode) { var newItem = currentNode.Current; var parent = currentNode.Parent; @@ -295,7 +314,7 @@ namespace BeWo.View.Detail GoalTree.Add(newItem); } - private void DeactivateSubtree(MassnahmenHistoryNodeParameter currentNode, IEnumerable param) + private void DeactivateSubtree(NodeRelation currentNode, IEnumerable param) { foreach (var item in param) { @@ -307,7 +326,7 @@ namespace BeWo.View.Detail else GoalTree.Remove(currentNode.Current); } - private void DeactivateNode(MassnahmenHistoryNodeParameter currentNode) + private void DeactivateNode(NodeRelation currentNode) { var newItem = currentNode.Current; var parent = currentNode.Parent; diff --git a/BeWo/View/Detail/MassnahmenTreeViewView.xaml.cs b/BeWo/View/Detail/MassnahmenTreeViewView.xaml.cs index df9eb16ca..22601de52 100644 --- a/BeWo/View/Detail/MassnahmenTreeViewView.xaml.cs +++ b/BeWo/View/Detail/MassnahmenTreeViewView.xaml.cs @@ -174,7 +174,7 @@ namespace BeWo.View.Detail break; case "Bearbeiten": if (selectedItem != null) - EditTreeItem(selectedItem.GoalEntryVM); + StartEditTreeItem(selectedItem.GoalEntryVM); break; case "Einzelnes Element kopieren": if (selectedItem != null) @@ -480,7 +480,7 @@ namespace BeWo.View.Detail } item.Items.Sort(CompareToCustom); - + //item.Items.Sort((x, y) => x.GoalEntryVM?.DisplayName?.CompareTo(y.GoalEntryVM?.DisplayName) ?? string.Compare(string.Empty, y.GoalEntryVM?.DisplayName, StringComparison.Ordinal)); } } @@ -574,7 +574,7 @@ namespace BeWo.View.Detail _History.ClearHistory(); } - private static void EditTreeItem(ValueListEntryVM valueListEntry) + private void StartEditTreeItem(ValueListEntryVM valueListEntry) { if (valueListEntry == null) return; if (valueListEntry.IsNew) @@ -595,7 +595,14 @@ namespace BeWo.View.Detail beWoWindow.Close(); }; - control.SaveButtonClicked += () => beWoWindow.Close(); + control.SaveButtonClicked += () => + { + EditTreeItem(valueListEntry); + + valueListEntry.CommitToDataContract(); + + beWoWindow.Close(); + }; beWoWindow.Height = 200; beWoWindow.Width = 500; @@ -762,7 +769,7 @@ namespace BeWo.View.Detail TraverseTreeViewItem(child); } } - + public void AddTreeItemWithControl(SupportConceptGoalTreeItem parent, ValueListEntryType valueListEntryType, string viewHeader) { var control = new ValueListEntryEditControl(new ValueListEntryVM(new ValueListEntryDC()), null); @@ -797,7 +804,7 @@ namespace BeWo.View.Detail beWoWindow.rootGroupBox.Header = viewHeader; beWoWindow.ShowDialog(); } - + private void AddTreeItem(SupportConceptGoalTreeItem parent, ValueListEntryType valueListEntryType, string description = null, string abbreviation = null, string notice = null) { var param = _TreeTrimmer.DoAddAction(parent, valueListEntryType, description, abbreviation, notice); @@ -812,7 +819,7 @@ namespace BeWo.View.Detail } private void DeleteTreeItem(SupportConceptGoalTreeItem selectedItem) { - var del = _TreeTrimmer.DoDeleteAction(new MassnahmenHistoryNodeParameter(selectedItem)); + var del = _TreeTrimmer.DoDeleteAction(new MassnahmenHistoryRecord.NodeRelation(selectedItem)); _History.RecordDelete(del); } @@ -833,6 +840,12 @@ namespace BeWo.View.Detail _History.RecordMove(record); } + private void EditTreeItem(ValueListEntryVM valueListEntry) + { + var param = _TreeTrimmer.DoEditAction(valueListEntry.DataContract, valueListEntry); + + _History.RecordEdit(param); + } private SupportConceptGoalTreeItem GetNearestContainer(UIElement element) {