From 2783d2cc77e5765d3210d6531e74d0d8926b76ac Mon Sep 17 00:00:00 2001 From: mschill Date: Wed, 3 Dec 2025 15:53:29 -0500 Subject: [PATCH] B2019-140/B2022-099 After doing an Approval (final stage) of a procedure, the change bars do not reset on the screen. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, when change the “Showing Change bars” option, the screen does not refresh. --- .../dlgApproveProcedure.cs | 22 +++++++++ PROMS/VEPROMS User Interface/frmVEPROMS.cs | 36 +++++++++++++++ .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 45 +++++++++++++++++++ 3 files changed, 103 insertions(+) diff --git a/PROMS/VEPROMS User Interface/dlgApproveProcedure.cs b/PROMS/VEPROMS User Interface/dlgApproveProcedure.cs index b914dad9..0dd507e5 100644 --- a/PROMS/VEPROMS User Interface/dlgApproveProcedure.cs +++ b/PROMS/VEPROMS User Interface/dlgApproveProcedure.cs @@ -13,6 +13,8 @@ using System.Text.RegularExpressions; using System.Globalization; using DevComponents.DotNetBar; using JR.Utils.GUI.Forms; +using Volian.Controls.Library; +using System.Linq; namespace VEPROMS { @@ -1321,6 +1323,26 @@ namespace VEPROMS // Clear the change bar override for this procedure: pi.ClearChangeBarOverrides(); + + //B2019-140 Change bars do not get refreshed when approval is run. + ProcedureInfo newproc = ItemInfo.ResetProcedure(pi.ItemID); + + //// Refresh the StepPanel for the current Procedure + //// so change bars update + //// on any open StepPanel + DisplayTabItem dti = MyFrmVEPROMS.GetTabContainingProcedure(pi.ItemID); + if (dti != null) + { + if (!dti.MyStepTabPanel.MyStepPanel.ContainsFocus) + dti.MyStepTabPanel.MyStepPanel.Focus(); + + foreach (EditItem eitm in dti.MyStepTabPanel.MyStepPanel.Controls.OfType()) + eitm.ChangeBar = eitm.MyItemInfo.HasChangeBar; + } + + //since in a separate form, need to update the tree view + //so "Showing Change Bars" Content Menu Item is correct + MyFrmVEPROMS.RefreshProcedureNode(newproc); } else UpdateProcedureConfig(pi, ap.RevNumber, ap.RevDate, myDTS, selectedSlave); diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 288f5d18..b4308c66 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -589,6 +589,25 @@ namespace VEPROMS } } + //B2019-140 Change bars do not get refreshed when approval is run. + // Get the displaytab containing the procedure + // if none exists, return null + public DisplayTabItem GetTabContainingProcedure(int procid) => tc?.MyBar?.Items?.OfType().FirstOrDefault(x => x.MyItemInfo?.ItemID == procid); + // Refresh Node in Tree + // Used for when Change Bar Updates as part of approval. + public void RefreshProcedureNode(ProcedureInfo itm) + { + VETreeNode tn = tv.FindNode(itm, tv.Nodes); + var tmp = (ProcedureInfo)tn?.VEObject; + if (tmp != null) + { + tmp.ChangeBarDate = itm.ChangeBarDate; + tmp.MyConfig = itm.MyConfig; + } + + tn?.RefreshNode(); + } + void tv_SelectDateToStartChangeBars(object sender, vlnTreeEventArgs args) { ProcedureInfo pi = (args.Node as VETreeNode).VEObject as ProcedureInfo; @@ -606,6 +625,23 @@ namespace VEPROMS itm.MyContent.Config = pc.ToString(); itm.UserID = Volian.Base.Library.VlnSettings.UserID; itm.Save(); + + //B2019-140 Change bars do not get refreshed when approval is run. + // Reset a Procedure and sub items in the cache + ProcedureInfo newproc = ItemInfo.ResetProcedure(pi.ItemID); + + //// Refresh the StepPanel for the current Procedure + //// so change bars update + //// on any open StepPanel + DisplayTabItem dti = GetTabContainingProcedure(pi.ItemID); + if (dti != null) + { + if (!dti.MyStepTabPanel.MyStepPanel.ContainsFocus) + dti.MyStepTabPanel.MyStepPanel.Focus(); + + foreach (EditItem eitm in dti.MyStepTabPanel.MyStepPanel.Controls.OfType()) + eitm.ChangeBar = eitm.MyItemInfo.HasChangeBar; + } } } } diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 532d3585..8cd4a26b 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -3819,6 +3819,51 @@ namespace VEPROMS.CSLA.Library _Tables = null; _SupInfos = null; } + + //B2019-140 Change bars do not get refreshed when approval is run. + // Reset a Procedure and sub items in the cache + public static ProcedureInfo ResetProcedure(int procID) + { + // The following lines reload the procedure info cache + ProcedureInfo newproc = ProcedureInfo.Get(procID, true); + newproc.RefreshConfig(); + + //the following is needed to force the ProcedureConfig to reload + #pragma warning disable S1656 // Variables should not be self-assigned + newproc.MyConfig = newproc.MyConfig; + #pragma warning restore S1656 // Variables should not be self-assigned + + //reload the Content Cache for the procedure + ContentInfo.Refresh(Content.Get(newproc.MyContent.ContentID, true)); + + // The following line actually reloads the item info cache + ItemInfo newprocitem = Get(procID, true); + newprocitem.RefreshConfig(); + + //Reload all the child/sub items +#pragma warning disable S2971 // LINQ expressions should be simplified - need initial ToList to force enumeration + //otherwise will get a "Collection was modified; enumeration operation may not execute" error + List itemIDs = _CacheByPrimaryKey.Values.ToList().SelectMany(y => y).Where(t => t?.ActiveParent != null && (t.ActiveParent is ItemInfo) && t.MyProcedure.ItemID == procID).Select(x => (x.ActiveParent as ItemInfo).ItemID).Distinct().ToList(); +#pragma warning restore S2971 // LINQ expressions should be simplified + for (int index = 0; index < itemIDs.Count; index++) + { + ResetParts(itemIDs[index]); + } + + //reset the procedure config for all items attached to current procedure +#pragma warning disable S2971 // LINQ expressions should be simplified - need initial ToList to force enumeration + //otherwise will get a "Collection was modified; enumeration operation may not execute" error + List pconfigrefresh_items = _CacheByPrimaryKey.Values.ToList().SelectMany(y => y).Where(t => t?.MyProcedure?.ItemID == procID).Distinct().ToList(); +#pragma warning restore S2971 // LINQ expressions should be simplified + for (int index = 0; index < pconfigrefresh_items.Count; index++) + { + pconfigrefresh_items[index].MyProcedure = newproc; + } + + //return the changed procedure info + return newproc; + } + private ItemInfoList _Procedures; public ItemInfoList Procedures { get { return Lookup(E_FromType.Procedure, ref _Procedures); } } -- 2.49.1