From 62a296f9093456267eda601d9538fbaaaa93fff5 Mon Sep 17 00:00:00 2001 From: John Jenko Date: Tue, 2 Dec 2025 10:53:26 -0500 Subject: [PATCH 01/26] =?UTF-8?q?F2025-038=20Added=20a=20format=20flag=20t?= =?UTF-8?q?o=20not=20include=20the=20word=20=E2=80=9CSECTION=E2=80=9D=20in?= =?UTF-8?q?=20front=20the=20section=20number=20and=20title=20on=20the=20Co?= =?UTF-8?q?ntinuous=20Action=20Summary=20that=20is=20generated=20by=20PROM?= =?UTF-8?q?S.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROMS/Formats/fmtall/BASEall.xml | Bin 91078 -> 91132 bytes PROMS/Formats/fmtall/VEGP2all.xml | Bin 235158 -> 235556 bytes .../Format/PlantFormat.cs | 10 ++++++++++ PROMS/Volian.Print.Library/ContActionSum.cs | 9 ++++++--- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/PROMS/Formats/fmtall/BASEall.xml b/PROMS/Formats/fmtall/BASEall.xml index bfdff426c9a08e9a9ebddb19dab2154aaa7b6dc2..56657cc2a26697f470b093e7a194ae888682551d 100644 GIT binary patch delta 32 ocmX?hob}If)(uuMlYd0Zar!VMG9)piGUPOC$86V*VVunl0NalXc>n+a delta 18 Zcmex!ob}jo)(uuM%>^;r3t||1*a27%2nPTF diff --git a/PROMS/Formats/fmtall/VEGP2all.xml b/PROMS/Formats/fmtall/VEGP2all.xml index 1a9b1c3fecc3d589ac63bbcc93648d39e8ef3836..86043269b01fb8926ac35ca7a14d584254c39498 100644 GIT binary patch delta 300 zcmbQXmT$=hz71t&^_&b4Xv5&lkk63EkjYR2BujzpQifs%M}}k|KNBny3>3))!bFB5 zhDrt(AYB5)3Jjh=^~nr5K-mv06CNMQ&8o1Fucw`EWQ@``|RsUbin zej|K3p{td2~tg)bxp$80DMW S%-Y+`7=f5+dz%@vKmq`{OgxYP delta 31 lcmZ3ofp6Mcz71t&(;rM>6lfN)Xcw_y1Y)M`A{NX72>`*S3K{?a diff --git a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs index 4f02807b..87719a04 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs @@ -4341,6 +4341,16 @@ public LeftJustifyList(XmlNodeList xmlNodeList) : base(xmlNodeList) { } return LazyLoad(ref _IncludeSectionNumAndTitle, "@IncludeSectionNumAndTitle"); } } + + //F2025-038 default (in base format) is True. The lable "SECTION" will precede the section number an title + private LazyLoad _IncludeSectionLabel; + public bool IncludeSectionLabel + { + get + { + return LazyLoad(ref _IncludeSectionLabel, "@IncludeSectionLabel"); + } + } // the font and font styles to use for the continuous action summary private VE_Font _Font; public VE_Font Font diff --git a/PROMS/Volian.Print.Library/ContActionSum.cs b/PROMS/Volian.Print.Library/ContActionSum.cs index ec199b56..d7853e03 100644 --- a/PROMS/Volian.Print.Library/ContActionSum.cs +++ b/PROMS/Volian.Print.Library/ContActionSum.cs @@ -49,7 +49,7 @@ namespace Volian.Print.Library { if (myContAct.MyChildren.Count > 0) if (myContAct.MyParagraph.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.ContinuousActionSummaryData.IncludeSectionNumAndTitle) // only print the section title if it has Continuous Action Steps - AddSectionHeader(myContAct.MyParagraph.MyItemInfo.DisplayNumber, myContAct.MyParagraph.MyItemInfo.FormattedDisplayText); + AddSectionHeader(myContAct.MyParagraph.MyItemInfo.DisplayNumber, myContAct.MyParagraph.MyItemInfo.FormattedDisplayText, myContAct.MyParagraph.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.ContinuousActionSummaryData.IncludeSectionLabel); foreach (pkParagraph pgh in myContAct.MyChildren) // within each section... { ItemInfo hlsii = GetHLSii(pgh.MyParagraph.MyItemInfo); @@ -175,7 +175,7 @@ namespace Volian.Print.Library WriteCell("DONE", true, true); WriteCell("PAGE", true, false); } - private void AddSectionHeader(string number, string title) + private void AddSectionHeader(string number, string title, bool IncludeSectionLabel) { if (!_FirstSection) { @@ -187,7 +187,10 @@ namespace Volian.Print.Library _FirstSection = false; Advance(2); SetIndent(0, 0); - WriteCell("SECTION " + number, true, false); + if (IncludeSectionLabel) + WriteCell("SECTION " + number, true, false); + else + WriteCell(number, true, false); // F2025-038 don't include the word SECTION before number and title WriteCell(" " + title, false, true); Advance(); } From 2783d2cc77e5765d3210d6531e74d0d8926b76ac Mon Sep 17 00:00:00 2001 From: mschill Date: Wed, 3 Dec 2025 15:53:29 -0500 Subject: [PATCH 02/26] 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); } } From 47cdedefd45bec2b99a684f8c7f71692c2c86c52 Mon Sep 17 00:00:00 2001 From: mschill Date: Thu, 4 Dec 2025 10:41:37 -0500 Subject: [PATCH 03/26] B2025-064 PROMS clears the windows clipboard when closing PROMS with tabs open. --- PROMS/Volian.Controls.Library/StepTabRibbon.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PROMS/Volian.Controls.Library/StepTabRibbon.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.cs index 87ce1980..08618d12 100644 --- a/PROMS/Volian.Controls.Library/StepTabRibbon.cs +++ b/PROMS/Volian.Controls.Library/StepTabRibbon.cs @@ -1667,7 +1667,7 @@ namespace Volian.Controls.Library } } Clipboard.Clear(); - Clipboard.SetDataObject(myDO); // this saves the cleaned up information to the Windows clipboard + Clipboard.SetDataObject(myDO, true); // this saves the cleaned up information to the Windows clipboard } iData = Clipboard.GetDataObject(); bool noEquationData = true; From b4f2b891393f1ac92f1a955c79b29a52f0193d27 Mon Sep 17 00:00:00 2001 From: John Jenko Date: Thu, 4 Dec 2025 16:42:40 -0500 Subject: [PATCH 04/26] F2025-040 Added code to adjust the position of the CAS box around the high level step number in single column attachment sections --- PROMS/Volian.Print.Library/vlnParagraph.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index 591ed771..4a52b20f 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -6456,8 +6456,11 @@ namespace Volian.Print.Library { if (itemInfo.MyDocStyle.AlignHLSTabWithSect || itemInfo.FormatStepData.AlignHLSTabWithSectOvride) { + float orgXOffset = MyTab.XOffset; myTab.XOffset = (float)itemInfo.MyDocStyle.Layout.LeftMargin + (float)formatInfo.PlantFormat.FormatData.SectData.SectionHeader.Pos; XOffset = myTab.XOffset + myTab.Width; + // F2025-040 Adjust the Cont Act box position around HLS number + if (myTab.MyMacro != null) myTab.MyMacro.XOffset += (MyTab.XOffset - orgXOffset); } else { From e6af91c6ab12fabd6caae0a0448f77f9afae826f Mon Sep 17 00:00:00 2001 From: John Jenko Date: Tue, 9 Dec 2025 16:15:06 -0500 Subject: [PATCH 05/26] F2025-041 Added a non-bolded high level CAS step type for use in single column attachment --- PROMS/Formats/fmtall/VEGP2all.xml | Bin 235556 -> 236454 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PROMS/Formats/fmtall/VEGP2all.xml b/PROMS/Formats/fmtall/VEGP2all.xml index 86043269b01fb8926ac35ca7a14d584254c39498..3b797a864defa090a2b23c93935346b1740fee4b 100644 GIT binary patch delta 85 zcmV-b0IL6_unwlT4uG@)HsO~Lhyfk}HJ3rU0TTs706_p#x0%!dV*!^^mH`x(AbSH6 rmoA9`P?oL%ESFw~0V=o5mjN6Bm*AoT1eczr0SJde;Q_Zo;R52e>8c)- delta 31 pcmV+)0O0?ow+^JR4uG@)HsP0`V*>=2o}~c@hs5Lox5VTE; Date: Wed, 10 Dec 2025 14:49:45 -0500 Subject: [PATCH 06/26] C2025-060 When format is updated in PROMS, auto-update the format cache so it doesn't require exiting PROMS and going back in. --- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index b4308c66..0d3e7556 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -5380,6 +5380,8 @@ namespace VEPROMS private void btnUpdateFormat_Click(object sender, EventArgs e) { UpdateFormats(null); + //C2025-060 When format is updated in PROMS, auto-update the format cache so it doesn't require exiting PROMS and going back in. + RefreshFormats(sender, null); } private void UpdateFormats(string mypath) From 97fc02b601df5f8ac40531b9831a2b1bccdd9ad1 Mon Sep 17 00:00:00 2001 From: mschill Date: Tue, 16 Dec 2025 06:03:18 -0500 Subject: [PATCH 07/26] Code Cleanup - Added a debug for developers around Clipboard setting Data Objects via the StepTabRibbon. Will be verified during the internal vogtle cleanup. --- PROMS/Volian.Controls.Library/StepTabRibbon.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/PROMS/Volian.Controls.Library/StepTabRibbon.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.cs index 08618d12..482e4c1a 100644 --- a/PROMS/Volian.Controls.Library/StepTabRibbon.cs +++ b/PROMS/Volian.Controls.Library/StepTabRibbon.cs @@ -1667,7 +1667,18 @@ namespace Volian.Controls.Library } } Clipboard.Clear(); - Clipboard.SetDataObject(myDO, true); // this saves the cleaned up information to the Windows clipboard + + //Try to update the data object to persist beyond PROMS life + //if can't, log it and use old method of scoping clipboard to PROMS life + try + { + Clipboard.SetDataObject(myDO, true); // this saves the cleaned up information to the Windows clipboard + } + catch (Exception ex) + { + _MyLog.Warn($"Error Setting Clipboard Object to Persist beyond PROMS. Clipboard will be scoped to PROMS. Error:{ex.Message}"); + Clipboard.SetDataObject(myDO); // this saves the cleaned up information to the Windows clipboard + } } iData = Clipboard.GetDataObject(); bool noEquationData = true; From d12e5d19c93fc01ac49935ef9c316231aeb9d21c Mon Sep 17 00:00:00 2001 From: mschill Date: Tue, 16 Dec 2025 14:38:41 -0500 Subject: [PATCH 08/26] Rollback_B2025-064 - Rolling back changes for B2025-064 - that CSM item will be re-opened and revisited late January once vogtle is out. --- PROMS/Volian.Controls.Library/StepTabRibbon.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/PROMS/Volian.Controls.Library/StepTabRibbon.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.cs index 482e4c1a..6e7204fe 100644 --- a/PROMS/Volian.Controls.Library/StepTabRibbon.cs +++ b/PROMS/Volian.Controls.Library/StepTabRibbon.cs @@ -1668,6 +1668,7 @@ namespace Volian.Controls.Library } Clipboard.Clear(); + _MyLog.Warn("Clipboard Copied"); //Try to update the data object to persist beyond PROMS life //if can't, log it and use old method of scoping clipboard to PROMS life try From 7d63e7e417bff6734d712a3af19242e339a12037 Mon Sep 17 00:00:00 2001 From: mschill Date: Tue, 16 Dec 2025 14:41:39 -0500 Subject: [PATCH 09/26] Rollback_B2025-064 - Rolling back changes for B2025-064 - that CSM item will be re-opened and revisited late January once vogtle is out. --- PROMS/Volian.Controls.Library/StepTabRibbon.cs | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/PROMS/Volian.Controls.Library/StepTabRibbon.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.cs index 6e7204fe..7c5583b4 100644 --- a/PROMS/Volian.Controls.Library/StepTabRibbon.cs +++ b/PROMS/Volian.Controls.Library/StepTabRibbon.cs @@ -1668,18 +1668,7 @@ namespace Volian.Controls.Library } Clipboard.Clear(); - _MyLog.Warn("Clipboard Copied"); - //Try to update the data object to persist beyond PROMS life - //if can't, log it and use old method of scoping clipboard to PROMS life - try - { - Clipboard.SetDataObject(myDO, true); // this saves the cleaned up information to the Windows clipboard - } - catch (Exception ex) - { - _MyLog.Warn($"Error Setting Clipboard Object to Persist beyond PROMS. Clipboard will be scoped to PROMS. Error:{ex.Message}"); - Clipboard.SetDataObject(myDO); // this saves the cleaned up information to the Windows clipboard - } + Clipboard.SetDataObject(myDO); // this saves the cleaned up information to the Windows clipboard } iData = Clipboard.GetDataObject(); bool noEquationData = true; From dae850616d6bcbd76b867de673c54917e941b5ab Mon Sep 17 00:00:00 2001 From: mschill Date: Fri, 2 Jan 2026 15:12:54 -0500 Subject: [PATCH 10/26] B2025-065 When Printing a Word Section containing XY Plot ROs - when there is a title on the XY Plot, only the first line is indented. --- PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs index 64401d9a..aebad38d 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs @@ -1363,9 +1363,14 @@ namespace VEPROMS.CSLA.Library // An X/Y Plot RO type might have text preceding the Plot Commands int pstart = roValue.IndexOf("< Date: Fri, 9 Jan 2026 09:12:00 -0500 Subject: [PATCH 11/26] C2025-043 Admin Tool - Data Check - Tool to identify and report RO's that are not used in any of the PROMS data. --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 69 ++++- .../frmBatchRefresh.Designer.cs | 272 +++++++++++------- .../VEPROMS User Interface/frmBatchRefresh.cs | 39 ++- .../frmBatchRefresh.resx | 101 +++---- .../Minimal/GeneralReports.cs | 42 +++ .../VEPROMS.CSLA.Library.csproj | 1 + .../TreeViewExtensions.cs | 115 ++++++++ .../Volian.Controls.Library.csproj | 2 + 8 files changed, 480 insertions(+), 161 deletions(-) create mode 100644 PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs create mode 100644 PROMS/Volian.Controls.Library/TreeViewExtensions.cs diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index f36c64d6..2c5d71a3 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -24432,6 +24432,71 @@ ELSE PRINT 'Procedure Creation: [vesp_GetOtherActiveSessions] Error on Creation' GO +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vesp_GetROsNotUsed]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [vesp_GetROsNotUsed]; + +GO + +/****** Object: StoredProcedure [dbo].[vesp_GetROsNotUsed] ******/ + +-- ============================================= +-- Author: Matthew Schill +-- Create date: 1/5/2026 +-- Description: Returns ROs that are not Used in PROMS +-- ============================================= +CREATE PROCEDURE [dbo].[vesp_GetROsNotUsed] +AS +BEGIN + + DECLARE @notused table (RofstChildID int NULL, roid [varchar](50) NULL, ID int NOT NULL, ParentID int NOT NULL, dbID int NOT NULL, title varchar(max) not null) + + DECLARE @FSTs table (RofstID int primary key NOT NULL, RODbID int NOT NULL) + + INSERT INTO @FSTs + Select max(RoFSTID), RODbID from ROFsts + GROUP BY RODbID + + --insert the not used ROs + INSERT INTO @notused + SELECT RofstChild.RofstChildID, RofstChild.roid, RofstChild.ID, RofstChild.ParentID, RofstChild.dbiID, + RofstChild.title + Case When (Not RofstChild.[value] is null) Then ' (' + fstdb.dbiAP + '-' + RofstChild.appid + ')' Else '' End --Add in Accessory Page ID if it exists + FROM RofstChild + INNER JOIN RofstDatabase fstdb on fstdb.RofstID = RofstChild.RofstID and fstdb.dbiID = RofstChild.dbiID + INNER JOIN @FSTs fst on fst.RofstID = fstdb.RofstID AND RofstChild.RofstID = fst.RofstID + where + NOT EXISTS(Select 1 FROM RofstChild subchild where subChild.ParentID = RofstChild.ID) --make sure it is not a parent of something else + AND NOT EXISTS(Select 1 FROM DRoUsages where [DRoUsages].[ROID] like RofstChild.[ROID] + '%' AND fst.RODbID = DROUsages.RODbID) --not used in documents + AND NOT EXISTS(Select 1 FROM RoUsages where [RoUsages].[ROID] like RofstChild.[ROID] + '%' AND fst.RODbID = ROUsages.RODbID) --not used in regular ROs + + --insert thier parents + --if they are not already in @notused + INSERT INTO @notused + SELECT DISTINCT RofstChild.RofstChildID, RofstChild.roid, RofstChild.ID, RofstChild.ParentID, RofstChild.dbiID, RofstChild.title + FROM RofstChild + INNER JOIN @notused notusedgetparents on notusedgetparents.ParentID = RofstChild.ID AND RofstChild.dbiID = notusedgetparents.dbID + INNER JOIN @FSTs fst on RofstChild.RofstID = fst.RofstID + LEFT OUTER JOIN @notused notused on notused.RofstChildID = RofstChild.RofstChildID + WHERE notused.RofstChildID IS NULL + + --insert parent dbs + --if they are not already in @notused + INSERT INTO @notused + SELECT DISTINCT NULL, NULL, RofstDatabase.ID, RofstDatabase.ParentID, RofstDatabase.dbiID, RofstDatabase.dbiTitle + FROM RofstDatabase + INNER JOIN @FSTs fst on fst.RofstID = RofstDatabase.RofstID + + select * + FROM @notused notused + order by RofstChildID, dbID + + RETURN +END + +IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_GetROsNotUsed] Succeeded' +ELSE PRINT 'Procedure Creation: [vesp_GetROsNotUsed] Error on Creation' +GO + + /* --------------------------------------------------------------------------- | ADD New Code Before this Block | @@ -24465,8 +24530,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '09/16/2025 7:00 AM' - set @RevDescription = 'Added Purge Change History and Index Maintenance functions to Admin Tools' + set @RevDate = '1/5/2026 7:00 AM' + set @RevDescription = 'Added Method to get ROs that are not used in PROMS' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs index 635d8516..a3a789a3 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs @@ -52,6 +52,16 @@ this.expandableSplitter1 = new DevComponents.DotNetBar.ExpandableSplitter(); this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); this.sideNav1 = new DevComponents.DotNetBar.Controls.SideNav(); + this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.itemPanel1 = new DevComponents.DotNetBar.PanelEx(); + this.btnPurgeChange = new DevComponents.DotNetBar.ButtonX(); + this.dtePurge = new System.Windows.Forms.DateTimePicker(); + this.warningBox3 = new DevComponents.DotNetBar.Controls.WarningBox(); + this.warningBox6 = new DevComponents.DotNetBar.Controls.WarningBox(); + this.itemPanel2 = new DevComponents.DotNetBar.PanelEx(); + this.btnIndexMaint = new DevComponents.DotNetBar.ButtonX(); + this.itemPanel3 = new DevComponents.DotNetBar.PanelEx(); + this.btnROsNotUsed = new DevComponents.DotNetBar.ButtonX(); this.sideNavPanel2 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.swRefreshTblsForSrch = new DevComponents.DotNetBar.Controls.SwitchButton(); this.lblRefreshTblForSrch = new DevComponents.DotNetBar.LabelX(); @@ -75,13 +85,6 @@ this.labelX14 = new DevComponents.DotNetBar.LabelX(); this.myTVdel = new System.Windows.Forms.TreeView(); this.btnDeleteItems = new DevComponents.DotNetBar.ButtonX(); - this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel(); - this.btnIndexMaint = new DevComponents.DotNetBar.ButtonX(); - this.itemPanel1 = new DevComponents.DotNetBar.PanelEx(); - this.btnPurgeChange = new DevComponents.DotNetBar.ButtonX(); - this.dtePurge = new System.Windows.Forms.DateTimePicker(); - this.warningBox3 = new DevComponents.DotNetBar.Controls.WarningBox(); - this.warningBox6 = new DevComponents.DotNetBar.Controls.WarningBox(); this.sideNavPanel3 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.swCheckROLinks = new DevComponents.DotNetBar.Controls.SwitchButton(); this.labelX12 = new DevComponents.DotNetBar.LabelX(); @@ -120,10 +123,12 @@ this.pnlLater.SuspendLayout(); this.panelEx1.SuspendLayout(); this.sideNav1.SuspendLayout(); - this.sideNavPanel2.SuspendLayout(); - this.sideNavPanel4.SuspendLayout(); this.sideNavPanel5.SuspendLayout(); this.itemPanel1.SuspendLayout(); + this.itemPanel2.SuspendLayout(); + this.itemPanel3.SuspendLayout(); + this.sideNavPanel2.SuspendLayout(); + this.sideNavPanel4.SuspendLayout(); this.sideNavPanel3.SuspendLayout(); this.panelEx4.SuspendLayout(); this.SuspendLayout(); @@ -346,7 +351,7 @@ this.pnlLater.Controls.Add(this.dtpDate); this.pnlLater.Dock = System.Windows.Forms.DockStyle.Top; this.pnlLater.Enabled = false; - this.pnlLater.Location = new System.Drawing.Point(6, 23); + this.pnlLater.Location = new System.Drawing.Point(6, 25); this.pnlLater.Name = "pnlLater"; this.pnlLater.Padding = new System.Windows.Forms.Padding(6); this.pnlLater.Size = new System.Drawing.Size(279, 37); @@ -357,7 +362,7 @@ this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(105, 15); this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(18, 13); + this.label5.Size = new System.Drawing.Size(19, 15); this.label5.TabIndex = 5; this.label5.Text = "@"; // @@ -387,7 +392,7 @@ this.chkLater.Dock = System.Windows.Forms.DockStyle.Top; this.chkLater.Location = new System.Drawing.Point(6, 6); this.chkLater.Name = "chkLater"; - this.chkLater.Size = new System.Drawing.Size(279, 17); + this.chkLater.Size = new System.Drawing.Size(279, 19); this.chkLater.TabIndex = 4; this.chkLater.Text = "Process Later"; this.chkLater.UseVisualStyleBackColor = true; @@ -460,8 +465,8 @@ // sideNav1 // this.sideNav1.BackColor = System.Drawing.SystemColors.Control; - this.sideNav1.Controls.Add(this.sideNavPanel2); this.sideNav1.Controls.Add(this.sideNavPanel5); + this.sideNav1.Controls.Add(this.sideNavPanel2); this.sideNav1.Controls.Add(this.sideNavPanel4); this.sideNav1.Controls.Add(this.sideNavPanel3); this.sideNav1.Dock = System.Windows.Forms.DockStyle.Fill; @@ -482,6 +487,138 @@ this.sideNav1.TabIndex = 3; this.sideNav1.Text = "sideNav1"; // + // sideNavPanel5 + // + this.sideNavPanel5.Controls.Add(this.itemPanel1); + this.sideNavPanel5.Controls.Add(this.itemPanel2); + this.sideNavPanel5.Controls.Add(this.itemPanel3); + this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel5.Location = new System.Drawing.Point(117, 35); + this.sideNavPanel5.MinimumSize = new System.Drawing.Size(0, 493); + this.sideNavPanel5.Name = "sideNavPanel5"; + this.sideNavPanel5.Size = new System.Drawing.Size(263, 493); + this.sideNavPanel5.TabIndex = 26; + // + // itemPanel1 + // + this.itemPanel1.Controls.Add(this.btnPurgeChange); + this.itemPanel1.Controls.Add(this.dtePurge); + this.itemPanel1.Controls.Add(this.warningBox3); + this.itemPanel1.Controls.Add(this.warningBox6); + this.itemPanel1.DisabledBackColor = System.Drawing.Color.Empty; + this.itemPanel1.Location = new System.Drawing.Point(0, -2); + this.itemPanel1.Name = "itemPanel1"; + this.itemPanel1.Size = new System.Drawing.Size(267, 148); + this.itemPanel1.Style.Border = DevComponents.DotNetBar.eBorderType.DoubleLine; + this.itemPanel1.Style.BorderColor.Color = System.Drawing.Color.DarkGray; + this.itemPanel1.TabIndex = 0; + // + // btnPurgeChange + // + this.btnPurgeChange.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnPurgeChange.Checked = true; + this.btnPurgeChange.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnPurgeChange.Location = new System.Drawing.Point(18, 32); + this.btnPurgeChange.Name = "btnPurgeChange"; + this.btnPurgeChange.Size = new System.Drawing.Size(227, 23); + this.btnPurgeChange.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnPurgeChange.TabIndex = 1; + this.btnPurgeChange.Text = "Purge Change History"; + this.btnPurgeChange.Tooltip = resources.GetString("btnPurgeChange.Tooltip"); + this.btnPurgeChange.Click += new System.EventHandler(this.btnPurgeChange_Click); + // + // dtePurge + // + this.dtePurge.Format = System.Windows.Forms.DateTimePickerFormat.Short; + this.dtePurge.Location = new System.Drawing.Point(92, 7); + this.dtePurge.Name = "dtePurge"; + this.dtePurge.Size = new System.Drawing.Size(87, 20); + this.dtePurge.TabIndex = 0; + // + // warningBox3 + // + this.warningBox3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); + this.warningBox3.CloseButtonVisible = false; + this.warningBox3.Image = ((System.Drawing.Image)(resources.GetObject("warningBox3.Image"))); + this.warningBox3.Location = new System.Drawing.Point(1, 61); + this.warningBox3.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.warningBox3.Name = "warningBox3"; + this.warningBox3.OptionsButtonVisible = false; + this.warningBox3.Size = new System.Drawing.Size(264, 32); + this.warningBox3.TabIndex = 32; + this.warningBox3.Text = "NOTE These tools can take a long time to run"; + // + // warningBox6 + // + this.warningBox6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); + this.warningBox6.CloseButtonVisible = false; + this.warningBox6.Image = ((System.Drawing.Image)(resources.GetObject("warningBox6.Image"))); + this.warningBox6.Location = new System.Drawing.Point(1, 97); + this.warningBox6.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.warningBox6.Name = "warningBox6"; + this.warningBox6.OptionsButtonVisible = false; + this.warningBox6.Size = new System.Drawing.Size(264, 43); + this.warningBox6.TabIndex = 31; + this.warningBox6.Text = " Be sure there is a current backup of the \r\n database prior to running these func" + + "tions"; + // + // itemPanel2 + // + this.itemPanel2.Controls.Add(this.btnIndexMaint); + this.itemPanel2.DisabledBackColor = System.Drawing.Color.Empty; + this.itemPanel2.Location = new System.Drawing.Point(0, 145); + this.itemPanel2.Name = "itemPanel2"; + this.itemPanel2.Size = new System.Drawing.Size(267, 73); + this.itemPanel2.Style.BackgroundImagePosition = DevComponents.DotNetBar.eBackgroundImagePosition.Tile; + this.itemPanel2.Style.Border = DevComponents.DotNetBar.eBorderType.DoubleLine; + this.itemPanel2.Style.BorderColor.Color = System.Drawing.Color.DarkGray; + this.itemPanel2.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.itemPanel2.Style.GradientAngle = 90; + this.itemPanel2.TabIndex = 8; + // + // btnIndexMaint + // + this.btnIndexMaint.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnIndexMaint.Checked = true; + this.btnIndexMaint.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnIndexMaint.Location = new System.Drawing.Point(19, 24); + this.btnIndexMaint.Name = "btnIndexMaint"; + this.btnIndexMaint.Size = new System.Drawing.Size(227, 23); + this.btnIndexMaint.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnIndexMaint.TabIndex = 4; + this.btnIndexMaint.Text = "Perform Index Maintenance"; + this.btnIndexMaint.Tooltip = resources.GetString("btnIndexMaint.Tooltip"); + this.btnIndexMaint.Click += new System.EventHandler(this.btnIndexMaint_Click); + // + // itemPanel3 + // + this.itemPanel3.Controls.Add(this.btnROsNotUsed); + this.itemPanel3.DisabledBackColor = System.Drawing.Color.Empty; + this.itemPanel3.Location = new System.Drawing.Point(0, 218); + this.itemPanel3.Name = "itemPanel3"; + this.itemPanel3.Size = new System.Drawing.Size(267, 70); + this.itemPanel3.Style.BackgroundImagePosition = DevComponents.DotNetBar.eBackgroundImagePosition.Tile; + this.itemPanel3.Style.Border = DevComponents.DotNetBar.eBorderType.DoubleLine; + this.itemPanel3.Style.BorderColor.Color = System.Drawing.Color.DarkGray; + this.itemPanel3.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.itemPanel3.Style.GradientAngle = 90; + this.itemPanel3.TabIndex = 12; + // + // btnROsNotUsed + // + this.btnROsNotUsed.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnROsNotUsed.Checked = true; + this.btnROsNotUsed.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnROsNotUsed.Location = new System.Drawing.Point(19, 22); + this.btnROsNotUsed.Name = "btnROsNotUsed"; + this.btnROsNotUsed.Size = new System.Drawing.Size(227, 26); + this.btnROsNotUsed.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.btnROsNotUsed, new DevComponents.DotNetBar.SuperTooltipInfo("ROs Not Used Snapshot", "", "This will Generate an image detailing ROs that exist but are not currently utiliz" + + "ed in any steps in PROMS.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.btnROsNotUsed.TabIndex = 2; + this.btnROsNotUsed.Text = "Generate Snapshot of ROs Not Used"; + this.btnROsNotUsed.Click += new System.EventHandler(this.btnROsNotUsed_Click); + // // sideNavPanel2 // this.sideNavPanel2.Controls.Add(this.swRefreshTblsForSrch); @@ -504,6 +641,7 @@ this.sideNavPanel2.Name = "sideNavPanel2"; this.sideNavPanel2.Size = new System.Drawing.Size(268, 493); this.sideNavPanel2.TabIndex = 6; + this.sideNavPanel2.Visible = false; // // swRefreshTblsForSrch // @@ -543,7 +681,7 @@ this.warningBox4.CloseButtonVisible = false; this.warningBox4.Image = ((System.Drawing.Image)(resources.GetObject("warningBox4.Image"))); this.warningBox4.Location = new System.Drawing.Point(12, 264); - this.warningBox4.Margin = new System.Windows.Forms.Padding(4); + this.warningBox4.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.warningBox4.Name = "warningBox4"; this.warningBox4.OptionsButtonVisible = false; this.warningBox4.Size = new System.Drawing.Size(264, 32); @@ -556,7 +694,7 @@ this.warningBox2.CloseButtonVisible = false; this.warningBox2.Image = ((System.Drawing.Image)(resources.GetObject("warningBox2.Image"))); this.warningBox2.Location = new System.Drawing.Point(12, 302); - this.warningBox2.Margin = new System.Windows.Forms.Padding(4); + this.warningBox2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.warningBox2.Name = "warningBox2"; this.warningBox2.OptionsButtonVisible = false; this.warningBox2.Size = new System.Drawing.Size(264, 43); @@ -834,95 +972,6 @@ this.btnDeleteItems.TabIndex = 35; this.btnDeleteItems.Text = "Process Deletions"; this.btnDeleteItems.Click += new System.EventHandler(this.btnDeleteItems_Click); - // - // sideNavPanel5 - // - this.sideNavPanel5.Controls.Add(this.btnIndexMaint); - this.sideNavPanel5.Controls.Add(this.itemPanel1); - this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel5.Location = new System.Drawing.Point(112, 31); - this.sideNavPanel5.MinimumSize = new System.Drawing.Size(0, 493); - this.sideNavPanel5.Name = "sideNavPanel5"; - this.sideNavPanel5.Size = new System.Drawing.Size(268, 493); - this.sideNavPanel5.TabIndex = 26; - this.sideNavPanel5.Visible = false; - // - // btnIndexMaint - // - this.btnIndexMaint.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnIndexMaint.Checked = true; - this.btnIndexMaint.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btnIndexMaint.Location = new System.Drawing.Point(20, 152); - this.btnIndexMaint.Name = "btnIndexMaint"; - this.btnIndexMaint.Size = new System.Drawing.Size(227, 23); - this.btnIndexMaint.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.btnIndexMaint.TabIndex = 4; - this.btnIndexMaint.Text = "Perform Index Maintenance"; - this.btnIndexMaint.Tooltip = resources.GetString("btnIndexMaint.Tooltip"); - this.btnIndexMaint.Click += new System.EventHandler(this.btnIndexMaint_Click); - // - // itemPanel1 - // - this.itemPanel1.Controls.Add(this.btnPurgeChange); - this.itemPanel1.Controls.Add(this.dtePurge); - this.itemPanel1.Controls.Add(this.warningBox3); - this.itemPanel1.Controls.Add(this.warningBox6); - this.itemPanel1.DisabledBackColor = System.Drawing.Color.Empty; - this.itemPanel1.Location = new System.Drawing.Point(0, -2); - this.itemPanel1.Name = "itemPanel1"; - this.itemPanel1.Size = new System.Drawing.Size(267, 148); - this.itemPanel1.Style.Border = DevComponents.DotNetBar.eBorderType.DoubleLine; - this.itemPanel1.Style.BorderColor.Color = System.Drawing.Color.DarkGray; - this.itemPanel1.TabIndex = 0; - // - // btnPurgeChange - // - this.btnPurgeChange.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnPurgeChange.Checked = true; - this.btnPurgeChange.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btnPurgeChange.Location = new System.Drawing.Point(18, 32); - this.btnPurgeChange.Name = "btnPurgeChange"; - this.btnPurgeChange.Size = new System.Drawing.Size(227, 23); - this.btnPurgeChange.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.btnPurgeChange.TabIndex = 1; - this.btnPurgeChange.Text = "Purge Change History"; - this.btnPurgeChange.Tooltip = resources.GetString("btnPurgeChange.Tooltip"); - this.btnPurgeChange.Click += new System.EventHandler(this.btnPurgeChange_Click); - // - // dtePurge - // - this.dtePurge.Format = System.Windows.Forms.DateTimePickerFormat.Short; - this.dtePurge.Location = new System.Drawing.Point(92, 7); - this.dtePurge.Name = "dtePurge"; - this.dtePurge.Size = new System.Drawing.Size(87, 20); - this.dtePurge.TabIndex = 0; - // - // warningBox3 - // - this.warningBox3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); - this.warningBox3.CloseButtonVisible = false; - this.warningBox3.Image = ((System.Drawing.Image)(resources.GetObject("warningBox3.Image"))); - this.warningBox3.Location = new System.Drawing.Point(1, 61); - this.warningBox3.Margin = new System.Windows.Forms.Padding(4); - this.warningBox3.Name = "warningBox3"; - this.warningBox3.OptionsButtonVisible = false; - this.warningBox3.Size = new System.Drawing.Size(264, 32); - this.warningBox3.TabIndex = 32; - this.warningBox3.Text = "NOTE These tools can take a long time to run"; - // - // warningBox6 - // - this.warningBox6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); - this.warningBox6.CloseButtonVisible = false; - this.warningBox6.Image = ((System.Drawing.Image)(resources.GetObject("warningBox6.Image"))); - this.warningBox6.Location = new System.Drawing.Point(1, 97); - this.warningBox6.Margin = new System.Windows.Forms.Padding(4); - this.warningBox6.Name = "warningBox6"; - this.warningBox6.OptionsButtonVisible = false; - this.warningBox6.Size = new System.Drawing.Size(264, 43); - this.warningBox6.TabIndex = 31; - this.warningBox6.Text = " Be sure there is a current backup of the \r\n database prior to running these func" + - "tions"; // // sideNavPanel3 // @@ -981,7 +1030,7 @@ this.warningBox5.CloseButtonVisible = false; this.warningBox5.Image = ((System.Drawing.Image)(resources.GetObject("warningBox5.Image"))); this.warningBox5.Location = new System.Drawing.Point(17, 145); - this.warningBox5.Margin = new System.Windows.Forms.Padding(4); + this.warningBox5.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.warningBox5.Name = "warningBox5"; this.warningBox5.OptionsButtonVisible = false; this.warningBox5.Size = new System.Drawing.Size(262, 32); @@ -1065,7 +1114,7 @@ this.warningBox1.CloseButtonVisible = false; this.warningBox1.Image = ((System.Drawing.Image)(resources.GetObject("warningBox1.Image"))); this.warningBox1.Location = new System.Drawing.Point(17, 181); - this.warningBox1.Margin = new System.Windows.Forms.Padding(4); + this.warningBox1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.warningBox1.Name = "warningBox1"; this.warningBox1.OptionsButtonVisible = false; this.warningBox1.Size = new System.Drawing.Size(262, 43); @@ -1108,7 +1157,6 @@ // // sideNavItmRepair // - this.sideNavItmRepair.Checked = true; this.sideNavItmRepair.Name = "sideNavItmRepair"; this.sideNavItmRepair.Panel = this.sideNavPanel2; this.sideNavItmRepair.Symbol = ""; @@ -1125,6 +1173,7 @@ // // sideNavItmMaint // + this.sideNavItmMaint.Checked = true; this.sideNavItmMaint.Name = "sideNavItmMaint"; this.sideNavItmMaint.Panel = this.sideNavPanel5; this.sideNavItmMaint.Symbol = "58154"; @@ -1271,10 +1320,12 @@ this.panelEx1.ResumeLayout(false); this.sideNav1.ResumeLayout(false); this.sideNav1.PerformLayout(); - this.sideNavPanel2.ResumeLayout(false); - this.sideNavPanel4.ResumeLayout(false); this.sideNavPanel5.ResumeLayout(false); this.itemPanel1.ResumeLayout(false); + this.itemPanel2.ResumeLayout(false); + this.itemPanel3.ResumeLayout(false); + this.sideNavPanel2.ResumeLayout(false); + this.sideNavPanel4.ResumeLayout(false); this.sideNavPanel3.ResumeLayout(false); this.panelEx4.ResumeLayout(false); this.ResumeLayout(false); @@ -1363,6 +1414,9 @@ private DevComponents.DotNetBar.Controls.WarningBox warningBox3; private DevComponents.DotNetBar.Controls.WarningBox warningBox6; private DevComponents.DotNetBar.ButtonX btnIndexMaint; + private DevComponents.DotNetBar.PanelEx itemPanel2; + private DevComponents.DotNetBar.PanelEx itemPanel3; + private DevComponents.DotNetBar.ButtonX btnROsNotUsed; } } diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs index fe893ad7..f5d38a7d 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs @@ -1778,7 +1778,44 @@ namespace VEPROMS return true; } - } + //CSM - C2025-043 report RO's that are not used in any of the PROMS data. + private void btnROsNotUsed_Click(object sender, EventArgs e) + { + //Get the path to save the Image to + SaveFileDialog sfd = new SaveFileDialog(); + sfd.DefaultExt = "bmp"; + sfd.AddExtension = true; + sfd.Filter = "Image Files (*.bmp)|*.bmp"; + sfd.FileName = string.Format("ROsNotUsed_{0}", DateTime.Now.ToString("yyyyMMdd_HHmm")); + sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS"; + DialogResult dr = sfd.ShowDialog(); + + if (dr == DialogResult.OK) + { + //Initial messaging + string statmsg = "Generating Snapshot (this may take a few minutes to complete)..."; + InitialProgressBarMessage = statmsg; + txtResults.AppendText(statmsg); + txtResults.AppendText(Environment.NewLine); + + //Generate the data for ROs Not Used and save it to a TreeView + TreeView tv = TreeViewExtensions.GetROTree(GeneralReports.GetROsNotUsedInPROMS(), true); + //Output the TreeView as an Image + if (tv.Nodes.Count != 0) + tv.SaveTreeViewAsImage(sfd.FileName); + + //Give Messaging demonstrating finished and open file if requested + statmsg = "Finished Generating Snapshot of ROs Not Used."; + FinalProgressBarMessage = statmsg; + txtResults.AppendText(statmsg); + txtResults.AppendText(Environment.NewLine); + if (tv.Nodes.Count != 0 && MessageBox.Show($"{statmsg}\r\n\r\nDo you wish to open the snapshot now?", "ROs Not Used", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes) + System.Diagnostics.Process.Start(sfd.FileName); + else if (tv.Nodes.Count == 0) + MessageBox.Show("All ROs are currently in use.", "ROs Not Used", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + } + } + } } diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.resx b/PROMS/VEPROMS User Interface/frmBatchRefresh.resx index d7589931..9c07f025 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.resx +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.resx @@ -117,6 +117,57 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + This will perform Index Maintenance to realign indexes to optimize performance. +This function will cause no change to data or records in PROMS. +It should however be performed when other users are not in PROMS, as it could +cause slowdown or errors for other users while it is running. + + + 17, 17 + + + Purges all audit information and change history older than the above date. +It is recommended that you perform a database backup before performing this action. +Note after purging the information, this will automatically perform the Index +Maintenance function to realign indexes with the cut down audit data. +Only Full PROMS Administrator Users can perform this action. + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F + k11Ik1Ecxv9zouJ2E4TWnR8V5tAppJmYsLnNlaLTxAoiKIQiibpYSmEEmSSa0IVGISMUw7rpE+yiQiuk + /IhROssPyjanpL4udeq29z3nCdcH+Wb1g+fq/zzP+R8Oh+gvPK4kNWujp1IrPek8S5Hy+X9hbXSN9aVC + eq1FwEYN8vk/mWqiDPZwI+NOHbhLj8CdDaK7npLlvnWpO0AKqZV62YgO/GMquDMN0rAevkbqlHvXZdlG + h6Rn8eATu4GJncB0Fvh8HnwPYuGpJ4vcvwZbGYWJrcpPzGXG8ngGtsZFQJOggrS0B9J0MbwNIR9uHqRQ + ee4XPhuVSy814IIB/lk9QkIIanUomFgIzkux0qHB/CUqk+eCtB2jCLEl1M1mLcBSLthKHlQqJaKjw8FZ + Mbi/ENKXEizUKD/f2k9h8jz5mumk2K0F9xUAUgE4K0JUVDji4yLBvflgMyYwlxFL9zSYq6ITa8I3DlNY + wKZ0soVSgFkAXgwuFSEmJhJJiWqwCR3YSCbY2x0QB4zwnFc6W4p+22KxiY4EXiQF74kf6/L5vdi+TYV0 + rRpsMB2sPxWsRwvpTTq87QmYOUNHg+HqQlL4ryscbK4UPGD5vu60CWw8G7evbkN7bSykXm0w/FMBew6E + CsXQFQMpaLKezP6OLeDL+8AFM5hLBzaciennKcFXUCgI7o7ENQWSfRcWmmPgPEW5tNJIj8QxM9hkDthY + FthAGlh/SvAPXC7fjOrjmyC+Sl5TsCpfdzYEK92llUbllDiaD3HEDPG9CaLDCGnI9IdEhwnioBHiOwMC + dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N + ud8AKwnMnBpmYFAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F + k11Ik1Ecxv9zouJ2E4TWnR8V5tAppJmYsLnNlaLTxAoiKIQiibpYSmEEmSSa0IVGISMUw7rpE+yiQiuk + /IhROssPyjanpL4udeq29z3nCdcH+Wb1g+fq/zzP+R8Oh+gvPK4kNWujp1IrPek8S5Hy+X9hbXSN9aVC + eq1FwEYN8vk/mWqiDPZwI+NOHbhLj8CdDaK7npLlvnWpO0AKqZV62YgO/GMquDMN0rAevkbqlHvXZdlG + h6Rn8eATu4GJncB0Fvh8HnwPYuGpJ4vcvwZbGYWJrcpPzGXG8ngGtsZFQJOggrS0B9J0MbwNIR9uHqRQ + ee4XPhuVSy814IIB/lk9QkIIanUomFgIzkux0qHB/CUqk+eCtB2jCLEl1M1mLcBSLthKHlQqJaKjw8FZ + Mbi/ENKXEizUKD/f2k9h8jz5mumk2K0F9xUAUgE4K0JUVDji4yLBvflgMyYwlxFL9zSYq6ITa8I3DlNY + wKZ0soVSgFkAXgwuFSEmJhJJiWqwCR3YSCbY2x0QB4zwnFc6W4p+22KxiY4EXiQF74kf6/L5vdi+TYV0 + rRpsMB2sPxWsRwvpTTq87QmYOUNHg+HqQlL4ryscbK4UPGD5vu60CWw8G7evbkN7bSykXm0w/FMBew6E + CsXQFQMpaLKezP6OLeDL+8AFM5hLBzaciennKcFXUCgI7o7ENQWSfRcWmmPgPEW5tNJIj8QxM9hkDthY + FthAGlh/SvAPXC7fjOrjmyC+Sl5TsCpfdzYEK92llUbllDiaD3HEDPG9CaLDCGnI9IdEhwnioBHiOwMC + dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N + ud8AKwnMnBpmYFAAAAAASUVORK5CYII= + + 17, 17 @@ -132,7 +183,6 @@ This function will remove all of the saved attachment PDFS stored in the databas This function will remove all of the saved attachment PDFS stored in the database (not the PDFs of the entire procedure that you had previous printed). This will force PROMS to regenerate (and save) the word attachment PDFs the next time the procedure is printed. - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F @@ -216,12 +266,6 @@ Should an item become orphaned (disconnected) from the rest of the data, it will Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool removes any orphaned items from the database. - - - This will perform Index Maintenance to realign indexes to optimize performance. -This function will cause no change to data or records in PROMS. -It should however be performed when other users are not in PROMS, as it could -cause slowdown or errors for other users while it is running. This allows the user to remove folders and sub folders as well as their contents. @@ -261,47 +305,6 @@ If more than one working draft is selected, it is recommended that this be perfo Click on the on/off switches to turn on/off each tool. Note that only one of these tools can be run at a time. - - - Purges all audit information and change history older than the above date. -It is recommended that you perform a database backup before performing this action. -Note after purging the information, this will automatically perform the Index -Maintenance function to realign indexes with the cut down audit data. -Only Full PROMS Administrator Users can perform this action. - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F - k11Ik1Ecxv9zouJ2E4TWnR8V5tAppJmYsLnNlaLTxAoiKIQiibpYSmEEmSSa0IVGISMUw7rpE+yiQiuk - /IhROssPyjanpL4udeq29z3nCdcH+Wb1g+fq/zzP+R8Oh+gvPK4kNWujp1IrPek8S5Hy+X9hbXSN9aVC - eq1FwEYN8vk/mWqiDPZwI+NOHbhLj8CdDaK7npLlvnWpO0AKqZV62YgO/GMquDMN0rAevkbqlHvXZdlG - h6Rn8eATu4GJncB0Fvh8HnwPYuGpJ4vcvwZbGYWJrcpPzGXG8ngGtsZFQJOggrS0B9J0MbwNIR9uHqRQ - ee4XPhuVSy814IIB/lk9QkIIanUomFgIzkux0qHB/CUqk+eCtB2jCLEl1M1mLcBSLthKHlQqJaKjw8FZ - Mbi/ENKXEizUKD/f2k9h8jz5mumk2K0F9xUAUgE4K0JUVDji4yLBvflgMyYwlxFL9zSYq6ITa8I3DlNY - wKZ0soVSgFkAXgwuFSEmJhJJiWqwCR3YSCbY2x0QB4zwnFc6W4p+22KxiY4EXiQF74kf6/L5vdi+TYV0 - rRpsMB2sPxWsRwvpTTq87QmYOUNHg+HqQlL4ryscbK4UPGD5vu60CWw8G7evbkN7bSykXm0w/FMBew6E - CsXQFQMpaLKezP6OLeDL+8AFM5hLBzaciennKcFXUCgI7o7ENQWSfRcWmmPgPEW5tNJIj8QxM9hkDthY - FthAGlh/SvAPXC7fjOrjmyC+Sl5TsCpfdzYEK92llUbllDiaD3HEDPG9CaLDCGnI9IdEhwnioBHiOwMC - dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N - ud8AKwnMnBpmYFAAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F - k11Ik1Ecxv9zouJ2E4TWnR8V5tAppJmYsLnNlaLTxAoiKIQiibpYSmEEmSSa0IVGISMUw7rpE+yiQiuk - /IhROssPyjanpL4udeq29z3nCdcH+Wb1g+fq/zzP+R8Oh+gvPK4kNWujp1IrPek8S5Hy+X9hbXSN9aVC - eq1FwEYN8vk/mWqiDPZwI+NOHbhLj8CdDaK7npLlvnWpO0AKqZV62YgO/GMquDMN0rAevkbqlHvXZdlG - h6Rn8eATu4GJncB0Fvh8HnwPYuGpJ4vcvwZbGYWJrcpPzGXG8ngGtsZFQJOggrS0B9J0MbwNIR9uHqRQ - ee4XPhuVSy814IIB/lk9QkIIanUomFgIzkux0qHB/CUqk+eCtB2jCLEl1M1mLcBSLthKHlQqJaKjw8FZ - Mbi/ENKXEizUKD/f2k9h8jz5mumk2K0F9xUAUgE4K0JUVDji4yLBvflgMyYwlxFL9zSYq6ITa8I3DlNY - wKZ0soVSgFkAXgwuFSEmJhJJiWqwCR3YSCbY2x0QB4zwnFc6W4p+22KxiY4EXiQF74kf6/L5vdi+TYV0 - rRpsMB2sPxWsRwvpTTq87QmYOUNHg+HqQlL4ryscbK4UPGD5vu60CWw8G7evbkN7bSykXm0w/FMBew6E - CsXQFQMpaLKezP6OLeDL+8AFM5hLBzaciennKcFXUCgI7o7ENQWSfRcWmmPgPEW5tNJIj8QxM9hkDthY - FthAGlh/SvAPXC7fjOrjmyC+Sl5TsCpfdzYEK92llUbllDiaD3HEDPG9CaLDCGnI9IdEhwnioBHiOwMC - dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N - ud8AKwnMnBpmYFAAAAAASUVORK5CYII= - This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. @@ -389,6 +392,6 @@ If more than one procedure is selected, it is recommended that this be performed - 137 + 25 \ No newline at end of file diff --git a/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs b/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs new file mode 100644 index 00000000..87c08200 --- /dev/null +++ b/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs @@ -0,0 +1,42 @@ +using System; +using Csla.Data; +using System.Data; +using System.Data.SqlClient; + +//CSM - C2025-043 - Minimal Class for General Reports +namespace VEPROMS.CSLA.Library +{ + public static class GeneralReports + { + + #region Get General Reports + //CSM - C2025-043 report RO's that are not used in any of the PROMS data. + public static DataTable GetROsNotUsedInPROMS() + { + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandText = "vesp_GetROsNotUsed"; + cm.CommandTimeout = Database.DefaultTimeout; + using (SqlDataAdapter da = new SqlDataAdapter(cm)) + { + DataTable dt = new DataTable(); + da.Fill(dt); + return dt; + } + } + } + } + catch (Exception ex) + { + throw new DbCslaException("Error in GetROsNotUsedInPROMS Report: retrieving data failed", ex); + } + } + #endregion + + } +} diff --git a/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj b/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj index 24da5a1b..b25089b2 100644 --- a/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj +++ b/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj @@ -390,6 +390,7 @@ + diff --git a/PROMS/Volian.Controls.Library/TreeViewExtensions.cs b/PROMS/Volian.Controls.Library/TreeViewExtensions.cs new file mode 100644 index 00000000..bd2e6112 --- /dev/null +++ b/PROMS/Volian.Controls.Library/TreeViewExtensions.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Drawing; +using System.Windows.Forms; +using System.Data; + +namespace Volian.Controls.Library +{ + //CSM - C2025-043 report RO's that are not used in any of the PROMS data. + // extend the TreeView class with a couple added functions + // to allow support for what is needed for ROs + public static class TreeViewExtensions + { + #region public functions + //Returns a ROTreeView based on the data in the datatable dt + // builds tree based on the following: + // ParentID = 0 is top level + // links (defined parent) based on same dbID and ID = ParentID + // nodes will have the text of the title + public static TreeView GetROTree(DataTable dt, bool isExpanded = false) + { + TreeView tv = new TreeView(); + + var tempnodes = GetTreeNodes( + dt.AsEnumerable(), + (r) => r.Field("ParentID") == 0, //top level of tree + (r, s) => s.Where(x => r["ID"].Equals(x["ParentID"]) && r["dbID"].Equals(x["dbID"])), //how to match parents and children + (r) => new TreeNode { Text = r.Field("title") } //what to display in the tree + ); + tv.Nodes.AddRange(tempnodes.ToArray()); + + //if set to expand, sets the height to the combined height of all nodes + 20 + //so will show whole tree + if (isExpanded) + { + tv.ExpandAll(); + tv.SetTreeViewHeighttoFull(); + tv.Width = 1200; + } + + //sorts the tree in alphabetical order to match the way the tree is sorted in the RO Editor + tv.Sorted = true; + + return tv; + } + + //Saves the Tree to an Image at the specified path + public static void SaveTreeViewAsImage(this TreeView tv, string filePath) + { + // Create a Bitmap with the size of the TreeView + Bitmap bitmap = new Bitmap(tv.Width, tv.Height); + // Draw the TreeView onto the Bitmap + tv.DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height)); + // Save the Bitmap as an image file + bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Png); + } + #endregion + + #region height functions + //This is a function to calculate and set the TreeView Height based + //on the height of all sub nodes + 20 + public static void SetTreeViewHeighttoFull(this TreeView tv) + { + int totalHeight = 0; + foreach (TreeNode node in tv.Nodes) + { + totalHeight += GetNodeHeight(node); + } + tv.Height = totalHeight + 20; + } + + //This function recursively adds the height of sub nodes to the running total + private static int GetNodeHeight(TreeNode node) + { + int curheight = node.Bounds.Height; + foreach (TreeNode child in node.Nodes) + { + curheight += GetNodeHeight(child); + } + return curheight; + } + #endregion + + #region generic private tree structure functions + //This is a Generic Function to help build the Tree Structure + private static IEnumerable GetTreeNodes( + IEnumerable source, + Func isRoot, + Func, IEnumerable> getChilds, + Func getItem) + { + IEnumerable roots = source.Where(x => isRoot(x)); + foreach (T root in roots) + yield return ConvertEntityToTreeNode(root, source, getChilds, getItem); ; + } + + //This is a Generic Function to help build the Tree Structure + private static TreeNode ConvertEntityToTreeNode( + T entity, + IEnumerable source, + Func, IEnumerable> getChilds, + Func getItem) + { + TreeNode node = getItem(entity); + var childs = getChilds(entity, source); + foreach (T child in childs) + node.Nodes.Add(ConvertEntityToTreeNode(child, source, getChilds, getItem)); + return node; + } + #endregion + + } + +} diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index 21fb8341..c4f41e44 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -118,6 +118,7 @@ ..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Core.dll + @@ -295,6 +296,7 @@ True Settings.settings + UserControl From 52dbd8afece2109b2f7cf684e5d904f908109817 Mon Sep 17 00:00:00 2001 From: mschill Date: Mon, 12 Jan 2026 15:21:18 -0500 Subject: [PATCH 12/26] C2025-043 Admin Tool - Data Check - Tool to identify and report RO's that are not used in any of the PROMS data. Performance Improvement --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 40 ++++++++++++++----- .../Minimal/GeneralReports.cs | 2 +- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 2c5d71a3..ba14ecc4 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -24448,7 +24448,8 @@ CREATE PROCEDURE [dbo].[vesp_GetROsNotUsed] AS BEGIN - DECLARE @notused table (RofstChildID int NULL, roid [varchar](50) NULL, ID int NOT NULL, ParentID int NOT NULL, dbID int NOT NULL, title varchar(max) not null) + Create table #notused (RofstChildID int NULL, roid [varchar](50) NULL, ID int NOT NULL, ParentID int NOT NULL, dbID int NOT NULL, title varchar(max) not null); + DECLARE @FSTs table (RofstID int primary key NOT NULL, RODbID int NOT NULL) @@ -24457,38 +24458,43 @@ BEGIN GROUP BY RODbID --insert the not used ROs - INSERT INTO @notused + INSERT INTO #notused SELECT RofstChild.RofstChildID, RofstChild.roid, RofstChild.ID, RofstChild.ParentID, RofstChild.dbiID, RofstChild.title + Case When (Not RofstChild.[value] is null) Then ' (' + fstdb.dbiAP + '-' + RofstChild.appid + ')' Else '' End --Add in Accessory Page ID if it exists FROM RofstChild INNER JOIN RofstDatabase fstdb on fstdb.RofstID = RofstChild.RofstID and fstdb.dbiID = RofstChild.dbiID INNER JOIN @FSTs fst on fst.RofstID = fstdb.RofstID AND RofstChild.RofstID = fst.RofstID + LEFT OUTER JOIN RofstChild subchild ON subChild.ParentID = RofstChild.ID --make sure it is not a parent of something else + LEFT OUTER JOIN DRoUsages ON [DRoUsages].[ROID] like RofstChild.[ROID] + '%' AND fst.RODbID = DROUsages.RODbID --not used in documents + LEFT OUTER JOIN RoUsages ON [RoUsages].[ROID] like RofstChild.[ROID] + '%' AND fst.RODbID = ROUsages.RODbID --not used in regular ROs where - NOT EXISTS(Select 1 FROM RofstChild subchild where subChild.ParentID = RofstChild.ID) --make sure it is not a parent of something else - AND NOT EXISTS(Select 1 FROM DRoUsages where [DRoUsages].[ROID] like RofstChild.[ROID] + '%' AND fst.RODbID = DROUsages.RODbID) --not used in documents - AND NOT EXISTS(Select 1 FROM RoUsages where [RoUsages].[ROID] like RofstChild.[ROID] + '%' AND fst.RODbID = ROUsages.RODbID) --not used in regular ROs + subchild.RofstChildID IS NULL --make sure it is not a parent of something else + AND DRoUsages.DROUsageID IS NULL --not used in documents + AND RoUsages.ROUsageID IS NULL --not used in regular ROs --insert thier parents --if they are not already in @notused - INSERT INTO @notused + INSERT INTO #notused SELECT DISTINCT RofstChild.RofstChildID, RofstChild.roid, RofstChild.ID, RofstChild.ParentID, RofstChild.dbiID, RofstChild.title FROM RofstChild - INNER JOIN @notused notusedgetparents on notusedgetparents.ParentID = RofstChild.ID AND RofstChild.dbiID = notusedgetparents.dbID + INNER JOIN #notused notusedgetparents on notusedgetparents.ParentID = RofstChild.ID AND RofstChild.dbiID = notusedgetparents.dbID INNER JOIN @FSTs fst on RofstChild.RofstID = fst.RofstID - LEFT OUTER JOIN @notused notused on notused.RofstChildID = RofstChild.RofstChildID + LEFT OUTER JOIN #notused notused on notused.RofstChildID = RofstChild.RofstChildID WHERE notused.RofstChildID IS NULL --insert parent dbs --if they are not already in @notused - INSERT INTO @notused + INSERT INTO #notused SELECT DISTINCT NULL, NULL, RofstDatabase.ID, RofstDatabase.ParentID, RofstDatabase.dbiID, RofstDatabase.dbiTitle FROM RofstDatabase INNER JOIN @FSTs fst on fst.RofstID = RofstDatabase.RofstID select * - FROM @notused notused + FROM #notused notused order by RofstChildID, dbID + drop table #notused + RETURN END @@ -24497,6 +24503,18 @@ ELSE PRINT 'Procedure Creation: [vesp_GetROsNotUsed] Error on Creation' GO +IF EXISTS (SELECT * FROM dbo.sysIndexes WHERE name like 'IX_tblROUsagesRODbIDDeleteStatusROID') + DROP INDEX [IX_tblROUsagesRODbIDDeleteStatusROID] ON [dbo].[tblROUsages]; +GO + +CREATE NONCLUSTERED INDEX IX_tblROUsagesRODbIDDeleteStatusROID +ON [dbo].[tblROUsages] ([RODbID],[DeleteStatus],[ROID]) +INCLUDE([ROUsageID],[ContentID],[Config],[DTS],[UserID],[LastChanged]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +GO + +PRINT 'Added IX_tblROUsagesRODbIDDeleteStatusROID Index. Speeds up RO queries' +GO + /* --------------------------------------------------------------------------- | ADD New Code Before this Block | @@ -24530,7 +24548,7 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '1/5/2026 7:00 AM' + set @RevDate = '1/12/2026 2:00 PM' set @RevDescription = 'Added Method to get ROs that are not used in PROMS' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription diff --git a/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs b/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs index 87c08200..ce4e9787 100644 --- a/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs +++ b/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs @@ -21,7 +21,7 @@ namespace VEPROMS.CSLA.Library { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "vesp_GetROsNotUsed"; - cm.CommandTimeout = Database.DefaultTimeout; + cm.CommandTimeout = 0; using (SqlDataAdapter da = new SqlDataAdapter(cm)) { DataTable dt = new DataTable(); From 30f56d1f9bbbcae2e894702abcb0e37cfc11e08a Mon Sep 17 00:00:00 2001 From: John Jenko Date: Wed, 14 Jan 2026 16:01:40 -0500 Subject: [PATCH 13/26] F2026-001 Added the ability to prefix a Continuous Action sub-step tab with its parent tab. --- PROMS/Formats/fmtall/BASEall.xml | Bin 91132 -> 91196 bytes PROMS/Formats/fmtall/VEGP2all.xml | Bin 236454 -> 236516 bytes .../Format/PlantFormat.cs | 10 +++++ PROMS/Volian.Print.Library/ContActionSum.cs | 39 +++++++++++++++++- 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/PROMS/Formats/fmtall/BASEall.xml b/PROMS/Formats/fmtall/BASEall.xml index 56657cc2a26697f470b093e7a194ae888682551d..eec99ffad4e8cc94960595fd15097a50fdc68062 100644 GIT binary patch delta 67 zcmex!oORC$)(r(Q(+{vPvM{GGq)cX9CM+1jkk1gzP|A=5Buf}l844ydP8a92W8j3q S$qSpco0r9GUlzj{#ts0!0uu`W delta 34 jcmdmUg7wdF)(r(Q+;$9{FgW>Pvv%{dnC;JE7{k~B&g~0= diff --git a/PROMS/Formats/fmtall/VEGP2all.xml b/PROMS/Formats/fmtall/VEGP2all.xml index 3b797a864defa090a2b23c93935346b1740fee4b..db5751afc3b658879e4a63013780ff1174ee541a 100644 GIT binary patch delta 92 zcmZ3so$twZz6}QEjtUHp3@Jbuz>vsL#E{C6$56r$0%Ruv$$W-jhEgCa7$}y?PyiLT fWl#dLihweyK$cyzv3a|(IU^7=Z8tV&E=~ae0237B delta 30 kcmaE|op0H8z6}QE%ytZ%&4uReh31Sv%(T7GoVhp!0IWX>I{*Lx diff --git a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs index 87719a04..282cc8f1 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs @@ -4351,6 +4351,16 @@ public LeftJustifyList(XmlNodeList xmlNodeList) : base(xmlNodeList) { } return LazyLoad(ref _IncludeSectionLabel, "@IncludeSectionLabel"); } } + //F2026-001 default (in base format) is False. Put in for Vogtle Units 3 & 4. + // this will add the parent sub-step tab if the parent is not identified as a continueous action step + private LazyLoad _AddParentTabToSubStepTab; + public bool AddParentTabToSubStepTab + { + get + { + return LazyLoad(ref _AddParentTabToSubStepTab, "@AddParentTabToSubStepTab"); + } + } // the font and font styles to use for the continuous action summary private VE_Font _Font; public VE_Font Font diff --git a/PROMS/Volian.Print.Library/ContActionSum.cs b/PROMS/Volian.Print.Library/ContActionSum.cs index d7853e03..02276c91 100644 --- a/PROMS/Volian.Print.Library/ContActionSum.cs +++ b/PROMS/Volian.Print.Library/ContActionSum.cs @@ -47,6 +47,7 @@ namespace Volian.Print.Library AddHeader(doingTimeCriticalSummary); // F2022-024 pass flag when creating a Time Critical Action Summary report foreach (pkParagraph myContAct in myContActSteps) { + bool addParentTab = myContAct.MyParagraph.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.ContinuousActionSummaryData.AddParentTabToSubStepTab; // F2026-001 prefix Continuous Action sub-step with parent tab if (myContAct.MyChildren.Count > 0) if (myContAct.MyParagraph.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.ContinuousActionSummaryData.IncludeSectionNumAndTitle) // only print the section title if it has Continuous Action Steps AddSectionHeader(myContAct.MyParagraph.MyItemInfo.DisplayNumber, myContAct.MyParagraph.MyItemInfo.FormattedDisplayText, myContAct.MyParagraph.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.ContinuousActionSummaryData.IncludeSectionLabel); @@ -79,8 +80,27 @@ namespace Volian.Print.Library } else if (!pgh.MyParagraph.MyItemInfo.IsHigh) // if the high level step was not included, adjust the tab for a sub-step/RNO { - string tabPre = (_FirstLine) ? hlsii.MyTab.Text.Trim() + " " : ""; - if (!_FirstLine) + string tabPre = ""; + StringBuilder sbTabPre = new StringBuilder(); + ItemInfo prevItemInfo = pgh.MyParagraph.MyItemInfo.MyParent; + // F2026-001 The while loop below will build a sub-step prefix of the continuous action sub-step + // if the format flag (AddParentTabToSubStepTab) is set - the base format has this set to false + // it will not add the parent tab + // - if the parent is a continuous action step or sub-step as that information would be redundant + // - if the current is a RNO step type and the Parent is NOT a RNO step type + if (prevItemInfo.IncludeOnContActSum || !addParentTab) prevItemInfo = null; + while (prevItemInfo != null && !prevItemInfo.IsHigh && !prevItemInfo.IncludeOnContActSum) + { + sbTabPre.Insert(0, prevItemInfo.MyTab.CleanText.Trim()); + if ((prevItemInfo.IsInRNO && !prevItemInfo.MyParent.IsInRNO) || prevItemInfo.MyParent.IncludeOnContActSum) + prevItemInfo = null; + else + prevItemInfo = prevItemInfo.MyParent; + } + if (_FirstLine) // the first of a CAS on the report include the High Level Step tab + sbTabPre.Insert(0, (hlsii != null) ? hlsii.MyTab.Text.Trim() + " " : ""); + tabPre = sbTabPre.ToString(); + if (!_FirstLine) // if not the first line we indent the size of high level step tab preTabLen = GetTextWidth(hlsii.MyTab.Text.Trim() + " ") / 72f; if (pgh.MyParagraph.MyItemInfo.IsInRNO) { @@ -103,10 +123,13 @@ namespace Volian.Print.Library private void AddChildren(pkParagraph pgh, int level) { + StringBuilder sbPreTab = new StringBuilder(); + bool addParentTab = pgh.MyParagraph.MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.ContinuousActionSummaryData.AddParentTabToSubStepTab; // F2026-001 flag to add parent tab to CAS sub-step if (pgh.MyChildren.Count > 0) level++; foreach (pkParagraph cpgh in pgh.MyChildren) { + sbPreTab.Clear(); if (cpgh.MyCautionsAndNotes.Count > 0) AddNotesOrCautions(cpgh,level); string stpTab = cpgh.MyParagraph.MyItemInfo.MyTab.CleanText.Trim() + (cpgh.MyParagraph.MyItemInfo.IsInRNO ? "[R] ": " "); @@ -114,6 +137,18 @@ namespace Volian.Print.Library { stpTab = string.Format("{0} ", cpgh.MyParagraph.MyParent.MyTab.Text.Trim()) + " " + stpTab; } + ItemInfo prevItmInfo = cpgh.MyParagraph.MyItemInfo.MyParent; + // F2026-001 the while loop below will add the sub-step's parent tab if applicable + if (prevItmInfo.IncludeOnContActSum || !addParentTab) prevItmInfo = null; // don't try to add parent tab + while (prevItmInfo != null && !prevItmInfo.IsHigh) + { + sbPreTab.Insert(0, prevItmInfo.MyTab.CleanText.Trim()); + if ((prevItmInfo.IsInRNO && !prevItmInfo.MyParent.IsInRNO) || prevItmInfo.MyParent.IncludeOnContActSum) + prevItmInfo = null; + else + prevItmInfo = prevItmInfo.MyParent; + } + stpTab = sbPreTab.ToString() + stpTab; AddContinuousAction(stpTab, GetContActStepText(cpgh.MyParagraph.MyItemInfo), "", (cpgh.MyParagraph.MyItemInfo.PageNumber + 1).ToString(),level,0); AddChildren(cpgh, level); } From ed4469bd5f3b653978845dd51a72f24451ea7845 Mon Sep 17 00:00:00 2001 From: mschill Date: Thu, 15 Jan 2026 07:20:46 -0500 Subject: [PATCH 14/26] B2026-002 When parens are inside a parent / child, printing a double parens. When "(tunable)" was added to the RO return value that has Parent/Child turned on in the field, that return value will print "(turnable))" - with two closing parentheses. In Vogtle data, Customer turned on Parent/Child on the Setpoint field in the Alarms CSD grouping. Added "(tunable)" to the Setpoint's default value in CDS-ARP-001-172 The value looks good in the editor but prints with two closing parens. --- PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs b/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs index 087b1c5d..6cf15ddd 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs @@ -2098,6 +2098,15 @@ namespace VEPROMS.CSLA.Library { string resstr = rtnstr.Substring(0, indx); int endHsp = rtnstr.IndexOf(")", indx); + + //B2026 - 002 handle if parens inside a HSP + int startpos = indx + 5; + while (rtnstr.Substring(startpos, endHsp - startpos).Contains("(")) + { + startpos = rtnstr.IndexOf("(", startpos + 1, endHsp - startpos) + 1; + endHsp = rtnstr.IndexOf(")", endHsp + 1); + } + string tmpstr = rtnstr.Substring(indx + 5, endHsp - indx - 5); // B2017-012 Don't convert space to hard spaces for XY Plots. From c6eeb2107ab1b29032820d177838eeb5fd2aa818 Mon Sep 17 00:00:00 2001 From: John Jenko Date: Fri, 16 Jan 2026 14:31:09 -0500 Subject: [PATCH 15/26] F2026-002 Added a format flag for Vogtle Units 3 & 4 to prevent a duplicate sub-step letter in the top continue message, when a step breaks at second level sub-step in the RNO --- PROMS/Formats/fmtall/VEGP2all.xml | Bin 236516 -> 236670 bytes .../VEPROMS.CSLA.Library/Format/DocStyles.cs | 9 +++++++++ PROMS/Volian.Print.Library/vlnParagraph.cs | 3 +++ 3 files changed, 12 insertions(+) diff --git a/PROMS/Formats/fmtall/VEGP2all.xml b/PROMS/Formats/fmtall/VEGP2all.xml index db5751afc3b658879e4a63013780ff1174ee541a..7fcb87469afd0ba7c6a462c9d920866b6beaa763 100644 GIT binary patch delta 165 zcmaE|o$ucczJ?aY7N#xCPCm9S4EYRs3?&SnKr)#jhoO`qg&~z8h{2D+pCN=Hks%2v zlg8iyWEC?wGPnX|0)Xrypc _DontIncludeRNOTabIfHasAERParent; + public bool DontIncludeRNOTabIfHasAERParent // F2026-002: Vogtle Units 3&4 Top Continue Message. + { + get + { + return LazyLoad(ref _DontIncludeRNOTabIfHasAERParent, "@DontIncludeRNOTabIfHasAERParent"); + } + } + private LazyLoad _Message; [Category("Continue Msg")] [DisplayName("Top Continue Msg")] diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index 4a52b20f..c8f153f4 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -2819,6 +2819,9 @@ namespace Volian.Print.Library { // F2020-023: tab includes parent tab and if caution/note don't use its parent, go up another level string noBullet = MyItemInfo.IsCautionOrNotePart ? MyItemInfo.MyParent.MyParent.CombinedTab : MyItemInfo.MyParent.CombinedTab; + // F2026-002 Vogtle Units 3&4, don't include the RNO sub-step tab if the parent is an AER sub-step + if (docstyle.Continue.Top.DontIncludeRNOTabIfHasAERParent && MyItemInfo.MyParent.IsRNOPart && !MyItemInfo.MyParent.MyParent.IsRNOPart) + noBullet = MyItemInfo.MyParent.MyParent.CombinedTab; // C2021-024: WCN1 if bullet exists in combined tab, stop right before bullet. // B2021-085 & 087: crash if noBullet was null. Also, if null, see if text in parent. if no text, replace the // "%s." with noBullet (null) which won't put out just a '.' as step number. From 12cf05bb877c17d75209be9a162a8e4f50dd9c04 Mon Sep 17 00:00:00 2001 From: mschill Date: Mon, 19 Jan 2026 10:01:37 -0500 Subject: [PATCH 16/26] Remove OPTIMIZE_FOR_SEQUENTIAL_KEY for compatibility with earlier SQL versions --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index ba14ecc4..1846ad2f 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -24509,7 +24509,7 @@ GO CREATE NONCLUSTERED INDEX IX_tblROUsagesRODbIDDeleteStatusROID ON [dbo].[tblROUsages] ([RODbID],[DeleteStatus],[ROID]) -INCLUDE([ROUsageID],[ContentID],[Config],[DTS],[UserID],[LastChanged]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +INCLUDE([ROUsageID],[ContentID],[Config],[DTS],[UserID],[LastChanged]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO PRINT 'Added IX_tblROUsagesRODbIDDeleteStatusROID Index. Speeds up RO queries' From 00c64411c5261bb5561e339286a29ada477d70c8 Mon Sep 17 00:00:00 2001 From: mschill Date: Mon, 19 Jan 2026 11:33:10 -0500 Subject: [PATCH 17/26] C2026-002 Admin Tool - Data Check - Enhancements to new admin Tool for ROs not used. Add the ability to filter out groups of Alarms from the results. --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 16 +- .../frmBatchRefresh.Designer.cs | 623 +++++++++--------- .../VEPROMS User Interface/frmBatchRefresh.cs | 62 +- .../frmBatchRefresh.resx | 93 ++- .../Minimal/GeneralReports.cs | 36 +- 5 files changed, 469 insertions(+), 361 deletions(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 1846ad2f..5c0e796b 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -24436,6 +24436,15 @@ IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vesp_GetROsNotUs DROP PROCEDURE [vesp_GetROsNotUsed]; GO +-- Need to drop vesp_GetROsNotUsed SP first so script can drop and recreate the TableValID table type +IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.DOMAINS WHERE Domain_Name = 'TableValID' ) + DROP TYPE [dbo].[TableValID] + +CREATE TYPE [dbo].[TableValID] AS TABLE( + [ID] [bigint] NOT NULL + +) +GO /****** Object: StoredProcedure [dbo].[vesp_GetROsNotUsed] ******/ @@ -24445,6 +24454,9 @@ GO -- Description: Returns ROs that are not Used in PROMS -- ============================================= CREATE PROCEDURE [dbo].[vesp_GetROsNotUsed] +( + @dbIDs AS dbo.TableValID READONLY +) AS BEGIN @@ -24464,6 +24476,7 @@ BEGIN FROM RofstChild INNER JOIN RofstDatabase fstdb on fstdb.RofstID = RofstChild.RofstID and fstdb.dbiID = RofstChild.dbiID INNER JOIN @FSTs fst on fst.RofstID = fstdb.RofstID AND RofstChild.RofstID = fst.RofstID + INNER JOIN @dbIDs dbIDs on dbIDs.ID = RofstChild.dbiID --downbase to only dbs included LEFT OUTER JOIN RofstChild subchild ON subChild.ParentID = RofstChild.ID --make sure it is not a parent of something else LEFT OUTER JOIN DRoUsages ON [DRoUsages].[ROID] like RofstChild.[ROID] + '%' AND fst.RODbID = DROUsages.RODbID --not used in documents LEFT OUTER JOIN RoUsages ON [RoUsages].[ROID] like RofstChild.[ROID] + '%' AND fst.RODbID = ROUsages.RODbID --not used in regular ROs @@ -24488,6 +24501,7 @@ BEGIN SELECT DISTINCT NULL, NULL, RofstDatabase.ID, RofstDatabase.ParentID, RofstDatabase.dbiID, RofstDatabase.dbiTitle FROM RofstDatabase INNER JOIN @FSTs fst on fst.RofstID = RofstDatabase.RofstID + INNER JOIN @dbIDs dbIDs on RofstDatabase.dbiID = dbIDs.ID --downbase to only dbs included select * FROM #notused notused @@ -24548,7 +24562,7 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '1/12/2026 2:00 PM' + set @RevDate = '1/16/2026 7:00 AM' set @RevDescription = 'Added Method to get ROs that are not used in PROMS' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs index a3a789a3..7cc148dd 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs @@ -30,6 +30,7 @@ { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmBatchRefresh)); this.myTV = new System.Windows.Forms.TreeView(); + this.myTV_RO_DBs = new System.Windows.Forms.TreeView(); this.splitContainer3 = new System.Windows.Forms.SplitContainer(); this.panelEx3 = new DevComponents.DotNetBar.PanelEx(); this.txtResults = new System.Windows.Forms.TextBox(); @@ -62,6 +63,24 @@ this.btnIndexMaint = new DevComponents.DotNetBar.ButtonX(); this.itemPanel3 = new DevComponents.DotNetBar.PanelEx(); this.btnROsNotUsed = new DevComponents.DotNetBar.ButtonX(); + this.sideNavPanel3 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.swCheckROLinks = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX12 = new DevComponents.DotNetBar.LabelX(); + this.warningBox5 = new DevComponents.DotNetBar.Controls.WarningBox(); + this.line3 = new DevComponents.DotNetBar.Controls.Line(); + this.swUpdateROVals = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.swRefreshTrans = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX11 = new DevComponents.DotNetBar.LabelX(); + this.labelX6 = new DevComponents.DotNetBar.LabelX(); + this.warningBox1 = new DevComponents.DotNetBar.Controls.WarningBox(); + this.btnFixLinks = new DevComponents.DotNetBar.ButtonX(); + this.sideNavPanel4 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.swDeleteFolder = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX13 = new DevComponents.DotNetBar.LabelX(); + this.swDeleteAnnotations = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX14 = new DevComponents.DotNetBar.LabelX(); + this.myTVdel = new System.Windows.Forms.TreeView(); + this.btnDeleteItems = new DevComponents.DotNetBar.ButtonX(); this.sideNavPanel2 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.swRefreshTblsForSrch = new DevComponents.DotNetBar.Controls.SwitchButton(); this.lblRefreshTblForSrch = new DevComponents.DotNetBar.LabelX(); @@ -78,24 +97,6 @@ this.labelX8 = new DevComponents.DotNetBar.LabelX(); this.line2 = new DevComponents.DotNetBar.Controls.Line(); this.btnRunRepair = new DevComponents.DotNetBar.ButtonX(); - this.sideNavPanel4 = new DevComponents.DotNetBar.Controls.SideNavPanel(); - this.swDeleteFolder = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.labelX13 = new DevComponents.DotNetBar.LabelX(); - this.swDeleteAnnotations = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.labelX14 = new DevComponents.DotNetBar.LabelX(); - this.myTVdel = new System.Windows.Forms.TreeView(); - this.btnDeleteItems = new DevComponents.DotNetBar.ButtonX(); - this.sideNavPanel3 = new DevComponents.DotNetBar.Controls.SideNavPanel(); - this.swCheckROLinks = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.labelX12 = new DevComponents.DotNetBar.LabelX(); - this.warningBox5 = new DevComponents.DotNetBar.Controls.WarningBox(); - this.line3 = new DevComponents.DotNetBar.Controls.Line(); - this.swUpdateROVals = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.swRefreshTrans = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.labelX11 = new DevComponents.DotNetBar.LabelX(); - this.labelX6 = new DevComponents.DotNetBar.LabelX(); - this.warningBox1 = new DevComponents.DotNetBar.Controls.WarningBox(); - this.btnFixLinks = new DevComponents.DotNetBar.ButtonX(); this.sideNavItem1 = new DevComponents.DotNetBar.Controls.SideNavItem(); this.separator1 = new DevComponents.DotNetBar.Separator(); this.sideNavItmRepair = new DevComponents.DotNetBar.Controls.SideNavItem(); @@ -127,9 +128,9 @@ this.itemPanel1.SuspendLayout(); this.itemPanel2.SuspendLayout(); this.itemPanel3.SuspendLayout(); - this.sideNavPanel2.SuspendLayout(); - this.sideNavPanel4.SuspendLayout(); this.sideNavPanel3.SuspendLayout(); + this.sideNavPanel4.SuspendLayout(); + this.sideNavPanel2.SuspendLayout(); this.panelEx4.SuspendLayout(); this.SuspendLayout(); // @@ -143,6 +144,16 @@ this.myTV.TabIndex = 4; this.myTV.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.myTV_AfterCheck); // + // myTV_RO_DBs + // + this.myTV_RO_DBs.CheckBoxes = true; + this.myTV_RO_DBs.Dock = System.Windows.Forms.DockStyle.Bottom; + this.myTV_RO_DBs.Location = new System.Drawing.Point(0, 50); + this.myTV_RO_DBs.Name = "myTV_RO_DBs"; + this.myTV_RO_DBs.Size = new System.Drawing.Size(267, 250); + this.myTV_RO_DBs.TabIndex = 4; + this.myTV_RO_DBs.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.TreeView_AfterCheck); + // // splitContainer3 // this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; @@ -351,7 +362,7 @@ this.pnlLater.Controls.Add(this.dtpDate); this.pnlLater.Dock = System.Windows.Forms.DockStyle.Top; this.pnlLater.Enabled = false; - this.pnlLater.Location = new System.Drawing.Point(6, 25); + this.pnlLater.Location = new System.Drawing.Point(6, 23); this.pnlLater.Name = "pnlLater"; this.pnlLater.Padding = new System.Windows.Forms.Padding(6); this.pnlLater.Size = new System.Drawing.Size(279, 37); @@ -362,7 +373,7 @@ this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(105, 15); this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(19, 15); + this.label5.Size = new System.Drawing.Size(18, 13); this.label5.TabIndex = 5; this.label5.Text = "@"; // @@ -392,7 +403,7 @@ this.chkLater.Dock = System.Windows.Forms.DockStyle.Top; this.chkLater.Location = new System.Drawing.Point(6, 6); this.chkLater.Name = "chkLater"; - this.chkLater.Size = new System.Drawing.Size(279, 19); + this.chkLater.Size = new System.Drawing.Size(279, 17); this.chkLater.TabIndex = 4; this.chkLater.Text = "Process Later"; this.chkLater.UseVisualStyleBackColor = true; @@ -466,9 +477,9 @@ // this.sideNav1.BackColor = System.Drawing.SystemColors.Control; this.sideNav1.Controls.Add(this.sideNavPanel5); - this.sideNav1.Controls.Add(this.sideNavPanel2); - this.sideNav1.Controls.Add(this.sideNavPanel4); this.sideNav1.Controls.Add(this.sideNavPanel3); + this.sideNav1.Controls.Add(this.sideNavPanel4); + this.sideNav1.Controls.Add(this.sideNavPanel2); this.sideNav1.Dock = System.Windows.Forms.DockStyle.Fill; this.sideNav1.EnableClose = false; this.sideNav1.EnableMaximize = false; @@ -493,10 +504,10 @@ this.sideNavPanel5.Controls.Add(this.itemPanel2); this.sideNavPanel5.Controls.Add(this.itemPanel3); this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel5.Location = new System.Drawing.Point(117, 35); + this.sideNavPanel5.Location = new System.Drawing.Point(112, 31); this.sideNavPanel5.MinimumSize = new System.Drawing.Size(0, 493); this.sideNavPanel5.Name = "sideNavPanel5"; - this.sideNavPanel5.Size = new System.Drawing.Size(263, 493); + this.sideNavPanel5.Size = new System.Drawing.Size(268, 493); this.sideNavPanel5.TabIndex = 26; // // itemPanel1 @@ -541,7 +552,7 @@ this.warningBox3.CloseButtonVisible = false; this.warningBox3.Image = ((System.Drawing.Image)(resources.GetObject("warningBox3.Image"))); this.warningBox3.Location = new System.Drawing.Point(1, 61); - this.warningBox3.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.warningBox3.Margin = new System.Windows.Forms.Padding(4); this.warningBox3.Name = "warningBox3"; this.warningBox3.OptionsButtonVisible = false; this.warningBox3.Size = new System.Drawing.Size(264, 32); @@ -554,7 +565,7 @@ this.warningBox6.CloseButtonVisible = false; this.warningBox6.Image = ((System.Drawing.Image)(resources.GetObject("warningBox6.Image"))); this.warningBox6.Location = new System.Drawing.Point(1, 97); - this.warningBox6.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.warningBox6.Margin = new System.Windows.Forms.Padding(4); this.warningBox6.Name = "warningBox6"; this.warningBox6.OptionsButtonVisible = false; this.warningBox6.Size = new System.Drawing.Size(264, 43); @@ -593,10 +604,11 @@ // itemPanel3 // this.itemPanel3.Controls.Add(this.btnROsNotUsed); + this.itemPanel3.Controls.Add(this.myTV_RO_DBs); this.itemPanel3.DisabledBackColor = System.Drawing.Color.Empty; this.itemPanel3.Location = new System.Drawing.Point(0, 218); this.itemPanel3.Name = "itemPanel3"; - this.itemPanel3.Size = new System.Drawing.Size(267, 70); + this.itemPanel3.Size = new System.Drawing.Size(267, 300); this.itemPanel3.Style.BackgroundImagePosition = DevComponents.DotNetBar.eBackgroundImagePosition.Tile; this.itemPanel3.Style.Border = DevComponents.DotNetBar.eBorderType.DoubleLine; this.itemPanel3.Style.BorderColor.Color = System.Drawing.Color.DarkGray; @@ -609,7 +621,7 @@ this.btnROsNotUsed.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.btnROsNotUsed.Checked = true; this.btnROsNotUsed.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btnROsNotUsed.Location = new System.Drawing.Point(19, 22); + this.btnROsNotUsed.Location = new System.Drawing.Point(19, 11); this.btnROsNotUsed.Name = "btnROsNotUsed"; this.btnROsNotUsed.Size = new System.Drawing.Size(227, 26); this.btnROsNotUsed.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; @@ -619,6 +631,275 @@ this.btnROsNotUsed.Text = "Generate Snapshot of ROs Not Used"; this.btnROsNotUsed.Click += new System.EventHandler(this.btnROsNotUsed_Click); // + // sideNavPanel3 + // + this.sideNavPanel3.Controls.Add(this.swCheckROLinks); + this.sideNavPanel3.Controls.Add(this.labelX12); + this.sideNavPanel3.Controls.Add(this.warningBox5); + this.sideNavPanel3.Controls.Add(this.line3); + this.sideNavPanel3.Controls.Add(this.swUpdateROVals); + this.sideNavPanel3.Controls.Add(this.swRefreshTrans); + this.sideNavPanel3.Controls.Add(this.labelX11); + this.sideNavPanel3.Controls.Add(this.labelX6); + this.sideNavPanel3.Controls.Add(this.warningBox1); + this.sideNavPanel3.Controls.Add(this.myTV); + this.sideNavPanel3.Controls.Add(this.btnFixLinks); + this.sideNavPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel3.Location = new System.Drawing.Point(112, 31); + this.sideNavPanel3.MinimumSize = new System.Drawing.Size(0, 540); + this.sideNavPanel3.Name = "sideNavPanel3"; + this.sideNavPanel3.Size = new System.Drawing.Size(268, 540); + this.sideNavPanel3.TabIndex = 10; + this.sideNavPanel3.Visible = false; + // + // swCheckROLinks + // + // + // + // + this.swCheckROLinks.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swCheckROLinks.Location = new System.Drawing.Point(10, 66); + this.swCheckROLinks.Name = "swCheckROLinks"; + this.swCheckROLinks.Size = new System.Drawing.Size(91, 22); + this.swCheckROLinks.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swCheckROLinks, new DevComponents.DotNetBar.SuperTooltipInfo("Check RO Links", "", resources.GetString("swCheckROLinks.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 150))); + this.swCheckROLinks.SwitchClickTogglesValue = true; + this.swCheckROLinks.TabIndex = 33; + this.swCheckROLinks.ValueChanged += new System.EventHandler(this.swCheckROLinks_ValueChanged); + // + // labelX12 + // + this.labelX12.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX12.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX12.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX12.Location = new System.Drawing.Point(107, 66); + this.labelX12.Name = "labelX12"; + this.labelX12.Size = new System.Drawing.Size(186, 22); + this.superTooltip1.SetSuperTooltip(this.labelX12, new DevComponents.DotNetBar.SuperTooltipInfo("Check RO Links", "", resources.GetString("labelX12.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(350, 175))); + this.labelX12.TabIndex = 32; + this.labelX12.Text = "Check RO Links"; + // + // warningBox5 + // + this.warningBox5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); + this.warningBox5.CloseButtonVisible = false; + this.warningBox5.Image = ((System.Drawing.Image)(resources.GetObject("warningBox5.Image"))); + this.warningBox5.Location = new System.Drawing.Point(17, 145); + this.warningBox5.Margin = new System.Windows.Forms.Padding(4); + this.warningBox5.Name = "warningBox5"; + this.warningBox5.OptionsButtonVisible = false; + this.warningBox5.Size = new System.Drawing.Size(262, 32); + this.warningBox5.TabIndex = 31; + this.warningBox5.Text = "NOTE These tools can take a long time to run"; + // + // line3 + // + this.line3.BackColor = System.Drawing.Color.Transparent; + this.line3.Location = new System.Drawing.Point(6, 127); + this.line3.Name = "line3"; + this.line3.Size = new System.Drawing.Size(285, 12); + this.line3.TabIndex = 30; + this.line3.Text = "line3"; + // + // swUpdateROVals + // + // + // + // + this.swUpdateROVals.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swUpdateROVals.Location = new System.Drawing.Point(10, 10); + this.swUpdateROVals.Name = "swUpdateROVals"; + this.swUpdateROVals.Size = new System.Drawing.Size(91, 22); + this.swUpdateROVals.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swUpdateROVals, new DevComponents.DotNetBar.SuperTooltipInfo("Update RO Values", "", resources.GetString("swUpdateROVals.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 150))); + this.swUpdateROVals.SwitchClickTogglesValue = true; + this.swUpdateROVals.TabIndex = 29; + this.swUpdateROVals.Value = true; + this.swUpdateROVals.ValueObject = "Y"; + this.swUpdateROVals.ValueChanged += new System.EventHandler(this.swUpdateROVals_ValueChanged); + // + // swRefreshTrans + // + // + // + // + this.swRefreshTrans.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swRefreshTrans.Location = new System.Drawing.Point(10, 38); + this.swRefreshTrans.Name = "swRefreshTrans"; + this.swRefreshTrans.Size = new System.Drawing.Size(91, 22); + this.swRefreshTrans.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swRefreshTrans, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Transitions", "", resources.GetString("swRefreshTrans.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(265, 175))); + this.swRefreshTrans.SwitchClickTogglesValue = true; + this.swRefreshTrans.TabIndex = 29; + this.swRefreshTrans.ValueChanged += new System.EventHandler(this.swRefreshTrans_ValueChanged); + // + // labelX11 + // + this.labelX11.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX11.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX11.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX11.Location = new System.Drawing.Point(107, 10); + this.labelX11.Name = "labelX11"; + this.labelX11.Size = new System.Drawing.Size(186, 22); + this.superTooltip1.SetSuperTooltip(this.labelX11, new DevComponents.DotNetBar.SuperTooltipInfo("Update RO Values", "", resources.GetString("labelX11.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 150))); + this.labelX11.TabIndex = 28; + this.labelX11.Text = "Update RO Values"; + // + // labelX6 + // + this.labelX6.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX6.Location = new System.Drawing.Point(107, 38); + this.labelX6.Name = "labelX6"; + this.labelX6.Size = new System.Drawing.Size(186, 22); + this.superTooltip1.SetSuperTooltip(this.labelX6, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Transitions", "", resources.GetString("labelX6.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(256, 175))); + this.labelX6.TabIndex = 28; + this.labelX6.Text = "Refresh Transitions"; + // + // warningBox1 + // + this.warningBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); + this.warningBox1.CloseButtonVisible = false; + this.warningBox1.Image = ((System.Drawing.Image)(resources.GetObject("warningBox1.Image"))); + this.warningBox1.Location = new System.Drawing.Point(17, 181); + this.warningBox1.Margin = new System.Windows.Forms.Padding(4); + this.warningBox1.Name = "warningBox1"; + this.warningBox1.OptionsButtonVisible = false; + this.warningBox1.Size = new System.Drawing.Size(262, 43); + this.warningBox1.TabIndex = 7; + this.warningBox1.Text = " Be sure there is a current backup of the \r\n database prior to running these func" + + "tions"; + // + // btnFixLinks + // + this.btnFixLinks.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnFixLinks.Checked = true; + this.btnFixLinks.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnFixLinks.Location = new System.Drawing.Point(10, 98); + this.btnFixLinks.Name = "btnFixLinks"; + this.btnFixLinks.Size = new System.Drawing.Size(280, 23); + this.btnFixLinks.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.btnFixLinks, new DevComponents.DotNetBar.SuperTooltipInfo("Process Links", "", "This will run the selected RO Links or Transitions Links tool.\r\n\r\nClick on the on" + + "/off switches to turn on/off each tool.\r\n\r\nNote that only one of these tools can" + + " be run at a time.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 130))); + this.btnFixLinks.TabIndex = 6; + this.btnFixLinks.Text = "Process Links"; + this.btnFixLinks.Click += new System.EventHandler(this.btnFixLinks_Click); + // + // sideNavPanel4 + // + this.sideNavPanel4.Controls.Add(this.swDeleteFolder); + this.sideNavPanel4.Controls.Add(this.labelX13); + this.sideNavPanel4.Controls.Add(this.swDeleteAnnotations); + this.sideNavPanel4.Controls.Add(this.labelX14); + this.sideNavPanel4.Controls.Add(this.myTVdel); + this.sideNavPanel4.Controls.Add(this.btnDeleteItems); + this.sideNavPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel4.Location = new System.Drawing.Point(112, 31); + this.sideNavPanel4.MinimumSize = new System.Drawing.Size(0, 493); + this.sideNavPanel4.Name = "sideNavPanel4"; + this.sideNavPanel4.Size = new System.Drawing.Size(268, 493); + this.sideNavPanel4.TabIndex = 27; + this.sideNavPanel4.Visible = false; + // + // swDeleteFolder + // + // + // + // + this.swDeleteFolder.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swDeleteFolder.Location = new System.Drawing.Point(10, 43); + this.swDeleteFolder.Name = "swDeleteFolder"; + this.swDeleteFolder.Size = new System.Drawing.Size(69, 22); + this.swDeleteFolder.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swDeleteFolder, new DevComponents.DotNetBar.SuperTooltipInfo("Delete Folders", "", resources.GetString("swDeleteFolder.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 140))); + this.swDeleteFolder.SwitchClickTogglesValue = true; + this.swDeleteFolder.TabIndex = 39; + this.swDeleteFolder.ValueChanged += new System.EventHandler(this.swDeleteFolder_ValueChanged); + // + // labelX13 + // + this.labelX13.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX13.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX13.Location = new System.Drawing.Point(85, 42); + this.labelX13.Name = "labelX13"; + this.labelX13.Size = new System.Drawing.Size(168, 22); + this.superTooltip1.SetSuperTooltip(this.labelX13, new DevComponents.DotNetBar.SuperTooltipInfo("Delete Folders", "", resources.GetString("labelX13.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 140))); + this.labelX13.TabIndex = 38; + this.labelX13.Text = "Delete Folders"; + // + // swDeleteAnnotations + // + // + // + // + this.swDeleteAnnotations.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swDeleteAnnotations.Location = new System.Drawing.Point(10, 15); + this.swDeleteAnnotations.Name = "swDeleteAnnotations"; + this.swDeleteAnnotations.Size = new System.Drawing.Size(69, 22); + this.swDeleteAnnotations.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swDeleteAnnotations, new DevComponents.DotNetBar.SuperTooltipInfo("Delete Annotations", "", resources.GetString("swDeleteAnnotations.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 155))); + this.swDeleteAnnotations.SwitchClickTogglesValue = true; + this.swDeleteAnnotations.TabIndex = 37; + this.swDeleteAnnotations.Value = true; + this.swDeleteAnnotations.ValueObject = "Y"; + this.swDeleteAnnotations.ValueChanged += new System.EventHandler(this.swDeleteAnnotations_ValueChanged); + // + // labelX14 + // + this.labelX14.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX14.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX14.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX14.Location = new System.Drawing.Point(85, 14); + this.labelX14.Name = "labelX14"; + this.labelX14.Size = new System.Drawing.Size(186, 22); + this.superTooltip1.SetSuperTooltip(this.labelX14, new DevComponents.DotNetBar.SuperTooltipInfo("Delete Annotations", "", resources.GetString("labelX14.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 155))); + this.labelX14.TabIndex = 36; + this.labelX14.Text = "Delete Annotations"; + // + // myTVdel + // + this.myTVdel.CheckBoxes = true; + this.myTVdel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.myTVdel.Location = new System.Drawing.Point(0, 126); + this.myTVdel.Name = "myTVdel"; + this.myTVdel.Size = new System.Drawing.Size(268, 367); + this.myTVdel.TabIndex = 34; + this.myTVdel.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.myTV_AfterCheck); + // + // btnDeleteItems + // + this.btnDeleteItems.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnDeleteItems.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.btnDeleteItems.Checked = true; + this.btnDeleteItems.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnDeleteItems.Location = new System.Drawing.Point(39, 98); + this.btnDeleteItems.Name = "btnDeleteItems"; + this.btnDeleteItems.Size = new System.Drawing.Size(189, 23); + this.btnDeleteItems.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.btnDeleteItems, new DevComponents.DotNetBar.SuperTooltipInfo("Process Deletions", "", resources.GetString("btnDeleteItems.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 175))); + this.btnDeleteItems.TabIndex = 35; + this.btnDeleteItems.Text = "Process Deletions"; + this.btnDeleteItems.Click += new System.EventHandler(this.btnDeleteItems_Click); + // // sideNavPanel2 // this.sideNavPanel2.Controls.Add(this.swRefreshTblsForSrch); @@ -681,7 +962,7 @@ this.warningBox4.CloseButtonVisible = false; this.warningBox4.Image = ((System.Drawing.Image)(resources.GetObject("warningBox4.Image"))); this.warningBox4.Location = new System.Drawing.Point(12, 264); - this.warningBox4.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.warningBox4.Margin = new System.Windows.Forms.Padding(4); this.warningBox4.Name = "warningBox4"; this.warningBox4.OptionsButtonVisible = false; this.warningBox4.Size = new System.Drawing.Size(264, 32); @@ -694,7 +975,7 @@ this.warningBox2.CloseButtonVisible = false; this.warningBox2.Image = ((System.Drawing.Image)(resources.GetObject("warningBox2.Image"))); this.warningBox2.Location = new System.Drawing.Point(12, 302); - this.warningBox2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.warningBox2.Margin = new System.Windows.Forms.Padding(4); this.warningBox2.Name = "warningBox2"; this.warningBox2.OptionsButtonVisible = false; this.warningBox2.Size = new System.Drawing.Size(264, 43); @@ -869,275 +1150,6 @@ this.btnRunRepair.Text = "Run Repair"; this.btnRunRepair.Click += new System.EventHandler(this.btnRunRepair_Click); // - // sideNavPanel4 - // - this.sideNavPanel4.Controls.Add(this.swDeleteFolder); - this.sideNavPanel4.Controls.Add(this.labelX13); - this.sideNavPanel4.Controls.Add(this.swDeleteAnnotations); - this.sideNavPanel4.Controls.Add(this.labelX14); - this.sideNavPanel4.Controls.Add(this.myTVdel); - this.sideNavPanel4.Controls.Add(this.btnDeleteItems); - this.sideNavPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel4.Location = new System.Drawing.Point(112, 31); - this.sideNavPanel4.MinimumSize = new System.Drawing.Size(0, 493); - this.sideNavPanel4.Name = "sideNavPanel4"; - this.sideNavPanel4.Size = new System.Drawing.Size(268, 493); - this.sideNavPanel4.TabIndex = 27; - this.sideNavPanel4.Visible = false; - // - // swDeleteFolder - // - // - // - // - this.swDeleteFolder.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swDeleteFolder.Location = new System.Drawing.Point(10, 43); - this.swDeleteFolder.Name = "swDeleteFolder"; - this.swDeleteFolder.Size = new System.Drawing.Size(69, 22); - this.swDeleteFolder.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swDeleteFolder, new DevComponents.DotNetBar.SuperTooltipInfo("Delete Folders", "", resources.GetString("swDeleteFolder.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 140))); - this.swDeleteFolder.SwitchClickTogglesValue = true; - this.swDeleteFolder.TabIndex = 39; - this.swDeleteFolder.ValueChanged += new System.EventHandler(this.swDeleteFolder_ValueChanged); - // - // labelX13 - // - this.labelX13.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX13.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX13.Location = new System.Drawing.Point(85, 42); - this.labelX13.Name = "labelX13"; - this.labelX13.Size = new System.Drawing.Size(168, 22); - this.superTooltip1.SetSuperTooltip(this.labelX13, new DevComponents.DotNetBar.SuperTooltipInfo("Delete Folders", "", resources.GetString("labelX13.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 140))); - this.labelX13.TabIndex = 38; - this.labelX13.Text = "Delete Folders"; - // - // swDeleteAnnotations - // - // - // - // - this.swDeleteAnnotations.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swDeleteAnnotations.Location = new System.Drawing.Point(10, 15); - this.swDeleteAnnotations.Name = "swDeleteAnnotations"; - this.swDeleteAnnotations.Size = new System.Drawing.Size(69, 22); - this.swDeleteAnnotations.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swDeleteAnnotations, new DevComponents.DotNetBar.SuperTooltipInfo("Delete Annotations", "", resources.GetString("swDeleteAnnotations.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 155))); - this.swDeleteAnnotations.SwitchClickTogglesValue = true; - this.swDeleteAnnotations.TabIndex = 37; - this.swDeleteAnnotations.Value = true; - this.swDeleteAnnotations.ValueObject = "Y"; - this.swDeleteAnnotations.ValueChanged += new System.EventHandler(this.swDeleteAnnotations_ValueChanged); - // - // labelX14 - // - this.labelX14.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX14.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX14.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX14.Location = new System.Drawing.Point(85, 14); - this.labelX14.Name = "labelX14"; - this.labelX14.Size = new System.Drawing.Size(186, 22); - this.superTooltip1.SetSuperTooltip(this.labelX14, new DevComponents.DotNetBar.SuperTooltipInfo("Delete Annotations", "", resources.GetString("labelX14.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 155))); - this.labelX14.TabIndex = 36; - this.labelX14.Text = "Delete Annotations"; - // - // myTVdel - // - this.myTVdel.CheckBoxes = true; - this.myTVdel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.myTVdel.Location = new System.Drawing.Point(0, 126); - this.myTVdel.Name = "myTVdel"; - this.myTVdel.Size = new System.Drawing.Size(268, 367); - this.myTVdel.TabIndex = 34; - this.myTVdel.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.myTV_AfterCheck); - // - // btnDeleteItems - // - this.btnDeleteItems.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnDeleteItems.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.btnDeleteItems.Checked = true; - this.btnDeleteItems.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btnDeleteItems.Location = new System.Drawing.Point(39, 98); - this.btnDeleteItems.Name = "btnDeleteItems"; - this.btnDeleteItems.Size = new System.Drawing.Size(189, 23); - this.btnDeleteItems.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.btnDeleteItems, new DevComponents.DotNetBar.SuperTooltipInfo("Process Deletions", "", resources.GetString("btnDeleteItems.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 175))); - this.btnDeleteItems.TabIndex = 35; - this.btnDeleteItems.Text = "Process Deletions"; - this.btnDeleteItems.Click += new System.EventHandler(this.btnDeleteItems_Click); - // - // sideNavPanel3 - // - this.sideNavPanel3.Controls.Add(this.swCheckROLinks); - this.sideNavPanel3.Controls.Add(this.labelX12); - this.sideNavPanel3.Controls.Add(this.warningBox5); - this.sideNavPanel3.Controls.Add(this.line3); - this.sideNavPanel3.Controls.Add(this.swUpdateROVals); - this.sideNavPanel3.Controls.Add(this.swRefreshTrans); - this.sideNavPanel3.Controls.Add(this.labelX11); - this.sideNavPanel3.Controls.Add(this.labelX6); - this.sideNavPanel3.Controls.Add(this.warningBox1); - this.sideNavPanel3.Controls.Add(this.myTV); - this.sideNavPanel3.Controls.Add(this.btnFixLinks); - this.sideNavPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel3.Location = new System.Drawing.Point(112, 31); - this.sideNavPanel3.MinimumSize = new System.Drawing.Size(0, 540); - this.sideNavPanel3.Name = "sideNavPanel3"; - this.sideNavPanel3.Size = new System.Drawing.Size(268, 540); - this.sideNavPanel3.TabIndex = 10; - this.sideNavPanel3.Visible = false; - // - // swCheckROLinks - // - // - // - // - this.swCheckROLinks.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swCheckROLinks.Location = new System.Drawing.Point(10, 66); - this.swCheckROLinks.Name = "swCheckROLinks"; - this.swCheckROLinks.Size = new System.Drawing.Size(91, 22); - this.swCheckROLinks.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swCheckROLinks, new DevComponents.DotNetBar.SuperTooltipInfo("Check RO Links", "", resources.GetString("swCheckROLinks.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 150))); - this.swCheckROLinks.SwitchClickTogglesValue = true; - this.swCheckROLinks.TabIndex = 33; - this.swCheckROLinks.ValueChanged += new System.EventHandler(this.swCheckROLinks_ValueChanged); - // - // labelX12 - // - this.labelX12.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX12.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX12.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX12.Location = new System.Drawing.Point(107, 66); - this.labelX12.Name = "labelX12"; - this.labelX12.Size = new System.Drawing.Size(186, 22); - this.superTooltip1.SetSuperTooltip(this.labelX12, new DevComponents.DotNetBar.SuperTooltipInfo("Check RO Links", "", resources.GetString("labelX12.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(350, 175))); - this.labelX12.TabIndex = 32; - this.labelX12.Text = "Check RO Links"; - // - // warningBox5 - // - this.warningBox5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); - this.warningBox5.CloseButtonVisible = false; - this.warningBox5.Image = ((System.Drawing.Image)(resources.GetObject("warningBox5.Image"))); - this.warningBox5.Location = new System.Drawing.Point(17, 145); - this.warningBox5.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.warningBox5.Name = "warningBox5"; - this.warningBox5.OptionsButtonVisible = false; - this.warningBox5.Size = new System.Drawing.Size(262, 32); - this.warningBox5.TabIndex = 31; - this.warningBox5.Text = "NOTE These tools can take a long time to run"; - // - // line3 - // - this.line3.BackColor = System.Drawing.Color.Transparent; - this.line3.Location = new System.Drawing.Point(6, 127); - this.line3.Name = "line3"; - this.line3.Size = new System.Drawing.Size(285, 12); - this.line3.TabIndex = 30; - this.line3.Text = "line3"; - // - // swUpdateROVals - // - // - // - // - this.swUpdateROVals.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swUpdateROVals.Location = new System.Drawing.Point(10, 10); - this.swUpdateROVals.Name = "swUpdateROVals"; - this.swUpdateROVals.Size = new System.Drawing.Size(91, 22); - this.swUpdateROVals.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swUpdateROVals, new DevComponents.DotNetBar.SuperTooltipInfo("Update RO Values", "", resources.GetString("swUpdateROVals.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 150))); - this.swUpdateROVals.SwitchClickTogglesValue = true; - this.swUpdateROVals.TabIndex = 29; - this.swUpdateROVals.Value = true; - this.swUpdateROVals.ValueObject = "Y"; - this.swUpdateROVals.ValueChanged += new System.EventHandler(this.swUpdateROVals_ValueChanged); - // - // swRefreshTrans - // - // - // - // - this.swRefreshTrans.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swRefreshTrans.Location = new System.Drawing.Point(10, 38); - this.swRefreshTrans.Name = "swRefreshTrans"; - this.swRefreshTrans.Size = new System.Drawing.Size(91, 22); - this.swRefreshTrans.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swRefreshTrans, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Transitions", "", resources.GetString("swRefreshTrans.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(265, 175))); - this.swRefreshTrans.SwitchClickTogglesValue = true; - this.swRefreshTrans.TabIndex = 29; - this.swRefreshTrans.ValueChanged += new System.EventHandler(this.swRefreshTrans_ValueChanged); - // - // labelX11 - // - this.labelX11.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX11.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX11.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX11.Location = new System.Drawing.Point(107, 10); - this.labelX11.Name = "labelX11"; - this.labelX11.Size = new System.Drawing.Size(186, 22); - this.superTooltip1.SetSuperTooltip(this.labelX11, new DevComponents.DotNetBar.SuperTooltipInfo("Update RO Values", "", resources.GetString("labelX11.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 150))); - this.labelX11.TabIndex = 28; - this.labelX11.Text = "Update RO Values"; - // - // labelX6 - // - this.labelX6.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX6.Location = new System.Drawing.Point(107, 38); - this.labelX6.Name = "labelX6"; - this.labelX6.Size = new System.Drawing.Size(186, 22); - this.superTooltip1.SetSuperTooltip(this.labelX6, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Transitions", "", resources.GetString("labelX6.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(256, 175))); - this.labelX6.TabIndex = 28; - this.labelX6.Text = "Refresh Transitions"; - // - // warningBox1 - // - this.warningBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); - this.warningBox1.CloseButtonVisible = false; - this.warningBox1.Image = ((System.Drawing.Image)(resources.GetObject("warningBox1.Image"))); - this.warningBox1.Location = new System.Drawing.Point(17, 181); - this.warningBox1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); - this.warningBox1.Name = "warningBox1"; - this.warningBox1.OptionsButtonVisible = false; - this.warningBox1.Size = new System.Drawing.Size(262, 43); - this.warningBox1.TabIndex = 7; - this.warningBox1.Text = " Be sure there is a current backup of the \r\n database prior to running these func" + - "tions"; - // - // btnFixLinks - // - this.btnFixLinks.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnFixLinks.Checked = true; - this.btnFixLinks.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btnFixLinks.Location = new System.Drawing.Point(10, 98); - this.btnFixLinks.Name = "btnFixLinks"; - this.btnFixLinks.Size = new System.Drawing.Size(280, 23); - this.btnFixLinks.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.btnFixLinks, new DevComponents.DotNetBar.SuperTooltipInfo("Process Links", "", "This will run the selected RO Links or Transitions Links tool.\r\n\r\nClick on the on" + - "/off switches to turn on/off each tool.\r\n\r\nNote that only one of these tools can" + - " be run at a time.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 130))); - this.btnFixLinks.TabIndex = 6; - this.btnFixLinks.Text = "Process Links"; - this.btnFixLinks.Click += new System.EventHandler(this.btnFixLinks_Click); - // // sideNavItem1 // this.sideNavItem1.IsSystemMenu = true; @@ -1324,9 +1336,9 @@ this.itemPanel1.ResumeLayout(false); this.itemPanel2.ResumeLayout(false); this.itemPanel3.ResumeLayout(false); - this.sideNavPanel2.ResumeLayout(false); - this.sideNavPanel4.ResumeLayout(false); this.sideNavPanel3.ResumeLayout(false); + this.sideNavPanel4.ResumeLayout(false); + this.sideNavPanel2.ResumeLayout(false); this.panelEx4.ResumeLayout(false); this.ResumeLayout(false); @@ -1335,7 +1347,8 @@ #endregion private System.Windows.Forms.TreeView myTV; - private System.Windows.Forms.SplitContainer splitContainer3; + private System.Windows.Forms.TreeView myTV_RO_DBs; + private System.Windows.Forms.SplitContainer splitContainer3; private DevComponents.DotNetBar.PanelEx panelEx3; private System.Windows.Forms.TextBox txtResults; private System.Windows.Forms.Panel panel1; diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs index f5d38a7d..249ddb19 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs @@ -149,7 +149,28 @@ namespace VEPROMS return false; } - private void ResetTV(bool noProcs) + //C2026-002 Enhancements to new admin Tool for ROs not used. + private void ResetmyTV_RO_DBs() + { + this.Cursor = Cursors.WaitCursor; + myTV_RO_DBs.Nodes.Clear(); + + TreeNode tn = myTV_RO_DBs.Nodes.Add("Select All"); + tn.Tag = 0; + tn.Checked = true; + + foreach (DataRow rw in GeneralReports.GetRODBs().Rows) + { + TreeNode tn_db = tn.Nodes.Add(rw["dbiTitle"].ToString()); + tn_db.Tag = rw["dbiID"].ToString(); + tn_db.Checked = true; + } + tn.Expand(); + + this.Cursor = Cursors.Default; + } + + private void ResetTV(bool noProcs) { btnFixLinks.Enabled = false; this.Cursor = Cursors.WaitCursor; @@ -1071,6 +1092,24 @@ namespace VEPROMS } private void myTV_AfterCheck(object sender, TreeViewEventArgs e) + { + //B2025 - 013 Admin Tool Tree Behavior + //only want to perform this if + // not an unknown action + // aka is a mouse click + // if this is fire-ing because clicked a parent or a child of an item + // want this to only fire once - for the item clicked - not for parents/children + if (e.Action != TreeViewAction.Unknown) + { + TreeView_AfterCheck(sender, e); + + btnFixLinks.Enabled = btnDeleteItems.Enabled = AtLeastOneNodeChecked(((TreeView)sender).Nodes); // C2017-030 support for Refresh Transitions/Update RO Values + } + + } + + //C2026-002 Enhancements to new admin Tool for ROs not used. + private void TreeView_AfterCheck(object sender, TreeViewEventArgs e) { //B2025 - 013 Admin Tool Tree Behavior //only want to perform this if @@ -1092,12 +1131,9 @@ namespace VEPROMS DiselectParentNodes(e.Node.Parent); DiselectChildNodes(e.Node.Nodes); } - - btnFixLinks.Enabled = btnDeleteItems.Enabled = AtLeastOneNodeChecked(((TreeView)sender).Nodes); // C2017-030 support for Refresh Transitions/Update RO Values } } - private void DiselectParentNodes(TreeNode parent) { while (parent != null) @@ -1244,6 +1280,7 @@ namespace VEPROMS { AdminToolType = E_AdminToolType.Maintenance; setupProgessSteps1(); + ResetmyTV_RO_DBs(); //C2026-002 Enhancements to new admin Tool for ROs not used. //notify Set Admin user that only Full Admins can run maintenance tools if (!IsAdministratorUser) @@ -1798,8 +1835,21 @@ namespace VEPROMS txtResults.AppendText(statmsg); txtResults.AppendText(Environment.NewLine); - //Generate the data for ROs Not Used and save it to a TreeView - TreeView tv = TreeViewExtensions.GetROTree(GeneralReports.GetROsNotUsedInPROMS(), true); + //C2026-002 Enhancements to new admin Tool for ROs not used. + //Get the selected nodes + DataTable dtIDs = new DataTable(); + dtIDs.Columns.Add("ID"); + + foreach (TreeNode tn in myTV_RO_DBs.Nodes[0].Nodes) + if (tn.Checked) + { + DataRow dtrw = dtIDs.NewRow(); + dtrw["ID"] = int.Parse(tn.Tag.ToString()); + dtIDs.Rows.Add(dtrw); + } + + //Generate the data for ROs Not Used and save it to a TreeView + TreeView tv = TreeViewExtensions.GetROTree(GeneralReports.GetROsNotUsedInPROMS(dtIDs), true); //Output the TreeView as an Image if (tv.Nodes.Count != 0) tv.SaveTreeViewAsImage(sfd.FileName); diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.resx b/PROMS/VEPROMS User Interface/frmBatchRefresh.resx index 9c07f025..e63d56a3 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.resx +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.resx @@ -117,15 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - This will perform Index Maintenance to realign indexes to optimize performance. -This function will cause no change to data or records in PROMS. -It should however be performed when other users are not in PROMS, as it could -cause slowdown or errors for other users while it is running. - - - 17, 17 - Purges all audit information and change history older than the above date. It is recommended that you perform a database backup before performing this action. @@ -167,10 +158,55 @@ Only Full PROMS Administrator Users can perform this action. dj38fYbVglHy1FGJt57uL9ZS10IN9cxfJPvXCzTgqSKH5xwNzVXSkFBBDsFKA4KV7IKVegQrda2e7j5N ud8AKwnMnBpmYFAAAAAASUVORK5CYII= + + + This will perform Index Maintenance to realign indexes to optimize performance. +This function will cause no change to data or records in PROMS. +It should however be performed when other users are not in PROMS, as it could +cause slowdown or errors for other users while it is running. 17, 17 + + This allows the user to remove folders and sub folders as well as their contents. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + + This allows the user to remove folders and sub folders as well as their contents. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + + This function will allow the user to remove annotations from the selected working drafts. + +Be sure a current backup of the database exists prior to running this function. + +If more than one working draft is selected, it is recommended that this be performed during off hours. + + + This function will allow the user to remove annotations from the selected working drafts. + +Be sure a current backup of the database exists prior to running this function. + +If more than one working draft is selected, it is recommended that this be performed during off hours. + + + This will allow for the deletion of groups of annotations and allow for deleting entire folders within PROMS. Use the tree nodes to select which items to delete. + +Click on the on/off switches to turn on/off each tool. + +Note that only one of these tools can be run at a time. + When Word attachments are modified and saved, PROMS will create a PDF of the attachment contents and save it in the database. When this is done, all the of the RO references are resolved as well as pagination of the attachment. This speeds up the overall printing of the procedure in that PROMS simply inserts the attachment contents. @@ -266,45 +302,6 @@ Should an item become orphaned (disconnected) from the rest of the data, it will Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool removes any orphaned items from the database. - - - This allows the user to remove folders and sub folders as well as their contents. - -Be sure a current backup of the database exists prior performing this function. - -It is recommended that this be done during off hours. - - - - - This allows the user to remove folders and sub folders as well as their contents. - -Be sure a current backup of the database exists prior performing this function. - -It is recommended that this be done during off hours. - - - - - This function will allow the user to remove annotations from the selected working drafts. - -Be sure a current backup of the database exists prior to running this function. - -If more than one working draft is selected, it is recommended that this be performed during off hours. - - - This function will allow the user to remove annotations from the selected working drafts. - -Be sure a current backup of the database exists prior to running this function. - -If more than one working draft is selected, it is recommended that this be performed during off hours. - - - This will allow for the deletion of groups of annotations and allow for deleting entire folders within PROMS. Use the tree nodes to select which items to delete. - -Click on the on/off switches to turn on/off each tool. - -Note that only one of these tools can be run at a time. This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. diff --git a/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs b/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs index ce4e9787..0eddc936 100644 --- a/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs +++ b/PROMS/VEPROMS.CSLA.Library/Minimal/GeneralReports.cs @@ -11,7 +11,7 @@ namespace VEPROMS.CSLA.Library #region Get General Reports //CSM - C2025-043 report RO's that are not used in any of the PROMS data. - public static DataTable GetROsNotUsedInPROMS() + public static DataTable GetROsNotUsedInPROMS(DataTable dtDBids) { try { @@ -22,6 +22,10 @@ namespace VEPROMS.CSLA.Library cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "vesp_GetROsNotUsed"; cm.CommandTimeout = 0; + //Pass table Valued parameter to Store Procedure + SqlParameter sqlParam = cm.Parameters.AddWithValue("@dbIDs", dtDBids); + sqlParam.SqlDbType = SqlDbType.Structured; + using (SqlDataAdapter da = new SqlDataAdapter(cm)) { DataTable dt = new DataTable(); @@ -36,6 +40,36 @@ namespace VEPROMS.CSLA.Library throw new DbCslaException("Error in GetROsNotUsedInPROMS Report: retrieving data failed", ex); } } + + //C2026-002 Enhancements to new admin Tool for ROs not used. + //used to build checkboxes of dbs to include + public static DataTable GetRODBs() + { + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.Text; + cm.CommandText = "select RofstDatabase.*, RODbID FROM RofstDatabase INNER JOIN (Select FSTID = max(RoFSTID), RODbID from ROFsts GROUP BY RODbID) fsts ON fsts.FSTID = RofstDatabase.RofstID ORDER BY RofstID, RODbID, dbiTitle"; + + cm.CommandTimeout = 0; + using (SqlDataAdapter da = new SqlDataAdapter(cm)) + { + DataTable dt = new DataTable(); + da.Fill(dt); + return dt; + } + } + } + } + catch (Exception ex) + { + throw new DbCslaException("Error in GetROsNotUsedInPROMS Report - GetRODBs: retrieving data failed", ex); + } + } + #endregion } From e2382a403b12104cd141fe35444f3c965d5423f1 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 19 Jan 2026 17:23:01 -0500 Subject: [PATCH 18/26] B2026-001-Sort-order--for-ROs-Wolf-Creek-4 --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 5c0e796b..799f6769 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -19134,7 +19134,7 @@ GO rd.ParentID From vwRofstData_RofstDatabases rd Where rd.RofstID = @RofstID - Order By rd.dbiID Asc; + Order By rd.dbiTitle Asc; Return; End @@ -19320,7 +19320,7 @@ GO rc.AccPageID From RoParent rp inner join vwRofstData_RofstChildren rc on rc.RofstID = rp.RofstID and rc.dbiID = rp.dbiID and rc.ParentID = rp.ID - Order By rc.ID Asc; + Order By rc.title Asc; Return; @@ -24562,8 +24562,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '1/16/2026 7:00 AM' - set @RevDescription = 'Added Method to get ROs that are not used in PROMS' + set @RevDate = '01/19/2026 5:00 PM' + set @RevDescription = 'Sync tree list Sort order between in RO Editor and PROMS' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription From 622053085567d182018d64c41034158a4898fa7a Mon Sep 17 00:00:00 2001 From: John Jenko Date: Wed, 21 Jan 2026 14:30:44 -0500 Subject: [PATCH 19/26] =?UTF-8?q?C2026-003=20For=20Vogtle=20Units=203&4,?= =?UTF-8?q?=20added=20format=20variable=20to=20allow=20a=20high=20level=20?= =?UTF-8?q?RNO=20step=20be=20=E2=80=9Ctagged=E2=80=9D=20as=20a=20Continuou?= =?UTF-8?q?s=20Action=20Step,=20when=20the=20parent=20AER=20step=20is=20no?= =?UTF-8?q?t=20a=20continuous=20action=20step?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROMS/Formats/fmtall/BASEall.xml | Bin 91196 -> 91366 bytes PROMS/Formats/fmtall/VEGP2all.xml | Bin 236670 -> 236850 bytes .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 13 +++++++ .../Format/PlantFormat.cs | 36 ++++++++++++++++++ PROMS/Volian.Controls.Library/DisplayTags.cs | 4 ++ 5 files changed, 53 insertions(+) diff --git a/PROMS/Formats/fmtall/BASEall.xml b/PROMS/Formats/fmtall/BASEall.xml index eec99ffad4e8cc94960595fd15097a50fdc68062..927b0a15852c52c3784d46e3704437481786da75 100644 GIT binary patch delta 155 zcmdmUg7w)+)(xuyPeJn{E!~G6XObF=T=b^#vN24CLiA bC@|PEC;_1YL<@r}(11*sg`0a{tgi+D^@b(j delta 32 qcmV+*0N?-S$pyT~1+c16li)oDmrNM}7PBx>(3g{N$Uw7z>1KQU_zzS7 diff --git a/PROMS/Formats/fmtall/VEGP2all.xml b/PROMS/Formats/fmtall/VEGP2all.xml index 7fcb87469afd0ba7c6a462c9d920866b6beaa763..e654d1af25960b9dca0ab26b0925c61a332516b9 100644 GIT binary patch delta 191 zcmeyjgKyI=z6~t;kqQis3@Je9%#hEJ$4~;~B?HM2hD3&RAeqnL!H@}LWia?Kq%xEN zaSlTegCB!GLpV?@6{y1#h?9Y$r9d-Mf!H6&cLtggJUwwMqvGTQ1HNVz{p~9HjF0+F z!Qu=73`IaQL3a59ZAk|5@);BuY#Edosu>i4dM$yl7RXb8nzR2nqxf`|6O4ZCA^RD( KhwNw4x(fgmnJfGN delta 42 zcmV+_0M-Apx(@!h4zL6-mxPl69FveR1cQt(w~Q|V;*Xc`!~sr+2*3fi2*3g=-H3V- A*Z=?k diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 8cd4a26b..a0340ed4 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -4745,6 +4745,19 @@ namespace VEPROMS.CSLA.Library { _MyTab.Text = _MyTab.Text.Substring(1); } + // C2026-003 Vogtle Continuous Action high level RNO (AER is not continuous action) + if (ActiveFormat.MyStepSectionLayoutData.AddContActTagToHighLevelRNOWhenIncludedOnCAS && + IsInRNO && !MyParent.IsInRNO && FormatStepData.TabData.CASPrintMacro != null) + { + StepConfig sc = MyConfig as StepConfig; + if (sc != null && sc.Step_CAS == "True") + { + if (FormatStepData.TabData.CASPrintMacro != null) + _MyTab.Text = FormatStepData.TabData.CASPrintMacro + _MyTab.Text; + if (FormatStepData.TabData.CASEditTag != null) + _MyTab.CleanText = FormatStepData.TabData.CASEditTag + _MyTab.CleanText; + } + } _MyTab.RNOTabWidthAdjust = ((ItemInfo)ActiveParent).FormatStepData.TabData.RNOAdjustTabSize ?? 0; if (((ItemInfo)ActiveParent).MyTab.Offset != 0) _MyTab.Offset = ((ItemInfo)ActiveParent).MyTab.Offset; if (((ItemInfo)ActiveParent).FormatStepData.TabData.RNOExcludeMacros) diff --git a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs index 282cc8f1..36631cf5 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs @@ -3814,6 +3814,18 @@ namespace VEPROMS.CSLA.Library } } + // C2026-003 (for Vogtle Units 3&4) Adds the continuous action tag to a high level RNO + // only when it as a tab and the parent is an AER step that is not tagged as a continuous action + // Use this with the setting of CASPrintMacro and CASEditTag on the RNO step type TabData definition + private LazyLoad _AddContActTagToHighLevelRNOWhenIncludedOnCAS; + public bool AddContActTagToHighLevelRNOWhenIncludedOnCAS + { + get + { + return LazyLoad(ref _AddContActTagToHighLevelRNOWhenIncludedOnCAS, "@AddContActTagToHighLevelRNOWhenIncludedOnCAS"); + } + } + // treat sub-sections and High Level Steps as if they are at the same procedure structure level. This is used with the TieTabToLevel flag private LazyLoad _SubSectAndHighSameLevel; public bool SubSectAndHighSameLevel @@ -5708,6 +5720,30 @@ public StepData Equation // equation has a parent of embedded object. return LazyLoad(ref _RNOIdentPrint, "TabData/@RNOIdent"); } } + // Adds a print macro for the high level RNO when the user want it to be a Continuous Action + // while the corresponding AER is not a continuous action + // C2026-003 used in RNO step definition for Vogtle 3&4 two column format + // use with AddContActTagToHighLevelRNOWhenIncludedOnCAS set to True in the format file's StpSectLayData + private LazyLoad _CASPrintMacro; + public string CASPrintMacro + { + get + { + return LazyLoad(ref _CASPrintMacro, "TabData/@CASPrintMacro"); + } + } + // Adds a character indicator in the step editor for the high level RNO when the user want it to be a Continuous Action + // while the corresponding AER is not a continuous action + // C2026-003 used in RNO step definition for Vogtle 3&4 two colmn format + // use with AddContActTagToHighLevelRNOWhenIncludedOnCAS set to True in the format file's StpSectLayData + private LazyLoad _CASEditTag; + public string CASEditTag + { + get + { + return LazyLoad(ref _CASEditTag, "TabData/@CASEditTag"); + } + } // don't use the defined macro when creating a step tab for the step type's RNO private LazyLoad _RNOExcludeMacros; diff --git a/PROMS/Volian.Controls.Library/DisplayTags.cs b/PROMS/Volian.Controls.Library/DisplayTags.cs index 7621c55c..4d5c12b1 100644 --- a/PROMS/Volian.Controls.Library/DisplayTags.cs +++ b/PROMS/Volian.Controls.Library/DisplayTags.cs @@ -647,6 +647,10 @@ namespace Volian.Controls.Library MyEditItem.ChangeBarForConfigItemChange = false; sc.Step_CAS = (cbCAS.Checked) ? "True" : "False"; MyEditItem.ChangeBarForConfigItemChange = true; + // C2026-003 (put in for Vogtle 3&4) refresh the RNO step tab if including it on the Continuous Action Summary + if (MyEditItem.MyItemInfo.ActiveFormat.MyStepSectionLayoutData.AddContActTagToHighLevelRNOWhenIncludedOnCAS && + MyEditItem.MyItemInfo.IsInRNO && !MyEditItem.MyItemInfo.MyParent.IsInRNO) + MyEditItem.RefreshTab(); } private void cbTCAS_CheckedChanged(object sender, EventArgs e) { From d186e2702c3750894c196eed7d7ba86abd021556 Mon Sep 17 00:00:00 2001 From: mschill Date: Fri, 23 Jan 2026 06:20:49 -0500 Subject: [PATCH 20/26] =?UTF-8?q?B2026-006=20=E2=80=93=20Summary=20of=20Ch?= =?UTF-8?q?anges=20report=20generation=20enhancements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DisplayHistory.designer.cs | Bin 48008 -> 47962 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs b/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs index 0475e1c82df0fc0b2e54863b39c64a4ab54da5c4..81fdb31684e443cf3b65a51a5b33fcfe92234c8e 100644 GIT binary patch delta 38 ucmeD9&UEV=(}rhmldI(EtDd From 43a27c16a68dc47e6023e8d0a01b1b6b0c0ea336 Mon Sep 17 00:00:00 2001 From: mschill Date: Fri, 23 Jan 2026 10:10:08 -0500 Subject: [PATCH 21/26] B2026-006 Try to force designer update It looks like when pulled into development -- changes to DisplayHistory.designer were not pulling down locally / compiling in when not on the computer they were originally made on. Made an update that hopefully should force this file to recompile. --- .../Volian.Controls.Library/DisplayHistory.cs | 2 +- .../DisplayHistory.designer.cs | Bin 47962 -> 47916 bytes .../DisplayHistory.resx | 34 +++++++++++++++--- .../Volian.Controls.Library.csproj | 1 + 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.cs b/PROMS/Volian.Controls.Library/DisplayHistory.cs index 1978e024..a190e4f7 100644 --- a/PROMS/Volian.Controls.Library/DisplayHistory.cs +++ b/PROMS/Volian.Controls.Library/DisplayHistory.cs @@ -11,7 +11,7 @@ using System.Text.RegularExpressions; using JR.Utils.GUI.Forms; using Volian.Base.Library; using System.Linq; - + namespace Volian.Controls.Library { public partial class DisplayHistory : UserControl diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs b/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs index 81fdb31684e443cf3b65a51a5b33fcfe92234c8e..a7c9d046dea58df145d0af16a254bc22de6f65b8 100644 GIT binary patch delta 65 zcmcchjcLs{rVT&1CO>c&nLL5JVRC@87?8G@EVGMiasao^W&xfK)6Ium-my$xA;UMh V!d+l8i@Vn50>>cc&3;}yg#eak8Cw7V delta 81 zcmZ4Ujp^1mrVT&1CV${$nLL5JVRC?z$YdVwhRp&z9j2SVxoI(Pp5ge8W%4cuiOB&j j0>VZN1`I|FrVKg^3P2h}8cr^Bv7T&Tt+83bi>D9(=It5g diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.resx b/PROMS/Volian.Controls.Library/DisplayHistory.resx index ba42be92..28034095 100644 --- a/PROMS/Volian.Controls.Library/DisplayHistory.resx +++ b/PROMS/Volian.Controls.Library/DisplayHistory.resx @@ -112,13 +112,13 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - <?xml version="1.0" encoding="utf-8"?> + <?xml version="1.0" encoding="utf-16"?> <VlnBorders Rows="4" Columns="3"> <VerticalLines Rows="4" Columns="4"> <Lines> @@ -161,7 +161,31 @@ </HorizontalLines> </VlnBorders> - - Normal{Font:Microsoft Sans Serif, 8.25pt;BackColor:White;TextAlign:LeftTop;Border:Flat,1,Black,Both;} Alternate{BackColor:White;} Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;BackgroundImageLayout:Hide;} Highlight{BackColor:LightCyan;ForeColor:Black;} Focus{BackColor:LightCyan;} Editor{} Search{BackColor:Highlight;ForeColor:HighlightText;} Frozen{BackColor:Beige;} NewRow{ForeColor:GrayText;} EmptyArea{BackColor:Transparent;Border:None,1,Black,Both;} SelectedColumnHeader{} SelectedRowHeader{} GrandTotal{BackColor:Black;ForeColor:White;} Subtotal0{BackColor:ControlDarkDark;ForeColor:White;} Subtotal1{BackColor:ControlDarkDark;ForeColor:White;} Subtotal2{BackColor:ControlDarkDark;ForeColor:White;} Subtotal3{BackColor:ControlDarkDark;ForeColor:White;} Subtotal4{BackColor:ControlDarkDark;ForeColor:White;} Subtotal5{BackColor:ControlDarkDark;ForeColor:White;} FilterEditor{} FirstCustomStyle{} + + <?xml version="1.0" encoding="utf-16"?> +<VlnGridCellShading Rows="4" Columns="3"> + <TableShadingInfo Rows="4" Columns="3"> + <CellShadingColor> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + </CellShadingColor> + </TableShadingInfo> +</VlnGridCellShading> + + Normal{Font:Microsoft Sans Serif, 8.25pt;BackColor:White;TextAlign:LeftTop;Border:Flat,1,Black,Both;} Alternate{BackColor:White;} Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;BackgroundImageLayout:Hide;} Highlight{BackColor:LightCyan;ForeColor:Black;} Focus{BackColor:LightCyan;} Editor{} Search{BackColor:Highlight;ForeColor:HighlightText;} Frozen{BackColor:Beige;} FrozenAlternate{} NewRow{ForeColor:GrayText;} EmptyArea{BackColor:Transparent;Border:None,1,Black,Both;} SelectedColumnHeader{} SelectedRowHeader{} GrandTotal{BackColor:Black;ForeColor:White;} Subtotal0{BackColor:ControlDarkDark;ForeColor:White;} Subtotal1{BackColor:ControlDarkDark;ForeColor:White;} Subtotal2{BackColor:ControlDarkDark;ForeColor:White;} Subtotal3{BackColor:ControlDarkDark;ForeColor:White;} Subtotal4{BackColor:ControlDarkDark;ForeColor:White;} Subtotal5{BackColor:ControlDarkDark;ForeColor:White;} FilterEditor{} FirstCustomStyle{} + + + 17, 17 + \ No newline at end of file diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index c4f41e44..f63be9f6 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -460,6 +460,7 @@ DisplayHistory.cs + Designer DisplayLibDocs.cs From 258b1d2d1fbe4949c8499bc6c7e0a5d1b59146f2 Mon Sep 17 00:00:00 2001 From: John Jenko Date: Fri, 23 Jan 2026 15:55:36 -0500 Subject: [PATCH 22/26] B2026-003 Imported memory handling in the FlexGrid (table) code for when we are replacing many RO values in table cells --- PROMS/Volian.Controls.Library/GridItem.cs | 25 +++++++++++--------- PROMS/Volian.Controls.Library/VlnFlexGrid.cs | 25 +++++++++++--------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/PROMS/Volian.Controls.Library/GridItem.cs b/PROMS/Volian.Controls.Library/GridItem.cs index 1a2292cc..4b794d91 100644 --- a/PROMS/Volian.Controls.Library/GridItem.cs +++ b/PROMS/Volian.Controls.Library/GridItem.cs @@ -537,6 +537,10 @@ namespace Volian.Controls.Library // if it is a modify and there will be no usages if it is new (the usage gets created on the save) if (!MyFlexGrid.IsRoTable) { + // B2026-003 we where using a string.format on this inside the while loop - allocating memory each time + // so I move it outside the while loop and did a simple assigment of text + string lookForLinks = @""; + while (r < h) { CellRange cr = MyFlexGrid.GetMergedRange(r, c); @@ -546,8 +550,7 @@ namespace Volian.Controls.Library { // see if there are any links and save these so that any deleted ROs or transitions in the // steprtb can have associated usages/transitions records removed from the database. - string lookFor = string.Format(@""); - MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookFor); + MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookForLinks); for (int i = matches.Count - 1; i >= 0; i--) { Match m = matches[i]; @@ -569,15 +572,15 @@ namespace Volian.Controls.Library { int tid = int.Parse(myMatch.Groups[2].Value); RtfTransList.Add(tid); - int myIndex = m.Groups[4].Index; - int myLength = m.Groups[4].Length; - if (m.Groups[3].Value != " ") - { - myIndex = m.Groups[3].Index; - myLength += m.Groups[3].Length; - } - string gg = ((string)MyFlexGrid[r, c]).Substring(myIndex, myLength); - if (gg.ToUpper().Contains("(PAGE ~)")) RtfTransPageNumList.Add(tid); // B2020-089, check for upper case Page ~ in case step was upper cased + int myIndex = m.Groups[4].Index; + int myLength = m.Groups[4].Length; + if (m.Groups[3].Value != " ") + { + myIndex = m.Groups[3].Index; + myLength += m.Groups[3].Length; + } + string gg = ((string)MyFlexGrid[r, c]).Substring(myIndex, myLength); + if (gg.ToUpper().Contains("(PAGE ~)")) RtfTransPageNumList.Add(tid); // B2020-089, check for upper case Page ~ in case step was upper cased } } } diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs index 046af0aa..ee6162dc 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs @@ -272,21 +272,24 @@ namespace Volian.Controls.Library for (int i = 0; i < rows * cols; i++) datum.Add("|"); XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data"); - string data = string.Empty; + // B2026-003 use StringBuilder a "using" statement around the RichTextBox for better mememory management + StringBuilder data = new StringBuilder(); foreach (XmlNode xn in nl) { - RichTextBox rtb = new RichTextBox(); - rtb.Rtf = xn.InnerText; - XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute; - string[] rc = xa.InnerText.Split(','); - int r = int.Parse(rc[0]); - int c = int.Parse(rc[1]); - int index = r * cols + c; - datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text); + using (RichTextBox rtb = new RichTextBox()) + { + rtb.Rtf = xn.InnerText; + XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute; + string[] rc = xa.InnerText.Split(','); + int r = int.Parse(rc[0]); + int c = int.Parse(rc[1]); + int index = r * cols + c; + datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text); + } } foreach (string s in datum) - data += s; - return data; + data.Append(s); + return data.ToString(); } private string GetCellFormatString(XmlDocument xd) { From aa0e919713bd77ea7eee68b940d3d01a2e8d359e Mon Sep 17 00:00:00 2001 From: mschill Date: Mon, 26 Jan 2026 14:37:48 -0500 Subject: [PATCH 23/26] =?UTF-8?q?B2026-007=20PROMS=20Security=20-=20don't?= =?UTF-8?q?=20error=20when=20add=20a=20user=20to=20a=20group=20but=20no=20?= =?UTF-8?q?group=20selected/C2026-004=20=E2=80=93=20Add=20a=20messagebox?= =?UTF-8?q?=20when=20create=20group?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dlgManageSecurity.cs | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/PROMS/VEPROMS User Interface/dlgManageSecurity.cs b/PROMS/VEPROMS User Interface/dlgManageSecurity.cs index 5da9d00c..dfcb94ce 100644 --- a/PROMS/VEPROMS User Interface/dlgManageSecurity.cs +++ b/PROMS/VEPROMS User Interface/dlgManageSecurity.cs @@ -145,6 +145,9 @@ namespace VEPROMS } LoadRefreshGroupUsers(); + + // C2026-004 - messagebox when create group + MessageBox.Show($"{txt} group successfully created.", "Create group", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void tvFolders_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { @@ -187,18 +190,22 @@ namespace VEPROMS //Add a Member to a Group private void addMember_Click(object sender, EventArgs e) { - int groupIndex = cbGroupSelection.SelectedIndex; - string selectedUserID = lstNonMembers.SelectedValue.ToString(); - int selectedUID = UserInfo.GetByUserID(selectedUserID).UID; - GroupInfo gi = myGroupInfoList[groupIndex]; - User selectedUser = User.Get(selectedUID); + // B2026-007 PROMS Security - don't error when add a user to a group but no group selected + if (lstNonMembers.SelectedValue != null) + { + int groupIndex = cbGroupSelection.SelectedIndex; + string selectedUserID = lstNonMembers.SelectedValue.ToString(); + int selectedUID = UserInfo.GetByUserID(selectedUserID).UID; + GroupInfo gi = myGroupInfoList[groupIndex]; + User selectedUser = User.Get(selectedUID); - Membership.MakeMembership(selectedUser, Group.Get(gi.GID), null, ""); - updateMembershipLists(); - lstNonMembers.SelectedIndex = -1; + Membership.MakeMembership(selectedUser, Group.Get(gi.GID), null, ""); + updateMembershipLists(); + lstNonMembers.SelectedIndex = -1; - int index = lstMembers.FindString(selectedUserID); - lstMembers.SetSelected(index, true); + int index = lstMembers.FindString(selectedUserID); + lstMembers.SetSelected(index, true); + } } //Remove a Member From a Group From c76808e11ebcdb7f23444d0f1be0a13a75064776 Mon Sep 17 00:00:00 2001 From: mschill Date: Tue, 27 Jan 2026 07:34:04 -0500 Subject: [PATCH 24/26] C2026-006 Change Title bar on Add/Edit User --- .../dlgManageSecurity.cs | 1 + PROMS/VEPROMS User Interface/frmManageUser.cs | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/PROMS/VEPROMS User Interface/dlgManageSecurity.cs b/PROMS/VEPROMS User Interface/dlgManageSecurity.cs index dfcb94ce..f3ab5011 100644 --- a/PROMS/VEPROMS User Interface/dlgManageSecurity.cs +++ b/PROMS/VEPROMS User Interface/dlgManageSecurity.cs @@ -333,6 +333,7 @@ namespace VEPROMS User u = User.MakeUser("[Enter New UserID]", "", "", "", "", "", "", "", "", "", "", DateTime.Now, ""); frmManageUser frm = new frmManageUser("add"); frm.MyUser = u; + frm.Text = "Enter New UserID"; //C2026-002 Change Title bar on Add/Edit User if (frm.ShowDialog(this) == DialogResult.OK) { u = frm.MyUser; diff --git a/PROMS/VEPROMS User Interface/frmManageUser.cs b/PROMS/VEPROMS User Interface/frmManageUser.cs index 400d8464..f9ac650e 100644 --- a/PROMS/VEPROMS User Interface/frmManageUser.cs +++ b/PROMS/VEPROMS User Interface/frmManageUser.cs @@ -20,7 +20,27 @@ namespace VEPROMS _MyUser = value; SimpleUser su = new SimpleUser(_MyUser); pgUser.SelectedObject = su; - this.Text = string.Format("{0} ({1} {2}) Information",su.UserID,su.FirstName,su.LastName); + + //C2026-002 Change Title bar on Add/Edit User + string tmp; + if (!string.IsNullOrEmpty(su.FirstName) && !string.IsNullOrEmpty(su.LastName)) + { + tmp = $"{su.UserID} ({su.FirstName} {su.LastName}) Information"; + } + else if (!string.IsNullOrEmpty(su.LastName)) + { + tmp = $"{su.UserID} ({su.LastName}) Information"; + } + else if (!string.IsNullOrEmpty(su.FirstName)) + { + tmp = $"{su.UserID} ({su.FirstName}) Information"; + } + else + { + tmp = $"{su.UserID} Information"; + } + + this.Text = tmp; } } private string _Mode; From 53cf35014c61f1e3438fc6e81888b4344aeb52be Mon Sep 17 00:00:00 2001 From: John Jenko Date: Tue, 27 Jan 2026 13:17:42 -0500 Subject: [PATCH 25/26] =?UTF-8?q?F2026-003=20Adjustments=20to=20the=20Vogt?= =?UTF-8?q?le=20Units=203&4=20background=20step=20format=20that=20were=20n?= =?UTF-8?q?eeded=20for=20Jeff=E2=80=99s=20procedure=20importer=20tool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROMS/Formats/fmtall/VEGPBckStpsall.xml | Bin 59168 -> 80432 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PROMS/Formats/fmtall/VEGPBckStpsall.xml b/PROMS/Formats/fmtall/VEGPBckStpsall.xml index 49b0a79432028fb88721e3d101027977c9a195ba..6e965f6bad14425e168d56e6c6ab09b6ffca3b33 100644 GIT binary patch delta 3309 zcmb_eZA@Eb6h2+GV+b8vDJ_MrEpC8oD!pxQ3k)V3bkev0W5uvJlVQqq3uDN~keCI< z|BG7o z{-E*tM|kq*Qd2!#fQ!%xz2Jlv=zuq&6YorzbUt+5HRDXO81oV%IuDK}+-OYt@bv9( z@XtgR{eL0xyxs#rT)I_+U!=0JZt@RYyK6ItzzZc5jYaN)TKdg{7e`ZeoSx~%wb^sq z+n@;|5XFj{ZWI61cf0V{WU++PPjmaq|e*I-W zI+HcRj$x|18D51jv_h2S0!JZ?OY zZW{eKp*KSlzCBY!*a59Q_)E-y(+5hiXEBPa2}2pLKnzg*K^aRNj!xNy?##HG)?k^6IRy- zn>;C?N>*DCLg>0Th@Va7ld8ISmXn86*GA8}Anj+17S3b@GR((LLmu%sV?s|JAZ~ z2k9JhGQRz!wK5c+!^~NB`xR=e95>e+$l1l`-<|0XQ%C8%OuU!Yl6zPT--&364%t4$(?$##vbN;GV_y=R~aGR~F0vfWdeYV+c2ej&yh5M7Lu|rbnfoKD3rN#Ox^VlMPm- zI&LRjMGE(sl{}Ga;GJ(xIF>3NOB$adCUN2{T$^*t;Z%80)sC`41uMA{W5>~5cG;N= zkuA%)m7F=Vhcp+aTd4&a=-EPNgr*MG6*H%B<;<+{L@Du}#k}ooP;-c{+GaQ-zi@G3 z!c47Rp7?xySTo?st9xl+>&3NLHhz*c;_5^R4G-*Y5us;VP%+q5s z6*)U2oN<_s4{j9TPm?xr78R`TFH;=FZiNN{q$lsXe`&`J#;?sK4e|GWi)G>W5BF-# z^7i!DkeTjDhy5@l%xtxki!a{%`_MKWkE!K)eHFp(T5;&S$gRX#$jzwE?iWf@5AUb& zKkBf%&VV1sDl@!hVck-xo<=I1Uw-LXHd^@wSRcW9@Y?G+Xm}XK#|QT8WL#CiLCA${ M*a16mZsoOq0r>$>1^@s6 delta 72 zcmdn+g=N7x<_-T`C$FpIntaSoYVv|Kp3Mes?-(a9$&s1-%UNWyfrk{B{U*m{^E{7T bQ>RZ6Vieonp~>jSF@2gYqsVj)D@F|fvf&+J From 63a74e1aef8f9a41dbf7d249b7de9e9ad1e203f2 Mon Sep 17 00:00:00 2001 From: John Jenko Date: Wed, 28 Jan 2026 12:08:19 -0500 Subject: [PATCH 26/26] B2026-009 For Vogtle Units 3&4, fixed bug where a double asterisk was place next to a continuous action RNO on the edit screen and printed with the CAS box shifted to the left. --- .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index a0340ed4..1f200bb3 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -4749,13 +4749,20 @@ namespace VEPROMS.CSLA.Library if (ActiveFormat.MyStepSectionLayoutData.AddContActTagToHighLevelRNOWhenIncludedOnCAS && IsInRNO && !MyParent.IsInRNO && FormatStepData.TabData.CASPrintMacro != null) { - StepConfig sc = MyConfig as StepConfig; - if (sc != null && sc.Step_CAS == "True") + // B2026-009 needed to make sure parent wasn't a continuous action step type + // the ExcludeFromContActSum is set to False for continuous action + // step types and True for all others + StepConfig psc = MyParent.MyConfig as StepConfig; + if (MyParent.FormatStepData.ExcludeFromContActSum && psc != null && psc.Step_CAS != "True") { - if (FormatStepData.TabData.CASPrintMacro != null) - _MyTab.Text = FormatStepData.TabData.CASPrintMacro + _MyTab.Text; - if (FormatStepData.TabData.CASEditTag != null) - _MyTab.CleanText = FormatStepData.TabData.CASEditTag + _MyTab.CleanText; + StepConfig sc = MyConfig as StepConfig; + if (sc != null && sc.Step_CAS == "True") + { + if (FormatStepData.TabData.CASPrintMacro != null) + _MyTab.Text = FormatStepData.TabData.CASPrintMacro + _MyTab.Text; + if (FormatStepData.TabData.CASEditTag != null) + _MyTab.CleanText = FormatStepData.TabData.CASEditTag + _MyTab.CleanText; + } } } _MyTab.RNOTabWidthAdjust = ((ItemInfo)ActiveParent).FormatStepData.TabData.RNOAdjustTabSize ?? 0;