From 8eb8a328d1ac9f7671e544e5115fe4f24d4346e0 Mon Sep 17 00:00:00 2001 From: mschill Date: Tue, 19 Aug 2025 13:32:23 -0400 Subject: [PATCH 01/25] C2025-035 RO Performance Improvement Add some code to rebuild specific indexes (like [IX_RofstID_DbiID_ParentID] ON [dbo].[RofstChild]) after a new RO.FST is imported. --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 18 ++++++++++++------ .../VEPROMS.CSLA.Library/Config/ROFSTLookup.cs | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 1bbc54ab..1b594eaa 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -18917,9 +18917,10 @@ GO Copyright 2020 - Volian Enterprises, Inc. All rights reserved. *****************************************************************************/ /* - ========================================================================================================== - Author: Jake Ropar + ========================================================================================================== + Author: Jake Ropar / Matthew Schill Create Date: 06/23/2022 + Modify Date: 08/18/2025 Description: Finalizes Rofst Header Record / Updates LoadedDate if Success ========================================================================================================== */ @@ -18936,13 +18937,18 @@ GO Set LoadedDate = GetDate() Where RofstID = @RofstID; + + --always rebuild the rofst child and default indexes + DBCC DBREINDEX ('RofstChild'); + DBCC DBREINDEX ('RofstDefaultValue'); + -- Rebuild/Reorganize Indexes Exec [dbo].[vesp_UtilityCheckIndexes] 20.0, 5.0, 0, 1; - + Return; End - Go + GO IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_RofstHeaderFinalizeLoad] Succeeded' ELSE PRINT 'Procedure Creation: [vesp_RofstHeaderFinalizeLoad] Error on Creation' @@ -24377,8 +24383,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '08/13/2025 8:07 AM' - set @RevDescription = 'Improve Performance loading procedures with Alarms' + set @RevDate = '08/18/2025 2:07 PM' + set @RevDescription = 'Updated Index maintenance that occurs after RO FST Load to improve RO Performance' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription diff --git a/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs b/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs index 79bcf3bf..087b1c5d 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs @@ -839,7 +839,7 @@ namespace VEPROMS.CSLA.Library { using (SqlCommand cmd = cn.CreateCommand()) { - cmd.CommandTimeout = Database.DefaultTimeout; + cmd.CommandTimeout = 0; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "vesp_RofstHeaderFinalizeLoad"; -- 2.49.1 From 5fa90d9eab2f6d031018c45d1a63807f33173c58 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 20 Aug 2025 11:14:13 -0400 Subject: [PATCH 02/25] C2025-022-Remove-UCF-2 --- .../Properties/AssemblyInfo.cs | 16954 ++++++++++++++++ 1 file changed, 16954 insertions(+) create mode 100644 PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..06f03d4c --- /dev/null +++ b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs @@ -0,0 +1,16954 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("PROMS")] +[assembly: AssemblyDescription("Create, Edit, and Maintain Procedures Sets.")] + +// We are using the AssemblyConfiguration setting to determine the Release Mode. +// When set to "Demo" we disabel the RO Editor, force a "SAMPLE" watermark on the printouts, +// and display a Demo EULA (DemoEULA.txt) +// When set to Westinghouse, we will display a Westinghouse EUlA (WestinghouseEULA.txt) +// When set to Barakah, we will display a Barakah EUlA (BarakahEULA.txt) +// VlnSettings.RelaseMode will return the AssemblyConfiguration setting. +// VlnSettings.EULAFile will return the EULA file name + +[assembly: AssemblyConfiguration("Release")] // normal release mode +//[assembly: AssemblyConfiguration("Demo")] // Demo CD/DVD release force SAMPLE watermark, disable RO Editor, Demo EULA +//[assembly: AssemblyConfiguration("Westinghouse")] // Westinghouse EULA +//[assembly: AssemblyConfiguration("Barakah")] // Barakah EULA C2018-037 + +[assembly: AssemblyCompany("Volian Enterprises, Inc.")] +[assembly: AssemblyProduct("PROMS")] +[assembly: AssemblyCopyright("Copyright © 2012. All Rights Reserved.")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2ffeb031-bf85-4153-baa2-2d4da2fd5556")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build YYMM (two digit year, two digit month) +// Revision DHH (day - no leading zero, two digit hour - military time +// +// ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** +[assembly: AssemblyVersion("2.1.2508.1807")] +[assembly: AssemblyFileVersion("2.1.2508.1807")] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.49.1 From 539ad769d011ad895f89a521be99b49cab666111 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 21 Aug 2025 00:11:08 -0400 Subject: [PATCH 03/25] C2025-022-Remove-UCF-2 --- .../Properties/AssemblyInfo.cs | 5 +- .../VEPROMS User Interface/VEPROMS_UI.csproj | 9 - PROMS/VEPROMS User Interface/frmUCF.cs | 1015 ----------------- .../VEPROMS User Interface/frmUCF.designer.cs | 287 ----- PROMS/VEPROMS User Interface/frmUCF.resx | 120 -- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 54 +- 6 files changed, 4 insertions(+), 1486 deletions(-) delete mode 100644 PROMS/VEPROMS User Interface/frmUCF.cs delete mode 100644 PROMS/VEPROMS User Interface/frmUCF.designer.cs delete mode 100644 PROMS/VEPROMS User Interface/frmUCF.resx diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs index 06f03d4c..e3695856 100644 --- a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs +++ b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs @@ -44,8 +44,9 @@ using System.Runtime.InteropServices; // Revision DHH (day - no leading zero, two digit hour - military time // // ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** -[assembly: AssemblyVersion("2.1.2508.1807")] -[assembly: AssemblyFileVersion("2.1.2508.1807")] +[assembly: AssemblyVersion("2.2.2508.2100")] +[assembly: AssemblyFileVersion("2.2.2508.2100")] + diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index 593c1005..184da061 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -298,12 +298,6 @@ frmSI.cs - - Form - - - frmUCF.cs - Form @@ -395,9 +389,6 @@ frmSI.cs - - frmUCF.cs - Designer frmVEPROMS.cs diff --git a/PROMS/VEPROMS User Interface/frmUCF.cs b/PROMS/VEPROMS User Interface/frmUCF.cs deleted file mode 100644 index 18327290..00000000 --- a/PROMS/VEPROMS User Interface/frmUCF.cs +++ /dev/null @@ -1,1015 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Xml; -using System.IO; -using System.Windows.Forms; -using VEPROMS.CSLA.Library; -using System.Text.RegularExpressions; -using System.Xml.Xsl; - - -namespace VEPROMS -{ - // frmUCF is the main form for User Control of Format. It is accessible by Administrator & Set Administrator from the V button Administration - // menu. It uses the FormatConfig structure whose data is stored in the Config field of the Formats table. It uses XmlSerialization to - // store/retrieve the data from the database field and uses a Windows Property Grid to present the data, the data is tied to the - // Property Grid by setting the SelectedObject of the Property Grid to the FormatConfig. FormatConfig objects use TypeConverter(typeof(ExpandableObjectConverter)) on the - // fields to allow for accessing the data structures below the FormatConfig level (by default, fields are shown in the grid, Browsable(false) does - // not show the fields. NOTE that collection data uses the PropGridCollEditor, see that file for further information (in Volian.Base.Library) - // - public partial class frmUCF : Form - { - private bool _UcfForRepWords = false; - public bool UcfForRepWords // flags that UCF has changes to replace words - use for Reset button enabling - { - get { return _UcfForRepWords; } - set { _UcfForRepWords = value; } - } - private FormatConfig MyFormatConfig = new FormatConfig(); - private PlantFormat OriginalPlantFormat; - private FormatInfo OriginalFormatInfo; - public frmUCF() - { - InitializeComponent(); - } - private bool _Initializing = false; - private void frmUCF_Load(object sender, EventArgs e) - { - _Initializing = true; - PlantFormat.DoingUCFCheckOffs = true; - PlantFormat.DoingUCFCheckOffsUse = MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF ?? false; - cbxFormatList.DataSource = null; - cbxFormatList.DisplayMember = "FullName"; - cbxFormatList.ValueMember = "FullName"; - cbxFormatList.DataSource = FormatInfoList.GetFormatInfoListUsed(); - cbxFormatList.SelectedIndex = -1; - MyFormatConfig = new FormatConfig(); - PG.SelectedObject = MyFormatConfig; - PG.Enabled = false; - PG.SelectedGridItemChanged += PG_SelectedGridItemChanged; - PG.PropertyValueChanged += PG_PropertyValueChanged; - btnSaveAs.Enabled = false; - btnSaveClose.Enabled = false; - btnSave.Enabled = false; - btnReset.Enabled = false; - btnDelete.Enabled = false; - _Initializing = false; - } - void PG_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) - { - if (SelectedGridField.EndsWith("Flags:UCF CheckOffs")) - { - // when changing whether the UCF format has the UCF checkoffs (there is a list of checkoffs/headers in the base format, when this - // flag is true, they get added to the list from the starting format), refresh the checkoff header & checkoff lists - if ((bool)e.OldValue != MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF) - { - // refresh the checkoff data in myformatconfig. Need to clear the checkoff header list & checkoff list before - // getting new data. - PlantFormat.DoingUCFCheckOffsUse = (bool)MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF; - GetUCFCheckOffDataForUCFGrid((bool)MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF); - PG.Refresh(); - } - } - else if (SelectedGridField.EndsWith(" Name")) // B2019-012: don't allow removal of '_UCF' from name. - { - if ((string)e.OldValue != MyFormatConfig.Name) - { - if (((string)e.OldValue).EndsWith("_UCF") && !MyFormatConfig.Name.EndsWith("_UCF")) - { - MessageBox.Show(this, "Cannot remove '_UCF' from User Controlled Format name", "UCF Name", MessageBoxButtons.OK); - MyFormatConfig.Name = MyFormatConfig.Name + ("_UCF"); - PG.Refresh(); - } - } - } - } - private string SelectedGridField = "Identification: Name"; // first field sectioned upon creation of form - void PG_SelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e) - { - if (_Initializing || _formatListIndexChanging) return; - - // refresh the summary data textbox data to show summary of what is in this UCF. This occurs when move off of a field which - // actually 'stores' the change. - FormatConfig tmpfc = GetChangesUCFForSave(); - string scf = tmpfc.ConvertToString(); - scf = Regex.Replace(scf, " *<[a-zA-Z ]+/>\r\n", ""); - SetUCFSummary(scf); - - // see if data has changed, and if so, enable the Reset button. - // Upon selection of a grid item, see if the grid item has data associated with it & if so, see if there has been - // a change. Code needs added here for any value listed on the main property grid, i.e. not part of a collection, or - // if the collection is reset in its entirety (replace words is an example of this). - bool enabled = false; - btnReset.Text = "Reset"; - string previousSelectedGridField = SelectedGridField; - SelectedGridField = LabelPath(PG.SelectedGridItem); - // remove the following line before release: - lblPGItem.Text = SelectedGridField; - - if (previousSelectedGridField.EndsWith("Identification: Name") && !SelectedGridField.EndsWith("Identification: Name")) SetButtonSaveAsEnabled(); - if (previousSelectedGridField.EndsWith("Data:Plant Format:Step Settings:Replace Words List")) - { - // if moving off of the replace words, see if any changes exist so that Reset List button is enabled: - FormatConfig.ReplaceStrData rps = GetChangedReplaceListForSave(); - UcfForRepWords = (rps != null && rps.Count > 0); - } - if (SelectedGridField.EndsWith("Identification: Name")) enabled = false; - else if (SelectedGridField.EndsWith("Data:Plant Format")) enabled = false; - else if (SelectedGridField.EndsWith("Data:Plant Format:Section Type Settings")) enabled = false; - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings")) enabled = false; - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Flags")) enabled = false; - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Flags:Compress Steps")) - { - if (MyFormatConfig.PlantFormat.FormatData.Flags.CompressSteps != null && MyFormatConfig.PlantFormat.FormatData.Flags.CompressSteps != OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.CompressSteps) - { - btnReset.Text = "Reset to " + OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.CompressSteps; - enabled = true; - } - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Flags:Partial Step Compression")) - { - if (MyFormatConfig.PlantFormat.FormatData.Flags.PartialStepCompression != null && MyFormatConfig.PlantFormat.FormatData.Flags.PartialStepCompression != OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PartialStepCompression) - { - btnReset.Text = "Reset to " + OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PartialStepCompression; - enabled = true; - } - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Flags:UCF CheckOffs")) - { - if (MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF != null && MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF != OriginalPlantFormat.FormatData.ProcData.CheckOffUCF) - { - btnReset.Text = "Reset to " + OriginalPlantFormat.FormatData.ProcData.CheckOffUCF; - enabled = true; - } - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Replace Words List")) - { - if (UcfForRepWords) // flags that ucf data exists for replace words. - { - btnReset.Text = "Reset List"; - enabled = true; - } - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:CheckOff XOffset")) - { - if (MyFormatConfig.PlantFormat.FormatData.CheckOffXOffAdj != null && MyFormatConfig.PlantFormat.FormatData.CheckOffXOffAdj != 0) // flags that ucf data exists for replace words. - { - btnReset.Text = "Reset to 0"; - enabled = true; - } - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Step List")) enabled = false; - else enabled = false; - - btnReset.Enabled = enabled; - } - // remove the following method for release: - private string LabelPath(GridItem gi) - { - return (gi.Parent == null ? "" : LabelPath(gi.Parent) + ":" + gi.Label); - } - private void btnSaveClose_Click(object sender, EventArgs e) - { - // get a FormatConfig structure that only has differences from the original format. This is what gets saved. - FormatConfig tmpForSave = GetChangesUCFForSave(); - string scf = tmpForSave.ConvertToString(); - scf = Regex.Replace(scf, " *<[a-zA-Z ]+/>\r\n", ""); - int fmtid = OriginalPlantFormat.MyFormat is Format ? (OriginalPlantFormat.MyFormat as Format).FormatID : (OriginalPlantFormat.MyFormat as FormatInfo).FormatID; - // for now, tell the user that changes don't take affect until reentry. This was done since the 'refresh' of FormatConfig was not - // working. - using (Format fmt = Format.Get(fmtid)) - { - FormatInfo fi = FormatInfo.GetFormatNoUCFByFormatID(OriginalFormatInfo.FormatID); - if (fi.Data == "") - { - fmt.Data = ""; - fmt.GenMac = ""; - } - fmt.Config = scf; - fmt.Name = MyFormatConfig.Name; - fmt.Description = MyFormatConfig.Description; - fmt.Save(true); - MessageBox.Show(this, "Restart PROMS to have format changes take effect.", "", MessageBoxButtons.OK); - } - OriginalPlantFormat.FormatData.ProcData.CheckOffData.ClearCheckOffAndHeaderLists(); - PlantFormat.IgnoreUCF = false; - PlantFormat.DoingUCFCheckOffs = false; - } - private void btnCancel_Click(object sender, EventArgs e) - { - if (OriginalPlantFormat != null) OriginalPlantFormat.FormatData.ProcData.CheckOffData.ClearCheckOffAndHeaderLists(); - PlantFormat.IgnoreUCF = false; - PlantFormat.DoingUCFCheckOffs = false; - } - private bool _formatListIndexChanging = false; // don't change other selections when changing this index - private void cbxFormatList_SelectedIndexChanged(object sender, EventArgs e) - { - if (_Initializing) return; - if (cbxFormatList.SelectedIndex > -1) - { - _formatListIndexChanging = true; - FormatInfoList fl = FormatInfoList.GetFormatInfoListUsed(); - // Get the format data, the query in GetFormatInfoListUsed may have null for data/genmac which causes a - // problem when reading the 'parent' data for UCF saved as formats. - int i = -1; - FormatInfo finfo = cbxFormatList.SelectedItem as FormatInfo; - if (finfo == null) finfo = fl[cbxFormatList.SelectedIndex]; - OriginalFormatInfo = FormatInfo.Get(finfo.FormatID); - OriginalPlantFormat = OriginalFormatInfo.PlantFormat; - - // get original data when accessing the plant format data (not UCF because it UCF data is being modified): - PlantFormat.IgnoreUCF = true; - int formatid = OriginalPlantFormat.MyFormat is Format ? (OriginalPlantFormat.MyFormat as Format).FormatID : (OriginalPlantFormat.MyFormat as FormatInfo).FormatID; - FormatInfo fi = FormatInfo.Get(formatid); - // if this has config data it is a UCF format, the MyFormatConfig has the config data & see if doing additional checkoffs. - // Also, put out the summary of the changes if it is a 'UCF' and if no differences just state that. - btnDetails.Visible = true; - lblSummary.Visible = true; - tbUCFSummary.Visible = true; - if (fi.Config != null && fi.Config != "") - { - MyFormatConfig = FormatConfig.Get(fi.Config); - PlantFormat.DoingUCFCheckOffsUse = MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF ?? false; - btnSaveClose.Enabled = true; // UCF formats can be modified and saved. - btnSave.Enabled = true; - SetUCFSummary(fi.Config); - } - else - { - MyFormatConfig = new FormatConfig(); - btnSaveClose.Enabled = false; - btnSave.Enabled = false; - tbUCFSummary.Text = "No differences from original"; - } - // initialize the data based on the selected format with any changes from the FormatConfig. - GetUCFDataForUCFGrid(); - PG.Enabled = true; - PG.SelectedObject = MyFormatConfig; - btnSaveAs.Enabled = false; - SetDeleteOrResetAllButton(); - - // set derived from if there is a parent: - if (OriginalFormatInfo.MyParent.FormatID == 1) - { - lblDerFrom.Visible = false; - lblDerivedFrom.Visible = false; - } - else - { - // get to top parent format: - FormatInfo p = OriginalFormatInfo; - while (p.MyParent.FormatID != 1) p = p.MyParent; - lblDerFrom.Visible = true; - lblDerivedFrom.Visible = true; - lblDerivedFrom.Text = p.Name.Replace("_UCF", "") + "->" + OriginalFormatInfo.MyParent.Name.Replace("_UCF", "") + ":" + OriginalFormatInfo.MyParent.Description; - } - _formatListIndexChanging = false; - } - - } - - private void SetUCFSummary(string formatConfig) - { - try - { - string sXSLSummary = System.IO.File.ReadAllText(Application.StartupPath + "\\" + "UCFSummary.xsl"); - StringWriter sw = new StringWriter(); - using (XmlReader xrt = XmlReader.Create(new StringReader(sXSLSummary))) - { - using (XmlReader xri = XmlReader.Create(new StringReader(formatConfig))) - { - using (XmlWriter xwo = XmlWriter.Create(sw)) - { - XslCompiledTransform xsl = new XslCompiledTransform(); - xsl.Load(xrt); - xsl.Transform(xri, null, sw); - } - if (sw == null || sw.ToString() == "") - tbUCFSummary.Text = "No differences from original"; - else - tbUCFSummary.Text = sw.ToString(); - } - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "Error getting summary for UCF differences", MessageBoxButtons.OK); - } - } - // The SaveAs Button should only be enabled if the user has given this format change a unique 'Name'. - private void SetButtonSaveAsEnabled() - { - btnSaveAs.Enabled = false; - if (MyFormatConfig.Name == null || MyFormatConfig.Name == "") return; - // See if Name has been changed: - if (MyFormatConfig.Name == OriginalFormatInfo.Name) return; - - // See if the Name is unique - foreach (FormatInfo fi in FormatInfoList.SortedFormatInfoList) - { - if (MyFormatConfig.Name == fi.Name && MyFormatConfig.Name != savDBFormatConfig.Name) - { - MessageBox.Show("A format with Name " + MyFormatConfig.Name + " already exists. Name must be unique. Change the name before a Save As can be done."); - } - } - btnSaveAs.Enabled = true; - return; - } - // If the selected format is a UCF 'Save As', then possibly allow delete (if not used). Otherwise, if selected format - // has Config data, i.e. UCF data, then change button text to 'Revert to Original'. In both cases, enable button, otherwise it is disabled. - private void SetDeleteOrResetAllButton() - { - btnDelete.Enabled = false; - // See if UCF Save As, i.e. Data/Genmac are null and that the format is not used. - FormatInfo fi = FormatInfo.GetFormatNoUCFByFormatID(OriginalFormatInfo.FormatID); - if (fi.Data == "") - { - if (OriginalFormatInfo.ChildFormatCount == 0 && OriginalFormatInfo.FormatContentCount == 0 && OriginalFormatInfo.FormatDocVersionCount == 0 && OriginalFormatInfo.FormatFolderCount == 0) - { - btnDelete.Enabled = true; - btnDelete.Text = "Delete"; - } - } - else - { - if (OriginalFormatInfo.Config != null && OriginalFormatInfo.Config != "") - { - btnDelete.Enabled = true; - btnDelete.Text = "Revert to Original"; - } - } - } - // GetChangeUCFForSave compares UCF data in FormatConfig to the original PlantFormat data to see if there - // are changes that need to be saved to the database. - private FormatConfig savDBFormatConfig; - private FormatConfig GetChangesUCFForSave() - { - FormatConfig changesOnly = new FormatConfig(); - - // Flags - if (MyFormatConfig.PlantFormat.FormatData.Flags.CompressSteps != null && MyFormatConfig.PlantFormat.FormatData.Flags.CompressSteps != OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.CompressSteps) - changesOnly.PlantFormat.FormatData.Flags.CompressSteps = MyFormatConfig.PlantFormat.FormatData.Flags.CompressSteps; - if (MyFormatConfig.PlantFormat.FormatData.Flags.PartialStepCompression != null && MyFormatConfig.PlantFormat.FormatData.Flags.PartialStepCompression != OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PartialStepCompression) - changesOnly.PlantFormat.FormatData.Flags.PartialStepCompression = MyFormatConfig.PlantFormat.FormatData.Flags.PartialStepCompression; - if (MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF != null && MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF == true) // save if true (original format is always false) - changesOnly.PlantFormat.FormatData.Flags.CheckOffUCF = MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF; - - // CheckOff Headers - if (MyFormatConfig.PlantFormat.FormatData.CheckOffHeaderList != null) changesOnly.PlantFormat.FormatData.CheckOffHeaderList = GetChangeCheckOffHeaderListForSave(); - - // CheckOffs - if (MyFormatConfig.PlantFormat.FormatData.CheckOffList != null) changesOnly.PlantFormat.FormatData.CheckOffList = GetChangeCheckOffListForSave(); - - // Checkoff xoffset adjustment - if (MyFormatConfig.PlantFormat.FormatData.CheckOffXOffAdj != null && MyFormatConfig.PlantFormat.FormatData.CheckOffXOffAdj != 0) // save if not zero (original format is always zero) - changesOnly.PlantFormat.FormatData.CheckOffXOffAdj = MyFormatConfig.PlantFormat.FormatData.CheckOffXOffAdj; - - // steps - if (MyFormatConfig.PlantFormat.FormatData.StepData != null) changesOnly.PlantFormat.FormatData.StepData = GetChangeStepListForSave(); - - // replace words - just store them all, if there are differences... can't handle deleted unless doing this. - if (MyFormatConfig.PlantFormat.FormatData.ReplaceStrData != null) changesOnly.PlantFormat.FormatData.ReplaceStrData = GetChangedReplaceListForSave(); - - // docstyles - FormatConfig.DocStyles retds = new FormatConfig.DocStyles(); - foreach (DocStyle dsorig in OriginalPlantFormat.DocStyles.DocStyleList) - { - if (!dsorig.Inactive && dsorig.IsStepSection) - { - FormatConfig.DocStyle ds = new FormatConfig.DocStyle(); - ds.Index = dsorig.Index.ToString(); - ds.Name = dsorig.Name; - if (ds.Layout == null) ds.Layout = new FormatConfig.Layout(); - // See if in the FormatConfig, use it - FormatConfig.DocStyle found = null; - if (MyFormatConfig.PlantFormat.DocStyles != null) - { - foreach (FormatConfig.DocStyle fcds in MyFormatConfig.PlantFormat.DocStyles) - { - float? difl = Math.Abs((float)((fcds.Layout.LeftMargin * 72) - dsorig.Layout.LeftMargin)); - float? difp = Math.Abs((float)((fcds.Layout.PageLength * 72) - dsorig.Layout.PageLength)); - if (fcds.Index == dsorig.Index.ToString() && (difl > 1 || difp > 1)) - { - found = fcds; - break; - } - } - } - if (found != null) // save it values are different. - { - if ((found.Layout.LeftMargin * 72) != dsorig.Layout.LeftMargin) ds.Layout.LeftMargin = found.Layout.LeftMargin * 72; - else ds.Layout.LeftMargin = null; - if ((found.Layout.PageLength * 72) != dsorig.Layout.PageLength) ds.Layout.PageLength = found.Layout.PageLength * 72; - else ds.Layout.PageLength = null; - retds.Add(ds); - } - } - } - if (retds.Count > 0) changesOnly.PlantFormat.DocStyles = retds; - return changesOnly; - } - // Check for differences in the checkoffheaderlist & checkofflist. Only Active flag is used: - private FormatConfig.CheckOffHeaderList GetChangeCheckOffHeaderListForSave() - { - FormatConfig.CheckOffHeaderList cohlist = new FormatConfig.CheckOffHeaderList(); - foreach (FormatConfig.CheckOffHeader coh in MyFormatConfig.PlantFormat.FormatData.CheckOffHeaderList) - { - if (!(bool)coh.Active) cohlist.Add(coh); - } - return cohlist; - } - private FormatConfig.CheckOffList GetChangeCheckOffListForSave() - { - FormatConfig.CheckOffList colist = new FormatConfig.CheckOffList(); - foreach (FormatConfig.CheckOff co in MyFormatConfig.PlantFormat.FormatData.CheckOffList) - { - if (!(bool)co.Active) colist.Add(co); - } - return colist; - } - // Check for differences in the StepDataList between UCF and original data for saving of data to database: - private FormatConfig.StepData GetChangeStepListForSave() - { - FormatConfig.StepData sdlist = new FormatConfig.StepData(); - foreach (StepData sdorig in OriginalPlantFormat.FormatData.StepDataList) - { - if (!sdorig.Inactive) - { - // find this step in the config data: - foreach (FormatConfig.Step fcstp in MyFormatConfig.PlantFormat.FormatData.StepData) - { - if (fcstp.Index == sdorig.Index.ToString()) - { - // see if data is different and if so, add it to the return list: - System.Drawing.FontConverter cvt = new System.Drawing.FontConverter(); - string origFont = cvt.ConvertToString(sdorig.Font.WindowsFont); - string newFont = cvt.ConvertToString(fcstp.FontDesc.WindowsFont); - if (origFont != newFont) - { - FormatConfig.Step stp = fcstp; - sdlist.Add(stp); - } - break; - } - } - } - } - return sdlist; - } - // Check for differences in the ReplaceWords between UCF and original data for saving of data to database: - private FormatConfig.ReplaceStrData GetChangedReplaceListForSave() - { - // only saving the differences - // need to compare the original format list with the list as it is stored for UCF, i.e.working with property grid and save differences. - // Note that check for 'bad' data such as no flags, or null/empty replace with/word strings - don't use those. - // States for replacewords: 0 = no change, -1 deleted, 1 added, 2 modified - FormatConfig.ReplaceStrData retlist = new FormatConfig.ReplaceStrData(); // list of changes - foreach (FormatConfig.ReplaceStr ucfrepstr in MyFormatConfig.PlantFormat.FormatData.ReplaceStrData) - { - // Modified - foreach (ReplaceStr origrepstr in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) - { - // B2019-113: consider replace word AND flags to determine if there was a modification - if (origrepstr.ReplaceWord.Replace("{Backspace}", "") == ucfrepstr.ReplaceWord.Replace("{Backspace}", "") && (E_ReplaceFlags)ucfrepstr.Flag == origrepstr.Flag) - { - if ((ucfrepstr.ReplaceWith != origrepstr.ReplaceWith) && ucfrepstr.Flag != 0 && ucfrepstr.ReplaceWith != "") - { - ucfrepstr.State = 2; - retlist.Add(ucfrepstr); - break; - } - } - } - } - // Added: - List origstrList = new List(); // used to find added, (see later in this method) - foreach (ReplaceStr origrepstr in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) origstrList.Add(origrepstr.ReplaceWord); - foreach (FormatConfig.ReplaceStr ucfrepstr in MyFormatConfig.PlantFormat.FormatData.ReplaceStrData) - { - if (!origstrList.Contains(ucfrepstr.ReplaceWord)) - { - // check for valid data, i.e. flag set & both replaceword & with not blank - if (ucfrepstr.Flag != 0 && ucfrepstr.ReplaceWith != null && ucfrepstr.ReplaceWith != "" && ucfrepstr.ReplaceWord != null && ucfrepstr.ReplaceWord != "") - { - ucfrepstr.State = 1; - retlist.Add(ucfrepstr); - } - } - else // B2019-113: replace word is in the original list, see if this word was added with different flags - { - if (!RepWrdSameWordSameFlags(OriginalPlantFormat.FormatData.SectData.ReplaceStrList, ucfrepstr)) - { - ucfrepstr.State = 1; - retlist.Add(ucfrepstr); - } - } - } - //Deleted: - List ucfList = new List(); // used to find deleted - foreach (FormatConfig.ReplaceStr ucfrepstr in MyFormatConfig.PlantFormat.FormatData.ReplaceStrData) ucfList.Add(ucfrepstr.ReplaceWord); - foreach (ReplaceStr origrepstr in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) - { - bool addtodeletelist = false; - if (!ucfList.Contains(origrepstr.ReplaceWord) ) - { - if (!((origrepstr.ReplaceWith.Contains("$1") && origrepstr.ReplaceWord.Contains("w*")) || origrepstr.ReplaceWith.Contains("{Backspace}"))) - { - addtodeletelist = true; - } - } - else // // B2019-113: for this ucf replaceword, see if its flag is in the original list - { - foreach (FormatConfig.ReplaceStr ucfrepstruct in MyFormatConfig.PlantFormat.FormatData.ReplaceStrData) - { - if (origrepstr.ReplaceWord.Replace("{Backspace}", "") == ucfrepstruct.ReplaceWord.Replace("{Backspace}", "")) - { - // only deleted if replace word AND flags match: - if (!RepWrdSameWordSameFlags(OriginalPlantFormat.FormatData.SectData.ReplaceStrList, ucfrepstruct)) - { - addtodeletelist = true; - break; - } - } - } - } - if (addtodeletelist) - { - // make a deleted replacestr to save - FormatConfig.ReplaceStr del = new FormatConfig.ReplaceStr(); - del.State = -1; - del.Flag = (FormatConfig.E_ReplaceFlagsUCF)origrepstr.Flag; - del.ReplaceWord = origrepstr.ReplaceWord; - del.ReplaceWith = origrepstr.ReplaceWith; - retlist.Add(del); - } - } - return retlist; - } - - private bool RepWrdSameWordSameFlags(ReplaceStrList replaceStrList, FormatConfig.ReplaceStr ucfrepstr) - { - // B2019-133: if the replace word is the same, see if the UCF flag is different. The Replace Word & the flags need to be the same for it to be a match. - List flags = new List(); - foreach (ReplaceStr origrepstr in replaceStrList) - { - if (origrepstr.ReplaceWord.Replace("{Backspace}", "") == ucfrepstr.ReplaceWord.Replace("{Backspace}", "")) flags.Add(ucfrepstr.Flag); - } - return (flags.Contains(ucfrepstr.Flag)); - } - // The following uses the original format's ReplaceWords list and applies any changes made from the UCF ReplaceWords list. - private FormatConfig.ReplaceStrData GetMergedReplaceList() - { - // need to compare the original format list with the list as it is stored for working with property grid. - FormatConfig.ReplaceStrData retlist = new FormatConfig.ReplaceStrData(); // merged list - List inoriglist = new List(); // use this list to find new items in formatconfig (see below) - foreach (ReplaceStr origrepstr in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) - { - // In the format config list (UCF), find the 'ReplaceWord'. This is the 'key' for defining whether the - // replace word has been overwridden by UCF data. If it exists, use it: - FormatConfig.ReplaceStr usethisone = null; - bool deleted = false; - // States for replacewords: 0 = no change, -1 deleted, 1 added, 2 modified - foreach (FormatConfig.ReplaceStr ucfrepstr in MyFormatConfig.PlantFormat.FormatData.ReplaceStrData) - { - if (ucfrepstr.ReplaceWord == origrepstr.ReplaceWord && (E_ReplaceFlags)ucfrepstr.Flag == origrepstr.Flag) - { - if (ucfrepstr.State == -1) deleted = true; - else usethisone = ucfrepstr; - ucfrepstr.State = 2; - inoriglist.Add(origrepstr.ReplaceWord); - UcfForRepWords = true; - break; - } - } - // don't add in the replacewords that use 'Backspace' and regular expressions: - bool supported = true; - if (!deleted && usethisone == null) - { - if ((origrepstr.ReplaceWith.Contains("$1") || origrepstr.ReplaceWord.Contains("w*")) || origrepstr.ReplaceWith.Contains("{Backspace}")) - supported = false; - else - { - usethisone = new FormatConfig.ReplaceStr(); - usethisone.Flag = (FormatConfig.E_ReplaceFlagsUCF)origrepstr.Flag; - usethisone.State = 0; // no change - usethisone.ReplaceWith = origrepstr.ReplaceWith; - usethisone.ReplaceWord = origrepstr.ReplaceWord; - } - } - if (!deleted && supported) retlist.Add(usethisone); - } - // now add in any ucf only replacements, any that are not in the inoriglist - foreach (FormatConfig.ReplaceStr ucfrepstr in MyFormatConfig.PlantFormat.FormatData.ReplaceStrData) - { - if (!inoriglist.Contains(ucfrepstr.ReplaceWord)) - { - FormatConfig.ReplaceStr newone = new FormatConfig.ReplaceStr(); - newone.Flag = (FormatConfig.E_ReplaceFlagsUCF)ucfrepstr.Flag; - newone.State = 1; - //newone.ReplaceWith = ucfrepstr.ReplaceWith; - newone.ReplaceWith = ucfrepstr.ReplaceWith; - newone.ReplaceWord = ucfrepstr.ReplaceWord; - retlist.Add(newone); - UcfForRepWords = true; - } - } - return (retlist); - } - // This method reads in the format items, merging any changes from UCF into original format. It sets MyFormatConfig, which - // is the structure that gets used by the PropertyGrid - private void GetUCFDataForUCFGrid() - { - // name/description is only stored as format record fields. There are attributes in formatconfig xml that are used for defining these - // when new UCFs are defined or allowing for updates. - MyFormatConfig.Name = OriginalFormatInfo.Name; - MyFormatConfig.Description = OriginalFormatInfo.Description; - - // Store original (currently saved FormatConfig) to be used for comparison when saving. - savDBFormatConfig = MyFormatConfig; - - // Flags - if (MyFormatConfig.PlantFormat.FormatData.Flags.CompressSteps == null) MyFormatConfig.PlantFormat.FormatData.Flags.CompressSteps = OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.CompressSteps; - if (MyFormatConfig.PlantFormat.FormatData.Flags.PartialStepCompression == null) MyFormatConfig.PlantFormat.FormatData.Flags.PartialStepCompression = OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PartialStepCompression; - if (MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF == null) MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF = OriginalPlantFormat.FormatData.ProcData.CheckOffUCF; - - // checkoff xoffset adjustment - if (MyFormatConfig.PlantFormat.FormatData.CheckOffXOffAdj == null) MyFormatConfig.PlantFormat.FormatData.CheckOffXOffAdj = 0; - - GetUCFCheckOffDataForUCFGrid((bool)MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF); - - // StepData: If there is no UCF data for steps, copy over from selected format - FormatConfig.StepData sdlMerged = new FormatConfig.StepData(); - if (MyFormatConfig.PlantFormat.FormatData.StepData == null || MyFormatConfig.PlantFormat.FormatData.StepData.Count == 0) - { - foreach (StepData sdorig in OriginalPlantFormat.FormatData.StepDataList) - { - if (!sdorig.Inactive && sdorig.Index != 0) - { - FormatConfig.Step stp = new FormatConfig.Step(); - stp.Index = sdorig.Index.ToString(); - stp.Type = sdorig.Type; - stp.FontDesc = new FormatConfig.FontDesc(); - stp.FontDesc.OrigWindowsFont = sdorig.Font.WindowsFont; - stp.FontDesc.WindowsFont = sdorig.Font.WindowsFont; - if (MyFormatConfig.PlantFormat.FormatData.StepData == null) MyFormatConfig.PlantFormat.FormatData.StepData = new FormatConfig.StepData(); - sdlMerged.Add(stp); - } - } - } - else - { - foreach (StepData sdorig in OriginalPlantFormat.FormatData.StepDataList) - { - if (!sdorig.Inactive && sdorig.Index != 0) - { - FormatConfig.Step stp = new FormatConfig.Step(); - stp.Index = sdorig.Index.ToString(); - stp.Type = sdorig.Type; - stp.FontDesc = new FormatConfig.FontDesc(); - // See if in the FormatConfig, use it - FormatConfig.Step foundinFC = null; - foreach (FormatConfig.Step fcstp in MyFormatConfig.PlantFormat.FormatData.StepData) - { - if (fcstp.Index == sdorig.Index.ToString()) - { - foundinFC = fcstp; - break; - } - } - stp.FontDesc.OrigWindowsFont = new System.Drawing.Font(sdorig.Font.Family, (float)sdorig.Font.Size, sdorig.Font.WindowsFont.Style); - if (foundinFC != null) - stp.FontDesc.WindowsFont = new System.Drawing.Font(foundinFC.FontDesc.WindowsFont.Name, foundinFC.FontDesc.WindowsFont.Size, foundinFC.FontDesc.WindowsFont.Style); - else - stp.FontDesc.WindowsFont = new System.Drawing.Font(sdorig.Font.Family, (float)sdorig.Font.Size, sdorig.Font.WindowsFont.Style); - sdlMerged.Add(stp); - } - } - } - MyFormatConfig.PlantFormat.FormatData.StepData = sdlMerged; - - // ReplacWords - // if there are no replace str entries in sc, add from the selected format: - if (MyFormatConfig.PlantFormat.FormatData.ReplaceStrData == null || MyFormatConfig.PlantFormat.FormatData.ReplaceStrData.Count == 0) - { - foreach (ReplaceStr repstrorig in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) - { - if (!((repstrorig.ReplaceWith.Contains("$1") && repstrorig.ReplaceWord.Contains("w*")) || repstrorig.ReplaceWith.Contains("{Backspace}"))) - { - FormatConfig.ReplaceStr rsfc = new FormatConfig.ReplaceStr(); - rsfc.Flag = (FormatConfig.E_ReplaceFlagsUCF)repstrorig.Flag; - rsfc.State = 0; - rsfc.ReplaceWith = repstrorig.ReplaceWith; - rsfc.ReplaceWord = repstrorig.ReplaceWord; - MyFormatConfig.PlantFormat.FormatData.ReplaceStrData.Add(rsfc); - } - } - } - else - { - MyFormatConfig.PlantFormat.FormatData.ReplaceStrData = GetMergedReplaceList(); - } - // Document Style (section) Data (docstyles). Get step editor type only - if (MyFormatConfig.PlantFormat.DocStyles == null || MyFormatConfig.PlantFormat.DocStyles.Count == 0) - { - foreach (DocStyle dsorig in OriginalPlantFormat.DocStyles.DocStyleList) - { - if (!dsorig.Inactive && dsorig.IsStepSection) - { - FormatConfig.DocStyle ds = new FormatConfig.DocStyle(); - ds.Index = dsorig.Index.ToString(); - ds.Name = dsorig.Name; - if (ds.Layout == null) ds.Layout = new FormatConfig.Layout(); - ds.Layout.PageLength = (float)Math.Round((float)dsorig.Layout.PageLength / 72, 2); - ds.Layout.OrigPageLength = ds.Layout.PageLength; - ds.Layout.LeftMargin = (float)Math.Round((float)dsorig.Layout.LeftMargin / 72, 2); - ds.Layout.OrigLeftMargin = ds.Layout.LeftMargin; - if (MyFormatConfig.PlantFormat.DocStyles == null) MyFormatConfig.PlantFormat.DocStyles = new FormatConfig.DocStyles(); - MyFormatConfig.PlantFormat.DocStyles.Add(ds); - } - } - } - else - { - foreach (DocStyle dsorig in OriginalPlantFormat.DocStyles.DocStyleList) - { - if (!dsorig.Inactive && dsorig.IsStepSection) - { - FormatConfig.DocStyle ds = new FormatConfig.DocStyle(); - ds.Index = dsorig.Index.ToString(); - ds.Name = dsorig.Name; - if (ds.Layout == null) ds.Layout = new FormatConfig.Layout(); - // See if in the FormatConfig, use it - FormatConfig.DocStyle foundinFC = null; - foreach (FormatConfig.DocStyle fcds in MyFormatConfig.PlantFormat.DocStyles) - { - if (fcds.Index == dsorig.Index.ToString()) - { - foundinFC = fcds; - break; - } - } - if (foundinFC != null) - { - if (foundinFC.Layout.LeftMargin == null) foundinFC.Layout.LeftMargin = (float)Math.Round((float)dsorig.Layout.LeftMargin / 72, 2); - else foundinFC.Layout.LeftMargin = (float)Math.Round((float)foundinFC.Layout.LeftMargin / 72, 2); - foundinFC.Layout.OrigLeftMargin = (float)Math.Round((float)dsorig.Layout.LeftMargin / 72, 2); - if (foundinFC.Layout.PageLength == null) foundinFC.Layout.PageLength = (float)Math.Round((float)dsorig.Layout.PageLength / 72, 2); - else foundinFC.Layout.PageLength = (float)Math.Round((float)foundinFC.Layout.PageLength / 72, 2); - foundinFC.Layout.OrigPageLength = (float)Math.Round((float)dsorig.Layout.PageLength / 72, 2); - } - else - { - ds.Layout.OrigLeftMargin = (float)Math.Round((float)dsorig.Layout.LeftMargin / 72, 2); - ds.Layout.OrigPageLength = (float)Math.Round((float)dsorig.Layout.PageLength / 72, 2); - ds.Layout.LeftMargin = (float)Math.Round((float)dsorig.Layout.LeftMargin / 72, 2); - ds.Layout.PageLength = (float)Math.Round((float)dsorig.Layout.PageLength / 72, 2); - MyFormatConfig.PlantFormat.DocStyles.Add(ds); - } - } - } - } - } - - private void GetUCFCheckOffDataForUCFGrid(bool ucfcheckof) - { - OriginalPlantFormat.FormatData.ProcData.CheckOffData.ClearCheckOffAndHeaderLists(); - // CheckOffHeaders: If there is no UCF data, use from the selected format, otherwise merge: - FormatConfig.CheckOffHeaderList cohdrsMerged = new FormatConfig.CheckOffHeaderList(); - if (MyFormatConfig.PlantFormat.FormatData.CheckOffHeaderList == null || MyFormatConfig.PlantFormat.FormatData.CheckOffHeaderList.Count == 0) - { - foreach (CheckOffHeader cohorig in OriginalPlantFormat.FormatData.ProcData.CheckOffData.CheckOffHeaderList) - { - // do inactive:: - FormatConfig.CheckOffHeader coh = new FormatConfig.CheckOffHeader(); - coh.Index = cohorig.Index.ToString(); - coh.CheckOffHeading = cohorig.CheckOffHeading; - coh.Active = true; - coh.OrigActive = true; - cohdrsMerged.Add(coh); - } - } - else - { - foreach (CheckOffHeader cohorig in OriginalPlantFormat.FormatData.ProcData.CheckOffData.CheckOffHeaderList) - { - FormatConfig.CheckOffHeader coh = new FormatConfig.CheckOffHeader(); - coh.Index = cohorig.Index.ToString(); - coh.CheckOffHeading = cohorig.CheckOffHeading; - coh.Active = true; - coh.OrigActive = true; - // See if in the FormatConfig, to check its inactive flag: - foreach (FormatConfig.CheckOffHeader fccoh in MyFormatConfig.PlantFormat.FormatData.CheckOffHeaderList) - { - if (fccoh.Index == cohorig.Index.ToString()) - { - coh.Active = fccoh.Active; - coh.OrigActive = true; - break; - } - } - cohdrsMerged.Add(coh); - } - } - MyFormatConfig.PlantFormat.FormatData.CheckOffHeaderList = cohdrsMerged; - - // CheckOffs: If there is no UCF data, use from the selected format, otherwise merge: - FormatConfig.CheckOffList cosMerged = new FormatConfig.CheckOffList(); - // clear the lists so that correct lists will be initialized - foreach (CheckOff coorig in OriginalPlantFormat.FormatData.ProcData.CheckOffData.CheckOffList) - { - FormatConfig.CheckOff co = new FormatConfig.CheckOff(); - co.Index = coorig.Index.ToString(); - co.MenuItem = coorig.MenuItem; - co.Active = true; - co.OrigActive = true; - // See if in the FormatConfig, to check its inactive flag: - if (MyFormatConfig.PlantFormat.FormatData.CheckOffList != null) - { - foreach (FormatConfig.CheckOff fcco in MyFormatConfig.PlantFormat.FormatData.CheckOffList) - { - if (fcco.Index == coorig.Index.ToString()) - { - co.Active = fcco.Active; - co.OrigActive = true; - break; - } - } - } - cosMerged.Add(co); - } - MyFormatConfig.PlantFormat.FormatData.CheckOffList = cosMerged; - } - // The Reset button is used to reset a UCF change from the original data. If a field is added to UCF, code needs - // added here for the field: - private void btnReset_Click(object sender, EventArgs e) - { - // The code that enables the Reset button checks if a change (UCF) exists. So no need to check here. - if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Flags:Compress Steps")) - { - MyFormatConfig.PlantFormat.FormatData.Flags.CompressSteps = OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.CompressSteps; - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Flags:Partial Step Compression")) - { - MyFormatConfig.PlantFormat.FormatData.Flags.PartialStepCompression = OriginalPlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PartialStepCompression; - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Flags:UCF CheckOffs")) - { - MyFormatConfig.PlantFormat.FormatData.Flags.CheckOffUCF = OriginalPlantFormat.FormatData.ProcData.CheckOffUCF; - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:CheckOff XOffset")) - { - MyFormatConfig.PlantFormat.FormatData.CheckOffXOffAdj = 0; - } - else if (SelectedGridField.EndsWith("Data:Plant Format:Step Settings:Replace Words List")) - { - MyFormatConfig.PlantFormat.FormatData.ReplaceStrData.Clear(); - foreach (ReplaceStr repstrorig in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) - { - if (!((repstrorig.ReplaceWith.Contains("$1") && repstrorig.ReplaceWord.Contains("w*")) || repstrorig.ReplaceWith.Contains("{Backspace}"))) - { - FormatConfig.ReplaceStr rsfc = new FormatConfig.ReplaceStr(); - rsfc.Flag = (FormatConfig.E_ReplaceFlagsUCF)repstrorig.Flag; - rsfc.State = 0; - rsfc.ReplaceWith = repstrorig.ReplaceWith; - rsfc.ReplaceWord = repstrorig.ReplaceWord; - MyFormatConfig.PlantFormat.FormatData.ReplaceStrData.Add(rsfc); - UcfForRepWords = false; - } - } - } - btnReset.Enabled = false; - btnReset.Text = "Reset"; - } - - private void btnSaveAs_Click(object sender, EventArgs e) - { - // Name must be unique - description can be null. - // Append a '_UCF' at end of all user control of format formats. - // add a format record for this: - // FormatID - next ID, db creates on new format - // ParentID - format id of the format that was used as a base for this user control of format - // Name - user defined - // Description - user defined - if none specified by user, use the original's description - // Data - null: flags that a UCF was saved as and use the parent and config from this. - // - - // check for unique name. - foreach (FormatInfo fi in FormatInfoList.SortedFormatInfoList) - { - if (MyFormatConfig.Name == fi.Name || MyFormatConfig.Name + "_UCF" == fi.Name) - { - MessageBox.Show("A format with Name " + MyFormatConfig.Name + " already exists. Name must be unique. Save As cannot be done."); - return; - } - } - using (Format tmp = Format.Get(OriginalFormatInfo.FormatID)) - { - string fname = MyFormatConfig.Name + (MyFormatConfig.Name.EndsWith("_UCF") ? "" : "_UCF"); - Format fmt = Format.MakeFormat(tmp, fname, MyFormatConfig.Description == OriginalFormatInfo.Description || MyFormatConfig.Description == "" || MyFormatConfig.Description == null ? OriginalFormatInfo.Description : MyFormatConfig.Description, null, null, DateTime.Now, Volian.Base.Library.VlnSettings.UserID); - FormatConfig tmpForSave = GetChangesUCFForSave(); - string scf = tmpForSave.ConvertToString(); - scf = Regex.Replace(scf, " *<[a-zA-Z ]+/>\r\n", ""); - // for now, tell the user that changes don't take affect until reentry. This was done since the 'refresh' of FormatConfig was not - // working. - fmt.Config = scf; - fmt.Description = MyFormatConfig.Description; - fmt.Save(true); - MessageBox.Show(this, "Restart PROMS to have format changes take effect.", "", MessageBoxButtons.OK); - btnSaveAs.Enabled = false; - } - } - - private void btnDelete_Click(object sender, EventArgs e) - { - // delete this format OR (the button text is set to 'delete...' if no item or version uses it) - // revert to the original - string msg = btnDelete.Text == "Revert to Original" ? "revert to the original?" : "delete this format?"; - if (MessageBox.Show(this, "Are you sure you want to " + msg, "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) - { - PlantFormat.IgnoreUCF = true; - // the button is either 'Revert to Original' for a format that is the original and has config data, or 'Delete' for a UCF that - // was created by a 'Save As'. - // so do either a clear of the config data, or delete the format record depending on button's text - if (btnDelete.Text == "Revert to Original") - { - using (Format fmt = Format.Get(OriginalFormatInfo.FormatID)) - { - fmt.Config = ""; - fmt.Save(true); - MessageBox.Show(this, "The changes that have been made to the format will take affect after reentry to PROMS", "", MessageBoxButtons.OK); - MyFormatConfig = new FormatConfig(); - PG.SelectedObject = MyFormatConfig; - PG.Enabled = false; - btnSaveAs.Enabled = false; - btnDelete.Enabled = false; - btnSaveClose.Enabled = false; - btnSave.Enabled = false; - btnReset.Enabled = false; - } - } - else - { - try - { - Format.Delete(OriginalFormatInfo.FormatID); - } - catch (Exception ex) - { - MessageBox.Show("Could not delete the format"); - return; - } - cbxFormatList.DataSource = FormatInfoList.GetFormatInfoListUsed(); - cbxFormatList.SelectedIndex = -1; - MyFormatConfig = new FormatConfig(); - PG.SelectedObject = MyFormatConfig; - PG.Enabled = false; - btnSaveAs.Enabled = false; - btnDelete.Enabled = false; - btnSaveClose.Enabled = false; - btnSave.Enabled = false; - btnReset.Enabled = false; - } - PlantFormat.IgnoreUCF = false; - PlantFormat.DoingUCFCheckOffs = false; - } - } - - private void btnDetails_Click(object sender, EventArgs e) - { - FormatConfig tmpfc = GetChangesUCFForSave(); - string scf = tmpfc.ConvertToString(); - scf = Regex.Replace(scf, " *<[a-zA-Z ]+/>\r\n", ""); - dlgUCFDetail dtl = new dlgUCFDetail(scf, MyFormatConfig.Name, MyFormatConfig.Description); - dtl.ShowDialog(); - } - - private void btnSave_Click(object sender, EventArgs e) - { - // get a FormatConfig structure that only has differences from the original format. This is what gets saved. - FormatConfig tmpForSave = GetChangesUCFForSave(); - string scf = tmpForSave.ConvertToString(); - scf = Regex.Replace(scf, " *<[a-zA-Z ]+/>\r\n", ""); - int fmtid = OriginalPlantFormat.MyFormat is Format ? (OriginalPlantFormat.MyFormat as Format).FormatID : (OriginalPlantFormat.MyFormat as FormatInfo).FormatID; - // for now, tell the user that changes don't take affect until reentry. This was done since the 'refresh' of FormatConfig was not - // working. - using (Format fmt = Format.Get(fmtid)) - { - FormatInfo fi = FormatInfo.GetFormatNoUCFByFormatID(OriginalFormatInfo.FormatID); - if (fi.Data == "") - { - fmt.Data = ""; - fmt.GenMac = ""; - } - fmt.Config = scf; - fmt.Name = MyFormatConfig.Name; - fmt.Description = MyFormatConfig.Description; - fmt.Save(true); - } - } - } -} diff --git a/PROMS/VEPROMS User Interface/frmUCF.designer.cs b/PROMS/VEPROMS User Interface/frmUCF.designer.cs deleted file mode 100644 index 4c257fb0..00000000 --- a/PROMS/VEPROMS User Interface/frmUCF.designer.cs +++ /dev/null @@ -1,287 +0,0 @@ -namespace VEPROMS -{ - partial class frmUCF - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - //protected override void Dispose(bool disposing) - //{ - // if (disposing && (components != null)) - // { - // components.Dispose(); - // } - // base.Dispose(disposing); - //} - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.PGpanelBtm = new System.Windows.Forms.Panel(); - this.btnSave = new System.Windows.Forms.Button(); - this.btnDelete = new System.Windows.Forms.Button(); - this.btnReset = new System.Windows.Forms.Button(); - this.btnSaveAs = new System.Windows.Forms.Button(); - this.lblPGItem = new System.Windows.Forms.Label(); - this.btnSaveClose = new System.Windows.Forms.Button(); - this.btnCancel = new System.Windows.Forms.Button(); - this.PG = new System.Windows.Forms.PropertyGrid(); - this.pnlFormatList = new System.Windows.Forms.Panel(); - this.tbUCFSummary = new System.Windows.Forms.TextBox(); - this.btnDetails = new System.Windows.Forms.Button(); - this.lblSummary = new System.Windows.Forms.Label(); - this.lblDerivedFrom = new System.Windows.Forms.Label(); - this.lblDerFrom = new System.Windows.Forms.Label(); - this.cbxFormatList = new System.Windows.Forms.ComboBox(); - this.lblFormatList = new System.Windows.Forms.Label(); - this.PGpanelBtm.SuspendLayout(); - this.pnlFormatList.SuspendLayout(); - this.SuspendLayout(); - // - // PGpanelBtm - // - this.PGpanelBtm.Controls.Add(this.btnSave); - this.PGpanelBtm.Controls.Add(this.btnDelete); - this.PGpanelBtm.Controls.Add(this.btnReset); - this.PGpanelBtm.Controls.Add(this.btnSaveAs); - this.PGpanelBtm.Controls.Add(this.lblPGItem); - this.PGpanelBtm.Controls.Add(this.btnSaveClose); - this.PGpanelBtm.Controls.Add(this.btnCancel); - this.PGpanelBtm.Dock = System.Windows.Forms.DockStyle.Bottom; - this.PGpanelBtm.Location = new System.Drawing.Point(0, 560); - this.PGpanelBtm.Name = "PGpanelBtm"; - this.PGpanelBtm.Size = new System.Drawing.Size(614, 68); - this.PGpanelBtm.TabIndex = 0; - // - // btnSave - // - this.btnSave.Dock = System.Windows.Forms.DockStyle.Right; - this.btnSave.Enabled = false; - this.btnSave.Location = new System.Drawing.Point(164, 0); - this.btnSave.Name = "btnSave"; - this.btnSave.Size = new System.Drawing.Size(75, 68); - this.btnSave.TabIndex = 6; - this.btnSave.Text = "Save"; - this.btnSave.UseVisualStyleBackColor = true; - this.btnSave.Visible = false; - this.btnSave.Click += new System.EventHandler(this.btnSave_Click); - // - // btnDelete - // - this.btnDelete.Dock = System.Windows.Forms.DockStyle.Right; - this.btnDelete.Enabled = false; - this.btnDelete.Location = new System.Drawing.Point(239, 0); - this.btnDelete.Name = "btnDelete"; - this.btnDelete.Size = new System.Drawing.Size(75, 68); - this.btnDelete.TabIndex = 5; - this.btnDelete.Text = "Delete"; - this.btnDelete.UseVisualStyleBackColor = true; - this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); - // - // btnReset - // - this.btnReset.Dock = System.Windows.Forms.DockStyle.Right; - this.btnReset.Enabled = false; - this.btnReset.Location = new System.Drawing.Point(314, 0); - this.btnReset.Name = "btnReset"; - this.btnReset.Size = new System.Drawing.Size(75, 68); - this.btnReset.TabIndex = 4; - this.btnReset.Text = "Reset"; - this.btnReset.UseVisualStyleBackColor = true; - this.btnReset.Click += new System.EventHandler(this.btnReset_Click); - // - // btnSaveAs - // - this.btnSaveAs.Dock = System.Windows.Forms.DockStyle.Right; - this.btnSaveAs.Enabled = false; - this.btnSaveAs.Location = new System.Drawing.Point(389, 0); - this.btnSaveAs.Name = "btnSaveAs"; - this.btnSaveAs.Size = new System.Drawing.Size(75, 68); - this.btnSaveAs.TabIndex = 3; - this.btnSaveAs.Text = "Save As"; - this.btnSaveAs.UseVisualStyleBackColor = true; - this.btnSaveAs.Click += new System.EventHandler(this.btnSaveAs_Click); - // - // lblPGItem - // - this.lblPGItem.AutoSize = true; - this.lblPGItem.Location = new System.Drawing.Point(39, 20); - this.lblPGItem.Name = "lblPGItem"; - this.lblPGItem.Size = new System.Drawing.Size(46, 17); - this.lblPGItem.TabIndex = 2; - this.lblPGItem.Text = "label1"; - this.lblPGItem.Visible = false; - // - // btnSaveClose - // - this.btnSaveClose.DialogResult = System.Windows.Forms.DialogResult.OK; - this.btnSaveClose.Dock = System.Windows.Forms.DockStyle.Right; - this.btnSaveClose.Enabled = false; - this.btnSaveClose.Location = new System.Drawing.Point(464, 0); - this.btnSaveClose.Name = "btnSaveClose"; - this.btnSaveClose.Size = new System.Drawing.Size(75, 68); - this.btnSaveClose.TabIndex = 1; - this.btnSaveClose.Text = "Save and Close"; - this.btnSaveClose.UseVisualStyleBackColor = true; - this.btnSaveClose.Click += new System.EventHandler(this.btnSaveClose_Click); - // - // btnCancel - // - this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Dock = System.Windows.Forms.DockStyle.Right; - this.btnCancel.Location = new System.Drawing.Point(539, 0); - this.btnCancel.Name = "btnCancel"; - this.btnCancel.Size = new System.Drawing.Size(75, 68); - this.btnCancel.TabIndex = 0; - this.btnCancel.Text = "Cancel"; - this.btnCancel.UseVisualStyleBackColor = true; - this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); - // - // PG - // - this.PG.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.PG.Font = new System.Drawing.Font("Arial Rounded MT Bold", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.PG.LineColor = System.Drawing.SystemColors.ControlDark; - this.PG.Location = new System.Drawing.Point(0, 155); - this.PG.Name = "PG"; - this.PG.Size = new System.Drawing.Size(614, 405); - this.PG.TabIndex = 1; - // - // pnlFormatList - // - this.pnlFormatList.Controls.Add(this.tbUCFSummary); - this.pnlFormatList.Controls.Add(this.btnDetails); - this.pnlFormatList.Controls.Add(this.lblSummary); - this.pnlFormatList.Controls.Add(this.lblDerivedFrom); - this.pnlFormatList.Controls.Add(this.lblDerFrom); - this.pnlFormatList.Controls.Add(this.cbxFormatList); - this.pnlFormatList.Controls.Add(this.lblFormatList); - this.pnlFormatList.Dock = System.Windows.Forms.DockStyle.Top; - this.pnlFormatList.Location = new System.Drawing.Point(0, 0); - this.pnlFormatList.Name = "pnlFormatList"; - this.pnlFormatList.Size = new System.Drawing.Size(614, 149); - this.pnlFormatList.TabIndex = 3; - // - // tbUCFSummary - // - this.tbUCFSummary.BackColor = System.Drawing.SystemColors.Control; - this.tbUCFSummary.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.tbUCFSummary.Location = new System.Drawing.Point(33, 120); - this.tbUCFSummary.Name = "tbUCFSummary"; - this.tbUCFSummary.Size = new System.Drawing.Size(485, 15); - this.tbUCFSummary.TabIndex = 7; - // - // btnDetails - // - this.btnDetails.Location = new System.Drawing.Point(539, 112); - this.btnDetails.Name = "btnDetails"; - this.btnDetails.Size = new System.Drawing.Size(63, 33); - this.btnDetails.TabIndex = 6; - this.btnDetails.Text = "Details"; - this.btnDetails.UseVisualStyleBackColor = true; - this.btnDetails.Visible = false; - this.btnDetails.Click += new System.EventHandler(this.btnDetails_Click); - // - // lblSummary - // - this.lblSummary.AutoSize = true; - this.lblSummary.Location = new System.Drawing.Point(5, 96); - this.lblSummary.Name = "lblSummary"; - this.lblSummary.Size = new System.Drawing.Size(71, 17); - this.lblSummary.TabIndex = 4; - this.lblSummary.Text = "Summary:"; - this.lblSummary.Visible = false; - // - // lblDerivedFrom - // - this.lblDerivedFrom.AutoSize = true; - this.lblDerivedFrom.Location = new System.Drawing.Point(33, 75); - this.lblDerivedFrom.Name = "lblDerivedFrom"; - this.lblDerivedFrom.Size = new System.Drawing.Size(0, 17); - this.lblDerivedFrom.TabIndex = 3; - this.lblDerivedFrom.Visible = false; - // - // lblDerFrom - // - this.lblDerFrom.AutoSize = true; - this.lblDerFrom.Location = new System.Drawing.Point(3, 52); - this.lblDerFrom.Name = "lblDerFrom"; - this.lblDerFrom.Size = new System.Drawing.Size(97, 17); - this.lblDerFrom.TabIndex = 2; - this.lblDerFrom.Text = "Derived From:"; - this.lblDerFrom.Visible = false; - // - // cbxFormatList - // - this.cbxFormatList.FormattingEnabled = true; - this.cbxFormatList.Location = new System.Drawing.Point(23, 25); - this.cbxFormatList.Name = "cbxFormatList"; - this.cbxFormatList.Size = new System.Drawing.Size(550, 24); - this.cbxFormatList.Sorted = true; - this.cbxFormatList.TabIndex = 1; - this.cbxFormatList.SelectedIndexChanged += new System.EventHandler(this.cbxFormatList_SelectedIndexChanged); - // - // lblFormatList - // - this.lblFormatList.AutoSize = true; - this.lblFormatList.Location = new System.Drawing.Point(5, 4); - this.lblFormatList.Name = "lblFormatList"; - this.lblFormatList.Size = new System.Drawing.Size(115, 17); - this.lblFormatList.TabIndex = 0; - this.lblFormatList.Text = "Selected Format:"; - // - // frmUCF - // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(614, 628); - this.Controls.Add(this.pnlFormatList); - this.Controls.Add(this.PG); - this.Controls.Add(this.PGpanelBtm); - this.Name = "frmUCF"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "User Control of Format"; - this.Load += new System.EventHandler(this.frmUCF_Load); - this.PGpanelBtm.ResumeLayout(false); - this.PGpanelBtm.PerformLayout(); - this.pnlFormatList.ResumeLayout(false); - this.pnlFormatList.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Panel PGpanelBtm; - private System.Windows.Forms.Button btnSaveClose; - private System.Windows.Forms.Button btnCancel; - private System.Windows.Forms.PropertyGrid PG; - private System.Windows.Forms.Panel pnlFormatList; - private System.Windows.Forms.Label lblFormatList; - private System.Windows.Forms.ComboBox cbxFormatList; - private System.Windows.Forms.Label lblPGItem; - private System.Windows.Forms.Button btnSaveAs; - private System.Windows.Forms.Button btnReset; - private System.Windows.Forms.Button btnDelete; - private System.Windows.Forms.Label lblDerivedFrom; - private System.Windows.Forms.Label lblDerFrom; - private System.Windows.Forms.Button btnDetails; - private System.Windows.Forms.Label lblSummary; - private System.Windows.Forms.TextBox tbUCFSummary; - private System.Windows.Forms.Button btnSave; - - } -} - diff --git a/PROMS/VEPROMS User Interface/frmUCF.resx b/PROMS/VEPROMS User Interface/frmUCF.resx deleted file mode 100644 index 7080a7d1..00000000 --- a/PROMS/VEPROMS User Interface/frmUCF.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 74e4ae41..28fbb8df 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -2010,9 +2010,6 @@ namespace VEPROMS private DevComponents.DotNetBar.ButtonItem btnAdministrativeTools; private DevComponents.DotNetBar.ButtonItem btnSecurity; private DevComponents.DotNetBar.ButtonItem btnFormats; - private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormats; - private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormatsExport; - private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormatsImport; private TabItemsToClose _MyCloseTabList = new TabItemsToClose(); public TabItemsToClose MyCloseTabList @@ -2206,16 +2203,8 @@ namespace VEPROMS //btnFormats = new ButtonItem("btnFormats", "Formats"); //btnAdmin.SubItems.Add(btnSecurity); //btnAdmin.SubItems.Add(btnFormats); - //btnUserControlOfFormats = new ButtonItem("btnUserControlOfFormats", "User Control of Formats"); //btnFormats.SubItems.Add(btnUpdateFormats); - //btnFormats.SubItems.Add(btnUserControlOfFormats); - //btnUserControlOfFormats.Click += new EventHandler(btnUserControlOfFormats_Click); - //btnUserControlOfFormatsExport = new ButtonItem("btnUserControlOfFormatsExport", "Export User Control of Formats"); - //btnFormats.SubItems.Add(btnUserControlOfFormatsExport); - //btnUserControlOfFormatsExport.Click += new EventHandler(btnUserControlOfFormatsExport_Click); - //btnUserControlOfFormatsImport = new ButtonItem("btnUserControlOfFormatsImport", "Import User Control of Formats"); - //btnFormats.SubItems.Add(btnUserControlOfFormatsImport); - //btnUserControlOfFormatsImport.Click += new EventHandler(btnUserControlOfFormatsImport_Click); + //btnManageSecurity = new ButtonItem("btnManageSecurity", "Manage Security"); //btnSecurity.SubItems.Add(btnManageSecurity); //btnManageSecurity.Click += new EventHandler(btnManageSecurity_Click); @@ -2226,21 +2215,10 @@ namespace VEPROMS btnAdmin.SubItems.Add(btnSecurity); // btnAdmin.SubItems.Add(btnFormats); // C2024 - 041 remove from Admin(V button) menu btnAdmin.SubItems.Add(btnUpdateFormats); // C2024 - 041 remove from Admin(V button) menu - btnUserControlOfFormats = new ButtonItem("btnUserControlOfFormats", "User Control of Formats"); - //btnFormats.SubItems.Add(btnUpdateFormats); - //btnFormats.SubItems.Add(btnUserControlOfFormats); // C2024-041 remove from Admin (V button) menu - btnUserControlOfFormats.Click += new EventHandler(btnUserControlOfFormats_Click); - btnUserControlOfFormatsExport = new ButtonItem("btnUserControlOfFormatsExport", "Export User Control of Formats"); - //btnFormats.SubItems.Add(btnUserControlOfFormatsExport); // C2024-041 remove from Admin (V button) menu - btnUserControlOfFormatsExport.Click += new EventHandler(btnUserControlOfFormatsExport_Click); - btnUserControlOfFormatsImport = new ButtonItem("btnUserControlOfFormatsImport", "Import User Control of Formats"); - //btnFormats.SubItems.Add(btnUserControlOfFormatsImport); // C2024-041 remove from Admin (V button) menu - btnUserControlOfFormatsImport.Click += new EventHandler(btnUserControlOfFormatsImport_Click); btnManageSecurity = new ButtonItem("btnManageSecurity", "Manage Security"); btnSecurity.SubItems.Add(btnManageSecurity); btnManageSecurity.Click += new EventHandler(btnManageSecurity_Click); - //added by jcb: menu item to reset security requires password to implement btnResetSecurity = new ButtonItem("btnResetSecurity", "Reset Security"); btnSecurity.SubItems.Add(btnResetSecurity); @@ -2254,7 +2232,6 @@ namespace VEPROMS // C2025-031 added tool tip messages this.superTooltip1.SetSuperTooltip(btnManageSecurity, new SuperTooltipInfo("Manage Security", "", "Add, Modify, and Delete PROMS User Access", null, null, eTooltipColor.Gray)); // remove commented out line below when User Control of Formats code is deleted - //this.superTooltip1.SetSuperTooltip(btnUserControlOfFormats, new SuperTooltipInfo("User Control Of Formats", null, null, null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnResetSecurity, new SuperTooltipInfo("Reset Security", "", "WARNING this will \nREMOVE ALL PROMS USERS and Reset to the\nOriginal Volian Defaults", null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnAdministrativeTools, new SuperTooltipInfo("Administrative Tools", "", "Open the PROMS Adminstration Tools Window", null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnUpdateFormats, new SuperTooltipInfo("Update Formats", "", "Install New Formats \n or Re-Install Formats", null, null, eTooltipColor.Gray)); @@ -2295,9 +2272,6 @@ namespace VEPROMS bool isVisible = MyUserInfo.IsAdministrator(); - btnUserControlOfFormats.Visible = isVisible; - btnUserControlOfFormatsExport.Visible = isVisible; - btnUserControlOfFormatsImport.Visible = isVisible; btnManageSecurity.Visible = isVisible; btnUpdateFormats.Visible = isVisible; btnResetSecurity.Visible = isVisible; @@ -3135,32 +3109,6 @@ namespace VEPROMS } } - void btnUserControlOfFormats_Click(object sender, EventArgs e) - { - frmUCF frmucf = new frmUCF(); - DialogResult dr = frmucf.ShowDialog(this); - } - - void btnUserControlOfFormatsExport_Click(object sender, EventArgs e) - { - DocVersionInfo dvi = null; - - dlgExportImport dlg = new dlgExportImport("Export Formats", dvi, this, (E_UCFImportOptions)0); - dlg.MyNewProcedure = null; - dlg.ExternalTransitionItem = null; - dlg.ShowDialog(this); - } - - void btnUserControlOfFormatsImport_Click(object sender, EventArgs e) - { - DocVersionInfo dvi = null; - - dlgExportImport dlg = new dlgExportImport("Import Formats", dvi, this, (E_UCFImportOptions)0); - dlg.MyNewProcedure = null; - dlg.ExternalTransitionItem = null; - dlg.ShowDialog(this); - } - void btnManageSecurity_Click(object sender, EventArgs e) { dlgManageSecurity dlg = new dlgManageSecurity(); -- 2.49.1 From 47a4c62e9272d76b379cdd5483dbc62dd4aca490 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 21 Aug 2025 08:30:44 -0400 Subject: [PATCH 04/25] C2025-022-Remove-UCF-2 --- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 28fbb8df..6710d968 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -2199,17 +2199,6 @@ namespace VEPROMS InitializeSecurity(); UpdateUser(); - //btnSecurity = new ButtonItem("btnSecurity", "Security"); // C2019-002: move security & format items into submenus - //btnFormats = new ButtonItem("btnFormats", "Formats"); - //btnAdmin.SubItems.Add(btnSecurity); - //btnAdmin.SubItems.Add(btnFormats); - //btnFormats.SubItems.Add(btnUpdateFormats); - - //btnManageSecurity = new ButtonItem("btnManageSecurity", "Manage Security"); - //btnSecurity.SubItems.Add(btnManageSecurity); - //btnManageSecurity.Click += new EventHandler(btnManageSecurity_Click); - - btnSecurity = new ButtonItem("btnSecurity", "Security"); // C2019-002: move security & format items into submenus btnFormats = new ButtonItem("btnFormats", "Formats"); btnAdmin.SubItems.Add(btnSecurity); -- 2.49.1 From 8f154ebf482b09438877c24c740743a6c7c5cfc1 Mon Sep 17 00:00:00 2001 From: mschill Date: Thu, 21 Aug 2025 14:25:53 -0400 Subject: [PATCH 05/25] C2025-001 Replace 3rd party Ionic.zip component --- .../VEPROMS User Interface/VEPROMS_UI.csproj | 6 +- .../VEPROMS User Interface/dlgExportImport.cs | 427 +++++++++--------- 2 files changed, 223 insertions(+), 210 deletions(-) diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index 593c1005..e6a0cace 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -111,10 +111,6 @@ False ..\..\..\..\3rdPartyLibraries\DotNetBar\DotNetBar4.6Build\DevComponents.DotNetBar2.dll - - False - ..\..\..\..\3rdPartyLibraries\Ionic\Ionic.Zip.dll - ..\..\..\..\3rdPartyLibraries\RtfConverter\bin\Debug\Itenso.Rtf.Interpreter.dll @@ -133,6 +129,8 @@ + + diff --git a/PROMS/VEPROMS User Interface/dlgExportImport.cs b/PROMS/VEPROMS User Interface/dlgExportImport.cs index df2e4acb..da772d9d 100644 --- a/PROMS/VEPROMS User Interface/dlgExportImport.cs +++ b/PROMS/VEPROMS User Interface/dlgExportImport.cs @@ -7,7 +7,7 @@ using Volian.Controls.Library; using Volian.Base.Library; using System.Xml; using System.IO; -using Ionic.Zip; +using System.IO.Compression; using System.Text.RegularExpressions; using JR.Utils.GUI.Forms; using System.Linq; @@ -188,14 +188,13 @@ namespace VEPROMS if (MyFolder != null) { sfd.FileName = string.Format("{0}-{1}.expx", Database.ActiveDatabase, MyFolder.Name); - if (sfd.ShowDialog(this) == DialogResult.OK && sfd.FileName != string.Empty) - { - txtExport.Text = sfd.FileName; - if (File.Exists(txtExport.Text)) - File.Delete(txtExport.Text); - MyExpxZipFile = new ZipFile(txtExport.Text, Encoding.UTF8); - MyExpxZipFile.Save(); - } + if (sfd.ShowDialog(this) == DialogResult.OK && sfd.FileName != string.Empty) + { + txtExport.Text = sfd.FileName; + if (File.Exists(txtExport.Text)) + File.Delete(txtExport.Text); + MyExpZipFileName = txtExport.Text; + } } else if (MyProcedure != null) { @@ -211,8 +210,8 @@ namespace VEPROMS else lblExportStatus.Text = "Awaiting Export File Name:"; } - private ZipFile MyExpxZipFile = null; - private ZipFile MyImpxZipFile = null; + private string MyExpZipFileName = null; + private string MyImpZipFileName = null; private DateTime MyStart; private bool successfullExport = true; @@ -892,84 +891,94 @@ namespace VEPROMS } private bool LoadImportDataDocument() { - floatFoldout = new Dictionary(); - ZipEntry ze = MyExpxZipFile[0]; - string fn = PEIPath + @"\" + ze.FileName; - ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); - XmlDocument xd = new XmlDocument(); - xd.Load(fn); - bool didImp = LoadFormats(xd, "folder/formats/format"); - if (!didImp) + using (FileStream zipToOpen = new FileStream(MyExpZipFileName, FileMode.OpenOrCreate)) { - this.Cursor = Cursors.Default; - this.btnImport.Enabled = true; // allow user to select a different export file to import - this.btnDoImport.Enabled = true; // allow user to change mind and perform the import - return false; // Return False to Indicate that the Import did not succeed - } - string name = xd.DocumentElement.Attributes.GetNamedItem("name").InnerText; - Folder ff = AddFolder(Folder.Get(MyFolder.FolderID), xd, name); - if (ff == null) - { - // C2020-032: Import Procedure set when existing name exists, allow user to import with 'Copy (#) of'. - // This is similar functionality to the import of a procedure without the overwrite part. - string msg = string.Format("The procedure set you are importing, {0}, already exists.\n\nDo you want to import {0} as a COPY of the existing set?\n\nThis will prefix the name with \"Copy (#) of\"", name); - DialogResult dr = MessageBox.Show(this, msg, "Create Copy Of Existing Procedure Set", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop); - if (dr == DialogResult.OK) + using (ZipArchive MyExpxZipFile = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) { - string number = ""; - int max = -1; - // get maximum number of existing copies. - foreach (FolderInfo fi in MyFolder.ChildFolders) + floatFoldout = new Dictionary(); + ZipArchiveEntry ze = MyExpxZipFile.Entries[0]; + if (!Directory.Exists(Path.Combine(PEIPath, "folder"))) + Directory.CreateDirectory(Path.Combine(PEIPath, "folder")); + string fn = Path.Combine(PEIPath, "folder", ze.Name); + ze.ExtractToFile(fn, true); + XmlDocument xd = new XmlDocument(); + xd.Load(fn); + bool didImp = LoadFormats(xd, "folder/formats/format"); + if (!didImp) { - int indx = fi.Name.IndexOf("Copy ("); - if (indx > -1) - { - int indxend = fi.Name.IndexOf(")", indx); - if (indxend > indx) - { - string tmp = fi.Name.Substring(indx + 6, indxend - (indx + 6)); - int ii = Convert.ToInt32(tmp); - if (ii > max) max = ii; - } - } + this.Cursor = Cursors.Default; + this.btnImport.Enabled = true; // allow user to select a different export file to import + this.btnDoImport.Enabled = true; // allow user to change mind and perform the import + return false; // Return False to Indicate that the Import did not succeed } - number = max > -1 ? (max + 1).ToString() : "1"; - name = string.Format("Copy ({0}) of {1}", number, name); + string name = xd.DocumentElement.Attributes.GetNamedItem("name").InnerText; + Folder ff = AddFolder(Folder.Get(MyFolder.FolderID), xd, name); + if (ff == null) + { + // C2020-032: Import Procedure set when existing name exists, allow user to import with 'Copy (#) of'. + // This is similar functionality to the import of a procedure without the overwrite part. + string msg = string.Format("The procedure set you are importing, {0}, already exists.\n\nDo you want to import {0} as a COPY of the existing set?\n\nThis will prefix the name with \"Copy (#) of\"", name); + DialogResult dr = MessageBox.Show(this, msg, "Create Copy Of Existing Procedure Set", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop); + if (dr == DialogResult.OK) + { + string number = ""; + int max = -1; + // get maximum number of existing copies. + foreach (FolderInfo fi in MyFolder.ChildFolders) + { + int indx = fi.Name.IndexOf("Copy ("); + if (indx > -1) + { + int indxend = fi.Name.IndexOf(")", indx); + if (indxend > indx) + { + string tmp = fi.Name.Substring(indx + 6, indxend - (indx + 6)); + int ii = Convert.ToInt32(tmp); + if (ii > max) max = ii; + } + } + } + number = max > -1 ? (max + 1).ToString() : "1"; + name = string.Format("Copy ({0}) of {1}", number, name); - ff = AddFolder(Folder.Get(MyFolder.FolderID), xd, name); + ff = AddFolder(Folder.Get(MyFolder.FolderID), xd, name); + } + else + return false; + } + _MyNewFolder = FolderInfo.Get(ff.FolderID); + AddAnnotationTypes(xd); + DocVersionInfo dvi = AddDocVersion(ff, xd); + MyDocVersion = dvi; + xd = null; + lblImportStatus.Text = "Creating Procedures..."; + Application.DoEvents(); + ProcedureInfo pi = null; + pbImportProcedure.Value = 0; + pbImportProcedure.Maximum = MyExpxZipFile.Entries.Count - 1; + if (!Directory.Exists(Path.Combine(PEIPath, "procedures"))) + Directory.CreateDirectory(Path.Combine(PEIPath, "procedures")); + for (int i = 1; i < MyExpxZipFile.Entries.Count; i++) + { + ze = MyExpxZipFile.Entries[i]; + fn = Path.Combine(PEIPath, "procedures", ze.Name); + ze.ExtractToFile(fn, true); + xd = new XmlDocument(); + xd.Load(fn); + pi = AddProcedure(xd.DocumentElement, dvi, pi); + GC.Collect(); // need to cleanup memory after importing each procedure due to use of Regular Expressions in processing RO and Transition links + } + DirectoryInfo di = new DirectoryInfo(PEIPath); + DirectoryInfo[] dis = di.GetDirectories(); + for (int d = 0; d < dis.Length; d++) + dis[d].Delete(true); + lblImportStatus.Text = "Updating Transitions"; + AddTransitions(); + FixFloatingFoldouts(); + SaveTransitionAndItemContentIDs(); + return true; } - else - return false; } - _MyNewFolder = FolderInfo.Get(ff.FolderID); - AddAnnotationTypes(xd); - DocVersionInfo dvi = AddDocVersion(ff, xd); - MyDocVersion = dvi; - xd = null; - lblImportStatus.Text = "Creating Procedures..."; - Application.DoEvents(); - ProcedureInfo pi = null; - pbImportProcedure.Value = 0; - pbImportProcedure.Maximum = MyExpxZipFile.Entries.Count - 1; - for (int i = 1; i < MyExpxZipFile.Entries.Count; i++) - { - ze = MyExpxZipFile[i]; - fn = PEIPath + @"\" + ze.FileName; - ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); - xd = new XmlDocument(); - xd.Load(fn); - pi = AddProcedure(xd.DocumentElement, dvi, pi); - GC.Collect(); // need to cleanup memory after importing each procedure due to use of Regular Expressions in processing RO and Transition links - } - DirectoryInfo di = new DirectoryInfo(PEIPath); - DirectoryInfo[] dis = di.GetDirectories(); - for (int d = 0; d < dis.Length; d++) - dis[d].Delete(true); - lblImportStatus.Text = "Updating Transitions"; - AddTransitions(); - FixFloatingFoldouts(); - SaveTransitionAndItemContentIDs(); - return true; } private void FixSectionStart(ProcedureInfo pi) { @@ -1254,85 +1263,85 @@ namespace VEPROMS // the xml files are then added (or replaced) in the .impx file. private void SaveTransitionAndItemContentIDs() { - XmlDocument xd = new XmlDocument(); - XmlElement xe = xd.CreateElement("items"); - xd.AppendChild(xe); - string fn = PEIPath + @"\items.xml"; - foreach (int key in Old2NewItem.Keys) + using (FileStream zipToOpen = new FileStream(MyImpZipFileName, FileMode.OpenOrCreate)) { - xe = xd.CreateElement("item"); - xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString())); - xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewItem[key].ToString())); - xd.DocumentElement.AppendChild(xe); - } - xd.Save(fn); - ZipEntry ze = MyImpxZipFile["items.xml"]; - MyImpxZipFile.RemoveEntry(ze); - MyImpxZipFile.Save(); - MyImpxZipFile.AddFile(fn, ""); - MyImpxZipFile.Save(); - File.Delete(fn); - xd = new XmlDocument(); - xe = xd.CreateElement("contents"); - xd.AppendChild(xe); - fn = PEIPath + @"\contents.xml"; - foreach (int key in Old2NewContent.Keys) - { - xe = xd.CreateElement("content"); - xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString())); - xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewContent[key].ToString())); - xd.DocumentElement.AppendChild(xe); - } - xd.Save(fn); - ze = MyImpxZipFile["contents.xml"]; - MyImpxZipFile.RemoveEntry(ze); - MyImpxZipFile.Save(); - MyImpxZipFile.AddFile(fn, ""); - MyImpxZipFile.Save(); - File.Delete(fn); - xd = new XmlDocument(); - xe = xd.CreateElement("transitions"); - xd.AppendChild(xe); - fn = PEIPath + @"\transitions.xml"; - if (PendingTransitions != null && PendingTransitions.DocumentElement.HasChildNodes) - { - foreach (XmlNode nd in PendingTransitions.DocumentElement.ChildNodes) + using (ZipArchive MyImpxZipFile = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) { - if (nd.InnerText == "") - xd.DocumentElement.AppendChild(xd.ImportNode(nd, true)); + XmlDocument xd = new XmlDocument(); + XmlElement xe = xd.CreateElement("items"); + xd.AppendChild(xe); + string fn = PEIPath + @"\items.xml"; + foreach (int key in Old2NewItem.Keys) + { + xe = xd.CreateElement("item"); + xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString())); + xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewItem[key].ToString())); + xd.DocumentElement.AppendChild(xe); + } + xd.Save(fn); + ZipArchiveEntry ze = MyImpxZipFile.GetEntry("items.xml"); + ze.Delete(); + _ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn)); + File.Delete(fn); + xd = new XmlDocument(); + xe = xd.CreateElement("contents"); + xd.AppendChild(xe); + fn = PEIPath + @"\contents.xml"; + foreach (int key in Old2NewContent.Keys) + { + xe = xd.CreateElement("content"); + xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString())); + xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewContent[key].ToString())); + xd.DocumentElement.AppendChild(xe); + } + xd.Save(fn); + ze = MyImpxZipFile.GetEntry("contents.xml"); + ze.Delete(); + _ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn)); + File.Delete(fn); + xd = new XmlDocument(); + xe = xd.CreateElement("transitions"); + xd.AppendChild(xe); + fn = PEIPath + @"\transitions.xml"; + if (PendingTransitions != null && PendingTransitions.DocumentElement.HasChildNodes) + { + foreach (XmlNode nd in PendingTransitions.DocumentElement.ChildNodes) + { + if (nd.InnerText == "") + xd.DocumentElement.AppendChild(xd.ImportNode(nd, true)); + } + } + xd.Save(fn); + ze = MyImpxZipFile.GetEntry("transitions.xml"); + ze.Delete(); + _ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn)); + File.Delete(fn); } } - xd.Save(fn); - ze = MyImpxZipFile["transitions.xml"]; - MyImpxZipFile.RemoveEntry(ze); - MyImpxZipFile.Save(); - MyImpxZipFile.AddFile(fn, ""); - MyImpxZipFile.Save(); - File.Delete(fn); } // This is called only when we are importing an entire folder and there is a .impx file (a zip file) // the name of the .impx file is based on the folder name containing the export file being imported // This will read in the saved ItemIDs (old and new), ContentIDs (old andnew), library document IDs (old and new), and pending transitions - private void ReadTransitionAndItemContentIDs() + private void ReadTransitionAndItemContentIDs(ZipArchive MyImpxZipFile) { - ZipEntry ze = MyImpxZipFile["items.xml"]; - ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); + ZipArchiveEntry ze = MyImpxZipFile.GetEntry("items.xml"); string fn = PEIPath + @"\items.xml"; + ze.ExtractToFile(fn, true); XmlDocument xd = new XmlDocument(); xd.Load(fn); // B2016-176, B2016-197 Transitions were no always properly resolved - don't load in the old item ids File.Delete(fn); - ze = MyImpxZipFile["contents.xml"]; - ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); + ze = MyImpxZipFile.GetEntry("contents.xml"); fn = PEIPath + @"\contents.xml"; + ze.ExtractToFile(fn, true); xd = new XmlDocument(); xd.Load(fn); // B2016-176, B2016-197 Transitions were no always properly resolved - don't load in the old content ids File.Delete(fn); - ze = MyImpxZipFile["libdocs.xml"]; - ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); + ze = MyImpxZipFile.GetEntry("libdocs.xml"); fn = PEIPath + @"\libdocs.xml"; + ze.ExtractToFile(fn, true); xd = new XmlDocument(); xd.Load(fn); XmlNodeList nl = xd.SelectNodes("//libdoc"); @@ -1344,9 +1353,9 @@ namespace VEPROMS Old2NewLibDoc.Add(oldid, newid); } File.Delete(fn); - ze = MyImpxZipFile["transitions.xml"]; - ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); + ze = MyImpxZipFile.GetEntry("transitions.xml"); fn = PEIPath + @"\transitions.xml"; + ze.ExtractToFile(fn, true); PendingTransitions.Load(fn); File.Delete(fn); } @@ -1374,53 +1383,53 @@ namespace VEPROMS else dn = fi.Name.Substring(0, fi.Name.IndexOf(".")); txtImport.Text = ofd.FileName; - ReadOptions ro = new ReadOptions(); - ro.Encoding = Encoding.UTF8; - MyExpxZipFile = ZipFile.Read(txtImport.Text, ro); - string fn = string.Format(@"{0}\{1}.impx", PEIPath, dn); - if (File.Exists(fn)) + MyExpZipFileName = txtImport.Text; + string fn = string.Format(@"{0}\{1}.impx", PEIPath, dn); + MyImpZipFileName = fn; + if (File.Exists(fn)) { - MyImpxZipFile = ZipFile.Read(fn, ro); - ReadTransitionAndItemContentIDs(); + using (ZipArchive MyImpxZipFile = ZipFile.OpenRead(fn)) + ReadTransitionAndItemContentIDs(MyImpxZipFile); } else { - MyImpxZipFile = new ZipFile(fn, Encoding.UTF8); - //transitions - XmlElement xe = PendingTransitions.CreateElement("transitions"); - PendingTransitions.AppendChild(xe); - fn = PEIPath + @"\transitions.xml"; - PendingTransitions.Save(fn); - MyImpxZipFile.AddFile(fn, ""); - MyImpxZipFile.Save(); - File.Delete(fn); - //itemids - XmlDocument xd = new XmlDocument(); - xe = xd.CreateElement("items"); - xd.AppendChild(xe); - fn = PEIPath + @"\items.xml"; - xd.Save(fn); - MyImpxZipFile.AddFile(fn, ""); - MyImpxZipFile.Save(); - File.Delete(fn); - //contentids - xd = new XmlDocument(); - xe = xd.CreateElement("contents"); - xd.AppendChild(xe); - fn = PEIPath + @"\contents.xml"; - xd.Save(fn); - MyImpxZipFile.AddFile(fn, ""); - MyImpxZipFile.Save(); - File.Delete(fn); - //libdocids - xd = new XmlDocument(); - xe = xd.CreateElement("libdocs"); - xd.AppendChild(xe); - fn = PEIPath + @"\libdocs.xml"; - xd.Save(fn); - MyImpxZipFile.AddFile(fn, ""); - MyImpxZipFile.Save(); - File.Delete(fn); + using (FileStream zipToOpen = new FileStream(fn, FileMode.OpenOrCreate)) + { + using (ZipArchive MyImpxZipFile = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) + { + //transitions + XmlElement xe = PendingTransitions.CreateElement("transitions"); + PendingTransitions.AppendChild(xe); + fn = PEIPath + @"\transitions.xml"; + PendingTransitions.Save(fn); + _ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn)); + File.Delete(fn); + //itemids + XmlDocument xd = new XmlDocument(); + xe = xd.CreateElement("items"); + xd.AppendChild(xe); + fn = PEIPath + @"\items.xml"; + xd.Save(fn); + _ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn)); + File.Delete(fn); + //contentids + xd = new XmlDocument(); + xe = xd.CreateElement("contents"); + xd.AppendChild(xe); + fn = PEIPath + @"\contents.xml"; + xd.Save(fn); + _ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn)); + File.Delete(fn); + //libdocids + xd = new XmlDocument(); + xe = xd.CreateElement("libdocs"); + xd.AppendChild(xe); + fn = PEIPath + @"\libdocs.xml"; + xd.Save(fn); + _ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn)); + File.Delete(fn); + } + } } } if (MyDocVersion != null) @@ -1595,27 +1604,31 @@ namespace VEPROMS ExportAssociation(xe, ai, "association"); string fn = PEIPath + @"\folder.xml"; xn.OwnerDocument.Save(fn); - MyExpxZipFile.AddFile(fn, "folder"); - MyExpxZipFile.Save(); - File.Delete(fn); - //here - lblExportStatus.Text = "Exporting Procedures..."; - Application.DoEvents(); - if (dvi.Procedures.Count > 0) + using (FileStream zipToOpen = new FileStream(MyExpZipFileName, FileMode.OpenOrCreate)) { - pbExportProcedure.Value = 0; - pbExportProcedure.Maximum = dvi.Procedures.Count; - lblExportProcedure.Text = pbExportProcedure.Maximum.ToString() + " Procedures"; - foreach (ItemInfo ii in dvi.Procedures) - { - XmlDocument xd = new XmlDocument(); - ExportItem(xd, ii, "procedure"); - fn = string.Format(@"{0}\proc{1}.xml", PEIPath, pbExportProcedure.Value.ToString().PadLeft(4, '0')); - xd.Save(fn); - MyExpxZipFile.AddFile(fn, "procedures"); - MyExpxZipFile.Save(); + using (ZipArchive MyExpxZipFile = new ZipArchive(zipToOpen, ZipArchiveMode.Update)) + { + _ = MyExpxZipFile.CreateEntryFromFile(fn, $"folder/{Path.GetFileName(fn)}"); File.Delete(fn); - xd = null; + //here + lblExportStatus.Text = "Exporting Procedures..."; + Application.DoEvents(); + if (dvi.Procedures.Count > 0) + { + pbExportProcedure.Value = 0; + pbExportProcedure.Maximum = dvi.Procedures.Count; + lblExportProcedure.Text = pbExportProcedure.Maximum.ToString() + " Procedures"; + foreach (ItemInfo ii in dvi.Procedures) + { + XmlDocument xd = new XmlDocument(); + ExportItem(xd, ii, "procedure"); + fn = string.Format(@"{0}\proc{1}.xml", PEIPath, pbExportProcedure.Value.ToString().PadLeft(4, '0')); + xd.Save(fn); + _ = MyExpxZipFile.CreateEntryFromFile(fn, $"procedures/{Path.GetFileName(fn)}"); + File.Delete(fn); + xd = null; + } + } } } } @@ -1839,12 +1852,14 @@ namespace VEPROMS //and handled/overridden in dlgExportEP.cs } - protected virtual void SetROLocation(ref XmlElement xindivid, ROFSTLookup.rochild roc, RODbInfo rodb, bool isMulti) + protected virtual void SetEPEnhancedDocLinks(ref XmlElement xe, ItemInfo ii) { //do nothing - this will be for Electronic procedures only //and handled/overridden in dlgExportEP.cs } - protected virtual void SetEPEnhancedDocLinks(ref XmlElement xe, ItemInfo ii) + + + protected virtual void SetROLocation(ref XmlElement xindivid, ROFSTLookup.rochild roc, RODbInfo rodb, bool isMulti) { //do nothing - this will be for Electronic procedures only //and handled/overridden in dlgExportEP.cs -- 2.49.1 From 3ea4307716f8c9e1df5b0ef6fd6a255dd514f001 Mon Sep 17 00:00:00 2001 From: mschill Date: Tue, 26 Aug 2025 06:57:57 -0400 Subject: [PATCH 06/25] C2025-051 Add a "General Tools" option to the V->Proms Menu. --- .../Properties/Resources.Designer.cs | 10 + .../Properties/Resources.resx | 1562 ++++++++--------- .../Resources/toolbox.png | Bin 0 -> 3353 bytes .../VEPROMS User Interface/VEPROMS_UI.csproj | 10 + .../frmBatchRefresh.Designer.cs | 256 +-- .../VEPROMS User Interface/frmBatchRefresh.cs | 333 +--- .../frmBatchRefresh.resx | 315 ++-- PROMS/VEPROMS User Interface/frmGenTools.cs | 436 +++++ .../frmGenTools.designer.cs | 853 +++++++++ PROMS/VEPROMS User Interface/frmGenTools.resx | 192 ++ PROMS/VEPROMS User Interface/frmVEPROMS.cs | 19 + 11 files changed, 2440 insertions(+), 1546 deletions(-) create mode 100644 PROMS/VEPROMS User Interface/Resources/toolbox.png create mode 100644 PROMS/VEPROMS User Interface/frmGenTools.cs create mode 100644 PROMS/VEPROMS User Interface/frmGenTools.designer.cs create mode 100644 PROMS/VEPROMS User Interface/frmGenTools.resx diff --git a/PROMS/VEPROMS User Interface/Properties/Resources.Designer.cs b/PROMS/VEPROMS User Interface/Properties/Resources.Designer.cs index 4b979a37..527927c9 100644 --- a/PROMS/VEPROMS User Interface/Properties/Resources.Designer.cs +++ b/PROMS/VEPROMS User Interface/Properties/Resources.Designer.cs @@ -250,6 +250,16 @@ namespace VEPROMS.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap toolbox { + get { + object obj = ResourceManager.GetObject("toolbox", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PROMS/VEPROMS User Interface/Properties/Resources.resx b/PROMS/VEPROMS User Interface/Properties/Resources.resx index 79126e6a..403a8ef4 100644 --- a/PROMS/VEPROMS User Interface/Properties/Resources.resx +++ b/PROMS/VEPROMS User Interface/Properties/Resources.resx @@ -112,403 +112,399 @@ 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 - + - 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 + SUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEgAA - CxIB0t1+/AAAAhxJREFUOE+lkutLk2EYxutP6Wt/QYZDp/M03cHDZofZ1DUFXZZuAw9g5dIOloKuyKzc - LM1lZQyzk5aKIaFghxGV5ZeKoD40orLyw689j7aX6aygB64vD+/1u+7ree+NwIb/OgKwWn0XX+P3v+RM - 13O8nSGOtz7C0zRLQ/00TucUjopxdlmGIrZIeDyAMN8bg86O7+Kj6Pm6uMThY89wuXopNAfWAv6U7HY/ - oHrvJHZbEJc7iNk0sBawXvK3xZ+c61mgpsaH0XAeR9UkebkXFMDfOlc57lNiHcZaPCABJfY7GPRnFcB6 - yZ+//KDY9hC1ej+mggH27JtCr+vGbAmizfIqgO7Ia9++tURL88fogwnzwrswxp0TWIr6yTX2UFo2Srb2 - FLr8QdLTWhWAtyNEMLiIy/lCAqT5bZiZ0HsSDDdkZ5FcWDRMZkY7mux+UtQeBSD+8+XBME73EzmycccE - WyLGTakBNmdekZ1Fsr7gKprUI6g0PlSJ9QrgkGcWf+8HTne94UT7PE3NIWobZnBUT1FaPio7LydfQp18 - kK0JLqnoIokNE+a29lck64qjSs/fjZDovJzsjyb/XkC5iWI921aSBcBiq6Dv2gjTc4/JNJXLzurkAzHJ - MYDKynE8LU/Jsd4lMSOP2sYW5kLzDI3cRJWStdK5To68WvKizD5m377t+qeIMJkCGI0+crQnSdMcJSmp - MW5yzATxyP969wsj3Z5bZZr4EQAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsSAAALEgHS3X78AAACDUlE + QVQ4T6WR609ScQCG/Vf62l+QTSYo3lAuXkAtDJTQTclSYDPdrCTpYsmm1CIrwdIgKx1Tu2mpw7mmm11Y + syy/VGurD7FWUfnhaedonDHCL57tPR/Ozvs8v/ecDCBjJ0l5IGT4xjsCgTdc9q3i7Y9yrucZrq5lOtoX + sdsj2BpnOWAcIy1AKD+egf6+X8JLietHfINTZ1/hcAxRaQilArYzO50LtByex2oJ43CGMeiDqYB05p/x + P1wdXKe11Y9Oew1b8zxlpdclwHZmYXOz7Qm1pglM5qAIqLU+RKu5IgHSmb99/43Z8hSF4hj6iiCHjkTQ + qAcwGMOoirwSYMC3yoP7G7i7vySV1z/G0O2fw1gzQqlukLr6aYpVF1GXj5Kf1yMBvH1RwuE4Dvtrqfwh + xlL0E5naSXGzYK6smaCwwIOyeIQchUsCCJtvjcawO1+IR9btm2OPdpJduSF2F94WNwtmTcUdlLmnkSn9 + yLLaJcBJ1zKBoc9c8r3nvGeNru4obR1L2Foi1DVMi5s3zTdRyE+wN9MhJgEQvrZQ7vW8Ra42J5JfflCM + sHnTHEiY/0W8Cb+qd8ssFI2WRobvTrG48pxCfYO4WSE/nmROAjQ1zeJyv6TE9IisgjLaOt2sRNcYm7qH + LKdoa/PRpGISoN46Y62uGv9aXTWOXh9Cp/NTorpAnvIM2dmd/zUnAXaSv09Hyy0dwKNkAAAAAElFTkSu + QmCC - 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 - fvLwiCIAAAAASUVORK5CYII= + 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 - m/1l/3r2Ey4iunsWz150AAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsSAAALEgHS3X78AAACQklE + QVQ4T6WS20vTYRjH/XO6iJC8qOwAKRGSUpQHmuJ0pSZp5TTFMslTuzDDjqs0s3lMR0huzmNjmqXzkG3z + GBKJQbbUmHmoud8n3l8wmYY3Xnyfi4f3+3m+z8PrB/jtRFsaY0OWhC9TdqbsVj72d9Hb8QqTvpzGiuLw + zW+3ABwD5qTp0UFW5ifxuEaRFvuRnB3Mj1fxvPQaZcUZx7cFTIz0sux0MDPayu3cZIoyleSro5ntK2Ru + IJfCdAXbAoZ7jEg/reSlKchMCN0nelfPhQRUP7mFNJlNdtLJ7QHdhipwtpIRL5Ju9Gsea5DG1aQpg/8P + 6DHo/M1Nz2h/+ZCW2lKadSU06YrRl2loKC+iTptP9aOb6O7doLL0upC/D6CzUcvSTBssWGRJP8x4vney + /q0N91cjnrl2b3/W1sD9glRvErmY6u7+M4+n47Gn4h5OZK0vluXuCFbfKWAiA4/jMu4PF/j0Opyci6d9 + Ac26OzBvYd2Wwp+h86y+j6GvJgRl1G7eNKi85jWrkgl9KFmJYb4Asa/k7OL3gIqV3rMsmU8RG7ELVdxB + VHGHvOblnkjGaoNRx20cWS76co2878rbKFxdYSy2BMuwzWZXZyj2ykAuxQT5Auq1BbhnDbg6TrBgOMov + yxnqH4QTH3uAMs0xr3nRGMTI072kKI74Amq0ecwM6rBV7Mfx4jCf2+OZNsXIBxM7i9hisjAbi/aQHBm4 + BRBQkpOEJkspq1AdTd6VKPna4mBiZxFbTBbm5MhA33+wE/0FWYznTcEG5+wAAAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAASdAAA - EnQB3mYfeAAAC/hJREFUWEeFlwlUU1cax6/nTDvTOXM6Z9pObTva0dpNxa2bdavWuiGLKKsGwhoSIJAE - JFT2BAIoO7IICMgiIBVCWMIWthAWUauyigtY2UUUhEYDyH9u0anTY3vmnfPLffe+d9793e+7976XRU80 - DyY6K4Je/ctravLK35cRgnlCf8iiRYvIjGaG/DzaS5au3yB6c+mK46+8svj5dXrLbw7Q2lPKEnp90e9c - e4WQRe8uPPel42KxcKb/WiyAcspZSvZzcmh5HhODMvwQZdQx1p+cOTd7IXNO0/g7qGhbXSae9mcCozsp - 5AUj9PweBXRslKfzv4F0VrE1mJdjZjITc1PBmJs+scDsdBjmHoUDGiUmRwrR0xSEzuY4dC0Q+5xn9e6W - WFyrD8PVhtN4MKziPRyuJw+HqsnDwQoyNVJOem9eIV0d/c8kfiuwiFxXemnwKB7zIyLMjwZQ8RfMjwZi - blSC2YnzmJm6gpnp5uc00lL1P/UWzD25jAv5thDb/pNz3GExCeJvIUHHGEToYEgYDAk5YhpOoiOznkn8 - FypDOhtcNXgYjvkBIeb7+Zi76Yy5W04UR3r+C86Y7XHGzA0eZnr4L3PDhbbxMHvLHcq0AwjiLDF/OFpN - zuXkEzbbmRgYupLDFhHExSGJ7NxpSfbusSBVFSoyOTG1IEK6VE4ajARgpksAdbcYMyPJmL2XjLkxykJ5 - Gk/vJ2F+PBEYT6EkY57W5+4lYnY0ETOjCQvXcT8Z93uioZmWVwIj3KLCMuLkwCGmZjzCYEYQZyqgrc0i - X288SA7qO5Jj7ifI2L1xGgGlnQb93lBf4EI9lE+lOhZ4/KQJs3MXadmMsfuV6B8sxq1eKXr7CnBvrAIz - s830vouUaxh/oMDkpAoTo3KMDRfRtn6UFFX02lrbLj1kyCPmli8Etmw2JEyGkNjbeBKhIISQ7nqmBrdd - MdHqCDyuRrlMiOJCb5zL8URShBOK8oNxsekHVMuzkZYRhYyUSFSVpqKxLh6qRn8US72QGHcM/n4iSHyO - IibUDYXnY2k9Aro6Lm9/vdmZMK3Df43ALwIWR9wJl+NHHFk+hLQpGJr5LjamLwmgqEpDQnwYKsqL0Xv7 - Ovp6uuDsaI+MtBRUlZdDVliIyooy1NZUoqG+CtXVRTgu8UFkaDSCg7MQEpSO/LxiRISFwVCfCTvb+Bv7 - 9vt0WLNiOti2cR3bt5vv+WzD/uVHTPjLeY6+y10c/KlA1SHN1CUbTP3oh9SUUEildN2fl+Lixct4NDGN - 0qJyOLCdcDI6FjKZDGXyCjQ2taC2th5JiSm0wwLEx5yGRBSP9AwFpAXluHrlGuLjUlAk7UBl5R3k5V1F - wskqiPwS4SoIA58XDYZZAOwsfZJJe7WOZkhlQ2d5LE6d9IZcXor29k6oVE04/0Mxwuno9u7eh+SkJChV - dbh6tZ1GQInQsAicTkrBje5bqFXUwMGWRdvioaDnfb23UFWloOmpR3/vzxi+q8HoAPDTnXlcvjKNlDPt - OGiQiO2bmSBdin2a2zUWeHI9EI2lLNQoajE3C/RcH0bCaRUMjexw8IAx6hTV6Om+iUutFxEWGo4GJY1C - ZRWdcMCDsXE0NjbTtDSh7WoHxsce0IHI0XGtE3Ma+qzOQZRKb0IS1AsHzmXwOJ30ubnYqLVbTXoqdmna - 5YfwuD8Ej/v8Ic9xR8m5QIT4WuN7Z2NUZDERG8hAiEgEAc8ViYmJNDotGLg7jrzcAgwODqHtWhvy86UL - tLb+iJrqJgSIY2mahhAddQUu3AbYWleDbaeCI6sBLuwaGB5KxcY1u9TkytkvNB0yPTzp9QXufA91XzAe - XA/DeHcMpm7FQNMbAq7FZ6irbaITNBX2LBf8eLkbD+4/ph3fQPqZHGRkZqO5uQXl5WXw9hbTdOXRNN1A - oWwIR93q4OLUCmeHWrBtSiBwLoMbvwRGhqexce13anI1eb3mtkwfs93ueNrnhvk+F6CXB9yi3OGhTeGH - 7dvWQRiUDCs7Lxgc4CAyPA1Tj55gaGASw4PTyM2WQamsR1NTA5JPZeBy6x2aon4UFw1BeLQcbNtC+AuL - 6GqpRlLSBYRHKWFmloqv1nyrJqroFZoHdQzMd/GB6w7P6KZ7QrcTlXBEu4wHCxcP6MbewxusLhzkZCEy - 6jweTaoxMPAQt1o6EOYZhBSajuPRp8C3ohEqaUVDwwCKiwfg4VGIIIkSp9Poyoi5gJhwFSJC68FkZOBL - LSpQ4vcXPKrRA7pox+02FDugjZZtVlTCEnfkNnDx8YJZ9gxe5/din10momNkmJ58gpHRx1BERCJw62rE - 6a3E99+8B8tlb0AZlQxV0whKS+/Cy0tG94h6BAaU0XTkQSySI+x4NSzMc2gEdqpJtvufO9OPfYgsn5XI - 9FmFDO9VyPPTgjRgDaSBq5DgtgZWAlcwcqfxV0EPdF3y4S1Kx8+PZjFybxZ1Yh9UHtTC06DNeCq1QaXN - t2iWREDZOAx52V34+hdDIqlBaFA1PI9J4e5+DkGBZWBann2WggS3FW+bmZpzTAy0OSYH9TlmhtoUXY7J - IT2O0SFdjqH2Dl8z/nFYZ4/gTeEN7HDMhZMwHpqfn2JobBbKAH/UGK0Gjn8KXDiMHLPP0eAdA2XTEF2K - dyEKkEMkVkDoWoBgUTmSEi4hMloFFicFX2l9oyan3JYT5hEzYmG0l1gY6xCm6V5iabqfmBtTTHUJz4G9 - 2Dk4G9aZw3jHuxfbuLmw4sVhbEiN0QkNVEEiKPQ/AbzfB0oNkWO4DvX+0VSARqC8D4GSUoSE1NLJdwmp - Z9qQnt5B54ASbIckugy3/r4A00SbStDOuVziwed/Yi2MBiv1Nt7zvo1N7DwYWIZCVtCMMkUfKrx9UHOA - jt59CZCvg1z91VD5RaG+eZguy16EBJfiRIgCqaltiItTQRJYjGCJHI4OdBVo/YGApfEecpTLJsdcBcSL - 77jMzjV41Cm1C0uowDpmHpx9CzA6PAV51RgKBULU6XwEOLwNpG5Fge5KXKARqKMCFVQgOFAGsa8UYnEJ - xH4FkIgLIfYvgJlJJN0Htr8cAWuT74gJg0FMnETEjMLg+pF9LJGby5krWBHQj5UWMjDdMuj2O4r7U7O4 - JPZF3Q4afu5iIP4LFGmvwEX/cCowiIrKm3QnLIMk4DyOn8iHh3se3QnTIHQ5B2tmwssCVnTkh8xMyWdM - CVnHDCHrLILJWsqaIyJP4dk2rAsYxErbYmwzCYecpuD2sBqtgSFQbF0OmP4NCF2Joj0foojth4zsmyjI - v46wEwrwnXPAYZ+iEzENQSdTkFSZiqPCdHy5etOLCFgZ76KfT4fJ1+YB5GuLALLJXPwrX5r5ePrltmNT - +D18YleKFdtdYaRjJxN4RiLF2BzSj14H9v8J8Hkfsh1L0ewbDWnRT0hIqIeTUxy8PNPp67wEZ1IUSMrK - QVmbHEKPDHy+auMzAWuGCdHR0yGf7nEiq/Zwyeo9jr/h4x22niHn2vFtwjg+sivHWj0vHNDW3mxgZL9B - +PHaWtlH/6ACrwIe76Nw67u4FBCNhpZhFJfepK/eSmRmF+NsVjHOZVciPbMAfsHB0N7nip1b9oGkHn2X - HDC1IUu2WZB/bTOn5css/srIU5x7GfszJrGCUwstfTH09363uywlg6iiIuRRH1CB714DzN9C1qp30BJy - Gq2XxugXVidyc8soBcjKkcLPNwN6Oq74ZosJGMaHB5ycuDHEns0iepZeRJeib+VF9H4HHXOhODClBsZJ - A/jCJhMbdrOxaf3K3edTk375tF7fkp76KHTNvxHwyWJYan0BLsOdbr2F9GXUjnN5KvouSIPRIQF2bDWA - sYH5Q0tzAdfD1eMDtj2HEGtBFGG5hRF7t/A/hOMeqW9w2GVWS+97LN1giC07DWF5xGS/j4eQTAwN/CKx - rjwqOjNkv16mL+topr1dQKbefn4f47A7jA252LXLFLr72H32VryTLEtrYsMUEDcXN7IgYOca9n+xdY0g - 7nyBHuuIsdpEX0ftxuOV+Hr7v+XsLCBtSuXCH4za6CgSqatLRHauhMOSEJa1cJm5mQPHhslVWzAYHFsb - /jI7Jp/YWlgTa4sXAv8BgbJAolzyFWAAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABJ0AAASdAHeZh94AAAL90lE + QVRYR4XXd1DVV6LA8fNm3rw2b3Zm9+2Lu/tMXlw3m9iTbKKxRWOMjWKhKk2aXHqTS5TeUepFBQFBAQUk + 0uXSLv1S1ahUQQQjSBG75Oqlfd+oeZvN0513Zj5z5vx+f5zvnN8/vyNeqB8+vlJ0UNVVaafqazuq6msN + V/W1hqlutoWruhoCVW0X9qtG+2WeU+qLgrlLgtnWt2gRzDYKZn8QzNz5P14+GxHMIpide4O4VCydGrp+ + HCgDzgGZP8kCLvD4biHfxep2TgwlZ8xMt2bMqBvfQpkxo67NYHYoA8Y3wbj42ZiAewIQzL0ZIboqbdTM + yZl6ksHMszBmJo++Mj0ZyczTKFDX82SsgN6mULqaT9D9yvGfvF73tBznel0k1xpO8XBU6fxotE48GqkS + j+6Wi2djZWLg5lXR3Tn0OuKXAf8gbtR7qXkaz9xYAHPjQfA35saDmRkPYfrxBaaeXWVqsvknjUxNKv9m + 3cLMiyu05loSaPmfkiO280Soy1oReshISG11hJFRiNhnECVkMWdfR/yvVyfQ4KbmURRzw1LmhlyYuenI + TL89M/12zNx8yZHpXkem+pyZ6nV5U58TU73OTPd7UH96J6GS+caPxqvE+axcYWPjKHbpuIm9JtHCyTZJ + bNpkJrZuMRGV5Urx5PGzVxGiW2mvZiyIqW5XVD2BTI0lM30vmZmJZGZezaeYvZ/E3INEeJACD5KZu5/E + zL1EpscTmRpPePWe+8nc75WhnpRXwJhDUUGpsLeVCANDZ2FkGi0cbZPE9u3W4otVu8VubTtxyOOomLj3 + QIiueis1Q96oWh1QjeQCna88f9HE9Mwlnr9oZuJ+BUN3i+kfyGdgMI97E+VMTTcDl4DrPHio4MkTJY/H + 5UyMFgFDXCwqH7A0t3x3j46zMDb7OWDtGh1haiQVBywOC6lruBA9daZqbrnxuM0OnldRViiluMCb81mH + SYq2pyg3jEtN31Elz+R0eizpKTFUlqTSWBuPstGf4nwvEk8cwt8vgBCfg8RFuFNw4Tj+ftFoaji988Ua + R2FqHvWLAJN9HsJB4ifsrH2EaFcYqee6bZi87Iqi8jQJ8ZGUlxUzcOsGg73dONodIP10CpVlZRQWFFBR + XkpNdQUNdZVUVRVxJMSHmAgZYWFnCQ9NIzenmOjISHS0TbGyjO/btsOn09w6rtPG8kTnhg3GWz79ZMeC + ffouC5ztfBc42foL0V65R/3ssgXPvvcjNSWC/PxCvruQz6VLV3j6eJKSojJsbew5JjtOYWEhpfJyGpta + qKmpIykxhdycPOLjThESEE9auoL8vDKuXb1O/IkUivI7qai4TU7ONRKOVRLgl4ibayQuzjKMDIOwMvNJ + Fh1VGuoRpQVTfcc5ecwbubyEjo4ulMomLnxXTFSEjK3fbCM5KYl6ZS3XrnVQU11PRGQ0p5JS6Ovpp0ZR + ja2lNRGR8SgU1QwO9FNZqaA4v46hgR8ZvaNmfBh+uD3HlauTpJzpYPeuRDasMUV0K7apb1Wb8OJGMI0l + 1lQrapiZht4boyScUqKja8XunXrUKqro7bnJ5bZLREZE0VDfQk1FJS/Hw4kHNDY201DXRPu1Th5MPEQu + l9N5vYsZNfR23aUk/yYhoQPYSq7gLOlCRzebVUu/UYne8s3qDvkeng+F83zQH3mWBxfPBxPua863jnqU + nzXleLAR4QEBuDq7kZiYiFLZwvCdB+Rk53H37gjt19vJzc1/pa3te6qrmggKPE5NzQiy2Ks4OTRgaV6F + jZUSO+sGnGyq0dmTyqplm1Xi6rnP1J2FWrwY8IXb36IaDOPhjUge9MTxrD8O9UA4DiafUlvTREJ8Kges + nfj+Sg8P7z+n/XofaWeySM/IpLm5hbKyUry9A0lOyqGmuo+CwhEOutfiZN+Go20NNhYXcXUsxd3lIro6 + p1i1/GuVuJb8sfpWoTbTPR7MDrozN+gEA87Q7wy3nWlX+LFh/Qqkocnst/Ji104JMVGnefb0BSPDTxi9 + O0l2ZiH19XU0NTWQfDKdK223aagforhoBOnBMmwsC/CXFhETUUVSUitRsfUYGqayctlXKqGULVQ/rDVi + rtsFbti+1mMHPfbQb0dHoTMmTp5oHr/Hb6y72S05S0zsBZ4+UTE8/Ij+lk4iD4eSkp3HEdlJXPY78f3F + NhoahikuHsbTs4DQkHpOnb5OfFwrcVFKoiPqMDVK5/OlX6nERb9/4Wm1FnTbQocFdFhBuwW074ceM27L + LXDy8cIwc4pfuQywzSoDWVwhk09eMDb+HEV0DMHrlnBCaxHffvkHzN7/DfWxySibxigpuYOXVyFhYXUE + B5Vy0D2HwAA5kUeqMDHOYuWyTSqR6fHPXWmH/sRZn0Vk+Cwm3XsxOX5LyQ9aRn7wYhLcl7Hf1Q2j7En+ + zbUXTadcvAPS+PHpNGP3pqkN9KFi91JmQ9cwm29BhcVXNIdEU984irz0Dr7+xYSEVBMRWsXhQ/l4eJwn + NLgUU7Nzrz9BgvvCdwwNjCX6u7ZL9HdrSwx1tksMdTQl+nu0JLp7NCU62zf6GrocwTxzjP+Q9rHRLht7 + aTzqH2cZmZimPsifat0lcOQjaN1LluFfaPCOo75pBLn8DgFBcgICFUjd8ggLKCMp4TIxMiXWkhRWLv1S + JU66LxCm+wyFie5WYaKnIUwNtgozgx3CWG+HMDbQFM62NvMcwzIxzxjld94DrHfIZr/zCSZGVIw/VqMM + DUCh/SF4vwclOmTprKDOX0Z90yjyskGCQ0oID68hKekyqWfaSUvrJDqiHhvbJFYtW/f2AFP97cLs5eYO + DsLTxeVDc6kM69Rb/MH7FqttcthlFkFhXjOlikHKvX2o3vkReMyHXA2ytZeg9IulrnmUsrIBwsNKOBqu + IDW1nRMnlIQEFxMWIsfONpWVS/9OgJneFnHQwUYccnMVXi5271u5hY3bp3Yz3/sWK0xzcPTNY3z0GfLK + CQpcpdRqfAC270DqOvI0F9HqL6O2eZTysgHCggsJ9M0nMPAigX55hAQWEOifh6F+DKuWb3gzwFz/a6Fv + ZCT07QOEoX2AMHLwE9usA9ydzlxlYdAQi0wKMXVP5+HEOPefTXM50Jfaje+BwzyI/4yi7Qu55B9FbfNd + yituIostJSToAkeO5uLpkYOd9WmkTucxN014M2C/3haxx9BAfGoaIlaYhosVJmFiuUmYWLYv4LD0XDsr + gu6yyLKY9fpRyPOauTWqoi04HMW6BWDw7xCxiKItf6LIxo/0zJvk5d4g8qgCF8csJDYnkbqdJvRYCkkV + qRyUpvH5ktU/B+zX2ywMDPeKL4yDxBcmQWK1ceBffW7oc9gvu4PVUff40KqEhRvc0NWwKnQ9HEOKnjH5 + H/wKdvwj+LxH4cZ3afaVkV/0AwkJddjbn8DrcBrHZBc5k6Ig6WwWpe1ypJ7p/GXxqtcB5kb6QkNLQ3y0 + xV4s3uIglmyx+4U/b7Q8HH6+g68SHvCBVRnLtbzYuX37ml26Bz6R/nl5TeEHv4Yd/wSe71Gw7vdcDpLR + 0DJKcclNUs5UkJFZzLmzxZzPrCAtIw+/sDC2b3Nj09ptiNSDvxc7DSzE/PUm4r/WG4v5bzFvpe7hwOwr + 7Eh/wkJJDUu1A9He+vU3pSnpQhkbLY/946/h638F499ydvHvaAk/RdvlCRSVXWRnl5KdncfZrHz8fNPR + 0nDjy7X6GOntHba3d4gTB2yshZaZl9A08xLa+72E1ltoGEsDg1Oq0Usa5jOLDD75xobVHy/65kJq0stf + 649b0lKfRiz7b4I+nIfZ0s9wMPIgOKiA4qIOzucoCQ05je4eVzau24XeLuNHZsauDp5unn+0OSARwtw1 + Vli7R4oD7lF/l8QjRnvXXqfppVrf8u4nOqzdpIPZPv0dPp5S8Xhk+GXEirJYWUb4Dq0MX+uDGQesgjK0 + drgMGu31QE/Hgc2bDdDcZjN4YL/zMWszc2Fh6ircndzFqwArt8j/l6VbtPBwcdWy3qen0tfWULk7O1/0 + 9fb/raOjq2ivr391waiRxYoYTU0RYOUmJNYhwtpc+r6xoa3EwtRBZWJkJLG0cHnfytRFWJqYC3OTnwP+ + B9/khTZ5N2qnAAAAAElFTkSuQmCC - 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 - Gb8AAAAASUVORK5CYII= + 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 + SUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAghJREFUOE+lk9tL - k2Ecx+u/6SJC6qbsACkRkUKUB7KxuVGapB1M8iKLlo1dlGHHQVrYykPmheTmYW2NuSydx3awZUg0DKql - i9mmNbdPe15h8XaAjV743rw8n+/v9/3yPGuBNf/1CYN0ND3uOPJ+xsOMx8WrEVsSWeXSgr2j9vJZ3xjR - +TfEwz4SoZHMDPxTQ0SCXgK+fq6cr0B3RpWZwYTTTOKrC+2pkhSYUYRB0wMI9lOj3v13A6fJmGXvvovl - 0S162xrpMTbQbbxMV5OezmYd7YaLPLx9AeP1c7Q0nhXKkm1gfWxgMTAACw5JiS924p+trHwcIPbBTPyT - JfV/zt3JjfoqeQd97ddW4deniXuqiE2UsTysJDJYyNKLZG5/DXHvCWKTR3n7pIC6Y/vlBj3GqzDvYMVd - yY/xwyy9VDDcugdV8XqedWpS8LJLhb8rj9qyfLmByJsI2vg+qiE6dJBF+z6UhevQlG5Naps0WcARZxHT - bblUl/4qU7pIXc16KW/0eTFhWz6h3lzJ7Hc4bM3D05LNcUWOfIMOQz2xORPhp3tZMO3km+MAHTcLUCu3 - 0KTfJU0WcMicw9SdjVSW7JAbtBq0BMaMuO9txnt/O+8samb7FFJhIrNYW0wWsFm3gYqi7D8MNjXUlaOv - VUm6VH0I7cliqW1RmMgs1haTBZyU/B6k8xr/deYna7rBU0DWSCIAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB/ElEQVQ4T6WS20vTcRjG/XO6iJC6qXWA + lIhIIUo3WmMnShtpB5O8yKJlYxdl2HGQFrby0NqF5OZhbY25LJ2HbAdbhkTDoFq6mG1ac/vE7xcsflkX + w4vne/HC83nf5+FbBBStRasG/9P0hO/Ih5kQM6EAr0c9FAQIj3mrZyPjpOffkk1GyCVGCwNEp4ZJxcPE + IgNcOW/AdEZTGGDS7yT3LYDxlDJvLAgw5HgA8QHqdbv/DfA7rMXenru4Ht2ir7OFXmszPdbL2FvN2NpM + dFku8vD2BazXz9HeclZQsQTgfmxhMTYICz5Rua9esl/crHwaJPPRSfazKz+fC9q40VQr7aC/69pv85vT + ZEO1ZCarWB5RkxqqZOmFEqL1ZMMnyLw6yrsnFTQe2y8F9FqvwryPlWANPycOs/RSxUjHHjSK9Tyz6fPm + 5YCGqL2MhqpyKUDIm4t7+DGmJz18kEXvPtSV69Brt6LXbsubU345052l1Gn/lCk+9jazmDf9XEHSU06i + r1SE/W1OussItcs4riqRArotTWTmHCSf7mXBsZPvvgN036xAp95Cq3lX3pxwljB1ZyM1yh1SQIfFSGzc + SvDeZsL3t/PepWO2XyUWJmQWzhY2C2anaQMGuWwVYFNzYzXmBo2oS3WHMJ5UiG0LhQmZhbOFzYLZIJdJ + /8Fa9AuXJO4lyEa/vAAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEgAA - CxIB0t1+/AAAATBJREFUOE9j/P//PwNFAGQAOgYaCDIVKAw2HM7GqhabIEwMZgheNVQzIDo6Otff33+X - t7f3THd3dwGY82EWWFhYlAPxfyguh7sSxPD19e338fF57OHhccrV1fW/tbX1I2QDgJrSQBqRDAMZ5AJW - AyKANtbDJIGGvLW0tIQHIEgcqPgMFgM64AaAGEFBQX1AfNXLy+sbTDEsEBMSEmBOh9NZWVkQS4CahEJD - Q/+HhITcA7IF7O3tb5mbm6O74C7U72BnI2OQ/ysCAgL+u7m5LXZ2duYHav5mZmaGbgAsAFcBDRIEYqXV - q1dD1ACdLGBjY/MfpAmIb5uYmLwzNjZGMQAaDh1Aje9AGGQhSizY2dkJAwPOFMN50NRIVkKCJWFCqREj - H6AEELkuoFpmwud3mBwAxyxA1dGzKyUAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsSAAALEgHS3X78AAABMElE + QVQ4T6WSsU6EMBjHeQNR38BXAMvXQGA4oU2BQBqYWJgcSJzPzfUmnZ3d5A18BOPqotFBZ2+8taZ3lHDt + JZfT4deQP/1+/GlqCSGs/2AE69Cy5CL0510YgS7SMx0j+LOgaZqroiie0jS9J4TYugAA5gAgBuZbgjzP + 77Is+6aUPsdxLHzf/5oKAOBSDk5kUnIxCgghN+olpfQHYzwe4DDwskOwGAUSzvkt5/yVMbZSm5WgbVtV + faTrus0ezvlJXdeiqqpPzrkdRdGb53l6g49p7Sny/6/LshRJkjzMZrMjz/NWCCFdoA7wEQCOAeCs7/vN + HsaYHQSBkEMIoXfXdZeO42wJBskCAJYS+cGxgVzCMDzFGJ8b9Q65BzrqCu+TGIEu0TMdI1CDanhfCyM4 + lF/ylm2nCccnxwAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA - CxMBAJqcGAAAAjNJREFUOE+lk01rE1EUhvUf5CfkJxQFF66ydDloA1lGcNGFSnAhQRCHghAMakSKBktn - rIqNpDqb2hitHdFWi0gHazW2YZKWqGkzTa9OlX5oXs+5k8407cKFFw733Mt5n/Mxd/YD2PdfiwG7bWLG - xZ3iMlJ3K+gdmENfvoyRV18obG9sh/i9vY7ceBNacQnVxia+r21BuJvkb+ByroSUZqH4erED5ANY/MBc - hfOzBdMC1CFASXnGvmkJ2KstXOibxMiLsg/xAZx55VcLuglEkoBeAMQ6xwFVASRu8p1AhSBn0s86ARMf - 1vB4uikzs5iDeRlvgHjG2xkWSQryBbTCR2RzbyVEVnDvaQNfxW9ZaiThlZ0xgC7ywz0CiQyVQEtRBeIp - C3O2i+PnhgNA+v6iHJiieqKuHs/CZHESc3azJBBWTIRjJuqOi0PR6wHg4m2bpr0ly/eEFBwXVImX2TDp - TMKQYtBuoN74gQPK1QCQfVjBgrNBvXvCcKwqLTPkAUKKReYBlKSJUrmG7lN6ABid/IaC5cgBsTAUY4FF - LVVpLnRm8RFDml6oYrgwi0u3xgIADzI9OIN55w9lbQtIxL6soC1WdQuflx0cO6l1fkYGjE3V0Judgt2k - t0BZFNWSfbOxz3fztRVEqfSBPH3X9rPueMqjLys4e2Uc+pNPmJ5dwBJNu95wZc9cdjdl1naI/XewTdve - +/PvcOL8IxyO3cDBo9cQPT2IdP9zP+vO+D1/4m7Yv85/AYwH2NXcJ7xZAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAACG0lE + QVQ4T6WQX0sUURiH/Qj7EeYjSEEXXe1ll4dS2MsNutgLjaWLkCAahGBJqo2QXBJ3siKNNefG2ixzojQl + wiGzNpXdUazUHfXUWPin9olzJt22hSAa+DGHl/d53vecBqDhf1JXUBmbDrg5vErqVon2nlk6c/MMPf/A + n311gtfFLfpH18kOr+CVd/i8uYsMdvDK21zsL5DKugy/WKwR1cB3nQ38rxUcF8w+EKkw6uy4kuJGhXOd + 4ww9nd+X7AvU5LVvFSwHom1g5UFuqT7wJCS7VE1S2qhwquNxrWDszSb3p9b1ZAWrZvXZExBPh38li7ZJ + 7AlJNv+WTP9LLdGC24/KfJTf9arRZLh22obGJBgJSTIttVCYknjKZbYYcPzMQFXQcWdRP5gwQ6gxEcZI + qA2knu4UJIZwMGIOy37AoearVcH5G0VksKvXD0GJEZeIVDjZdqQGI8LGiNksl79wQFyuCjL3Siz42yS7 + QtCIeTrpvlAQES4REQpEm0NhfommVqsqeDD+ibzr6wdSYCSmABdheph9XggfsXWsvMdAfoYL10eqAv0O + vdPM+T9I7wHC0We9wS/YtFzer/oca8lquEYwMrlEe2aS4npFTxGmq++tos6qNre0RnOrRU9uol6gr/Ks + xOlLo1gP3zE1s8CKH7BcDvSd1dpNLVmyv8F1gr10515x4uwgh2PXOHj0Cs0ne+noflID/lXwL/kJt3EF + thF+kyUAAAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEgAA - CxIB0t1+/AAAAMJJREFUOE9j/P//PwNFAGQACFfVd/yvaegE40ogzinr/K9naAqUwi8H1gzCNQ0dIMX/ - f/3++//z9z9gbGphDzYAnxySAZ1Azf/+BzR9/W+Yevb/3Te//2vqGEENwC0HNwDkbJCtlkWP/usnnfh/ - 4vrT/9JyymAD8MnBDQD5GWQAyGaQ5m1HL/8XEpEAG4BPDm6AuaXdf2sHj//6Rpb/5ZU1/ouIS4OiB2wA - Pjm4AbDAJJWGGzAajfijaohEI6nxD1MPAH/FmTUmtOWCAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsSAAALEgHS3X78AAAA3klE + QVQ4T6WRMQrCQBREcwYJKAS0SKMghgSCBkEtLT2DYGdlIUQCBqvshbyBkMbKwspGsLMTERJ1ZBf5BCRf + jMXAsm947DIaAO2f0GGxjBCEQsUPBaZzgZbt4hsjQRBG8gJJ+sDldldxO31V4lhGIJCkT4xWV9iTLQ7n + FI2m8xbkMxLIp0mzNzvCGseI9ycYVVOVOEYC+S9ZknZZWG92KOkVVeIYCdpeD93BEJbjoWbWoZcNaArz + jARFQwduKo6RgJuKYxlB/lQcIwE3FcdIwE3FMRJwU3GMBEXzcfFrXqsvxgcoH5ClAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEgAA - CxIB0t1+/AAAAlRJREFUOE+lk+lLVFEYxuu/6UOE5IfKFkiJkJSiXMjEUUtN0solxTLJrflghq1TaWbj - mg4hOeNuw7iUe+bMuIVEYpBNaoy51Dj315wbqXeSCLrwfjmc5/c8z8u5W4Et//UJwMYZGTBFfZgwM2Hu - 5W1PG10tz2nQFVFTnBfgflc233ho6TPGTFr7WZodx2m3Is33INlamB0t5UnBZQrzkg+7QxSAsaEuFm0W - pqyN3MiIJTdFRVbiKaa7c5jpyyAnKcSlVyZWAAY7DEhfe8lMCCElym+XuHzptK9n2cPrSONppMUc/Tug - XV8KtkaSI0TSdafyB2qk0UQSVD6bAzr0Wg9j7WOan92jvqKAOm0+tdo8dIVqqotyqdRkUXb/GtrbVykp - uCLG47eBXKG1RsPCVBPMmeSRvhhxfm5l9VMTjo8GnDPNa+fTw9XcyY5fSyIDGipv/RKPJuE0x+MYjGal - O4zF9kCWX7kWN5aM03IBx5uzvHsRQPq540pAnfYmzJpYHY7jx8AZll+H0l3uiyp4Oy+rI9fEK70qxnR+ - pEb7KwGir2Rr43tfJEtdJ1kwHiMscBuR4Xtds092FuLFjiBGKnxIDF9fslxBV6SW+y51BmNv82e+3keG - uYvtrX6YS7w4H+qtTFClycYxrcfecoQ5/UG+mU5QdTeAiLA9FKoPyc5CPG/wZujRTuJCDigB5ZpMpvq1 - DBfvxvJ0P++bI5hsCJUXJjqL2MJZiA25O4gN8voD4JmfHoM6VSVPjuv5Zl4MlrctFiY6i9jCWYhdo3wH - m/1l/3r2Ey4iunsWz150AAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsSAAALEgHS3X78AAACQklE + QVQ4T6WS20vTYRjH/XO6iJC8qOwAKRGSUpQHmuJ0pSZp5TTFMslTuzDDjqs0s3lMR0huzmNjmqXzkG3z + GBKJQbbUmHmoud8n3l8wmYY3Xnyfi4f3+3m+z8PrB/jtRFsaY0OWhC9TdqbsVj72d9Hb8QqTvpzGiuLw + zW+3ABwD5qTp0UFW5ifxuEaRFvuRnB3Mj1fxvPQaZcUZx7cFTIz0sux0MDPayu3cZIoyleSro5ntK2Ru + IJfCdAXbAoZ7jEg/reSlKchMCN0nelfPhQRUP7mFNJlNdtLJ7QHdhipwtpIRL5Ju9Gsea5DG1aQpg/8P + 6DHo/M1Nz2h/+ZCW2lKadSU06YrRl2loKC+iTptP9aOb6O7doLL0upC/D6CzUcvSTBssWGRJP8x4vney + /q0N91cjnrl2b3/W1sD9glRvErmY6u7+M4+n47Gn4h5OZK0vluXuCFbfKWAiA4/jMu4PF/j0Opyci6d9 + Ac26OzBvYd2Wwp+h86y+j6GvJgRl1G7eNKi85jWrkgl9KFmJYb4Asa/k7OL3gIqV3rMsmU8RG7ELVdxB + VHGHvOblnkjGaoNRx20cWS76co2878rbKFxdYSy2BMuwzWZXZyj2ykAuxQT5Auq1BbhnDbg6TrBgOMov + yxnqH4QTH3uAMs0xr3nRGMTI072kKI74Amq0ecwM6rBV7Mfx4jCf2+OZNsXIBxM7i9hisjAbi/aQHBm4 + BRBQkpOEJkspq1AdTd6VKPna4mBiZxFbTBbm5MhA33+wE/0FWYznTcEG5+wAAAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAASdAAA - EnQB3mYfeAAAASlJREFUOE9j/P//PwNFAGQAJZgizWDXU2L7IDEgq7Dyf0Z+5f/0vIr/KTll/5OyS/8n - ZpT8j0sv+h+TUvg/Min/f3hC3v+QuJz/QTHZ/wOiMv/7RmT89wlP/+8ZmgqMAQohhdqBsZBRAHF+am75 - /2SQ8zNL/sdnFP2PTS36H5Vc8D8sseh/aHze/+BYkPOz/vtFQpzvFZr23zM4BbcHKmc/+B9Rdfi/f9Fu - UFLDCXFKtCx79X/hvu//HVPXk2aAQ9Kq/5ndF/+DDJi5/ct/38Id/81jV/xX9ZiA1SAMF1y7++a/pv+c - /80L7/5vXPrqf0TTjf9GofP/n7v2lDgDQL69cf/tf7OoRf89iw7/1/ab8X//ybs4vYEzDG7cf/NfzrHr - //x1Z/CGAQCjS0wEhVWp7QAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABJ0AAASdAHeZh94AAABLElE + QVQ4T6WQu0tCYRyGz1/S1hBtDbXm1onUyE5e8JKXk8dLXg52sa3LVItjUSAGRTTUWBDU4BRE0CIuYkuL + 2BY0PvEhEvQp9CEP7/LA7+XlpwHaKJGEaiShGkmoRhKqkYRqtHSxjJUvk8xtk8huEstsELVKhJM2wUQR + fyyPdzXHcjjLUjDDYiCF02ex4E2iGybaqEhCFc0q9Oab61vExfxUiYhlEzJtAvECK1EbI5LDExLz07j8 + vfnzxhq6J/G375fy6Tu+nTpu+0G8ayiS6HNw2aH2+I3DvFUrmI1dkzp6QxSc3H3hLN4zE7pifK4ysEgS + jVaXCfcZ+7UWuxcdfHtNpowqr42P/xUImu1PpgPn6HadSdcxT8+tgccCSfRptruMOQ6p3rwMPRb8AM61 + eNYtKznlAAAAAElFTkSuQmCC - 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 + 3+322v8OK0dV96Fprs4AAAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAAAUAAAAwCAYAAADZ2LD7AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAACpJREFUOE9j+P// - PwMIMzMzc8LYYAGooPio4H+G0QCBpJDRxAAMhyGdGACLokPRWdHt7QAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAAAUAAAAwCAYAAADZ2LD7AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIUlEQVQ4T2P4//8/AwgzMzNzwthgAioo + Pio4KjgqOFwEAYuiQ9FuQcdhAAAAAElFTkSuQmCC @@ -535,485 +531,457 @@ - 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 + K30AAAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAASdAAA - EnQB3mYfeAAAAo1JREFUOE+lke1LU2EYxu2v6D8IgkKIIMIg8kMtlRQjskkGc03NN1j2YpYFMYmpuTXn - 0rItU8wyQ2TqamjpUGwYCr5sJtN0tXd1O9vZjjvr6rzk9ODHbngOz/1cz/27r+c+BwCk/FewgL2rotWB - mjdreNjtxW2DF1LVEm7UT6C6ycRcE97lmu8clmrtkOtX0DjggmWZxJKLwqqXhsNF4sv0GpR6Cy5WGiC5 - /1YA4gAy1TzkLx3omfSDZuV/sRWhsRmJc1kwHEP34DRyytogrjIkIRygRDOHZwNre0oBV4DEyfJJHJd9 - hm+DSGrtvePIkGmRJ2/nIClS5TfcaZthrG4KANvxBBQd81AYZhGjeBd8xCCteY3MYi0PKKwbQ32HVVDM - Jr+9JGZ++OD0hZLaNkUx+yhMo1bGRTMPyKvuR3PPfsDHrytIvWpCdpUZngD/BDpOg44RsC3YkVvawgMu - Vxuhe/99nwOrzY0T4jGclgxh3bfB6YkEjWgkCOeqA5cqn/OA/AfDaOy0MuIfAWRm2YtT+WaIioxwbwY5 - LU7TIIJ+2GyLyC3T8YAK5TAetYyAHdreWPgZQFquCVlSIwiK5KQQQYAMeTBstuCcVMMDlPpxVDUYYbLY - BYCJOS8OHnuHQ+ldWA/wgwz4PCCDTpTU6ncBLEVeb8Q91SCCkWgS0jVkw+HsLhzJ6cAH8yIzQeYZUTe6 - +z4h/VoTM4MXvAP2w65yRR+etA7B6XYz6TYSFIEwtYFw2A8i4AYVcqLfOAKRVI3z1/lfKACwyZWbr1Bw - V49aVS+mpmcRJX5hy7+K0bEJ3KrrhKhQjcyi3eJ9APYgq1iHDKZDmrgBRy88RmqOAmcKniJTpsFZiTrZ - ecfBX3S4BezexVqUAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABJ0AAASdAHeZh94AAAChUlE + QVQ4T6WR+0uTURzG3/+i/yAICiGCCIPIH8pUUgzJlAx0Ts0bmF3MsiAm4SU1b2nZzBSzzBCZuhItFaXE + UPAyTabpanNz6nx1c+5dn3i30E1/7AvPl3Oec54P5yIAwv/ogJFRoyf39SIPms3cqjejKJ3leuEQOSVa + 9u/1A6RWzpClnqe4w8jgnJ1Zo5MFs4TeaOfz6CIF6kEuZdYTf++NH8jTlKWTZL3Q0zK8giQv/6v1LYm1 + LZdnbNvcprlzlIi0WmKy63chnpZSPsHTjkWfKBitdk6lD3NC+QnLqrjr17UOEKKsJDqrTp4KgqLgG7dr + x9Ab13zz7LjcqBomUdWPs+30nsJb2yhyXxGaXClPBCEhv5/ChhGfDd76bbYz9sOCwbKx6+04nYADbd8I + IcoK2RKE6Jx2KloOAj58mSfgqpbw7B6Wrd4rSC4JaVtENzVDZGqVbAnC5RwN1e++788zojNxMqafM/Fd + LFlWPZ7bLeHYsmFY0BOV+Uy2BCH2fjfFjSO43X/8AGNzZk7H9hCcpMG0ZvN4LklCtK2g000TmVbtBWQU + dPOwqtfzaL419dNKYKSWMIUG0Wn3eBuiiH1jme6eQc4ryr2AAvUA2UUatIMzfoChCTOHjr/lcFATS1bv + Q1oty9htBlLy1HsAuWUVarhb2olty7ELaOrScSS8iaMRDbzvmQbJBg4TzW0fCbpWQlTm8z2ArHRVG49r + ujCYTPKH4XaKbDpX2dxcQbSacG4YaNf0Eqwo40Ki9wv9ALKu3HhJ3B01eaWtfB0dxyH+Yn1lgb7+IW7m + NxKcUEZo0l74AEBWWHI1IYkVBMYUceziIwIiVJyNe0Kospxz8WV+YVl/AaAiMr7CG6U7AAAAAElFTkSu + QmCC - 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 + OiSK99IAAAAASUVORK5CYII= @@ -1038,4 +1006,8 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + ..\resources\toolbox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/Resources/toolbox.png b/PROMS/VEPROMS User Interface/Resources/toolbox.png new file mode 100644 index 0000000000000000000000000000000000000000..f645121b9a3098ab1aa277edccd2f08136b50e1d GIT binary patch literal 3353 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 literal 0 HcmV?d00001 diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index e6a0cace..a6e13435 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -266,6 +266,12 @@ frmBatchRefreshCheckedOut.cs + + Form + + + frmGenTools.cs + Form @@ -378,6 +384,9 @@ frmAnnotationsCleanup.cs + + frmGenTools.cs + frmPDFStatusForm.cs Designer @@ -503,6 +512,7 @@ PreserveNewest + PreserveNewest diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs index 6e6b2213..a4e39c42 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs @@ -70,17 +70,6 @@ this.labelX6 = new DevComponents.DotNetBar.LabelX(); this.warningBox1 = new DevComponents.DotNetBar.Controls.WarningBox(); this.btnFixLinks = new DevComponents.DotNetBar.ButtonX(); - this.sideNavPanel1 = new DevComponents.DotNetBar.Controls.SideNavPanel(); - this.warningBox3 = new DevComponents.DotNetBar.Controls.WarningBox(); - this.labelX7 = new DevComponents.DotNetBar.LabelX(); - this.line1 = new DevComponents.DotNetBar.Controls.Line(); - this.swCkObsoleteROData = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.swHiddenDataLocs = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.labelX3 = new DevComponents.DotNetBar.LabelX(); - this.labelX2 = new DevComponents.DotNetBar.LabelX(); - this.swCkOrphanDataRecs = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.labelX1 = new DevComponents.DotNetBar.LabelX(); - this.btnRunCheck = new DevComponents.DotNetBar.ButtonX(); this.sideNavPanel2 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.swRefreshTblsForSrch = new DevComponents.DotNetBar.Controls.SwitchButton(); this.lblRefreshTblForSrch = new DevComponents.DotNetBar.LabelX(); @@ -97,14 +86,10 @@ this.labelX8 = new DevComponents.DotNetBar.LabelX(); this.line2 = new DevComponents.DotNetBar.Controls.Line(); this.btnRunRepair = new DevComponents.DotNetBar.ButtonX(); - this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel(); - this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX(); this.sideNavItem1 = new DevComponents.DotNetBar.Controls.SideNavItem(); this.separator1 = new DevComponents.DotNetBar.Separator(); - this.sideNavItmCheck = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmRepair = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmLinks = new DevComponents.DotNetBar.Controls.SideNavItem(); - this.sideNavItmUsers = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmDelete = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmExit = new DevComponents.DotNetBar.Controls.SideNavItem(); this.panelEx4 = new DevComponents.DotNetBar.PanelEx(); @@ -129,9 +114,7 @@ this.sideNav1.SuspendLayout(); this.sideNavPanel4.SuspendLayout(); this.sideNavPanel3.SuspendLayout(); - this.sideNavPanel1.SuspendLayout(); this.sideNavPanel2.SuspendLayout(); - this.sideNavPanel5.SuspendLayout(); this.panelEx4.SuspendLayout(); this.SuspendLayout(); // @@ -467,21 +450,17 @@ // sideNav1 // this.sideNav1.BackColor = System.Drawing.SystemColors.Control; + this.sideNav1.Controls.Add(this.sideNavPanel2); this.sideNav1.Controls.Add(this.sideNavPanel4); this.sideNav1.Controls.Add(this.sideNavPanel3); - this.sideNav1.Controls.Add(this.sideNavPanel1); - this.sideNav1.Controls.Add(this.sideNavPanel2); - this.sideNav1.Controls.Add(this.sideNavPanel5); this.sideNav1.Dock = System.Windows.Forms.DockStyle.Fill; this.sideNav1.EnableClose = false; this.sideNav1.EnableMaximize = false; this.sideNav1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { this.sideNavItem1, this.separator1, - this.sideNavItmCheck, this.sideNavItmRepair, this.sideNavItmLinks, - this.sideNavItmUsers, this.sideNavItmDelete, this.sideNavItmExit}); this.sideNav1.Location = new System.Drawing.Point(0, 0); @@ -505,6 +484,7 @@ this.sideNavPanel4.Name = "sideNavPanel4"; this.sideNavPanel4.Size = new System.Drawing.Size(299, 493); this.sideNavPanel4.TabIndex = 27; + this.sideNavPanel4.Visible = false; // // swDeleteFolder // @@ -759,173 +739,6 @@ this.btnFixLinks.Text = "Process Links"; this.btnFixLinks.Click += new System.EventHandler(this.btnFixLinks_Click); // - // sideNavPanel1 - // - this.sideNavPanel1.Controls.Add(this.warningBox3); - this.sideNavPanel1.Controls.Add(this.labelX7); - this.sideNavPanel1.Controls.Add(this.line1); - this.sideNavPanel1.Controls.Add(this.swCkObsoleteROData); - this.sideNavPanel1.Controls.Add(this.swHiddenDataLocs); - this.sideNavPanel1.Controls.Add(this.labelX3); - this.sideNavPanel1.Controls.Add(this.labelX2); - this.sideNavPanel1.Controls.Add(this.swCkOrphanDataRecs); - this.sideNavPanel1.Controls.Add(this.labelX1); - this.sideNavPanel1.Controls.Add(this.btnRunCheck); - this.sideNavPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel1.Location = new System.Drawing.Point(89, 31); - this.sideNavPanel1.Name = "sideNavPanel1"; - this.sideNavPanel1.Size = new System.Drawing.Size(291, 494); - this.sideNavPanel1.TabIndex = 2; - this.sideNavPanel1.Visible = false; - // - // 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(17, 207); - 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 = 29; - this.warningBox3.Text = "NOTE These tools can take a long time to run"; - // - // labelX7 - // - this.labelX7.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX7.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX7.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX7.Location = new System.Drawing.Point(5, 3); - this.labelX7.Name = "labelX7"; - this.labelX7.Size = new System.Drawing.Size(251, 22); - this.labelX7.TabIndex = 19; - this.labelX7.Text = "Check for these Data Issues:"; - // - // line1 - // - this.line1.BackColor = System.Drawing.Color.Transparent; - this.line1.Location = new System.Drawing.Point(8, 179); - this.line1.Name = "line1"; - this.line1.Size = new System.Drawing.Size(285, 12); - this.line1.TabIndex = 18; - this.line1.Text = "line1"; - // - // swCkObsoleteROData - // - // - // - // - this.swCkObsoleteROData.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swCkObsoleteROData.Location = new System.Drawing.Point(10, 99); - this.swCkObsoleteROData.Name = "swCkObsoleteROData"; - this.swCkObsoleteROData.Size = new System.Drawing.Size(91, 22); - this.swCkObsoleteROData.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swCkObsoleteROData, new DevComponents.DotNetBar.SuperTooltipInfo("Obsolete RO Data", "", resources.GetString("swCkObsoleteROData.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 135))); - this.swCkObsoleteROData.SwitchClickTogglesValue = true; - this.swCkObsoleteROData.TabIndex = 14; - this.swCkObsoleteROData.Value = true; - this.swCkObsoleteROData.ValueObject = "Y"; - this.swCkObsoleteROData.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); - // - // swHiddenDataLocs - // - // - // - // - this.swHiddenDataLocs.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swHiddenDataLocs.Location = new System.Drawing.Point(10, 71); - this.swHiddenDataLocs.Name = "swHiddenDataLocs"; - this.swHiddenDataLocs.Size = new System.Drawing.Size(91, 22); - this.swHiddenDataLocs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swHiddenDataLocs, new DevComponents.DotNetBar.SuperTooltipInfo("Hidden Data Locations", "", resources.GetString("swHiddenDataLocs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.swHiddenDataLocs.SwitchClickTogglesValue = true; - this.swHiddenDataLocs.TabIndex = 15; - this.swHiddenDataLocs.Value = true; - this.swHiddenDataLocs.ValueObject = "Y"; - this.swHiddenDataLocs.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); - // - // labelX3 - // - this.labelX3.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX3.Location = new System.Drawing.Point(107, 99); - this.labelX3.Name = "labelX3"; - this.labelX3.Size = new System.Drawing.Size(154, 22); - this.superTooltip1.SetSuperTooltip(this.labelX3, new DevComponents.DotNetBar.SuperTooltipInfo("Obsolete RO Data", "", resources.GetString("labelX3.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 135))); - this.labelX3.TabIndex = 11; - this.labelX3.Text = "Obsolete RO Data"; - // - // labelX2 - // - this.labelX2.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX2.Location = new System.Drawing.Point(107, 71); - this.labelX2.Name = "labelX2"; - this.labelX2.Size = new System.Drawing.Size(140, 22); - this.superTooltip1.SetSuperTooltip(this.labelX2, new DevComponents.DotNetBar.SuperTooltipInfo("Hidden Data Locations", "", resources.GetString("labelX2.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.labelX2.TabIndex = 12; - this.labelX2.Text = "Hidden Data Locations"; - // - // swCkOrphanDataRecs - // - // - // - // - this.swCkOrphanDataRecs.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swCkOrphanDataRecs.Location = new System.Drawing.Point(10, 43); - this.swCkOrphanDataRecs.Name = "swCkOrphanDataRecs"; - this.swCkOrphanDataRecs.Size = new System.Drawing.Size(91, 22); - this.swCkOrphanDataRecs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swCkOrphanDataRecs, new DevComponents.DotNetBar.SuperTooltipInfo("Orphan Data Records", "", resources.GetString("swCkOrphanDataRecs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(275, 193))); - this.swCkOrphanDataRecs.SwitchClickTogglesValue = true; - this.swCkOrphanDataRecs.TabIndex = 9; - this.swCkOrphanDataRecs.Value = true; - this.swCkOrphanDataRecs.ValueObject = "Y"; - this.swCkOrphanDataRecs.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); - // - // labelX1 - // - this.labelX1.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX1.Location = new System.Drawing.Point(107, 43); - this.labelX1.Name = "labelX1"; - this.labelX1.Size = new System.Drawing.Size(172, 22); - this.superTooltip1.SetSuperTooltip(this.labelX1, new DevComponents.DotNetBar.SuperTooltipInfo("Orphan Data Records", "", resources.GetString("labelX1.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(275, 190))); - this.labelX1.TabIndex = 8; - this.labelX1.Text = "Orphan Data Records"; - // - // btnRunCheck - // - this.btnRunCheck.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnRunCheck.Checked = true; - this.btnRunCheck.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btnRunCheck.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnRunCheck.Location = new System.Drawing.Point(5, 150); - this.btnRunCheck.Name = "btnRunCheck"; - this.btnRunCheck.Size = new System.Drawing.Size(286, 23); - this.btnRunCheck.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.btnRunCheck, new DevComponents.DotNetBar.SuperTooltipInfo("Run Check", "", "This will run the database check tools selected.\r\n\r\nClick on the on/off switches " + - "to turn on/off each tool.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 100))); - this.btnRunCheck.TabIndex = 7; - this.btnRunCheck.Text = "Run Check"; - this.btnRunCheck.Click += new System.EventHandler(this.btnRunCheck_Click); - // // sideNavPanel2 // this.sideNavPanel2.Controls.Add(this.swRefreshTblsForSrch); @@ -944,11 +757,10 @@ this.sideNavPanel2.Controls.Add(this.line2); this.sideNavPanel2.Controls.Add(this.btnRunRepair); this.sideNavPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel2.Location = new System.Drawing.Point(89, 31); + this.sideNavPanel2.Location = new System.Drawing.Point(81, 31); this.sideNavPanel2.Name = "sideNavPanel2"; - this.sideNavPanel2.Size = new System.Drawing.Size(291, 494); + this.sideNavPanel2.Size = new System.Drawing.Size(299, 493); this.sideNavPanel2.TabIndex = 6; - this.sideNavPanel2.Visible = false; // // swRefreshTblsForSrch // @@ -1176,31 +988,6 @@ this.btnRunRepair.Text = "Run Repair"; this.btnRunRepair.Click += new System.EventHandler(this.btnRunRepair_Click); // - // sideNavPanel5 - // - this.sideNavPanel5.Controls.Add(this.btn_ShowUsers); - this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel5.Location = new System.Drawing.Point(81, 31); - this.sideNavPanel5.Name = "sideNavPanel5"; - this.sideNavPanel5.Size = new System.Drawing.Size(299, 494); - this.sideNavPanel5.TabIndex = 14; - this.sideNavPanel5.Visible = false; - // - // btn_ShowUsers - // - this.btn_ShowUsers.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btn_ShowUsers.Checked = true; - this.btn_ShowUsers.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btn_ShowUsers.Location = new System.Drawing.Point(57, 37); - this.btn_ShowUsers.Name = "btn_ShowUsers"; - this.btn_ShowUsers.Size = new System.Drawing.Size(171, 23); - this.btn_ShowUsers.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.btn_ShowUsers, new DevComponents.DotNetBar.SuperTooltipInfo("Show Users", "", "This will return all of the users currently with open sessions in the database an" + - "d the details of any items they have checked out.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 80))); - this.btn_ShowUsers.TabIndex = 0; - this.btn_ShowUsers.Text = "Show Users"; - this.btn_ShowUsers.Click += new System.EventHandler(this.btn_ShowUsers_Click); - // // sideNavItem1 // this.sideNavItem1.IsSystemMenu = true; @@ -1218,16 +1005,9 @@ this.separator1.Padding.Top = 2; this.separator1.SeparatorOrientation = DevComponents.DotNetBar.eDesignMarkerOrientation.Vertical; // - // sideNavItmCheck - // - this.sideNavItmCheck.Name = "sideNavItmCheck"; - this.sideNavItmCheck.Panel = this.sideNavPanel1; - this.sideNavItmCheck.Symbol = ""; - this.sideNavItmCheck.Text = "Check"; - this.sideNavItmCheck.Click += new System.EventHandler(this.sideNavItmCheck_Click); - // // sideNavItmRepair // + this.sideNavItmRepair.Checked = true; this.sideNavItmRepair.Name = "sideNavItmRepair"; this.sideNavItmRepair.Panel = this.sideNavPanel2; this.sideNavItmRepair.Symbol = ""; @@ -1242,17 +1022,8 @@ this.sideNavItmLinks.Text = "Links"; this.sideNavItmLinks.Click += new System.EventHandler(this.sideNavItmLinks_Click); // - // sideNavItmUsers - // - this.sideNavItmUsers.Name = "sideNavItmUsers"; - this.sideNavItmUsers.Panel = this.sideNavPanel5; - this.sideNavItmUsers.Symbol = ""; - this.sideNavItmUsers.Text = "Users"; - this.sideNavItmUsers.Click += new System.EventHandler(this.sideNavItmUsers_Click); - // // sideNavItmDelete // - this.sideNavItmDelete.Checked = true; this.sideNavItmDelete.Name = "sideNavItmDelete"; this.sideNavItmDelete.Panel = this.sideNavPanel4; this.sideNavItmDelete.Symbol = ""; @@ -1392,9 +1163,7 @@ this.sideNav1.PerformLayout(); this.sideNavPanel4.ResumeLayout(false); this.sideNavPanel3.ResumeLayout(false); - this.sideNavPanel1.ResumeLayout(false); this.sideNavPanel2.ResumeLayout(false); - this.sideNavPanel5.ResumeLayout(false); this.panelEx4.ResumeLayout(false); this.ResumeLayout(false); @@ -1422,16 +1191,6 @@ private System.Windows.Forms.CheckBox chkLater; private System.Windows.Forms.Label label4; private DevComponents.DotNetBar.Controls.SideNav sideNav1; - private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel1; - private DevComponents.DotNetBar.LabelX labelX7; - private DevComponents.DotNetBar.Controls.Line line1; - private DevComponents.DotNetBar.Controls.SwitchButton swCkObsoleteROData; - private DevComponents.DotNetBar.Controls.SwitchButton swHiddenDataLocs; - private DevComponents.DotNetBar.LabelX labelX3; - private DevComponents.DotNetBar.LabelX labelX2; - private DevComponents.DotNetBar.Controls.SwitchButton swCkOrphanDataRecs; - private DevComponents.DotNetBar.LabelX labelX1; - private DevComponents.DotNetBar.ButtonX btnRunCheck; private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel2; private DevComponents.DotNetBar.Controls.SwitchButton swRmObsoleteROData; private DevComponents.DotNetBar.Controls.SwitchButton swRefreshWordAttmts; @@ -1444,16 +1203,12 @@ private DevComponents.DotNetBar.LabelX labelX8; private DevComponents.DotNetBar.Controls.Line line2; private DevComponents.DotNetBar.ButtonX btnRunRepair; - private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel5; - private DevComponents.DotNetBar.ButtonX btn_ShowUsers; private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel3; private DevComponents.DotNetBar.ButtonX btnFixLinks; private DevComponents.DotNetBar.Controls.SideNavItem sideNavItem1; private DevComponents.DotNetBar.Separator separator1; - private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmCheck; private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmRepair; private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmLinks; - private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmUsers; private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmExit; private DevComponents.DotNetBar.LabelX lblAdmToolProgressType; private DevComponents.DotNetBar.ProgressSteps progressSteps1; @@ -1473,7 +1228,6 @@ private DevComponents.DotNetBar.LabelX labelX6; private DevComponents.DotNetBar.Controls.WarningBox warningBox5; private DevComponents.DotNetBar.Controls.Line line3; - private DevComponents.DotNetBar.Controls.WarningBox warningBox3; private DevComponents.DotNetBar.Controls.WarningBox warningBox4; private DevComponents.DotNetBar.Controls.WarningBox warningBox2; private DevComponents.DotNetBar.Controls.SwitchButton swRefreshTblsForSrch; diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs index 27f501a4..2e616419 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs @@ -34,8 +34,8 @@ namespace VEPROMS _veProms = veProms; - // When opening Admin tools Check tab will be default. - this.sideNavItmCheck.Checked = true; + // When opening Admin tools Repair tab will be default. + this.sideNavItmRepair.Checked = true; if (sideNavItmDelete.Checked) { @@ -95,7 +95,6 @@ namespace VEPROMS int affectedRows = ESP_FixHyphens.Execute("vesp_FixHyphens") / 2;// Two results for each change txtProcess.AppendText(string.Format("Fixed {0} Hyphens", affectedRows)); txtProcess.AppendText(Environment.NewLine); - //txtProcess.AppendText(Environment.NewLine); txtResults.AppendText(string.Format("{0} Hyphens were Fixed.", affectedRows)); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); @@ -143,16 +142,10 @@ namespace VEPROMS return false; } - private List myTreeNodePath; - private void ResetTV() - { - ResetTV(false); - } - private void ResetTV(bool noProcs) + private void ResetTV(bool noProcs) { btnFixLinks.Enabled = false; this.Cursor = Cursors.WaitCursor; - //myTreeNodePath = new List(); myTV.Nodes.Clear(); myDocVersions.Clear(); myFolders.Clear(); @@ -165,10 +158,6 @@ namespace VEPROMS myTV.SelectedNode.Expand(); this.Cursor = Cursors.Default; } - private void ResetDelTV() - { - ResetDelTV(false); - } private void ResetDelTV(bool noProcs) { btnFixLinks.Enabled = false; @@ -208,13 +197,10 @@ namespace VEPROMS TreeNode tnc = tn.Nodes.Add(fic.Name); tnc.Tag = fic; - if (fic.ChildFolderCount > 0) - { - if (LoadChildFolders(fic, tnc, noProcs)) - loadedChildWorkingDraft = true; - } + if (fic.ChildFolderCount > 0 && LoadChildFolders(fic, tnc, noProcs)) + loadedChildWorkingDraft = true; - if (fic.FolderDocVersionCount > 0) + if (fic.FolderDocVersionCount > 0) { if (!LoadDocVersions(fic, tnc, noProcs)) tnc.Remove(); @@ -252,12 +238,9 @@ namespace VEPROMS { tnc.Tag = dvi; myDocVersions.Add(tnc, dvi); - if (!noProcs) - { - if (dvi.Procedures.Count > 0) - LoadProcedures(dvi, tnc); - } - rtnval = true; + if (!noProcs && dvi.Procedures.Count > 0) + LoadProcedures(dvi, tnc); + rtnval = true; } else { @@ -273,7 +256,7 @@ namespace VEPROMS } private void LoadProcedures(DocVersionInfo dvi, TreeNode tnc) { - foreach (ProcedureInfo pi in dvi.Procedures) + foreach (ProcedureInfo pi in dvi.Procedures.OfType()) { TreeNode tn = tnc.Nodes.Add(string.Format("{0} {1}", pi.DisplayNumber, pi.DisplayText)); myProcedures.Add(tn, pi); @@ -327,7 +310,7 @@ namespace VEPROMS // C2023-002: Loop through the docversion's procedures to determine which cannot be open and add to // list. The frmBatchRefreshCheckedOut dialog operates on procedures, not docversions. string msgp = string.Empty; - foreach (ProcedureInfo pi in dq.Procedures) + foreach (ProcedureInfo pi in dq.Procedures.OfType()) { if (!MySessionInfo.CanCheckOutItem(pi.ItemID, CheckOutType.Procedure, ref msgp)) pil.Add(pi); } @@ -520,7 +503,6 @@ namespace VEPROMS foreach (TreeNode tn in myProcedures.Keys) if (tn.Checked) pil.Add(myProcedures[tn]); - //PopulateTransitionInfoLists(pil); DateTime pStart = DateTime.Now; txtProcess.AppendText("Refresh Transitions"); txtProcess.AppendText(Environment.NewLine); @@ -710,7 +692,7 @@ namespace VEPROMS cc.Save(); } } - catch (Exception ex) + catch { this.Cursor = Cursors.Default; return -cntfix; @@ -722,42 +704,6 @@ namespace VEPROMS } return cntfix; } - // C2017-030 - new Admin Tools user interface - // tool renamed to Identify Orphan Items - private void IdentifyDisconnectedItems() - { - this.Cursor = Cursors.WaitCursor; - DateTime pStart = DateTime.Now; - txtProcess.AppendText("Identifing Orphan Items"); - txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - int rowCount = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount"); - txtProcess.AppendText(string.Format("Orphan Items Count: {0}", rowCount)); - txtProcess.AppendText(Environment.NewLine); - if (rowCount > 0) - { - txtResults.AppendText(string.Format("The database contains {0} Orphan items.", rowCount)); - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText("These can be removed via the Remove Orphan Data Records in the Repair tools"); - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(Environment.NewLine); - } - else - { - txtResults.AppendText("No Orphan Records Found");// B2017-108 Always output results even if there isn't any - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(Environment.NewLine); - } - DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - this.Cursor = Cursors.Default; - //MessageBox.Show(string.Format("{0} Completed", "Orphan Items Check"), "Orphan Items"); - } // C2017-030 - new Admin Tools user interface // tool renamed to Remove Orphan Items @@ -777,8 +723,6 @@ namespace VEPROMS int rowCount2 = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount"); txtProcess.AppendText(string.Format("Orphan Items Purged: {0}", rowCount)); txtProcess.AppendText(Environment.NewLine); - //txtProcess.AppendText(Environment.NewLine); - //txtResults.Clear(); txtResults.AppendText(string.Format("The database contained {0} Orphan items.", rowCount)); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); @@ -795,11 +739,10 @@ namespace VEPROMS } else { - //txtResults.Clear(); txtResults.AppendText(string.Format("The database contained {0} Orphan items.", rowCount)); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(string.Format("No Orpan Items to Purge!")); + txtResults.AppendText("No Orpan Items to Purge!"); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } @@ -811,45 +754,6 @@ namespace VEPROMS this.Cursor = Cursors.Default; } - // C2017-030 - new Admin Tools user interface - // is one of two tools run from Check Obsolete RO Data - private void IdentifyUnusedRoFstsAndFigures() - { - this.Cursor = Cursors.WaitCursor; - DateTime pStart = DateTime.Now; - txtProcess.AppendText("Identifing Unused RoFsts and Figures"); - txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - int rowCountRoFst = ESP_GetUnusedRoFsts.Execute("vesp_GetUnusedRoFstsCount"); - int rowCountFigures = ESP_GetUnusedFigures.Execute("vesp_GetUnusedFiguresCount"); - txtProcess.AppendText(string.Format("Unused RoFsts Count: {0}, Unused Figures Count: {1}", rowCountRoFst, rowCountFigures)); - txtProcess.AppendText(Environment.NewLine); - if (rowCountRoFst > 0 || rowCountFigures > 0) - { - txtResults.AppendText(string.Format("The database contains {0} unused RoFsts.", rowCountRoFst)); - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(string.Format("The database contains {0} unused Figures items.", rowCountFigures)); - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(Environment.NewLine); - } - else - { - txtResults.AppendText("No Unused RoFsts or Figures Found"); // B2017-108 Always output results even if there isn't any - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(Environment.NewLine); - } - - DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - this.Cursor = Cursors.Default; - } - // C2017-030 - new Admin Tools user interface is one of two tools run from Remove Obsolete RO Data private void RemoveUnusedRoFstsAndFigures() { @@ -893,41 +797,7 @@ namespace VEPROMS { txtProcess.AppendText(string.Format("The database contained {0} unused RoFSTs or Figures.", rowCountRoFst + rowCountFigures)); txtProcess.AppendText(Environment.NewLine); - txtResults.AppendText(string.Format("No Unused ROFSTs To Remove.")); - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(Environment.NewLine); - } - DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - this.Cursor = Cursors.Default; - } - - // C2017-030 - new Admin Tools user interface - // is one of two tools run from Check Obsolete RO Data - private void IdentifyROAssociations() - { - this.Cursor = Cursors.WaitCursor; - DateTime pStart = DateTime.Now; - txtProcess.AppendText("Identifing Unused RO Associations"); - txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - int rowCount = ESP_GetROAssoc.Execute("vesp_GetUnusedROAssociationsCount"); - txtProcess.AppendText(string.Format("Unused RO Associations Count: {0}", rowCount)); - txtProcess.AppendText(Environment.NewLine); - if (rowCount > 0) - { - txtResults.AppendText(string.Format("The database contains {0} unused RO Associations.", rowCount)); - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(Environment.NewLine); - } - else - { - txtResults.AppendText("No unused RO Associations Found");// B2017-108 Always output results even if there isn't any + txtResults.AppendText("No Unused ROFSTs To Remove."); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } @@ -976,7 +846,7 @@ namespace VEPROMS txtResults.AppendText(string.Format("The database contained {0} Unused RO Associations.", rowCount)); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(string.Format("No Unused RO Associations to Purge.")); + txtResults.AppendText("No Unused RO Associations to Purge."); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } @@ -988,49 +858,6 @@ namespace VEPROMS this.Cursor = Cursors.Default; } - // C2017-030 - new Admin Tools user interface - // tool was renamed to Hidden Data Locations (on Check list) - private void IdentifyNonEditableItems() - { - this.Cursor = Cursors.WaitCursor; - DateTime pStart = DateTime.Now; - txtProcess.AppendText("Identifing Hidden Item Locations"); - txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - List myItems = ESP_IdentifyNonEditableItems.Execute("vesp_GetNonEditableItems"); - txtProcess.AppendText(string.Format("Hidden Items Count: {0}", myItems.Count)); - txtProcess.AppendText(Environment.NewLine); - if (myItems.Count > 0) - { - txtResults.AppendText("The following items are hidden (non-editable)..."); - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(Environment.NewLine); - foreach (ItemInfo ii in myItems) - { - txtResults.AppendText(ii.Path); - txtResults.AppendText(Environment.NewLine); - } - txtResults.AppendText(Environment.NewLine); - } - else - { - txtResults.AppendText("No Hidden Data Found");// B2017-108 Always output results even if there isn't any - txtResults.AppendText(Environment.NewLine); - txtResults.AppendText(Environment.NewLine); - } - //C2025-011 RO Update Admin Tool Memory Enhancements - //clear the list since no longer using it - myItems.Clear(); - DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); - txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - this.Cursor = Cursors.Default; - } - // C2017-030 - new Admin Tools user interface // tool was renamed to Show Users private void GetDatabaseSessions() @@ -1095,7 +922,6 @@ namespace VEPROMS return; } - //FileInfo fiRofst = new FileInfo(rofstPath); Cursor = Cursors.WaitCursor; using (DocVersion dv = DocVersion.Get(dq.VersionID)) @@ -1109,7 +935,6 @@ namespace VEPROMS } roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, txtProcess); - //ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, null); roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate); } @@ -1122,14 +947,13 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); - return; } private void RefreshProcedureTransitions(ProcedureInfo pq) { DateTime start = DateTime.Now; ProcedureInfo.ResetTranCounters(); - ProcedureInfo.RefreshTransitions(pq);//, transitionsToDisconnected, transitionsToNonEditable); + ProcedureInfo.RefreshTransitions(pq); TimeSpan ts = DateTime.Now - start; // B2018-002 - Invalid Transitions - Display Transition Refresh Statistics txtProcess.AppendText(string.Format("Procedure: {1}{0}Checked {2} Transitions{0}Fixed {3} Transitions{0}Converted to Text {4} Transitions{0}Cant Fix (Annotation: Bad Transition Link) {5} Transitions{0}Elapsed Seconds:{6}{0}{0}", Environment.NewLine, pq.DisplayNumber, ProcedureInfo.TranCheckCount, ProcedureInfo.TranFixCount, ProcedureInfo.TranConvertCount, ProcedureInfo.TranCantFixCount, ts.TotalSeconds)); @@ -1145,42 +969,7 @@ namespace VEPROMS return VlnFlexGrid.ROTableUpdate(sender, args); } - private void PopulateTransitionInfoLists(List pil) - { - Dictionary dic = new Dictionary(); - StringBuilder sb = new StringBuilder(); - foreach (ProcedureInfo pi in pil) - if (!dic.ContainsKey(pi.MyDocVersion.VersionID)) - { - dic.Add(pi.MyDocVersion.VersionID, pi.MyDocVersion.VersionID); - sb.Append(sb.Length == 0 ? pi.MyDocVersion.VersionID.ToString() : "," + pi.MyDocVersion.VersionID.ToString()); - } - txtProcess.AppendText("Preparing to process..."); - txtProcess.AppendText(Environment.NewLine); - Application.DoEvents(); - //transitionsToDisconnected = TransitionInfoList.GetTransitionsToDisconnected(sb.ToString()); - //transitionsToNonEditable = TransitionInfoList.GetTransitionsToNonEditable(sb.ToString()); - } - - private void ProgressBarShowText() - { - pbProcess.Refresh(); - int percent = (int)(((double)(pbProcess.Value - pbProcess.Minimum) / - (double)(pbProcess.Maximum - pbProcess.Minimum)) * 100); - using (Graphics gr = pbProcess.CreateGraphics()) - { - gr.DrawString(percent.ToString() + "%", - SystemFonts.DefaultFont, - Brushes.Black, - new PointF(pbProcess.Width / 2 - (gr.MeasureString(percent.ToString() + "%", - SystemFonts.DefaultFont).Width / 2.0F), - pbProcess.Height / 2 - (gr.MeasureString(percent.ToString() + "%", - SystemFonts.DefaultFont).Height / 2.0F))); - } - Application.DoEvents(); - } - - StringBuilder myFixes; + StringBuilder myFixes; int myFixesCount = 0; int myConvertCount = 0; // show the changes made in the Results pannel, include the ItemId of the step element @@ -1199,7 +988,6 @@ namespace VEPROMS { txtResults.AppendText(string.Format("Fixed Referenced Object for {1}({4}){0}Old Text: {2}{0}New Text: {3}{0}{0}", Environment.NewLine, (sender as ItemInfo).ShortPath, args.OldValue, args.NewValue, (sender as ItemInfo).ItemID)); Application.DoEvents(); - //myFixes.AppendLine(string.Format("Fixed Referenced Object for {1}{0}Old Text: {2}{0}New Text: {3}{0}", Environment.NewLine, (sender as ItemInfo).ShortPath, args.OldValue, args.NewValue)); } else // B2018-002 - Invalid Transitions - Display Transition Cconversion Statistics { @@ -1354,14 +1142,6 @@ namespace VEPROMS pnlLater.Enabled = chkLater.Checked; } - // C2017-030 new Admin Tools user interface - private void sideNavItmCheck_Click(object sender, EventArgs e) - { - AdminToolType = E_AdminToolType.Check; - lblAdmToolProgressType.Text = "Checking:"; - setupProgessSteps1(); - } - // C2017-030 new Admin Tools user interface private void sideNavItmRepair_Click(object sender, EventArgs e) { @@ -1387,13 +1167,6 @@ namespace VEPROMS ResetTV(false); } - // C2017-030 new Admin Tools user interface - private void sideNavItmUsers_Click(object sender, EventArgs e) - { - AdminToolType = E_AdminToolType.Users; - setupProgessSteps1(); - } - // C2017-030 new Admin Tools user interface private void sideNavItmExit_Click(object sender, EventArgs e) { @@ -1413,27 +1186,18 @@ namespace VEPROMS ResetDelTV(false); } - // new Admin Tools user interface for deletes - //private void sideNavItmDelete_Click_1(object sender, EventArgs e) - //{ - - //} - #region On/Off Swiches // C2017-030 new Admin Tools user interface private enum E_AdminToolType : int { - Check = 0, Repair = 1, Links = 2, - Users = 3, Delete = 4 }; private E_AdminToolType AdminToolType = 0; DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records"); - DevComponents.DotNetBar.StepItem siHiddenDataLocs = new DevComponents.DotNetBar.StepItem("siHiddenDataLocs", "Hidden Data"); DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data"); DevComponents.DotNetBar.StepItem siStandardHyphens = new DevComponents.DotNetBar.StepItem("siStandardHyphens", "Standardize Hyphens"); DevComponents.DotNetBar.StepItem siRefreshAttmts = new DevComponents.DotNetBar.StepItem("siRefreshAttmts", "Refresh Word Attachments"); @@ -1446,18 +1210,6 @@ namespace VEPROMS switch (AdminToolType) { - case E_AdminToolType.Check: - if (swCkOrphanDataRecs.Value) - progressSteps1.Items.Add(siOrphDatRecs); - if (swHiddenDataLocs.Value) - progressSteps1.Items.Add(siHiddenDataLocs); - if (swCkObsoleteROData.Value) - progressSteps1.Items.Add(siObsoleteROData); - splitContainer3.Panel2Collapsed = false; - progressSteps1.Visible = true; - progressSteps1.Refresh(); - break; - case E_AdminToolType.Repair: if (swRmOrphanDataRecs.Value) progressSteps1.Items.Add(siOrphDatRecs); @@ -1475,7 +1227,6 @@ namespace VEPROMS break; case E_AdminToolType.Links: - case E_AdminToolType.Users: splitContainer3.Panel2Collapsed = true; progressSteps1.Visible = false; break; @@ -1532,7 +1283,6 @@ namespace VEPROMS private void StepProgress(int prgStpIdx, int val) { ((DevComponents.DotNetBar.StepItem)progressSteps1.Items[prgStpIdx]).Value = val; - return; } private void ClearStepProgress() @@ -1595,42 +1345,6 @@ namespace VEPROMS CheckROLinks(); // C2022-028 check for Bad RO Links } - private void btnRunCheck_Click(object sender, EventArgs e) - { - if (!CheckProcessLater()) return; // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process. - - int prgStpIdx = -1; - txtResults.Clear(); - txtProcess.Clear(); - - if (swCkOrphanDataRecs.Value) - { - StepProgress(++prgStpIdx, 50); - IdentifyDisconnectedItems(); // orphan items - StepProgress(prgStpIdx, 100); - } - - if (swHiddenDataLocs.Value) - { - StepProgress(++prgStpIdx, 50); - IdentifyNonEditableItems(); // hidden items - StepProgress(prgStpIdx, 100); - } - - if (swCkObsoleteROData.Value) - { - StepProgress(++prgStpIdx, 25); - IdentifyROAssociations(); - StepProgress(prgStpIdx, 50); - IdentifyUnusedRoFstsAndFigures(); - StepProgress(prgStpIdx, 100); - } - - MessageBox.Show("Check Functions Completed", "Check"); - - ClearStepProgress(); - } - private void btnRunRepair_Click(object sender, EventArgs e) { if (!CheckProcessLater()) return; // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process. @@ -1755,12 +1469,12 @@ namespace VEPROMS if (!MySessionInfo.CanCheckOutItem(dq.VersionID, CheckOutType.DocVersion, ref msg)) { string msgp = string.Empty; - foreach (ProcedureInfo pi in dq.Procedures) + foreach (ProcedureInfo pi in dq.Procedures.OfType()) { if (!MySessionInfo.CanCheckOutItem(pi.ItemID, CheckOutType.Procedure, ref msgp)) { FolderInfo fi = (FolderInfo)dq.ActiveParent; - int itemID = (int)fi.FolderID; + int itemID = fi.FolderID; string folderName = fi.Name; if (swDeleteFolder.Value) @@ -1853,7 +1567,7 @@ namespace VEPROMS { //Gather folder information FolderInfo fi = (FolderInfo)kvp.ActiveParent; - int itemID = (int)fi.FolderID; + int itemID = fi.FolderID; string folderName = fi.Name; // Perform the deletion operation @@ -1877,8 +1591,8 @@ namespace VEPROMS foreach (var kvp in emptyFoldersToDelete) { //Gather folder information - FolderInfo fi = (FolderInfo)kvp; - int itemID = (int)fi.FolderID; + FolderInfo fi = kvp; + int itemID = fi.FolderID; string folderName = fi.Name; // Perform the deletion operation @@ -1929,9 +1643,8 @@ namespace VEPROMS return true; } - catch (Exception ex) + catch { - string err = ex.ToString(); return false; } } diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.resx b/PROMS/VEPROMS User Interface/frmBatchRefresh.resx index bb1f3d20..55a3e983 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.resx +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.resx @@ -120,196 +120,6 @@ 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. - - - This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. - -Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. - -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 check referenced objects links in procedure step data for multiple working drafts in a batch mode. - -Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. - -Be sure a current backup of the database exists prior performing this function. - -It is recommended that this be done during off hours. - - - - - - 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 update referenced objects values for multiple working drafts in a batch mode. - -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 refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. - -Be sure a current backup of the database exists prior to running this function. - -If more than one procedure is selected, it is recommended that this be performed during off hours. - - - This allows the user to update referenced objects values for multiple working drafts in a batch mode. - -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 refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. - -Be sure a current backup of the database exists prior to running this function. - -If more than one procedure is selected, it is recommended that this be performed during off hours. - - - - 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= - - - - Referenced Objects databases are associated with a procedure set (such as Working Draft). - -RO paths, ROFST versions, and the contents of RO figures are stored in the database when referenced. This tool will identify stored RO Paths, ROFST versions, and Figures that are no longer used. - - - - Typically, a section in PROMS only has sub-sections or steps. When and existing section is divided into sub-sections, the resulting main section might have both. - -When this occurs, the step data in the main section can be marked as non-editable. The user can no longer get to these steps and they can become forgotten as PROMS will ignore these non-editable steps when the procedure is printed. - -This tool will identify if the database has non-editable steps and provide a listing of these steps. The use can then go to these main sections, make them editable via the property page, and delete or move these steps. - -This tool may take an extended period of time to execute. - - - - Referenced Objects databases are associated with a procedure set (such as Working Draft). - -RO paths, ROFST versions, and the contents of RO figures are stored in the database when referenced. This tool will identify stored RO Paths, ROFST versions, and Figures that are no longer used. - - - - Typically, a section in PROMS only has sub-sections or steps. When and existing section is divided into sub-sections, the resulting main section might have both. - -When this occurs, the step data in the main section can be marked as non-editable. The user can no longer get to these steps and they can become forgotten as PROMS will ignore these non-editable steps when the procedure is printed. - -This tool will identify if the database has non-editable steps and provide a listing of these steps. The use can then go to these main sections, make them editable via the property page, and delete or move these steps. - -This tool may take an extended period of time to execute. - - - - Everything in PROMS is inter-related. A working draft knows what is its first procedure and a procedure knows what is its first step. Likewise, a procedure knows what procedure is before it and after it. - -Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool detects any orphaned items in the database. - -This tool may take an extended period of time to execute. - - - - Everything in PROMS is inter-related. A working draft knows what is its first procedure and a procedure knows what is its first step. Likewise, a procedure knows what procedure is before it and after it. - -Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool detects any orphaned items in the database. - -This tool may take an extended period of time to execute. - - 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. @@ -322,6 +132,7 @@ 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 @@ -404,6 +215,130 @@ Should an item become orphaned (disconnected) from the rest of the data, it will Everything in PROMS is inter-related. A working draft knows what is its first procedure and a procedure knows what is its first step. Likewise, a procedure knows what procedure is before it and after it. 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. + +Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. + +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 check referenced objects links in procedure step data for multiple working drafts in a batch mode. + +Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + + 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 update referenced objects values for multiple working drafts in a batch mode. + +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 refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. + +Be sure a current backup of the database exists prior to running this function. + +If more than one procedure is selected, it is recommended that this be performed during off hours. + + + This allows the user to update referenced objects values for multiple working drafts in a batch mode. + +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 refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. + +Be sure a current backup of the database exists prior to running this function. + +If more than one procedure is selected, it is recommended that this be performed during off hours. + + + + 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= diff --git a/PROMS/VEPROMS User Interface/frmGenTools.cs b/PROMS/VEPROMS User Interface/frmGenTools.cs new file mode 100644 index 00000000..238519b6 --- /dev/null +++ b/PROMS/VEPROMS User Interface/frmGenTools.cs @@ -0,0 +1,436 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using VEPROMS.CSLA.Library; +using System.IO; +using Volian.Controls.Library; +using DevComponents.DotNetBar; +using JR.Utils.GUI.Forms; +using System.Linq; + +namespace VEPROMS +{ + public partial class frmGenTools : Form + { + private SessionInfo _MySessionInfo; + public SessionInfo MySessionInfo + { + get { return _MySessionInfo; } + set { _MySessionInfo = value; } + } + + public frmGenTools(SessionInfo sessionInfo, frmVEPROMS veProms) + { + InitializeComponent(); + _MySessionInfo = sessionInfo; + + // When opening General tools Check tab will be default. + this.sideNavItmCheck.Checked = true; + + setupProgessSteps1(); // C2017-030 - new Tools user interface + + } + + private void frmGenTools_Load(object sender, EventArgs e) + { + IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process. + } + private bool IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process. + private void frmGenTools_FormClosing(object sender, EventArgs e) + { + IsClosing = true;//B2017-221 Allow the batch dialog to close when waiting to process. + } + + // C2017-030 - new Tools user interface + // tool renamed to Identify Orphan Items + private void IdentifyDisconnectedItems() + { + this.Cursor = Cursors.WaitCursor; + DateTime pStart = DateTime.Now; + txtProcess.AppendText("Identifing Orphan Items"); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + int rowCount = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount"); + txtProcess.AppendText(string.Format("Orphan Items Count: {0}", rowCount)); + txtProcess.AppendText(Environment.NewLine); + if (rowCount > 0) + { + txtResults.AppendText(string.Format("The database contains {0} Orphan items.", rowCount)); + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText("These can be removed via the Remove Orphan Data Records in the Repair tools"); + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(Environment.NewLine); + } + else + { + txtResults.AppendText("No Orphan Records Found");// B2017-108 Always output results even if there isn't any + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(Environment.NewLine); + } + DateTime pEnd = DateTime.Now; + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + this.Cursor = Cursors.Default; + } + + // C2017-030 - new Tools user interface + // is one of two tools run from Check Obsolete RO Data + private void IdentifyUnusedRoFstsAndFigures() + { + this.Cursor = Cursors.WaitCursor; + DateTime pStart = DateTime.Now; + txtProcess.AppendText("Identifing Unused RoFsts and Figures"); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + int rowCountRoFst = ESP_GetUnusedRoFsts.Execute("vesp_GetUnusedRoFstsCount"); + int rowCountFigures = ESP_GetUnusedFigures.Execute("vesp_GetUnusedFiguresCount"); + txtProcess.AppendText(string.Format("Unused RoFsts Count: {0}, Unused Figures Count: {1}", rowCountRoFst, rowCountFigures)); + txtProcess.AppendText(Environment.NewLine); + if (rowCountRoFst > 0 || rowCountFigures > 0) + { + txtResults.AppendText(string.Format("The database contains {0} unused RoFsts.", rowCountRoFst)); + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(string.Format("The database contains {0} unused Figures items.", rowCountFigures)); + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(Environment.NewLine); + } + else + { + txtResults.AppendText("No Unused RoFsts or Figures Found"); // B2017-108 Always output results even if there isn't any + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(Environment.NewLine); + } + + DateTime pEnd = DateTime.Now; + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + this.Cursor = Cursors.Default; + } + + // C2017-030 - new Tools user interface + // is one of two tools run from Check Obsolete RO Data + private void IdentifyROAssociations() + { + this.Cursor = Cursors.WaitCursor; + DateTime pStart = DateTime.Now; + txtProcess.AppendText("Identifing Unused RO Associations"); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + int rowCount = ESP_GetROAssoc.Execute("vesp_GetUnusedROAssociationsCount"); + txtProcess.AppendText(string.Format("Unused RO Associations Count: {0}", rowCount)); + txtProcess.AppendText(Environment.NewLine); + if (rowCount > 0) + { + txtResults.AppendText(string.Format("The database contains {0} unused RO Associations.", rowCount)); + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(Environment.NewLine); + } + else + { + txtResults.AppendText("No unused RO Associations Found");// B2017-108 Always output results even if there isn't any + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(Environment.NewLine); + } + DateTime pEnd = DateTime.Now; + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + this.Cursor = Cursors.Default; + } + + // C2017-030 - new Tools user interface + // tool was renamed to Hidden Data Locations (on Check list) + private void IdentifyNonEditableItems() + { + this.Cursor = Cursors.WaitCursor; + DateTime pStart = DateTime.Now; + txtProcess.AppendText("Identifing Hidden Item Locations"); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + List myItems = ESP_IdentifyNonEditableItems.Execute("vesp_GetNonEditableItems"); + txtProcess.AppendText(string.Format("Hidden Items Count: {0}", myItems.Count)); + txtProcess.AppendText(Environment.NewLine); + if (myItems.Count > 0) + { + txtResults.AppendText("The following items are hidden (non-editable)..."); + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(Environment.NewLine); + foreach (ItemInfo ii in myItems) + { + txtResults.AppendText(ii.Path); + txtResults.AppendText(Environment.NewLine); + } + txtResults.AppendText(Environment.NewLine); + } + else + { + txtResults.AppendText("No Hidden Data Found");// B2017-108 Always output results even if there isn't any + txtResults.AppendText(Environment.NewLine); + txtResults.AppendText(Environment.NewLine); + } + //C2025-011 RO Update Tool Memory Enhancements + //clear the list since no longer using it + myItems.Clear(); + DateTime pEnd = DateTime.Now; + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + this.Cursor = Cursors.Default; + } + + // C2017-030 - new Tools user interface + // tool was renamed to Show Users + private void GetDatabaseSessions() + { + this.Cursor = Cursors.WaitCursor; + DateTime pStart = DateTime.Now; + txtProcess.AppendText("Show Users in PROMS"); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + txtResults.Clear(); + txtResults.AppendText(ESP_GetDatabaseSessions.Execute("vesp_GetDatabaseSessions")); + DateTime pEnd = DateTime.Now; + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + Application.DoEvents(); + this.Cursor = Cursors.Default; + MessageBox.Show("Show Users Completed", "Show Users"); + } + + public List roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args) + { + return VlnFlexGrid.ROTableUpdate(sender, args); + } + + private void btnClear_Click(object sender, EventArgs e) + { + txtResults.Clear(); + } + + private void btnSave_Click(object sender, EventArgs e) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.DefaultExt = "txt"; + sfd.AddExtension = true; + sfd.Filter = "Text Files (*.txt)|*.txt"; + sfd.FileName = string.Format("BatchRefreshResults_{0}", DateTime.Now.ToString("yyyyMMdd_HHmm")); + sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS"; + DialogResult dr = sfd.ShowDialog(); + + if (dr == DialogResult.OK) + { + System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName); + sw.Write(txtResults.Text); + sw.Close(); + } + } + + private ProgressBarItem _ProgressBar = null; + + public ProgressBarItem ProgressBar + { + get { return _ProgressBar; } + set + { + _ProgressBar = value; + _ProgressBar.TextVisible = true; + } + } + + private void chkLater_CheckedChanged(object sender, EventArgs e) + { + pnlLater.Enabled = chkLater.Checked; + } + + // C2017-030 new Tools user interface + private void sideNavItmCheck_Click(object sender, EventArgs e) + { + GenToolType = E_GenToolType.Check; + lblAdmToolProgressType.Text = "Checking:"; + setupProgessSteps1(); + } + + // C2017-030 new Tools user interface + private void sideNavItmUsers_Click(object sender, EventArgs e) + { + GenToolType = E_GenToolType.Users; + setupProgessSteps1(); + } + + // C2017-030 new Tools user interface + private void sideNavItmExit_Click(object sender, EventArgs e) + { + this.Close(); + } + + #region On/Off Swiches + + // C2017-030 new Tools user interface + private enum E_GenToolType : int + { + Check = 0, + Users = 3 + }; + private E_GenToolType GenToolType = 0; + + DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records"); + DevComponents.DotNetBar.StepItem siHiddenDataLocs = new DevComponents.DotNetBar.StepItem("siHiddenDataLocs", "Hidden Data"); + DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data"); + + // this will update/rebuild the progress bar in the bottom panel of Tools + private void setupProgessSteps1() + { + progressSteps1.Visible = false; + progressSteps1.Items.Clear(); + + switch (GenToolType) + { + case E_GenToolType.Check: + if (swCkOrphanDataRecs.Value) + progressSteps1.Items.Add(siOrphDatRecs); + if (swHiddenDataLocs.Value) + progressSteps1.Items.Add(siHiddenDataLocs); + if (swCkObsoleteROData.Value) + progressSteps1.Items.Add(siObsoleteROData); + splitContainer3.Panel2Collapsed = false; + progressSteps1.Visible = true; + progressSteps1.Refresh(); + break; + + case E_GenToolType.Users: + splitContainer3.Panel2Collapsed = true; + progressSteps1.Visible = false; + break; + } + } + + // used for all of the Switch buttons (ON/OFF buttons) + private void swCk_ValueChanged(object sender, EventArgs e) + { + setupProgessSteps1(); + } + + #endregion + + // C2017-030 New Tools user interface + // functions to handle the progress bar in the bottom panel of Tools + private void StepProgress(int prgStpIdx, int val) + { + ((DevComponents.DotNetBar.StepItem)progressSteps1.Items[prgStpIdx]).Value = val; + } + + private void ClearStepProgress() + { + for (int i = 0; i < progressSteps1.Items.Count; i++) + { + ((DevComponents.DotNetBar.StepItem)progressSteps1.Items[i]).Value = 0; + } + } + + // C2017-030 New Tools user interface + // button clicks for processing selected tools + //B2017-221 Allow the batch dialog to close when waiting to process. + private bool CheckProcessLater() // see if we should delay processing until later + { + if (chkLater.Checked) + { + long later = long.Parse(dtpDate.Value.ToString("yyyyMMdd") + dtpTime.Value.ToString("HHmm")); + long now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm")); + + while (now < later) + { + txtProcess.Clear(); + txtProcess.AppendText("Waiting..."); + System.Threading.Thread.Sleep(1000);//Check each second + if (IsClosing) return false;//B2017-221 Allow the batch dialog to close when waiting to process. + Application.DoEvents();// Allow user interface to react + now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm")); + } + } + + return true;// Close after complete + } + + // C2017-030 new Tools user interface + private void btn_ShowUsers_Click(object sender, EventArgs e) + { + if (!CheckProcessLater()) return; // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process. + + txtProcess.Clear(); + txtResults.Clear(); + + GetDatabaseSessions(); + } + + private void btnRunCheck_Click(object sender, EventArgs e) + { + if (!CheckProcessLater()) return; // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process. + + int prgStpIdx = -1; + txtResults.Clear(); + txtProcess.Clear(); + + if (swCkOrphanDataRecs.Value) + { + StepProgress(++prgStpIdx, 50); + IdentifyDisconnectedItems(); // orphan items + StepProgress(prgStpIdx, 100); + } + + if (swHiddenDataLocs.Value) + { + StepProgress(++prgStpIdx, 50); + IdentifyNonEditableItems(); // hidden items + StepProgress(prgStpIdx, 100); + } + + if (swCkObsoleteROData.Value) + { + StepProgress(++prgStpIdx, 25); + IdentifyROAssociations(); + StepProgress(prgStpIdx, 50); + IdentifyUnusedRoFstsAndFigures(); + StepProgress(prgStpIdx, 100); + } + + MessageBox.Show("Check Functions Completed", "Check"); + + ClearStepProgress(); + } + + //C2025-011 RO Update Tool Memory Enhancements + private void txtProcess_TextChanged(object sender, EventArgs e) + { + //clears the stack to help with memory - should never need to undo text changes to this. + txtProcess.ClearUndo(); + } + + private void txtResults_TextChanged(object sender, EventArgs e) + { + //clears the stack to help with memory - should never need to undo text changes to this. + txtResults.ClearUndo(); + } + } +} + + + + diff --git a/PROMS/VEPROMS User Interface/frmGenTools.designer.cs b/PROMS/VEPROMS User Interface/frmGenTools.designer.cs new file mode 100644 index 00000000..482713c9 --- /dev/null +++ b/PROMS/VEPROMS User Interface/frmGenTools.designer.cs @@ -0,0 +1,853 @@ +namespace VEPROMS +{ + partial class frmGenTools + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmGenTools)); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.panelEx3 = new DevComponents.DotNetBar.PanelEx(); + this.txtResults = new System.Windows.Forms.TextBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.btnSave = new System.Windows.Forms.Button(); + this.btnClear = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.expandableSplitter2 = new DevComponents.DotNetBar.ExpandableSplitter(); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.txtProcess = new System.Windows.Forms.TextBox(); + this.pbProcess = new System.Windows.Forms.ProgressBar(); + this.label6 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.pnlLater = new System.Windows.Forms.Panel(); + this.label5 = new System.Windows.Forms.Label(); + this.dtpTime = new System.Windows.Forms.DateTimePicker(); + this.dtpDate = new System.Windows.Forms.DateTimePicker(); + this.chkLater = new System.Windows.Forms.CheckBox(); + this.label4 = new System.Windows.Forms.Label(); + this.expandableSplitter1 = new DevComponents.DotNetBar.ExpandableSplitter(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.sideNav1 = new DevComponents.DotNetBar.Controls.SideNav(); + this.sideNavPanel1 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.warningBox3 = new DevComponents.DotNetBar.Controls.WarningBox(); + this.labelX7 = new DevComponents.DotNetBar.LabelX(); + this.line1 = new DevComponents.DotNetBar.Controls.Line(); + this.swCkObsoleteROData = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.swHiddenDataLocs = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX3 = new DevComponents.DotNetBar.LabelX(); + this.labelX2 = new DevComponents.DotNetBar.LabelX(); + this.swCkOrphanDataRecs = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.btnRunCheck = new DevComponents.DotNetBar.ButtonX(); + this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX(); + this.sideNavItem1 = new DevComponents.DotNetBar.Controls.SideNavItem(); + this.separator1 = new DevComponents.DotNetBar.Separator(); + this.sideNavItmCheck = new DevComponents.DotNetBar.Controls.SideNavItem(); + this.sideNavItmUsers = new DevComponents.DotNetBar.Controls.SideNavItem(); + this.sideNavItmExit = new DevComponents.DotNetBar.Controls.SideNavItem(); + this.panelEx4 = new DevComponents.DotNetBar.PanelEx(); + this.progressSteps1 = new DevComponents.DotNetBar.ProgressSteps(); + this.stepItem1 = new DevComponents.DotNetBar.StepItem(); + this.stepItem2 = new DevComponents.DotNetBar.StepItem(); + this.stepItem3 = new DevComponents.DotNetBar.StepItem(); + this.stepItem4 = new DevComponents.DotNetBar.StepItem(); + this.lblAdmToolProgressType = new DevComponents.DotNetBar.LabelX(); + this.buttonItem1 = new DevComponents.DotNetBar.ButtonItem(); + this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + this.panelEx3.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panelEx2.SuspendLayout(); + this.panel3.SuspendLayout(); + this.pnlLater.SuspendLayout(); + this.panelEx1.SuspendLayout(); + this.sideNav1.SuspendLayout(); + this.sideNavPanel1.SuspendLayout(); + this.sideNavPanel5.SuspendLayout(); + this.panelEx4.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.panelEx3); + this.splitContainer3.Panel1.Controls.Add(this.expandableSplitter2); + this.splitContainer3.Panel1.Controls.Add(this.panelEx2); + this.splitContainer3.Panel1.Controls.Add(this.expandableSplitter1); + this.splitContainer3.Panel1.Controls.Add(this.panelEx1); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.BackColor = System.Drawing.SystemColors.Control; + this.splitContainer3.Panel2.Controls.Add(this.panelEx4); + this.splitContainer3.Size = new System.Drawing.Size(1177, 586); + this.splitContainer3.SplitterDistance = 525; + this.splitContainer3.TabIndex = 2; + // + // panelEx3 + // + this.panelEx3.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx3.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx3.Controls.Add(this.txtResults); + this.panelEx3.Controls.Add(this.panel1); + this.panelEx3.Controls.Add(this.label3); + this.panelEx3.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx3.Location = new System.Drawing.Point(688, 0); + this.panelEx3.Name = "panelEx3"; + this.panelEx3.Size = new System.Drawing.Size(489, 525); + this.panelEx3.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx3.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx3.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx3.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx3.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx3.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx3.Style.GradientAngle = 90; + this.panelEx3.TabIndex = 31; + this.panelEx3.Text = "panelEx3"; + // + // txtResults + // + this.txtResults.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtResults.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtResults.Location = new System.Drawing.Point(0, 52); + this.txtResults.Multiline = true; + this.txtResults.Name = "txtResults"; + this.txtResults.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtResults.Size = new System.Drawing.Size(489, 473); + this.txtResults.TabIndex = 4; + this.txtResults.TextChanged += new System.EventHandler(this.txtResults_TextChanged); + // + // panel1 + // + this.panel1.Controls.Add(this.btnSave); + this.panel1.Controls.Add(this.btnClear); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 23); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(489, 29); + this.panel1.TabIndex = 3; + // + // btnSave + // + this.btnSave.Dock = System.Windows.Forms.DockStyle.Left; + this.btnSave.Location = new System.Drawing.Point(95, 0); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(95, 29); + this.btnSave.TabIndex = 3; + this.btnSave.Text = "Save Results"; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // btnClear + // + this.btnClear.Dock = System.Windows.Forms.DockStyle.Left; + this.btnClear.Location = new System.Drawing.Point(0, 0); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(95, 29); + this.btnClear.TabIndex = 2; + this.btnClear.Text = "Clear Results"; + this.btnClear.UseVisualStyleBackColor = true; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // label3 + // + this.label3.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.label3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label3.Dock = System.Windows.Forms.DockStyle.Top; + this.label3.Location = new System.Drawing.Point(0, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(489, 23); + this.label3.TabIndex = 2; + this.label3.Text = "Results"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // expandableSplitter2 + // + this.expandableSplitter2.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter2.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter2.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.expandableSplitter2.ExpandFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter2.ExpandFillColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter2.ExpandLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter2.ExpandLineColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter2.GripDarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter2.GripDarkColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter2.GripLightColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.expandableSplitter2.GripLightColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.expandableSplitter2.HotBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(151)))), ((int)(((byte)(61))))); + this.expandableSplitter2.HotBackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(184)))), ((int)(((byte)(94))))); + this.expandableSplitter2.HotBackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemPressedBackground2; + this.expandableSplitter2.HotBackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemPressedBackground; + this.expandableSplitter2.HotExpandFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter2.HotExpandFillColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter2.HotExpandLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter2.HotExpandLineColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter2.HotGripDarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter2.HotGripDarkColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter2.HotGripLightColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.expandableSplitter2.HotGripLightColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.expandableSplitter2.Location = new System.Drawing.Point(682, 0); + this.expandableSplitter2.Name = "expandableSplitter2"; + this.expandableSplitter2.Size = new System.Drawing.Size(6, 525); + this.expandableSplitter2.Style = DevComponents.DotNetBar.eSplitterStyle.Office2007; + this.expandableSplitter2.TabIndex = 38; + this.expandableSplitter2.TabStop = false; + // + // panelEx2 + // + this.panelEx2.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.Controls.Add(this.txtProcess); + this.panelEx2.Controls.Add(this.pbProcess); + this.panelEx2.Controls.Add(this.label6); + this.panelEx2.Controls.Add(this.panel3); + this.panelEx2.Controls.Add(this.label4); + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Dock = System.Windows.Forms.DockStyle.Left; + this.panelEx2.Location = new System.Drawing.Point(391, 0); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(291, 525); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx2.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx2.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx2.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.TabIndex = 22; + this.panelEx2.Text = "panelEx2"; + // + // txtProcess + // + this.txtProcess.AcceptsReturn = true; + this.txtProcess.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtProcess.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtProcess.Location = new System.Drawing.Point(0, 150); + this.txtProcess.Multiline = true; + this.txtProcess.Name = "txtProcess"; + this.txtProcess.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtProcess.Size = new System.Drawing.Size(291, 375); + this.txtProcess.TabIndex = 5; + this.txtProcess.TextChanged += new System.EventHandler(this.txtProcess_TextChanged); + // + // pbProcess + // + this.pbProcess.Dock = System.Windows.Forms.DockStyle.Top; + this.pbProcess.Location = new System.Drawing.Point(0, 125); + this.pbProcess.Name = "pbProcess"; + this.pbProcess.Size = new System.Drawing.Size(291, 25); + this.pbProcess.TabIndex = 6; + // + // label6 + // + this.label6.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.label6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label6.Dock = System.Windows.Forms.DockStyle.Top; + this.label6.Location = new System.Drawing.Point(0, 102); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(291, 23); + this.label6.TabIndex = 3; + this.label6.Text = "Process Status"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel3 + // + this.panel3.Controls.Add(this.pnlLater); + this.panel3.Controls.Add(this.chkLater); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 23); + this.panel3.Name = "panel3"; + this.panel3.Padding = new System.Windows.Forms.Padding(6); + this.panel3.Size = new System.Drawing.Size(291, 79); + this.panel3.TabIndex = 2; + // + // pnlLater + // + this.pnlLater.Controls.Add(this.label5); + this.pnlLater.Controls.Add(this.dtpTime); + 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.Name = "pnlLater"; + this.pnlLater.Padding = new System.Windows.Forms.Padding(6); + this.pnlLater.Size = new System.Drawing.Size(279, 37); + this.pnlLater.TabIndex = 3; + // + // label5 + // + 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.TabIndex = 5; + this.label5.Text = "@"; + // + // dtpTime + // + this.dtpTime.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.dtpTime.CustomFormat = "HH:mm"; + this.dtpTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.dtpTime.Location = new System.Drawing.Point(129, 9); + this.dtpTime.Name = "dtpTime"; + this.dtpTime.ShowUpDown = true; + this.dtpTime.Size = new System.Drawing.Size(133, 20); + this.dtpTime.TabIndex = 4; + // + // dtpDate + // + this.dtpDate.Format = System.Windows.Forms.DateTimePickerFormat.Short; + this.dtpDate.Location = new System.Drawing.Point(9, 9); + this.dtpDate.Name = "dtpDate"; + this.dtpDate.Size = new System.Drawing.Size(90, 20); + this.dtpDate.TabIndex = 3; + // + // chkLater + // + this.chkLater.AutoSize = true; + 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.TabIndex = 4; + this.chkLater.Text = "Process Later"; + this.chkLater.UseVisualStyleBackColor = true; + this.chkLater.CheckedChanged += new System.EventHandler(this.chkLater_CheckedChanged); + // + // label4 + // + this.label4.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.label4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label4.Dock = System.Windows.Forms.DockStyle.Top; + this.label4.Location = new System.Drawing.Point(0, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(291, 23); + this.label4.TabIndex = 3; + this.label4.Text = "Process"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // expandableSplitter1 + // + this.expandableSplitter1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter1.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter1.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.expandableSplitter1.ExpandFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter1.ExpandFillColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter1.ExpandLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter1.ExpandLineColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter1.GripDarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter1.GripDarkColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter1.GripLightColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.expandableSplitter1.GripLightColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.expandableSplitter1.HotBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(151)))), ((int)(((byte)(61))))); + this.expandableSplitter1.HotBackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(184)))), ((int)(((byte)(94))))); + this.expandableSplitter1.HotBackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemPressedBackground2; + this.expandableSplitter1.HotBackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemPressedBackground; + this.expandableSplitter1.HotExpandFillColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter1.HotExpandFillColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter1.HotExpandLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.expandableSplitter1.HotExpandLineColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText; + this.expandableSplitter1.HotGripDarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(147)))), ((int)(((byte)(207))))); + this.expandableSplitter1.HotGripDarkColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.expandableSplitter1.HotGripLightColor = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.expandableSplitter1.HotGripLightColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground; + this.expandableSplitter1.Location = new System.Drawing.Point(385, 0); + this.expandableSplitter1.Name = "expandableSplitter1"; + this.expandableSplitter1.Size = new System.Drawing.Size(6, 525); + this.expandableSplitter1.Style = DevComponents.DotNetBar.eSplitterStyle.Office2007; + this.expandableSplitter1.TabIndex = 4; + this.expandableSplitter1.TabStop = false; + // + // panelEx1 + // + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.sideNav1); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Dock = System.Windows.Forms.DockStyle.Left; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Size = new System.Drawing.Size(385, 525); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx1.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 0; + this.panelEx1.Text = "panelEx1"; + // + // sideNav1 + // + this.sideNav1.BackColor = System.Drawing.SystemColors.Control; + this.sideNav1.Controls.Add(this.sideNavPanel1); + this.sideNav1.Controls.Add(this.sideNavPanel5); + this.sideNav1.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNav1.EnableClose = false; + this.sideNav1.EnableMaximize = false; + this.sideNav1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.sideNavItem1, + this.separator1, + this.sideNavItmCheck, + this.sideNavItmUsers, + this.sideNavItmExit}); + this.sideNav1.Location = new System.Drawing.Point(0, 0); + this.sideNav1.Name = "sideNav1"; + this.sideNav1.Padding = new System.Windows.Forms.Padding(1); + this.sideNav1.Size = new System.Drawing.Size(385, 525); + this.sideNav1.TabIndex = 3; + this.sideNav1.Text = "sideNav1"; + // + // sideNavPanel1 + // + this.sideNavPanel1.Controls.Add(this.warningBox3); + this.sideNavPanel1.Controls.Add(this.labelX7); + this.sideNavPanel1.Controls.Add(this.line1); + this.sideNavPanel1.Controls.Add(this.swCkObsoleteROData); + this.sideNavPanel1.Controls.Add(this.swHiddenDataLocs); + this.sideNavPanel1.Controls.Add(this.labelX3); + this.sideNavPanel1.Controls.Add(this.labelX2); + this.sideNavPanel1.Controls.Add(this.swCkOrphanDataRecs); + this.sideNavPanel1.Controls.Add(this.labelX1); + this.sideNavPanel1.Controls.Add(this.btnRunCheck); + this.sideNavPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel1.Location = new System.Drawing.Point(88, 31); + this.sideNavPanel1.Name = "sideNavPanel1"; + this.sideNavPanel1.Size = new System.Drawing.Size(292, 493); + this.sideNavPanel1.TabIndex = 2; + // + // 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(17, 207); + 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 = 29; + this.warningBox3.Text = "NOTE These tools can take a long time to run"; + // + // labelX7 + // + this.labelX7.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX7.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX7.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX7.Location = new System.Drawing.Point(5, 3); + this.labelX7.Name = "labelX7"; + this.labelX7.Size = new System.Drawing.Size(251, 22); + this.labelX7.TabIndex = 19; + this.labelX7.Text = "Check for these Data Issues:"; + // + // line1 + // + this.line1.BackColor = System.Drawing.Color.Transparent; + this.line1.Location = new System.Drawing.Point(8, 179); + this.line1.Name = "line1"; + this.line1.Size = new System.Drawing.Size(285, 12); + this.line1.TabIndex = 18; + this.line1.Text = "line1"; + // + // swCkObsoleteROData + // + // + // + // + this.swCkObsoleteROData.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swCkObsoleteROData.Location = new System.Drawing.Point(10, 99); + this.swCkObsoleteROData.Name = "swCkObsoleteROData"; + this.swCkObsoleteROData.Size = new System.Drawing.Size(91, 22); + this.swCkObsoleteROData.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swCkObsoleteROData, new DevComponents.DotNetBar.SuperTooltipInfo("Obsolete RO Data", "", resources.GetString("swCkObsoleteROData.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 135))); + this.swCkObsoleteROData.SwitchClickTogglesValue = true; + this.swCkObsoleteROData.TabIndex = 14; + this.swCkObsoleteROData.Value = true; + this.swCkObsoleteROData.ValueObject = "Y"; + this.swCkObsoleteROData.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); + // + // swHiddenDataLocs + // + // + // + // + this.swHiddenDataLocs.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swHiddenDataLocs.Location = new System.Drawing.Point(10, 71); + this.swHiddenDataLocs.Name = "swHiddenDataLocs"; + this.swHiddenDataLocs.Size = new System.Drawing.Size(91, 22); + this.swHiddenDataLocs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swHiddenDataLocs, new DevComponents.DotNetBar.SuperTooltipInfo("Hidden Data Locations", "", resources.GetString("swHiddenDataLocs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.swHiddenDataLocs.SwitchClickTogglesValue = true; + this.swHiddenDataLocs.TabIndex = 15; + this.swHiddenDataLocs.Value = true; + this.swHiddenDataLocs.ValueObject = "Y"; + this.swHiddenDataLocs.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); + // + // labelX3 + // + this.labelX3.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX3.Location = new System.Drawing.Point(107, 99); + this.labelX3.Name = "labelX3"; + this.labelX3.Size = new System.Drawing.Size(154, 22); + this.superTooltip1.SetSuperTooltip(this.labelX3, new DevComponents.DotNetBar.SuperTooltipInfo("Obsolete RO Data", "", resources.GetString("labelX3.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 135))); + this.labelX3.TabIndex = 11; + this.labelX3.Text = "Obsolete RO Data"; + // + // labelX2 + // + this.labelX2.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX2.Location = new System.Drawing.Point(107, 71); + this.labelX2.Name = "labelX2"; + this.labelX2.Size = new System.Drawing.Size(140, 22); + this.superTooltip1.SetSuperTooltip(this.labelX2, new DevComponents.DotNetBar.SuperTooltipInfo("Hidden Data Locations", "", resources.GetString("labelX2.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.labelX2.TabIndex = 12; + this.labelX2.Text = "Hidden Data Locations"; + // + // swCkOrphanDataRecs + // + // + // + // + this.swCkOrphanDataRecs.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swCkOrphanDataRecs.Location = new System.Drawing.Point(10, 43); + this.swCkOrphanDataRecs.Name = "swCkOrphanDataRecs"; + this.swCkOrphanDataRecs.Size = new System.Drawing.Size(91, 22); + this.swCkOrphanDataRecs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swCkOrphanDataRecs, new DevComponents.DotNetBar.SuperTooltipInfo("Orphan Data Records", "", resources.GetString("swCkOrphanDataRecs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(275, 193))); + this.swCkOrphanDataRecs.SwitchClickTogglesValue = true; + this.swCkOrphanDataRecs.TabIndex = 9; + this.swCkOrphanDataRecs.Value = true; + this.swCkOrphanDataRecs.ValueObject = "Y"; + this.swCkOrphanDataRecs.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); + // + // labelX1 + // + this.labelX1.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX1.Location = new System.Drawing.Point(107, 43); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(172, 22); + this.superTooltip1.SetSuperTooltip(this.labelX1, new DevComponents.DotNetBar.SuperTooltipInfo("Orphan Data Records", "", resources.GetString("labelX1.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(275, 190))); + this.labelX1.TabIndex = 8; + this.labelX1.Text = "Orphan Data Records"; + // + // btnRunCheck + // + this.btnRunCheck.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnRunCheck.Checked = true; + this.btnRunCheck.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnRunCheck.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnRunCheck.Location = new System.Drawing.Point(5, 150); + this.btnRunCheck.Name = "btnRunCheck"; + this.btnRunCheck.Size = new System.Drawing.Size(286, 23); + this.btnRunCheck.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.btnRunCheck, new DevComponents.DotNetBar.SuperTooltipInfo("Run Check", "", "This will run the database check tools selected.\r\n\r\nClick on the on/off switches " + + "to turn on/off each tool.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 100))); + this.btnRunCheck.TabIndex = 7; + this.btnRunCheck.Text = "Run Check"; + this.btnRunCheck.Click += new System.EventHandler(this.btnRunCheck_Click); + // + // sideNavPanel5 + // + this.sideNavPanel5.Controls.Add(this.btn_ShowUsers); + this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel5.Location = new System.Drawing.Point(88, 31); + this.sideNavPanel5.Name = "sideNavPanel5"; + this.sideNavPanel5.Size = new System.Drawing.Size(292, 493); + this.sideNavPanel5.TabIndex = 14; + this.sideNavPanel5.Visible = false; + // + // btn_ShowUsers + // + this.btn_ShowUsers.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btn_ShowUsers.Checked = true; + this.btn_ShowUsers.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btn_ShowUsers.Location = new System.Drawing.Point(57, 37); + this.btn_ShowUsers.Name = "btn_ShowUsers"; + this.btn_ShowUsers.Size = new System.Drawing.Size(171, 23); + this.btn_ShowUsers.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.btn_ShowUsers, new DevComponents.DotNetBar.SuperTooltipInfo("Show Users", "", "This will return all of the users currently with open sessions in the database an" + + "d the details of any items they have checked out.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 80))); + this.btn_ShowUsers.TabIndex = 0; + this.btn_ShowUsers.Text = "Show Users"; + this.btn_ShowUsers.Click += new System.EventHandler(this.btn_ShowUsers_Click); + // + // sideNavItem1 + // + this.sideNavItem1.IsSystemMenu = true; + this.sideNavItem1.Name = "sideNavItem1"; + this.sideNavItem1.Symbol = ""; + this.sideNavItem1.Text = "General\r\nTools"; + // + // separator1 + // + this.separator1.FixedSize = new System.Drawing.Size(3, 1); + this.separator1.Name = "separator1"; + this.separator1.Padding.Bottom = 2; + this.separator1.Padding.Left = 6; + this.separator1.Padding.Right = 6; + this.separator1.Padding.Top = 2; + this.separator1.SeparatorOrientation = DevComponents.DotNetBar.eDesignMarkerOrientation.Vertical; + // + // sideNavItmCheck + // + this.sideNavItmCheck.Checked = true; + this.sideNavItmCheck.Name = "sideNavItmCheck"; + this.sideNavItmCheck.Panel = this.sideNavPanel1; + this.sideNavItmCheck.Symbol = ""; + this.sideNavItmCheck.Text = "Check"; + this.sideNavItmCheck.Click += new System.EventHandler(this.sideNavItmCheck_Click); + // + // sideNavItmUsers + // + this.sideNavItmUsers.Name = "sideNavItmUsers"; + this.sideNavItmUsers.Panel = this.sideNavPanel5; + this.sideNavItmUsers.Symbol = ""; + this.sideNavItmUsers.Text = "Users"; + this.sideNavItmUsers.Click += new System.EventHandler(this.sideNavItmUsers_Click); + // + // sideNavItmExit + // + this.sideNavItmExit.Name = "sideNavItmExit"; + this.sideNavItmExit.Symbol = ""; + this.sideNavItmExit.Text = "Exit"; + this.sideNavItmExit.Click += new System.EventHandler(this.sideNavItmExit_Click); + // + // panelEx4 + // + this.panelEx4.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx4.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx4.Controls.Add(this.progressSteps1); + this.panelEx4.Controls.Add(this.lblAdmToolProgressType); + this.panelEx4.DialogResult = System.Windows.Forms.DialogResult.OK; + this.panelEx4.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx4.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelEx4.Location = new System.Drawing.Point(0, 0); + this.panelEx4.Name = "panelEx4"; + this.panelEx4.Size = new System.Drawing.Size(1177, 57); + this.panelEx4.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx4.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.panelEx4.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.panelEx4.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx4.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx4.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx4.Style.GradientAngle = 90; + this.panelEx4.TabIndex = 20; + // + // progressSteps1 + // + this.progressSteps1.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.progressSteps1.BackgroundStyle.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240))))); + this.progressSteps1.BackgroundStyle.Class = "ProgressSteps"; + this.progressSteps1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.progressSteps1.ContainerControlProcessDialogKey = true; + this.progressSteps1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.progressSteps1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.stepItem1, + this.stepItem2, + this.stepItem3, + this.stepItem4}); + this.progressSteps1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; + this.progressSteps1.Location = new System.Drawing.Point(123, 18); + this.progressSteps1.Name = "progressSteps1"; + this.progressSteps1.Size = new System.Drawing.Size(1032, 26); + this.progressSteps1.TabIndex = 18; + // + // stepItem1 + // + this.stepItem1.Maximum = 10; + this.stepItem1.Name = "stepItem1"; + this.stepItem1.SymbolSize = 13F; + this.stepItem1.Text = "Discon"; + // + // stepItem2 + // + this.stepItem2.Maximum = 10; + this.stepItem2.Name = "stepItem2"; + this.stepItem2.SymbolSize = 13F; + this.stepItem2.Text = "Non-Edit"; + // + // stepItem3 + // + this.stepItem3.Maximum = 10; + this.stepItem3.Name = "stepItem3"; + this.stepItem3.SymbolSize = 13F; + this.stepItem3.Text = "RO Assoc"; + // + // stepItem4 + // + this.stepItem4.Maximum = 10; + this.stepItem4.Name = "stepItem4"; + this.stepItem4.SymbolSize = 13F; + this.stepItem4.Text = "FST+Figs"; + // + // lblAdmToolProgressType + // + this.lblAdmToolProgressType.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.lblAdmToolProgressType.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lblAdmToolProgressType.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblAdmToolProgressType.Location = new System.Drawing.Point(19, 10); + this.lblAdmToolProgressType.Name = "lblAdmToolProgressType"; + this.lblAdmToolProgressType.Size = new System.Drawing.Size(98, 34); + this.lblAdmToolProgressType.TabIndex = 19; + this.lblAdmToolProgressType.Text = "Checking:"; + // + // buttonItem1 + // + this.buttonItem1.Name = "buttonItem1"; + this.buttonItem1.Text = "buttonItem1"; + // + // superTooltip1 + // + this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray); + this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; + // + // frmGenTools + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1177, 586); + this.Controls.Add(this.splitContainer3); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "frmGenTools"; + this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "General Tools"; + this.Load += new System.EventHandler(this.frmGenTools_Load); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); + this.splitContainer3.ResumeLayout(false); + this.panelEx3.ResumeLayout(false); + this.panelEx3.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panelEx2.ResumeLayout(false); + this.panelEx2.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.pnlLater.ResumeLayout(false); + this.pnlLater.PerformLayout(); + this.panelEx1.ResumeLayout(false); + this.sideNav1.ResumeLayout(false); + this.sideNav1.PerformLayout(); + this.sideNavPanel1.ResumeLayout(false); + this.sideNavPanel5.ResumeLayout(false); + this.panelEx4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.SplitContainer splitContainer3; + private DevComponents.DotNetBar.PanelEx panelEx3; + private System.Windows.Forms.TextBox txtResults; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.Button btnClear; + private System.Windows.Forms.Label label3; + private DevComponents.DotNetBar.PanelEx panelEx2; + private System.Windows.Forms.TextBox txtProcess; + private System.Windows.Forms.ProgressBar pbProcess; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel pnlLater; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.DateTimePicker dtpTime; + private System.Windows.Forms.DateTimePicker dtpDate; + private System.Windows.Forms.CheckBox chkLater; + private System.Windows.Forms.Label label4; + private DevComponents.DotNetBar.Controls.SideNav sideNav1; + private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel1; + private DevComponents.DotNetBar.LabelX labelX7; + private DevComponents.DotNetBar.Controls.Line line1; + private DevComponents.DotNetBar.Controls.SwitchButton swCkObsoleteROData; + private DevComponents.DotNetBar.Controls.SwitchButton swHiddenDataLocs; + private DevComponents.DotNetBar.LabelX labelX3; + private DevComponents.DotNetBar.LabelX labelX2; + private DevComponents.DotNetBar.Controls.SwitchButton swCkOrphanDataRecs; + private DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.ButtonX btnRunCheck; + private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel5; + private DevComponents.DotNetBar.ButtonX btn_ShowUsers; + private DevComponents.DotNetBar.Controls.SideNavItem sideNavItem1; + private DevComponents.DotNetBar.Separator separator1; + private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmCheck; + private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmUsers; + private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmExit; + private DevComponents.DotNetBar.LabelX lblAdmToolProgressType; + private DevComponents.DotNetBar.ProgressSteps progressSteps1; + private DevComponents.DotNetBar.StepItem stepItem1; + private DevComponents.DotNetBar.StepItem stepItem2; + private DevComponents.DotNetBar.StepItem stepItem3; + private DevComponents.DotNetBar.StepItem stepItem4; + private DevComponents.DotNetBar.SuperTooltip superTooltip1; + private DevComponents.DotNetBar.ExpandableSplitter expandableSplitter2; + private DevComponents.DotNetBar.ExpandableSplitter expandableSplitter1; + private DevComponents.DotNetBar.PanelEx panelEx1; + private DevComponents.DotNetBar.PanelEx panelEx4; + private DevComponents.DotNetBar.Controls.WarningBox warningBox3; + private DevComponents.DotNetBar.ButtonItem buttonItem1; + } +} + + diff --git a/PROMS/VEPROMS User Interface/frmGenTools.resx b/PROMS/VEPROMS User Interface/frmGenTools.resx new file mode 100644 index 00000000..12f79aef --- /dev/null +++ b/PROMS/VEPROMS User Interface/frmGenTools.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + Referenced Objects databases are associated with a procedure set (such as Working Draft). + +RO paths, ROFST versions, and the contents of RO figures are stored in the database when referenced. This tool will identify stored RO Paths, ROFST versions, and Figures that are no longer used. + + + + Typically, a section in PROMS only has sub-sections or steps. When and existing section is divided into sub-sections, the resulting main section might have both. + +When this occurs, the step data in the main section can be marked as non-editable. The user can no longer get to these steps and they can become forgotten as PROMS will ignore these non-editable steps when the procedure is printed. + +This tool will identify if the database has non-editable steps and provide a listing of these steps. The use can then go to these main sections, make them editable via the property page, and delete or move these steps. + +This tool may take an extended period of time to execute. + + + + Referenced Objects databases are associated with a procedure set (such as Working Draft). + +RO paths, ROFST versions, and the contents of RO figures are stored in the database when referenced. This tool will identify stored RO Paths, ROFST versions, and Figures that are no longer used. + + + + Typically, a section in PROMS only has sub-sections or steps. When and existing section is divided into sub-sections, the resulting main section might have both. + +When this occurs, the step data in the main section can be marked as non-editable. The user can no longer get to these steps and they can become forgotten as PROMS will ignore these non-editable steps when the procedure is printed. + +This tool will identify if the database has non-editable steps and provide a listing of these steps. The use can then go to these main sections, make them editable via the property page, and delete or move these steps. + +This tool may take an extended period of time to execute. + + + + Everything in PROMS is inter-related. A working draft knows what is its first procedure and a procedure knows what is its first step. Likewise, a procedure knows what procedure is before it and after it. + +Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool detects any orphaned items in the database. + +This tool may take an extended period of time to execute. + + + + Everything in PROMS is inter-related. A working draft knows what is its first procedure and a procedure knows what is its first step. Likewise, a procedure knows what procedure is before it and after it. + +Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool detects any orphaned items in the database. + +This tool may take an extended period of time to execute. + + + + 46 + + \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 74e4ae41..7f515749 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -2013,6 +2013,7 @@ namespace VEPROMS private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormats; private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormatsExport; private DevComponents.DotNetBar.ButtonItem btnUserControlOfFormatsImport; + private DevComponents.DotNetBar.ButtonItem btnGeneralTools; private TabItemsToClose _MyCloseTabList = new TabItemsToClose(); public TabItemsToClose MyCloseTabList @@ -2251,6 +2252,16 @@ namespace VEPROMS btnAdministrativeTools.Click += new EventHandler(btnAdministrativeTools_Click); btnAdmin.SubItems.Add(btnAdministrativeTools); + //general Tools + btnGeneralTools = new ButtonItem("btnGeneralTools", "General Tools"); + btnGeneralTools.Visible = btnGeneralTools.Enabled = true; + btnGeneralTools.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText; + btnGeneralTools.CanCustomize = false; + btnGeneralTools.Image = global::VEPROMS.Properties.Resources.toolbox; + btnGeneralTools.Click += new EventHandler(btnGeneralTools_Click); + itemContainer3.SubItems.Add(btnGeneralTools); + + // C2025-031 added tool tip messages this.superTooltip1.SetSuperTooltip(btnManageSecurity, new SuperTooltipInfo("Manage Security", "", "Add, Modify, and Delete PROMS User Access", null, null, eTooltipColor.Gray)); // remove commented out line below when User Control of Formats code is deleted @@ -2258,6 +2269,7 @@ namespace VEPROMS this.superTooltip1.SetSuperTooltip(btnResetSecurity, new SuperTooltipInfo("Reset Security", "", "WARNING this will \nREMOVE ALL PROMS USERS and Reset to the\nOriginal Volian Defaults", null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnAdministrativeTools, new SuperTooltipInfo("Administrative Tools", "", "Open the PROMS Adminstration Tools Window", null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnUpdateFormats, new SuperTooltipInfo("Update Formats", "", "Install New Formats \n or Re-Install Formats", null, null, eTooltipColor.Gray)); + this.superTooltip1.SetSuperTooltip(btnGeneralTools, new SuperTooltipInfo("General Tools", "", "Open the PROMS General Tools Window", null, null, eTooltipColor.Gray)); try { @@ -2954,6 +2966,13 @@ namespace VEPROMS frm.ShowDialog(this); } + void btnGeneralTools_Click(object sender, EventArgs e) + { + frmGenTools frm = new frmGenTools(MySessionInfo, this); + frm.ProgressBar = bottomProgBar; + frm.ShowDialog(this); + } + private static VolianTimer _TimeActivity1 = new VolianTimer("frmVEPROMS.cs tmrCloseTabItems_Tick", 2108); void tmrCloseTabItems_Tick(object sender, EventArgs e) -- 2.49.1 From 69cc71ab3bb113c0ad226c556de0abc24ce6915b Mon Sep 17 00:00:00 2001 From: mschill Date: Wed, 27 Aug 2025 07:01:39 -0400 Subject: [PATCH 07/25] C2025-051 Missed one default when removing Check and Users Tabs from Admin Tool --- PROMS/VEPROMS User Interface/frmBatchRefresh.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs index 2e616419..dc19aa61 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs @@ -969,7 +969,7 @@ namespace VEPROMS return VlnFlexGrid.ROTableUpdate(sender, args); } - StringBuilder myFixes; + StringBuilder myFixes; int myFixesCount = 0; int myConvertCount = 0; // show the changes made in the Results pannel, include the ItemId of the step element @@ -1195,7 +1195,7 @@ namespace VEPROMS Links = 2, Delete = 4 }; - private E_AdminToolType AdminToolType = 0; + private E_AdminToolType AdminToolType = E_AdminToolType.Repair; DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records"); DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data"); -- 2.49.1 From 525173bc9f19c55882a34e6cd888cf91ed57ce00 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 27 Aug 2025 12:59:53 -0400 Subject: [PATCH 08/25] C2025-022-Remove-UCF-2 --- PROMS/Formats/fmtall/BASEall.xml | Bin 96090 -> 91078 bytes PROMS/VEPROMS User Interface/App.config | 14 +- .../Properties/AssemblyInfo.cs | 17 +- .../Properties/Settings.Designer.cs | 12 - .../Properties/Settings.settings | 5 - .../VEPROMS User Interface/VEPROMS_UI.csproj | 11 - .../VEPROMS_UI.csproj_bak_2 | 655 ++++++++++++++++++ .../dlgApproveProcedure.cs | 2 +- .../VEPROMS User Interface/dlgExportImport.cs | 244 +++---- .../dlgExportImportEP.cs | 6 +- .../dlgUCFDetail.Designer.cs | 61 -- PROMS/VEPROMS User Interface/dlgUCFDetail.cs | 77 -- .../VEPROMS User Interface/dlgUCFDetail.resx | 120 ---- .../frmFolderProperties.cs | 34 +- .../frmSectionProperties.cs | 4 +- .../frmSysOptions.Designer.cs | 10 +- PROMS/VEPROMS User Interface/frmSysOptions.cs | 112 +-- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 7 +- .../Config/FormatConfig.cs | 83 +-- .../Extension/ContentExt.cs | 236 +++---- .../Extension/DisplayText.cs | 24 +- .../Extension/FormatExt.cs | 124 ++-- .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 40 +- .../Format/PlantFormat.cs | 119 ++-- PROMS/Volian.Controls.Library/DisplayTags.cs | 28 +- .../Volian.Controls.Library.csproj | 9 - .../dlgUCFImportOptions.Designer.cs | 397 ----------- .../dlgUCFImportOptions.cs | 183 ----- .../dlgUCFImportOptions.resx | 126 ---- PROMS/Volian.Print.Library/vlnParagraph.cs | 2 +- 30 files changed, 1159 insertions(+), 1603 deletions(-) create mode 100644 PROMS/VEPROMS User Interface/VEPROMS_UI.csproj_bak_2 delete mode 100644 PROMS/VEPROMS User Interface/dlgUCFDetail.Designer.cs delete mode 100644 PROMS/VEPROMS User Interface/dlgUCFDetail.cs delete mode 100644 PROMS/VEPROMS User Interface/dlgUCFDetail.resx delete mode 100644 PROMS/Volian.Controls.Library/dlgUCFImportOptions.Designer.cs delete mode 100644 PROMS/Volian.Controls.Library/dlgUCFImportOptions.cs delete mode 100644 PROMS/Volian.Controls.Library/dlgUCFImportOptions.resx diff --git a/PROMS/Formats/fmtall/BASEall.xml b/PROMS/Formats/fmtall/BASEall.xml index 8ca3756eb07244f11ea212a94c792a3cf220be2f..bfdff426c9a08e9a9ebddb19dab2154aaa7b6dc2 100644 GIT binary patch delta 32 ocmcchj`i4a)(w2Nn=NehSSBw}V3~d(kCCPMM#%OXA&gB*0ON8E4FCWD delta 3465 zcmcInOHUI~6h4#Ct_&0ksYQuH6A~3oJB7B>D5ezAx8dEY!=XLKn-}%ntn|}K2`u4;1zIlM1 zOL$x}G)Pxi@LX&Fa= zok@(i`YA?n#uDAucB`iMTs*LBLM$7_rZg?#w@6nhMH`#Gu%?OfOSuMyFwH~K6RQwG-F6k5jo`B=JHCtW$Y9U< zUR4+rvVMBCQ#?8wcZSkkm?G5A-5C}0I?cnuqLVu^{w7!D@I;8hN{2D(Ja*z1L#)<5T#fZyMuMGD{VE3U6gi22@XX{ zAr5a!@|Oa;Ii!%cavJBXVAYOIY4a%91mLI*U_%zfydB_a1hD1+T-rVg;Apa#61XXQ zI;~?s76Gw<;asH4w27-U+N6XEw&Ph^tgjgAs8dr3FbcgwA+Uva?Qx z0N6xb77JW~u`3~dg&LC|=kaC6n#5ZmkSF`;|) zf~#0-7&x_(m>9d@ZS6WzxP~g@g2wBtJ_Zd4pNheQWx+pBxVG+(`iRqb!~@tT(a diff --git a/PROMS/VEPROMS User Interface/App.config b/PROMS/VEPROMS User Interface/App.config index 6a31a77c..14a49ac2 100644 --- a/PROMS/VEPROMS User Interface/App.config +++ b/PROMS/VEPROMS User Interface/App.config @@ -135,10 +135,10 @@ True - + - + 0.0 @@ -150,14 +150,17 @@ True - + - + True + + False + False @@ -170,6 +173,9 @@ False + + + diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs index e3695856..5ab99892 100644 --- a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs +++ b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs @@ -44,8 +44,21 @@ using System.Runtime.InteropServices; // Revision DHH (day - no leading zero, two digit hour - military time // // ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** -[assembly: AssemblyVersion("2.2.2508.2100")] -[assembly: AssemblyFileVersion("2.2.2508.2100")] +[assembly: AssemblyVersion("2.2.2508.2621")] +[assembly: AssemblyFileVersion("2.2.2508.2621")] + + + + + + + + + + + + + diff --git a/PROMS/VEPROMS User Interface/Properties/Settings.Designer.cs b/PROMS/VEPROMS User Interface/Properties/Settings.Designer.cs index 022d7469..91dd38c4 100644 --- a/PROMS/VEPROMS User Interface/Properties/Settings.Designer.cs +++ b/PROMS/VEPROMS User Interface/Properties/Settings.Designer.cs @@ -410,17 +410,5 @@ namespace VEPROMS.Properties { this["VisioPath"] = value; } } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("0")] - public int UCFImportOpt { - get { - return ((int)(this["UCFImportOpt"])); - } - set { - this["UCFImportOpt"] = value; - } - } } } diff --git a/PROMS/VEPROMS User Interface/Properties/Settings.settings b/PROMS/VEPROMS User Interface/Properties/Settings.settings index 193c02ad..761fa632 100644 --- a/PROMS/VEPROMS User Interface/Properties/Settings.settings +++ b/PROMS/VEPROMS User Interface/Properties/Settings.settings @@ -80,11 +80,9 @@ True - False - False @@ -103,8 +101,5 @@ - - 0 - \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index 184da061..8e9950ab 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -244,12 +244,6 @@ dlgTransitionReport.cs - - Form - - - dlgUCFDetail.cs - Form @@ -368,9 +362,6 @@ dlgSetChangeBarStartDate.cs - - dlgUCFDetail.cs - frmAnnotationsCleanup.cs @@ -586,8 +577,6 @@ - - diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj_bak_2 b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj_bak_2 new file mode 100644 index 00000000..ee9fe31a --- /dev/null +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj_bak_2 @@ -0,0 +1,655 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {8D1C47B4-F302-4C5A-87CC-24FDC5529872} + WinExe + Properties + VEPROMS + VEPROMS + veproms.ico + + + + + + + + + v4.8.1 + + + + + 2.0 + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + true + bin\Demo\ + DEBUG;TRACE + full + x86 + prompt + false + + + true + bin\Debug\ + DEBUG;TRACE + full + x86 + prompt + false + + + bin\debug\ + TRACE + true + pdbonly + x86 + prompt + false + + + true + bin\Demo\ + TRACE;DEMO + full + x86 + prompt + false + + + + + + + + False + ..\..\..\..\3rdPartyLibraries\CSLA\CSLA20cs_DLL_Net_4.8.1_Build\Csla.dll + + + False + ..\..\..\..\3rdPartyLibraries\DotNetBar\DotNetBar4.6Build\DevComponents.DotNetBar2.dll + + + False + ..\..\..\..\3rdPartyLibraries\Ionic\Ionic.Zip.dll + + + ..\..\..\..\3rdPartyLibraries\RtfConverter\bin\Debug\Itenso.Rtf.Interpreter.dll + + + ..\..\..\..\3rdPartyLibraries\RtfConverter\bin\Debug\Itenso.Rtf.Parser.dll + + + False + ..\..\..\..\3rdPartyLibraries\Log4Net\log4net.dll + + + + + True + + + + + + + + + + + + False + ..\VEPROMS.CSLA.Library\bin\Debug\VEPROMS.CSLA.Library.dll + + + + + Form + + + AboutVEPROMS.cs + + + + Form + + + dlgAnnotationsSelect.cs + + + True + True + dlgAnnotationsSelect.resx + + + Form + + + dlgApproveProcedure.cs + + + Form + + + dlgCheckedOutProcedure.cs + + + Form + + + Form + + + dlgMSWordMessage.cs + + + Form + + + dlgCheckOpenTabs.cs + + + Form + + + DlgCloseTabsOrExit.cs + + + Form + + + dlgExportImport.cs + + + Form + + + dlgImpHowToHandleROs.cs + + + Form + + + dlgManageSecurity.cs + + + Form + + + dlgPhoneList.cs + + + Form + + + dlgPickROFolder.cs + + + Form + + + DlgPrintProcedure.cs + + + Form + + + dlgSetChangeBarStartDate.cs + + + Form + + + dlgTransitionReport.cs + + + Form + + + dlgUCFDetail.cs + + + Form + + + frmAnnotationsCleanup.cs + + + Form + + + frmBatchRefresh.cs + + + Form + + + frmBatchRefreshCheckedOut.cs + + + Form + + + frmManageUser.cs + + + Form + + + frmPDFStatusForm.cs + + + Form + + + frmPSI.cs + + + Form + + + frmRODbProperties.cs + + + Form + + + frmSI.cs + + + Form + + + frmVEPROMS.cs + + + Form + + + frmFolderProperties.cs + + + Form + + + frmProcedureProperties.cs + + + Form + + + frmPropGrid.cs + + + Form + + + frmSectionProperties.cs + + + Form + + + frmSysOptions.cs + + + Form + + + frmVersionsProperties.cs + + + + Designer + AboutVEPROMS.cs + + + dlgAnnotationsSelect.cs + ResXFileCodeGenerator + + + dlgMSWordMessage.cs + + + dlgCheckOpenTabs.cs + + + DlgCloseTabsOrExit.cs + + + dlgImpHowToHandleROs.cs + + + DlgPrintProcedure.cs + Designer + + + dlgSetChangeBarStartDate.cs + + + dlgUCFDetail.cs + + + frmAnnotationsCleanup.cs + + + frmPDFStatusForm.cs + Designer + + + Designer + frmPSI.cs + + + Designer + frmRODbProperties.cs + + + frmSI.cs + + + Designer + frmVEPROMS.cs + + + frmFolderProperties.cs + Designer + + + frmProcedureProperties.cs + Designer + + + Designer + frmPropGrid.cs + + + frmSectionProperties.cs + Designer + + + Designer + frmSysOptions.cs + + + frmVersionsProperties.cs + Designer + + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + ShortcutLists.cs + Designer + + + VlnWeb.cs + Designer + + + PreserveNewest + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + Form + + + ShortcutLists.cs + + + Form + + + VlnWeb.cs + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + Always + + + Always + + + Always + + + Always + + + Always + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + dlgApproveProcedure.cs + Designer + PreserveNewest + + + dlgCheckedOutProcedure.cs + Designer + + + dlgExportImport.cs + Designer + + + dlgManageSecurity.cs + Designer + + + Designer + dlgPhoneList.cs + + + dlgPickROFolder.cs + Designer + + + dlgTransitionReport.cs + Designer + + + frmBatchRefresh.cs + Designer + + + frmBatchRefreshCheckedOut.cs + Designer + + + frmManageUser.cs + Designer + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + + PreserveNewest + + + + + {00020430-0000-0000-C000-000000000046} + 2 + 0 + 0 + primary + False + + + + + {b22ce5ad-288c-44cd-8a22-b3bcf77b7161} + FlexableMessageBox + + + {70F23722-19A3-4AC1-A900-55831C945786} + LBWordLibrary + + + {AEEE9FD1-6892-45E2-A67E-418C06D46FF9} + Volian.Base.Library + + + {8556527C-6615-487F-8AF7-22EBC3EF0268} + Volian.Controls.Library + + + {94830C07-6A3A-450E-9674-C9B4293A7726} + Volian.Print.Library + + + {62314B9C-DA84-4037-8B68-AA18C1F641F5} + Volian.Utils.Library + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + + cmd /c "$(ProjectDir)FixRev.bat" + + \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/dlgApproveProcedure.cs b/PROMS/VEPROMS User Interface/dlgApproveProcedure.cs index c50a1019..b914dad9 100644 --- a/PROMS/VEPROMS User Interface/dlgApproveProcedure.cs +++ b/PROMS/VEPROMS User Interface/dlgApproveProcedure.cs @@ -1309,7 +1309,7 @@ namespace VEPROMS pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0; if (si.IsApproved == 1) { - dlgExportImport dlg = new dlgExportImport("Export", pi, MyFrmVEPROMS, (E_UCFImportOptions)0, selectedSlave); // "true tell export to convert ROs and Transitions to text + dlgExportImport dlg = new dlgExportImport("Export", pi, MyFrmVEPROMS, (selectedSlave)); // "true tell export to convert ROs and Transitions to text dlg.DocReplace = frm.DocReplace; // this tells approval to prepare an export file with resolved transitions and ROs, word sections are saved with resolved ROs during approval PDF creation and saved in DocReplace System.Xml.XmlDocument xd = new System.Xml.XmlDocument(); dlg.ExportItem(xd, pi, "procedure"); diff --git a/PROMS/VEPROMS User Interface/dlgExportImport.cs b/PROMS/VEPROMS User Interface/dlgExportImport.cs index df2e4acb..2e86d280 100644 --- a/PROMS/VEPROMS User Interface/dlgExportImport.cs +++ b/PROMS/VEPROMS User Interface/dlgExportImport.cs @@ -75,9 +75,8 @@ namespace VEPROMS xa.InnerText = value; return xa; } - public dlgExportImport(string mode, FolderInfo folderInfo, frmVEPROMS myFrmVEPROMS, E_UCFImportOptions frset, int unitIndex = 0) + public dlgExportImport(string mode, FolderInfo folderInfo, frmVEPROMS myFrmVEPROMS, int unitIndex = 0) { - UCFImportDefaultFromSettings = frset; MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing _MyMode = mode; MyFolder = folderInfo; @@ -97,9 +96,8 @@ namespace VEPROMS FormClosed += RemoveUnit_OnClose; } } - public dlgExportImport(string mode, DocVersionInfo docVersionInfo, frmVEPROMS myFrmVEPROMS, E_UCFImportOptions frset, int unitIndex = 0) + public dlgExportImport(string mode, DocVersionInfo docVersionInfo, frmVEPROMS myFrmVEPROMS, int unitIndex = 0) { - UCFImportDefaultFromSettings = frset; MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing _MyMode = mode; MyDocVersion = docVersionInfo; @@ -120,9 +118,8 @@ namespace VEPROMS FormClosed += RemoveUnit_OnClose; } } - public dlgExportImport(string mode, ProcedureInfo procedureInfo, frmVEPROMS myFrmVEPROMS, E_UCFImportOptions frset, int unitIndex = 0) + public dlgExportImport(string mode, ProcedureInfo procedureInfo, frmVEPROMS myFrmVEPROMS, int unitIndex = 0) { - UCFImportDefaultFromSettings = frset; MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing _MyMode = mode; MyProcedure = procedureInfo; @@ -724,28 +721,28 @@ namespace VEPROMS ImportProcedureNew(xd); isImported = true; } - if (isImported && UCFImportCase == E_UCFImportOptions.LoadForSetOnly) UpdateFormatForUCFInSet(); + //if (isImported && UCFImportCase == E_UCFImportOptions.LoadForSetOnly) UpdateFormatForUCFInSet(); return true;// Import Suceeded } - private void UpdateFormatForUCFInSet() - { - // this gets called if the UCFImportCase == LoadForSetOnly, i.e. only items in this PROCEDURE Set whose formats point to a - // UCF format should point to the updated (copied) UCF format. - if (renamedUCFFormatId == null) return; - foreach (int key in renamedUCFFormatId.Keys) - { - using (ContentInfoList cil = ContentInfoList.FixFormatIDAfterImport(MyDocVersion.VersionID.ToString(), renamedUCFFormatId[key], key)) - { - foreach (ContentInfo ci in cil) - { - using (Content c = ci.Get()) - { - ContentInfo.Refresh(c); - } - } - } - } - } + //private void UpdateFormatForUCFInSet() + //{ + // // this gets called if the UCFImportCase == LoadForSetOnly, i.e. only items in this PROCEDURE Set whose formats point to a + // // UCF format should point to the updated (copied) UCF format. + // if (renamedUCFFormatId == null) return; + // foreach (int key in renamedUCFFormatId.Keys) + // { + // using (ContentInfoList cil = ContentInfoList.FixFormatIDAfterImport(MyDocVersion.VersionID.ToString(), renamedUCFFormatId[key], key)) + // { + // foreach (ContentInfo ci in cil) + // { + // using (Content c = ci.Get()) + // { + // ContentInfo.Refresh(c); + // } + // } + // } + // } + //} // Added Error Handling to assure that Change Manager is turned-on regardless of success or failure of the import // B2019-046: improved error handling (added return value & error message) private bool TryToLoadImportDataDocument() @@ -1014,8 +1011,8 @@ namespace VEPROMS c.Save(); } } - private E_UCFImportOptions UCFImportDefaultFromSettings; - private E_UCFImportOptions UCFImportCase = E_UCFImportOptions.LoadOnlyImported; + //private E_UCFImportOptions UCFImportDefaultFromSettings; + //private E_UCFImportOptions UCFImportCase = E_UCFImportOptions.LoadOnlyImported; Dictionary existingCopyFCName = new Dictionary(); // note that this is used when importing a folder or a procedure (procedure was added for UCF changes) private bool LoadFormats(XmlDocument xd, string xmlpath) @@ -1057,7 +1054,6 @@ namespace VEPROMS { existingFC.Add(exFI.Config); importedFC.Add(config); - conflictingUCFdata = true; fname.Add(name); } else @@ -1066,22 +1062,6 @@ namespace VEPROMS } } - // there is a difference in UCF data, see if user wants sections to use the existing or new ucf data: - if (conflictingUCFdata) - { - // Bring up dialog to allow user to choose how the UCF data is handled: - // Importing of a procedure(s) (names of UCF exist in current DB and in exported DB) - //Case 0 - ignore (don't bring in new UCF) - //Case 1 - bringing in new UCF and not using it - //Case 2 - bringing in new UCF and only using it for imported data - //Case 3 - bringing in new UCF and using it across the board - //Case 4 - bringing in new UCF and using it for the current procedure set (not applicable for procedure sets) - UCFImportCase = UCFImportDefaultFromSettings; // from the options/settings - dlgUCFImportOptions ucfoptDlg = new dlgUCFImportOptions(fname, existingFC, importedFC, UCFImportCase, xmlpath); - DialogResult dr = ucfoptDlg.ShowDialog(); - if (dr != DialogResult.OK) return false; - UCFImportCase = ucfoptDlg.UCFImportOptionsCase; // may be reset from dialog. - } // first see if any of the imported formats have different data. If so, foreach (XmlNode nd in nl) { @@ -1133,102 +1113,102 @@ namespace VEPROMS // various cases listed above: if (existingFormat.ContainsKey(name)) { - // if case 0 and this ucf already exists, ignore it: - if (UCFImportCase == E_UCFImportOptions.Ignore) continue; + //// if case 0 and this ucf already exists, ignore it: + //if (UCFImportCase == E_UCFImportOptions.Ignore) continue; - // if case 1, 2, 4 and the name exists, make a 'copy' of the newly imported format: - // need to add this format - name must be unique so add 'COPY(x) of 'original name'' where x is unique number: - if (UCFImportCase == E_UCFImportOptions.LoadNotUsed || UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) - { - int count = (fil.Where(fi => fi.Name.EndsWith(name))).Count(); - if (count > 0) - { - string origname = name; - name = string.Format("Copy {0} of {1}", count.ToString(), name); - if (UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) - { - if (renamedUCFFormatName == null) renamedUCFFormatName = new Dictionary(); - renamedUCFFormatName.Add(origname, name); - } - } - } + //// if case 1, 2, 4 and the name exists, make a 'copy' of the newly imported format: + //// need to add this format - name must be unique so add 'COPY(x) of 'original name'' where x is unique number: + //if (UCFImportCase == E_UCFImportOptions.LoadNotUsed || UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) + //{ + // int count = (fil.Where(fi => fi.Name.EndsWith(name))).Count(); + // if (count > 0) + // { + // string origname = name; + // name = string.Format("Copy {0} of {1}", count.ToString(), name); + // if (UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) + // { + // if (renamedUCFFormatName == null) renamedUCFFormatName = new Dictionary(); + // renamedUCFFormatName.Add(origname, name); + // } + // } + //} // if case 3, take the existing config data and create in a record whose name is Old(x) of 'original name' (the record // creation gets done below). Then modify the existing record to have the config data. The result is that any // sections that used this UCF throughout the database will have the new config data. - if (UCFImportCase == E_UCFImportOptions.LoadUseAll) - { - string savname = name; - int count = (fil.Where(fi => fi.Name.EndsWith(name))).Count(); - if (count > 0) - { - name = string.Format("Old {0} of {1}", count.ToString(), name); - } - // update the 'old' record by getting the original config data. - string savdesc = null; - DateTime savdts = DateTime.Now; - string savuid = null; - int savpar = 0; - string savconfig = null; - using (Format origRecord = Format.Get(existingFormat[savname])) - { - savdesc = origRecord.Description; - savdts = origRecord.DTS; - savuid = origRecord.UserID; - savpar = origRecord.ParentID; - savconfig = origRecord.Config; - origRecord.Name = savname; - origRecord.Description = description; - origRecord.DTS = dts; - origRecord.UserID = userid; - origRecord.MyParent = pformat; - origRecord.Config = config; - origRecord.Save(); - description = savdesc; - dts = savdts; - userid = savuid; - pformat = Format.Get(savpar); - config = savconfig; + //if (UCFImportCase == E_UCFImportOptions.LoadUseAll) + //{ + // string savname = name; + // int count = (fil.Where(fi => fi.Name.EndsWith(name))).Count(); + // if (count > 0) + // { + // name = string.Format("Old {0} of {1}", count.ToString(), name); + // } + // // update the 'old' record by getting the original config data. + // string savdesc = null; + // DateTime savdts = DateTime.Now; + // string savuid = null; + // int savpar = 0; + // string savconfig = null; + // using (Format origRecord = Format.Get(existingFormat[savname])) + // { + // savdesc = origRecord.Description; + // savdts = origRecord.DTS; + // savuid = origRecord.UserID; + // savpar = origRecord.ParentID; + // savconfig = origRecord.Config; + // origRecord.Name = savname; + // origRecord.Description = description; + // origRecord.DTS = dts; + // origRecord.UserID = userid; + // origRecord.MyParent = pformat; + // origRecord.Config = config; + // origRecord.Save(); + // description = savdesc; + // dts = savdts; + // userid = savuid; + // pformat = Format.Get(savpar); + // config = savconfig; - } - } + // } + //} } - if (UCFImportCase == 0) // ignore it - { + //if (UCFImportCase == 0) // ignore it + //{ importedFormat.Add(formatid, name); - } - else - { - Format rec = Format.MakeFormat(pformat, name, description, null, null, dts, userid); - rec.Config = config; - rec.Save(); - if (UCFImportCase == E_UCFImportOptions.LoadNotUsed || UCFImportCase == E_UCFImportOptions.LoadUseAll) // don't reset format id (case 1 don't use it, case 3 copies new data into original record - importedFormat.Add(formatid, name); - else if (UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) // case 2 uses it for any items imported, case 4 uses it for any sections within current set - { - existingFormat.Add(name, rec.FormatID); // change to original name? - importedFormat.Add(rec.FormatID, name); + //} + //else + //{ + // Format rec = Format.MakeFormat(pformat, name, description, null, null, dts, userid); + // rec.Config = config; + // rec.Save(); + // if (UCFImportCase == E_UCFImportOptions.LoadNotUsed || UCFImportCase == E_UCFImportOptions.LoadUseAll) // don't reset format id (case 1 don't use it, case 3 copies new data into original record + // importedFormat.Add(formatid, name); + // else if (UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) // case 2 uses it for any items imported, case 4 uses it for any sections within current set + // { + // existingFormat.Add(name, rec.FormatID); // change to original name? + // importedFormat.Add(rec.FormatID, name); - // get format id for the original named format - if (UCFImportCase == E_UCFImportOptions.LoadForSetOnly && renamedUCFFormatName != null) - { - int origformatid = -1; - foreach (var kvp in renamedUCFFormatName) - { - if (kvp.Value == name) - { - origformatid = existingFormat[kvp.Key]; - break; - } - } - if (origformatid != -1) - { - if (renamedUCFFormatId == null) renamedUCFFormatId = new Dictionary(); - renamedUCFFormatId.Add(rec.FormatID, origformatid); - } - } - } - } + // // get format id for the original named format + // if (UCFImportCase == E_UCFImportOptions.LoadForSetOnly && renamedUCFFormatName != null) + // { + // int origformatid = -1; + // foreach (var kvp in renamedUCFFormatName) + // { + // if (kvp.Value == name) + // { + // origformatid = existingFormat[kvp.Key]; + // break; + // } + // } + // if (origformatid != -1) + // { + // if (renamedUCFFormatId == null) renamedUCFFormatId = new Dictionary(); + // renamedUCFFormatId.Add(rec.FormatID, origformatid); + // } + // } + // } + //} } FormatInfoList.Reset(); return true; diff --git a/PROMS/VEPROMS User Interface/dlgExportImportEP.cs b/PROMS/VEPROMS User Interface/dlgExportImportEP.cs index 07151940..5730bbe5 100644 --- a/PROMS/VEPROMS User Interface/dlgExportImportEP.cs +++ b/PROMS/VEPROMS User Interface/dlgExportImportEP.cs @@ -21,7 +21,7 @@ namespace VEPROMS private static Regex _ROAccPageTokenPattern = new Regex("[<][^<>-]+-[^<>]+[>]"); - public dlgExportImportEP(string mode, FolderInfo folderInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, folderInfo, myFrmVEPROMS, (E_UCFImportOptions)0, unitIndex) + public dlgExportImportEP(string mode, FolderInfo folderInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, folderInfo, myFrmVEPROMS, ( unitIndex)) { _AnnotationType = AnnotationTypeInfo.Get(annotationTypeId); _ExportBothConvertedandNot = true; @@ -29,7 +29,7 @@ namespace VEPROMS FormClosed += OnClose; Text = $"{mode} Electronic Procedure ({_AnnotationType.Name}) Dialog for {folderInfo.Name}"; } - public dlgExportImportEP(string mode, DocVersionInfo docVersionInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, docVersionInfo, myFrmVEPROMS, (E_UCFImportOptions)0, unitIndex) + public dlgExportImportEP(string mode, DocVersionInfo docVersionInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, docVersionInfo, myFrmVEPROMS, (unitIndex)) { _AnnotationType = AnnotationTypeInfo.Get(annotationTypeId); _ExportBothConvertedandNot = true; @@ -37,7 +37,7 @@ namespace VEPROMS FormClosed += OnClose; Text = $"{mode} Electronic Procedure ({_AnnotationType.Name}) Dialog for {docVersionInfo.Name} of {docVersionInfo.MyFolder.Name}"; } - public dlgExportImportEP(string mode, ProcedureInfo procedureInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, procedureInfo, myFrmVEPROMS, (E_UCFImportOptions)0, unitIndex) + public dlgExportImportEP(string mode, ProcedureInfo procedureInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, procedureInfo, myFrmVEPROMS, (unitIndex)) { _AnnotationType = AnnotationTypeInfo.Get(annotationTypeId); _ExportBothConvertedandNot = true; diff --git a/PROMS/VEPROMS User Interface/dlgUCFDetail.Designer.cs b/PROMS/VEPROMS User Interface/dlgUCFDetail.Designer.cs deleted file mode 100644 index c6ee262b..00000000 --- a/PROMS/VEPROMS User Interface/dlgUCFDetail.Designer.cs +++ /dev/null @@ -1,61 +0,0 @@ -namespace VEPROMS -{ - partial class dlgUCFDetail - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.wbBrDet = new System.Windows.Forms.WebBrowser(); - this.SuspendLayout(); - // - // wbBrDet - // - this.wbBrDet.Dock = System.Windows.Forms.DockStyle.Fill; - this.wbBrDet.Location = new System.Drawing.Point(0, 0); - this.wbBrDet.MinimumSize = new System.Drawing.Size(20, 20); - this.wbBrDet.Name = "wbBrDet"; - this.wbBrDet.Size = new System.Drawing.Size(897, 445); - this.wbBrDet.TabIndex = 0; - // - // dlgUCFDetail - // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(897, 445); - this.Controls.Add(this.wbBrDet); - this.Name = "dlgUCFDetail"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "User Control of Format Details"; - this.Load += new System.EventHandler(this.dlgUCFDetail_Load); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.WebBrowser wbBrDet; - } -} \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/dlgUCFDetail.cs b/PROMS/VEPROMS User Interface/dlgUCFDetail.cs deleted file mode 100644 index 18fa64f4..00000000 --- a/PROMS/VEPROMS User Interface/dlgUCFDetail.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Xml; -using System.IO; -using System.Xml.Xsl; - -namespace VEPROMS -{ - public partial class dlgUCFDetail : Form - { - private string MyFormatConfig; - private string UCFName; - private string Description; - // This brings up the dialog for displaying the details of what is contained in this User Control of Format - // as defined by the formatConfig. It uses XSL to display the xml. The XSL can be found in UCFDetails.xsl. - // The result is displayed in a web browser control on the dialog. - public dlgUCFDetail(string formatConfig, string name, string desc) - { - MyFormatConfig = formatConfig; - UCFName = name; - Description = desc; - InitializeComponent(); - } - private void AddAttribute(XmlNode xn, string name, object value) - { - XmlAttribute xa = xn.OwnerDocument.CreateAttribute(name); - xa.Value = value.ToString(); - xn.Attributes.Append(xa); - } - private void dlgUCFDetail_Load(object sender, EventArgs e) - { - try - { - //need to add the UCF name & description to this: - XmlDocument xd = new XmlDocument(); - xd.LoadXml(MyFormatConfig); - XmlNodeList xnl = xd.GetElementsByTagName("FormatConfig"); - if (xnl != null && xnl.Count > 0) - { - AddAttribute(xnl[0], "Name", UCFName); - AddAttribute(xnl[0], "Description", Description); - } - - string sXSLSummary = System.IO.File.ReadAllText(Application.StartupPath + "\\" + "UCFDetails.xsl"); - StringWriter sw = new StringWriter(); - StringWriter xsw = new StringWriter(); - using (XmlReader xrt = XmlReader.Create(new StringReader(sXSLSummary))) - { - XmlTextWriter tx = new XmlTextWriter(xsw); - xd.WriteTo(tx); - string tmp = sw.ToString(); - tmp = xd.InnerXml; - using (XmlReader xri = XmlReader.Create(new StringReader(tmp))) - { - using (XmlWriter xwo = XmlWriter.Create(sw)) - { - XslCompiledTransform xsl = new XslCompiledTransform(); - xsl.Load(xrt); - xsl.Transform(xri, xwo); // Perform Transform - } - this.wbBrDet.DocumentText = sw.ToString(); - } - } - } - catch (Exception ex) - { - MessageBox.Show("Problem occurred displaying the details.", "UCF Warning", MessageBoxButtons.OK); - } - } - } -} diff --git a/PROMS/VEPROMS User Interface/dlgUCFDetail.resx b/PROMS/VEPROMS User Interface/dlgUCFDetail.resx deleted file mode 100644 index 7080a7d1..00000000 --- a/PROMS/VEPROMS User Interface/dlgUCFDetail.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/frmFolderProperties.cs b/PROMS/VEPROMS User Interface/frmFolderProperties.cs index e0d3a6e7..59d2b38d 100644 --- a/PROMS/VEPROMS User Interface/frmFolderProperties.cs +++ b/PROMS/VEPROMS User Interface/frmFolderProperties.cs @@ -338,23 +338,23 @@ namespace VEPROMS //if (btnAnnoTypeSave.Enabled) return; folderConfigBindingSource.EndEdit(); // if there is a change to the format, clean up any overridden formats that point to the selected item before saving the format change: - if (_FolderConfig.MyFolder.FormatID != _cmbxformatOriginal) - { - // clean up & then refresh the configs - using (ContentInfoList cil = ContentInfoList.ClearOverrideFormatsByFolder(_FolderConfig.MyFolder.FolderID, _cmbxformatOriginal, _FolderConfig.MyFolder.FormatID)) - { - foreach (ContentInfo ci in cil) - { - using (Content c = ci.Get()) - { - // first refresh configs because the ContentInfo.Refresh causes events to occur that refresh screen - // and if configs aren't done first, the screen refresh, if based on config data, will not be correct. - foreach (ItemInfo ii in ci.ContentItems) ii.RefreshConfig(); - ContentInfo.Refresh(c); - } - } - } - } + //if (_FolderConfig.MyFolder.FormatID != _cmbxformatOriginal) + //{ + // // clean up & then refresh the configs + // using (ContentInfoList cil = ContentInfoList.ClearOverrideFormatsByFolder(_FolderConfig.MyFolder.FolderID, _cmbxformatOriginal, _FolderConfig.MyFolder.FormatID)) + // { + // foreach (ContentInfo ci in cil) + // { + // using (Content c = ci.Get()) + // { + // // first refresh configs because the ContentInfo.Refresh causes events to occur that refresh screen + // // and if configs aren't done first, the screen refresh, if based on config data, will not be correct. + // foreach (ItemInfo ii in ci.ContentItems) ii.RefreshConfig(); + // ContentInfo.Refresh(c); + // } + // } + // } + //} // Save Default settings for User // // Save whether we should display the default values on this property page diff --git a/PROMS/VEPROMS User Interface/frmSectionProperties.cs b/PROMS/VEPROMS User Interface/frmSectionProperties.cs index 3c168a16..9d19bf66 100644 --- a/PROMS/VEPROMS User Interface/frmSectionProperties.cs +++ b/PROMS/VEPROMS User Interface/frmSectionProperties.cs @@ -120,7 +120,7 @@ namespace VEPROMS PlantFormat pf = _SectionConfig.MyFormat != null ? _SectionConfig.MyFormat.PlantFormat : _SectionConfig.MyDefaultFormat.PlantFormat; CheckOffList chkoffList = pf.FormatData.ProcData.CheckOffData.CheckOffList; CheckOffHeaderList chkoffHeaderList = pf.FormatData.ProcData.CheckOffData.CheckOffHeaderList; - int maxindx = pf.FormatData.ProcData.CheckOffUCF ? pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndex : pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; + int maxindx = pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; // C2020-003 use the _CheckOffIndex dictionary to get and save the index of the selected checkoff from the sorted checkoff list // B2020-039: Added the check for a valid selected index so that crash doesn't occur if (ppGpbxSignoffCheckoff.Enabled && (chkoffList != null && maxindx > 1) @@ -796,7 +796,7 @@ namespace VEPROMS CheckOffList chkoffList = pf.FormatData.ProcData.CheckOffData.CheckOffList; if (chkoffList != null) chkoffList.Sort(CompareCheckoffUsingOrderBy); // C2020-003 sort the checkoff list via the Index and/or OrderBy elements CheckOffHeaderList chkoffHeaderList = pf.FormatData.ProcData.CheckOffData.CheckOffHeaderList; - int maxindx = pf.FormatData.ProcData.CheckOffUCF ? pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndex : pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; + int maxindx = pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; // B2019-013: was crashing on indexer of checkofflist. If there were UCF checkoffs but none in original format, the indexer // was failing for index of 0 (indexer code went through index attribute of xml and was returning null even though there // were items in list). diff --git a/PROMS/VEPROMS User Interface/frmSysOptions.Designer.cs b/PROMS/VEPROMS User Interface/frmSysOptions.Designer.cs index 51e952ec..9cd396eb 100644 --- a/PROMS/VEPROMS User Interface/frmSysOptions.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmSysOptions.Designer.cs @@ -1211,7 +1211,7 @@ namespace VEPROMS this.cbUCFLForSetOnly.Size = new System.Drawing.Size(105, 19); this.cbUCFLForSetOnly.TabIndex = 5; this.cbUCFLForSetOnly.Text = "Load For Set Only"; - this.cbUCFLForSetOnly.CheckedChanged += new System.EventHandler(this.cbUCFLForSetOnly_CheckedChanged); + //this.cbUCFLForSetOnly.CheckedChanged += new System.EventHandler(this.cbUCFLForSetOnly_CheckedChanged); // // cbUCFLUseAll // @@ -1227,7 +1227,7 @@ namespace VEPROMS this.cbUCFLUseAll.Size = new System.Drawing.Size(105, 19); this.cbUCFLUseAll.TabIndex = 4; this.cbUCFLUseAll.Text = "Load Use All"; - this.cbUCFLUseAll.CheckedChanged += new System.EventHandler(this.cbUCFLUseAll_CheckedChanged); + //this.cbUCFLUseAll.CheckedChanged += new System.EventHandler(this.cbUCFLUseAll_CheckedChanged); // // cbUCFLOnlyImport // @@ -1243,7 +1243,7 @@ namespace VEPROMS this.cbUCFLOnlyImport.Size = new System.Drawing.Size(105, 19); this.cbUCFLOnlyImport.TabIndex = 3; this.cbUCFLOnlyImport.Text = "Load Only Imported"; - this.cbUCFLOnlyImport.CheckedChanged += new System.EventHandler(this.cbUCFLOnlyImport_CheckedChanged); + //this.cbUCFLOnlyImport.CheckedChanged += new System.EventHandler(this.cbUCFLOnlyImport_CheckedChanged); // // cbUCFLNotUsed // @@ -1259,7 +1259,7 @@ namespace VEPROMS this.cbUCFLNotUsed.Size = new System.Drawing.Size(88, 19); this.cbUCFLNotUsed.TabIndex = 2; this.cbUCFLNotUsed.Text = "Load Not Used"; - this.cbUCFLNotUsed.CheckedChanged += new System.EventHandler(this.cbUCFLNotUsed_CheckedChanged); + //this.cbUCFLNotUsed.CheckedChanged += new System.EventHandler(this.cbUCFLNotUsed_CheckedChanged); // // cbUCFIgnore // @@ -1275,7 +1275,7 @@ namespace VEPROMS this.cbUCFIgnore.Size = new System.Drawing.Size(67, 19); this.cbUCFIgnore.TabIndex = 1; this.cbUCFIgnore.Text = "Ignore"; - this.cbUCFIgnore.CheckedChanged += new System.EventHandler(this.cbUCFIgnore_CheckedChanged); + //this.cbUCFIgnore.CheckedChanged += new System.EventHandler(this.cbUCFIgnore_CheckedChanged); // // btnReset // diff --git a/PROMS/VEPROMS User Interface/frmSysOptions.cs b/PROMS/VEPROMS User Interface/frmSysOptions.cs index 19de065e..2d286940 100644 --- a/PROMS/VEPROMS User Interface/frmSysOptions.cs +++ b/PROMS/VEPROMS User Interface/frmSysOptions.cs @@ -75,24 +75,24 @@ namespace VEPROMS cbEnhancedDocumentSync.Checked = Settings.Default.SyncEnhancedDocuments; cbSeparateWindows.Checked = Settings.Default.SeparateWindows; txbxVisioPath.Text = Settings.Default.VisioPath; - switch (Settings.Default.UCFImportOpt) // see dlgExportImport for descripton of these options. - { - case 0: - cbUCFIgnore.Checked = true; - break; - case 1: - cbUCFLNotUsed.Checked = true; - break; - case 2: - cbUCFLOnlyImport.Checked = true; - break; - case 3: - cbUCFLUseAll.Checked = true; - break; - case 4: - cbUCFLForSetOnly.Checked = true; - break; - } + //switch (Settings.Default.UCFImportOpt) // see dlgExportImport for descripton of these options. + //{ + // case 0: + // cbUCFIgnore.Checked = true; + // break; + // case 1: + // cbUCFLNotUsed.Checked = true; + // break; + // case 2: + // cbUCFLOnlyImport.Checked = true; + // break; + // case 3: + // cbUCFLUseAll.Checked = true; + // break; + // case 4: + // cbUCFLForSetOnly.Checked = true; + // break; + //} //CSM - C2024-031 - Getting User Settings //and set checkboxes based on what they are set to @@ -193,7 +193,7 @@ namespace VEPROMS private bool ss_SyncEnhancedDocuments; private bool ss_SeparateWindows; private string ss_VisioPath; - private int ss_UCFImportOpt; + //private int ss_UCFImportOpt; private void SaveStartingSettings() { @@ -210,7 +210,7 @@ namespace VEPROMS ss_SyncEnhancedDocuments = Settings.Default.SyncEnhancedDocuments; ss_SeparateWindows = Settings.Default.SeparateWindows; ss_VisioPath = Settings.Default.VisioPath; - ss_UCFImportOpt = Settings.Default.UCFImportOpt; + //ss_UCFImportOpt = Settings.Default.UCFImportOpt; } private void RestoreStartingSettings() // used with the cancel button @@ -227,7 +227,7 @@ namespace VEPROMS Settings.Default.SyncEnhancedDocuments = ss_SyncEnhancedDocuments; Settings.Default.SeparateWindows = ss_SeparateWindows; Settings.Default.VisioPath = ss_VisioPath; - Settings.Default.UCFImportOpt = ss_UCFImportOpt; + //Settings.Default.UCFImportOpt = ss_UCFImportOpt; } @@ -315,45 +315,45 @@ namespace VEPROMS Settings.Default.VisioPath = txbxVisioPath.Text; } - private void cbUCFIgnore_CheckedChanged(object sender, EventArgs e) - { - if (!_initializing) - { - Settings.Default.UCFImportOpt = 0; - } - } + //private void cbUCFIgnore_CheckedChanged(object sender, EventArgs e) + //{ + // if (!_initializing) + // { + // Settings.Default.UCFImportOpt = 0; + // } + //} - private void cbUCFLNotUsed_CheckedChanged(object sender, EventArgs e) - { - if (!_initializing) - { - Settings.Default.UCFImportOpt = 1; - } - } + //private void cbUCFLNotUsed_CheckedChanged(object sender, EventArgs e) + //{ + // if (!_initializing) + // { + // Settings.Default.UCFImportOpt = 1; + // } + //} - private void cbUCFLOnlyImport_CheckedChanged(object sender, EventArgs e) - { - if (!_initializing) - { - Settings.Default.UCFImportOpt = 2; - } - } + //private void cbUCFLOnlyImport_CheckedChanged(object sender, EventArgs e) + //{ + // if (!_initializing) + // { + // Settings.Default.UCFImportOpt = 2; + // } + //} - private void cbUCFLUseAll_CheckedChanged(object sender, EventArgs e) - { - if (!_initializing) - { - Settings.Default.UCFImportOpt = 3; - } - } + //private void cbUCFLUseAll_CheckedChanged(object sender, EventArgs e) + //{ + // if (!_initializing) + // { + // Settings.Default.UCFImportOpt = 3; + // } + //} - private void cbUCFLForSetOnly_CheckedChanged(object sender, EventArgs e) - { - if (!_initializing) - { - Settings.Default.UCFImportOpt = 4; - } - } + //private void cbUCFLForSetOnly_CheckedChanged(object sender, EventArgs e) + //{ + // if (!_initializing) + // { + // Settings.Default.UCFImportOpt = 4; + // } + //} private void cbOTRemember_CheckedChanged(object sender, EventArgs e) { cbOTAutoOpen.Enabled = cbOTAutoOpen.Visible = cbShwRplWrdsColor.Checked; diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 6710d968..acabca31 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -724,7 +724,7 @@ namespace VEPROMS } else { - dlgExportImport dlg = new dlgExportImport(args.Index == 0 ? "Export" : "Import", fi, this, (E_UCFImportOptions)Properties.Settings.Default.UCFImportOpt);//Added frmVEPROMS Parameter + dlgExportImport dlg = new dlgExportImport(args.Index == 0 ? "Export" : "Import", fi, this);//Added frmVEPROMS Parameter dlg.ShowDialog(this); MySessionInfo.CheckInItem(ownerid); @@ -778,7 +778,7 @@ namespace VEPROMS else { - dlgExportImport dlg = new dlgExportImport("Import", dvi, this, (E_UCFImportOptions)Properties.Settings.Default.UCFImportOpt);//Added frmVEPROMS Parameter + dlgExportImport dlg = new dlgExportImport("Import", dvi, this);//Added frmVEPROMS Parameter dlg.MyNewProcedure = null; dlg.ExternalTransitionItem = null; dlg.ShowDialog(this); @@ -820,7 +820,7 @@ namespace VEPROMS else { - dlgExportImport dlg = new dlgExportImport("Export", pi, this, (E_UCFImportOptions)0);//Added frmVEPROMS Parameter + dlgExportImport dlg = new dlgExportImport("Export", pi, this);//Added frmVEPROMS Parameter dlg.ShowDialog(this); MySessionInfo.CheckInItem(ownerid); @@ -2220,7 +2220,6 @@ namespace VEPROMS // C2025-031 added tool tip messages this.superTooltip1.SetSuperTooltip(btnManageSecurity, new SuperTooltipInfo("Manage Security", "", "Add, Modify, and Delete PROMS User Access", null, null, eTooltipColor.Gray)); - // remove commented out line below when User Control of Formats code is deleted this.superTooltip1.SetSuperTooltip(btnResetSecurity, new SuperTooltipInfo("Reset Security", "", "WARNING this will \nREMOVE ALL PROMS USERS and Reset to the\nOriginal Volian Defaults", null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnAdministrativeTools, new SuperTooltipInfo("Administrative Tools", "", "Open the PROMS Adminstration Tools Window", null, null, eTooltipColor.Gray)); this.superTooltip1.SetSuperTooltip(btnUpdateFormats, new SuperTooltipInfo("Update Formats", "", "Install New Formats \n or Re-Install Formats", null, null, eTooltipColor.Gray)); diff --git a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs index 004c33c7..0bca3814 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs @@ -213,14 +213,14 @@ namespace VEPROMS.CSLA.Library [TypeConverter(typeof(ExpandableObjectConverter))] public class Flags { - private bool? _CheckOffUCF; - [DisplayName("UCF CheckOffs")] - [Description("Additional UCF Check Offs and Sign Offs")] - public bool? CheckOffUCF - { - get { return _CheckOffUCF; } - set { _CheckOffUCF = value; } - } + //private bool? _CheckOffUCF; + //[DisplayName("UCF CheckOffs")] + //[Description("Additional UCF Check Offs and Sign Offs")] + //public bool? CheckOffUCF + //{ + // get { return _CheckOffUCF; } + // set { _CheckOffUCF = value; } + //} private bool? _PartialStepCompression; [DisplayName("Partial Step Compression")] [Description("Automatically compress last sub-steps to fit on page")] @@ -272,41 +272,42 @@ namespace VEPROMS.CSLA.Library } #endregion ReplaceStrData #region ReplaceStr - [Flags] - public enum E_ReplaceFlagsUCF : uint - { - High = 0x0001, // Do ReplaceWords in HIGH LEVEL STEPS - RNO = 0x0002, // Do ReplaceWords in RNOS - Caution = 0x0004, // Do ReplaceWords in CAUTIONS - Note = 0x0008, // Do ReplaceWords in NOTES - Table = 0x0010, // Do ReplaceWords in TABLES - Substep = 0x0020, // Do ReplaceWords in SUBSTEPS - Attach = 0x0040, // Do ReplaceWords in ATTACHMENTS - Bkgd = 0x0080, // Do ReplaceWords in BACKGROUNDS - DiffUnit = 0x0100, // Do ReplaceWords ONLY for different UNIT # - TOC = 0x0200, // Do in auto table-of-contents - StatTree = 0x0400, - HLSSetpnt = 0x0800, // Do ReplaceWords in HighLevelStep SETPoiNTs - Trans = 0x1000, // Do ReplaceWords in TRANSITIONS - Setpoint = 0x2000, // Do ReplaceWords in SETPOINTS + //[Flags] + //public enum + //: uint + //{ + // High = 0x0001, // Do ReplaceWords in HIGH LEVEL STEPS + // RNO = 0x0002, // Do ReplaceWords in RNOS + // Caution = 0x0004, // Do ReplaceWords in CAUTIONS + // Note = 0x0008, // Do ReplaceWords in NOTES + // Table = 0x0010, // Do ReplaceWords in TABLES + // Substep = 0x0020, // Do ReplaceWords in SUBSTEPS + // Attach = 0x0040, // Do ReplaceWords in ATTACHMENTS + // Bkgd = 0x0080, // Do ReplaceWords in BACKGROUNDS + // DiffUnit = 0x0100, // Do ReplaceWords ONLY for different UNIT # + // TOC = 0x0200, // Do in auto table-of-contents + // StatTree = 0x0400, + // HLSSetpnt = 0x0800, // Do ReplaceWords in HighLevelStep SETPoiNTs + // Trans = 0x1000, // Do ReplaceWords in TRANSITIONS + // Setpoint = 0x2000, // Do ReplaceWords in SETPOINTS - // Case Sensitivity Flags - default is off (Case Sensitive Replace) - CaseInsens = 0x0000C000, // Do ReplaceWords for all words thatmatch, regardless of case, - // and replace with the ReplaceWith string as is - // B2019-022: do not support CaseInsensFirst & CaseInsensAll - there is no supporting replace word code: - //CaseInsensFirst = 0x4000, // Do ReplaceWords for all words thatexactly match the ReplaceWord, - // except the case of the first character may be different - //CaseInsensAll = 0x8000, // Do ReplaceWords for all words that match the ReplaceWord, regardless of case + // // Case Sensitivity Flags - default is off (Case Sensitive Replace) + // CaseInsens = 0x0000C000, // Do ReplaceWords for all words thatmatch, regardless of case, + // // and replace with the ReplaceWith string as is + // // B2019-022: do not support CaseInsensFirst & CaseInsensAll - there is no supporting replace word code: + // //CaseInsensFirst = 0x4000, // Do ReplaceWords for all words thatexactly match the ReplaceWord, + // // except the case of the first character may be different + // //CaseInsensAll = 0x8000, // Do ReplaceWords for all words that match the ReplaceWord, regardless of case - Partials = 0x10000, // Do replace even on partial matches - Plackeep = 0x20000, // Do replace in PlaceKeepers - InSecTitle = 0x40000, - BeforeTrans = 0x80000, // Only do replace if the string occurs immediately before a transition. - BeforeList = 0x100000, // C2021-045 Only if the text ends with a colon ":" - PageList = 0x200000, // F2021-053 Do replace words for PageList items that are ROs - FirstWord = 0x400000, // C2021-056 Do only if is the first word in the text - NotInRO = 0x800000 // B2022-015 BNPPalr: Determine whether RO text should have Replace Words applied - } + // Partials = 0x10000, // Do replace even on partial matches + // Plackeep = 0x20000, // Do replace in PlaceKeepers + // InSecTitle = 0x40000, + // BeforeTrans = 0x80000, // Only do replace if the string occurs immediately before a transition. + // BeforeList = 0x100000, // C2021-045 Only if the text ends with a colon ":" + // PageList = 0x200000, // F2021-053 Do replace words for PageList items that are ROs + // FirstWord = 0x400000, // C2021-056 Do only if is the first word in the text + // NotInRO = 0x800000 // B2022-015 BNPPalr: Determine whether RO text should have Replace Words applied + //} [Serializable] [TypeConverter(typeof(ExpandableObjectConverter))] public class ReplaceStr diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ContentExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ContentExt.cs index eefa7dfe..7f32e607 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ContentExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ContentExt.cs @@ -1755,165 +1755,88 @@ namespace VEPROMS.CSLA.Library #endregion - #region UCF Fix FormatId After Import - private class FixFormatIDAfterImportCriteria - { - private string _DocVersionList; - public string DocVersionList - { - get { return _DocVersionList; } - set { _DocVersionList = value; } - } - private int _OldFormatID; - public int OldFormatID - { - get { return _OldFormatID; } - set { _OldFormatID = value; } - } - private int _NewFormatID; - public int NewFormatID - { - get { return _NewFormatID; } - set { _NewFormatID = value; } - } - public FixFormatIDAfterImportCriteria(string dvlst, int oldfid, int newfid) - { - _DocVersionList = dvlst; - _OldFormatID = oldfid; - _NewFormatID = newfid; - } - } - private void DataPortal_Fetch(FixFormatIDAfterImportCriteria criteria) - { - try - { - using (SqlConnection cn = Database.VEPROMS_SqlConnection) - { - using (SqlCommand cm = cn.CreateCommand()) - { - cm.CommandType = CommandType.StoredProcedure; - cm.CommandText = "vesp_UpdateVersionFormatForUCF"; - cm.Parameters.AddWithValue("@VersionList", criteria.DocVersionList); - cm.Parameters.AddWithValue("@OldFormatID", criteria.OldFormatID); - cm.Parameters.AddWithValue("@NewFormatID", criteria.NewFormatID); - cm.CommandTimeout = Database.DefaultTimeout; - using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) - { - IsReadOnly = false; - while (dr.Read()) - { - ContentInfo contentInfo = new ContentInfo(dr); - this.Add(contentInfo); - } - IsReadOnly = true; - } - } - } - } - catch (Exception ex) - { - Database.LogException("FixFormatIDAfterImport.DataPortal_Fetch", ex); - throw new DbCslaException("FixFormatIDAfterImport.DataPortal_Fetch", ex); - } - } + //#region UCF Clear Overwridden Formats + //private class ClearOverrideFormatsByFolderCriteria + //{ + // public ClearOverrideFormatsByFolderCriteria(int folderID, int? formatID, int? newformatID) + // { + // _FormatID = formatID; + // _FolderID = folderID; + // _NewFormatID = newformatID; + // } + // private int? _FormatID; + // public int? FormatID + // { + // get { return _FormatID; } + // set { _FormatID = value; } + // } + // private int? _NewFormatID; + // public int? NewFormatID + // { + // get { return _NewFormatID; } + // set { _NewFormatID = value; } + // } + // private int _FolderID; + // public int FolderID + // { + // get { return _FolderID; } + // set { _FolderID = value; } + // } + //} - public static ContentInfoList FixFormatIDAfterImport(string dvlst, int oldfid, int newfid) - { - try - { - ContentInfoList tmp = DataPortal.Fetch(new FixFormatIDAfterImportCriteria(dvlst, oldfid, newfid)); - return tmp; - } - catch (Exception ex) - { - throw new DbCslaException("Error on ContentInfoList.FixFormatIDAfterImport", ex); - } - } + //private void DataPortal_Fetch(ClearOverrideFormatsByFolderCriteria criteria) + //{ + // try + // { + // using (SqlConnection cn = Database.VEPROMS_SqlConnection) + // { + // using (SqlCommand cm = cn.CreateCommand()) + // { + // cm.CommandType = CommandType.StoredProcedure; + // cm.CommandText = "vesp_ClearOverrideFormatsByFolder"; + // cm.Parameters.AddWithValue("@FolderID", criteria.FolderID); + // if (criteria.FormatID == null) + // cm.Parameters.AddWithValue("@FormatID", DBNull.Value); + // else + // cm.Parameters.AddWithValue("@FormatID", criteria.FormatID); + // if (criteria.NewFormatID == null) + // cm.Parameters.AddWithValue("@NewFormatID", DBNull.Value); + // else + // cm.Parameters.AddWithValue("@NewFormatID", criteria.NewFormatID); + // cm.CommandTimeout = Database.DefaultTimeout; + // using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) + // { + // IsReadOnly = false; + // while (dr.Read()) + // { + // ContentInfo contentInfo = new ContentInfo(dr); + // this.Add(contentInfo); + // } + // IsReadOnly = true; + // } + // } + // } + // } + // catch (Exception ex) + // { + // Database.LogException("ClearOverrideFormatsByFolderCriteria.DataPortal_Fetch", ex); + // throw new DbCslaException("ClearOverrideFormatsByFolderCriteria.DataPortal_Fetch", ex); + // } + //} - #endregion - - #region UCF Clear Overwridden Formats - private class ClearOverrideFormatsByFolderCriteria - { - public ClearOverrideFormatsByFolderCriteria(int folderID, int? formatID, int? newformatID) - { - _FormatID = formatID; - _FolderID = folderID; - _NewFormatID = newformatID; - } - private int? _FormatID; - public int? FormatID - { - get { return _FormatID; } - set { _FormatID = value; } - } - private int? _NewFormatID; - public int? NewFormatID - { - get { return _NewFormatID; } - set { _NewFormatID = value; } - } - private int _FolderID; - public int FolderID - { - get { return _FolderID; } - set { _FolderID = value; } - } - } - - private void DataPortal_Fetch(ClearOverrideFormatsByFolderCriteria criteria) - { - try - { - using (SqlConnection cn = Database.VEPROMS_SqlConnection) - { - using (SqlCommand cm = cn.CreateCommand()) - { - cm.CommandType = CommandType.StoredProcedure; - cm.CommandText = "vesp_ClearOverrideFormatsByFolder"; - cm.Parameters.AddWithValue("@FolderID", criteria.FolderID); - if (criteria.FormatID == null) - cm.Parameters.AddWithValue("@FormatID", DBNull.Value); - else - cm.Parameters.AddWithValue("@FormatID", criteria.FormatID); - if (criteria.NewFormatID == null) - cm.Parameters.AddWithValue("@NewFormatID", DBNull.Value); - else - cm.Parameters.AddWithValue("@NewFormatID", criteria.NewFormatID); - cm.CommandTimeout = Database.DefaultTimeout; - using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) - { - IsReadOnly = false; - while (dr.Read()) - { - ContentInfo contentInfo = new ContentInfo(dr); - this.Add(contentInfo); - } - IsReadOnly = true; - } - } - } - } - catch (Exception ex) - { - Database.LogException("ClearOverrideFormatsByFolderCriteria.DataPortal_Fetch", ex); - throw new DbCslaException("ClearOverrideFormatsByFolderCriteria.DataPortal_Fetch", ex); - } - } - - public static ContentInfoList ClearOverrideFormatsByFolder(int folderID, int? formatID, int? newformatID) - { - try - { - ContentInfoList tmp = DataPortal.Fetch(new ClearOverrideFormatsByFolderCriteria(folderID, formatID, newformatID)); - return tmp; - } - catch (Exception ex) - { - throw new DbCslaException("Error on ContentInfoList.ClearOverrideFormatsByFolder", ex); - } - } + //public static ContentInfoList ClearOverrideFormatsByFolder(int folderID, int? formatID, int? newformatID) + //{ + // try + // { + // ContentInfoList tmp = DataPortal.Fetch(new ClearOverrideFormatsByFolderCriteria(folderID, formatID, newformatID)); + // return tmp; + // } + // catch (Exception ex) + // { + // throw new DbCslaException("Error on ContentInfoList.ClearOverrideFormatsByFolder", ex); + // } + //} private class ClearOverrideFormatsByDocVersionCriteria { @@ -2077,7 +2000,6 @@ namespace VEPROMS.CSLA.Library } } - #endregion #region Enhanced diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs index b8798d29..58136b8e 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs @@ -2195,12 +2195,12 @@ namespace VEPROMS.CSLA.Library //int profileDepth = ProfileTimer.Push(">>>> DoReplaceWords2.ForLoop"); foreach (FormatConfig.ReplaceStr rs in rsl) { - bool dopartial = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.Partials) == E_ReplaceFlags.Partials; + bool dopartial = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.Partials; if (!dopartial) // F2021-093: Partials moved into their own method and done first { - bool onlyDoList = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.BeforeList) == E_ReplaceFlags.BeforeList; // C2021-045 - bool onlyIfFirstWord = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.FirstWord) == E_ReplaceFlags.FirstWord; // C2021-056 - bool doInPagelist = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.PageList) == E_ReplaceFlags.PageList; // B2021-132 + bool onlyDoList = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.BeforeList; // C2021-045 + bool onlyIfFirstWord = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.FirstWord; // C2021-056 + bool doInPagelist = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.PageList; // B2021-132 //B2021-132 only do replacewords in paglist if the replaceword pagelist flag is set if (_DoReplWordInPageList && !doInPagelist) continue; @@ -2228,7 +2228,7 @@ namespace VEPROMS.CSLA.Library { if (!dicReplaceRegex.ContainsKey(rs)) { - RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.CaseInsens) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; + RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; //int profileDepth3 = ProfileTimer.Push(">>>> DoReplaceWords2.BuildMatch"); // CASEINSENS: Do ReplaceWords for all words that match, regardless of case, and replace with the ReplaceWith string as is //RegexOptions myOptions = (rs.Flag & E_ReplaceFlags.CaseInsens) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase & RegexOptions.Singleline : RegexOptions.None & RegexOptions.Singleline; @@ -2274,12 +2274,12 @@ namespace VEPROMS.CSLA.Library Dictionary shouldReplace = new Dictionary(); foreach (FormatConfig.ReplaceStr rs in rsl) { - bool dopartial = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.Partials) == E_ReplaceFlags.Partials; + bool dopartial = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.Partials; if (dopartial) { - bool onlyDoList = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.BeforeList) == E_ReplaceFlags.BeforeList; // C2021-045 - bool onlyIfFirstWord = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.FirstWord) == E_ReplaceFlags.FirstWord; // C2021-056 - bool doInPagelist = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.PageList) == E_ReplaceFlags.PageList; // B2021-132 + bool onlyDoList = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.BeforeList; // C2021-045 + bool onlyIfFirstWord = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.FirstWord; // C2021-056 + bool doInPagelist = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.PageList; // B2021-132 //B2021-132 only do replacewords in paglist if the replaceword pagelist flag is set if (_DoReplWordInPageList && !doInPagelist) continue; @@ -2304,7 +2304,7 @@ namespace VEPROMS.CSLA.Library { if (!dicReplaceRegex.ContainsKey(rs)) { - RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag & FormatConfig.E_ReplaceFlagsUCF.CaseInsens) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; + RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; dicReplaceRegex.Add(rs, new Regex(rs.ReplaceWord, myOptions)); } try @@ -2563,12 +2563,12 @@ namespace VEPROMS.CSLA.Library { // B2022-015 BNPPalr: Determine whether RO text should have Replace Words applied. InLinkAndNotInRoFlag checks // for flag on replace word item & checks that it is within and RO link - bool InLinkAndNotInRoFlag = ((foundMatch.MyWord.Flag & FormatConfig.E_ReplaceFlagsUCF.NotInRO) != 0) ? VerifyWithinLink(text, foundMatch, offset) : false; + bool InLinkAndNotInRoFlag = ((foundMatch.MyWord.Flag) != 0) ? VerifyWithinLink(text, foundMatch, offset) : false; if (!InLinkAndNotInRoFlag && VerifyNoHardSpace(text, foundMatch, offset) && VerifyNoLink(text, foundMatch, offset)) { //if(offset != 0 || foundMatch.MyMatch.Index != 0 || !foundMatch.MyWord.ReplaceWith.StartsWith(@"{\par}")) //{ - if (((foundMatch.MyWord.Flag & FormatConfig.E_ReplaceFlagsUCF.DiffUnit) == 0) || DiffUnit(foundMatch.MyWord.ReplaceWord, _MyItemInfo, "UNIT ")) + if (((foundMatch.MyWord.Flag) == 0) || DiffUnit(foundMatch.MyWord.ReplaceWord, _MyItemInfo, "UNIT ")) { string with = foundMatch.MyWord.ReplaceWith; if (offset == 0 && with.StartsWith(@"{\par}")) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs index a4e5383a..635186d5 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs @@ -596,68 +596,68 @@ public partial class FormatInfo : IFormatOrFormatInfo } // Get format data, but do not resolve the 'Data' and 'Genmac' fields, i.e. keep empty if they are // empty. - public static FormatInfo GetFormatNoUCFByFormatID(int formatID) - { - try - { - FormatInfo tmp = DataPortal.Fetch(new FormatIDNoUCFCriteria(formatID)); - if (tmp.ErrorMessage == "No Record Found") - { - tmp.Dispose(); // Clean-up FormatInfo - tmp = null; - } - return tmp; - } - catch (Exception ex) - { - throw new DbCslaException("Error on FormatInfo.GetFormatNoUCFByFormatID", ex); - } - } - protected class FormatIDNoUCFCriteria - { - private int _FormatID; - public int FormatID { get { return _FormatID; } } - public FormatIDNoUCFCriteria(int formatID) - { - _FormatID = formatID; - } - } - private void DataPortal_Fetch(FormatIDNoUCFCriteria criteria) - { - if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] FormatInfo.DataPortal_Fetch", GetHashCode()); - try - { - using (SqlConnection cn = Database.VEPROMS_SqlConnection) - { - ApplicationContext.LocalContext["cn"] = cn; - using (SqlCommand cm = cn.CreateCommand()) - { - cm.CommandType = CommandType.StoredProcedure; - cm.CommandText = "getFormatNoUCF"; - cm.Parameters.AddWithValue("@FormatID", criteria.FormatID); - cm.CommandTimeout = Database.DefaultTimeout; - using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) - { - if (!dr.Read()) - { - _ErrorMessage = "No Record Found"; - return; - } - ReadData(dr); - } - } - // removing of item only needed for local data portal - if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client) - ApplicationContext.LocalContext.Remove("cn"); - } - } - catch (Exception ex) - { - if (_MyLog.IsErrorEnabled) _MyLog.Error("FormatInfo.DataPortal_Fetch", ex); - _ErrorMessage = ex.Message; - throw new DbCslaException("FormatInfo.DataPortal_Fetch", ex); - } - } + //public static FormatInfo GetFormatNoUCFByFormatID(int formatID) + //{ + // try + // { + // FormatInfo tmp = DataPortal.Fetch(new FormatIDNoUCFCriteria(formatID)); + // if (tmp.ErrorMessage == "No Record Found") + // { + // tmp.Dispose(); // Clean-up FormatInfo + // tmp = null; + // } + // return tmp; + // } + // catch (Exception ex) + // { + // throw new DbCslaException("Error on FormatInfo.GetFormatNoUCFByFormatID", ex); + // } + //} + //protected class FormatIDNoUCFCriteria + //{ + // private int _FormatID; + // public int FormatID { get { return _FormatID; } } + // public FormatIDNoUCFCriteria(int formatID) + // { + // _FormatID = formatID; + // } + //} + //private void DataPortal_Fetch(FormatIDNoUCFCriteria criteria) + //{ + // if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] FormatInfo.DataPortal_Fetch", GetHashCode()); + // try + // { + // using (SqlConnection cn = Database.VEPROMS_SqlConnection) + // { + // ApplicationContext.LocalContext["cn"] = cn; + // using (SqlCommand cm = cn.CreateCommand()) + // { + // cm.CommandType = CommandType.StoredProcedure; + // cm.CommandText = "getFormatNoUCF"; + // cm.Parameters.AddWithValue("@FormatID", criteria.FormatID); + // cm.CommandTimeout = Database.DefaultTimeout; + // using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) + // { + // if (!dr.Read()) + // { + // _ErrorMessage = "No Record Found"; + // return; + // } + // ReadData(dr); + // } + // } + // // removing of item only needed for local data portal + // if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client) + // ApplicationContext.LocalContext.Remove("cn"); + // } + // } + // catch (Exception ex) + // { + // if (_MyLog.IsErrorEnabled) _MyLog.Error("FormatInfo.DataPortal_Fetch", ex); + // _ErrorMessage = ex.Message; + // throw new DbCslaException("FormatInfo.DataPortal_Fetch", ex); + // } + //} #region PlantFormat [NonSerialized] private PlantFormat _PlantFormat; diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 9caea004..5d00c57b 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -6067,7 +6067,7 @@ namespace VEPROMS.CSLA.Library // To determine if the section has a checkoff... // Section won't have checkoffs if there is no checkofflist, or ProcData pd = ActiveFormat.PlantFormat.FormatData.ProcData; - int maxindx = pd.CheckOffUCF ? pd.CheckOffData.CheckOffList.MaxIndex : pd.CheckOffData.CheckOffList.MaxIndexNoInherit; + int maxindx = pd.CheckOffData.CheckOffList.MaxIndexNoInherit; if (pd.CheckOffData == null || pd.CheckOffData.CheckOffList == null || maxindx <= 0) return false; if (pd.CheckOffData.CheckOffHeaderList == null || pd.CheckOffData.CheckOffHeaderList.MaxIndex <= 1) return true; //if (pd.CheckOffData == null || pd.CheckOffData.CheckOffHeaderList == null || pd.CheckOffData.CheckOffHeaderList.Count <= 1) return false; @@ -6099,7 +6099,7 @@ namespace VEPROMS.CSLA.Library private int SectionDefaultCheckOffIndex() { ProcData pd = ActiveFormat.PlantFormat.FormatData.ProcData; - int maxindx = pd.CheckOffUCF ? pd.CheckOffData.CheckOffList.MaxIndex : pd.CheckOffData.CheckOffList.MaxIndexNoInherit; + int maxindx = pd.CheckOffData.CheckOffList.MaxIndexNoInherit; if (pd.CheckOffData != null && pd.CheckOffData.CheckOffList != null && maxindx == 2) return 0; // if only two items, first is macro - use it. SectionConfig sc = ActiveSection.MyConfig as SectionConfig; return sc.Section_CheckoffListSelection; @@ -6111,23 +6111,23 @@ namespace VEPROMS.CSLA.Library if (!SectionHasCheckOffs()) return null; int stpCoIndx = CheckOffIndex(); // this step has a checkoff defined if (stpCoIndx == -1) return null; - if (stpCoIndx > 1) - { - if (ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF && stpCoIndx >= 100) - { - // get index, if greater than 100, store that - otherwise store index down list. - // if this format does not have ucf signoffs, indx is just the selected index from the combo box. - foreach (CheckOff co in ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList) - { - if (stpCoIndx == co.Index) - { - stpCoIndx = (int)co.Index; - break; - } - } - } - return ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList[stpCoIndx]; // DO override of CheckOffList[] to get ucf - } + //if (stpCoIndx > 1) + //{ + // if (ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF && stpCoIndx >= 100) + // { + // // get index, if greater than 100, store that - otherwise store index down list. + // // if this format does not have ucf signoffs, indx is just the selected index from the combo box. + // foreach (CheckOff co in ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList) + // { + // if (stpCoIndx == co.Index) + // { + // stpCoIndx = (int)co.Index; + // break; + // } + // } + // } + // return ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList[stpCoIndx]; // DO override of CheckOffList[] to get ucf + //} int sectCoIndx = SectionDefaultCheckOffIndex(); // no checkoff on step, see if there is a section default. if (sectCoIndx == -1) return null; if ((ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsHigh) @@ -6161,7 +6161,7 @@ namespace VEPROMS.CSLA.Library get { ProcData pd = ActiveFormat.PlantFormat.FormatData.ProcData; - int maxindx = pd.CheckOffUCF ? pd.CheckOffData.CheckOffList.MaxIndex : pd.CheckOffData.CheckOffList.MaxIndexNoInherit; + int maxindx = pd.CheckOffData.CheckOffList.MaxIndexNoInherit; if (pd.CheckOffData != null && pd.CheckOffData.CheckOffList != null && maxindx == 2 && pd.CheckOffData.CheckOffList[0].MenuItem == "Enabled") return true; // if only two items, first is macro - use it. return false; diff --git a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs index 6703b87c..78941586 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs @@ -126,19 +126,19 @@ namespace VEPROMS.CSLA.Library XmlNodeList nl = XmlDoc.SelectNodes(xpath); return nl.Count > 0; } - private FormatConfig.ReplaceStrData _UCFandOrigReplaceStrData = null; + private FormatConfig.ReplaceStrData _UCFandOrigReplaceStrData = null; // This will return a complete list of ReplaceWords, combining those in the original plant format // with the ones added by the user via User Control of Format (UCF) - public FormatConfig.ReplaceStrData UCFandOrigReplaceStrData - { - get - { - if (_UCFandOrigReplaceStrData != null) return _UCFandOrigReplaceStrData; - _UCFandOrigReplaceStrData = GetMergedReplaceList(this); - return _UCFandOrigReplaceStrData; - } - } - private FormatConfig.ReplaceStrData GetMergedReplaceList(PlantFormat OriginalPlantFormat) + public FormatConfig.ReplaceStrData UCFandOrigReplaceStrData + { + get + { + if (_UCFandOrigReplaceStrData != null) return _UCFandOrigReplaceStrData; + _UCFandOrigReplaceStrData = GetMergedReplaceList(this); + return _UCFandOrigReplaceStrData; + } + } + private FormatConfig.ReplaceStrData GetMergedReplaceList(PlantFormat OriginalPlantFormat) { // need to compare the original format list with the list as it is stored for working with property grid. FormatConfig.ReplaceStrData retlist = new FormatConfig.ReplaceStrData(); // merged list @@ -1579,25 +1579,6 @@ namespace VEPROMS.CSLA.Library return _PSI == null ? _PSI = new PSI(SelectSingleNode("PSI")) : _PSI; } } - private LazyLoad _CheckOffUCF; - public bool CheckOffUCF - { - get - { - // The following line is used in UCF (User Control of Format). - // This needs to be able to control a change in setting in UCF versus its use: - // - This is a special case since the original format, using the value in BaseAll, is always 'false'. And the value - // should never be set in original volian plant format files, if the additional UCF checkoffs are to be used, this must - // be set in the UCF user interface. - if (PlantFormat.DoingUCFCheckOffs) return PlantFormat.DoingUCFCheckOffsUse; - - if (PlantFormat.IgnoreUCF) return LazyLoad(ref _CheckOffUCF, "@CheckOffUCF"); - bool? localvalue = null; // comes to here if in edit or print - use any UCF data before going to original format. - FormatConfig fc = PlantFormat.GetFormatConfig(MyFormat); - if (fc != null) localvalue = fc.PlantFormat.FormatData.Flags.CheckOffUCF; - return localvalue ?? LazyLoad(ref _CheckOffUCF, "@CheckOffUCF"); - } - } // specifies the maxiumn length of the procedure title before PROMS considers to wrap the title // this is used with the {PROCTITLE} PageStyle toekn @@ -1955,25 +1936,25 @@ namespace VEPROMS.CSLA.Library // UseCheckOffUCF is false or there is no FormatConfig (UCF) data: FormatConfig fc = PlantFormat.GetFormatConfig(MyFormat); - if (!MyFormat.PlantFormat.FormatData.ProcData.CheckOffUCF || fc==null) - { - _CheckOffList = new CheckOffList(SelectNodes("CheckOffList/CheckOff"), MyFormat); - // B2019-100: If Ignoring the UCF data, just return the entire list. Also, return entire list if there is no UCF data (fc == null) - if (PlantFormat.IgnoreUCF || fc == null) return _CheckOffList; - // If not ignoring UCF settings, only return those that are active - foreach (FormatConfig.CheckOff co in fc.PlantFormat.FormatData.CheckOffList) - { - foreach (CheckOff coo in _CheckOffList) - { - if ((int)coo.Index == Convert.ToInt32(co.Index) && !(bool)co.Active) - { - _CheckOffList.Remove(coo); - break; - } - } - } - return _CheckOffList; - } + //if (!MyFormat.PlantFormat.FormatData.ProcData.CheckOffUCF || fc==null) + //{ + // _CheckOffList = new CheckOffList(SelectNodes("CheckOffList/CheckOff"), MyFormat); + // // B2019-100: If Ignoring the UCF data, just return the entire list. Also, return entire list if there is no UCF data (fc == null) + // if (PlantFormat.IgnoreUCF || fc == null) return _CheckOffList; + // // If not ignoring UCF settings, only return those that are active + // foreach (FormatConfig.CheckOff co in fc.PlantFormat.FormatData.CheckOffList) + // { + // foreach (CheckOff coo in _CheckOffList) + // { + // if ((int)coo.Index == Convert.ToInt32(co.Index) && !(bool)co.Active) + // { + // _CheckOffList.Remove(coo); + // break; + // } + // } + // } + // return _CheckOffList; + //} // UseCheckOfffUCF is true: // merge the checkoff list from the current format and the checkoff list from the base format _CheckOffList = new CheckOffList(SelectNodes("CheckOffList/CheckOff"), MyFormat); @@ -2008,26 +1989,26 @@ namespace VEPROMS.CSLA.Library { if (_CheckOffHeaderList != null) return _CheckOffHeaderList; FormatConfig fc = PlantFormat.GetFormatConfig(MyFormat); - if (!MyFormat.PlantFormat.FormatData.ProcData.CheckOffUCF || fc == null) - { - _CheckOffHeaderList = new CheckOffHeaderList(SelectNodes("CheckOffHeaderList/CheckOffHeader"), MyFormat); - // Depending on the IgnoreUCF flag, either return this list with UCF Inactive flags set or return the - // list as is. - if (PlantFormat.IgnoreUCF || fc == null) return _CheckOffHeaderList; - // If not ignoring UCF settings, only return those that are active - foreach (FormatConfig.CheckOffHeader coh in fc.PlantFormat.FormatData.CheckOffHeaderList) - { - foreach (CheckOffHeader coo in _CheckOffHeaderList) - { - if ((int)coo.Index == Convert.ToInt32(coh.Index) && !(bool)coh.Active) - { - _CheckOffHeaderList.Remove(coo); - break; - } - } - } - return _CheckOffHeaderList; - } + //if (!MyFormat.PlantFormat.FormatData.ProcData.CheckOffUCF || fc == null) + //{ + // _CheckOffHeaderList = new CheckOffHeaderList(SelectNodes("CheckOffHeaderList/CheckOffHeader"), MyFormat); + // // Depending on the IgnoreUCF flag, either return this list with UCF Inactive flags set or return the + // // list as is. + // if (PlantFormat.IgnoreUCF || fc == null) return _CheckOffHeaderList; + // // If not ignoring UCF settings, only return those that are active + // foreach (FormatConfig.CheckOffHeader coh in fc.PlantFormat.FormatData.CheckOffHeaderList) + // { + // foreach (CheckOffHeader coo in _CheckOffHeaderList) + // { + // if ((int)coo.Index == Convert.ToInt32(coh.Index) && !(bool)coh.Active) + // { + // _CheckOffHeaderList.Remove(coo); + // break; + // } + // } + // } + // return _CheckOffHeaderList; + //} // merge the checkoff header lists from the current format and the list from the base _CheckOffHeaderList = new CheckOffHeaderList(SelectNodes("CheckOffHeaderList/CheckOffHeader"), MyFormat); CheckOffHeaderList retlist2 = new CheckOffHeaderList(SelectNodes("../CheckOffDataUCF/CheckOffHeaderList/CheckOffHeader"), MyFormat); diff --git a/PROMS/Volian.Controls.Library/DisplayTags.cs b/PROMS/Volian.Controls.Library/DisplayTags.cs index 9761ae85..a6674a8a 100644 --- a/PROMS/Volian.Controls.Library/DisplayTags.cs +++ b/PROMS/Volian.Controls.Library/DisplayTags.cs @@ -367,7 +367,7 @@ namespace Volian.Controls.Library if (fmtdata.ProcData.CheckOffData.CheckoffOnSubStepsOnly) _checkoffsAllowed = cmbCheckoff.Enabled = CurItemInfo.IsType("Substep"); - int maxindx = fmtdata.ProcData.CheckOffUCF ? fmtdata.ProcData.CheckOffData.CheckOffList.MaxIndex : fmtdata.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; + int maxindx = fmtdata.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; if (_checkoffsAllowed && !(fmtdata.ProcData.CheckOffData.CheckOffList == null) && !(maxindx == 0)) { CheckOffList chkoffList = fmtdata.ProcData.CheckOffData.CheckOffList; @@ -858,19 +858,19 @@ namespace Volian.Controls.Library int indx = _CheckOffIndex[cmbCheckoff.SelectedIndex]; // C2020-003 get the non-sorted index from the sorted index // get index, if greater than 100, store that - otherwise store index down list. // if this format does not have ucf signoffs, indx is just the selected index from the combo box. - if (CurItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF) - { - // get index, if greater than 100, store that - otherwise store index down list. - // if this format does not have ucf signoffs, indx is just the selected index from the combo mobx. - foreach (CheckOff co in CurItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList) - { - if (cmbCheckoff.SelectedItem == co.MenuItem) - { - if ((int)co.Index >= 100) indx = (int)co.Index; - break; - } - } - } + //if (CurItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF) + //{ + // // get index, if greater than 100, store that - otherwise store index down list. + // // if this format does not have ucf signoffs, indx is just the selected index from the combo mobx. + // foreach (CheckOff co in CurItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList) + // { + // if (cmbCheckoff.SelectedItem == co.MenuItem) + // { + // if ((int)co.Index >= 100) indx = (int)co.Index; + // break; + // } + // } + //} StepConfig sc = CurItemInfo.MyConfig as StepConfig; sc.Step_CheckOffIndex = indx; //using (Content cnt = Content.Get(CurItemInfo.MyContent.ContentID)) diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index ae6f5783..a6afdbca 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -218,12 +218,6 @@ dlgEnhMissingItem.cs - - Form - - - dlgUCFImportOptions.cs - UserControl @@ -479,9 +473,6 @@ dlgEnhMissingItem.cs - - dlgUCFImportOptions.cs - FindReplace.cs Designer diff --git a/PROMS/Volian.Controls.Library/dlgUCFImportOptions.Designer.cs b/PROMS/Volian.Controls.Library/dlgUCFImportOptions.Designer.cs deleted file mode 100644 index 9a850948..00000000 --- a/PROMS/Volian.Controls.Library/dlgUCFImportOptions.Designer.cs +++ /dev/null @@ -1,397 +0,0 @@ -namespace Volian.Controls.Library -{ - partial class dlgUCFImportOptions - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.btnOk = new System.Windows.Forms.Button(); - this.btnCancel = new System.Windows.Forms.Button(); - this.pnlOptions = new System.Windows.Forms.Panel(); - this.pnlChoices = new System.Windows.Forms.Panel(); - this.cmbFNames = new DevComponents.DotNetBar.Controls.ComboBoxEx(); - this.grPnlLoad = new DevComponents.DotNetBar.Controls.GroupPanel(); - this.grPnlUse = new DevComponents.DotNetBar.Controls.GroupPanel(); - this.rbOnlyImported = new System.Windows.Forms.RadioButton(); - this.rbAll = new System.Windows.Forms.RadioButton(); - this.rbSetOnly = new System.Windows.Forms.RadioButton(); - this.cbUse = new DevComponents.DotNetBar.Controls.CheckBoxX(); - this.lblLoadFormat = new DevComponents.DotNetBar.LabelX(); - this.sBtnLoad = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.lblFmt = new System.Windows.Forms.Label(); - this.pnlXmlDiff = new System.Windows.Forms.Panel(); - this.wbBrwsExisting = new System.Windows.Forms.WebBrowser(); - this.splitterWebBrowsers = new System.Windows.Forms.Splitter(); - this.pnlWbBrwsImp = new System.Windows.Forms.Panel(); - this.wbBrwsImporting = new System.Windows.Forms.WebBrowser(); - this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); - this.pnlChoices.SuspendLayout(); - this.grPnlLoad.SuspendLayout(); - this.grPnlUse.SuspendLayout(); - this.pnlXmlDiff.SuspendLayout(); - this.pnlWbBrwsImp.SuspendLayout(); - this.SuspendLayout(); - // - // btnOk - // - this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.btnOk.Location = new System.Drawing.Point(31, 356); - this.btnOk.Name = "btnOk"; - this.btnOk.Size = new System.Drawing.Size(65, 23); - this.btnOk.TabIndex = 5; - this.btnOk.Text = "OK"; - this.btnOk.UseVisualStyleBackColor = true; - this.btnOk.Click += new System.EventHandler(this.btnOk_Click); - // - // btnCancel - // - this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Location = new System.Drawing.Point(121, 356); - this.btnCancel.Name = "btnCancel"; - this.btnCancel.Size = new System.Drawing.Size(65, 23); - this.btnCancel.TabIndex = 6; - this.btnCancel.Text = "Cancel"; - this.btnCancel.UseVisualStyleBackColor = true; - // - // pnlOptions - // - this.pnlOptions.Location = new System.Drawing.Point(0, 0); - this.pnlOptions.Name = "pnlOptions"; - this.pnlOptions.Size = new System.Drawing.Size(200, 100); - this.pnlOptions.TabIndex = 0; - // - // pnlChoices - // - this.pnlChoices.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.pnlChoices.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pnlChoices.Controls.Add(this.cmbFNames); - this.pnlChoices.Controls.Add(this.grPnlLoad); - this.pnlChoices.Controls.Add(this.lblLoadFormat); - this.pnlChoices.Controls.Add(this.sBtnLoad); - this.pnlChoices.Controls.Add(this.lblFmt); - this.pnlChoices.Controls.Add(this.btnCancel); - this.pnlChoices.Controls.Add(this.btnOk); - this.pnlChoices.Location = new System.Drawing.Point(0, 0); - this.pnlChoices.Name = "pnlChoices"; - this.pnlChoices.Size = new System.Drawing.Size(250, 606); - this.pnlChoices.TabIndex = 7; - // - // cmbFNames - // - this.cmbFNames.DisplayMember = "Text"; - this.cmbFNames.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.cmbFNames.FormattingEnabled = true; - this.cmbFNames.ItemHeight = 16; - this.cmbFNames.Location = new System.Drawing.Point(26, 48); - this.cmbFNames.Name = "cmbFNames"; - this.cmbFNames.Size = new System.Drawing.Size(191, 22); - this.cmbFNames.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.cmbFNames.TabIndex = 15; - this.cmbFNames.SelectedIndexChanged += new System.EventHandler(this.cmbFNames_SelectedIndexChanged); - // - // grPnlLoad - // - this.grPnlLoad.CanvasColor = System.Drawing.SystemColors.Control; - this.grPnlLoad.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007; - this.grPnlLoad.Controls.Add(this.grPnlUse); - this.grPnlLoad.Controls.Add(this.cbUse); - this.grPnlLoad.DisabledBackColor = System.Drawing.Color.Empty; - this.grPnlLoad.Location = new System.Drawing.Point(11, 130); - this.grPnlLoad.Name = "grPnlLoad"; - this.grPnlLoad.Size = new System.Drawing.Size(224, 184); - // - // - // - this.grPnlLoad.Style.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; - this.grPnlLoad.Style.BackColorGradientAngle = 90; - this.grPnlLoad.Style.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; - this.grPnlLoad.Style.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; - this.grPnlLoad.Style.BorderBottomWidth = 1; - this.grPnlLoad.Style.BorderColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.grPnlLoad.Style.BorderLeft = DevComponents.DotNetBar.eStyleBorderType.Solid; - this.grPnlLoad.Style.BorderLeftWidth = 1; - this.grPnlLoad.Style.BorderRight = DevComponents.DotNetBar.eStyleBorderType.Solid; - this.grPnlLoad.Style.BorderRightWidth = 1; - this.grPnlLoad.Style.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; - this.grPnlLoad.Style.BorderTopWidth = 1; - this.grPnlLoad.Style.CornerDiameter = 4; - this.grPnlLoad.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; - this.grPnlLoad.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; - this.grPnlLoad.Style.TextColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; - this.grPnlLoad.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; - // - // - // - this.grPnlLoad.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.grPnlLoad.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.grPnlLoad.TabIndex = 14; - this.grPnlLoad.Text = "Load Options"; - // - // grPnlUse - // - this.grPnlUse.BackColor = System.Drawing.Color.Transparent; - this.grPnlUse.CanvasColor = System.Drawing.SystemColors.Control; - this.grPnlUse.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007; - this.grPnlUse.Controls.Add(this.rbOnlyImported); - this.grPnlUse.Controls.Add(this.rbAll); - this.grPnlUse.Controls.Add(this.rbSetOnly); - this.grPnlUse.DisabledBackColor = System.Drawing.Color.Empty; - this.grPnlUse.Location = new System.Drawing.Point(15, 39); - this.grPnlUse.Name = "grPnlUse"; - this.grPnlUse.Size = new System.Drawing.Size(181, 119); - // - // - // - this.grPnlUse.Style.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; - this.grPnlUse.Style.BackColorGradientAngle = 90; - this.grPnlUse.Style.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; - this.grPnlUse.Style.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; - this.grPnlUse.Style.BorderBottomWidth = 1; - this.grPnlUse.Style.BorderColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; - this.grPnlUse.Style.BorderLeft = DevComponents.DotNetBar.eStyleBorderType.Solid; - this.grPnlUse.Style.BorderLeftWidth = 1; - this.grPnlUse.Style.BorderRight = DevComponents.DotNetBar.eStyleBorderType.Solid; - this.grPnlUse.Style.BorderRightWidth = 1; - this.grPnlUse.Style.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; - this.grPnlUse.Style.BorderTopWidth = 1; - this.grPnlUse.Style.CornerDiameter = 4; - this.grPnlUse.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; - this.grPnlUse.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; - this.grPnlUse.Style.TextColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; - this.grPnlUse.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; - // - // - // - this.grPnlUse.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; - // - // - // - this.grPnlUse.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.grPnlUse.TabIndex = 1; - this.grPnlUse.Text = "In Procedure(s)"; - // - // rbOnlyImported - // - this.rbOnlyImported.AutoSize = true; - this.rbOnlyImported.BackColor = System.Drawing.Color.Transparent; - this.rbOnlyImported.Location = new System.Drawing.Point(12, 6); - this.rbOnlyImported.Name = "rbOnlyImported"; - this.rbOnlyImported.Size = new System.Drawing.Size(142, 21); - this.superTooltip1.SetSuperTooltip(this.rbOnlyImported, new DevComponents.DotNetBar.SuperTooltipInfo("For Imported Only", "", "The changed UCF will only be used by the procedure(s) that are being imported.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.rbOnlyImported.TabIndex = 5; - this.rbOnlyImported.TabStop = true; - this.rbOnlyImported.Text = "For Imported Only"; - this.rbOnlyImported.UseVisualStyleBackColor = false; - // - // rbAll - // - this.rbAll.AutoSize = true; - this.rbAll.BackColor = System.Drawing.Color.Transparent; - this.rbAll.Location = new System.Drawing.Point(12, 33); - this.rbAll.Name = "rbAll"; - this.rbAll.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.rbAll.Size = new System.Drawing.Size(69, 21); - this.superTooltip1.SetSuperTooltip(this.rbAll, new DevComponents.DotNetBar.SuperTooltipInfo("For All ", "", "The changed UCF will be used in all procedure(s) and section(s) within the databa" + - "se that referenced this UCF. The one that existed in the database will be renam" + - "ed to \'Old N of UCFname\'.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.rbAll.TabIndex = 6; - this.rbAll.TabStop = true; - this.rbAll.Text = "For All"; - this.rbAll.UseVisualStyleBackColor = false; - // - // rbSetOnly - // - this.rbSetOnly.AutoSize = true; - this.rbSetOnly.BackColor = System.Drawing.Color.Transparent; - this.rbSetOnly.Location = new System.Drawing.Point(12, 60); - this.rbSetOnly.Name = "rbSetOnly"; - this.rbSetOnly.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.rbSetOnly.Size = new System.Drawing.Size(108, 21); - this.superTooltip1.SetSuperTooltip(this.rbSetOnly, new DevComponents.DotNetBar.SuperTooltipInfo("For Set Only", "", "The changed UCF will only be used by the procedure(s)/sections(s) within the proc" + - "edure set that this procedure belongs.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.rbSetOnly.TabIndex = 7; - this.rbSetOnly.TabStop = true; - this.rbSetOnly.Text = "For Set Only"; - this.rbSetOnly.UseVisualStyleBackColor = false; - // - // cbUse - // - this.cbUse.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.cbUse.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.cbUse.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbUse.Location = new System.Drawing.Point(17, 5); - this.cbUse.Name = "cbUse"; - this.cbUse.Size = new System.Drawing.Size(125, 28); - this.cbUse.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.cbUse, new DevComponents.DotNetBar.SuperTooltipInfo("Use", "", "If checked, the changes will be used as defined In Procedure(s) below. Otherwise," + - " the format is loaded but not used. ", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.cbUse.TabIndex = 0; - this.cbUse.Text = "Use"; - this.cbUse.CheckedChanged += new System.EventHandler(this.cbUse_CheckedChanged); - // - // lblLoadFormat - // - // - // - // - this.lblLoadFormat.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.lblLoadFormat.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblLoadFormat.Location = new System.Drawing.Point(124, 89); - this.lblLoadFormat.Name = "lblLoadFormat"; - this.lblLoadFormat.Size = new System.Drawing.Size(94, 24); - this.superTooltip1.SetSuperTooltip(this.lblLoadFormat, new DevComponents.DotNetBar.SuperTooltipInfo("Load Format", "", "The User Control of Format changes will be loaded (imported) into the database. O" + - "therwise it will be ignored and the existing User Control of Format will be used" + - ".", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.lblLoadFormat.TabIndex = 13; - this.lblLoadFormat.Text = "Load Format"; - // - // sBtnLoad - // - this.sBtnLoad.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.sBtnLoad.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.sBtnLoad.Location = new System.Drawing.Point(13, 88); - this.sBtnLoad.Name = "sBtnLoad"; - this.sBtnLoad.Size = new System.Drawing.Size(102, 26); - this.sBtnLoad.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.sBtnLoad.TabIndex = 12; - this.sBtnLoad.ValueChanged += new System.EventHandler(this.sBtnLoad_ValueChanged); - // - // lblFmt - // - this.lblFmt.AutoSize = true; - this.lblFmt.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblFmt.Location = new System.Drawing.Point(16, 19); - this.lblFmt.Name = "lblFmt"; - this.lblFmt.Size = new System.Drawing.Size(140, 18); - this.lblFmt.TabIndex = 8; - this.lblFmt.Text = "Changes to Format:"; - // - // pnlXmlDiff - // - this.pnlXmlDiff.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pnlXmlDiff.Controls.Add(this.wbBrwsExisting); - this.pnlXmlDiff.Controls.Add(this.splitterWebBrowsers); - this.pnlXmlDiff.Controls.Add(this.pnlWbBrwsImp); - this.pnlXmlDiff.Location = new System.Drawing.Point(255, 0); - this.pnlXmlDiff.Name = "pnlXmlDiff"; - this.pnlXmlDiff.Size = new System.Drawing.Size(548, 601); - this.pnlXmlDiff.TabIndex = 8; - // - // wbBrwsExisting - // - this.wbBrwsExisting.Dock = System.Windows.Forms.DockStyle.Fill; - this.wbBrwsExisting.Location = new System.Drawing.Point(0, 0); - this.wbBrwsExisting.MinimumSize = new System.Drawing.Size(20, 20); - this.wbBrwsExisting.Name = "wbBrwsExisting"; - this.wbBrwsExisting.Size = new System.Drawing.Size(548, 298); - this.wbBrwsExisting.TabIndex = 0; - // - // splitterWebBrowsers - // - this.splitterWebBrowsers.Dock = System.Windows.Forms.DockStyle.Bottom; - this.splitterWebBrowsers.Location = new System.Drawing.Point(0, 298); - this.splitterWebBrowsers.Name = "splitterWebBrowsers"; - this.splitterWebBrowsers.Size = new System.Drawing.Size(548, 3); - this.splitterWebBrowsers.TabIndex = 2; - this.splitterWebBrowsers.TabStop = false; - // - // pnlWbBrwsImp - // - this.pnlWbBrwsImp.Controls.Add(this.wbBrwsImporting); - this.pnlWbBrwsImp.Dock = System.Windows.Forms.DockStyle.Bottom; - this.pnlWbBrwsImp.Location = new System.Drawing.Point(0, 301); - this.pnlWbBrwsImp.Name = "panel1"; - this.pnlWbBrwsImp.Size = new System.Drawing.Size(548, 300); - this.pnlWbBrwsImp.TabIndex = 3; - // - // wbBrwsImporting - // - this.wbBrwsImporting.Dock = System.Windows.Forms.DockStyle.Fill; - this.wbBrwsImporting.Location = new System.Drawing.Point(0, 0); - this.wbBrwsImporting.MinimumSize = new System.Drawing.Size(20, 20); - this.wbBrwsImporting.Name = "wbBrwsImporting"; - this.wbBrwsImporting.Size = new System.Drawing.Size(548, 300); - this.wbBrwsImporting.TabIndex = 0; - // - // superTooltip1 - // - this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray); - this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; - // - // dlgUCFImportOptions - // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(803, 606); - this.Controls.Add(this.pnlXmlDiff); - this.Controls.Add(this.pnlChoices); - this.Name = "dlgUCFImportOptions"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "User Control Of Format - Import Options"; - this.pnlChoices.ResumeLayout(false); - this.pnlChoices.PerformLayout(); - this.grPnlLoad.ResumeLayout(false); - this.grPnlUse.ResumeLayout(false); - this.grPnlUse.PerformLayout(); - this.pnlXmlDiff.ResumeLayout(false); - this.pnlWbBrwsImp.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Button btnOk; - private System.Windows.Forms.Button btnCancel; - private System.Windows.Forms.Panel pnlOptions; - private System.Windows.Forms.Panel pnlXmlDiff; - private System.Windows.Forms.WebBrowser wbBrwsExisting; - private System.Windows.Forms.Panel pnlChoices; - private System.Windows.Forms.Label lblFmt; - private DevComponents.DotNetBar.LabelX lblLoadFormat; - private DevComponents.DotNetBar.Controls.SwitchButton sBtnLoad; - private DevComponents.DotNetBar.Controls.GroupPanel grPnlLoad; - private DevComponents.DotNetBar.Controls.GroupPanel grPnlUse; - private DevComponents.DotNetBar.Controls.CheckBoxX cbUse; - private System.Windows.Forms.RadioButton rbOnlyImported; - private System.Windows.Forms.RadioButton rbAll; - private System.Windows.Forms.RadioButton rbSetOnly; - private DevComponents.DotNetBar.SuperTooltip superTooltip1; - private DevComponents.DotNetBar.Controls.ComboBoxEx cmbFNames; - private System.Windows.Forms.Splitter splitterWebBrowsers; - private System.Windows.Forms.Panel pnlWbBrwsImp; - private System.Windows.Forms.WebBrowser wbBrwsImporting; - } -} \ No newline at end of file diff --git a/PROMS/Volian.Controls.Library/dlgUCFImportOptions.cs b/PROMS/Volian.Controls.Library/dlgUCFImportOptions.cs deleted file mode 100644 index 8b411f48..00000000 --- a/PROMS/Volian.Controls.Library/dlgUCFImportOptions.cs +++ /dev/null @@ -1,183 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Xml; -using System.Xml.Linq; -using System.Xml.Xsl; -using System.IO; -using VEPROMS.CSLA.Library; - -namespace Volian.Controls.Library -{ - // This dialog is used when the imported UCF is different than one existing in the database. It allows the user to - // select whether to overwrite, copy, etc. See the user interface project/dlgExportImport.cs for the options. - public partial class dlgUCFImportOptions : Form - { - ListExistingFC; - ListImportedFC; - private bool _Initializing = false; - public E_UCFImportOptions UCFImportOptionsCase = E_UCFImportOptions.LoadOnlyImported; - public dlgUCFImportOptions(List name, List existingFC, List importedFC, E_UCFImportOptions defImpOpt, string xmlpath) - { - _Initializing = true; - InitializeComponent(); - InitializeFNamesCombo(name); - ExistingFC = existingFC; - ImportedFC = importedFC; - cmbFNames.SelectedIndex = 0; // this displays the web browser differences for first name in the combo box. - - // initialize the import of UCF option radio buttons: - UCFImportOptionsCase = defImpOpt; - rbSetOnly.Visible = !xmlpath.ToLower().Contains("folder"); - if (defImpOpt == E_UCFImportOptions.Ignore) - { - sBtnLoad.Value = false; - grPnlLoad.Enabled = false; - grPnlUse.Enabled = false; - } - else if (defImpOpt == E_UCFImportOptions.LoadNotUsed) - { - sBtnLoad.Value = true; - grPnlLoad.Enabled = true; - cbUse.Checked = false; - grPnlUse.Enabled = false; - } - else if (defImpOpt == E_UCFImportOptions.LoadOnlyImported) - { - sBtnLoad.Value = true; - grPnlLoad.Enabled = true; - cbUse.Checked = true; - grPnlUse.Enabled = true; - rbOnlyImported.Checked = true; - } - else if (defImpOpt == E_UCFImportOptions.LoadUseAll) - { - sBtnLoad.Value = true; - grPnlLoad.Enabled = true; - cbUse.Checked = true; - grPnlUse.Enabled = true; - rbAll.Checked = true; - } - else if (defImpOpt == E_UCFImportOptions.LoadForSetOnly) - { - sBtnLoad.Value = true; - grPnlLoad.Enabled = true; - cbUse.Checked = true; - grPnlUse.Enabled = true; - rbSetOnly.Checked = true; - } - _Initializing = false; - return; - } - - private void InitializeFNamesCombo(List name) - { - foreach (string str in name) - cmbFNames.Items.Add(str); - } - - private void DisplayXmlDiff(string existingFC, string importedFC) - { - XmlDocument xd = new XmlDocument(); - xd.LoadXml(existingFC); - XmlNodeList xnl = xd.GetElementsByTagName("FormatConfig"); - if (xnl != null && xnl.Count > 0) AddAttribute(xnl[0], "Version", "Existing"); - string sXSLSummary = System.IO.File.ReadAllText(Application.StartupPath + "\\" + "UCFImpDetails.xsl"); - StringWriter sw = new StringWriter(); - StringWriter xsw = new StringWriter(); - using (XmlReader xrt = XmlReader.Create(new StringReader(sXSLSummary))) - { - XmlTextWriter tx = new XmlTextWriter(xsw); - xd.WriteTo(tx); - string tmp = sw.ToString(); - tmp = xd.InnerXml; - using (XmlReader xri = XmlReader.Create(new StringReader(tmp))) - { - using (XmlWriter xwo = XmlWriter.Create(sw)) - { - XslCompiledTransform xsl = new XslCompiledTransform(); - xsl.Load(xrt); - xsl.Transform(xri, xwo); // Perform Transform - } - wbBrwsExisting.DocumentText = sw.ToString(); - } - } - StringWriter sw1 = new StringWriter(); - StringWriter xsw1 = new StringWriter(); - XmlDocument xd1 = new XmlDocument(); - xd1.LoadXml(importedFC); - xnl = xd1.GetElementsByTagName("FormatConfig"); - if (xnl != null && xnl.Count > 0) AddAttribute(xnl[0], "Version", "Importing"); - using (XmlReader xrt = XmlReader.Create(new StringReader(sXSLSummary))) - { - XmlTextWriter tx = new XmlTextWriter(xsw1); - xd1.WriteTo(tx); - string tmp = xd1.InnerXml; - using (XmlReader xri = XmlReader.Create(new StringReader(tmp))) - { - using (XmlWriter xwo = XmlWriter.Create(sw1)) - { - XslCompiledTransform xsl = new XslCompiledTransform(); - xsl.Load(xrt); - xsl.Transform(xri, xwo); // Perform Transform - } - wbBrwsImporting.DocumentText = sw1.ToString(); - } - } - } - - private void AddAttribute(XmlNode xn, string name, string value) - { - XmlAttribute xa = xn.OwnerDocument.CreateAttribute(name); - xa.Value = value.ToString(); - xn.Attributes.Append(xa); - } - private void btnOk_Click(object sender, EventArgs e) - { - if (!sBtnLoad.Value) UCFImportOptionsCase = E_UCFImportOptions.Ignore; - else if (!cbUse.Checked) UCFImportOptionsCase = E_UCFImportOptions.LoadNotUsed; - else if (rbOnlyImported.Checked) UCFImportOptionsCase = E_UCFImportOptions.LoadOnlyImported; - else if (rbAll.Checked) UCFImportOptionsCase = E_UCFImportOptions.LoadUseAll; - else if (rbSetOnly.Checked) UCFImportOptionsCase = E_UCFImportOptions.LoadForSetOnly; - this.Close(); - } - - private void sBtnLoad_ValueChanged(object sender, EventArgs e) // Import options for UCF Change: Load switch button - { - if (_Initializing) return; - if (sBtnLoad.Value) - { - grPnlLoad.Enabled = true; // Import the ucf change. let user select whether to use it. - grPnlUse.Enabled = false; - cbUse.Checked = false; - } - else - { - grPnlLoad.Enabled = false; // Don't import the ucf change. - grPnlUse.Enabled = false; - } - } - - private void cbUse_CheckedChanged(object sender, EventArgs e) // Import options for UCF Change: use checkbox - { - if (_Initializing) return; - if (cbUse.Checked) - grPnlUse.Enabled = true; // Use the change. enable the load group & select for imported only - else - grPnlUse.Enabled = false; // Don't use the change. - } - - private void cmbFNames_SelectedIndexChanged(object sender, EventArgs e) - { - int indx = cmbFNames.SelectedIndex; - string existingFC = ExistingFC[indx]; - string importedFC = ImportedFC[indx]; - DisplayXmlDiff(existingFC, importedFC); - } - } -} diff --git a/PROMS/Volian.Controls.Library/dlgUCFImportOptions.resx b/PROMS/Volian.Controls.Library/dlgUCFImportOptions.resx deleted file mode 100644 index 2e5faf21..00000000 --- a/PROMS/Volian.Controls.Library/dlgUCFImportOptions.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - True - - \ No newline at end of file diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index 68a13f7a..deb8468c 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -5215,7 +5215,7 @@ namespace Volian.Print.Library // First see if there is any checkoff data in the format file and that there // is a pagelist item for the checkoff header. - int maxindx = itemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF ? itemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndex : itemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; + int maxindx = itemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; if (maxindx <= 0) return; if (MyPageHelper.PageListCheckOffHeader == null) return; -- 2.49.1 From e37928bf89bf9a4bf1c701ef7d81410e10a01164 Mon Sep 17 00:00:00 2001 From: mschill Date: Thu, 28 Aug 2025 07:53:54 -0400 Subject: [PATCH 09/25] B2025-044 Intermittent caching refresh issue with importing procedure sets. --- PROMS/VEPROMS User Interface/dlgExportImport.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/PROMS/VEPROMS User Interface/dlgExportImport.cs b/PROMS/VEPROMS User Interface/dlgExportImport.cs index da772d9d..2b089bb0 100644 --- a/PROMS/VEPROMS User Interface/dlgExportImport.cs +++ b/PROMS/VEPROMS User Interface/dlgExportImport.cs @@ -923,6 +923,7 @@ namespace VEPROMS { string number = ""; int max = -1; + MyFolder.RefreshChildFolders(); // get maximum number of existing copies. foreach (FolderInfo fi in MyFolder.ChildFolders) { -- 2.49.1 From 8abe57552cc8d9e93ba33461c9314743e956ea08 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 28 Aug 2025 15:24:28 -0400 Subject: [PATCH 10/25] C2025-022-Remove-UCF-2 --- .../Properties/AssemblyInfo.cs | 8 +- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 2 - .../Config/FormatConfig.cs | 21 +- .../Extension/ContentExt.cs | 82 -------- .../Extension/DisplayText.cs | 54 ++--- .../Extension/FormatExt.cs | 65 +----- PROMS/VEPROMS.CSLA.Library/Format/ENums.cs | 8 - .../Format/PlantFormat.cs | 136 ++++++------ .../Volian.Base.Library.csproj | 9 - .../frmRtfEdit.Designer.cs | 179 ---------------- PROMS/Volian.Base.Library/frmRtfEdit.cs | 199 ------------------ PROMS/Volian.Base.Library/frmRtfEdit.resx | 120 ----------- 12 files changed, 116 insertions(+), 767 deletions(-) delete mode 100644 PROMS/Volian.Base.Library/frmRtfEdit.Designer.cs delete mode 100644 PROMS/Volian.Base.Library/frmRtfEdit.cs delete mode 100644 PROMS/Volian.Base.Library/frmRtfEdit.resx diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs index 5ab99892..6b79be57 100644 --- a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs +++ b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs @@ -44,8 +44,12 @@ using System.Runtime.InteropServices; // Revision DHH (day - no leading zero, two digit hour - military time // // ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** -[assembly: AssemblyVersion("2.2.2508.2621")] -[assembly: AssemblyFileVersion("2.2.2508.2621")] +[assembly: AssemblyVersion("2.2.2508.2815")] +[assembly: AssemblyFileVersion("2.2.2508.2815")] + + + + diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index acabca31..6cb5c060 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -269,8 +269,6 @@ namespace VEPROMS return true; } - private E_UCFImportOptions _UCFImportOptionsFromSettings; - public frmVEPROMS() { // The following Try/Catch was added to protect against a problem seen by Kathy and Michelle diff --git a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs index 0bca3814..aac98914 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs @@ -273,8 +273,7 @@ namespace VEPROMS.CSLA.Library #endregion ReplaceStrData #region ReplaceStr //[Flags] - //public enum - //: uint + //public enum E_ReplaceFlags : uint //{ // High = 0x0001, // Do ReplaceWords in HIGH LEVEL STEPS // RNO = 0x0002, // Do ReplaceWords in RNOS @@ -320,15 +319,15 @@ namespace VEPROMS.CSLA.Library get { return _State; } set { _State = value; } } - private E_ReplaceFlagsUCF _Flag; - [Editor(typeof(FlagEnumUIEditor), typeof(System.Drawing.Design.UITypeEditor))] - [XmlAttribute("Flag")] - [DisplayName("Flags (Use In)")] // Note that [Description] is not used in collection items (that use collection editor) - public E_ReplaceFlagsUCF Flag - { - get { return (E_ReplaceFlagsUCF)_Flag; } - set { _Flag = value; } - } + //private E_ReplaceFlags _Flag; + //[Editor(typeof(FlagEnumUIEditor), typeof(System.Drawing.Design.UITypeEditor))] + //[XmlAttribute("Flag")] + //[DisplayName("Flags (Use In)")] // Note that [Description] is not used in collection items (that use collection editor) + //public E_ReplaceFlags Flag + //{ + // get { return (E_ReplaceFlags)_Flag; } + // set { _Flag = value; } + //} private string _ReplaceWord; [XmlAttribute("ReplaceWord")] [DisplayName("Replace Word")] diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ContentExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ContentExt.cs index 7f32e607..fff93e8c 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ContentExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ContentExt.cs @@ -1756,88 +1756,6 @@ namespace VEPROMS.CSLA.Library #endregion - //#region UCF Clear Overwridden Formats - //private class ClearOverrideFormatsByFolderCriteria - //{ - // public ClearOverrideFormatsByFolderCriteria(int folderID, int? formatID, int? newformatID) - // { - // _FormatID = formatID; - // _FolderID = folderID; - // _NewFormatID = newformatID; - // } - // private int? _FormatID; - // public int? FormatID - // { - // get { return _FormatID; } - // set { _FormatID = value; } - // } - // private int? _NewFormatID; - // public int? NewFormatID - // { - // get { return _NewFormatID; } - // set { _NewFormatID = value; } - // } - // private int _FolderID; - // public int FolderID - // { - // get { return _FolderID; } - // set { _FolderID = value; } - // } - //} - - //private void DataPortal_Fetch(ClearOverrideFormatsByFolderCriteria criteria) - //{ - // try - // { - // using (SqlConnection cn = Database.VEPROMS_SqlConnection) - // { - // using (SqlCommand cm = cn.CreateCommand()) - // { - // cm.CommandType = CommandType.StoredProcedure; - // cm.CommandText = "vesp_ClearOverrideFormatsByFolder"; - // cm.Parameters.AddWithValue("@FolderID", criteria.FolderID); - // if (criteria.FormatID == null) - // cm.Parameters.AddWithValue("@FormatID", DBNull.Value); - // else - // cm.Parameters.AddWithValue("@FormatID", criteria.FormatID); - // if (criteria.NewFormatID == null) - // cm.Parameters.AddWithValue("@NewFormatID", DBNull.Value); - // else - // cm.Parameters.AddWithValue("@NewFormatID", criteria.NewFormatID); - // cm.CommandTimeout = Database.DefaultTimeout; - // using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) - // { - // IsReadOnly = false; - // while (dr.Read()) - // { - // ContentInfo contentInfo = new ContentInfo(dr); - // this.Add(contentInfo); - // } - // IsReadOnly = true; - // } - // } - // } - // } - // catch (Exception ex) - // { - // Database.LogException("ClearOverrideFormatsByFolderCriteria.DataPortal_Fetch", ex); - // throw new DbCslaException("ClearOverrideFormatsByFolderCriteria.DataPortal_Fetch", ex); - // } - //} - - //public static ContentInfoList ClearOverrideFormatsByFolder(int folderID, int? formatID, int? newformatID) - //{ - // try - // { - // ContentInfoList tmp = DataPortal.Fetch(new ClearOverrideFormatsByFolderCriteria(folderID, formatID, newformatID)); - // return tmp; - // } - // catch (Exception ex) - // { - // throw new DbCslaException("Error on ContentInfoList.ClearOverrideFormatsByFolder", ex); - // } - //} - private class ClearOverrideFormatsByDocVersionCriteria { public ClearOverrideFormatsByDocVersionCriteria(string dvlist, int? formatID, int? newformatID) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs index 58136b8e..e7f3fe24 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs @@ -2153,7 +2153,7 @@ namespace VEPROMS.CSLA.Library // return Text; //} #endregion - private static Dictionary dicReplaceRegex = new Dictionary(); + private static Dictionary dicReplaceRegex = new Dictionary(); private static bool? _ProcessReplaceWords; public static bool ProcessReplaceWords { @@ -2178,7 +2178,8 @@ namespace VEPROMS.CSLA.Library // F2021-053: BNPP Alarm - need ability to have super/sub scripts in the text of Alarm Tables (ROs). // if doing replace words for Page List items, the current item is not a step, use _DoReplWordInPageList flags this if (_MyItemInfo.MyContent.Type < 20000 && !_DoReplWordInPageList) return Text; // for now only replace in steps. - FormatConfig.ReplaceStrData rsl = _MyFormat.PlantFormat.UCFandOrigReplaceStrData; + //FormatConfig.ReplaceStrData rsl = _MyFormat.PlantFormat.FormatConfig.UCFandReplaceStrData; + ReplaceStrList rsl = _MyFormat.PlantFormat.FormatData.SectData.ReplaceStrList; if (rsl.Count == 1 && (rsl[0].ReplaceWord == null || rsl[0].ReplaceWord == "")) return Text; // F2021-093: Handle partials first and then plain replace words. Need to do this so that the words don't get processed by plain replace @@ -2193,15 +2194,16 @@ namespace VEPROMS.CSLA.Library // Loop through text looking for words to be replaced Dictionary shouldReplace = new Dictionary(); //int profileDepth = ProfileTimer.Push(">>>> DoReplaceWords2.ForLoop"); - foreach (FormatConfig.ReplaceStr rs in rsl) + foreach (ReplaceStr rs in rsl) { - bool dopartial = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.Partials; - if (!dopartial) // F2021-093: Partials moved into their own method and done first + //bool dopartial = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.CaseInsens) == E_ReplaceFlags.Partials; // save it may need to be changed back to this code. + bool dopartial = (rs.Flag & E_ReplaceFlags.Partials) == E_ReplaceFlags.Partials; // from pre-UCF + if (!dopartial) // F2021-093: Partials moved into their own method and done first { - bool onlyDoList = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.BeforeList; // C2021-045 - bool onlyIfFirstWord = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.FirstWord; // C2021-056 - bool doInPagelist = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.PageList; // B2021-132 - //B2021-132 only do replacewords in paglist if the replaceword pagelist flag is set + bool onlyDoList = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.BeforeList) == E_ReplaceFlags.BeforeList; // C2021-045, C2025-022 remove UFC + bool onlyIfFirstWord = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.FirstWord) == E_ReplaceFlags.FirstWord; // C2021-056 + bool doInPagelist = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.PageList) == E_ReplaceFlags.PageList; // B2021-132 + //B2021-132 only do replacewords in paglist if the replaceword pagelist flag is set if (_DoReplWordInPageList && !doInPagelist) continue; // note that the order of this check is important. Check in this order... @@ -2228,7 +2230,9 @@ namespace VEPROMS.CSLA.Library { if (!dicReplaceRegex.ContainsKey(rs)) { - RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; + RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.CaseInsens) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; + //RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; + //RegexOptions myOptions = (rs.Flag & E_ReplaceFlags.CaseInsens) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; //int profileDepth3 = ProfileTimer.Push(">>>> DoReplaceWords2.BuildMatch"); // CASEINSENS: Do ReplaceWords for all words that match, regardless of case, and replace with the ReplaceWith string as is //RegexOptions myOptions = (rs.Flag & E_ReplaceFlags.CaseInsens) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase & RegexOptions.Singleline : RegexOptions.None & RegexOptions.Singleline; @@ -2268,18 +2272,18 @@ namespace VEPROMS.CSLA.Library // F2021-093: separate out partial replace words so that they can all be done before normal replace words. Partials read in the 'repword', use // it as-is as a dotnet regular expression to do replacement. Aside from the dotnet regular expression process, the rest of this // code is similar to plain regular expressions, in terms of processing flags for which steps, etc. - private string DoReplacePartials(string Text, FormatConfig.ReplaceStrData rsl) + private string DoReplacePartials(string Text, ReplaceStrList rsl) { - Dictionary partialReplaceList = new Dictionary(); + Dictionary partialReplaceList = new Dictionary(); Dictionary shouldReplace = new Dictionary(); - foreach (FormatConfig.ReplaceStr rs in rsl) + foreach (ReplaceStr rs in rsl) { - bool dopartial = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.Partials; + bool dopartial = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.Partials) == E_ReplaceFlags.Partials; if (dopartial) { - bool onlyDoList = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.BeforeList; // C2021-045 + bool onlyDoList = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.BeforeList) == E_ReplaceFlags.BeforeList; // C2021-045 bool onlyIfFirstWord = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.FirstWord; // C2021-056 - bool doInPagelist = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.PageList; // B2021-132 + bool doInPagelist = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.PageList) == E_ReplaceFlags.PageList; // B2021-132 //B2021-132 only do replacewords in paglist if the replaceword pagelist flag is set if (_DoReplWordInPageList && !doInPagelist) continue; @@ -2304,7 +2308,7 @@ namespace VEPROMS.CSLA.Library { if (!dicReplaceRegex.ContainsKey(rs)) { - RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; + RegexOptions myOptions = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.CaseInsens) == E_ReplaceFlags.CaseInsens ? RegexOptions.IgnoreCase : RegexOptions.None; dicReplaceRegex.Add(rs, new Regex(rs.ReplaceWord, myOptions)); } try @@ -2320,7 +2324,7 @@ namespace VEPROMS.CSLA.Library Text = Text.Replace(@"\xA0", @"\u160?"); //replace hard space try { - foreach (FormatConfig.ReplaceStr prs in partialReplaceList.Keys) + foreach (ReplaceStr prs in partialReplaceList.Keys) Text = partialReplaceList[prs].Replace(Text, prs.ReplaceWith); //if (partialReplaceList.Count>0) GC.Collect(); // microsoft had a memory leak in regular expression code - this REALLY slows it down though } @@ -2486,7 +2490,7 @@ namespace VEPROMS.CSLA.Library _Font = font; _MyItemInfo = myItemInfo; } - public void Add(Regex myRegEx, FormatConfig.ReplaceStr myWord) + public void Add(Regex myRegEx, ReplaceStr myWord) { MatchCollection myMatches = myRegEx.Matches(_Text); foreach (Match myMatch in myMatches) @@ -2529,7 +2533,7 @@ namespace VEPROMS.CSLA.Library } return false; } - public void Add(Match myMatch, FormatConfig.ReplaceStr myWord) + public void Add(Match myMatch, ReplaceStr myWord) { // If one already exists for this location, then don't add another. if (ContainsKey(myMatch.Index)) return; @@ -2563,12 +2567,12 @@ namespace VEPROMS.CSLA.Library { // B2022-015 BNPPalr: Determine whether RO text should have Replace Words applied. InLinkAndNotInRoFlag checks // for flag on replace word item & checks that it is within and RO link - bool InLinkAndNotInRoFlag = ((foundMatch.MyWord.Flag) != 0) ? VerifyWithinLink(text, foundMatch, offset) : false; + bool InLinkAndNotInRoFlag = ((foundMatch.MyWord.Flag & E_ReplaceFlags.NotInRO) != 0) ? VerifyWithinLink(text, foundMatch, offset) : false; if (!InLinkAndNotInRoFlag && VerifyNoHardSpace(text, foundMatch, offset) && VerifyNoLink(text, foundMatch, offset)) { //if(offset != 0 || foundMatch.MyMatch.Index != 0 || !foundMatch.MyWord.ReplaceWith.StartsWith(@"{\par}")) //{ - if (((foundMatch.MyWord.Flag) == 0) || DiffUnit(foundMatch.MyWord.ReplaceWord, _MyItemInfo, "UNIT ")) + if (((foundMatch.MyWord.Flag & E_ReplaceFlags.DiffUnit) == 0) || DiffUnit(foundMatch.MyWord.ReplaceWord, _MyItemInfo, "UNIT ")) { string with = foundMatch.MyWord.ReplaceWith; if (offset == 0 && with.StartsWith(@"{\par}")) @@ -2723,13 +2727,13 @@ namespace VEPROMS.CSLA.Library get { return _MyMatch; } set { _MyMatch = value; } } - private FormatConfig.ReplaceStr _MyWord; - public FormatConfig.ReplaceStr MyWord + private ReplaceStr _MyWord; + public ReplaceStr MyWord { get { return _MyWord; } set { _MyWord = value; } } - public FoundMatch(Match myMatch, FormatConfig.ReplaceStr myWord) + public FoundMatch(Match myMatch, ReplaceStr myWord) { _MyMatch = myMatch; _MyWord = myWord; diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs index 635186d5..28ba06bc 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs @@ -594,70 +594,7 @@ public partial class FormatInfo : IFormatOrFormatInfo throw new DbCslaException("FormatInfo.DataPortal_Fetch", ex); } } - // Get format data, but do not resolve the 'Data' and 'Genmac' fields, i.e. keep empty if they are - // empty. - //public static FormatInfo GetFormatNoUCFByFormatID(int formatID) - //{ - // try - // { - // FormatInfo tmp = DataPortal.Fetch(new FormatIDNoUCFCriteria(formatID)); - // if (tmp.ErrorMessage == "No Record Found") - // { - // tmp.Dispose(); // Clean-up FormatInfo - // tmp = null; - // } - // return tmp; - // } - // catch (Exception ex) - // { - // throw new DbCslaException("Error on FormatInfo.GetFormatNoUCFByFormatID", ex); - // } - //} - //protected class FormatIDNoUCFCriteria - //{ - // private int _FormatID; - // public int FormatID { get { return _FormatID; } } - // public FormatIDNoUCFCriteria(int formatID) - // { - // _FormatID = formatID; - // } - //} - //private void DataPortal_Fetch(FormatIDNoUCFCriteria criteria) - //{ - // if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] FormatInfo.DataPortal_Fetch", GetHashCode()); - // try - // { - // using (SqlConnection cn = Database.VEPROMS_SqlConnection) - // { - // ApplicationContext.LocalContext["cn"] = cn; - // using (SqlCommand cm = cn.CreateCommand()) - // { - // cm.CommandType = CommandType.StoredProcedure; - // cm.CommandText = "getFormatNoUCF"; - // cm.Parameters.AddWithValue("@FormatID", criteria.FormatID); - // cm.CommandTimeout = Database.DefaultTimeout; - // using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) - // { - // if (!dr.Read()) - // { - // _ErrorMessage = "No Record Found"; - // return; - // } - // ReadData(dr); - // } - // } - // // removing of item only needed for local data portal - // if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client) - // ApplicationContext.LocalContext.Remove("cn"); - // } - // } - // catch (Exception ex) - // { - // if (_MyLog.IsErrorEnabled) _MyLog.Error("FormatInfo.DataPortal_Fetch", ex); - // _ErrorMessage = ex.Message; - // throw new DbCslaException("FormatInfo.DataPortal_Fetch", ex); - // } - //} + #region PlantFormat [NonSerialized] private PlantFormat _PlantFormat; diff --git a/PROMS/VEPROMS.CSLA.Library/Format/ENums.cs b/PROMS/VEPROMS.CSLA.Library/Format/ENums.cs index 27a22aee..5d0a9ff5 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/ENums.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/ENums.cs @@ -249,13 +249,5 @@ namespace VEPROMS.CSLA.Library SupInfoPdfPrint = 2, Merge = 3 } - public enum E_UCFImportOptions : uint - { - Ignore = 0, - LoadNotUsed = 1, - LoadOnlyImported = 2, - LoadUseAll = 3, - LoadForSetOnly = 4 - } #endregion } diff --git a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs index 78941586..677c0f1f 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs @@ -126,72 +126,76 @@ namespace VEPROMS.CSLA.Library XmlNodeList nl = XmlDoc.SelectNodes(xpath); return nl.Count > 0; } - private FormatConfig.ReplaceStrData _UCFandOrigReplaceStrData = null; - // This will return a complete list of ReplaceWords, combining those in the original plant format - // with the ones added by the user via User Control of Format (UCF) - public FormatConfig.ReplaceStrData UCFandOrigReplaceStrData - { - get - { - if (_UCFandOrigReplaceStrData != null) return _UCFandOrigReplaceStrData; - _UCFandOrigReplaceStrData = GetMergedReplaceList(this); - return _UCFandOrigReplaceStrData; - } - } - private FormatConfig.ReplaceStrData GetMergedReplaceList(PlantFormat OriginalPlantFormat) - { - // need to compare the original format list with the list as it is stored for working with property grid. - FormatConfig.ReplaceStrData retlist = new FormatConfig.ReplaceStrData(); // merged list - List inoriglist = new List(); // use this list to find new items in formatconfig (see below) - foreach (ReplaceStr origrepstr in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) - { - // In the format config list (UCF), find the 'ReplaceWord'. This is the 'key' for defining whether the - // replace word has been overwridden by UCF data. If it exists, use it: - FormatConfig.ReplaceStr usethisone = null; - bool deleted = false; - // States for replacewords: 0 = no change, -1 deleted, 1 added, 2 modified - if (FormatConfig != null) - { - foreach (FormatConfig.ReplaceStr ucfrepstr in FormatConfig.PlantFormat.FormatData.ReplaceStrData) - { - if (ucfrepstr.ReplaceWord == origrepstr.ReplaceWord) - { - if (ucfrepstr.State == -1) deleted = true; - else usethisone = ucfrepstr; - ucfrepstr.State = 2; - inoriglist.Add(origrepstr.ReplaceWord); - break; - } - } - } - if (!deleted && usethisone == null) - { - usethisone = new FormatConfig.ReplaceStr(); - usethisone.Flag = (FormatConfig.E_ReplaceFlagsUCF)origrepstr.Flag; - usethisone.State = 0; // no change - usethisone.ReplaceWith = origrepstr.ReplaceWith; - usethisone.ReplaceWord = origrepstr.ReplaceWord; - } - if (!deleted) retlist.Add(usethisone); - } - // now add in any ucf only replacements, any that are not in the inoriglist - if (FormatConfig != null) - { - foreach (FormatConfig.ReplaceStr ucfrepstr in FormatConfig.PlantFormat.FormatData.ReplaceStrData) - { - if (!inoriglist.Contains(ucfrepstr.ReplaceWord)) - { - FormatConfig.ReplaceStr newone = new FormatConfig.ReplaceStr(); - newone.Flag = (FormatConfig.E_ReplaceFlagsUCF)ucfrepstr.Flag; - newone.State = 1; - newone.ReplaceWith = ucfrepstr.ReplaceWith; - newone.ReplaceWord = ucfrepstr.ReplaceWord; - retlist.Add(newone); - } - } - } - return (retlist); - } + //private FormatConfig.ReplaceStrData _UCFandOrigReplaceStrData = null; + //// This will return a complete list of ReplaceWords, combining those in the original plant format + //// with the ones added by the user via User Control of Format (UCF) + //public ReplaceStrData UCFandOrigReplaceStrData + //{ + // get + // { + // if (_UCFandOrigReplaceStrData != null) return _UCFandOrigReplaceStrData; + // _UCFandOrigReplaceStrData = GetMergedReplaceList(this); + // return _UCFandOrigReplaceStrData; + // } + //} + //private FormatConfig.ReplaceStrData GetMergedReplaceList(PlantFormat OriginalPlantFormat) + //{ + // need to compare the original format list with the list as it is stored for working with property grid. + // FormatConfig.ReplaceStrData retlist = new FormatConfig.ReplaceStrData(); // merged list + // List inoriglist = new List(); // use this list to find new items in formatconfig (see below) + // foreach (ReplaceStr origrepstr in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) + // { + // In the format config list(UCF), find the 'ReplaceWord'.This is the 'key' for defining whether the + + // replace word has been overwridden by UCF data.If it exists, use it: + + // ReplaceStr usethisone = null; + // bool deleted = false; + // States for replacewords: 0 = no change, -1 deleted, 1 added, 2 modified + + // if (FormatConfig != null) + // { + // foreach (ReplaceStr ucfrepstr in FormatConfig.PlantFormat.FormatData.ReplaceStrData) + // { + // if (ucfrepstr.ReplaceWord == origrepstr.ReplaceWord) + // { + // if (ucfrepstr.State == -1) deleted = true; + // else usethisone = ucfrepstr; + // ucfrepstr.State = 2; + // inoriglist.Add(origrepstr.ReplaceWord); + // break; + // } + // } + // } + // if (!deleted && usethisone == null) + // { + // usethisone = new ReplaceStr(); + // usethisone.Flag = (E_ReplaceFlags)origrepstr.Flag; + // usethisone.State = 0; // no change + // usethisone.ReplaceWith = origrepstr.ReplaceWith; + // usethisone.ReplaceWord = origrepstr.ReplaceWord; + // } + // if (!deleted) retlist.Add(usethisone); + // } + // now add in any ucf only replacements, any that are not in the inoriglist + + // if (FormatConfig != null) + // { + // foreach (ReplaceStr ucfrepstr in PlantFormat.FormatData.ReplaceStrData) + // { + // if (!inoriglist.Contains(ucfrepstr.ReplaceWord)) + // { + // ReplaceStr newone = new ReplaceStr(); + // newone.Flag = (E_ReplaceFlags)ucfrepstr.Flag; + // newone.State = 1; + // newone.ReplaceWith = ucfrepstr.ReplaceWith; + // newone.ReplaceWord = ucfrepstr.ReplaceWord; + // retlist.Add(newone); + // } + // } + // } + // return (retlist); + //} //C2025-023 - Electronic Procedures - Modifications to PROMS // EPFormatFiles contains which Electronic Procedure Format files apply to this main format file. diff --git a/PROMS/Volian.Base.Library/Volian.Base.Library.csproj b/PROMS/Volian.Base.Library/Volian.Base.Library.csproj index 99e1e025..749de849 100644 --- a/PROMS/Volian.Base.Library/Volian.Base.Library.csproj +++ b/PROMS/Volian.Base.Library/Volian.Base.Library.csproj @@ -101,12 +101,6 @@ FrmPopupStatusMessage.cs - - Form - - - frmRtfEdit.cs - @@ -126,9 +120,6 @@ FrmPopupStatusMessage.cs - - frmRtfEdit.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file -- 2.49.1 From c81079a876f5e8ada420b1c9760d69bff5f4a58b Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Tue, 2 Sep 2025 09:14:45 -0400 Subject: [PATCH 11/25] C2025-022-Remove-UCF-2 --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 119 +----------------- .../Properties/AssemblyInfo.cs | 6 +- .../Config/FormatConfig.cs | 2 +- .../Format/PlantFormat.cs | 70 ----------- PROMS/Volian.Base.Library/RtfEditor.cs | 36 ------ .../Volian.Base.Library.csproj | 1 - 6 files changed, 7 insertions(+), 227 deletions(-) delete mode 100644 PROMS/Volian.Base.Library/RtfEditor.cs diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 1bbc54ab..07b0528f 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -14765,36 +14765,11 @@ IF (@@Error = 0) PRINT 'StoredProcedure [getJustFormat] Succeeded' ELSE PRINT 'StoredProcedure [getJustFormat] Error on Creation' go - +-- Remove getFormatNoUCF from DB (UCF) no longer used. IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getFormatNoUCF]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) DROP PROCEDURE [getFormatNoUCF]; GO -CREATE PROCEDURE [dbo].[getFormatNoUCF] -( - @FormatID int -) -WITH EXECUTE AS OWNER -AS - SELECT - [FormatID], - [ParentID], - [Name], - [Description], - [Data], - [Config], - [GenMac], - [DTS], - [UserID], - [LastChanged], - (SELECT COUNT(*) FROM [Contents] WHERE [Contents].[FormatID]=[Formats].[FormatID]) [ContentCount], - (SELECT COUNT(*) FROM [DocVersions] WHERE [DocVersions].[FormatID]=[Formats].[FormatID]) [DocVersionCount], - (SELECT COUNT(*) FROM [Folders] WHERE [Folders].[FormatID]=[Formats].[FormatID]) [FolderCount], - (SELECT COUNT(*) FROM [Formats] [Children] WHERE [Children].[ParentID]=[Formats].[FormatID]) [ChildCount] - FROM [Formats] - WHERE [FormatID]=@FormatID - RETURN -GO -- Display the status of Proc creation IF (@@Error = 0) PRINT 'StoredProcedure [getFormatNoUCF] Succeeded' ELSE PRINT 'StoredProcedure [getFormatNoUCF] Error on Creation' @@ -14981,100 +14956,10 @@ IF (@@Error = 0) PRINT 'StoredProcedure [vefn_GetFolderMatchingFormatItems] Succ ELSE PRINT 'StoredProcedure [vefn_GetFolderMatchingFormatItems] Error on Creation' go +-- Remove vesp_ClearOverrideFormatsByFolder (UCF) from DB. No longer used. IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vesp_ClearOverrideFormatsByFolder]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) DROP PROCEDURE [vesp_ClearOverrideFormatsByFolder]; GO -CREATE PROCEDURE [dbo].[vesp_ClearOverrideFormatsByFolder](@FolderID int, @FormatID int, @NewFormatID int) -WITH EXECUTE AS OWNER -AS -BEGIN -DECLARE @ClearedContents TABLE -( - ContentID int -) -DECLARE @ClearedFolders TABLE -( - FolderID int -) -DECLARE @ClearedDocVersions TABLE -( - VersionID int -) - -insert into @ClearedContents -select cc.ContentID from (select contentid from contents where formatid is not null) cc -join vefn_GetFolderMatchingFormatItems(@FolderID, @FormatID, @NewFormatID) vi on vi.ContentID = cc.ContentID - --- update any folders & docversions that are using that formatid to clear them, i.e. so they inherit. To do this --- get lists of folders & docversions that have non-null format ids that should be null. - -BEGIN -With Folderz([FolderID], [FormatID]) as - ( - select FF.FolderID, FF.FormatID from Folders FF - Where FF.FolderID = @FolderID - UNION ALL - select FF.FolderID, FF.FormatID from Folders FF - Join Folderz ZZ on FF.ParentID = ZZ.FolderID - Where FF.FolderID != @FolderID and (FF.FormatID is null or FF.FormatID = @FormatID or FF.FormatID = @NewFormatID) - ) - insert into @ClearedFolders - select ZZ.FolderID - from Folderz ZZ - where ZZ.FormatID is not null and ZZ.FolderID != @FolderID -- don't include folder passed in, only do children (folder is done in code) - OPTION (MAXRECURSION 10000) -END - -BEGIN -With Folderz([FolderID]) as - ( - select FF.FolderID from Folders FF - Where FF.FolderID = @FolderID - UNION ALL - select FF.FolderID from Folders FF - Join Folderz ZZ on FF.ParentID = ZZ.FolderID - Where FF.FolderID != @FolderID and (FF.FormatID is null or FF.FormatID = @FormatID or FF.FormatID = @NewFormatID) - ) - insert into @ClearedDocVersions - select DV.VersionID - from Folderz ZZ - Left Join DocVersions DV ON DV.FolderID = ZZ.FolderID - where VersionID is not null and DV.FormatID is not null and (DV.FormatID = @FormatID or DV.FormatID = @NewFormatID) - OPTION (MAXRECURSION 10000) -END -update Folders set formatid = null where FolderID in (select FolderID from @ClearedFolders) -update DocVersions set formatid = null where VersionID in (select VersionID from @ClearedDocVersions) - --- now update all of the contents that were found -update contents set formatid = null where contentID in (select contentid from @ClearedContents) - -select [ContentID], - [Number], - [Text], - [Type], - [FormatID], - [Config], - [DTS], - [UserID], - [LastChanged], - (SELECT COUNT(*) FROM [Details] WHERE [Details].[ContentID]=[Contents].[ContentID]) [DetailCount], - (SELECT COUNT(*) FROM [Entries] WHERE [Entries].[ContentID]=[Contents].[ContentID]) [EntryCount], - (SELECT COUNT(*) FROM [Grids] WHERE [Grids].[ContentID]=[Contents].[ContentID]) [GridCount], - (SELECT COUNT(*) FROM [Images] WHERE [Images].[ContentID]=[Contents].[ContentID]) [ImageCount], - (SELECT COUNT(*) FROM [Items] WHERE [Items].[ContentID]=[Contents].[ContentID]) [ItemCount], - (SELECT COUNT(*) FROM [Parts] WHERE [Parts].[ContentID]=[Contents].[ContentID]) [PartCount], - (SELECT COUNT(*) FROM [RoUsages] WHERE [RoUsages].[ContentID]=[Contents].[ContentID]) [RoUsageCount], - (SELECT COUNT(*) FROM [Transitions] WHERE [Transitions].[FromID]=[Contents].[ContentID]) [TransitionCount], - (SELECT COUNT(*) FROM [ZContents] WHERE [ZContents].[ContentID]=[Contents].[ContentID]) [ZContentCount] - FROM contents where contentid in (select ContentID from @ClearedContents) -RETURN -END - -GO --- Display the status of Proc creation -IF (@@Error = 0) PRINT 'Procedure Creation: vesp_ClearOverrideFormatsByFolder Succeeded' -ELSE PRINT 'Procedure Creation: vesp_ClearOverrideFormatsByFolder Error on Creation' -GO IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vesp_ClearOverrideFormatsByDocVersion]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) DROP PROCEDURE [vesp_ClearOverrideFormatsByDocVersion]; diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs index 6b79be57..4e0b24ae 100644 --- a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs +++ b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs @@ -44,8 +44,10 @@ using System.Runtime.InteropServices; // Revision DHH (day - no leading zero, two digit hour - military time // // ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** -[assembly: AssemblyVersion("2.2.2508.2815")] -[assembly: AssemblyFileVersion("2.2.2508.2815")] +[assembly: AssemblyVersion("2.2.2509.209")] +[assembly: AssemblyFileVersion("2.2.2509.209")] + + diff --git a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs index aac98914..ac06ce64 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs @@ -341,7 +341,7 @@ namespace VEPROMS.CSLA.Library } } private string _ReplaceWith; - [Editor(typeof(RtfEditor), typeof(System.Drawing.Design.UITypeEditor))] + //[Editor(typeof(RtfEditor), typeof(System.Drawing.Design.UITypeEditor))] [XmlAttribute("ReplaceWith")] [DisplayName("With")] diff --git a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs index 677c0f1f..70ecee11 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs @@ -126,76 +126,6 @@ namespace VEPROMS.CSLA.Library XmlNodeList nl = XmlDoc.SelectNodes(xpath); return nl.Count > 0; } - //private FormatConfig.ReplaceStrData _UCFandOrigReplaceStrData = null; - //// This will return a complete list of ReplaceWords, combining those in the original plant format - //// with the ones added by the user via User Control of Format (UCF) - //public ReplaceStrData UCFandOrigReplaceStrData - //{ - // get - // { - // if (_UCFandOrigReplaceStrData != null) return _UCFandOrigReplaceStrData; - // _UCFandOrigReplaceStrData = GetMergedReplaceList(this); - // return _UCFandOrigReplaceStrData; - // } - //} - //private FormatConfig.ReplaceStrData GetMergedReplaceList(PlantFormat OriginalPlantFormat) - //{ - // need to compare the original format list with the list as it is stored for working with property grid. - // FormatConfig.ReplaceStrData retlist = new FormatConfig.ReplaceStrData(); // merged list - // List inoriglist = new List(); // use this list to find new items in formatconfig (see below) - // foreach (ReplaceStr origrepstr in OriginalPlantFormat.FormatData.SectData.ReplaceStrList) - // { - // In the format config list(UCF), find the 'ReplaceWord'.This is the 'key' for defining whether the - - // replace word has been overwridden by UCF data.If it exists, use it: - - // ReplaceStr usethisone = null; - // bool deleted = false; - // States for replacewords: 0 = no change, -1 deleted, 1 added, 2 modified - - // if (FormatConfig != null) - // { - // foreach (ReplaceStr ucfrepstr in FormatConfig.PlantFormat.FormatData.ReplaceStrData) - // { - // if (ucfrepstr.ReplaceWord == origrepstr.ReplaceWord) - // { - // if (ucfrepstr.State == -1) deleted = true; - // else usethisone = ucfrepstr; - // ucfrepstr.State = 2; - // inoriglist.Add(origrepstr.ReplaceWord); - // break; - // } - // } - // } - // if (!deleted && usethisone == null) - // { - // usethisone = new ReplaceStr(); - // usethisone.Flag = (E_ReplaceFlags)origrepstr.Flag; - // usethisone.State = 0; // no change - // usethisone.ReplaceWith = origrepstr.ReplaceWith; - // usethisone.ReplaceWord = origrepstr.ReplaceWord; - // } - // if (!deleted) retlist.Add(usethisone); - // } - // now add in any ucf only replacements, any that are not in the inoriglist - - // if (FormatConfig != null) - // { - // foreach (ReplaceStr ucfrepstr in PlantFormat.FormatData.ReplaceStrData) - // { - // if (!inoriglist.Contains(ucfrepstr.ReplaceWord)) - // { - // ReplaceStr newone = new ReplaceStr(); - // newone.Flag = (E_ReplaceFlags)ucfrepstr.Flag; - // newone.State = 1; - // newone.ReplaceWith = ucfrepstr.ReplaceWith; - // newone.ReplaceWord = ucfrepstr.ReplaceWord; - // retlist.Add(newone); - // } - // } - // } - // return (retlist); - //} //C2025-023 - Electronic Procedures - Modifications to PROMS // EPFormatFiles contains which Electronic Procedure Format files apply to this main format file. diff --git a/PROMS/Volian.Base.Library/RtfEditor.cs b/PROMS/Volian.Base.Library/RtfEditor.cs deleted file mode 100644 index 60e00494..00000000 --- a/PROMS/Volian.Base.Library/RtfEditor.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.ComponentModel; -using System.Drawing.Design; -using System.Windows.Forms; -using System.Windows.Forms.Design; -using System; - - -namespace Volian.Base.Library -{ - // The RtfEditor inherits from the UITypeEditor and is used to edit Rtf fields. This provides the interface for fields in FormatConfig - // and uses the frmRtfEdit to provide a mechanism to do basic editing of text with a subset of rtf command support. - public class RtfEditor : UITypeEditor - { - public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) - { - return UITypeEditorEditStyle.Modal; - } - public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value) - { - IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; - string rw = value as string; - if (svc != null && rw != null) - { - using (frmRtfEdit form = new frmRtfEdit()) - { - form.Value = rw; - if (svc.ShowDialog(form) == DialogResult.OK) - { - rw = form.Value; // update object - } - } - } - return rw; - } - } -} diff --git a/PROMS/Volian.Base.Library/Volian.Base.Library.csproj b/PROMS/Volian.Base.Library/Volian.Base.Library.csproj index 749de849..4d7bbcd7 100644 --- a/PROMS/Volian.Base.Library/Volian.Base.Library.csproj +++ b/PROMS/Volian.Base.Library/Volian.Base.Library.csproj @@ -105,7 +105,6 @@ - -- 2.49.1 From 85b08b8c65bbe6a726e467d73ed1b267d14cb4e8 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Tue, 2 Sep 2025 16:55:51 -0400 Subject: [PATCH 12/25] C2025-022-Remove-UCF-2 --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 4 - .../Properties/AssemblyInfo.cs | 8 +- .../Format/PlantFormat.cs | 127 +----------------- PROMS/Volian.Controls.Library/DisplayTags.cs | 21 --- PROMS/Volian.Print.Library/vlnParagraph.cs | 10 +- 5 files changed, 14 insertions(+), 156 deletions(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 07b0528f..75990d28 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -14770,10 +14770,6 @@ IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getFormatNoUCF]' DROP PROCEDURE [getFormatNoUCF]; GO --- Display the status of Proc creation -IF (@@Error = 0) PRINT 'StoredProcedure [getFormatNoUCF] Succeeded' -ELSE PRINT 'StoredProcedure [getFormatNoUCF] Error on Creation' -GO IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_GetItemsMatchingFormatItems]') AND OBJECTPROPERTY(id,N'IsTableFunction') = 1) DROP FUNCTION [vefn_GetItemsMatchingFormatItems]; diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs index 4e0b24ae..a89d4c62 100644 --- a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs +++ b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs @@ -44,8 +44,12 @@ using System.Runtime.InteropServices; // Revision DHH (day - no leading zero, two digit hour - military time // // ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** -[assembly: AssemblyVersion("2.2.2509.209")] -[assembly: AssemblyFileVersion("2.2.2509.209")] +[assembly: AssemblyVersion("2.2.2509.216")] +[assembly: AssemblyFileVersion("2.2.2509.216")] + + + + diff --git a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs index 70ecee11..88c6a841 100644 --- a/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs +++ b/PROMS/VEPROMS.CSLA.Library/Format/PlantFormat.cs @@ -36,27 +36,14 @@ namespace VEPROMS.CSLA.Library // User Control of Format allows a PROMS user to make modifications to a very limited set of format settings // Variables in this region are not set in the format files. They are used only in the C# code - // when IgnoreUCF is true, get the original data, i.e. don't apply any UCF changes to it + // when IgnoreUCF is true, get the original data, i.e.don't apply any UCF changes to it private static bool _IgnoreUCF = false; public static bool IgnoreUCF { get { return PlantFormat._IgnoreUCF; } set { PlantFormat._IgnoreUCF = value; } } - // flags that the User Control of Format setting for using additional UCF checkoffs is active - private static bool _DoingUCFCheckOffs = false; - public static bool DoingUCFCheckOffs - { - get { return PlantFormat._DoingUCFCheckOffs; } - set { PlantFormat._DoingUCFCheckOffs = value; } - } - // flags the value that should be used (true/false) for using additional UCF checkoffs (used with DoingUCFCheckOffs) - private static bool _DoingUCFCheckOffsUse = false; - public static bool DoingUCFCheckOffsUse - { - get { return PlantFormat._DoingUCFCheckOffsUse; } - set { PlantFormat._DoingUCFCheckOffsUse = value; } - } + #endregion //User Control of Format (UCF) public static FormatConfig GetFormatConfig(IFormatOrFormatInfo format) { @@ -1861,53 +1848,9 @@ namespace VEPROMS.CSLA.Library { if (_CheckOffList != null) return _CheckOffList; - // Get a list of checkoffs that should be included: - // if !UseCheckOffUCF (Baseall has it as false. User can change setting in UCF to true) - // if !IgnoreUCF, i.e. use UCF changes, return original lists with only active items (Inactive = false) - // if IgnoreUCF, return original lists with all items - // if UseCheckOffUCF is true use the merged lists from current format and baseall.xml and - // do the same processing for IgnoreUCF described above. - - // UseCheckOffUCF is false or there is no FormatConfig (UCF) data: - FormatConfig fc = PlantFormat.GetFormatConfig(MyFormat); - //if (!MyFormat.PlantFormat.FormatData.ProcData.CheckOffUCF || fc==null) - //{ - // _CheckOffList = new CheckOffList(SelectNodes("CheckOffList/CheckOff"), MyFormat); - // // B2019-100: If Ignoring the UCF data, just return the entire list. Also, return entire list if there is no UCF data (fc == null) - // if (PlantFormat.IgnoreUCF || fc == null) return _CheckOffList; - // // If not ignoring UCF settings, only return those that are active - // foreach (FormatConfig.CheckOff co in fc.PlantFormat.FormatData.CheckOffList) - // { - // foreach (CheckOff coo in _CheckOffList) - // { - // if ((int)coo.Index == Convert.ToInt32(co.Index) && !(bool)co.Active) - // { - // _CheckOffList.Remove(coo); - // break; - // } - // } - // } - // return _CheckOffList; - //} - // UseCheckOfffUCF is true: // merge the checkoff list from the current format and the checkoff list from the base format _CheckOffList = new CheckOffList(SelectNodes("CheckOffList/CheckOff"), MyFormat); - CheckOffList retlist2 = new CheckOffList(SelectNodes("../CheckOffDataUCF/CheckOffList/CheckOff"), MyFormat); - if (retlist2 != null && retlist2.Count > 0) foreach (CheckOff co in retlist2) _CheckOffList.Add(co); - if (PlantFormat.IgnoreUCF) return _CheckOffList; - // if applying UCF, then remove those that are inactive: - foreach (FormatConfig.CheckOff co in fc.PlantFormat.FormatData.CheckOffList) - { - foreach (CheckOff coo in _CheckOffList) - { - if ((int)coo.Index == Convert.ToInt32(co.Index) && !(bool)co.Active) - { - _CheckOffList.Remove(coo); - break; - } - } - } return _CheckOffList; } } @@ -1923,77 +1866,13 @@ namespace VEPROMS.CSLA.Library { if (_CheckOffHeaderList != null) return _CheckOffHeaderList; FormatConfig fc = PlantFormat.GetFormatConfig(MyFormat); - //if (!MyFormat.PlantFormat.FormatData.ProcData.CheckOffUCF || fc == null) - //{ - // _CheckOffHeaderList = new CheckOffHeaderList(SelectNodes("CheckOffHeaderList/CheckOffHeader"), MyFormat); - // // Depending on the IgnoreUCF flag, either return this list with UCF Inactive flags set or return the - // // list as is. - // if (PlantFormat.IgnoreUCF || fc == null) return _CheckOffHeaderList; - // // If not ignoring UCF settings, only return those that are active - // foreach (FormatConfig.CheckOffHeader coh in fc.PlantFormat.FormatData.CheckOffHeaderList) - // { - // foreach (CheckOffHeader coo in _CheckOffHeaderList) - // { - // if ((int)coo.Index == Convert.ToInt32(coh.Index) && !(bool)coh.Active) - // { - // _CheckOffHeaderList.Remove(coo); - // break; - // } - // } - // } - // return _CheckOffHeaderList; - //} + // merge the checkoff header lists from the current format and the list from the base _CheckOffHeaderList = new CheckOffHeaderList(SelectNodes("CheckOffHeaderList/CheckOffHeader"), MyFormat); - CheckOffHeaderList retlist2 = new CheckOffHeaderList(SelectNodes("../CheckOffDataUCF/CheckOffHeaderList/CheckOffHeader"), MyFormat); - if (retlist2 != null && retlist2.Count > 0) foreach (CheckOffHeader co in retlist2) _CheckOffHeaderList.Add(co); - if (PlantFormat.IgnoreUCF) return _CheckOffHeaderList; - // if applying UCF, then remove those that are inactive. - foreach (FormatConfig.CheckOffHeader coh in fc.PlantFormat.FormatData.CheckOffHeaderList) - { - foreach (CheckOffHeader cooh in _CheckOffHeaderList) - { - if ((int)cooh.Index == Convert.ToInt32(coh.Index) && !(bool)coh.Active) - { - _CheckOffHeaderList.Remove(cooh); - break; - } - } - } return _CheckOffHeaderList; } } - public void CheckOffHeaderListRefresh(bool CheckOffUCF) - { - if (!CheckOffUCF) - { - _CheckOffHeaderList = new CheckOffHeaderList(SelectNodes("CheckOffHeaderList/CheckOffHeader"), MyFormat); - // Depending on the IgnoreUCF flag, either return this list with UCF Inactive flags set or return the - // list as is. - FormatConfig fc = PlantFormat.GetFormatConfig(MyFormat); - if (PlantFormat.IgnoreUCF || fc == null) return; - // If not ignoring UCF settings, only return those that are active - foreach (FormatConfig.CheckOffHeader coh in fc.PlantFormat.FormatData.CheckOffHeaderList) - { - foreach (CheckOffHeader coo in _CheckOffHeaderList) - { - if ((int)coo.Index == Convert.ToInt32(coh.Index) && !(bool)coh.Active) - { - _CheckOffHeaderList.Remove(coo); - break; - } - } - } - return; - } - // if coming from the UCF dialog, then check for the 'ignoreUCF' this will flag whether to only - // merge the checkoff header lists from the current format and the list from the base - CheckOffHeaderList retlist = new CheckOffHeaderList(SelectNodes("CheckOffHeaderList/CheckOffHeader"), MyFormat); - CheckOffHeaderList retlist2 = new CheckOffHeaderList(SelectNodes("../CheckOffDataUCF/CheckOffHeaderList/CheckOffHeader"), MyFormat); - if (retlist2 != null && retlist2.Count > 0) foreach (CheckOffHeader co in retlist2) retlist.Add(co); - _CheckOffHeaderList = retlist; - } // This is used with the {INITIALS} pagelist token and will put the word "INITIALS" at the specified pagelist // location for the checkoff column header. Used by Calvert Cliffs (BGEOI and BGESTP formats) diff --git a/PROMS/Volian.Controls.Library/DisplayTags.cs b/PROMS/Volian.Controls.Library/DisplayTags.cs index a6674a8a..7621c55c 100644 --- a/PROMS/Volian.Controls.Library/DisplayTags.cs +++ b/PROMS/Volian.Controls.Library/DisplayTags.cs @@ -315,12 +315,6 @@ namespace Volian.Controls.Library if (StepOverRide()) cmbCheckoff.Enabled = false; // Checkoffs already assigned to AER - //// if there are no checkoffs OR - //// if this is a sign-off, the checkoff list is not enabled either (matches 16bit functionality) At some point, we - //// may want to allow them to turn off the checkoff - //if ((fmtdata.ProcData.CheckOffData.CheckOffList == null || fmtdata.ProcData.CheckOffData.CheckOffList.Count == 0) || - // fmtdata.ProcData.CheckOffData.Menu=="Signoff") - // cmbCheckoff.Enabled = false; cbCAS.Enabled = (!CurItemInfo.IsFigure && !CurItemInfo.IsRtfRaw); cbTCAS.Enabled = (!CurItemInfo.IsFigure && !CurItemInfo.IsRtfRaw); //F2022-024 Time Critical Action Summary if (((CurItemInfo.ActiveFormat.PlantFormat.FormatData.PurchaseOptions.Value & E_PurchaseOptions.EnhancedBackgrounds) == E_PurchaseOptions.EnhancedBackgrounds) || @@ -856,21 +850,6 @@ namespace Volian.Controls.Library MyEditItem.SaveContents(); // set selected index in the step's config. int indx = _CheckOffIndex[cmbCheckoff.SelectedIndex]; // C2020-003 get the non-sorted index from the sorted index - // get index, if greater than 100, store that - otherwise store index down list. - // if this format does not have ucf signoffs, indx is just the selected index from the combo box. - //if (CurItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF) - //{ - // // get index, if greater than 100, store that - otherwise store index down list. - // // if this format does not have ucf signoffs, indx is just the selected index from the combo mobx. - // foreach (CheckOff co in CurItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList) - // { - // if (cmbCheckoff.SelectedItem == co.MenuItem) - // { - // if ((int)co.Index >= 100) indx = (int)co.Index; - // break; - // } - // } - //} StepConfig sc = CurItemInfo.MyConfig as StepConfig; sc.Step_CheckOffIndex = indx; //using (Content cnt = Content.Get(CurItemInfo.MyContent.ContentID)) diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index deb8468c..fc396d84 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -4459,11 +4459,11 @@ namespace Volian.Print.Library } } // if there is ucf value for adjusting the alignment for checkoffs, use it: - FormatConfig fc = PlantFormat.GetFormatConfig(formatInfo); - if (fc != null && fc.PlantFormat.FormatData.CheckOffXOffAdj != null) - { - if (co.Index > 99) xloc_co += ((float)fc.PlantFormat.FormatData.CheckOffXOffAdj * 72); - } + //FormatConfig fc = PlantFormat.GetFormatConfig(formatInfo); + //if (fc != null && fc.PlantFormat.FormatData.CheckOffXOffAdj != null) + //{ + // if (co.Index > 99) xloc_co += ((float)fc.PlantFormat.FormatData.CheckOffXOffAdj * 72); + //} // CheckOffXtraLines was introduced for the additional lines needed for the longer signoffs // for VCBA (&WST1), for F2016-061. -- 2.49.1 From 91ee23287a88d84c52baacd1c44374ce38bf9006 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 3 Sep 2025 08:47:10 -0400 Subject: [PATCH 13/25] C2025-022-Remove-UCF-2 --- PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs index a89d4c62..572d6830 100644 --- a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs +++ b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs @@ -44,8 +44,10 @@ using System.Runtime.InteropServices; // Revision DHH (day - no leading zero, two digit hour - military time // // ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** -[assembly: AssemblyVersion("2.2.2509.216")] -[assembly: AssemblyFileVersion("2.2.2509.216")] +[assembly: AssemblyVersion("2.2.2509.222")] +[assembly: AssemblyFileVersion("2.2.2509.222")] + + -- 2.49.1 From c8047854f6595bb3d04e058971da65738b6f27f5 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 3 Sep 2025 09:38:17 -0400 Subject: [PATCH 14/25] C2025-022-Remove-UCF-2 --- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 6cb5c060..9b68cd75 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -5312,3 +5312,11 @@ namespace VEPROMS } } + + + + + + + + -- 2.49.1 From 58f13eb1dcf6be5c9fe1da81a5314adacb49c550 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 3 Sep 2025 12:32:05 -0400 Subject: [PATCH 15/25] C2025-022-Remove-UCF-2 --- .../Properties/AssemblyInfo.cs | 6 +- .../VEPROMS_UI.csproj_bak_2 | 655 ------------------ .../VEPROMS User Interface/dlgExportImport.cs | 116 +--- .../frmFolderProperties.cs | 19 +- .../frmSysOptions.Designer.cs | 5 - PROMS/VEPROMS User Interface/frmSysOptions.cs | 60 +- .../Config/FormatConfig.cs | 37 +- .../Extension/DisplayText.cs | 1 - .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 18 +- PROMS/Volian.Print.Library/vlnParagraph.cs | 6 - 10 files changed, 11 insertions(+), 912 deletions(-) delete mode 100644 PROMS/VEPROMS User Interface/VEPROMS_UI.csproj_bak_2 diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs index 572d6830..5a5e0a0c 100644 --- a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs +++ b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs @@ -44,8 +44,10 @@ using System.Runtime.InteropServices; // Revision DHH (day - no leading zero, two digit hour - military time // // ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** -[assembly: AssemblyVersion("2.2.2509.222")] -[assembly: AssemblyFileVersion("2.2.2509.222")] +[assembly: AssemblyVersion("2.2.2509.311")] +[assembly: AssemblyFileVersion("2.2.2509.311")] + + diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj_bak_2 b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj_bak_2 deleted file mode 100644 index ee9fe31a..00000000 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj_bak_2 +++ /dev/null @@ -1,655 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {8D1C47B4-F302-4C5A-87CC-24FDC5529872} - WinExe - Properties - VEPROMS - VEPROMS - veproms.ico - - - - - - - - - v4.8.1 - - - - - 2.0 - false - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - x86 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - true - bin\Demo\ - DEBUG;TRACE - full - x86 - prompt - false - - - true - bin\Debug\ - DEBUG;TRACE - full - x86 - prompt - false - - - bin\debug\ - TRACE - true - pdbonly - x86 - prompt - false - - - true - bin\Demo\ - TRACE;DEMO - full - x86 - prompt - false - - - - - - - - False - ..\..\..\..\3rdPartyLibraries\CSLA\CSLA20cs_DLL_Net_4.8.1_Build\Csla.dll - - - False - ..\..\..\..\3rdPartyLibraries\DotNetBar\DotNetBar4.6Build\DevComponents.DotNetBar2.dll - - - False - ..\..\..\..\3rdPartyLibraries\Ionic\Ionic.Zip.dll - - - ..\..\..\..\3rdPartyLibraries\RtfConverter\bin\Debug\Itenso.Rtf.Interpreter.dll - - - ..\..\..\..\3rdPartyLibraries\RtfConverter\bin\Debug\Itenso.Rtf.Parser.dll - - - False - ..\..\..\..\3rdPartyLibraries\Log4Net\log4net.dll - - - - - True - - - - - - - - - - - - False - ..\VEPROMS.CSLA.Library\bin\Debug\VEPROMS.CSLA.Library.dll - - - - - Form - - - AboutVEPROMS.cs - - - - Form - - - dlgAnnotationsSelect.cs - - - True - True - dlgAnnotationsSelect.resx - - - Form - - - dlgApproveProcedure.cs - - - Form - - - dlgCheckedOutProcedure.cs - - - Form - - - Form - - - dlgMSWordMessage.cs - - - Form - - - dlgCheckOpenTabs.cs - - - Form - - - DlgCloseTabsOrExit.cs - - - Form - - - dlgExportImport.cs - - - Form - - - dlgImpHowToHandleROs.cs - - - Form - - - dlgManageSecurity.cs - - - Form - - - dlgPhoneList.cs - - - Form - - - dlgPickROFolder.cs - - - Form - - - DlgPrintProcedure.cs - - - Form - - - dlgSetChangeBarStartDate.cs - - - Form - - - dlgTransitionReport.cs - - - Form - - - dlgUCFDetail.cs - - - Form - - - frmAnnotationsCleanup.cs - - - Form - - - frmBatchRefresh.cs - - - Form - - - frmBatchRefreshCheckedOut.cs - - - Form - - - frmManageUser.cs - - - Form - - - frmPDFStatusForm.cs - - - Form - - - frmPSI.cs - - - Form - - - frmRODbProperties.cs - - - Form - - - frmSI.cs - - - Form - - - frmVEPROMS.cs - - - Form - - - frmFolderProperties.cs - - - Form - - - frmProcedureProperties.cs - - - Form - - - frmPropGrid.cs - - - Form - - - frmSectionProperties.cs - - - Form - - - frmSysOptions.cs - - - Form - - - frmVersionsProperties.cs - - - - Designer - AboutVEPROMS.cs - - - dlgAnnotationsSelect.cs - ResXFileCodeGenerator - - - dlgMSWordMessage.cs - - - dlgCheckOpenTabs.cs - - - DlgCloseTabsOrExit.cs - - - dlgImpHowToHandleROs.cs - - - DlgPrintProcedure.cs - Designer - - - dlgSetChangeBarStartDate.cs - - - dlgUCFDetail.cs - - - frmAnnotationsCleanup.cs - - - frmPDFStatusForm.cs - Designer - - - Designer - frmPSI.cs - - - Designer - frmRODbProperties.cs - - - frmSI.cs - - - Designer - frmVEPROMS.cs - - - frmFolderProperties.cs - Designer - - - frmProcedureProperties.cs - Designer - - - Designer - frmPropGrid.cs - - - frmSectionProperties.cs - Designer - - - Designer - frmSysOptions.cs - - - frmVersionsProperties.cs - Designer - - - - ResXFileCodeGenerator - Designer - Resources.Designer.cs - - - ShortcutLists.cs - Designer - - - VlnWeb.cs - Designer - - - PreserveNewest - Designer - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - True - True - Resources.resx - - - True - Settings.settings - True - - - - Form - - - ShortcutLists.cs - - - Form - - - VlnWeb.cs - - - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - Always - - - Always - - - Always - - - Always - - - Always - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - dlgApproveProcedure.cs - Designer - PreserveNewest - - - dlgCheckedOutProcedure.cs - Designer - - - dlgExportImport.cs - Designer - - - dlgManageSecurity.cs - Designer - - - Designer - dlgPhoneList.cs - - - dlgPickROFolder.cs - Designer - - - dlgTransitionReport.cs - Designer - - - frmBatchRefresh.cs - Designer - - - frmBatchRefreshCheckedOut.cs - Designer - - - frmManageUser.cs - Designer - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - - - - - - - PreserveNewest - - - - - {00020430-0000-0000-C000-000000000046} - 2 - 0 - 0 - primary - False - - - - - {b22ce5ad-288c-44cd-8a22-b3bcf77b7161} - FlexableMessageBox - - - {70F23722-19A3-4AC1-A900-55831C945786} - LBWordLibrary - - - {AEEE9FD1-6892-45E2-A67E-418C06D46FF9} - Volian.Base.Library - - - {8556527C-6615-487F-8AF7-22EBC3EF0268} - Volian.Controls.Library - - - {94830C07-6A3A-450E-9674-C9B4293A7726} - Volian.Print.Library - - - {62314B9C-DA84-4037-8B68-AA18C1F641F5} - Volian.Utils.Library - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - - - - cmd /c "$(ProjectDir)FixRev.bat" - - \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/dlgExportImport.cs b/PROMS/VEPROMS User Interface/dlgExportImport.cs index 532a7fe7..38367c48 100644 --- a/PROMS/VEPROMS User Interface/dlgExportImport.cs +++ b/PROMS/VEPROMS User Interface/dlgExportImport.cs @@ -723,25 +723,7 @@ namespace VEPROMS //if (isImported && UCFImportCase == E_UCFImportOptions.LoadForSetOnly) UpdateFormatForUCFInSet(); return true;// Import Suceeded } - //private void UpdateFormatForUCFInSet() - //{ - // // this gets called if the UCFImportCase == LoadForSetOnly, i.e. only items in this PROCEDURE Set whose formats point to a - // // UCF format should point to the updated (copied) UCF format. - // if (renamedUCFFormatId == null) return; - // foreach (int key in renamedUCFFormatId.Keys) - // { - // using (ContentInfoList cil = ContentInfoList.FixFormatIDAfterImport(MyDocVersion.VersionID.ToString(), renamedUCFFormatId[key], key)) - // { - // foreach (ContentInfo ci in cil) - // { - // using (Content c = ci.Get()) - // { - // ContentInfo.Refresh(c); - // } - // } - // } - // } - //} + // Added Error Handling to assure that Change Manager is turned-on regardless of success or failure of the import // B2019-046: improved error handling (added return value & error message) private bool TryToLoadImportDataDocument() @@ -1021,8 +1003,6 @@ namespace VEPROMS c.Save(); } } - //private E_UCFImportOptions UCFImportDefaultFromSettings; - //private E_UCFImportOptions UCFImportCase = E_UCFImportOptions.LoadOnlyImported; Dictionary existingCopyFCName = new Dictionary(); // note that this is used when importing a folder or a procedure (procedure was added for UCF changes) private bool LoadFormats(XmlDocument xd, string xmlpath) @@ -1123,102 +1103,12 @@ namespace VEPROMS // various cases listed above: if (existingFormat.ContainsKey(name)) { - //// if case 0 and this ucf already exists, ignore it: - //if (UCFImportCase == E_UCFImportOptions.Ignore) continue; - //// if case 1, 2, 4 and the name exists, make a 'copy' of the newly imported format: - //// need to add this format - name must be unique so add 'COPY(x) of 'original name'' where x is unique number: - //if (UCFImportCase == E_UCFImportOptions.LoadNotUsed || UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) - //{ - // int count = (fil.Where(fi => fi.Name.EndsWith(name))).Count(); - // if (count > 0) - // { - // string origname = name; - // name = string.Format("Copy {0} of {1}", count.ToString(), name); - // if (UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) - // { - // if (renamedUCFFormatName == null) renamedUCFFormatName = new Dictionary(); - // renamedUCFFormatName.Add(origname, name); - // } - // } - //} - // if case 3, take the existing config data and create in a record whose name is Old(x) of 'original name' (the record - // creation gets done below). Then modify the existing record to have the config data. The result is that any - // sections that used this UCF throughout the database will have the new config data. - //if (UCFImportCase == E_UCFImportOptions.LoadUseAll) - //{ - // string savname = name; - // int count = (fil.Where(fi => fi.Name.EndsWith(name))).Count(); - // if (count > 0) - // { - // name = string.Format("Old {0} of {1}", count.ToString(), name); - // } - // // update the 'old' record by getting the original config data. - // string savdesc = null; - // DateTime savdts = DateTime.Now; - // string savuid = null; - // int savpar = 0; - // string savconfig = null; - // using (Format origRecord = Format.Get(existingFormat[savname])) - // { - // savdesc = origRecord.Description; - // savdts = origRecord.DTS; - // savuid = origRecord.UserID; - // savpar = origRecord.ParentID; - // savconfig = origRecord.Config; - // origRecord.Name = savname; - // origRecord.Description = description; - // origRecord.DTS = dts; - // origRecord.UserID = userid; - // origRecord.MyParent = pformat; - // origRecord.Config = config; - // origRecord.Save(); - // description = savdesc; - // dts = savdts; - // userid = savuid; - // pformat = Format.Get(savpar); - // config = savconfig; - - // } - //} } - //if (UCFImportCase == 0) // ignore it - //{ - importedFormat.Add(formatid, name); - //} - //else - //{ - // Format rec = Format.MakeFormat(pformat, name, description, null, null, dts, userid); - // rec.Config = config; - // rec.Save(); - // if (UCFImportCase == E_UCFImportOptions.LoadNotUsed || UCFImportCase == E_UCFImportOptions.LoadUseAll) // don't reset format id (case 1 don't use it, case 3 copies new data into original record - // importedFormat.Add(formatid, name); - // else if (UCFImportCase == E_UCFImportOptions.LoadOnlyImported || UCFImportCase == E_UCFImportOptions.LoadForSetOnly) // case 2 uses it for any items imported, case 4 uses it for any sections within current set - // { - // existingFormat.Add(name, rec.FormatID); // change to original name? - // importedFormat.Add(rec.FormatID, name); - // // get format id for the original named format - // if (UCFImportCase == E_UCFImportOptions.LoadForSetOnly && renamedUCFFormatName != null) - // { - // int origformatid = -1; - // foreach (var kvp in renamedUCFFormatName) - // { - // if (kvp.Value == name) - // { - // origformatid = existingFormat[kvp.Key]; - // break; - // } - // } - // if (origformatid != -1) - // { - // if (renamedUCFFormatId == null) renamedUCFFormatId = new Dictionary(); - // renamedUCFFormatId.Add(rec.FormatID, origformatid); - // } - // } - // } - //} + importedFormat.Add(formatid, name); + } FormatInfoList.Reset(); return true; diff --git a/PROMS/VEPROMS User Interface/frmFolderProperties.cs b/PROMS/VEPROMS User Interface/frmFolderProperties.cs index 59d2b38d..1357c074 100644 --- a/PROMS/VEPROMS User Interface/frmFolderProperties.cs +++ b/PROMS/VEPROMS User Interface/frmFolderProperties.cs @@ -337,24 +337,7 @@ namespace VEPROMS btnAnnoTypeUndo.PerformClick(); //if (btnAnnoTypeSave.Enabled) return; folderConfigBindingSource.EndEdit(); - // if there is a change to the format, clean up any overridden formats that point to the selected item before saving the format change: - //if (_FolderConfig.MyFolder.FormatID != _cmbxformatOriginal) - //{ - // // clean up & then refresh the configs - // using (ContentInfoList cil = ContentInfoList.ClearOverrideFormatsByFolder(_FolderConfig.MyFolder.FolderID, _cmbxformatOriginal, _FolderConfig.MyFolder.FormatID)) - // { - // foreach (ContentInfo ci in cil) - // { - // using (Content c = ci.Get()) - // { - // // first refresh configs because the ContentInfo.Refresh causes events to occur that refresh screen - // // and if configs aren't done first, the screen refresh, if based on config data, will not be correct. - // foreach (ItemInfo ii in ci.ContentItems) ii.RefreshConfig(); - // ContentInfo.Refresh(c); - // } - // } - // } - //} + // Save Default settings for User // // Save whether we should display the default values on this property page diff --git a/PROMS/VEPROMS User Interface/frmSysOptions.Designer.cs b/PROMS/VEPROMS User Interface/frmSysOptions.Designer.cs index 9cd396eb..077d4430 100644 --- a/PROMS/VEPROMS User Interface/frmSysOptions.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmSysOptions.Designer.cs @@ -1211,7 +1211,6 @@ namespace VEPROMS this.cbUCFLForSetOnly.Size = new System.Drawing.Size(105, 19); this.cbUCFLForSetOnly.TabIndex = 5; this.cbUCFLForSetOnly.Text = "Load For Set Only"; - //this.cbUCFLForSetOnly.CheckedChanged += new System.EventHandler(this.cbUCFLForSetOnly_CheckedChanged); // // cbUCFLUseAll // @@ -1227,7 +1226,6 @@ namespace VEPROMS this.cbUCFLUseAll.Size = new System.Drawing.Size(105, 19); this.cbUCFLUseAll.TabIndex = 4; this.cbUCFLUseAll.Text = "Load Use All"; - //this.cbUCFLUseAll.CheckedChanged += new System.EventHandler(this.cbUCFLUseAll_CheckedChanged); // // cbUCFLOnlyImport // @@ -1243,7 +1241,6 @@ namespace VEPROMS this.cbUCFLOnlyImport.Size = new System.Drawing.Size(105, 19); this.cbUCFLOnlyImport.TabIndex = 3; this.cbUCFLOnlyImport.Text = "Load Only Imported"; - //this.cbUCFLOnlyImport.CheckedChanged += new System.EventHandler(this.cbUCFLOnlyImport_CheckedChanged); // // cbUCFLNotUsed // @@ -1259,7 +1256,6 @@ namespace VEPROMS this.cbUCFLNotUsed.Size = new System.Drawing.Size(88, 19); this.cbUCFLNotUsed.TabIndex = 2; this.cbUCFLNotUsed.Text = "Load Not Used"; - //this.cbUCFLNotUsed.CheckedChanged += new System.EventHandler(this.cbUCFLNotUsed_CheckedChanged); // // cbUCFIgnore // @@ -1275,7 +1271,6 @@ namespace VEPROMS this.cbUCFIgnore.Size = new System.Drawing.Size(67, 19); this.cbUCFIgnore.TabIndex = 1; this.cbUCFIgnore.Text = "Ignore"; - //this.cbUCFIgnore.CheckedChanged += new System.EventHandler(this.cbUCFIgnore_CheckedChanged); // // btnReset // diff --git a/PROMS/VEPROMS User Interface/frmSysOptions.cs b/PROMS/VEPROMS User Interface/frmSysOptions.cs index 2d286940..10c695f5 100644 --- a/PROMS/VEPROMS User Interface/frmSysOptions.cs +++ b/PROMS/VEPROMS User Interface/frmSysOptions.cs @@ -75,24 +75,6 @@ namespace VEPROMS cbEnhancedDocumentSync.Checked = Settings.Default.SyncEnhancedDocuments; cbSeparateWindows.Checked = Settings.Default.SeparateWindows; txbxVisioPath.Text = Settings.Default.VisioPath; - //switch (Settings.Default.UCFImportOpt) // see dlgExportImport for descripton of these options. - //{ - // case 0: - // cbUCFIgnore.Checked = true; - // break; - // case 1: - // cbUCFLNotUsed.Checked = true; - // break; - // case 2: - // cbUCFLOnlyImport.Checked = true; - // break; - // case 3: - // cbUCFLUseAll.Checked = true; - // break; - // case 4: - // cbUCFLForSetOnly.Checked = true; - // break; - //} //CSM - C2024-031 - Getting User Settings //and set checkboxes based on what they are set to @@ -118,6 +100,7 @@ namespace VEPROMS Settings.Default.PastePlainText = cbPastePlainText.Checked; } } + private void cbPasteNoReturns_CheckedChanged(object sender, EventArgs e) { if (!_initializing) @@ -193,7 +176,6 @@ namespace VEPROMS private bool ss_SyncEnhancedDocuments; private bool ss_SeparateWindows; private string ss_VisioPath; - //private int ss_UCFImportOpt; private void SaveStartingSettings() { @@ -210,7 +192,6 @@ namespace VEPROMS ss_SyncEnhancedDocuments = Settings.Default.SyncEnhancedDocuments; ss_SeparateWindows = Settings.Default.SeparateWindows; ss_VisioPath = Settings.Default.VisioPath; - //ss_UCFImportOpt = Settings.Default.UCFImportOpt; } private void RestoreStartingSettings() // used with the cancel button @@ -227,7 +208,6 @@ namespace VEPROMS Settings.Default.SyncEnhancedDocuments = ss_SyncEnhancedDocuments; Settings.Default.SeparateWindows = ss_SeparateWindows; Settings.Default.VisioPath = ss_VisioPath; - //Settings.Default.UCFImportOpt = ss_UCFImportOpt; } @@ -315,45 +295,7 @@ namespace VEPROMS Settings.Default.VisioPath = txbxVisioPath.Text; } - //private void cbUCFIgnore_CheckedChanged(object sender, EventArgs e) - //{ - // if (!_initializing) - // { - // Settings.Default.UCFImportOpt = 0; - // } - //} - //private void cbUCFLNotUsed_CheckedChanged(object sender, EventArgs e) - //{ - // if (!_initializing) - // { - // Settings.Default.UCFImportOpt = 1; - // } - //} - - //private void cbUCFLOnlyImport_CheckedChanged(object sender, EventArgs e) - //{ - // if (!_initializing) - // { - // Settings.Default.UCFImportOpt = 2; - // } - //} - - //private void cbUCFLUseAll_CheckedChanged(object sender, EventArgs e) - //{ - // if (!_initializing) - // { - // Settings.Default.UCFImportOpt = 3; - // } - //} - - //private void cbUCFLForSetOnly_CheckedChanged(object sender, EventArgs e) - //{ - // if (!_initializing) - // { - // Settings.Default.UCFImportOpt = 4; - // } - //} private void cbOTRemember_CheckedChanged(object sender, EventArgs e) { cbOTAutoOpen.Enabled = cbOTAutoOpen.Visible = cbShwRplWrdsColor.Checked; diff --git a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs index ac06ce64..787ef016 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs @@ -272,41 +272,7 @@ namespace VEPROMS.CSLA.Library } #endregion ReplaceStrData #region ReplaceStr - //[Flags] - //public enum E_ReplaceFlags : uint - //{ - // High = 0x0001, // Do ReplaceWords in HIGH LEVEL STEPS - // RNO = 0x0002, // Do ReplaceWords in RNOS - // Caution = 0x0004, // Do ReplaceWords in CAUTIONS - // Note = 0x0008, // Do ReplaceWords in NOTES - // Table = 0x0010, // Do ReplaceWords in TABLES - // Substep = 0x0020, // Do ReplaceWords in SUBSTEPS - // Attach = 0x0040, // Do ReplaceWords in ATTACHMENTS - // Bkgd = 0x0080, // Do ReplaceWords in BACKGROUNDS - // DiffUnit = 0x0100, // Do ReplaceWords ONLY for different UNIT # - // TOC = 0x0200, // Do in auto table-of-contents - // StatTree = 0x0400, - // HLSSetpnt = 0x0800, // Do ReplaceWords in HighLevelStep SETPoiNTs - // Trans = 0x1000, // Do ReplaceWords in TRANSITIONS - // Setpoint = 0x2000, // Do ReplaceWords in SETPOINTS - // // Case Sensitivity Flags - default is off (Case Sensitive Replace) - // CaseInsens = 0x0000C000, // Do ReplaceWords for all words thatmatch, regardless of case, - // // and replace with the ReplaceWith string as is - // // B2019-022: do not support CaseInsensFirst & CaseInsensAll - there is no supporting replace word code: - // //CaseInsensFirst = 0x4000, // Do ReplaceWords for all words thatexactly match the ReplaceWord, - // // except the case of the first character may be different - // //CaseInsensAll = 0x8000, // Do ReplaceWords for all words that match the ReplaceWord, regardless of case - - // Partials = 0x10000, // Do replace even on partial matches - // Plackeep = 0x20000, // Do replace in PlaceKeepers - // InSecTitle = 0x40000, - // BeforeTrans = 0x80000, // Only do replace if the string occurs immediately before a transition. - // BeforeList = 0x100000, // C2021-045 Only if the text ends with a colon ":" - // PageList = 0x200000, // F2021-053 Do replace words for PageList items that are ROs - // FirstWord = 0x400000, // C2021-056 Do only if is the first word in the text - // NotInRO = 0x800000 // B2022-015 BNPPalr: Determine whether RO text should have Replace Words applied - //} [Serializable] [TypeConverter(typeof(ExpandableObjectConverter))] public class ReplaceStr @@ -319,7 +285,7 @@ namespace VEPROMS.CSLA.Library get { return _State; } set { _State = value; } } - //private E_ReplaceFlags _Flag; + //[Editor(typeof(FlagEnumUIEditor), typeof(System.Drawing.Design.UITypeEditor))] //[XmlAttribute("Flag")] //[DisplayName("Flags (Use In)")] // Note that [Description] is not used in collection items (that use collection editor) @@ -341,7 +307,6 @@ namespace VEPROMS.CSLA.Library } } private string _ReplaceWith; - //[Editor(typeof(RtfEditor), typeof(System.Drawing.Design.UITypeEditor))] [XmlAttribute("ReplaceWith")] [DisplayName("With")] diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs index e7f3fe24..723857b9 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs @@ -2178,7 +2178,6 @@ namespace VEPROMS.CSLA.Library // F2021-053: BNPP Alarm - need ability to have super/sub scripts in the text of Alarm Tables (ROs). // if doing replace words for Page List items, the current item is not a step, use _DoReplWordInPageList flags this if (_MyItemInfo.MyContent.Type < 20000 && !_DoReplWordInPageList) return Text; // for now only replace in steps. - //FormatConfig.ReplaceStrData rsl = _MyFormat.PlantFormat.FormatConfig.UCFandReplaceStrData; ReplaceStrList rsl = _MyFormat.PlantFormat.FormatData.SectData.ReplaceStrList; if (rsl.Count == 1 && (rsl[0].ReplaceWord == null || rsl[0].ReplaceWord == "")) return Text; diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 5d00c57b..cc68f7d5 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -6111,23 +6111,7 @@ namespace VEPROMS.CSLA.Library if (!SectionHasCheckOffs()) return null; int stpCoIndx = CheckOffIndex(); // this step has a checkoff defined if (stpCoIndx == -1) return null; - //if (stpCoIndx > 1) - //{ - // if (ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF && stpCoIndx >= 100) - // { - // // get index, if greater than 100, store that - otherwise store index down list. - // // if this format does not have ucf signoffs, indx is just the selected index from the combo box. - // foreach (CheckOff co in ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList) - // { - // if (stpCoIndx == co.Index) - // { - // stpCoIndx = (int)co.Index; - // break; - // } - // } - // } - // return ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList[stpCoIndx]; // DO override of CheckOffList[] to get ucf - //} + int sectCoIndx = SectionDefaultCheckOffIndex(); // no checkoff on step, see if there is a section default. if (sectCoIndx == -1) return null; if ((ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsHigh) diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index fc396d84..afacd8a5 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -4458,12 +4458,6 @@ namespace Volian.Print.Library xloc_co = XOffset + (relX > 0 ? Width : 0) + relX; } } - // if there is ucf value for adjusting the alignment for checkoffs, use it: - //FormatConfig fc = PlantFormat.GetFormatConfig(formatInfo); - //if (fc != null && fc.PlantFormat.FormatData.CheckOffXOffAdj != null) - //{ - // if (co.Index > 99) xloc_co += ((float)fc.PlantFormat.FormatData.CheckOffXOffAdj * 72); - //} // CheckOffXtraLines was introduced for the additional lines needed for the longer signoffs // for VCBA (&WST1), for F2016-061. -- 2.49.1 From 61853fb71fbabc048e46e77b45bce47479bff465 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 3 Sep 2025 13:56:31 -0400 Subject: [PATCH 16/25] C2025-022-Remove-UCF-2 --- PROMS/VEPROMS User Interface/dlgExportImport.cs | 1 - .../frmFolderProperties.cs | 4 ++-- .../VEPROMS.CSLA.Library/Config/FormatConfig.cs | 17 +---------------- .../Extension/DisplayText.cs | 1 - 4 files changed, 3 insertions(+), 20 deletions(-) diff --git a/PROMS/VEPROMS User Interface/dlgExportImport.cs b/PROMS/VEPROMS User Interface/dlgExportImport.cs index 38367c48..399ea4f6 100644 --- a/PROMS/VEPROMS User Interface/dlgExportImport.cs +++ b/PROMS/VEPROMS User Interface/dlgExportImport.cs @@ -720,7 +720,6 @@ namespace VEPROMS ImportProcedureNew(xd); isImported = true; } - //if (isImported && UCFImportCase == E_UCFImportOptions.LoadForSetOnly) UpdateFormatForUCFInSet(); return true;// Import Suceeded } diff --git a/PROMS/VEPROMS User Interface/frmFolderProperties.cs b/PROMS/VEPROMS User Interface/frmFolderProperties.cs index 1357c074..b15ad4b1 100644 --- a/PROMS/VEPROMS User Interface/frmFolderProperties.cs +++ b/PROMS/VEPROMS User Interface/frmFolderProperties.cs @@ -128,7 +128,7 @@ namespace VEPROMS private LocalAnnotationTypeInfoList myLocalAnnotationTypeInfoList = null; private StageInfoList myStageInfoList = null; private LocalStageInfoList myLocalStageInfoList = null; - private int? _cmbxformatOriginal = null; + private void frmFolderProperties_Load(object sender, EventArgs e) { _Initializing = true; @@ -149,7 +149,7 @@ namespace VEPROMS ppCmbxFormat.DisplayMember = "FullName"; ppCmbxFormat.ValueMember = "FullName"; ppCmbxFormat.DataSource = FormatUtility.GetFilteredFormatList(FormatInfoList.SortedFormatInfoList); - if (_FolderConfig != null && _FolderConfig.MyFolder != null) _cmbxformatOriginal = _FolderConfig.MyFolder.FormatID; + if (_FolderConfig.FormatSelection != null) { ppCmbxFormat.SelectedValue = _FolderConfig.FormatSelection; diff --git a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs index 787ef016..d5617806 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/FormatConfig.cs @@ -213,14 +213,7 @@ namespace VEPROMS.CSLA.Library [TypeConverter(typeof(ExpandableObjectConverter))] public class Flags { - //private bool? _CheckOffUCF; - //[DisplayName("UCF CheckOffs")] - //[Description("Additional UCF Check Offs and Sign Offs")] - //public bool? CheckOffUCF - //{ - // get { return _CheckOffUCF; } - // set { _CheckOffUCF = value; } - //} + private bool? _PartialStepCompression; [DisplayName("Partial Step Compression")] [Description("Automatically compress last sub-steps to fit on page")] @@ -286,14 +279,6 @@ namespace VEPROMS.CSLA.Library set { _State = value; } } - //[Editor(typeof(FlagEnumUIEditor), typeof(System.Drawing.Design.UITypeEditor))] - //[XmlAttribute("Flag")] - //[DisplayName("Flags (Use In)")] // Note that [Description] is not used in collection items (that use collection editor) - //public E_ReplaceFlags Flag - //{ - // get { return (E_ReplaceFlags)_Flag; } - // set { _Flag = value; } - //} private string _ReplaceWord; [XmlAttribute("ReplaceWord")] [DisplayName("Replace Word")] diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs index 723857b9..466f6338 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs @@ -2195,7 +2195,6 @@ namespace VEPROMS.CSLA.Library //int profileDepth = ProfileTimer.Push(">>>> DoReplaceWords2.ForLoop"); foreach (ReplaceStr rs in rsl) { - //bool dopartial = (E_ReplaceFlags)(rs.Flag & E_ReplaceFlags.CaseInsens) == E_ReplaceFlags.Partials; // save it may need to be changed back to this code. bool dopartial = (rs.Flag & E_ReplaceFlags.Partials) == E_ReplaceFlags.Partials; // from pre-UCF if (!dopartial) // F2021-093: Partials moved into their own method and done first { -- 2.49.1 From 16129ba742278af63ac117f2e429a3404e8978c2 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 3 Sep 2025 15:53:05 -0400 Subject: [PATCH 17/25] C2025-022-Remove-UCF-2 --- PROMS/VEPROMS User Interface/App.config | 208 - .../Properties/AssemblyInfo.cs | 16982 ---------------- 2 files changed, 17190 deletions(-) delete mode 100644 PROMS/VEPROMS User Interface/App.config delete mode 100644 PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs diff --git a/PROMS/VEPROMS User Interface/App.config b/PROMS/VEPROMS User Interface/App.config deleted file mode 100644 index 14a49ac2..00000000 --- a/PROMS/VEPROMS User Interface/App.config +++ /dev/null @@ -1,208 +0,0 @@ - - - -
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - - - 1 - - - 2 - - - 192, 255, 255 - - - True - - - False - - - Normal - - - True - - - False - - - False - - - True - - - - - - - - - 0.0 - - - C:\Development - - - True - - - - - - - - - True - - - False - - - False - - - False - - - True - - - False - - - - - - - - False - - - 1 - - - - - - - - - - - - - - - - - - - - - - diff --git a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs b/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs deleted file mode 100644 index 5a5e0a0c..00000000 --- a/PROMS/VEPROMS User Interface/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,16982 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("PROMS")] -[assembly: AssemblyDescription("Create, Edit, and Maintain Procedures Sets.")] - -// We are using the AssemblyConfiguration setting to determine the Release Mode. -// When set to "Demo" we disabel the RO Editor, force a "SAMPLE" watermark on the printouts, -// and display a Demo EULA (DemoEULA.txt) -// When set to Westinghouse, we will display a Westinghouse EUlA (WestinghouseEULA.txt) -// When set to Barakah, we will display a Barakah EUlA (BarakahEULA.txt) -// VlnSettings.RelaseMode will return the AssemblyConfiguration setting. -// VlnSettings.EULAFile will return the EULA file name - -[assembly: AssemblyConfiguration("Release")] // normal release mode -//[assembly: AssemblyConfiguration("Demo")] // Demo CD/DVD release force SAMPLE watermark, disable RO Editor, Demo EULA -//[assembly: AssemblyConfiguration("Westinghouse")] // Westinghouse EULA -//[assembly: AssemblyConfiguration("Barakah")] // Barakah EULA C2018-037 - -[assembly: AssemblyCompany("Volian Enterprises, Inc.")] -[assembly: AssemblyProduct("PROMS")] -[assembly: AssemblyCopyright("Copyright © 2012. All Rights Reserved.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2ffeb031-bf85-4153-baa2-2d4da2fd5556")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build YYMM (two digit year, two digit month) -// Revision DHH (day - no leading zero, two digit hour - military time -// -// ********* REMEMBER TO CHECK THE AssemblyConfiguration SETTING (ABOVE) ******** -[assembly: AssemblyVersion("2.2.2509.311")] -[assembly: AssemblyFileVersion("2.2.2509.311")] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 2.49.1 From 7ec4f2a61eec132a9d20c1023b860b23eaa03a8b Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 3 Sep 2025 15:56:22 -0400 Subject: [PATCH 18/25] C2025-022-Remove-UCF-2 --- PROMS/VEPROMS User Interface/App.config | 202 ++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 PROMS/VEPROMS User Interface/App.config diff --git a/PROMS/VEPROMS User Interface/App.config b/PROMS/VEPROMS User Interface/App.config new file mode 100644 index 00000000..6e792fea --- /dev/null +++ b/PROMS/VEPROMS User Interface/App.config @@ -0,0 +1,202 @@ + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + + + 1 + + + 2 + + + 192, 255, 255 + + + True + + + False + + + Normal + + + True + + + False + + + False + + + True + + + + + + + + + 0.0 + + + C:\Development + + + True + + + + + + + + + True + + + False + + + False + + + True + + + False + + + + + False + + + 1 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- 2.49.1 From c0ac3259114bf5fed9cdfe04cf2e0e61347bafd5 Mon Sep 17 00:00:00 2001 From: John Jenko Date: Thu, 4 Sep 2025 14:38:26 -0400 Subject: [PATCH 19/25] C2025-017 Added an option to print (generate) all of the current Approved versions of PDFs and place them in a user specified folder --- .../VEPROMS User Interface/VEPROMS_UI.csproj | 9 + .../dlgPrintAllApprovedProcedures.Designer.cs | 136 ++++++++++++ .../dlgPrintAllApprovedProcedures.cs | 202 ++++++++++++++++++ .../dlgPrintAllApprovedProcedures.resx | 141 ++++++++++++ PROMS/VEPROMS User Interface/frmVEPROMS.cs | 24 ++- PROMS/Volian.Controls.Library/vlnTreeView.cs | 26 ++- 6 files changed, 527 insertions(+), 11 deletions(-) create mode 100644 PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.Designer.cs create mode 100644 PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.cs create mode 100644 PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index 9022df4b..6b6a4249 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -224,6 +224,12 @@ dlgPickROFolder.cs + + Form + + + dlgPrintAllApprovedProcedures.cs + Form @@ -359,6 +365,9 @@ dlgImpHowToHandleROs.cs + + dlgPrintAllApprovedProcedures.cs + DlgPrintProcedure.cs Designer diff --git a/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.Designer.cs b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.Designer.cs new file mode 100644 index 00000000..9a7f3063 --- /dev/null +++ b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.Designer.cs @@ -0,0 +1,136 @@ + +namespace VEPROMS +{ + partial class dlgPrintAllApprovedProcedures + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(dlgPrintAllApprovedProcedures)); + this.txbApprovedPDFsPath = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.ppBtnPDFLoc = new DevComponents.DotNetBar.ButtonX(); + this.ApprovedPDFsFolderDlg = new System.Windows.Forms.FolderBrowserDialog(); + this.btnPrntAllAprv = new DevComponents.DotNetBar.ButtonX(); + this.btnCancel = new DevComponents.DotNetBar.ButtonX(); + this.SuspendLayout(); + // + // txbApprovedPDFsPath + // + // + // + // + this.txbApprovedPDFsPath.Border.Class = "TextBoxBorder"; + this.txbApprovedPDFsPath.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txbApprovedPDFsPath.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txbApprovedPDFsPath.Location = new System.Drawing.Point(11, 45); + this.txbApprovedPDFsPath.Name = "txbApprovedPDFsPath"; + this.txbApprovedPDFsPath.PreventEnterBeep = true; + this.txbApprovedPDFsPath.Size = new System.Drawing.Size(611, 22); + this.txbApprovedPDFsPath.TabIndex = 0; + this.txbApprovedPDFsPath.WatermarkText = "Enter to Path of where to Place All Approved PDFs"; + this.txbApprovedPDFsPath.TextChanged += new System.EventHandler(this.txbApprovedPDFsPath_TextChanged); + // + // labelX1 + // + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX1.Location = new System.Drawing.Point(12, 22); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(360, 23); + this.labelX1.TabIndex = 1; + this.labelX1.Text = "Approved PDFs Location:"; + // + // ppBtnPDFLoc + // + this.ppBtnPDFLoc.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.ppBtnPDFLoc.Image = ((System.Drawing.Image)(resources.GetObject("ppBtnPDFLoc.Image"))); + this.ppBtnPDFLoc.Location = new System.Drawing.Point(627, 45); + this.ppBtnPDFLoc.Margin = new System.Windows.Forms.Padding(2); + this.ppBtnPDFLoc.Name = "ppBtnPDFLoc"; + this.ppBtnPDFLoc.Size = new System.Drawing.Size(37, 22); + this.ppBtnPDFLoc.TabIndex = 32; + this.ppBtnPDFLoc.Click += new System.EventHandler(this.ppBtnPDFLoc_Click); + // + // btnPrntAllAprv + // + this.btnPrntAllAprv.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnPrntAllAprv.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnPrntAllAprv.Enabled = false; + this.btnPrntAllAprv.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnPrntAllAprv.Location = new System.Drawing.Point(397, 120); + this.btnPrntAllAprv.Name = "btnPrntAllAprv"; + this.btnPrntAllAprv.Size = new System.Drawing.Size(132, 26); + this.btnPrntAllAprv.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnPrntAllAprv.TabIndex = 33; + this.btnPrntAllAprv.Text = "Print All Approved"; + this.btnPrntAllAprv.Click += new System.EventHandler(this.btnPrntAllAprv_Click); + // + // btnCancel + // + this.btnCancel.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnCancel.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnCancel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnCancel.Location = new System.Drawing.Point(564, 120); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(99, 26); + this.btnCancel.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnCancel.TabIndex = 34; + this.btnCancel.Text = "Close"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // dlgPrintAllApprovedProcedures + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(675, 161); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnPrntAllAprv); + this.Controls.Add(this.ppBtnPDFLoc); + this.Controls.Add(this.labelX1); + this.Controls.Add(this.txbApprovedPDFsPath); + this.Cursor = System.Windows.Forms.Cursors.Default; + this.DoubleBuffered = true; + this.Name = "dlgPrintAllApprovedProcedures"; + this.ShowIcon = false; + this.Text = "Print All Approved Procedures"; + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.Controls.TextBoxX txbApprovedPDFsPath; + private DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.ButtonX ppBtnPDFLoc; + private System.Windows.Forms.FolderBrowserDialog ApprovedPDFsFolderDlg; + private DevComponents.DotNetBar.ButtonX btnPrntAllAprv; + private DevComponents.DotNetBar.ButtonX btnCancel; + } +} \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.cs b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.cs new file mode 100644 index 00000000..1ad0e58b --- /dev/null +++ b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.IO; +using VEPROMS.CSLA.Library; +using JR.Utils.GUI.Forms; + +namespace VEPROMS +{ + public partial class dlgPrintAllApprovedProcedures : DevComponents.DotNetBar.Office2007Form + { + private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + private StringBuilder NotApproved; + private DocVersionInfo _DocVersionInfo = null; + private int unitId = 0; + public dlgPrintAllApprovedProcedures(DocVersionInfo dvi) + { + InitializeComponent(); + _DocVersionInfo = dvi; + unitId = (_DocVersionInfo.DocVersionConfig.SelectedSlave < 0) ? 0 : _DocVersionInfo.DocVersionConfig.SelectedSlave; // set unitId to zero if not Parent/Child + NotApproved = new StringBuilder(); + txbApprovedPDFsPath.Text = BuildInitialPDFPath(); // set to default approved PDF path + } + // create an approved PDFs path based on the user's Documents folder and the tree path to the working draft + private string BuildInitialPDFPath() + { + // start with the SearchDVPath which is the node path staring with the top of the PROMS Procedure tree (VEPROMS) + string rtnstr = _DocVersionInfo.ActiveParent.SearchDVPath; + + // remove top tree node (VEPROMS) and put a " - " between each tree node name + rtnstr = rtnstr.Substring(rtnstr.IndexOf("\a") + 1).Replace("\a", " - "); + + // add the user's path to the My Documments folder to the start of the path + rtnstr = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + rtnstr; + + // check if we are printing Approved Child Procedures + // if SelectedSlave is > 0 then we are printing Approved Child Procedures and + // subtract one from the index (unitId) into the list of child names (UnitNames) + if (unitId > 0) + rtnstr += "\\" + _DocVersionInfo.UnitNames[unitId - 1]; // append Child name to path + return rtnstr; + } + + private void ppBtnPDFLoc_Click(object sender, EventArgs e) + { + if (txbApprovedPDFsPath.Text.Length > 0) + ApprovedPDFsFolderDlg.SelectedPath = txbApprovedPDFsPath.Text; + DialogResult dr = ApprovedPDFsFolderDlg.ShowDialog(); + if (dr == DialogResult.OK) + { + txbApprovedPDFsPath.Text = ApprovedPDFsFolderDlg.SelectedPath; + } + } + + private bool FolderIsWritable(string dirPath) + { + try + { + using (FileStream fs = File.Create(Path.Combine(dirPath, Path.GetRandomFileName()), 1, FileOptions.DeleteOnClose)) + { } + return true; + } + catch + { + return false; + } + } + + private void btnPrntAllAprv_Click(object sender, EventArgs e) + { + try + { + // Create folder if needed, clear the folder + if (!Directory.Exists(txbApprovedPDFsPath.Text)) + Directory.CreateDirectory(txbApprovedPDFsPath.Text); + + // check if the folder location is writable + if (!FolderIsWritable(txbApprovedPDFsPath.Text)) + { + MessageBox.Show("Cannot Write to this folder.\n\nSelect a different location.", "Invalid Folder Access", MessageBoxButtons.OK, MessageBoxIcon.Error); + btnPrntAllAprv.Enabled = false; + } + else + { + int pdfCount = 0; + DeleteExistingPDFs(); // delete existing PDFs in the target folder + // Get the Child index for Parent/Child procedure - if not Parent/Child this will be zero + foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures) + { + RevisionInfoList ril = RevisionInfoList.GetByItemID(myProc.ItemID); + if (ril.Count == 0) + { + NotApproved.AppendLine(string.Format("No approved Version for {0}", (myProc.PDFNumber.Length > 0) ? myProc.PDFNumber : myProc.DisplayText)); + } + else + { + bool foundApproved = false; + foreach (RevisionInfo revinfo in ril) + { + // if not Parent/Child, "unitId" and "Applicability_index" will be zero + if (unitId == revinfo.MyConfig.Applicability_Index) + { + if (revinfo.LatestVersion.MyStage.IsApproved > 0) + { + foundApproved = true; + ItemInfo ii = ItemInfo.Get(revinfo.ItemID); + ii.MyDocVersion.DocVersionConfig.SelectedSlave = unitId; + ProcedureInfo prcInfo = ProcedureInfo.Get(ii.ItemID); + SaveApprovedPDFToFolder(revinfo, prcInfo.PDFNumber);// save PDF to folder + pdfCount++; + break; // got the latest Approved - jump out of foreach revision info loop + } + } + } + if (!foundApproved) NotApproved.AppendLine(string.Format("No approved Version for {0}", myProc.PDFNumber)); + + } + } + // if no Approved PDFs were save, display general message and exit + if (pdfCount == 0) + { + string msg = "There are no Approved Procedure PDFs in this procedure set.\n\n Approved Procedures PDFs are created when a procedure is approved using the PROMS Approval function."; + FlexibleMessageBox.Show(msg, "Print PDFs Completed", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else // we saved some approved PDFs tell user how many were saved and list procedures that were not approved + { + string msg = string.Format("{0} PDFs were saved at\n\n{1}", pdfCount, txbApprovedPDFsPath.Text); + if (NotApproved.Length > 0) + { + msg += string.Format("\n\n--------------------------------------------\n\nPDFs for the Following were not Generated:\n\n{0}", NotApproved.ToString()); + } + FlexibleMessageBox.Show(msg, "Print PDFs Completed", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + catch (Exception ex) + { + _MyLog.Error("Print All Approved PDFs", ex);// save error in PROMS error log + MessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + this.Close(); // close dialog + } + private void SaveApprovedPDFToFolder(RevisionInfo revInfo,string PDFName) + { + byte[] buffer = revInfo.LatestVersion.PDF; + string PDFFilePath = string.Format("{0}\\{1}.PDF", txbApprovedPDFsPath.Text, PDFName); + try + { + FileStream fs = new FileStream(PDFFilePath, FileMode.Create); + fs.Write(buffer, 0, buffer.Length); + fs.Close(); + } + catch (Exception ex) + { + string str = string.Format("Could not create {0}", PDFFilePath); + NotApproved.AppendLine(str); // save to list of procedure that were not approved + _MyLog.Info(str, ex);// save error in PROMS error log + } + + } + private void DeleteExistingPDFs() + { + DirectoryInfo di = new DirectoryInfo(txbApprovedPDFsPath.Text); + FileInfo[] fis; + //DirectoryInfo[] diAry = di.GetDirectories(txbApprovedPDFsPath.Text); + //DirectoryInfo di_fmtgen; + // remove all of the PDF fils + //di_fmtgen = diAry[0]; + try + { + fis = di.GetFiles("*.pdf"); + foreach (FileInfo fi in fis) + { + if (fi.IsReadOnly) fi.IsReadOnly = false; + fi.Delete(); + } + } + catch (Exception ex) + { + string str = string.Format("Cannot delete files in {0}", txbApprovedPDFsPath.Text); + MessageBox.Show(str, "Error deleting files", MessageBoxButtons.OK, MessageBoxIcon.Error); + _MyLog.Info(str, ex); // save error in PROMS error log + + } + } + private void txbApprovedPDFsPath_TextChanged(object sender, EventArgs e) + { + btnPrntAllAprv.Enabled = txbApprovedPDFsPath.Text.Length > 0; + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx new file mode 100644 index 00000000..6d737aca --- /dev/null +++ b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAACc0lE + QVQ4T6WSWUjUURSH/w899GSRGoVgZIlYIAaGVA8hSouaUm6FkiaUWyWGYq7NuM7oLI46pWLOqNOoo5Wl + GFYIhSIRWi6UmJoFhaWYGiq5feFIg9tL9fDBvYf7+ziccwVA+B82FDYjs1DnKlbpuSktJ1ttIEmmTf4r + QUisGp8IedDy+VpCmWWaSk9chsYvOLYQoU6nDKjTKVlPU41Evl70h8ikojO+UXK8I/KMAvq7tcxO1Br5 + Na5nflSDoVxOvS4jbX14GZ9IBd7hKjzDChBqKxTMjFetCS+OFDHfG0NVmZTK4iw0hWmU5KVyR5ZIgSSe + 1TKhWpvLzHetKbw0UgT9idAbtikbBPdKJfz8WmIKN9flGnliyKFBL+FhZRYGTTr6EjHl6lvcVSVTrEhE + nZtglAmVJVlMfco3tj3UKqK+SsHikBiGM9byUQyDSdAXC++i6KrxJzrUq0LQqNOZHJDCZxmPquW0P5Wt + PFrd+ttg6PBloc2D2WcufKhw4OrFk5PRoV4HhVKViB/vxQy3pVCvl7E0KIKe8JVgVyh0nGeh3YvZlhNM + NR1jrO4Q4ghbLrhZ5BlnUKRIYaw7gfu6XDpfSqEvBnouQ2cQS6/OMvfiNNPNxxmvd+JbtT0dmdsJ9LDB + yc7MzihQ5yTS05LKA10ODKTCm2B47cdcqyfTz12YaHBm1ODAF+1+emXmiML24XjAqtG0hfzseGrLpfQ+ + jqRDKZhol22hRbKVxrRt1CRboom34vaNPQS6711ydrR2NwmUGXEoRVfITggh6XrA8mS55O/GuVNHcD3q + wGEHW+xtrLDebcHOHWbsMjdb+w9WX/6F370P0Tty1Sp4AAAAAElFTkSuQmCC + + + + 17, 17 + + \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index aef07dd5..732c68a3 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -534,6 +534,7 @@ namespace VEPROMS tv.QPrintSection += new vlnTreeViewEvent(tv_QPrintSection); tv.QPrintProcedure += new vlnTreeViewEvent(tv_QPrintProcedure); tv.PrintAllProcedures += new vlnTreeViewEvent(tv_PrintAllProcedures); + tv.PrintAllApprovedProcedures += new vlnTreeViewEvent(tv_PrintAllApprovedProcedures); tv.ApproveProcedure += new vlnTreeViewEvent(tv_ApproveProcedure); tv.ApproveAllProcedures += new vlnTreeViewEvent(tv_ApproveAllProcedures); tv.ApproveSomeProcedures += new vlnTreeViewEvent(tv_ApproveSomeProcedures); @@ -1212,7 +1213,27 @@ namespace VEPROMS dvi.DocVersionConfig.SelectedSlave = 0; } - + + // C2025-017 print all approved procedure to a specified folder + void tv_PrintAllApprovedProcedures(object sender, vlnTreeEventArgs args) + { + using (DocVersionInfo dvi = (args.Node as VETreeNode).VEObject as DocVersionInfo) + { + if (dvi == null) return; + + tc.SaveCurrentEditItem(); // save the current edit item if user happens to be editing a procedure + + // add a diaglog to prompt for the path inwhich to put the approved pdfs + int currentChildSetting = dvi.DocVersionConfig.SelectedSlave; + dvi.DocVersionConfig.SelectedSlave = args.UnitIndex; // set to selected child - will be -1 for non Parent/Child + + dlgPrintAllApprovedProcedures dlgPrnAllAprv = new dlgPrintAllApprovedProcedures(dvi); + dlgPrnAllAprv.ShowDialog(this); + + dvi.DocVersionConfig.SelectedSlave = currentChildSetting; // set back to what it was + } + } + void tv_PrintProcedure(object sender, vlnTreeEventArgs args) { ProcedureInfo pi = (args.Node as VETreeNode).VEObject as ProcedureInfo; @@ -2470,6 +2491,7 @@ namespace VEPROMS int _ItemID = (int)TabState["ItemID"]; ItemInfo _Procedure = ItemInfo.Get(_ItemID); // Open procedure in the editor. + if (_Procedure == null) continue; //skip and continue with foreach OpenItem(_Procedure); // SelectedStepTabPanel needs to be set so the print buttons on the ribbon will work. SelectedStepTabPanel = tc.MyEditItem.MyStepPanel.MyStepTabPanel; diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index 1cdda809..5c1d3608 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -563,6 +563,11 @@ namespace Volian.Controls.Library { if (PrintAllProcedures != null) PrintAllProcedures(sender, args); } + public event vlnTreeViewEvent PrintAllApprovedProcedures; //C2025-017 print all approved procedures + private void OnPrintAllApprovedProcedures(object sender, vlnTreeEventArgs args) + { + if (PrintAllApprovedProcedures != null) PrintAllApprovedProcedures(sender, args); + } public event vlnTreeViewEvent SelectDateToStartChangeBars; private void OnSelectDateToStartChangeBars(object sender, vlnTreeEventArgs args) { @@ -784,6 +789,7 @@ namespace Volian.Controls.Library MenuItem mip = new MenuItem("Print All Procedures for"); MenuItem mia = new MenuItem("Approve All Procedures for"); MenuItem mis = new MenuItem("Approve Some Procedures for"); + MenuItem mir = new MenuItem("Print All Approved Procedures for"); // C2025-017 print all approved procedures int k = 0; foreach (string s in dvi.UnitNames) { @@ -794,6 +800,8 @@ namespace Volian.Controls.Library ma.Tag = k; MenuItem ms = mis.MenuItems.Add(s, new EventHandler(miMultiUnit_Click)); ms.Tag = k; + MenuItem mr = mir.MenuItems.Add(s, new EventHandler(miMultiUnit_Click)); // C2025-017 print all approved procedures + mr.Tag = k; } //MenuItem mmp = mip.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click)); //mmp.Tag = 0; @@ -804,6 +812,7 @@ namespace Volian.Controls.Library cm.MenuItems.Add(mip); cm.MenuItems.Add(mia); cm.MenuItems.Add(mis); + cm.MenuItems.Add(mir); // C2025-017 print all approved procedures } else { @@ -811,6 +820,7 @@ namespace Volian.Controls.Library cm.MenuItems.Add("Print All Procedures", new EventHandler(mi_Click)); cm.MenuItems.Add("Approve All Procedures", new EventHandler(mi_Click)); cm.MenuItems.Add("Approve Some Procedures", new EventHandler(mi_Click)); + cm.MenuItems.Add("Print All Approved Procedures", new EventHandler(mi_Click)); } cm.MenuItems.Add("Report All Procedures Inconsistencies", new EventHandler(mi_Click)); } @@ -2035,6 +2045,9 @@ namespace Volian.Controls.Library case "Create Time Critical Action Summary": OnCreateTimeCriticalActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); break; + case "Print All Approved Procedures for": //C2025-017 print all approved procedures + OnPrintAllApprovedProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); + break; default: if (mip.Text.StartsWith("Showing Change Bars Starting")) OnSelectDateToStartChangeBars(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); @@ -2133,16 +2146,6 @@ namespace Volian.Controls.Library OnPrintTransitionReport(this, new vlnTreeEventArgs(SelectedNode as VETreeNode)); return; } - - - - - - - - - - if (mi.Text == "Export Procedure Set" || mi.Text == "Export Procedure") { OnExportImportProcedureSets(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); @@ -2346,6 +2349,9 @@ namespace Volian.Controls.Library //case "Check In Procedure Set": // CheckInDocVersion(SelectedNode as VETreeNode); // break; + case "Print All Approved Procedures": //C2025-017 print all approved procedures + OnPrintAllApprovedProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); + break; default: if (mi.Text.StartsWith("Showing Change Bars Starting")) OnSelectDateToStartChangeBars(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); -- 2.49.1 From 30be08fe4d3e39bfc500701611d0d203f3a12520 Mon Sep 17 00:00:00 2001 From: mschill Date: Thu, 4 Sep 2025 15:48:29 -0400 Subject: [PATCH 20/25] C2024-036 Add Filtering ability to the main PROMS procedure tree. Typing a procedure number or title into the search box and pressing enter/clicking the tree view search button will down base the PROMS procedure tree to matching procedures/folders. --- .../frmVEPROMS.Designer.cs | 55 +++-- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 196 ++++++++++++++++++ 2 files changed, 238 insertions(+), 13 deletions(-) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs index e2f0b575..e94335f3 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs @@ -71,9 +71,12 @@ namespace VEPROMS this.labelItem10 = new DevComponents.DotNetBar.LabelItem(); this.bottomProgBar = new DevComponents.DotNetBar.ProgressBarItem(); this.labelItem9 = new DevComponents.DotNetBar.LabelItem(); + this.lblPreEditView = new DevComponents.DotNetBar.LabelItem(); this.lblEditView = new DevComponents.DotNetBar.LabelItem(); this.labelItem11 = new DevComponents.DotNetBar.LabelItem(); this.btnItemInfo = new DevComponents.DotNetBar.ButtonItem(); + this.btnFilter = new DevComponents.DotNetBar.ButtonItem(); + this.txtFilter = new DevComponents.DotNetBar.TextBoxItem(); this.lblItemID = new DevComponents.DotNetBar.LabelItem(); this.lblResolution = new DevComponents.DotNetBar.LabelItem(); this.btnEditItem = new DevComponents.DotNetBar.ButtonItem(); @@ -524,19 +527,22 @@ namespace VEPROMS this.bottomBar.Font = new System.Drawing.Font("Segoe UI", 9F); this.bottomBar.IsMaximized = false; this.bottomBar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { - this.labelItem10, + this.btnFilter, + this.txtFilter, + this.labelItem10, this.bottomProgBar, this.labelItem9, - this.lblEditView, - this.labelItem11, - this.btnItemInfo, - this.lblItemID, - this.lblResolution, - this.btnEditItem, - this.lblUser, - this.lblLastChange, - this.btnStepRTF, - this.btnFixMSWord}); + this.lblPreEditView, + this.lblEditView, + this.labelItem11, + this.btnItemInfo, + this.lblItemID, + this.lblResolution, + this.btnEditItem, + this.lblUser, + this.lblLastChange, + this.btnStepRTF, + this.btnFixMSWord}); this.bottomBar.Location = new System.Drawing.Point(5, 573); this.bottomBar.Name = "bottomBar"; this.bottomBar.Size = new System.Drawing.Size(1185, 25); @@ -546,6 +552,21 @@ namespace VEPROMS this.bottomBar.TabStop = false; this.bottomBar.Text = "bar1"; // + // btnFilter + // + this.btnFilter.Name = "btnFilter"; + this.btnFilter.Text = "Tree View Search:"; + this.btnFilter.Click += SubmitFilter; + // + // txtFilter + // + this.txtFilter.TextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F); + this.txtFilter.Name = "txtFilter"; + this.txtFilter.TextBoxWidth = 120; + this.txtFilter.TextBox.TabIndex = 0; + this.txtFilter.TextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FilterEnterKey); + this.superTooltip1.SetSuperTooltip(this.txtFilter, new DevComponents.DotNetBar.SuperTooltipInfo("Filter", "", "This will filter the Procedure Tree in PROMS to Procedures containing entered words in the Procedure Number or Title. Press enter or the Tree View Search button to submit.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + // // txtSearch // this.txtSearch.Dock = System.Windows.Forms.DockStyle.Right; @@ -647,6 +668,11 @@ namespace VEPROMS this.lblEditView.ForeColor = System.Drawing.SystemColors.MenuText; this.lblEditView.Name = "lblEditView"; this.lblEditView.Text = "Edit"; + // lblEditView + // + this.lblPreEditView.BorderSide = DevComponents.DotNetBar.eBorderSide.Left; + this.lblPreEditView.BorderType = DevComponents.DotNetBar.eBorderType.Bump; + this.lblPreEditView.Name = "lblPreEditView"; // // labelItem11 // @@ -1646,9 +1672,9 @@ namespace VEPROMS this.ResumeLayout(false); } - #endregion + #endregion - private DevComponents.DotNetBar.RibbonControl ribbonControl1; + private DevComponents.DotNetBar.RibbonControl ribbonControl1; private DevComponents.DotNetBar.Office2007StartButton office2007StartButton1; private DevComponents.DotNetBar.ItemContainer itemContainer1; private DevComponents.DotNetBar.ItemContainer itemContainer2; @@ -1744,8 +1770,11 @@ namespace VEPROMS private DevComponents.DotNetBar.TabItem tabItemLibDocs; private Volian.Controls.Library.DisplayTags displayTags; private Volian.Controls.Library.DisplaySearch displaySearch1; + private DevComponents.DotNetBar.LabelItem lblPreEditView; private DevComponents.DotNetBar.LabelItem lblEditView; private DevComponents.DotNetBar.ButtonItem btnItemInfo; + private DevComponents.DotNetBar.ButtonItem btnFilter; + private DevComponents.DotNetBar.TextBoxItem txtFilter; private DevComponents.DotNetBar.ButtonItem btnFixMSWord; private Volian.Controls.Library.DisplayBookMarks displayBookMarks; //private DevComponents.DotNetBar.LabelItem lblLocked; diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 732c68a3..4e8c5079 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -22,6 +22,9 @@ using Volian.Base.Library; using Volian.Print.Library; using JR.Utils.GUI.Forms; using System.Diagnostics; +using System.Linq; +using System.Collections.Concurrent; +using System.Threading.Tasks; [assembly: log4net.Config.XmlConfigurator(Watch = true)] @@ -2771,6 +2774,199 @@ namespace VEPROMS } } + //C2024-036 IntelliSense + // Recursively Expand the Tree + // up to the procedure level + // Since items are only loaded as they are expanded, + // this is needed to search for matching text. + private void LoadAllProcedures(VETreeNode tn) + { + if (tn == null || tn.VEObject.IsProcedure) + return; + + if (!tn.IsExpanded) + { tn.Expand(); } + + foreach (var nde in tn.Nodes) + LoadAllProcedures((VETreeNode)nde); + } + + //C2024-036 IntelliSense + // Return a list containing all + // items in the Tree that match the entered text + // + any item that is a parent of those. + private List GetMatchingTreeNodes(VETreeNode tn, string texttomatch) + { + List matches = new List(); + + //add any item that matches text + //and all parents back up to the top most item + if (tn.Text.ToLower().Contains(texttomatch.ToLower())) + { + matches.Add(tn.VEObject); + VETreeNode parent_tn = (VETreeNode) tn.Parent; + while (parent_tn != null) + { + if (!matches.Contains(parent_tn.VEObject)) + { matches.Add(parent_tn.VEObject); } + parent_tn = (VETreeNode)parent_tn.Parent; + } + } + + if (!tn.VEObject.IsProcedure) + { + //if not at a procedure level, + //loop through sub items + //to check those for matches + foreach (VETreeNode nde in tn.Nodes.OfType()) + { + if (nde.Text != "Dummy VETreeNode(IVEDrillDownReadOnly o)") + { + List tmpmatches = GetMatchingTreeNodes(nde, texttomatch); + matches.AddRange(from mtch in tmpmatches + where !matches.Contains(mtch) + select mtch); + } + } + } + + return matches; + } + + //C2024-036 IntelliSense + // Recursively loop through the Child Nodes + // in the TreeView + // remove anything not in the list + private bool FilterTreeNodes(VETreeNode tn, List filterlist) + { + if (tn == null) + return false; + + if (!filterlist.Contains(tn.VEObject) && (tn != (VETreeNode) tv.Nodes[0])) //Note:Always keep the top node + { + return true; + } + else if (!tn.VEObject.IsProcedure) + { + //if not a procedure + //mark the sub-items that need removal + List lst = (from VETreeNode nde in tn.Nodes.OfType() + where FilterTreeNodes(nde, filterlist) + select (TreeNode) nde).ToList(); + + //remove all items in the removal list + //need to do this separately as can't modify the collection while looping through it above + while (lst.Count > 0) + { + tn.Nodes.Remove(lst[0]); + lst.Remove(lst[0]); + } + + //found a folder that matched that has no matching procedures + //if this is case, allow folder to be expanded + if (tn.Nodes.Count == 0 && filterlist.Contains(tn.VEObject)) + { + tn.ChildrenLoaded = false; + tn.RefreshNode(); + } + } + + return false; + + } + + //C2024-036 IntelliSense + //Collection to block for task to complete + private BlockingCollection blockingQueueFilter = new BlockingCollection(); + + //C2024-036 IntelliSense + // When Text Changes, Perform the filtering + // Note that uses a blocking collection + // in case multiple events fire at the same time + // this is to prevent incorrect behavior when + //doing something like hitting backspace a bunch + private void SubmitFilter(object sender, EventArgs e) + { + //Consumer + Task.Run(() => + { + //Blocks until a new filter is available + while (!blockingQueueFilter.IsCompleted) + { + string fltrtxt = blockingQueueFilter.Take(); + ProcessFilter(fltrtxt); + } + }); + + //Producer + Task.Run(() => { blockingQueueFilter.Add(txtFilter?.Text); }); + + } + + //C2024-036 IntelliSense + // When Enter Key is pressed in the TextBox + private void FilterEnterKey(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == '\r') // enter key pressed + { + e.Handled = true; + SubmitFilter(sender, e); + } + } + + //C2024-036 IntelliSense + // When Text Changes, Perform the filtering + // Note that uses Invoke to + // avoid multi-threaded problems + //with the blocking collection + private void ProcessFilter(string fltrtxt) + { + //Step 1: reload the base tree + VETreeNode tbase = (VETreeNode)tv.Nodes[0]; + tbase.ChildrenLoaded = false; + this.Invoke((Action) (() => { tbase.RefreshNode(); })); + + if (!string.IsNullOrEmpty(fltrtxt)) + { + //Step 2: Expand all TreeNodes + this.Invoke((Action)(() => { LoadAllProcedures(tbase); })); + + //Step 3: get items that match filter to those containing the title or number + List filterlist = GetMatchingTreeNodes(tbase, fltrtxt); + + //Step 4: filter to those containing the title or number + this.Invoke((Action)(() => {FilterTreeNodes(tbase, filterlist);})); + + //Step 5: refresh the view + this.Invoke((Action)(() => {tv.Update();})); + + //Step 6: select 1st procedure in tree view + this.Invoke((Action)(() => {SelectFirstProcedure(filterlist);})); + } + + //Step 7: set progress bar as done + this.Invoke((Action)(() => {ProgBarText = "Filtering Complete";})); + + } + + //C2024-036 IntelliSense + //Gives Focus to last child in first section of treeview + //then given focus to treeview + //so that can click enter and open 1st found item/procedure + void SelectFirstProcedure(List filterlist) + { + TreeNode tn = tv.Nodes[0]; + while (tn.Nodes.Count > 0 && filterlist.Contains(((VETreeNode) tn).VEObject)) + { + tn = tn.Nodes[0]; + } + + tv.SelectedNode = tn; + tv.Enabled = true; + tv.SelectedNode.Collapse(); + tv.Focus(); + } + void btnPrevious_Click(object sender, EventArgs e) { CurrentID = FindPreviousLine(); -- 2.49.1 From f265a23f97b7a9035c60c936bee74cfeaa4ca162 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 4 Sep 2025 16:22:29 -0400 Subject: [PATCH 21/25] C2025-022-PROMS-FIXES_CHECKIN --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index e4cb25c4..d6805ecc 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -24264,8 +24264,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '08/18/2025 2:07 PM' - set @RevDescription = 'Updated Index maintenance that occurs after RO FST Load to improve RO Performance' + set @RevDate = '09/04/2025 7:00 AM PM' + set @RevDescription = 'C2025-022 Remove UCF Code' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription -- 2.49.1 From 3143d094e8ca179f6bf8f3e1a39d81f7f3a0f50c Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 4 Sep 2025 16:28:23 -0400 Subject: [PATCH 22/25] C2025-022-PROMS-FIXES_CHECKIN --- 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 d6805ecc..0a48b274 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -24264,7 +24264,7 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '09/04/2025 7:00 AM PM' + set @RevDate = '09/04/2025 7:00 AM' set @RevDescription = 'C2025-022 Remove UCF Code' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription -- 2.49.1 From eb0582ae697977b0f1df558cf555e4ede4dbb261 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 4 Sep 2025 16:59:48 -0400 Subject: [PATCH 23/25] C2025-022-PROMS-FIXES_CHECKIN --- 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 0a48b274..5a5e0f2c 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -24265,7 +24265,7 @@ BEGIN TRY -- Try Block DECLARE @RevDescription varchar(255) set @RevDate = '09/04/2025 7:00 AM' - set @RevDescription = 'C2025-022 Remove UCF Code' + set @RevDescription = 'Removed stored procedures no longer needed' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription -- 2.49.1 From 0da2d38bd872502c4d498fb2687e6277753ec2fe Mon Sep 17 00:00:00 2001 From: mschill Date: Mon, 8 Sep 2025 14:38:36 -0400 Subject: [PATCH 24/25] C2025-009 Added a report for tracking when a user is added into PROMS / when a user is added to specific PROMS security groups. Report can be run from the V-button->General Tools->Reports. --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 37 ++++- .../VEPROMS User Interface/VEPROMS_UI.csproj | 4 + PROMS/VEPROMS User Interface/frmGenTools.cs | 142 +++++++++++++++++- .../frmGenTools.designer.cs | 114 +++++++++----- PROMS/VEPROMS User Interface/frmGenTools.resx | 3 + .../Minimal/UserReports.cs | 42 ++++++ .../VEPROMS.CSLA.Library.csproj | 1 + 7 files changed, 302 insertions(+), 41 deletions(-) create mode 100644 PROMS/VEPROMS.CSLA.Library/Minimal/UserReports.cs diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 5a5e0f2c..7d2f6c38 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -24231,6 +24231,39 @@ GO ========================================================================================================== */ +-- C2025-009 Report for tracking PROMS Users / Security +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getUserAcessControl]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [getUserAcessControl]; + +GO + +/****** Object: StoredProcedure [dbo].[getUserAcessControl] Script Date: 9/5/2025 6:51:42 AM ******/ + +-- ============================================= +-- Author: Matthew Schill +-- Create date: 09/05/2025 +-- Description: Get Data on When Users were added to PROMS and when they were added to Security Groups +-- ============================================= +CREATE PROCEDURE [dbo].[getUserAcessControl] +AS +BEGIN + SELECT Users.UserID, + WhenUserAddedToPROMS = Users.[DTS], + GroupName = Groups.GroupName, + WhenUserAddedToGroup = Memberships.[DTS], + WhoAddedUserToGroup = CASE WHEN + Memberships.UsrID = Users.UsrID + AND Users.UsrID = Users.UserID + THEN 'INITIAL_SETUP' + ELSE Memberships.UsrID END, + DateUserRemovedFromGroup = Memberships.EndDate + FROM Memberships + inner join Groups on Memberships.GID = Groups.GID + right outer join Users on Users.UID = Memberships.UID + order by UserID, Memberships.[DTS] + RETURN +END + /* --------------------------------------------------------------------------- | ADD New Code Before this Block | @@ -24264,8 +24297,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '09/04/2025 7:00 AM' - set @RevDescription = 'Removed stored procedures no longer needed' + set @RevDate = '09/05/2025 7:00 AM' + set @RevDescription = 'Added stored procedure for User Access Control Report' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index 6b6a4249..b38454be 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -121,6 +121,10 @@ False ..\..\..\..\3rdPartyLibraries\Log4Net\log4net.dll + + + True + diff --git a/PROMS/VEPROMS User Interface/frmGenTools.cs b/PROMS/VEPROMS User Interface/frmGenTools.cs index 238519b6..4d0decc8 100644 --- a/PROMS/VEPROMS User Interface/frmGenTools.cs +++ b/PROMS/VEPROMS User Interface/frmGenTools.cs @@ -9,6 +9,8 @@ using Volian.Controls.Library; using DevComponents.DotNetBar; using JR.Utils.GUI.Forms; using System.Linq; +using System.Data; +using xls = Microsoft.Office.Interop.Excel; namespace VEPROMS { @@ -275,6 +277,13 @@ namespace VEPROMS setupProgessSteps1(); } + //C2025-009 Report for tracking PROMS Users / security + private void sideNavItmReports_Click(object sender, EventArgs e) + { + GenToolType = E_GenToolType.Reports; + setupProgessSteps1(); + } + // C2017-030 new Tools user interface private void sideNavItmExit_Click(object sender, EventArgs e) { @@ -287,7 +296,8 @@ namespace VEPROMS private enum E_GenToolType : int { Check = 0, - Users = 3 + Users = 3, + Reports = 5 }; private E_GenToolType GenToolType = 0; @@ -314,8 +324,8 @@ namespace VEPROMS progressSteps1.Visible = true; progressSteps1.Refresh(); break; - case E_GenToolType.Users: + case E_GenToolType.Reports: splitContainer3.Panel2Collapsed = true; progressSteps1.Visible = false; break; @@ -415,7 +425,133 @@ namespace VEPROMS ClearStepProgress(); } - + + //C2025-009 Report for tracking PROMS Users / security + //UACfilename will hold the filename for cases when scheduled for later + private string UACfilename; + + //C2025-009 Report for tracking PROMS Users / security + private void btnUAC_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(UACfilename)) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "Excel XLS (*.xlsx)|*.xlsx"; + sfd.FileName = "UACReport.xlsx"; + if (sfd.ShowDialog() == DialogResult.OK) + { + UACfilename = sfd.FileName; + } + } + + if (!CheckProcessLater()) return; // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process. + + txtProcess.Clear(); + txtResults.Clear(); + + if (!string.IsNullOrEmpty(UACfilename)) + { + Generate_UAC_Report(UACfilename); + } + + UACfilename = null; + + } + + //C2025-009 Report for tracking PROMS Users / security + //Get Datatable of results then loop through outputting into excel + private void Generate_UAC_Report(string filename) + { + this.Cursor = Cursors.WaitCursor; + DateTime pStart = DateTime.Now; + txtProcess.AppendText("Generate User Access Control Report in PROMS"); + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(Environment.NewLine); + Application.DoEvents(); + txtResults.Clear(); + txtResults.AppendText("Generating User Access Control Report"); + + using (DataTable dt = UserReports.GetUserAccessControlData()) + { + // Start Excel and get Application object. + xls.Application excel = new xls.Application + { + // Make Excel invisible and disable alerts. + Visible = false, + DisplayAlerts = false + }; + + // Create a new Workbook. + xls.Workbook excelworkBook = excel.Workbooks.Add(); + + // Create a Worksheet. + var workSheet = (xls.Worksheet)excelworkBook.ActiveSheet; + workSheet.Name = "UAC Report"; + + // column headings + for (var i = 0; i < dt.Columns.Count; i++) + { + workSheet.Cells[1, i + 1] = dt.Columns[i].ColumnName; + } + + // rows + for (var i = 0; i < dt.Rows.Count; i++) + { + for (var j = 0; j < dt.Columns.Count; j++) + { + workSheet.Cells[i + 2, j + 1] = dt.Rows[i][j]; + } + } + + //resize the columns to match the data + workSheet.Columns.AutoFit(); + + //freeze the top row, and highlight those cells + workSheet.Application.ActiveWindow.SplitRow = 1; + workSheet.Application.ActiveWindow.FreezePanes = true; + workSheet.Cells.Range[workSheet.Cells[1, 1], workSheet.Cells[1, dt.Columns.Count]].Interior.Color = xls.XlRgbColor.rgbLightBlue; + + //save the excel file + excelworkBook.SaveAs(filename); + excelworkBook.Close(); + excel.Quit(); + + //release any in use com objects + releaseObject(workSheet); + releaseObject(excelworkBook); + releaseObject(excel); + + } + + DateTime pEnd = DateTime.Now; + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + Application.DoEvents(); + this.Cursor = Cursors.Default; + MessageBox.Show("Generate User Access Control Report Completed", "User Access Control Report"); + + } + + //C2025-009 Report for tracking PROMS Users / security + //for releasing any Excel com objects still in memory + private void releaseObject(object obj) + { + try + { + System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); + obj = null; + } + catch (Exception ex) + { + obj = null; + MessageBox.Show("Exception Occurred while releasing object " + ex.ToString()); + } + finally + { + GC.Collect(); + } + } + //C2025-011 RO Update Tool Memory Enhancements private void txtProcess_TextChanged(object sender, EventArgs e) { diff --git a/PROMS/VEPROMS User Interface/frmGenTools.designer.cs b/PROMS/VEPROMS User Interface/frmGenTools.designer.cs index 482713c9..995bf751 100644 --- a/PROMS/VEPROMS User Interface/frmGenTools.designer.cs +++ b/PROMS/VEPROMS User Interface/frmGenTools.designer.cs @@ -51,6 +51,9 @@ this.expandableSplitter1 = new DevComponents.DotNetBar.ExpandableSplitter(); this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); this.sideNav1 = new DevComponents.DotNetBar.Controls.SideNav(); + this.sideNavPanel6 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX(); this.sideNavPanel1 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.warningBox3 = new DevComponents.DotNetBar.Controls.WarningBox(); this.labelX7 = new DevComponents.DotNetBar.LabelX(); @@ -62,12 +65,11 @@ this.swCkOrphanDataRecs = new DevComponents.DotNetBar.Controls.SwitchButton(); this.labelX1 = new DevComponents.DotNetBar.LabelX(); this.btnRunCheck = new DevComponents.DotNetBar.ButtonX(); - this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel(); - this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX(); this.sideNavItem1 = new DevComponents.DotNetBar.Controls.SideNavItem(); this.separator1 = new DevComponents.DotNetBar.Separator(); this.sideNavItmCheck = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmUsers = new DevComponents.DotNetBar.Controls.SideNavItem(); + this.sideNavItmReports = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmExit = new DevComponents.DotNetBar.Controls.SideNavItem(); this.panelEx4 = new DevComponents.DotNetBar.PanelEx(); this.progressSteps1 = new DevComponents.DotNetBar.ProgressSteps(); @@ -78,6 +80,7 @@ this.lblAdmToolProgressType = new DevComponents.DotNetBar.LabelX(); this.buttonItem1 = new DevComponents.DotNetBar.ButtonItem(); this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); + this.btnUAC = new DevComponents.DotNetBar.ButtonX(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); this.splitContainer3.Panel1.SuspendLayout(); this.splitContainer3.Panel2.SuspendLayout(); @@ -89,8 +92,9 @@ this.pnlLater.SuspendLayout(); this.panelEx1.SuspendLayout(); this.sideNav1.SuspendLayout(); - this.sideNavPanel1.SuspendLayout(); + this.sideNavPanel6.SuspendLayout(); this.sideNavPanel5.SuspendLayout(); + this.sideNavPanel1.SuspendLayout(); this.panelEx4.SuspendLayout(); this.SuspendLayout(); // @@ -416,8 +420,9 @@ // sideNav1 // this.sideNav1.BackColor = System.Drawing.SystemColors.Control; - this.sideNav1.Controls.Add(this.sideNavPanel1); + this.sideNav1.Controls.Add(this.sideNavPanel6); this.sideNav1.Controls.Add(this.sideNavPanel5); + this.sideNav1.Controls.Add(this.sideNavPanel1); this.sideNav1.Dock = System.Windows.Forms.DockStyle.Fill; this.sideNav1.EnableClose = false; this.sideNav1.EnableMaximize = false; @@ -426,6 +431,7 @@ this.separator1, this.sideNavItmCheck, this.sideNavItmUsers, + this.sideNavItmReports, this.sideNavItmExit}); this.sideNav1.Location = new System.Drawing.Point(0, 0); this.sideNav1.Name = "sideNav1"; @@ -434,6 +440,40 @@ this.sideNav1.TabIndex = 3; this.sideNav1.Text = "sideNav1"; // + // sideNavPanel6 + // + this.sideNavPanel6.Controls.Add(this.btnUAC); + this.sideNavPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel6.Location = new System.Drawing.Point(88, 31); + this.sideNavPanel6.Name = "sideNavPanel6"; + this.sideNavPanel6.Size = new System.Drawing.Size(292, 493); + this.sideNavPanel6.TabIndex = 14; + // + // sideNavPanel5 + // + this.sideNavPanel5.Controls.Add(this.btn_ShowUsers); + this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel5.Location = new System.Drawing.Point(88, 31); + this.sideNavPanel5.Name = "sideNavPanel5"; + this.sideNavPanel5.Size = new System.Drawing.Size(292, 493); + this.sideNavPanel5.TabIndex = 14; + this.sideNavPanel5.Visible = false; + // + // btn_ShowUsers + // + this.btn_ShowUsers.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btn_ShowUsers.Checked = true; + this.btn_ShowUsers.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btn_ShowUsers.Location = new System.Drawing.Point(57, 37); + this.btn_ShowUsers.Name = "btn_ShowUsers"; + this.btn_ShowUsers.Size = new System.Drawing.Size(171, 23); + this.btn_ShowUsers.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.btn_ShowUsers, new DevComponents.DotNetBar.SuperTooltipInfo("Show Users", "", "This will return all of the users currently with open sessions in the database an" + + "d the details of any items they have checked out.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 80))); + this.btn_ShowUsers.TabIndex = 0; + this.btn_ShowUsers.Text = "Show Users"; + this.btn_ShowUsers.Click += new System.EventHandler(this.btn_ShowUsers_Click); + // // sideNavPanel1 // this.sideNavPanel1.Controls.Add(this.warningBox3); @@ -451,6 +491,7 @@ this.sideNavPanel1.Name = "sideNavPanel1"; this.sideNavPanel1.Size = new System.Drawing.Size(292, 493); this.sideNavPanel1.TabIndex = 2; + this.sideNavPanel1.Visible = false; // // warningBox3 // @@ -600,31 +641,6 @@ this.btnRunCheck.Text = "Run Check"; this.btnRunCheck.Click += new System.EventHandler(this.btnRunCheck_Click); // - // sideNavPanel5 - // - this.sideNavPanel5.Controls.Add(this.btn_ShowUsers); - this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel5.Location = new System.Drawing.Point(88, 31); - this.sideNavPanel5.Name = "sideNavPanel5"; - this.sideNavPanel5.Size = new System.Drawing.Size(292, 493); - this.sideNavPanel5.TabIndex = 14; - this.sideNavPanel5.Visible = false; - // - // btn_ShowUsers - // - this.btn_ShowUsers.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btn_ShowUsers.Checked = true; - this.btn_ShowUsers.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btn_ShowUsers.Location = new System.Drawing.Point(57, 37); - this.btn_ShowUsers.Name = "btn_ShowUsers"; - this.btn_ShowUsers.Size = new System.Drawing.Size(171, 23); - this.btn_ShowUsers.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.btn_ShowUsers, new DevComponents.DotNetBar.SuperTooltipInfo("Show Users", "", "This will return all of the users currently with open sessions in the database an" + - "d the details of any items they have checked out.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 80))); - this.btn_ShowUsers.TabIndex = 0; - this.btn_ShowUsers.Text = "Show Users"; - this.btn_ShowUsers.Click += new System.EventHandler(this.btn_ShowUsers_Click); - // // sideNavItem1 // this.sideNavItem1.IsSystemMenu = true; @@ -644,7 +660,6 @@ // // sideNavItmCheck // - this.sideNavItmCheck.Checked = true; this.sideNavItmCheck.Name = "sideNavItmCheck"; this.sideNavItmCheck.Panel = this.sideNavPanel1; this.sideNavItmCheck.Symbol = ""; @@ -659,6 +674,15 @@ this.sideNavItmUsers.Text = "Users"; this.sideNavItmUsers.Click += new System.EventHandler(this.sideNavItmUsers_Click); // + // sideNavItmReports + // + this.sideNavItmReports.Checked = true; + this.sideNavItmReports.Name = "sideNavItmReports"; + this.sideNavItmReports.Panel = this.sideNavPanel6; + this.sideNavItmReports.Symbol = ""; + this.sideNavItmReports.Text = "Reports"; + this.sideNavItmReports.Click += new System.EventHandler(this.sideNavItmReports_Click); + // // sideNavItmExit // this.sideNavItmExit.Name = "sideNavItmExit"; @@ -761,6 +785,20 @@ this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray); this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; // + // btnUAC + // + this.btnUAC.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnUAC.Checked = true; + this.btnUAC.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnUAC.Location = new System.Drawing.Point(35, 30); + this.btnUAC.Name = "btnUAC"; + this.btnUAC.Size = new System.Drawing.Size(187, 23); + this.btnUAC.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnUAC.TabIndex = 0; + this.btnUAC.Text = "Run User Access Control Report"; + this.superTooltip1.SetSuperTooltip(this.btnUAC, new DevComponents.DotNetBar.SuperTooltipInfo("UAC Report", "", "This will return a report containing info on when users were added to PROMS and when users were added to specific PROMS security groups.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.btnUAC.Click += new System.EventHandler(this.btnUAC_Click); + // // frmGenTools // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -790,15 +828,16 @@ this.panelEx1.ResumeLayout(false); this.sideNav1.ResumeLayout(false); this.sideNav1.PerformLayout(); - this.sideNavPanel1.ResumeLayout(false); + this.sideNavPanel6.ResumeLayout(false); this.sideNavPanel5.ResumeLayout(false); + this.sideNavPanel1.ResumeLayout(false); this.panelEx4.ResumeLayout(false); this.ResumeLayout(false); } - #endregion - private System.Windows.Forms.SplitContainer splitContainer3; + #endregion + private System.Windows.Forms.SplitContainer splitContainer3; private DevComponents.DotNetBar.PanelEx panelEx3; private System.Windows.Forms.TextBox txtResults; private System.Windows.Forms.Panel panel1; @@ -829,11 +868,13 @@ private DevComponents.DotNetBar.ButtonX btnRunCheck; private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel5; private DevComponents.DotNetBar.ButtonX btn_ShowUsers; - private DevComponents.DotNetBar.Controls.SideNavItem sideNavItem1; + private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel6; + private DevComponents.DotNetBar.Controls.SideNavItem sideNavItem1; private DevComponents.DotNetBar.Separator separator1; private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmCheck; private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmUsers; - private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmExit; + private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmReports; + private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmExit; private DevComponents.DotNetBar.LabelX lblAdmToolProgressType; private DevComponents.DotNetBar.ProgressSteps progressSteps1; private DevComponents.DotNetBar.StepItem stepItem1; @@ -847,7 +888,8 @@ private DevComponents.DotNetBar.PanelEx panelEx4; private DevComponents.DotNetBar.Controls.WarningBox warningBox3; private DevComponents.DotNetBar.ButtonItem buttonItem1; - } + private DevComponents.DotNetBar.ButtonX btnUAC; + } } diff --git a/PROMS/VEPROMS User Interface/frmGenTools.resx b/PROMS/VEPROMS User Interface/frmGenTools.resx index 12f79aef..96245292 100644 --- a/PROMS/VEPROMS User Interface/frmGenTools.resx +++ b/PROMS/VEPROMS User Interface/frmGenTools.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + diff --git a/PROMS/VEPROMS.CSLA.Library/Minimal/UserReports.cs b/PROMS/VEPROMS.CSLA.Library/Minimal/UserReports.cs new file mode 100644 index 00000000..32f1cef3 --- /dev/null +++ b/PROMS/VEPROMS.CSLA.Library/Minimal/UserReports.cs @@ -0,0 +1,42 @@ +using System; +using Csla.Data; +using System.Data; +using System.Data.SqlClient; + +//CSM - C2025-009 - Minimal Class for User based Reports +namespace VEPROMS.CSLA.Library +{ + public static class UserReports + { + + #region Get User Reports + //CSM - C2025-009 Report for tracking PROMS Users / security + public static DataTable GetUserAccessControlData() + { + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandText = "getUserAcessControl"; + 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 getUserAcessControl 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 27379637..bd901c66 100644 --- a/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj +++ b/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj @@ -388,6 +388,7 @@ + -- 2.49.1 From c9f4c33ba17d1dd84b0464160c02c77ed276c6e9 Mon Sep 17 00:00:00 2001 From: mschill Date: Thu, 11 Sep 2025 10:51:54 -0400 Subject: [PATCH 25/25] C2025-034 Upgrade Possibility - Upgrade PROMS to 64 bit --- .../AdjustBuildRevision.csproj | 6 +- PROMS/Baseline/Baseline.csproj | 6 +- PROMS/DropDownPanel/DropDownPanel.csproj | 11 +- .../FlexableMessageBox.csproj | 7 +- PROMS/Formats/Formats.csproj | 2 + PROMS/LBWordLibrary/LBWordLibrary.csproj | 7 +- PROMS/RoAccessToSql/RoAccessToSql.csproj | 6 +- PROMS/TablePicker/TablePicker.csproj | 9 +- .../VEPROMS User Interface/VEPROMS_UI.csproj | 11 +- .../VEPROMS.CSLA.Library.csproj | 11 +- PROMS/VEPROMS/VEPROMS.sln | 34 +++ PROMS/VEPROMS/VlnStatus64/StatusBarFrm.cs | 232 ++++++++++++++++++ PROMS/VEPROMS/VlnStatus64/StatusBarFrm.resx | 157 ++++++++++++ PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.cs | 140 +++++++++++ .../VEPROMS/VlnStatus64/StatusMessageFrm.resx | 139 +++++++++++ PROMS/VEPROMS/VlnStatus64/VlnStatus64.csproj | 58 +++++ PROMS/VEPROMS/VlnStatus64/VlnStatusBar.cs | 148 +++++++++++ PROMS/VEPROMS/VlnStatus64/VlnStatusMessage.cs | 79 ++++++ PROMS/VG/VG.csproj | 11 +- .../Volian.Base.Library.csproj | 6 +- .../Volian.Controls.Library.csproj | 11 +- .../Volian.Pipe.Library.csproj | 6 +- .../Volian.Print.Library.csproj | 11 +- .../Volian.Svg.Library.csproj | 7 +- .../Volian.Utils.Library.csproj | 6 +- PROMS/XYPlots/XYPlots.csproj | 11 +- 26 files changed, 1073 insertions(+), 59 deletions(-) create mode 100644 PROMS/VEPROMS/VlnStatus64/StatusBarFrm.cs create mode 100644 PROMS/VEPROMS/VlnStatus64/StatusBarFrm.resx create mode 100644 PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.cs create mode 100644 PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.resx create mode 100644 PROMS/VEPROMS/VlnStatus64/VlnStatus64.csproj create mode 100644 PROMS/VEPROMS/VlnStatus64/VlnStatusBar.cs create mode 100644 PROMS/VEPROMS/VlnStatus64/VlnStatusMessage.cs diff --git a/PROMS/AdjustBuildRevision/AdjustBuildRevision.csproj b/PROMS/AdjustBuildRevision/AdjustBuildRevision.csproj index 5cb839ea..f87295ce 100644 --- a/PROMS/AdjustBuildRevision/AdjustBuildRevision.csproj +++ b/PROMS/AdjustBuildRevision/AdjustBuildRevision.csproj @@ -5,7 +5,7 @@ TRACE true pdbonly - x86 + x64 prompt false @@ -44,6 +44,7 @@ prompt 4 false + x64 pdbonly @@ -53,13 +54,14 @@ prompt 4 false + x64 true bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt false diff --git a/PROMS/Baseline/Baseline.csproj b/PROMS/Baseline/Baseline.csproj index e365d3d8..1834a6ec 100644 --- a/PROMS/Baseline/Baseline.csproj +++ b/PROMS/Baseline/Baseline.csproj @@ -22,7 +22,7 @@ - AnyCPU + x64 true full false @@ -30,15 +30,17 @@ DEBUG;TRACE prompt 4 + false - AnyCPU + x64 pdbonly true bin\Release\ TRACE prompt 4 + false diff --git a/PROMS/DropDownPanel/DropDownPanel.csproj b/PROMS/DropDownPanel/DropDownPanel.csproj index 2134521b..cb6c3173 100644 --- a/PROMS/DropDownPanel/DropDownPanel.csproj +++ b/PROMS/DropDownPanel/DropDownPanel.csproj @@ -34,7 +34,7 @@ DEBUG;TRACE prompt 4 - x86 + x64 false @@ -45,13 +45,14 @@ prompt 4 false + x64 true bin\Demo\ DEBUG;TRACE full - x86 + x64 prompt false @@ -60,7 +61,7 @@ bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt false @@ -69,7 +70,7 @@ TRACE true pdbonly - x86 + x64 prompt false @@ -78,7 +79,7 @@ bin\Demo\ TRACE;DEMO full - x86 + x64 prompt false diff --git a/PROMS/FlexableMessageBox/FlexableMessageBox.csproj b/PROMS/FlexableMessageBox/FlexableMessageBox.csproj index 9439fdb5..1d29ad99 100644 --- a/PROMS/FlexableMessageBox/FlexableMessageBox.csproj +++ b/PROMS/FlexableMessageBox/FlexableMessageBox.csproj @@ -29,7 +29,7 @@ DEBUG;TRACE prompt 4 - x86 + x64 false @@ -40,13 +40,14 @@ prompt 4 false + x64 true bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt MinimumRecommendedRules.ruleset false @@ -56,7 +57,7 @@ TRACE true pdbonly - x86 + x64 prompt MinimumRecommendedRules.ruleset false diff --git a/PROMS/Formats/Formats.csproj b/PROMS/Formats/Formats.csproj index c1ca80da..ffd92dcb 100644 --- a/PROMS/Formats/Formats.csproj +++ b/PROMS/Formats/Formats.csproj @@ -35,6 +35,7 @@ prompt 4 false + x64 pdbonly @@ -44,6 +45,7 @@ prompt 4 false + x64 diff --git a/PROMS/LBWordLibrary/LBWordLibrary.csproj b/PROMS/LBWordLibrary/LBWordLibrary.csproj index 76bf81f4..8164fb19 100644 --- a/PROMS/LBWordLibrary/LBWordLibrary.csproj +++ b/PROMS/LBWordLibrary/LBWordLibrary.csproj @@ -34,7 +34,7 @@ TRACE;DEBUG prompt 4 - x86 + x64 false @@ -45,13 +45,14 @@ prompt 4 false + x64 true bin\Debug\ TRACE;DEBUG full - x86 + x64 prompt MinimumRecommendedRules.ruleset false @@ -61,7 +62,7 @@ TRACE true pdbonly - x86 + x64 prompt MinimumRecommendedRules.ruleset false diff --git a/PROMS/RoAccessToSql/RoAccessToSql.csproj b/PROMS/RoAccessToSql/RoAccessToSql.csproj index b25170f1..87f2089f 100644 --- a/PROMS/RoAccessToSql/RoAccessToSql.csproj +++ b/PROMS/RoAccessToSql/RoAccessToSql.csproj @@ -22,7 +22,7 @@ - AnyCPU + x64 true full false @@ -30,15 +30,17 @@ DEBUG;TRACE prompt 4 + false - AnyCPU + x64 pdbonly true bin\Release\ TRACE prompt 4 + false diff --git a/PROMS/TablePicker/TablePicker.csproj b/PROMS/TablePicker/TablePicker.csproj index d9e7d339..3c4288ca 100644 --- a/PROMS/TablePicker/TablePicker.csproj +++ b/PROMS/TablePicker/TablePicker.csproj @@ -60,6 +60,7 @@ full prompt false + x64 bin\Release\ @@ -84,6 +85,7 @@ none prompt false + x64 bin\Release\ @@ -108,6 +110,7 @@ none prompt false + x64 true @@ -116,7 +119,7 @@ 285212672 4096 full - x86 + x64 prompt MinimumRecommendedRules.ruleset false @@ -127,7 +130,7 @@ 285212672 true 4096 - x86 + x64 prompt MinimumRecommendedRules.ruleset false @@ -138,7 +141,7 @@ 285212672 true 4096 - x86 + x64 prompt MinimumRecommendedRules.ruleset false diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index b38454be..f9ed6495 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -50,7 +50,7 @@ DEBUG;TRACE prompt 4 - x86 + x64 false @@ -61,13 +61,14 @@ prompt 4 false + x64 true bin\Demo\ DEBUG;TRACE full - x86 + x64 prompt false @@ -76,7 +77,7 @@ bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt false @@ -85,7 +86,7 @@ TRACE true pdbonly - x86 + x64 prompt false @@ -94,7 +95,7 @@ bin\Demo\ TRACE;DEMO full - x86 + x64 prompt false diff --git a/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj b/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj index bd901c66..b15fe55e 100644 --- a/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj +++ b/PROMS/VEPROMS.CSLA.Library/VEPROMS.CSLA.Library.csproj @@ -34,7 +34,7 @@ DEBUG;TRACE prompt 4 - x86 + x64 false @@ -45,13 +45,14 @@ prompt 4 false + x64 true bin\Demo\ DEBUG;TRACE full - x86 + x64 prompt false @@ -60,7 +61,7 @@ bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt false @@ -69,7 +70,7 @@ TRACE true pdbonly - x86 + x64 prompt false @@ -78,7 +79,7 @@ bin\Demo\ TRACE;DEMO full - x86 + x64 prompt false diff --git a/PROMS/VEPROMS/VEPROMS.sln b/PROMS/VEPROMS/VEPROMS.sln index 47cfa040..dcd3d0bf 100644 --- a/PROMS/VEPROMS/VEPROMS.sln +++ b/PROMS/VEPROMS/VEPROMS.sln @@ -42,6 +42,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoAccessToSql", "..\RoAcces {AEEE9FD1-6892-45E2-A67E-418C06D46FF9} = {AEEE9FD1-6892-45E2-A67E-418C06D46FF9} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VlnStatus64", "VlnStatus64\VlnStatus64.csproj", "{797DE52C-278C-41D4-8B65-B9CFC02DDCD9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -548,6 +550,38 @@ Global {1EC96BDA-01E7-4153-A95D-6A4A36FA278E}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1EC96BDA-01E7-4153-A95D-6A4A36FA278E}.Release|Win32.ActiveCfg = Release|Any CPU {1EC96BDA-01E7-4153-A95D-6A4A36FA278E}.Release|x86.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Debug|Win32.ActiveCfg = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Debug|Win32.Build.0 = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Debug|x86.ActiveCfg = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Debug|x86.Build.0 = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Demo|Any CPU.ActiveCfg = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Demo|Any CPU.Build.0 = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Demo|Mixed Platforms.ActiveCfg = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Demo|Mixed Platforms.Build.0 = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Demo|Win32.ActiveCfg = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Demo|Win32.Build.0 = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Demo|x86.ActiveCfg = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Demo|x86.Build.0 = Debug|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release_PreRegistered|Any CPU.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release_PreRegistered|Any CPU.Build.0 = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release_PreRegistered|Mixed Platforms.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release_PreRegistered|Mixed Platforms.Build.0 = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release_PreRegistered|Win32.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release_PreRegistered|Win32.Build.0 = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release_PreRegistered|x86.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release_PreRegistered|x86.Build.0 = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release|Any CPU.Build.0 = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release|Win32.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release|Win32.Build.0 = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release|x86.ActiveCfg = Release|Any CPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PROMS/VEPROMS/VlnStatus64/StatusBarFrm.cs b/PROMS/VEPROMS/VlnStatus64/StatusBarFrm.cs new file mode 100644 index 00000000..6828458b --- /dev/null +++ b/PROMS/VEPROMS/VlnStatus64/StatusBarFrm.cs @@ -0,0 +1,232 @@ +/********************************************************************************************* + * Copyright 2002 - Volian Enterprises, Inc. All rights reserved. + * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + * ------------------------------------------------------------------------------ + * $Workfile: StatusBarFrm.cs $ $Revision: 3 $ + * $Author: Jsj $ $Date: 4/08/04 9:50a $ + * + * $History: StatusBarFrm.cs $ + * + * ***************** Version 3 ***************** + * User: Jsj Date: 4/08/04 Time: 9:50a + * Updated in $/LibSource/VlnStatus + * added profile code and try to optimize + * + * ***************** Version 2 ***************** + * User: Jsj Date: 11/26/02 Time: 3:38p + * Updated in $/LibSource/VlnStatus + * Added overbounds check + *********************************************************************************************/ + +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +//using ROProfiler; //don't forget to add VlnProfiler to the reference list + +namespace VlnStatus +{ + /// + /// Create a status window with a progress bar + /// + public class StatusBarFrm : System.Windows.Forms.Form + { + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label lblBar; + private System.Windows.Forms.Label StatMsg; +// private string strLblLast=""; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public StatusBarFrm() + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + Text = "Status"; + } + + public StatusBarFrm(string StatusBoxTitle) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + Text = StatusBoxTitle; + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.lblBar = new System.Windows.Forms.Label(); + this.StatMsg = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(29, 83); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(297, 27); + this.progressBar1.TabIndex = 0; + // + // lblBar + // + this.lblBar.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBar.Location = new System.Drawing.Point(29, 136); + this.lblBar.Name = "lblBar"; + this.lblBar.Size = new System.Drawing.Size(297, 16); + this.lblBar.TabIndex = 1; + this.lblBar.Text = "% Complete"; + this.lblBar.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // StatMsg + // + this.StatMsg.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.StatMsg.Location = new System.Drawing.Point(29, 18); + this.StatMsg.Name = "StatMsg"; + this.StatMsg.Size = new System.Drawing.Size(307, 56); + this.StatMsg.TabIndex = 2; + this.StatMsg.Text = "Progress Bar"; + this.StatMsg.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // StatusBarFrm + // + this.AutoScaleBaseSize = new System.Drawing.Size(6, 15); + this.ClientSize = new System.Drawing.Size(350, 171); + this.ControlBox = false; + this.Controls.Add(this.StatMsg); + this.Controls.Add(this.lblBar); + this.Controls.Add(this.progressBar1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "StatusBarFrm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Status"; + this.TopMost = true; + this.Load += new System.EventHandler(this.StatusBarFrm_Load); + this.ResumeLayout(false); + + } + #endregion + + private void StatusBarFrm_Load(object sender, System.EventArgs e) + { + + } + + public int Value + { + get + { + return progressBar1.Value; + } + set + { + if (value >= progressBar1.Maximum) + progressBar1.Value = progressBar1.Maximum; + else + progressBar1.Value = value; + UpateLabel(); + } + } + + public int Maximum + { + get + { + return progressBar1.Maximum; + } + set + { + progressBar1.Maximum = value; + } + } + + public int Step + { + get + { + return progressBar1.Step; + } + set + { + progressBar1.Step = value; + } + } + + public void PerformStep() + { + progressBar1.PerformStep(); + } + + private void UpateLabel() + { + lblBar.Text = (Math.Round((decimal)(progressBar1.Value * 100) / progressBar1.Maximum)).ToString(); + lblBar.Text += "% Complete"; +// if( lblBar.Text != strLblLast) +// { +// Profiler.Start("UpdateLabel"); + lblBar.Refresh(); +// lblBar.Update(); +// Profiler.End("UpdateLabel"); +// } +// strLblLast = lblBar.Text; + } + + public string StatusMessage + { + get + { + return StatMsg.Text; + } + set + { + StatMsg.Text = value; +// Profiler.Start("StatusMessage"); + StatMsg.Refresh(); +// StatMsg.Update(); +// Profiler.End("StatusMessage"); + } + } + + public string StatusBoxTitle + { + get + { + return Text; + } + set + { + Text = value; + } + } + + } +} diff --git a/PROMS/VEPROMS/VlnStatus64/StatusBarFrm.resx b/PROMS/VEPROMS/VlnStatus64/StatusBarFrm.resx new file mode 100644 index 00000000..63f8de01 --- /dev/null +++ b/PROMS/VEPROMS/VlnStatus64/StatusBarFrm.resx @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + StatusBarFrm + + + True + + + Private + + \ No newline at end of file diff --git a/PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.cs b/PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.cs new file mode 100644 index 00000000..386d145c --- /dev/null +++ b/PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.cs @@ -0,0 +1,140 @@ +/********************************************************************************************* + * Copyright 2002 - Volian Enterprises, Inc. All rights reserved. + * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + * ------------------------------------------------------------------------------ + * $Workfile: StatusMessageFrm.cs $ $Revision: 3 $ + * $Author: Jsj $ $Date: 5/11/04 9:30a $ + * + * $History: StatusMessageFrm.cs $ + * + * ***************** Version 3 ***************** + * User: Jsj Date: 5/11/04 Time: 9:30a + * Updated in $/LibSource/VlnStatus + * + * ***************** Version 2 ***************** + * User: Jsj Date: 11/26/02 Time: 3:38p + * Updated in $/LibSource/VlnStatus + * Added overbounds check + *********************************************************************************************/ + +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + +namespace VlnStatus +{ + /// + /// Create status message window. + /// + public class StatusMessageFrm : System.Windows.Forms.Form + { + private System.Windows.Forms.Label lblStatMsg; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public StatusMessageFrm() + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + } + + public StatusMessageFrm(string StatTitle) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + Text = StatTitle; + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lblStatMsg = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lblStatMsg + // + this.lblStatMsg.Location = new System.Drawing.Point(19, 20); + this.lblStatMsg.Name = "lblStatMsg"; + this.lblStatMsg.Size = new System.Drawing.Size(420, 81); + this.lblStatMsg.TabIndex = 0; + this.lblStatMsg.Text = "Put Status Message Here"; + this.lblStatMsg.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // StatusMessageFrm + // + this.AutoScaleBaseSize = new System.Drawing.Size(7, 19); + this.ClientSize = new System.Drawing.Size(457, 117); + this.ControlBox = false; + this.Controls.Add(this.lblStatMsg); + this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "StatusMessageFrm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Status"; + this.TopMost = true; + this.Load += new System.EventHandler(this.StatusMessageFrm_Load); + this.ResumeLayout(false); + + } + #endregion + + private void StatusMessageFrm_Load(object sender, System.EventArgs e) + { + + } + + public string StatusMessage + { + get + { + return lblStatMsg.Text; + } + set + { + lblStatMsg.Text = value; + lblStatMsg.Refresh(); + } + } + + public string StatusBoxTitle + { + get + { + return Text; + } + set + { + Text = value; + } + } + } +} diff --git a/PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.resx b/PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.resx new file mode 100644 index 00000000..7edd5b3c --- /dev/null +++ b/PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + StatusMessageFrm + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/PROMS/VEPROMS/VlnStatus64/VlnStatus64.csproj b/PROMS/VEPROMS/VlnStatus64/VlnStatus64.csproj new file mode 100644 index 00000000..b0ea1627 --- /dev/null +++ b/PROMS/VEPROMS/VlnStatus64/VlnStatus64.csproj @@ -0,0 +1,58 @@ + + + + + Debug + AnyCPU + {797DE52C-278C-41D4-8B65-B9CFC02DDCD9} + Library + Properties + VlnStatus64 + VlnStatus64 + v4.8.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x64 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x64 + + + + + + + + + + + + Form + + + Form + + + + + + + + + + \ No newline at end of file diff --git a/PROMS/VEPROMS/VlnStatus64/VlnStatusBar.cs b/PROMS/VEPROMS/VlnStatus64/VlnStatusBar.cs new file mode 100644 index 00000000..a7a4e2cd --- /dev/null +++ b/PROMS/VEPROMS/VlnStatus64/VlnStatusBar.cs @@ -0,0 +1,148 @@ +/********************************************************************************************* + * Copyright 2002 - Volian Enterprises, Inc. All rights reserved. + * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + * ------------------------------------------------------------------------------ + * $Workfile: VlnStatusBar.cs $ $Revision: 4 $ + * $Author: Jsj $ $Date: 11/26/02 4:25p $ + * + * $History: VlnStatusBar.cs $ + * + * ***************** Version 4 ***************** + * User: Jsj Date: 11/26/02 Time: 4:25p + * Updated in $/LibSource/VlnStatus + * fixed problem with counter + * + * ***************** Version 3 ***************** + * User: Jsj Date: 11/26/02 Time: 3:38p + * Updated in $/LibSource/VlnStatus + * Added overbounds check + *********************************************************************************************/ +using System; + +namespace VlnStatus +{ + /// + /// Creates a Status Window with a progression bar control. + /// + /// This class has two constructors. One allows you to pass in the title + /// of the Status Box. The Other provides a default title of "Status". + /// The Status Box Title can also be set/changed via the StatusBoxTitle + /// property. + /// + /// + /// + public class VlnStatusBar + { + StatusBarFrm StatBar; + private int Cnt; + + // Create a status window with the default title of "Status" + public VlnStatusBar() + { + StatBar = new StatusBarFrm(); + StatBar.Show(); + } + + // Create a status window with the passed in title + public VlnStatusBar(string Title) + { + StatBar = new StatusBarFrm(Title); + StatBar.Show(); + } + + // Increament the the status bar by the passed in value. + public void PerformStep(int val) + { +// StatBar.Value = val; +// Cnt = val; + BarValue = val; + StatBar.PerformStep(); + } + + // Increament the the status bar by one + public void PerformStep() + { +// StatBar.Value = StatBar.Value + 1; + Cnt++; + BarValue = Cnt; + StatBar.PerformStep(); + } + + // This property gets or sets the current status bar value. + public int BarValue + { + get + { + return StatBar.Value; + } + set + { + StatBar.Value = value; + Cnt = value; + } + } + + // This property sets or gets the maximum value that the + // BarValue property can be. i.e. when BarValue reaches this + // number, the status bar is completely displayed. + public int BarMax + { + get + { + return StatBar.Maximum; + } + set + { + StatBar.Maximum = value; + } + } + + // This property sets or gets the increamenting value used to + // move the status bar. For example, if set to 5, each tick of + // the status bar represents a value of 5. + public int BarStepValue + { + get + { + return StatBar.Step; + } + set + { + StatBar.Step = value; + } + } + + // This property sets or gets the message above the status bar. + public string StatMsg + { + get + { + return StatBar.StatusMessage; + } + set + { + StatBar.StatusMessage = value; + } + } + + // This property sets or gets the Status Window Title + public string StatusBoxTitle + { + get + { + return StatBar.StatusBoxTitle; + } + set + { + StatBar.StatusBoxTitle = value; + } + } + + public void Dispose() + { + StatBar.Dispose(); + } + + } +} + diff --git a/PROMS/VEPROMS/VlnStatus64/VlnStatusMessage.cs b/PROMS/VEPROMS/VlnStatus64/VlnStatusMessage.cs new file mode 100644 index 00000000..e0221ee8 --- /dev/null +++ b/PROMS/VEPROMS/VlnStatus64/VlnStatusMessage.cs @@ -0,0 +1,79 @@ +/********************************************************************************************* + * Copyright 2002 - Volian Enterprises, Inc. All rights reserved. + * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + * ------------------------------------------------------------------------------ + * $Workfile: VlnStatusMessage.cs $ $Revision: 3 $ + * $Author: Jsj $ $Date: 11/26/02 3:38p $ + * + * $History: VlnStatusMessage.cs $ + * + * ***************** Version 3 ***************** + * User: Jsj Date: 11/26/02 Time: 3:38p + * Updated in $/LibSource/VlnStatus + * Added overbounds check + *********************************************************************************************/ + +using System; + +namespace VlnStatus +{ + /// + /// Creates a Status Window to display a status message. + /// + /// This class has two constructors. One allows you to pass in the title + /// of the Status Box. The Other provides a default title of "Status". + /// The Status Box Title can also be set/changed via the StatusBoxTitle + /// property. + /// + /// + public class VlnStatusMessage + { + StatusMessageFrm StatusMessageBox; + + // Create a status window with the default title of "Status" + public VlnStatusMessage() + { + StatusMessageBox = new StatusMessageFrm(); + StatusMessageBox.Show(); + } + + // Create a status window with the passed in title. + public VlnStatusMessage(string StatusBoxTitle) + { + StatusMessageBox = new StatusMessageFrm(StatusBoxTitle); + StatusMessageBox.Show(); + } + + // This property gets or sets the current status message + public string StatusMessage + { + get + { + return StatusMessageBox.StatusMessage; + } + set + { + StatusMessageBox.StatusMessage = value; + } + } + + // This property gets or sets the status box title + public string StatusBoxTitle + { + get + { + return StatusMessageBox.StatusBoxTitle; + } + set + { + StatusMessageBox.StatusBoxTitle = value; + } + } + + public void Dispose() + { + StatusMessageBox.Dispose(); + } + + } +} diff --git a/PROMS/VG/VG.csproj b/PROMS/VG/VG.csproj index 7308ee23..fbadc1d4 100644 --- a/PROMS/VG/VG.csproj +++ b/PROMS/VG/VG.csproj @@ -61,7 +61,7 @@ 4 full prompt - x86 + x64 false @@ -87,6 +87,7 @@ none prompt false + x64 true @@ -94,7 +95,7 @@ DEBUG;TRACE 285212672 full - x86 + x64 prompt false @@ -104,7 +105,7 @@ DEBUG;TRACE 285212672 full - x86 + x64 prompt false @@ -115,7 +116,7 @@ true - x86 + x64 prompt false @@ -125,7 +126,7 @@ TRACE;DEMO 285212672 full - x86 + x64 prompt false diff --git a/PROMS/Volian.Base.Library/Volian.Base.Library.csproj b/PROMS/Volian.Base.Library/Volian.Base.Library.csproj index 4d7bbcd7..525629a6 100644 --- a/PROMS/Volian.Base.Library/Volian.Base.Library.csproj +++ b/PROMS/Volian.Base.Library/Volian.Base.Library.csproj @@ -35,6 +35,7 @@ prompt 4 false + x64 pdbonly @@ -44,13 +45,14 @@ prompt 4 false + x64 true bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt false @@ -59,7 +61,7 @@ TRACE true pdbonly - x86 + x64 prompt false diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index a6afdbca..42a8db20 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -34,7 +34,7 @@ DEBUG;TRACE prompt 4 - x86 + x64 false @@ -45,13 +45,14 @@ prompt 4 false + x64 true bin\Demo\ DEBUG;TRACE full - x86 + x64 prompt false @@ -60,7 +61,7 @@ bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt false @@ -69,7 +70,7 @@ TRACE true pdbonly - x86 + x64 prompt false @@ -78,7 +79,7 @@ bin\Demo\ TRACE;DEMO full - x86 + x64 prompt false diff --git a/PROMS/Volian.Pipe.Library/Volian.Pipe.Library.csproj b/PROMS/Volian.Pipe.Library/Volian.Pipe.Library.csproj index 1e8f9c29..788d4651 100644 --- a/PROMS/Volian.Pipe.Library/Volian.Pipe.Library.csproj +++ b/PROMS/Volian.Pipe.Library/Volian.Pipe.Library.csproj @@ -26,6 +26,7 @@ prompt 4 false + x64 pdbonly @@ -35,13 +36,14 @@ prompt 4 false + x64 true bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt MinimumRecommendedRules.ruleset false @@ -51,7 +53,7 @@ TRACE true pdbonly - x86 + x64 prompt MinimumRecommendedRules.ruleset false diff --git a/PROMS/Volian.Print.Library/Volian.Print.Library.csproj b/PROMS/Volian.Print.Library/Volian.Print.Library.csproj index d272fbe1..2f0665a3 100644 --- a/PROMS/Volian.Print.Library/Volian.Print.Library.csproj +++ b/PROMS/Volian.Print.Library/Volian.Print.Library.csproj @@ -34,7 +34,7 @@ DEBUG;TRACE prompt 4 - x86 + x64 false @@ -45,13 +45,14 @@ prompt 4 false + x64 true bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt false @@ -60,7 +61,7 @@ TRACE true pdbonly - x86 + x64 prompt false @@ -98,8 +99,8 @@ - - ..\ReferencedObjects\LibSource\VlnStatus\bin\Debug\VlnStatus.dll + + ..\VEPROMS\VlnStatus64\bin\Debug\VlnStatus64.dll diff --git a/PROMS/Volian.Svg.Library/Volian.Svg.Library.csproj b/PROMS/Volian.Svg.Library/Volian.Svg.Library.csproj index e26e4189..9beda668 100644 --- a/PROMS/Volian.Svg.Library/Volian.Svg.Library.csproj +++ b/PROMS/Volian.Svg.Library/Volian.Svg.Library.csproj @@ -34,7 +34,7 @@ DEBUG;TRACE prompt 4 - x86 + x64 false @@ -45,13 +45,14 @@ prompt 4 false + x64 true bin\Debug\ DEBUG;TRACE full - x86 + x64 prompt false @@ -60,7 +61,7 @@ TRACE true pdbonly - x86 + x64 prompt false diff --git a/PROMS/Volian.Utils.Library/Volian.Utils.Library.csproj b/PROMS/Volian.Utils.Library/Volian.Utils.Library.csproj index e6df0d64..d098bfa8 100644 --- a/PROMS/Volian.Utils.Library/Volian.Utils.Library.csproj +++ b/PROMS/Volian.Utils.Library/Volian.Utils.Library.csproj @@ -31,6 +31,7 @@ .\bin\Debug\ DEBUG;TRACE false + x64 pdbonly @@ -38,13 +39,14 @@ .\bin\Release\ TRACE false + x64 true bin\Debug\ DEBUG;TRACE full - x86 + x64 MinimumRecommendedRules.ruleset false @@ -53,7 +55,7 @@ TRACE true pdbonly - x86 + x64 MinimumRecommendedRules.ruleset false diff --git a/PROMS/XYPlots/XYPlots.csproj b/PROMS/XYPlots/XYPlots.csproj index 83a3a904..93469b8a 100644 --- a/PROMS/XYPlots/XYPlots.csproj +++ b/PROMS/XYPlots/XYPlots.csproj @@ -61,7 +61,7 @@ 4 full prompt - x86 + x64 false @@ -87,6 +87,7 @@ none prompt false + x64 true @@ -94,7 +95,7 @@ DEBUG;TRACE 285212672 full - x86 + x64 prompt false @@ -104,7 +105,7 @@ DEBUG;TRACE 285212672 full - x86 + x64 prompt false @@ -115,7 +116,7 @@ true - x86 + x64 prompt false @@ -125,7 +126,7 @@ TRACE;DEMO 285212672 full - x86 + x64 prompt false -- 2.49.1