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/Formats/fmtall/BASEall.xml b/PROMS/Formats/fmtall/BASEall.xml
index 8ca3756e..bfdff426 100644
Binary files a/PROMS/Formats/fmtall/BASEall.xml and b/PROMS/Formats/fmtall/BASEall.xml differ
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/App.config b/PROMS/VEPROMS User Interface/App.config
index 6a31a77c..6e792fea 100644
--- a/PROMS/VEPROMS User Interface/App.config
+++ b/PROMS/VEPROMS User Interface/App.config
@@ -199,4 +199,4 @@
-
+
\ No newline at end of file
diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql
index 1bbc54ab..7d2f6c38 100644
--- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql
+++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql
@@ -14765,40 +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'
-GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_GetItemsMatchingFormatItems]') AND OBJECTPROPERTY(id,N'IsTableFunction') = 1)
DROP FUNCTION [vefn_GetItemsMatchingFormatItems];
@@ -14981,100 +14952,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];
@@ -18917,9 +18798,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 +18818,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'
@@ -24344,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 |
@@ -24377,8 +24297,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 = '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/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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
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
+ JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAADAklE
+ QVQ4T32R3U9ScRjH+wNaW62rml7UevGtVasMa71pqSVNKaLMMsVAFOpYqVNBUqRieTA8iGhBcawMp4Wo
+ neoiJ6P1ptOmsZqKK5g6zbWmvTjTbzsUN1JdfJ+b7+/5PM/z/S0AsIAVRTNBFM0QFM0wFeaWMU3N/TEV
+ ZWXkZB2Rq74R5H83X/5mDkUztvLWJlBdVlS6aqEbKMGZ9kSkVZCQFlfZMvJIzvxmH+DPZFtRmxaX3xfg
+ 4ad2dH5zI9Mqh+ZdLtKaohGj0uG4TG07JCoO2IQFEAW0CenPN8MwlA/mkxOvJnvx9vs47nptOKUvxS79
+ W2xTX8SB1HzibwAmRXsHokc8lLiScf0DCbOnFFSPGaK6e8iomsARzRBCag9iryCHCQCwgWVSbvCMQqQ+
+ 24WslzGQmc5DcvMhhFVvcKrciy1UHVbe2ocdvOyxAACb9lnTDJKLldhticKeFh6O6khk6b1I1w5DoO7H
+ KnMqgqujwOGKAwEqvZWRGicgqR7FESIFMYYUbG1MBucWhWNqNxIVvYiWJCA8fyc2xwsDT5CTNHGW7MBp
+ wzTSyAEcuCDGBksiQur2Y02lHLF5nYiSZGE7/ygLCAzxgvpGkIz956suZJOPUWCoR26FGScKtVhxJRKR
+ mRJwRSRkJdc/qqqbhxW6Rs+5S7RFVGjg+gBsKSTri2qs7T963nsx9W0Oo5+n0fz0DaRKExLESlTXt2O+
+ l6Myj8SdVPB9gDKj3e5yjyFbrh9ctpE3uT5OPHOppnXWbOtElfXZz4YnvTA0OCeXbzrsitgn6issv+sw
+ NTrBSSLsfsDULIBFa+OHQvakh9Y2ve6aA/D5K+AenUZX/xd09IxjSTiX5Es1oUp981BH9wjCooVTPoBC
+ 12h3drshU9Y4+FJNn6LyQd/isISZhatj4de6GOGw37tGP3WUGVsRHCn4vcG5yzRfqWsYuW1/AUe3B23O
+ QSh0TYhKyhlJEF7U/stbGs79nQErgUzDjUtVWDhJhCcsOt0THCmwLI3g+pL+n/cLizaROFBwAHwAAAAA
+ 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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
+ 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
- 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
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
+ JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfUlEQVQ4T2P4//8/AwxXVFSwFxUVJUya
+ NGn3tm3b/q1cufL/hAkTPoSGhh5UUVFJ09fX50RWD8IoHBBes2bNzJcvX/78/////y9fvvw/c+bM/7a2
+ tv8GBgY7NTU1DR0dHZlxGjB9+nTWpUuXZr58+fLNhw8f/l+5cuX/6tWr/5eXV/x3dnberKurq6+lqYnb
+ gPz8fN64uLjQqVOnnly7du2flpaW/7m5ef99ff1empqaVRubGPOhuxiFA8JpaWm8KSkp1StWrnyzdOnS
+ //n5Bf9NTc1u6ekbVDs4OSmiq0fhlJaWKldXV1fMnDVrx6vXrz98/Pjx/7Rp0/6npqb+9g8MfGTr4Nho
+ ZWsnitOA2tpau23btl28cvUq2P/37t37P2fOnP/t7R3/W9va/7t5eDzXNzSMxGpAaWkpU0VFhfOBAwf2
+ f/r06f/FS5f+P3z48P/1a9f+L1+27H9HV9f/iKioHzZ29n0OTi4iGAaAcE1NjdesWbPuv3z5EhSL/79/
+ //7/3bt3/w8fPvy/uKT4v72T02MTc8t0Y1NzNqwGNDU1ybS0tMxdsWLFz+vXr/8/ePDQ/xkzZv7Pyc39
+ 7+bu8cvYxGyRsam5JFYvwHBjQ4N0eXl5aUt72/YpU6c+6Onp/e/q4f1GW99kupGppTy6ejijo6uXEc7u
+ 7GaprW90rKtrPNXX1/c/O79sW1BMmhq6ZhQD0HFP3yTJObPnnY+LjfuvY2CyJzGrTBZdDU4DGpvbmBqb
+ OxT37Duw7sKFi/9V1TUO8wmKWKOrw2kAxJB2hYmTp9SuW7fuf2ho2AlZGRmMVIjXgI7OLub6xkaVtLS0
+ ovT09IjCwkIWdDUgDAAMn43RSw4q2AAAAABJRU5ErkJggg==
- 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
- fvLwiCIAAAAASUVORK5CYII=
+ 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
- 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
+ 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
- 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
- m/1l/3r2Ey4iunsWz150AAAAAElFTkSuQmCC
+ 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
- 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
+ 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
+ B9/khTZ5N2qnAAAAAElFTkSuQmCC
- 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
+ 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
- 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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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
+ 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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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
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
+ JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsSAAALEgHS3X78AAACkElE
+ QVQ4T52SWUjUURSHfektIgg3MhtTJ519bFrIlzJKTIkkwxetILBo0RYmS0xNzUzTKctBzVxGTWcmTMON
+ CPXNpxaiksiSRnNrFFtQm//AF/OfsNQi6uF7+d1zvnPv4XoAHn9DVi5btqFTt2dx7mJJ8DtUjapIhUmB
+ pkVzdvGZx5P2o5p79QYW02HO3+UqCM4PPhJyMwRd90ZUZhWaVm3yAoGr2D78gLmpDpEZu5kv70uw1BaR
+ ULS7PfBSIKKgR4fu4SYUtQrU99Qp8wKrqZh5aosw11yjqbqQxjsFeMZ44hPvQ8D5AORVcrTtWkKNoSjv
+ KjHk6hNEQVNNId+muxcw97kNYdKKMF6D80Mpfkl+qJvVqCwq7vfG8ak3kbRThxEFDZX57qYfT5idtuKw
+ mxBGbuF8n49zIB2JXoKmVYNrkbauSJ6W+/4U1FXkzQscUy04PtYjjBpx2q7iHMhg5kUK0gIpYZ1h4tVH
+ zRvpMyzn+OF4t6C6NEcUuCYL9gaE0TKctkKEt5k4Xp4mw7QNWbkMaZGUMwYFQ/UKegqWk7Avyi2ovJHF
+ 3GQngt2MMHYb55AB4W0WjpdnudawE/9kf4Jyg9iSJ6XfpMFWFURb9kqid4S7BWXFF5mZaEEYr8Y5XILw
+ LhvHKz3RejlesV547/fm4AUpYxYdI3UyBoxrMKd7Eq5TugWlBWnMjFnEbQuDuTj6zzH77Bhf+w4w3b0X
+ e1sE49ZNjNTLGayQ0H/di+rU1SjXS9yCkiupTA+amHh8CltXFG+aN/ParOR5rZS+sgAeFUtozvHHmukr
+ TnY1G8+sReLn6RYYcvVcTjtB6slDJCXGEhcTwfatWjSyQNat8cZn1Yo/Igp+/df/w5LgX/kOMr6wi9te
+ 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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
+ 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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/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/Resources/toolbox.png b/PROMS/VEPROMS User Interface/Resources/toolbox.png
new file mode 100644
index 00000000..f645121b
Binary files /dev/null and b/PROMS/VEPROMS User Interface/Resources/toolbox.png differ
diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj
index 593c1005..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
@@ -111,10 +112,6 @@
False
..\..\..\..\3rdPartyLibraries\DotNetBar\DotNetBar4.6Build\DevComponents.DotNetBar2.dll
-
- False
- ..\..\..\..\3rdPartyLibraries\Ionic\Ionic.Zip.dll
-
..\..\..\..\3rdPartyLibraries\RtfConverter\bin\Debug\Itenso.Rtf.Interpreter.dll
@@ -125,6 +122,10 @@
False
..\..\..\..\3rdPartyLibraries\Log4Net\log4net.dll
+
+
+ True
+
@@ -133,6 +134,8 @@
+
+
@@ -226,6 +229,12 @@
dlgPickROFolder.cs
+
+ Form
+
+
+ dlgPrintAllApprovedProcedures.cs
+
Form
@@ -244,12 +253,6 @@
dlgTransitionReport.cs
-
- Form
-
-
- dlgUCFDetail.cs
-
Form
@@ -268,6 +271,12 @@
frmBatchRefreshCheckedOut.cs
+
+ Form
+
+
+ frmGenTools.cs
+
Form
@@ -298,12 +307,6 @@
frmSI.cs
-
- Form
-
-
- frmUCF.cs
-
Form
@@ -367,6 +370,9 @@
dlgImpHowToHandleROs.cs
+
+ dlgPrintAllApprovedProcedures.cs
+
DlgPrintProcedure.cs
Designer
@@ -374,12 +380,12 @@
dlgSetChangeBarStartDate.cs
-
- dlgUCFDetail.cs
-
frmAnnotationsCleanup.cs
+
+ frmGenTools.cs
+
frmPDFStatusForm.cs
Designer
@@ -395,9 +401,6 @@
frmSI.cs
-
- frmUCF.cs
-
Designer
frmVEPROMS.cs
@@ -505,6 +508,7 @@
PreserveNewest
+
PreserveNewest
@@ -595,8 +599,6 @@
-
-
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..399ea4f6 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;
@@ -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;
@@ -188,14 +185,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 +207,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;
@@ -724,28 +720,9 @@ namespace VEPROMS
ImportProcedureNew(xd);
isImported = true;
}
- 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()
@@ -892,84 +869,95 @@ 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;
+ MyFolder.RefreshChildFolders();
+ // 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)
{
@@ -1014,8 +1002,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)
@@ -1057,7 +1043,6 @@ namespace VEPROMS
{
existingFC.Add(exFI.Config);
importedFC.Add(config);
- conflictingUCFdata = true;
fname.Add(name);
}
else
@@ -1066,22 +1051,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 +1102,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;
@@ -1254,85 +1133,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 +1223,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 +1253,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 +1474,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 +1722,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
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/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/Volian.Controls.Library/dlgUCFImportOptions.resx b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx
similarity index 76%
rename from PROMS/Volian.Controls.Library/dlgUCFImportOptions.resx
rename to PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx
index 2e5faf21..6d737aca 100644
--- a/PROMS/Volian.Controls.Library/dlgUCFImportOptions.resx
+++ b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx
@@ -112,15 +112,30 @@
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
-
+
+
+
+ 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
-
- True
-
\ No newline at end of file
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/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..dc19aa61 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,41 +969,6 @@ 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;
int myFixesCount = 0;
int myConvertCount = 0;
@@ -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;
+ private E_AdminToolType AdminToolType = E_AdminToolType.Repair;
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/frmFolderProperties.cs b/PROMS/VEPROMS User Interface/frmFolderProperties.cs
index e0d3a6e7..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;
@@ -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/frmGenTools.cs b/PROMS/VEPROMS User Interface/frmGenTools.cs
new file mode 100644
index 00000000..4d0decc8
--- /dev/null
+++ b/PROMS/VEPROMS User Interface/frmGenTools.cs
@@ -0,0 +1,572 @@
+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;
+using System.Data;
+using xls = Microsoft.Office.Interop.Excel;
+
+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();
+ }
+
+ //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)
+ {
+ this.Close();
+ }
+
+ #region On/Off Swiches
+
+ // C2017-030 new Tools user interface
+ private enum E_GenToolType : int
+ {
+ Check = 0,
+ Users = 3,
+ Reports = 5
+ };
+ 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:
+ case E_GenToolType.Reports:
+ 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-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)
+ {
+ //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..995bf751
--- /dev/null
+++ b/PROMS/VEPROMS User Interface/frmGenTools.designer.cs
@@ -0,0 +1,895 @@
+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.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();
+ 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.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();
+ 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();
+ this.btnUAC = new DevComponents.DotNetBar.ButtonX();
+ ((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.sideNavPanel6.SuspendLayout();
+ this.sideNavPanel5.SuspendLayout();
+ this.sideNavPanel1.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.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;
+ this.sideNav1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
+ this.sideNavItem1,
+ this.separator1,
+ this.sideNavItmCheck,
+ this.sideNavItmUsers,
+ this.sideNavItmReports,
+ 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";
+ //
+ // 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);
+ 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;
+ 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);
+ //
+ // 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.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);
+ //
+ // 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";
+ 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";
+ //
+ // 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);
+ 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.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;
+ 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.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 sideNavItmReports;
+ 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;
+ private DevComponents.DotNetBar.ButtonX btnUAC;
+ }
+}
+
+
diff --git a/PROMS/VEPROMS User Interface/frmUCF.resx b/PROMS/VEPROMS User Interface/frmGenTools.resx
similarity index 50%
rename from PROMS/VEPROMS User Interface/frmUCF.resx
rename to PROMS/VEPROMS User Interface/frmGenTools.resx
index 7080a7d1..96245292 100644
--- a/PROMS/VEPROMS User Interface/frmUCF.resx
+++ b/PROMS/VEPROMS User Interface/frmGenTools.resx
@@ -1,4 +1,4 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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/Volian.Base.Library/frmRtfEdit.resx b/PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.resx
similarity index 57%
rename from PROMS/Volian.Base.Library/frmRtfEdit.resx
rename to PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.resx
index 7080a7d1..7edd5b3c 100644
--- a/PROMS/Volian.Base.Library/frmRtfEdit.resx
+++ b/PROMS/VEPROMS/VlnStatus64/StatusMessageFrm.resx
@@ -1,9 +1,9 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
@@ -109,12 +89,51 @@
text/microsoft-resx
- 2.0
+ 1.3
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.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=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/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 99e1e025..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
@@ -101,17 +103,10 @@
FrmPopupStatusMessage.cs
-
- Form
-
-
- frmRtfEdit.cs
-
-
@@ -126,9 +121,6 @@
FrmPopupStatusMessage.cs
-
- frmRtfEdit.cs
-