Merge pull request 'B2019-140/B2022-099 After doing an Approval (final stage) of a procedure, the change bars do not reset on the screen.' (#666) from B2019-140_B2022-099 into Development

good for testing phase
This commit was merged in pull request #666.
This commit is contained in:
2025-12-03 16:03:25 -05:00
3 changed files with 103 additions and 0 deletions

View File

@@ -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<EditItem>())
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);

View File

@@ -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<DisplayTabItem>().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<EditItem>())
eitm.ChangeBar = eitm.MyItemInfo.HasChangeBar;
}
}
}
}

View File

@@ -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<int> 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<ItemInfo> 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); } }