From e785302c9ee60a9168b4a1a09c58e8ba1ef5cc8c Mon Sep 17 00:00:00 2001 From: Kathy Date: Wed, 17 Sep 2014 16:44:31 +0000 Subject: [PATCH] Calvert: copied steps/sections have change ids --- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 7 +++ .../Extension/ItemInsertExt.cs | 44 +++++++++++++++++-- .../DisplayTabControl.cs | 14 +++--- PROMS/Volian.Controls.Library/EditItem.cs | 17 +++++-- PROMS/Volian.Controls.Library/vlnTreeView.cs | 18 ++++++-- 5 files changed, 82 insertions(+), 18 deletions(-) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 804ddd65..184416f2 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -245,6 +245,7 @@ namespace VEPROMS tv.InsertItemInfo += new vlnTreeViewItemInfoInsertEvent(tv_InsertItemInfo); tv.NodeInsert += new vlnTreeViewEvent(tv_NodeInsert); tv.PasteItemInfo += new vlnTreeViewItemInfoPasteEvent(tv_PasteItemInfo); + tv.GetChangeId += new vlnTreeViewGetChangeIdEvent(tv_GetChangeId); tv.NodeCopy += new vlnTreeViewEvent(tv_NodeCopy); tv.ClipboardStatus += new vlnTreeViewClipboardStatusEvent(tv_ClipboardStatus); tc.ItemPaste += new StepPanelItemPastedEvent(tc_ItemPasted); @@ -282,6 +283,12 @@ namespace VEPROMS displayApplicability.ApplicabilityViewModeChanged += new DisplayApplicability.DisplayApplicabilityEvent(displayApplicability_ApplicabilityViewModeChanged); tv.ExportImportProcedureSets += new vlnTreeViewEvent(tv_ExportImportProcedureSets); } + + string tv_GetChangeId(object sender, vlnTreeItemInfoEventArgs args) + { + tc.HandleChangeId(args.MyItemInfo, null); + return tc.ChgId; + } ItemInfo tv_ClipboardStatus(object sender, vlnTreeEventArgs args) { return tc.MyCopyStep; diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs index f2eec955..cf53fa71 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs @@ -413,8 +413,41 @@ namespace VEPROMS.CSLA.Library return tmp; } #endregion - #region PasteSiblingBefore - public ItemInfo PasteSiblingBefore(int copyStartID) + #region PasteChangeId + public static void PasteSetChangeId(ItemInfo ii, string chgid) + { + if (ii.IsProcedure) + { + return; // copy over change bars & change ids as they exist. + } + else if (ii.IsSection) + { + // don't save change id for section. DON'T return though because code below sets + // change ids for steps within section. + } + else if (ii.IsStep) + { + StepConfig sc = ii.MyConfig as StepConfig; + sc.Step_ChangeID = chgid; + using (Item itm = ii.Get()) + { + itm.MyContent.Config = sc.ToString(); + itm.MyContent.DTS = DateTime.Now; + itm.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID; + itm.Save(); + } + } + // handle all of the children + if (ii.Cautions != null) foreach (ItemInfo chldc in ii.Cautions) PasteSetChangeId(chldc, chgid); + if (ii.Notes != null) foreach (ItemInfo chldn in ii.Notes) PasteSetChangeId(chldn, chgid); + if (ii.RNOs != null) foreach (ItemInfo chldr in ii.RNOs) PasteSetChangeId(chldr, chgid); + if (ii.Tables != null) foreach (ItemInfo chldt in ii.Tables) PasteSetChangeId(chldt, chgid); + if (ii.Sections != null) foreach (ItemInfo chldsc in ii.Sections) PasteSetChangeId(chldsc, chgid); + if (ii.Steps != null) foreach (ItemInfo chlds in ii.Steps) PasteSetChangeId(chlds, chgid); + } + #endregion + #region PasteSiblingBefore + public ItemInfo PasteSiblingBefore(int copyStartID, string chgid) { // To determine 'type' of pasted item, if it's a step (type >=20000), use the originating // item, i.e. item inserting after. If it's a section or procedure, use the copied item's type. @@ -426,6 +459,7 @@ namespace VEPROMS.CSLA.Library using (Item item = Get()) ItemInfo.Refresh(item); tmp.UpdateTransitionText(); tmp.UpdatePastedStepTransitionText(); + PasteSetChangeId(tmp, chgid); OnNewSiblingBefore(new ItemInfoInsertEventArgs(tmp, EAddpingPart.Before)); return tmp; } @@ -436,7 +470,7 @@ namespace VEPROMS.CSLA.Library return this; } } - public ItemInfo PasteSiblingAfter(int copyStartID) + public ItemInfo PasteSiblingAfter(int copyStartID, string chgid) { // To determine 'type' of pasted item, if it's a step (type >=20000), use the originating // item, i.e. item inserting after. If it's a section or procedure, use the copied item's type. @@ -453,6 +487,7 @@ namespace VEPROMS.CSLA.Library if (tmp.IsCaution || tmp.IsNote) ResetOrdinal(); tmp.UpdateTransitionText(); tmp.UpdatePastedStepTransitionText(); + PasteSetChangeId(tmp, chgid); OnNewSiblingAfter(new ItemInfoInsertEventArgs(tmp, EAddpingPart.After)); return tmp; } @@ -1214,7 +1249,7 @@ namespace VEPROMS.CSLA.Library } #endregion #region PasteReplace - public static ItemInfo PasteReplace(ItemInfo itemInfo, int copyStartID) + public static ItemInfo PasteReplace(ItemInfo itemInfo, int copyStartID, string chgid) { if (!CanDeleteObject()) throw new System.Security.SecurityException("User not authorized to remove a Item"); @@ -1224,6 +1259,7 @@ namespace VEPROMS.CSLA.Library // Delete business objects, including remove from tree ItemInfo.DeleteItemInfoAndChildren(itemInfo.ItemID); // Dispose ItemInfo and Children using (Item item = Get(newItemInfo.ItemID)) ItemInfo.Refresh(item); + ItemInfo.PasteSetChangeId(newItemInfo, chgid); if (newItemInfo.NextItem != null) using (Item item = newItemInfo.NextItem.Get()) ItemInfo.Refresh(item); newItemInfo.RefreshNextItems(); // if inserting after a caution or note, refreshes tabs. This will adjust bullets diff --git a/PROMS/Volian.Controls.Library/DisplayTabControl.cs b/PROMS/Volian.Controls.Library/DisplayTabControl.cs index c8a89789..6150352f 100644 --- a/PROMS/Volian.Controls.Library/DisplayTabControl.cs +++ b/PROMS/Volian.Controls.Library/DisplayTabControl.cs @@ -874,7 +874,7 @@ namespace Volian.Controls.Library } private void PromptForChangeId(ItemInfo myItemInfo, DisplayTabItem pg) { - dlgChgId dlgCI = new dlgChgId(this); + dlgChgId dlgCI = new dlgChgId(this); //, null); dlgCI.ShowDialog(this); ItemsChangeIds.Add(myItemInfo.MyProcedure.ItemID, ChgId); SetChangeId(ChgId, pg, myItemInfo); @@ -882,12 +882,12 @@ namespace Volian.Controls.Library private void SetChangeId(string chgid, DisplayTabItem pg, ItemInfo ii) { - if (pg == null || pg.MyStepTabPanel == null) - { - ChgId = null; - return; - } - pg.MyStepTabPanel.MyStepTabRibbon.SetChangeId(chgid, ii); + //if (pg == null || pg.MyStepTabPanel == null) + //{ + // ChgId = null; + // return; + //} + if (pg != null && pg.MyStepTabPanel != null) pg.MyStepTabPanel.MyStepTabRibbon.SetChangeId(chgid, ii); ChgId = chgid; } /// diff --git a/PROMS/Volian.Controls.Library/EditItem.cs b/PROMS/Volian.Controls.Library/EditItem.cs index 55457c8e..ec3b5f63 100644 --- a/PROMS/Volian.Controls.Library/EditItem.cs +++ b/PROMS/Volian.Controls.Library/EditItem.cs @@ -1178,8 +1178,10 @@ namespace Volian.Controls.Library #region CopyPaste public void PasteSiblingBefore(int copyStartID) { - ItemInfo newItemInfo = MyItemInfo.PasteSiblingBefore(copyStartID); + ItemInfo newItemInfo = MyItemInfo.PasteSiblingBefore(copyStartID, GetChangeId(MyItemInfo)); + if (newItemInfo.ItemID == MyItemInfo.ItemID) return; + EditItem newEditItem = null; switch (_MyChildRelation) { @@ -1199,9 +1201,18 @@ namespace Volian.Controls.Library MyStepPanel.MyStepTabPanel.MyDisplayTabControl.OnItemPaste(this, new vlnTreeItemInfoPasteEventArgs(newItemInfo, copyStartID, ItemInfo.EAddpingPart.Before, newItemInfo.MyContent.Type)); } + + private string GetChangeId(ItemInfo iiDest) + { + // get the change id for the destination's procedure's change id. + string chgid = null; + if (iiDest.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData.ChangeIds) + chgid = MyStepPanel.MyStepTabPanel.MyDisplayTabControl.ItemsChangeIds[iiDest.MyProcedure.ItemID]; + return chgid; + } public void PasteSiblingAfter(int copyStartID) { - ItemInfo newItemInfo = MyItemInfo.PasteSiblingAfter(copyStartID); + ItemInfo newItemInfo = MyItemInfo.PasteSiblingAfter(copyStartID, GetChangeId(MyItemInfo)); if (newItemInfo.ItemID == MyItemInfo.ItemID) return; EditItem newEditItem = null; switch (_MyChildRelation) @@ -1241,7 +1252,7 @@ namespace Volian.Controls.Library ItemInfo newItemInfo = null; try { - newItemInfo = Item.PasteReplace(MyItemInfo, copyStartID); + newItemInfo = Item.PasteReplace(MyItemInfo, copyStartID, GetChangeId(MyItemInfo)); } //catch (System.Data.SqlClient.SqlException ex) catch (Exception ex) diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index 40d6ef41..095edcb3 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -30,6 +30,7 @@ namespace Volian.Controls.Library public delegate void vlnTreeViewSectionInfoEvent(object sender, vlnTreeSectionInfoEventArgs args); public delegate void WordSectionDeletedEvent(object sender, WordSectionEventArgs args); public delegate void vlnTreeViewPdfEvent(object sender, vlnTreeViewPdfArgs args); + public delegate string vlnTreeViewGetChangeIdEvent(object sender, vlnTreeItemInfoEventArgs args); public partial class vlnTreeSectionInfoEventArgs { private bool _IsDeleting = false; @@ -336,6 +337,12 @@ namespace Volian.Controls.Library ItemInfo _LastItemInfo = null; #endregion #region Events + public event vlnTreeViewGetChangeIdEvent GetChangeId; + private string OnGetChangeId(object sender, vlnTreeItemInfoEventArgs args) + { + if (GetChangeId != null) return GetChangeId(sender, args); + return null; + } public event vlnTreeViewPdfEvent ViewPDF; private void OnViewPDF(object sender, vlnTreeViewPdfArgs args) { @@ -1488,11 +1495,13 @@ namespace Volian.Controls.Library if (ii.IsProcedure || !OnPasteItemInfo(this, new vlnTreeItemInfoPasteEventArgs(ii, copyStartID, pasteOpt, ii.MyContent.Type))) { // The parent step was not open in the step editor, just paste step (in data) and add treenode. + // first, check if a changeid is required. + string chgId = OnGetChangeId(this, new vlnTreeItemInfoEventArgs(ii)); ItemInfo newItemInfo = null; if (newtype == MenuSelections.StepBefore) - newItemInfo = ii.PasteSiblingBefore(copyStartID); + newItemInfo = ii.PasteSiblingBefore(copyStartID, chgId); else - newItemInfo = ii.PasteSiblingAfter(copyStartID); + newItemInfo = ii.PasteSiblingAfter(copyStartID, chgId); } SelectedNode = (VETreeNode)((newtype == MenuSelections.StepAfter) ? tn.NextNode : tn.PrevNode); } @@ -1503,8 +1512,9 @@ namespace Volian.Controls.Library ItemInfo ii = tn.VEObject as ItemInfo; if (!OnPasteItemInfo(this, new vlnTreeItemInfoPasteEventArgs(ii, copyStartID, ItemInfo.EAddpingPart.Replace, ii.MyContent.Type))) { - //return; - ItemInfo replItemInfo = Item.PasteReplace(ii, copyStartID); + // first, check if a changeid is required. + string chgId = OnGetChangeId(this, new vlnTreeItemInfoEventArgs(ii)); + ItemInfo replItemInfo = Item.PasteReplace(ii, copyStartID, chgId); } SelectedNode = (VETreeNode)((prevtn != null) ? prevtn.NextNode : partn.FirstNode); }