Compare commits

..
Author SHA1 Message Date
mschill 95115f445d B2026-078 Hide Delete and Open Button for Library Documents with any occurrences. 2026-10-15 14:25:49 -04:00
jjenko 93f82b2745 Merge pull request 'C2026-058 Check all Tables for if Acc Page Id Prefix is Used More than Once' (#826) from C2026-058 into Development
good for testing phase
2026-10-15 13:08:24 -04:00
jjenko 3bf928a035 Merge pull request 'B2026-077 – Update Format inheritance to use index id instead of position/order.' (#819) from B2026-077 into Development
good for testing
2026-10-15 13:07:08 -04:00
mschill 82f11fa696 C2026-058 Check all Tables for if Acc Page Id Prefix is Used More than Once 2026-10-15 11:27:45 -04:00
mschill 9c9e12ff57 Merge branch 'Development' into B2026-077 2026-10-14 09:25:05 -04:00
jjenko ae9fb0eb67 Merge pull request 'F2026-025 Added a sub-step tab definition for a fifth level sequential sub-step in the Bryon-Braidwood EOP format' (#825) from F2026-025_BraidwoodByron_StepLevelTab into Development
Format only change - approve by customer
Good for testing
2026-10-14 09:11:33 -04:00
jjenko 1c837accd7 F2026-025 Added a sub-step tab definition for a fifth level sequential sub-step in the Bryon-Braidwood EOP format 2026-10-14 09:11:11 -04:00
mschill b188a3af99 Merge branch 'B2026-077' of https://git.volian.com/Volian/SourceCode into B2026-077 2026-10-07 09:13:35 -04:00
mschill a8033f3e51 Updating to latest Dev 2026-10-07 09:13:19 -04:00
jjenko d69ab535d5 Merge pull request 'C2026 043 tech debt v1' (#817) from C2026-043-Tech-Debt_v1 into Development
passed testing with separate test executable.
no additional testing for this pull request needed.
2026-10-07 08:43:27 -04:00
mschill 49a3e647a2 Merge branch 'Development' into C2026-043-Tech-Debt_v1 2026-10-01 10:12:01 -04:00
mschill 2e3ef1e86f Merge branch 'Development' into B2026-077 2026-10-01 10:11:32 -04:00
jjenko 95a3039c96 Merge pull request 'C2026-060 Export with slash in folder name' (#824) from C2026-060 into Development
good for testing
2026-10-01 10:10:29 -04:00
jjenko ae2f765119 Merge pull request 'B2026-084 Spell Check crashing' (#823) from B2026-084 into Development
good for testing
2026-10-01 10:09:38 -04:00
mschill 9e85b43f64 Sleep when closing tabs 2026-10-01 09:00:59 -04:00
mschill 14fd0d34e2 C2026-060 Export with slash in folder name 2026-10-01 08:00:13 -04:00
mschill d045205d16 B2026-084 Spell Check crashing 2026-10-01 07:32:44 -04:00
mschill b2741d341c Bring up to date with Dev -- clearing merge conflicts 2026-09-30 10:23:57 -04:00
mschill e0614051f8 Merge branch 'Development' into B2026-077 2026-09-30 10:08:22 -04:00
mschill abe0444275 Merge pull request 'F2026-023 Code fix to so that single Notes do not get a bullet and format tweaks in the EOP and SAMG formats' (#822) from F2026-023_Farley_Arial_Tweaks into Development
Looks Good. Ready for QA.
2026-09-30 10:08:11 -04:00
jjenko 576b967f57 F2026-023 Code fix to so that single Notes do not get a bullet and format tweaks in the EOP and SAMG formats 2026-09-30 10:04:20 -04:00
mschill 7da1f86c86 Merge branch 'Development' into B2026-077 2026-09-30 08:21:21 -04:00
jjenko 6481e6cbba Merge pull request 'B2026-080 – Remove unicode from the Document Already Checked Out message box' (#821) from B2026-080 into Development
good for testing
2026-09-30 08:20:44 -04:00
mschill c151a9676f Merge branch 'Development' into B2026-080 2026-09-30 08:10:06 -04:00
mschill dddc464bad B2026-080 – Remove unicode from the Document Already Checked Out message box 2026-09-30 08:12:40 -04:00
jjenko b1bc954105 Merge pull request 'Remove Debug items from Source control that never should have been checked in for W2PGrid' (#820) from Clean_Debug_W2PGrid into Development
just moved un-used stuff out of project
No testing needed.
2026-09-29 09:25:20 -04:00
mschill 1ad5331ba9 Remove Debug items from Source control that never should have been checked in for W2PGrid 2026-09-29 07:51:33 -04:00
mschill f5f9975363 B2026-077 – Update Format inheritance to use index id instead of position/order. 2026-09-28 14:15:48 -04:00
mschill 8c8c876309 Remove SCLA Scoping 2026-09-23 11:04:30 -04:00
mschill 874f9241b8 Clean up in frmVEPROMS.cs --- hard coded based on RICH's PC name 2026-09-22 09:03:42 -04:00
mschill a680e8800d Add back in removed side effect code for printing grids with merged cells / checking boundaries 2026-09-15 13:30:48 -04:00
mschill 17e9a88a16 Merge branch 'Development' into C2026-043-Tech-Debt_v1 2026-09-15 13:13:13 -04:00
mschill 8df20f32ce Merge pull request 'B2026-076 - Update Base format to move new type to bottom' (#818) from B2026-076 into Development
Ready for QA
2026-09-15 11:59:46 -04:00
mschill 6ca427a7c6 B2026-076 - Update Base format to move new 2026-09-15 12:01:22 -04:00
mschill fe95afcf8f avoid Local Context 2026-09-15 08:29:29 -04:00
mschill 7c95b115e4 Check if connection state is closed before opening 2026-09-15 08:21:18 -04:00
mschill 5d4e5d9a1f Make Sure Connection is open when working with Local Context 2026-09-15 08:06:53 -04:00
mschill ac773b8ada Remove commented out code 2026-09-14 15:48:34 -04:00
mschill 42f1c1735d Merge branch 'Development' into C2026-043-Tech-Debt_v1 2026-09-14 15:31:58 -04:00
mschill 1c6f3e3e3c CSLA - R to Z 2026-09-14 15:30:10 -04:00
mschill 14a8922976 Merge pull request 'C2026-054 Text change for Open Tabs from Previous Session dialog box' (#815) from C2026-054-Text-change-for-Open-Tabs-from-Previous-Session into Development
Looks Good. Ready for QA.
2026-09-14 05:36:50 -04:00
plarsen 2f5affabbe C2026-054-Text-change-for-Open-Tabs-from-Previous-Session 2026-09-12 07:47:56 -04:00
mschill d238d6aed2 CSLA - R - Group 1 2026-09-11 16:03:51 -04:00
plarsen 44c86e5d80 C2026-054-Text-change-for-Open-Tabs-from-Previous-Session 2026-09-11 12:13:16 -04:00
mschill d9f8f6cb37 CSLA - M through P 2026-09-11 09:50:40 -04:00
plarsen d5859f2a01 C2026-054-Text-change-for-Open-Tabs-from-Previous-Session 2026-09-10 16:10:08 -04:00
mschill e41a4ea65d CSLA - Is 2026-09-10 16:02:04 -04:00
jjenko 506c826eb3 Merge pull request 'C2026 048 tool tip update' (#814) from C2026-048-Tool-Tip-Update into Development
good for testing phase
2026-09-10 14:00:18 -04:00
plarsen 96839f8379 Merge branch 'Development' into C2026-048-Tool-Tip-Update 2026-09-10 13:53:21 -04:00
plarsen f6e42d933e C2026-048-Tool-Tip-Update 2026-09-10 11:11:06 -04:00
mschill 8674b93723 Merge branch 'Development' into C2026-043-Tech-Debt_v1 2026-09-09 15:54:32 -04:00
mschill da8d25082f CSLA - G 2026-09-09 15:52:32 -04:00
mschill 28b79bf81b Merge pull request 'C2026-053' (#813) from C2026-053_restore_only_Proc_section_tabs into Development
Looks Good - Ready For QA
2026-09-09 14:54:21 -04:00
jjenko a87e23af7e C2026-053
When restoring the open procedure tabs while starting up PROMS, don’t restore any of the Word section tabs.
2026-09-09 14:51:51 -04:00
mschill f2b064f459 CSLA - E & F 2026-09-09 14:08:28 -04:00
mschill a69a2270a6 CLSA - Ds 2026-09-08 08:55:36 -04:00
mschill c21f366bb9 Bring Tech Debt up to current Development 2026-09-04 14:42:37 -04:00
mschill 8a55eb57d6 CSLA - Generated - C Items 2026-09-04 13:34:46 -04:00
mschill 1e0e3a7114 Merge pull request 'B2026-074 Fixed issue where PROMS would hang when opening multiple saved Word section tabs. Also, we now save and restore to the step location of saved procedure editor sections.' (#812) from B2026-074_restore_proc_tabs into Development
Looks good. Ready for QA.
2026-09-04 10:47:44 -04:00
jjenko 7333247b52 B2026-074 Fixed issue where PROMS would hang when opening multiple saved Word section tabs. Also, we now save and restore to the step location of saved procedure editor sections. 2026-09-04 10:44:35 -04:00
jjenko e16b3262d9 Merge pull request 'C2026-041-invisible-position-changes-as-differences' (#807) from C2026-041-invisible-position-changes-as-differences into Development
good for QA
2026-09-03 08:56:31 -04:00
mschill 222371302f CSLA - Generated - Batch - As 2026-09-03 08:05:32 -04:00
plarsen edc5bc611b C2026-041-invisible-position-changes-as-differences 2026-09-02 16:27:59 -04:00
plarsen c32121c4c4 C2026-041-invisible-position-changes-as-differences 2026-09-02 15:48:26 -04:00
plarsen 213b8d18f7 C2026-041-invisible-position-changes-as-differences 2026-09-02 14:47:09 -04:00
plarsen 8e7be9723e Merge branch 'Development' into C2026-041-invisible-position-changes-as-differences 2026-09-02 08:03:22 -04:00
plarsen 61394a8b26 Merge branch 'Development' of https://git.volian.com/Volian/SourceCode into Development 2026-09-02 08:01:43 -04:00
plarsen 1cb397f47b C2026-041-invisible-position-changes-as-differences 2026-09-02 08:01:06 -04:00
mschill dc5d547449 CSLA - Format, Minimal, VEObject 2026-09-01 08:30:06 -04:00
mschill dab65dbfb6 CSLA - Extension 2026-09-01 08:21:41 -04:00
mschill dcd2fbc294 Merge branch 'Development' into C2026-043-Tech-Debt_v1 2026-08-31 11:02:34 -04:00
jjenko 298dfaeece Merge pull request 'F2026-021 Fixed the inheritance of the new step type “Step with Section Num” to allow RNO and sub items. Removed the period between the section number and high level step number.' (#811) from F2026-021_Ginna_Appendex_Num_Step_Prefix into Development
Format only changes. Ready for testing.
2026-08-31 10:10:25 -04:00
mschill 8a33bcafe8 Merge pull request 'F2026-021 Ginna EOP/AOP Format, added a high level step type called “Step with Section Num”' (#810) from F2026-021_Ginna_Appendex_Num_Step_Prefix into Development
Looks Good. Ready for QA.
2026-08-28 14:35:58 -04:00
mschill f88f8a1c75 CSLA Config cleanup 2026-08-28 11:15:35 -04:00
mschill d0587706a2 Fix dlgAnnotationsSelect Designer in solution twice 2026-08-28 11:14:28 -04:00
mschill a567a32064 Merge branch 'Development' into C2025-043-Tech-Debt_v1 2026-08-27 14:10:03 -04:00
mschill d2883ea2eb Merge branch 'Development' into C2026-043-Tech-Debt_v1 2026-08-27 09:16:25 -04:00
mschill 90398c15ae Unfortunately iTextSharp is dependant on BouncyCastle 2026-08-26 12:06:25 -04:00
mschill 3124f64e03 Bring up to date with removed items 2026-08-26 11:58:39 -04:00
plarsen 0137ccc5b3 C2026-041-invisible-position-changes-as-differences 2026-08-26 09:42:46 -04:00
plarsen 21c4936ee8 C2026-041-invisible-position-changes-as-differences 2026-08-24 13:47:02 -04:00
plarsen df2311dbda C2026-041-invisible-position-changes-as-differences 2026-08-24 10:51:54 -04:00
mschill 0c3e4bb3e9 VEPROMS_UI / remove BouncyCastle 2026-08-21 06:11:06 -04:00
mschill 23a296df86 Bring branch up to date 2026-08-19 06:26:18 -04:00
plarsen 034aa67e31 C2026-041-invisible-position-changes-as-differences 2026-08-18 17:37:12 -04:00
plarsen f8ab3c57be C2026-041-invisible-position-changes-as-differences 2026-08-18 13:33:10 -04:00
plarsen 6376d4669b C2026-041-invisible-position-changes-as-differences 2026-08-18 13:22:29 -04:00
plarsen f9cce608d6 Merge branch 'Development' of https://git.volian.com/Volian/SourceCode into Development 2026-08-17 18:41:57 -04:00
plarsen 3d65b7c34a Development 2026-08-17 18:40:16 -04:00
mschill f2e01803bc Additional XYPlot cleanup 2026-08-11 14:24:32 -04:00
mschill 752d30ba8f Bring Up To Date with Dev 2026-08-11 09:50:41 -04:00
mschill b1427f4997 Volian.Base.Library & Baseline 2026-08-11 07:33:32 -04:00
mschill 6d7d127b63 Updates to DropDownPanel, Baseline, & Controls 2026-08-05 15:16:53 -04:00
mschill 6f0fcdded2 Bring Up to Date 2026-08-04 11:07:38 -04:00
mschill 9c97394f5e Bring Branch up to date 2026-08-03 06:27:46 -04:00
mschill e492f12602 AdjustBuildRevision, FlexMsgBx, Formats, LBWordLib, VlnStatus, RoAccessToSql, TablePicker, VG 2026-07-30 08:15:47 -04:00
mschill f67d37801a Print Library, Svg Library, Utils Library, XYPlots 2026-07-24 13:36:46 -04:00
mschill 06c3136566 Merge branch 'Development' into C2026-043-Tech-Debt_v1 2026-07-21 10:38:53 -04:00
mschill 9486b37300 C2026-043-Tech-Debt_v1 - Stash 1 2026-07-21 06:49:28 -04:00
569 changed files with 41402 additions and 93709 deletions

No files matched your search

+4 -44
View File
@@ -1,6 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Text;
using System.IO; using System.IO;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Windows.Forms; using System.Windows.Forms;
@@ -35,31 +33,7 @@ namespace AdjustBuildRevision
outline = Regex.Replace(line, @"([0-9]*)\.([0-9]*)\.([0-9]*)\.([0-9]*)""\)", DateTime.Now.ToString("2.4.yyMM.dHH") + "\")"); outline = Regex.Replace(line, @"([0-9]*)\.([0-9]*)\.([0-9]*)\.([0-9]*)""\)", DateTime.Now.ToString("2.4.yyMM.dHH") + "\")");
else else
outline = Regex.Replace(line, @"([0-9]*)\.([0-9]*)\.([0-9]*)\.([0-9]*)""\)", DateTime.Now.ToString("2.3.yyMM.dHH") + "\")"); outline = Regex.Replace(line, @"([0-9]*)\.([0-9]*)\.([0-9]*)\.([0-9]*)""\)", DateTime.Now.ToString("2.3.yyMM.dHH") + "\")");
// if (outline != line)
// {
// Console.WriteLine("Before: '{0}'", line);
// Console.WriteLine("After: '{0}'", outline);
// lines[i] = outline;
// changed = true;
// }
// else
// {
// Console.WriteLine("No change: '{0}'", line);
// }
// }
//}
//if (changed)
//{
// if (!fi.IsReadOnly) fi.IsReadOnly = false;
// StreamWriter sw = fi.CreateText();
// foreach (string line in lines)
// sw.WriteLine(line);
// sw.Close();
// string line = lines[i];
// string outline = line;
// if (line.Contains("AssemblyVersion") || line.Contains("AssemblyFileVersion"))
// {
//outline = Regex.Replace(line, @"([0-9]*)\.([0-9]*)\.([0-9]*)\.([0-9]*)""\)", DateTime.Now.ToString("1.1.yyMM.dHH") + "\")");
if (outline != line) if (outline != line)
{ {
Console.WriteLine("Before: '{0}'", line); Console.WriteLine("Before: '{0}'", line);
@@ -84,7 +58,7 @@ namespace AdjustBuildRevision
} }
else else
{ {
MessageBox.Show("File " + fi.FullName + " does not exist"); MessageBox.Show($"File {fi.FullName} does not exist");
} }
} }
catch (Exception ex) catch (Exception ex)
@@ -93,10 +67,6 @@ namespace AdjustBuildRevision
} }
} }
//private static DateTime GetLatestDateTime(string path)
//{
// return GetLatestDateTime(new DirectoryInfo(path));
//}
private static DateTime GetLatestDateTime(DirectoryInfo di, DateTime dtCheck) private static DateTime GetLatestDateTime(DirectoryInfo di, DateTime dtCheck)
{ {
DateTime dtMax = dtCheck; DateTime dtMax = dtCheck;
@@ -104,24 +74,14 @@ namespace AdjustBuildRevision
foreach(FileInfo myFile in myFiles) foreach(FileInfo myFile in myFiles)
{ {
DateTime dt = myFile.LastWriteTime; DateTime dt = myFile.LastWriteTime;
//if (dt > dtCheck) if(dtMax < dt) dtMax = dt;
//{
//Console.WriteLine("\"File\"\t\"{0}\"\t\"{1}\"\t{2}\t{3}",myFile.FullName,dt.ToString("1.1.yyMM.dHH"),dt,dtCheck);
if(dtMax < dt) dtMax = dt;
//}
} }
DirectoryInfo[] myFolders = di.GetDirectories(); DirectoryInfo[] myFolders = di.GetDirectories();
foreach (DirectoryInfo diChild in myFolders) foreach (DirectoryInfo diChild in myFolders)
{ {
DateTime dtChild = GetLatestDateTime(diChild,dtCheck); DateTime dtChild = GetLatestDateTime(diChild,dtCheck);
//if (dtChild > dtCheck) if(dtChild > dtMax) dtMax = dtChild;
//{
//Console.WriteLine("\"SubFolder\"\t\"{0}\"\t\"{1}\"\t{2}\t{3}", diChild.FullName, dtChild.ToString("1.1.yyMM.dHH"),dtChild,dtCheck);
if(dtChild > dtMax) dtMax = dtChild;
//}
} }
//if(dtMax > dtCheck)
// Console.WriteLine("\"Folder\"\t\"{0}\"\t\"{1}\"", di.FullName, dtMax.ToString("1.1.yyMM.dHH"));
return dtMax; return dtMax;
} }
} }
+1
View File
@@ -67,6 +67,7 @@
<Compile Include="frmSettings.Designer.cs"> <Compile Include="frmSettings.Designer.cs">
<DependentUpon>frmSettings.cs</DependentUpon> <DependentUpon>frmSettings.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="frmBaseline.resx"> <EmbeddedResource Include="frmBaseline.resx">
+8
View File
@@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Not modifying Naming Styles")]
-3
View File
@@ -1,7 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
namespace Baseline namespace Baseline
+14
View File
@@ -30,6 +30,7 @@
{ {
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
this.panel1 = new System.Windows.Forms.Panel(); this.panel1 = new System.Windows.Forms.Panel();
this.cbUseTruncatedData = new System.Windows.Forms.CheckBox();
this.btnUC = new System.Windows.Forms.Button(); this.btnUC = new System.Windows.Forms.Button();
this.cbCaseSensitive = new System.Windows.Forms.CheckBox(); this.cbCaseSensitive = new System.Windows.Forms.CheckBox();
this.cbFile2 = new System.Windows.Forms.ComboBox(); this.cbFile2 = new System.Windows.Forms.ComboBox();
@@ -72,6 +73,7 @@
// //
this.panel1.Controls.Add(this.btnUC); this.panel1.Controls.Add(this.btnUC);
this.panel1.Controls.Add(this.cbCaseSensitive); this.panel1.Controls.Add(this.cbCaseSensitive);
this.panel1.Controls.Add(this.cbUseTruncatedData);
this.panel1.Controls.Add(this.cbFile2); this.panel1.Controls.Add(this.cbFile2);
this.panel1.Controls.Add(this.cbFile1); this.panel1.Controls.Add(this.cbFile1);
this.panel1.Controls.Add(this.tbSearch); this.panel1.Controls.Add(this.tbSearch);
@@ -87,6 +89,17 @@
this.panel1.Size = new System.Drawing.Size(707, 80); this.panel1.Size = new System.Drawing.Size(707, 80);
this.panel1.TabIndex = 0; this.panel1.TabIndex = 0;
// //
// cbUseTruncatedData // C2026-041
//
this.cbUseTruncatedData.AutoSize = true;
this.cbUseTruncatedData.Location = new System.Drawing.Point(456, 56);
this.cbUseTruncatedData.Name = "cbUseTruncatedData";
this.cbUseTruncatedData.Size = new System.Drawing.Size(123, 17);
this.cbUseTruncatedData.TabIndex = 11;
this.cbUseTruncatedData.Text = "Use Truncated Data";
this.tt.SetToolTip(this.cbUseTruncatedData, "Set the Search to be Case Sensitive\r\nUppercase and Lowercase will not match");
this.cbUseTruncatedData.UseVisualStyleBackColor = true;
//
// btnUC // btnUC
// //
this.btnUC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnUC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
@@ -381,6 +394,7 @@
private System.Windows.Forms.ComboBox cbFile2; private System.Windows.Forms.ComboBox cbFile2;
private System.Windows.Forms.ComboBox cbFile1; private System.Windows.Forms.ComboBox cbFile1;
private System.Windows.Forms.CheckBox cbCaseSensitive; private System.Windows.Forms.CheckBox cbCaseSensitive;
private System.Windows.Forms.CheckBox cbUseTruncatedData;
private System.Windows.Forms.Button btnUC; private System.Windows.Forms.Button btnUC;
private System.Windows.Forms.ToolTip tt; private System.Windows.Forms.ToolTip tt;
} }
+174 -271
View File
@@ -43,18 +43,15 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections.Specialized;
using System.IO; using System.IO;
using System.Text.RegularExpressions; using System.Linq;
using System.Xml.Serialization;
using System.Xml.Schema;
using System.Xml;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace Baseline namespace Baseline
{ {
@@ -70,15 +67,10 @@ namespace Baseline
StartsWith, StartsWith,
EndsWith, EndsWith,
Regex Regex
} }
public partial class frmBaseline : Form public partial class frmBaseline : Form
{ {
private IgnoreLines _MyIgnore = new IgnoreLines(); public IgnoreLines MyIgnore { get; set; } = new IgnoreLines();
public IgnoreLines MyIgnore
{
get { return _MyIgnore; }
set { _MyIgnore = value; }
}
private LastWas myLast = LastWas.Search; private LastWas myLast = LastWas.Search;
private Settings MySettings; private Settings MySettings;
public string MyStatus public string MyStatus
@@ -149,10 +141,12 @@ namespace Baseline
this.Location = Properties.Settings.Default.Location; this.Location = Properties.Settings.Default.Location;
this.Size = Properties.Settings.Default.Size; this.Size = Properties.Settings.Default.Size;
this.WindowState = Properties.Settings.Default.WidnowState; this.WindowState = Properties.Settings.Default.WidnowState;
if(Properties.Settings.Default.Ignore != null && Properties.Settings.Default.Ignore != "") if (Properties.Settings.Default.Ignore != null && Properties.Settings.Default.Ignore != "")
MyIgnore = IgnoreLines.Get(Properties.Settings.Default.Ignore); MyIgnore = IgnoreLines.Get(Properties.Settings.Default.Ignore);
MySettings= new Settings(); MySettings = new Settings
MySettings.IgnoreLines = new BindingList<string>(); {
IgnoreLines = new BindingList<string>()
};
splitContainer1.SplitterDistance = Properties.Settings.Default.Split1; splitContainer1.SplitterDistance = Properties.Settings.Default.Split1;
splitContainer2.SplitterDistance = Properties.Settings.Default.Split2; splitContainer2.SplitterDistance = Properties.Settings.Default.Split2;
splitContainer3.SplitterDistance = Properties.Settings.Default.Split3; splitContainer3.SplitterDistance = Properties.Settings.Default.Split3;
@@ -224,7 +218,7 @@ namespace Baseline
lbResults2.Items.Clear(); lbResults2.Items.Clear();
MyStatus = "Searching..."; MyStatus = "Searching...";
// Perform DebugPagination Comparison // Perform DebugPagination Comparison
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugPagination.txt",MyIgnore); FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugPagination.txt",MyIgnore, cbUseTruncatedData.Checked);
lbDifferent.DataSource = fnd; lbDifferent.DataSource = fnd;
lbDifferent.DisplayMember = "File1"; lbDifferent.DisplayMember = "File1";
MyStatus = string.Format("{0} Differences Found", fnd.Count); MyStatus = string.Format("{0} Differences Found", fnd.Count);
@@ -240,28 +234,27 @@ namespace Baseline
lbProcedures.Items.Clear(); lbProcedures.Items.Clear();
lbResults1.Items.Clear(); lbResults1.Items.Clear();
lbResults2.Items.Clear(); lbResults2.Items.Clear();
FindFile ff = lbDifferent.SelectedItem as FindFile; if (lbDifferent.SelectedItem is FindFile ff)
if (ff != null) {
{ // Fill Procedure or Result ListBoxes
// Fill Procedure or Result ListBoxes switch (myLast)
switch (myLast) {
{ case LastWas.Pagination:
case LastWas.Pagination: CompareContent(ff.File1, ff.File2);// Compare DebugPagination
CompareContent(ff.File1, ff.File2);// Compare DebugPagination break;
break; case LastWas.Baseline:
case LastWas.Baseline: CompareContent3(ff.File1, ff.File2);// Compare DebugMeta
CompareContent3(ff.File1, ff.File2);// Compare DebugMeta break;
break; case LastWas.Search:
case LastWas.Search: ShowSearchResults(ff.File1, ff.File2);// Perform search on DebugMeta
ShowSearchResults(ff.File1, ff.File2);// Perform search on DebugMeta break;
break; default:
default: CompareContent(ff.File1, ff.File2);//Default DebugPagination
CompareContent(ff.File1, ff.File2);//Default DebugPagination break;
break; }
} //CompareOneFile(ff.File1, ff.File2);
//CompareOneFile(ff.File1, ff.File2); }
} }
}
Procedures MyProcs1; Procedures MyProcs1;
Procedures MyProcs2; Procedures MyProcs2;
/// <summary> /// <summary>
@@ -361,13 +354,6 @@ namespace Baseline
lines1 = list1.AsEnumerable<string>();// Convert back to Enumerable to work with LINQ lines1 = list1.AsEnumerable<string>();// Convert back to Enumerable to work with LINQ
return lines1; return lines1;
} }
private string GetProcNum(string line)
{
string retval = line.Substring(3, line.IndexOf(" | ") - 3);
if (retval.Contains("_"))
retval = retval.Substring(0, retval.IndexOf("_") - 1);
return retval;
}
/// <summary> /// <summary>
/// Include lines for Procedure or Page or Search is true /// Include lines for Procedure or Page or Search is true
/// Account for Case Insensitive CheckBox /// Account for Case Insensitive CheckBox
@@ -450,8 +436,8 @@ namespace Baseline
private void lbResults1_SelectedIndexChanged(object sender, EventArgs e) private void lbResults1_SelectedIndexChanged(object sender, EventArgs e)
{ {
string line=null; string line=null;
if (lbResults1.SelectedItem is string) if (lbResults1.SelectedItem is string v)
line = (string)lbResults1.SelectedItem; line = v;
Line myLine = lbResults1.SelectedItem as Line; Line myLine = lbResults1.SelectedItem as Line;
switch (myLast) switch (myLast)
{ {
@@ -472,8 +458,8 @@ namespace Baseline
{ {
string line=null; string line=null;
if(lbResults2.SelectedItem is string) if(lbResults2.SelectedItem is string v)
line = (string)lbResults2.SelectedItem; line = v;
Line myLine = lbResults2.SelectedItem as Line; Line myLine = lbResults2.SelectedItem as Line;
switch (myLast) switch (myLast)
@@ -515,16 +501,10 @@ namespace Baseline
/// <returns></returns> /// <returns></returns>
private string ParseOutProcedureNumberFromLine(string txt) private string ParseOutProcedureNumberFromLine(string txt)
{ {
// old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber // if the item is to a high levels step or sub-step the short path as "..S" for each part of the step
// Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work // so look for the last occurence of ".." which will be the end of the section information
// 1.SBGEN.SC. ==> short path of attachment section "C" int lidx = txt.LastIndexOf("..");
// 1.SBGEN.SC..S1. ==> short path of Step 1 in attachment section "C" if (lidx > 0)
string rtnstr = null;
int lidx = -1;
// if the item is to a high levels step or sub-step the short path as "..S" for each part of the step
// so look for the last occurence of ".." which will be the end of the section information
lidx = txt.LastIndexOf("..");
if (lidx > 0)
{ {
lidx = txt.LastIndexOf(".S", lidx); // this will position us to the end of the procedure number lidx = txt.LastIndexOf(".S", lidx); // this will position us to the end of the procedure number
} }
@@ -532,9 +512,13 @@ namespace Baseline
{ {
lidx = txt.LastIndexOf(".S"); // this will position us to the end of the procedure number if there was no step information lidx = txt.LastIndexOf(".S"); // this will position us to the end of the procedure number if there was no step information
} }
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file. // old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber
rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_"); // Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work
return rtnstr; // 1.SBGEN.SC. ==> short path of attachment section "C"
// 1.SBGEN.SC..S1. ==> short path of Step 1 in attachment section "C"
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
string rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
return rtnstr;
} }
string exePath; string exePath;
@@ -616,10 +600,10 @@ namespace Baseline
progname = @"C:\Program Files (x86)\IDM Computer Solutions\UltraCompare\UC.exe"; progname = @"C:\Program Files (x86)\IDM Computer Solutions\UltraCompare\UC.exe";
System.Diagnostics.ProcessStartInfo psi = System.Diagnostics.ProcessStartInfo psi =
new System.Diagnostics.ProcessStartInfo(progname, string.Format(@" -t ""{0}"" ""{1}""", compareFile, baseFile)); new System.Diagnostics.ProcessStartInfo(progname, string.Format(@" -t ""{0}"" ""{1}""", compareFile, baseFile));
System.Diagnostics.Process prc = System.Diagnostics.Process.Start(psi); _ = System.Diagnostics.Process.Start(psi);
} }
private ProcessLocationQueue myQueue= new ProcessLocationQueue(); private readonly ProcessLocationQueue myQueue= new ProcessLocationQueue();
private Timer queueTimer = null; private Timer queueTimer = null;
/// <summary> /// <summary>
/// Move a Process to a specific screen location - This is done with a timer so /// Move a Process to a specific screen location - This is done with a timer so
@@ -632,9 +616,11 @@ namespace Baseline
{ {
if (queueTimer == null) if (queueTimer == null)
{ {
queueTimer = new Timer(); queueTimer = new Timer
queueTimer.Enabled = false; {
queueTimer.Tick += queueTimer_Tick; Enabled = false
};
queueTimer.Tick += queueTimer_Tick;
queueTimer.Interval = 1000; queueTimer.Interval = 1000;
} }
myQueue.Add(proc, x, y); myQueue.Add(proc, x, y);
@@ -669,8 +655,8 @@ namespace Baseline
string procPatern = string.Format("*{0}*.pdf", proc == string.Empty ? "noProcNumber" : proc); string procPatern = string.Format("*{0}*.pdf", proc == string.Empty ? "noProcNumber" : proc);
int pagenum = myLine.MyPage.Number; int pagenum = myLine.MyPage.Number;
FindFile ff = lbDifferent.SelectedItem as FindFile; FindFile ff = lbDifferent.SelectedItem as FindFile;
string PDFfileName = null; string PDFfileName;
if (list == 1) if (list == 1)
{ {
FileInfo fi1 = new FileInfo(ff.File1); FileInfo fi1 = new FileInfo(ff.File1);
PDFfileName = GetPFDFileAndPath(fi1, procPatern); PDFfileName = GetPFDFileAndPath(fi1, procPatern);
@@ -701,11 +687,13 @@ namespace Baseline
return; return;
} }
} }
// open the PDF and jump to the page number // open the PDF and jump to the page number
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A \"page={0}\" \"{1}\" ", pagenum,PDFfileName)); System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A \"page={0}\" \"{1}\" ", pagenum, PDFfileName))
psi1.UseShellExecute = false; {
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1); UseShellExecute = false
} };
_ = System.Diagnostics.Process.Start(psi1);
}
/// <summary> /// <summary>
/// Perform Debug Meta file comparison for all of the folders within the automated testing folders /// Perform Debug Meta file comparison for all of the folders within the automated testing folders
/// </summary> /// </summary>
@@ -720,8 +708,9 @@ namespace Baseline
lbResults1.Items.Clear(); lbResults1.Items.Clear();
lbResults2.Items.Clear(); lbResults2.Items.Clear();
MyStatus = "Searching..."; MyStatus = "Searching...";
// Perform code to find DebugMeta files with diffences
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugMeta.txt",MyIgnore); FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugMeta.txt", MyIgnore, cbUseTruncatedData.Checked);
lbDifferent.DataSource = fnd; lbDifferent.DataSource = fnd;
lbDifferent.DisplayMember = "File1"; lbDifferent.DisplayMember = "File1";
MyStatus = string.Format("{0} Differences Found", fnd.Count); MyStatus = string.Format("{0} Differences Found", fnd.Count);
@@ -744,7 +733,7 @@ namespace Baseline
lbResults2.Items.Clear(); lbResults2.Items.Clear();
MyStatus = "Searching..."; MyStatus = "Searching...";
//Perform Search //Perform Search
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugMeta.txt", tbSearch.Text, SearchType.Contains, cbCaseSensitive.Checked); FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugMeta.txt", tbSearch.Text, SearchType.Contains, cbCaseSensitive.Checked, cbUseTruncatedData.Checked);
lbDifferent.DataSource = fnd; lbDifferent.DataSource = fnd;
lbDifferent.DisplayMember = "File1"; lbDifferent.DisplayMember = "File1";
MyStatus = string.Format("{0} Differences Found", fnd.Count); MyStatus = string.Format("{0} Differences Found", fnd.Count);
@@ -785,11 +774,10 @@ namespace Baseline
} }
private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e) private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e)
{ {
//Initialize Results List Box //Initialize Results List Box
Procedure myProc = lbProcedures.SelectedItem as Procedure; if (!(lbProcedures.SelectedItem is Procedure myProc)) return; // clicked on the white space (blank line) in the list of different procedures
if (myProc == null) return; // clicked on the white space (blank line) in the list of different procedures //TODO: May need to consider if there are duplicate procedure numers and titles
//TODO: May need to consider if there are duplicate procedure numers and titles Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
// Build the results ListBox for the left window // Build the results ListBox for the left window
lbResults1.Items.Clear(); lbResults1.Items.Clear();
if (myProc1 != null) if (myProc1 != null)
@@ -827,6 +815,7 @@ namespace Baseline
CompareOneFile(ff.File1, ff.File2); CompareOneFile(ff.File1, ff.File2);
} }
} }
} }
public enum SearchType public enum SearchType
{ {
@@ -836,28 +825,13 @@ namespace Baseline
}; };
public class Settings public class Settings
{ {
private BindingList<string> _IgnoreLines; public BindingList<string> IgnoreLines { get; set; }
public BindingList<string> IgnoreLines }
{
get { return _IgnoreLines; }
set { _IgnoreLines = value; }
}
}
public partial class FindFile public partial class FindFile
{ {
private string _File1; public string File1 { get; set; }
public string File1 public string File2 { get; set; }
{ public FindFile(string file1, string file2)
get { return _File1; }
set { _File1 = value; }
}
private string _File2;
public string File2
{
get { return _File2; }
set { _File2 = value; }
}
public FindFile(string file1, string file2)
{ {
File1 = file1; File1 = file1;
File2 = file2; File2 = file2;
@@ -865,24 +839,23 @@ namespace Baseline
} }
public partial class FindFiles : List<FindFile> public partial class FindFiles : List<FindFile>
{ {
private string _FileName; private readonly string _FileName;
public string FileName
{ public string FileName => _FileName;
get { return _FileName; }
} /// <summary>
/// <summary> /// Build list of DocVersion Folders with differences
/// Build list of DocVersion Folders with differences /// </summary>
/// </summary> /// <param name="path1">Base path</param>
/// <param name="path1">Base path</param> /// <param name="path2">Compare path</param>
/// <param name="path2">Compare path</param> /// <param name="fileName">filename</param>
/// <param name="fileName">filename</param> /// <param name="myIgnore">Ignore list</param>
/// <param name="myIgnore">Ignore list</param> public FindFiles(string path1, string path2, string fileName,IgnoreLines myIgnore, bool TruncatedDataFg)
public FindFiles(string path1, string path2, string fileName,IgnoreLines myIgnore)
{ {
DirectoryInfo di1 = new DirectoryInfo(path1); DirectoryInfo di1 = new DirectoryInfo(path1);
DirectoryInfo di2 = new DirectoryInfo(path2); DirectoryInfo di2 = new DirectoryInfo(path2);
_FileName = fileName; _FileName = fileName;
FillByCompare(di1, di2, fileName, myIgnore); FillByCompare(di1, di2, fileName, myIgnore, TruncatedDataFg);
} }
/// <summary> /// <summary>
/// Fill for a search /// Fill for a search
@@ -893,12 +866,12 @@ namespace Baseline
/// <param name="searchText"></param> /// <param name="searchText"></param>
/// <param name="searchType"></param> /// <param name="searchType"></param>
/// <param name="caseSensitive"></param> /// <param name="caseSensitive"></param>
public FindFiles(string path1, string path2, string fileName, string searchText, SearchType searchType, bool caseSensitive) public FindFiles(string path1, string path2, string fileName, string searchText, SearchType searchType, bool caseSensitive, bool useTruncatedData)
{ {
DirectoryInfo di1 = new DirectoryInfo(path1); DirectoryInfo di1 = new DirectoryInfo(path1);
DirectoryInfo di2 = new DirectoryInfo(path2); DirectoryInfo di2 = new DirectoryInfo(path2);
_FileName = fileName; _FileName = fileName;
FillByCompare(di1, di2, fileName,searchText,searchType, caseSensitive); FillByCompare(di1, di2, fileName,searchText,searchType, caseSensitive, useTruncatedData);
} }
/// <summary> /// <summary>
/// Fill results by search /// Fill results by search
@@ -909,13 +882,13 @@ namespace Baseline
/// <param name="searchText"></param> /// <param name="searchText"></param>
/// <param name="searchType"></param> /// <param name="searchType"></param>
/// <param name="caseSensitive"></param> /// <param name="caseSensitive"></param>
private void FillByCompare(DirectoryInfo di1, DirectoryInfo di2, string fileName, string searchText, SearchType searchType, bool caseSensitive) private void FillByCompare(DirectoryInfo di1, DirectoryInfo di2, string fileName, string searchText, SearchType searchType, bool caseSensitive, bool UseTruncatedData)
{ {
foreach (DirectoryInfo diChild1 in di1.GetDirectories()) foreach (DirectoryInfo diChild1 in di1.GetDirectories())
{ {
DirectoryInfo diChild2 = new DirectoryInfo(di2.FullName + "\\" + diChild1.Name); DirectoryInfo diChild2 = new DirectoryInfo(di2.FullName + "\\" + diChild1.Name);
if (diChild2.Exists) if (diChild2.Exists)
FillByCompare(diChild1, diChild2, fileName,searchText,searchType,caseSensitive); FillByCompare(diChild1, diChild2, fileName,searchText,searchType,caseSensitive, UseTruncatedData);
} }
foreach (FileInfo fiChild1 in di1.GetFiles(fileName)) foreach (FileInfo fiChild1 in di1.GetFiles(fileName))
{ {
@@ -989,27 +962,49 @@ namespace Baseline
} }
return false; return false;
} }
private void FillByCompare(DirectoryInfo di1, DirectoryInfo di2, string fileName, IgnoreLines myIgnore) private void FillByCompare(DirectoryInfo di1, DirectoryInfo di2, string fileName, IgnoreLines myIgnore, bool isTruncatedChecked = false)
{ {
foreach (DirectoryInfo diChild1 in di1.GetDirectories()) foreach (DirectoryInfo diChild1 in di1.GetDirectories())
{ {
DirectoryInfo diChild2 = new DirectoryInfo(di2.FullName + "\\" + diChild1.Name); DirectoryInfo diChild2 = new DirectoryInfo(Path.Combine(di2.FullName, diChild1.Name));
if (diChild2.Exists) if (diChild2.Exists)
FillByCompare(diChild1, diChild2, fileName,myIgnore);// Recursively work on Sub-Folders FillByCompare(diChild1, diChild2, fileName,myIgnore, isTruncatedChecked);// Recursively work on Sub-Folders
} }
foreach (FileInfo fiChild1 in di1.GetFiles(fileName)) foreach (FileInfo fiChild1 in di1.GetFiles(fileName))
{ {
FileInfo fiChild2 = new FileInfo(di2.FullName + "\\" + fiChild1.Name); FileInfo fiChild2 = new FileInfo(Path.Combine(di2.FullName, fiChild1.Name));
if (fiChild2.Exists) FileInfo fiChild1_truncated = new FileInfo(fiChild1.FullName.Replace(".txt", "_Truncated.txt"));
FileInfo fiChild2_truncated = new FileInfo(fiChild2.FullName.Replace(".txt", "_Truncated.txt"));
//truncate checked and both files exist
if (isTruncatedChecked && fiChild1_truncated.Exists && fiChild2_truncated.Exists)
{ {
if (CompareFile(fiChild1, fiChild2,myIgnore)) if (CompareFile(fiChild1_truncated, fiChild2_truncated, myIgnore))
Add(new FindFile(fiChild1.FullName, fiChild2.FullName));// Process Each File Add(new FindFile(fiChild1_truncated.FullName, fiChild2_truncated.FullName));
}
//truncate checked and only file 1 truncate files exist
else if (isTruncatedChecked && fiChild1_truncated.Exists && fiChild2.Exists)
{
if (CompareFile(fiChild1_truncated, fiChild2, myIgnore))
Add(new FindFile(fiChild1_truncated.FullName, fiChild2.FullName));
}
//truncate checked and only file 2 truncate files exist
else if (isTruncatedChecked && fiChild2_truncated.Exists)
{
if (CompareFile(fiChild1, fiChild2_truncated, myIgnore))
Add(new FindFile(fiChild1.FullName, fiChild2_truncated.FullName));
}
//truncated not checked or truncate files dont exist
else if (fiChild2.Exists)
{
if (CompareFile(fiChild1, fiChild2, myIgnore))
Add(new FindFile(fiChild1.FullName, fiChild2.FullName));
} }
} }
} }
private bool CompareFile(FileInfo fiChild1, FileInfo fiChild2,IgnoreLines myIgnore) private bool CompareFile(FileInfo fiChild1, FileInfo fiChild2,IgnoreLines myIgnore)
{ {
if (fiChild1.Name == "DebugMeta.txt") if (fiChild1.Name == "DebugMeta.txt" || fiChild1.Name == "DebugMeta_Truncated.txt")
{ {
IEnumerable<string> lines1 = ReadFilteredLines(fiChild1.FullName, false, myIgnore);//LINQ Read lines without ignored lines IEnumerable<string> lines1 = ReadFilteredLines(fiChild1.FullName, false, myIgnore);//LINQ Read lines without ignored lines
IEnumerable<string> lines2 = ReadFilteredLines(fiChild2.FullName, false, myIgnore);//LINQ Read lines without ignored lines IEnumerable<string> lines2 = ReadFilteredLines(fiChild2.FullName, false, myIgnore);//LINQ Read lines without ignored lines
@@ -1103,34 +1098,16 @@ namespace Baseline
// Text - the line of text // Text - the line of text
public partial class Procedure public partial class Procedure
{ {
private string _Number; public string Number { get; set; }
public string Number public string Title { get; set; }
public Pages MyPages { get; set; } = new Pages();
public Procedure(string number, string title)
{ {
get { return _Number; } Number = number;
set { _Number = value; } Title = title;
} }
private string _Title; public override string ToString() => string.Format("{0} - {1}", Number, Title);
public string Title }
{
get { return _Title; }
set { _Title = value; }
}
private Pages _MyPages = new Pages();
public Pages MyPages
{
get { return _MyPages; }
set { _MyPages = value; }
}
public Procedure(string number, string title)
{
_Number = number;
_Title = title;
}
public override string ToString()
{
return string.Format("{0} - {1}", Number, Title);
}
}
public partial class Procedures : List<Procedure> public partial class Procedures : List<Procedure>
{ {
// Sample data for a Procedure Number line // Sample data for a Procedure Number line
@@ -1161,77 +1138,34 @@ namespace Baseline
} }
public partial class Page public partial class Page
{ {
private int _Number; public int Number { get; set; }
public int Number
{
get { return _Number; }
set { _Number = value; }
}
private Lines _MyLines = new Lines();
public Lines MyLines public Lines MyLines { get; set; } = new Lines();
{ public Page(int number) => Number = number;
get { return _MyLines; } public override string ToString() => string.Format("Page {0}", Number);
set { _MyLines = value; } }
}
public Page(int number)
{
_Number = number;
}
public override string ToString()
{
return string.Format("Page {0}", Number);
}
}
public partial class Pages : List<Page> public partial class Pages : List<Page>
{ {
public void Add(int number) public void Add(int number) => Add(new Page(number));
{ }
Add(new Page(number));
}
}
public partial class Line public partial class Line
{ {
private Procedure _MyProc; public Procedure MyProc { get; set; }
public Procedure MyProc public Page MyPage { get; set; }
public string Text { get; set; }
public Line(string text) => Text = text;
public Line(string text, Procedure myProc, Page myPage)
{ {
get { return _MyProc; } Text = text;
set { _MyProc = value; } MyProc = myProc;
MyPage = myPage;
} }
private Page _MyPage; public override string ToString() => Text;
public Page MyPage }
{
get { return _MyPage; }
set { _MyPage = value; }
}
private string _Text;
public string Text
{
get { return _Text; }
set { _Text = value; }
}
public Line(string text)
{
_Text = text;
}
public Line(string text, Procedure myProc, Page myPage)
{
_Text = text;
_MyProc = myProc;
_MyPage = myPage;
}
public override string ToString()
{
return Text;
}
}
public partial class Lines : List<Line> public partial class Lines : List<Line>
{ {
public void Add(string text) public void Add(string text) => Add(new Line(text));
{ }
Add(new Line(text));
}
}
[Serializable] [Serializable]
public partial class IgnoreLine public partial class IgnoreLine
{ {
@@ -1269,21 +1203,12 @@ namespace Baseline
public IgnoreLines() public IgnoreLines()
{ {
} }
public void Add(string text, Relation searchType, bool active) public void Add(string text, Relation searchType, bool active) => Add(new IgnoreLine(text, searchType, active));
{ // Convert IgnoreLines to string (XML)
Add(new IgnoreLine(text, searchType, active)); public override string ToString() => GenericSerializer<IgnoreLines>.StringSerialize(this);
} // Convert string to IgnoreLines
// Convert IgnoreLines to string (XML) public static IgnoreLines Get(string xml) => GenericSerializer<IgnoreLines>.StringDeserialize(xml);
public override string ToString() }
{
return GenericSerializer<IgnoreLines>.StringSerialize(this);
}
// Convert string to IgnoreLines
public static IgnoreLines Get(string xml)
{
return GenericSerializer<IgnoreLines>.StringDeserialize(xml);
}
}
/// <summary> /// <summary>
/// This is a simple serializer that takes a class and converts it to and from string (XML) /// This is a simple serializer that takes a class and converts it to and from string (XML)
/// </summary> /// </summary>
@@ -1311,7 +1236,7 @@ namespace Baseline
string ss = s.Replace("encoding=\"utf-16\"", ""); string ss = s.Replace("encoding=\"utf-16\"", "");
XmlSerializer xs = new XmlSerializer(typeof(T)); XmlSerializer xs = new XmlSerializer(typeof(T));
UTF8Encoding enc = new UTF8Encoding(); UTF8Encoding enc = new UTF8Encoding();
Byte[] arrBytData = enc.GetBytes(ss); byte[] arrBytData = enc.GetBytes(ss);
using (MemoryStream ms = new MemoryStream(arrBytData)) using (MemoryStream ms = new MemoryStream(arrBytData))
{ {
t = (T)xs.Deserialize(ms); t = (T)xs.Deserialize(ms);
@@ -1325,12 +1250,9 @@ namespace Baseline
public class NonXsiTextWriter : XmlTextWriter public class NonXsiTextWriter : XmlTextWriter
{ {
public NonXsiTextWriter(TextWriter w) : base(w) { } public NonXsiTextWriter(TextWriter w) : base(w) { }
public NonXsiTextWriter(Stream w, Encoding encoding) public NonXsiTextWriter(Stream w, Encoding encoding)
: base(w, encoding) : base(w, encoding) => Formatting = Formatting.Indented;
{ public NonXsiTextWriter(string filename, Encoding encoding) : base(filename, encoding) { }
this.Formatting = Formatting.Indented;
}
public NonXsiTextWriter(string filename, Encoding encoding) : base(filename, encoding) { }
bool _skip = false; bool _skip = false;
public override void WriteStartAttribute(string prefix, string localName, string ns) public override void WriteStartAttribute(string prefix, string localName, string ns)
{ {
@@ -1372,32 +1294,16 @@ namespace Baseline
public const short SWP_NOZORDER = 0X4; public const short SWP_NOZORDER = 0X4;
public const int SWP_SHOWWINDOW = 0x0040; public const int SWP_SHOWWINDOW = 0x0040;
private System.Diagnostics.Process _Process; public System.Diagnostics.Process Process { get; set; }
public int X { get; set; }
public System.Diagnostics.Process Process public int Y { get; set; }
{ public ProcessLocation(System.Diagnostics.Process process, int x, int y)
get { return _Process; }
set { _Process = value; }
}
private int _X;
public int X
{
get { return _X; }
set { _X = value; }
}
private int _Y;
public int Y
{
get { return _Y; }
set { _Y = value; }
}
public ProcessLocation(System.Diagnostics.Process process, int x, int y)
{ {
Process = process; Process = process;
X = x; X = x;
Y = y; Y = y;
} }
private static Boolean FoxitSettingInfo = true; private static bool FoxitSettingInfo = true;
/// <summary> /// <summary>
/// MoveIt() moves the window containing the PDF viewer to the right so the two pdf viewer windows will not overlap. /// MoveIt() moves the window containing the PDF viewer to the right so the two pdf viewer windows will not overlap.
@@ -1418,11 +1324,8 @@ namespace Baseline
} }
public class ProcessLocationQueue: Queue<ProcessLocation> public class ProcessLocationQueue: Queue<ProcessLocation>
{ {
public void Add(System.Diagnostics.Process process, int x, int y) public void Add(System.Diagnostics.Process process, int x, int y) => Enqueue(new ProcessLocation(process, x, y));
{ public void ProcessNext()
Enqueue(new ProcessLocation(process,x,y));
}
public void ProcessNext()
{ {
ProcessLocation pl = Dequeue(); ProcessLocation pl = Dequeue();
pl.MoveIt(); pl.MoveIt();
-3
View File
@@ -120,9 +120,6 @@
<metadata name="tt.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="tt.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>306, 17</value> <value>306, 17</value>
</metadata> </metadata>
<metadata name="tt.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>306, 17</value>
</metadata>
<metadata name="fbd.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="fbd.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
+6 -26
View File
@@ -1,11 +1,4 @@
using System; 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.Windows.Forms;
namespace Baseline namespace Baseline
@@ -19,17 +12,7 @@ namespace Baseline
set { set {
_MyIgnore = value; _MyIgnore = value;
dgv.DataSource=null; dgv.DataSource=null;
//dgvcSearchType.ValueType = typeof(Relation);
//dgvcSearchType.ValueMember = "Value";
//dgvcSearchType.DisplayMember = "Display";
//dgvcSearchType.DataSource = new Relation[] { Relation.Contains, Relation.StartsWith, Relation.EndsWith, Relation.Regex }
//.Select(x => new { Display = x.ToString(), Value = x })
//.ToList();
dgv.DataSource=value; dgv.DataSource=value;
//dgvcSearchType.DataSource =
//new List<Relation>((Relation[]) Enum.GetValues(typeof(Relation)))
//.Select(x => new { Display=x.ToString(), Value=(int)x })
//.ToList();;
} }
} }
public frmSettings(IgnoreLines myIgnore) public frmSettings(IgnoreLines myIgnore)
@@ -46,19 +29,16 @@ namespace Baseline
col.ValueType = typeof(Relation); col.ValueType = typeof(Relation);
} }
private void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e) private void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e) => Console.WriteLine("Here");
private void btnOK_Click(object sender, EventArgs e)
{ {
Console.WriteLine("Here"); DialogResult = System.Windows.Forms.DialogResult.OK;
} Close();
private void btnOK_Click(object sender, EventArgs e)
{
this.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Close();
} }
private void btnCancel_Click(object sender, EventArgs e) private void btnCancel_Click(object sender, EventArgs e)
{ {
this.DialogResult = System.Windows.Forms.DialogResult.Cancel; DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.Close(); Close();
} }
} }
} }
+32 -45
View File
@@ -1,6 +1,5 @@
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
@@ -15,7 +14,7 @@ namespace AT.STO.UI.Win
{ {
#region Private Variable Declarations #region Private Variable Declarations
private IDropDownAware _dropDownControl = null; private IDropDownAware _dropDownControl = null;
private DropDownWindowHelper _dropDownHelper = null; private readonly DropDownWindowHelper _dropDownHelper = null;
private Form _owner = null; private Form _owner = null;
#endregion #endregion
#region Constructor / Destructor #region Constructor / Destructor
@@ -47,7 +46,7 @@ namespace AT.STO.UI.Win
/// <param name="e"></param> /// <param name="e"></param>
protected override void OnHandleCreated(EventArgs e) protected override void OnHandleCreated(EventArgs e)
{ {
_owner = this.FindForm(); _owner = FindForm();
_dropDownHelper.ReleaseHandle(); _dropDownHelper.ReleaseHandle();
if (_owner != null) if (_owner != null)
@@ -66,8 +65,8 @@ namespace AT.STO.UI.Win
{ {
base.OnResize(e); base.OnResize(e);
combo.Location = new Point(0, 0); combo.Location = new Point(0, 0);
combo.Width = this.ClientRectangle.Width; combo.Width = ClientRectangle.Width;
this.Height = combo.Height; Height = combo.Height;
} }
#endregion #endregion
#region Event Handler #region Event Handler
@@ -96,7 +95,7 @@ namespace AT.STO.UI.Win
else else
{ {
_dropDownHelper.CloseDropDown(); _dropDownHelper.CloseDropDown();
this.Focus(); Focus();
} }
} }
@@ -115,7 +114,7 @@ namespace AT.STO.UI.Win
private void DropDownHelper_DropDownCancel(object sender, DropDownCancelEventArgs e) private void DropDownHelper_DropDownCancel(object sender, DropDownCancelEventArgs e)
{ {
if (this.Bounds.Contains(Parent.PointToClient(e.CursorLocation))) if (Bounds.Contains(Parent.PointToClient(e.CursorLocation)))
{ {
e.Cancel = true; e.Cancel = true;
} }
@@ -137,31 +136,22 @@ namespace AT.STO.UI.Win
{ {
SetValue<long>(e.Value as ILookupItem<long>); SetValue<long>(e.Value as ILookupItem<long>);
} }
if (this.FinishEditing != null) FinishEditing?.Invoke(this, e);
{
this.FinishEditing(this, e); _dropDownControl.FinishEditing -= new DropDownValueChangedEventHandler(DropDown_FinishEditing);
}
_dropDownControl.FinishEditing -= new DropDownValueChangedEventHandler(DropDown_FinishEditing);
_dropDownControl.ValueChanged -= new DropDownValueChangedEventHandler(DropDown_ValueChanged); _dropDownControl.ValueChanged -= new DropDownValueChangedEventHandler(DropDown_ValueChanged);
_dropDownHelper.CloseDropDown(); _dropDownHelper.CloseDropDown();
} }
private void DropDown_ValueChanged(object sender, DropDownValueChangedEventArgs e) private void DropDown_ValueChanged(object sender, DropDownValueChangedEventArgs e) => ValueChanged?.Invoke(this, e);
{ #endregion
if (this.ValueChanged != null) #region Public Properties
{ /// <summary>
this.ValueChanged(this, e); /// Get or set the control (has to implement IDropDownAware) that is to
} /// be displayed as the dropdown portion of the combobox.
} /// </summary>
#endregion [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
#region Public Properties
/// <summary>
/// Get or set the control (has to implement IDropDownAware) that is to
/// be displayed as the dropdown portion of the combobox.
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public IDropDownAware DropDownControl public IDropDownAware DropDownControl
{ {
get { return _dropDownControl; } get { return _dropDownControl; }
@@ -169,24 +159,21 @@ namespace AT.STO.UI.Win
{ {
_dropDownControl = value; _dropDownControl = value;
this.Controls.Add(_dropDownControl as Control); Controls.Add(_dropDownControl as Control);
} }
} }
#endregion #endregion
#region Public Methods #region Public Methods
public override string ToString() public override string ToString() => Name;
{ #endregion
return this.Name; #region Private Methods
} /// <summary>
#endregion /// Calculate an acceptable position of the DropDownForm even in a
#region Private Methods /// multi screen environment.
/// <summary> /// </summary>
/// Calculate an acceptable position of the DropDownForm even in a /// <param name="DropDown"></param>
/// multi screen environment. /// <returns></returns>
/// </summary> private Point GetDropDownPosition(DropDownForm DropDown)
/// <param name="DropDown"></param>
/// <returns></returns>
private Point GetDropDownPosition(DropDownForm DropDown)
{ {
Point lt = Parent.PointToScreen(new Point(Left, Top)); Point lt = Parent.PointToScreen(new Point(Left, Top));
Point rb = Parent.PointToScreen(new Point(Right, Bottom)); Point rb = Parent.PointToScreen(new Point(Right, Bottom));
+58 -83
View File
@@ -35,10 +35,9 @@ namespace AT.STO.UI.Win
/// </summary> /// </summary>
public class DropDownCancelEventArgs : EventArgs public class DropDownCancelEventArgs : EventArgs
{ {
#region Private Variable Declarations #region Private Variable Declarations
private bool _cancel = false; private Point _cursorLocation;
private Point _cursorLocation; private readonly Form _dropDown = null;
private Form _dropDown = null;
#endregion #endregion
#region Constructor / Destructor #region Constructor / Destructor
/// <summary> /// <summary>
@@ -51,36 +50,26 @@ namespace AT.STO.UI.Win
{ {
_dropDown = DropDown; _dropDown = DropDown;
_cursorLocation = CursorLocation; _cursorLocation = CursorLocation;
_cancel = false; Cancel = false;
}
#endregion
#region Public Properties
/// <summary>
///
/// </summary>
public bool Cancel
{
get { return _cancel; }
set { _cancel = value; }
} }
#endregion
#region Public Properties
/// <summary>
///
/// </summary>
public bool Cancel { get; set; } = false;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public Point CursorLocation public Point CursorLocation => _cursorLocation;
{
get { return _cursorLocation; }
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public Form DropDown public Form DropDown => _dropDown;
{ #endregion
get { return _dropDown; } }
}
#endregion
}
/// <summary> /// <summary>
/// Contains event information for a <see cref="DropDownClosed"/> event. /// Contains event information for a <see cref="DropDownClosed"/> event.
@@ -91,64 +80,50 @@ namespace AT.STO.UI.Win
public class DropDownClosedEventArgs : EventArgs public class DropDownClosedEventArgs : EventArgs
{ {
#region Private Variable Declarations #region Private Variable Declarations
private Form _dropDown = null; private readonly Form _dropDown = null;
#endregion #endregion
#region Constructor / Destructor #region Constructor / Destructor
/// <summary> /// <summary>
/// Constructs a new instance of this class for the specified /// Constructs a new instance of this class for the specified
/// popup form. /// popup form.
/// </summary> /// </summary>
/// <param name="DropDown">DropDown Form which is being closed.</param> /// <param name="DropDown">DropDown Form which is being closed.</param>
public DropDownClosedEventArgs(Form DropDown) public DropDownClosedEventArgs(Form DropDown) => _dropDown = DropDown;
{ #endregion
_dropDown = DropDown; #region Public Properties
} /// <summary>
#endregion /// Gets the dropdown form which is being closed.
#region Public Properties /// </summary>
/// <summary> public Form DropDown => _dropDown;
/// Gets the dropdown form which is being closed. #endregion
/// </summary> }
public Form DropDown
{
get { return _dropDown; }
}
#endregion
}
/// <summary> /// <summary>
/// Contains event information for DropDownValueChangedEventHandler. /// Contains event information for DropDownValueChangedEventHandler.
/// </summary> /// </summary>
public class DropDownValueChangedEventArgs : EventArgs public class DropDownValueChangedEventArgs : EventArgs
{ {
#region Private Variable Declarations #region Private Variable Declarations
private object _value = null; #endregion
#endregion #region Constructor / Destructor
#region Constructor / Destructor /// <summary>
/// <summary> /// Default Constructor
/// Default Constructor /// </summary>
/// </summary> public DropDownValueChangedEventArgs()
public DropDownValueChangedEventArgs()
{ {
} }
/// <summary> /// <summary>
/// Initialization with the control's value. /// Initialization with the control's value.
/// </summary> /// </summary>
/// <param name="Value"></param> /// <param name="Value"></param>
public DropDownValueChangedEventArgs(object Value) public DropDownValueChangedEventArgs(object Value) => this.Value = Value;
{ #endregion
_value = Value; #region Public Properties
} /// <summary>
#endregion /// Gets or sets the control's value.
#region Public Properties /// </summary>
/// <summary> public object Value { get; set; } = null;
/// Gets or sets the control's value. #endregion
/// </summary> }
public object Value
{
get { return _value; }
set { _value = value; }
}
#endregion
}
} }
+28 -40
View File
@@ -13,22 +13,19 @@ namespace AT.STO.UI.Win
internal partial class DropDownForm : Form, IDropDownAware internal partial class DropDownForm : Form, IDropDownAware
{ {
#region Private Variable Declaration #region Private Variable Declaration
private IDropDownAware _control = null; private readonly IDropDownAware _control = null;
#endregion #endregion
#region Constructor / Destructor #region Constructor / Destructor
/// <summary> /// <summary>
/// Default Constructor /// Default Constructor
/// </summary> /// </summary>
public DropDownForm() public DropDownForm() => InitializeComponent();
{
InitializeComponent();
}
/// <summary> /// <summary>
/// Constructor to initialize the for with the control to display. /// Constructor to initialize the for with the control to display.
/// </summary> /// </summary>
/// <param name="Ctrl">The control to display.</param> /// <param name="Ctrl">The control to display.</param>
public DropDownForm(IDropDownAware Ctrl) : this() public DropDownForm(IDropDownAware Ctrl) : this()
{ {
if (Ctrl != null) if (Ctrl != null)
{ {
@@ -41,7 +38,7 @@ namespace AT.STO.UI.Win
#region Form Events #region Form Events
protected override void OnClosing(CancelEventArgs e) protected override void OnClosing(CancelEventArgs e)
{ {
this.Controls.Remove(_control as Control); Controls.Remove(_control as Control);
base.OnClosing(e); base.OnClosing(e);
} }
@@ -58,29 +55,20 @@ namespace AT.STO.UI.Win
#region Event Handler #region Event Handler
private void Ctrl_FinishEditing(object sender, DropDownValueChangedEventArgs e) private void Ctrl_FinishEditing(object sender, DropDownValueChangedEventArgs e)
{ {
if (this.FinishEditing != null) FinishEditing?.Invoke(this, e);
{
this.FinishEditing(this, e);
}
_control.FinishEditing -= new DropDownValueChangedEventHandler(Ctrl_FinishEditing); _control.FinishEditing -= new DropDownValueChangedEventHandler(Ctrl_FinishEditing);
_control.ValueChanged -= new DropDownValueChangedEventHandler(Ctrl_ValueChanged); _control.ValueChanged -= new DropDownValueChangedEventHandler(Ctrl_ValueChanged);
} }
private void Ctrl_ValueChanged(object sender, DropDownValueChangedEventArgs e) private void Ctrl_ValueChanged(object sender, DropDownValueChangedEventArgs e) => ValueChanged?.Invoke(this, e);
{ #endregion
if (this.ValueChanged != null) #region IDropDownAware Implementation
{ /// <summary>
this.ValueChanged(this, e); /// Fired either on OK, Cancel or a click outside the control to indicate
} /// that the user has finished editing.
} /// </summary>
#endregion public event DropDownValueChangedEventHandler FinishEditing;
#region IDropDownAware Implementation
/// <summary>
/// Fired either on OK, Cancel or a click outside the control to indicate
/// that the user has finished editing.
/// </summary>
public event DropDownValueChangedEventHandler FinishEditing;
/// <summary> /// <summary>
/// Fired on any change of the controls's value during the editing process. /// Fired on any change of the controls's value during the editing process.
@@ -100,15 +88,15 @@ namespace AT.STO.UI.Win
private void InitializeControl(Control Ctrl) private void InitializeControl(Control Ctrl)
{ {
Size size = Ctrl.Size; Size size = Ctrl.Size;
Size inner = this.ClientRectangle.Size; Size inner = ClientRectangle.Size;
Size outer = this.Size; Size outer = Size;
int gap = outer.Width - inner.Width; int gap = outer.Width - inner.Width;
size.Width += gap; size.Width += gap;
size.Height += gap; size.Height += gap;
this.Size = size; Size = size;
this.Controls.Add(Ctrl); Controls.Add(Ctrl);
Ctrl.Location = new Point(0, 0); Ctrl.Location = new Point(0, 0);
Ctrl.Visible = true; Ctrl.Visible = true;
Ctrl.Invalidate(); Ctrl.Invalidate();
@@ -1,4 +1,3 @@
using System;
using System.Drawing; using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
@@ -21,59 +20,48 @@ namespace AT.STO.UI.Win
private const int WM_NCLBUTTONDOWN = 0x0A1; private const int WM_NCLBUTTONDOWN = 0x0A1;
private const int WM_NCRBUTTONDOWN = 0x0A4; private const int WM_NCRBUTTONDOWN = 0x0A4;
private const int WM_NCMBUTTONDOWN = 0x0A7; private const int WM_NCMBUTTONDOWN = 0x0A7;
#endregion #endregion
#region Private Variable Declarations #region Private Variable Declarations
private Form _dropDown = null; private readonly DropDownWindowHelper _owner = null;
private DropDownWindowHelper _owner = null;
#endregion #endregion
#region Event Declarations #region Event Declarations
public event DropDownCancelEventHandler DropDownCancel; public event DropDownCancelEventHandler DropDownCancel;
#endregion #endregion
#region Constructor / Destructor #region Constructor / Destructor
/// <summary> /// <summary>
/// Constructs a new instance of this class and sets the owning /// Constructs a new instance of this class and sets the owning
/// object. /// object.
/// </summary> /// </summary>
/// <param name="Owner">The <see cref="DropDownWindowHelper"/> object /// <param name="Owner">The <see cref="DropDownWindowHelper"/> object
/// which owns this class.</param> /// which owns this class.</param>
public DropDownMessageFilter(DropDownWindowHelper Owner) public DropDownMessageFilter(DropDownWindowHelper Owner) => _owner = Owner;
{ #endregion
_owner = Owner; #region Public Properties
} /// <summary>
#endregion /// Gets/sets the dropdown form which is being displayed.
#region Public Properties /// </summary>
/// <summary> public Form DropDown { get; set; } = null;
/// Gets/sets the dropdown form which is being displayed. #endregion
/// </summary> #region Private Methods
public Form DropDown private void OnMouseDown()
{
get { return _dropDown; }
set { _dropDown = value; }
}
#endregion
#region Private Methods
private void OnMouseDown()
{ {
Point cursorPos = Cursor.Position; // Get the cursor location Point cursorPos = Cursor.Position; // Get the cursor location
if (!_dropDown.Bounds.Contains(cursorPos)) // Check if it is within the popup form if (!DropDown.Bounds.Contains(cursorPos)) // Check if it is within the popup form
{ {
OnDropDownCancel(new DropDownCancelEventArgs(_dropDown, cursorPos)); // If not, then call to see if it should be closed OnDropDownCancel(new DropDownCancelEventArgs(DropDown, cursorPos)); // If not, then call to see if it should be closed
} }
} }
#endregion #endregion
#region DropDownCancelEvent Implementation #region DropDownCancelEvent Implementation
protected virtual void OnDropDownCancel(DropDownCancelEventArgs e) protected virtual void OnDropDownCancel(DropDownCancelEventArgs e)
{ {
if (this.DropDownCancel != null) DropDownCancel?.Invoke(this, e);
{
this.DropDownCancel(this, e);
}
if (!e.Cancel) if (!e.Cancel)
{ {
_owner.CloseDropDown(); _owner.CloseDropDown();
_dropDown = null; // Clear reference for GC DropDown = null; // Clear reference for GC
} }
} }
#endregion #endregion
@@ -90,7 +78,7 @@ namespace AT.STO.UI.Win
/// This implementation always returns <c>false</c>.</returns> /// This implementation always returns <c>false</c>.</returns>
public bool PreFilterMessage(ref Message m) public bool PreFilterMessage(ref Message m)
{ {
if (_dropDown != null) if (DropDown != null)
{ {
switch (m.Msg) switch (m.Msg)
{ {
@@ -1,6 +1,5 @@
using System; using System;
using System.Drawing; using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms; using System.Windows.Forms;
namespace AT.STO.UI.Win namespace AT.STO.UI.Win
@@ -22,7 +21,7 @@ namespace AT.STO.UI.Win
private Form _dropDown = null; private Form _dropDown = null;
private bool _dropDownShowing = false; private bool _dropDownShowing = false;
private DropDownMessageFilter _filter = null; private readonly DropDownMessageFilter _filter = null;
private Form _owner = null; private Form _owner = null;
private bool _skipClose = false; private bool _skipClose = false;
#endregion #endregion
@@ -42,31 +41,25 @@ namespace AT.STO.UI.Win
_filter.DropDownCancel -= new DropDownCancelEventHandler(Popup_Cancel); _filter.DropDownCancel -= new DropDownCancelEventHandler(Popup_Cancel);
_filter.DropDownCancel += new DropDownCancelEventHandler(Popup_Cancel); _filter.DropDownCancel += new DropDownCancelEventHandler(Popup_Cancel);
} }
#endregion #endregion
#region Event Handler #region Event Handler
private void Popup_Cancel(object sender, DropDownCancelEventArgs e) private void Popup_Cancel(object sender, DropDownCancelEventArgs e) => OnDropDownCancel(e);
{
OnDropDownCancel(e);
}
/// <summary> /// <summary>
/// Responds to the <see cref="System.Windows.Forms.Form.Closed"/> /// Responds to the <see cref="System.Windows.Forms.Form.Closed"/>
/// event from the popup form. /// event from the popup form.
/// </summary> /// </summary>
/// <param name="sender">Popup form that has been closed.</param> /// <param name="sender">Popup form that has been closed.</param>
/// <param name="e">Not used.</param> /// <param name="e">Not used.</param>
private void Popup_Closed(object sender, EventArgs e) private void Popup_Closed(object sender, EventArgs e) => CloseDropDown();
{
CloseDropDown(); /// <summary>
} /// Subclasses the owning form's existing Window Procedure to enables the
/// title bar to remain active when a popup is show, and to detect if
/// <summary> /// the user clicks onto another application whilst the popup is visible.
/// Subclasses the owning form's existing Window Procedure to enables the /// </summary>
/// title bar to remain active when a popup is show, and to detect if /// <param name="m">Window Procedure Message</param>
/// the user clicks onto another application whilst the popup is visible. protected override void WndProc(ref Message m)
/// </summary>
/// <param name="m">Window Procedure Message</param>
protected override void WndProc(ref Message m)
{ {
base.WndProc(ref m); base.WndProc(ref m);
@@ -76,7 +69,7 @@ namespace AT.STO.UI.Win
{ {
if (((int)m.WParam) == 0) // Check if the title bar will made inactive: if (((int)m.WParam) == 0) // Check if the title bar will made inactive:
{ // Note it's no good to try and consume this message; if you try to do that you'll end up with windows { // Note it's no good to try and consume this message; if you try to do that you'll end up with windows
UIApiCalls.SendMessage(this.Handle, UIApiCalls.WM_NCACTIVATE, 1, IntPtr.Zero); // If so reactivate it. UIApiCalls.SendMessage(Handle, UIApiCalls.WM_NCACTIVATE, 1, IntPtr.Zero); // If so reactivate it.
} }
} }
else if (m.Msg == UIApiCalls.WM_ACTIVATEAPP) else if (m.Msg == UIApiCalls.WM_ACTIVATEAPP)
@@ -84,7 +77,7 @@ namespace AT.STO.UI.Win
if ((int)m.WParam == 0) // Check if the application is being deactivated. if ((int)m.WParam == 0) // Check if the application is being deactivated.
{ {
CloseDropDown(); // It is so cancel the popup: CloseDropDown(); // It is so cancel the popup:
UIApiCalls.PostMessage(this.Handle, UIApiCalls.WM_NCACTIVATE, 0, IntPtr.Zero); // And put the title bar into the inactive state: UIApiCalls.PostMessage(Handle, UIApiCalls.WM_NCACTIVATE, 0, IntPtr.Zero); // And put the title bar into the inactive state:
} }
} }
} }
@@ -168,22 +161,19 @@ namespace AT.STO.UI.Win
_owner = null; _owner = null;
} }
} }
#endregion #endregion
#region Public Properties #region Public Properties
/// <summary> /// <summary>
/// Indicator weither the DropDown is showing. /// Indicator weither the DropDown is showing.
/// </summary> /// </summary>
public bool DropDownShowing public bool DropDownShowing => _dropDownShowing;
#endregion
#region Event Implementation
protected virtual void OnDropDownCancel(DropDownCancelEventArgs e)
{ {
get { return _dropDownShowing; } if (DropDownCancel != null)
}
#endregion
#region Event Implementation
protected virtual void OnDropDownCancel(DropDownCancelEventArgs e)
{
if (this.DropDownCancel != null)
{ {
this.DropDownCancel(this, e); DropDownCancel(this, e);
if (!e.Cancel) if (!e.Cancel)
{ {
@@ -191,14 +181,8 @@ namespace AT.STO.UI.Win
} }
} }
} }
protected virtual void OnPDropDownClosed(DropDownClosedEventArgs e) protected virtual void OnPDropDownClosed(DropDownClosedEventArgs e) => DropDownClosed?.Invoke(this, e);
{ #endregion
if (this.DropDownClosed != null) }
{
this.DropDownClosed(this, e);
}
}
#endregion
}
} }
@@ -1,5 +1,3 @@
using System;
namespace AT.STO.UI.Win namespace AT.STO.UI.Win
{ {
/// <summary> /// <summary>
@@ -1,5 +1,3 @@
using System;
namespace AT.STO.UI.Win namespace AT.STO.UI.Win
{ {
public interface ILookupItem<T> where T: struct public interface ILookupItem<T> where T: struct
+37 -66
View File
@@ -1,8 +1,6 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Globalization;
//using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
@@ -121,10 +119,7 @@ namespace JR.Utils.GUI.Forms
/// </summary> /// </summary>
/// <param name="text">The text.</param> /// <param name="text">The text.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(string text) public static DialogResult Show(string text) => FlexibleMessageBoxForm.Show(null, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
{
return FlexibleMessageBoxForm.Show(null, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -132,10 +127,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="owner">The owner.</param> /// <param name="owner">The owner.</param>
/// <param name="text">The text.</param> /// <param name="text">The text.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(IWin32Window owner, string text) public static DialogResult Show(IWin32Window owner, string text) => FlexibleMessageBoxForm.Show(owner, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
{
return FlexibleMessageBoxForm.Show(owner, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -143,10 +135,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="text">The text.</param> /// <param name="text">The text.</param>
/// <param name="caption">The caption.</param> /// <param name="caption">The caption.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(string text, string caption) public static DialogResult Show(string text, string caption) => FlexibleMessageBoxForm.Show(null, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
{
return FlexibleMessageBoxForm.Show(null, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -155,10 +144,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="text">The text.</param> /// <param name="text">The text.</param>
/// <param name="caption">The caption.</param> /// <param name="caption">The caption.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(IWin32Window owner, string text, string caption) public static DialogResult Show(IWin32Window owner, string text, string caption) => FlexibleMessageBoxForm.Show(owner, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
{
return FlexibleMessageBoxForm.Show(owner, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -167,10 +153,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="caption">The caption.</param> /// <param name="caption">The caption.</param>
/// <param name="buttons">The buttons.</param> /// <param name="buttons">The buttons.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(string text, string caption, MessageBoxButtons buttons) public static DialogResult Show(string text, string caption, MessageBoxButtons buttons) => FlexibleMessageBoxForm.Show(null, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
{
return FlexibleMessageBoxForm.Show(null, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -180,10 +163,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="caption">The caption.</param> /// <param name="caption">The caption.</param>
/// <param name="buttons">The buttons.</param> /// <param name="buttons">The buttons.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons) public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons) => FlexibleMessageBoxForm.Show(owner, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
{
return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -193,10 +173,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="buttons">The buttons.</param> /// <param name="buttons">The buttons.</param>
/// <param name="icon">The icon.</param> /// <param name="icon">The icon.</param>
/// <returns></returns> /// <returns></returns>
public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) => FlexibleMessageBoxForm.Show(null, text, caption, buttons, icon, MessageBoxDefaultButton.Button1);
{
return FlexibleMessageBoxForm.Show(null, text, caption, buttons, icon, MessageBoxDefaultButton.Button1);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -207,10 +184,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="buttons">The buttons.</param> /// <param name="buttons">The buttons.</param>
/// <param name="icon">The icon.</param> /// <param name="icon">The icon.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) => FlexibleMessageBoxForm.Show(owner, text, caption, buttons, icon, MessageBoxDefaultButton.Button1);
{
return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, icon, MessageBoxDefaultButton.Button1);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -221,10 +195,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="icon">The icon.</param> /// <param name="icon">The icon.</param>
/// <param name="defaultButton">The default button.</param> /// <param name="defaultButton">The default button.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) => FlexibleMessageBoxForm.Show(null, text, caption, buttons, icon, defaultButton);
{
return FlexibleMessageBoxForm.Show(null, text, caption, buttons, icon, defaultButton);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -236,10 +207,7 @@ namespace JR.Utils.GUI.Forms
/// <param name="icon">The icon.</param> /// <param name="icon">The icon.</param>
/// <param name="defaultButton">The default button.</param> /// <param name="defaultButton">The default button.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) => FlexibleMessageBoxForm.Show(owner, text, caption, buttons, icon, defaultButton);
{
return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, icon, defaultButton);
}
/// <summary> /// <summary>
/// Shows the specified message box. /// Shows the specified message box.
@@ -251,10 +219,8 @@ namespace JR.Utils.GUI.Forms
/// <param name="icon">The icon.</param> /// <param name="icon">The icon.</param>
/// <param name="defaultButton">The default button.</param> /// <param name="defaultButton">The default button.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
public static DialogResult ShowCustom(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Keeping owner for legacy reasons")]
{ public static DialogResult ShowCustom(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) => FlexibleMessageBoxForm.ShowCustom(null, text, caption, buttons, icon);
return FlexibleMessageBoxForm.ShowCustom(null, text, caption, buttons, icon);
}
#endregion #endregion
@@ -341,7 +307,7 @@ namespace JR.Utils.GUI.Forms
this.richTextBoxMessage.TabIndex = 0; this.richTextBoxMessage.TabIndex = 0;
this.richTextBoxMessage.TabStop = false; this.richTextBoxMessage.TabStop = false;
this.richTextBoxMessage.Text = "<Message>"; this.richTextBoxMessage.Text = "<Message>";
this.richTextBoxMessage.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.richTextBoxMessage_LinkClicked); this.richTextBoxMessage.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.RichTextBoxMessage_LinkClicked);
// //
// panel1 // panel1
// //
@@ -431,8 +397,8 @@ namespace JR.Utils.GUI.Forms
#region Private constants #region Private constants
//These separators are used for the "copy to clipboard" standard operation, triggered by Ctrl + C (behavior and clipboard format is like in a standard MessageBox) //These separators are used for the "copy to clipboard" standard operation, triggered by Ctrl + C (behavior and clipboard format is like in a standard MessageBox)
private static readonly String STANDARD_MESSAGEBOX_SEPARATOR_LINES = "---------------------------\n"; private static readonly string STANDARD_MESSAGEBOX_SEPARATOR_LINES = "---------------------------\n";
private static readonly String STANDARD_MESSAGEBOX_SEPARATOR_SPACES = " "; private static readonly string STANDARD_MESSAGEBOX_SEPARATOR_SPACES = " ";
//These are the possible buttons (in a standard MessageBox) //These are the possible buttons (in a standard MessageBox)
private enum ButtonID { OK = 0, CANCEL, YES, NO, ABORT, RETRY, IGNORE, OVERWRITE, RENAME }; private enum ButtonID { OK = 0, CANCEL, YES, NO, ABORT, RETRY, IGNORE, OVERWRITE, RENAME };
@@ -440,10 +406,10 @@ namespace JR.Utils.GUI.Forms
//These are the buttons texts for different languages. //These are the buttons texts for different languages.
//If you want to add a new language, add it here and in the GetButtonText-Function //If you want to add a new language, add it here and in the GetButtonText-Function
private enum TwoLetterISOLanguageID { en, de, es, it }; private enum TwoLetterISOLanguageID { en, de, es, it };
private static readonly String[] BUTTON_TEXTS_ENGLISH_EN = { "OK", "Cancel", "&Yes", "&No", "&Abort", "&Retry", "&Ignore", "&Overwrite", "&Rename" }; //Note: This is also the fallback language private static readonly string[] BUTTON_TEXTS_ENGLISH_EN = { "OK", "Cancel", "&Yes", "&No", "&Abort", "&Retry", "&Ignore", "&Overwrite", "&Rename" }; //Note: This is also the fallback language
private static readonly String[] BUTTON_TEXTS_GERMAN_DE = { "OK", "Abbrechen", "&Ja", "&Nein", "&Abbrechen", "&Wiederholen", "&Ignorieren", "&Overwrite", "&Rename" }; private static readonly string[] BUTTON_TEXTS_GERMAN_DE = { "OK", "Abbrechen", "&Ja", "&Nein", "&Abbrechen", "&Wiederholen", "&Ignorieren", "&Overwrite", "&Rename" };
private static readonly String[] BUTTON_TEXTS_SPANISH_ES = { "Aceptar", "Cancelar", "&Sí", "&No", "&Abortar", "&Reintentar", "&Ignorar", "&Overwrite", "&Rename" }; private static readonly string[] BUTTON_TEXTS_SPANISH_ES = { "Aceptar", "Cancelar", "&Sí", "&No", "&Abortar", "&Reintentar", "&Ignorar", "&Overwrite", "&Rename" };
private static readonly String[] BUTTON_TEXTS_ITALIAN_IT = { "OK", "Annulla", "&Sì", "&No", "&Interrompi", "&Riprova", "&Ignora", "&Overwrite", "&Rename" }; private static readonly string[] BUTTON_TEXTS_ITALIAN_IT = { "OK", "Annulla", "&Sì", "&No", "&Interrompi", "&Riprova", "&Ignora", "&Overwrite", "&Rename" };
#endregion #endregion
@@ -451,7 +417,7 @@ namespace JR.Utils.GUI.Forms
private MessageBoxDefaultButton defaultButton; private MessageBoxDefaultButton defaultButton;
private int visibleButtonsCount; private int visibleButtonsCount;
private TwoLetterISOLanguageID languageID = TwoLetterISOLanguageID.en; private readonly TwoLetterISOLanguageID languageID = TwoLetterISOLanguageID.en;
#endregion #endregion
@@ -758,9 +724,9 @@ namespace JR.Utils.GUI.Forms
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
private void FlexibleMessageBoxForm_Shown(object sender, EventArgs e) private void FlexibleMessageBoxForm_Shown(object sender, EventArgs e)
{ {
int buttonIndexToFocus = 1;
Button buttonToFocus; Button buttonToFocus;
int buttonIndexToFocus;
//Set the default button... //Set the default button...
switch (this.defaultButton) switch (this.defaultButton)
{ {
@@ -799,7 +765,7 @@ namespace JR.Utils.GUI.Forms
/// </summary> /// </summary>
/// <param name="sender">The source of the event.</param> /// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Windows.Forms.LinkClickedEventArgs"/> instance containing the event data.</param> /// <param name="e">The <see cref="System.Windows.Forms.LinkClickedEventArgs"/> instance containing the event data.</param>
private void richTextBoxMessage_LinkClicked(object sender, LinkClickedEventArgs e) private void RichTextBoxMessage_LinkClicked(object sender, LinkClickedEventArgs e)
{ {
try try
{ {
@@ -877,12 +843,14 @@ namespace JR.Utils.GUI.Forms
public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
{ {
//Create a new instance of the FlexibleMessageBox form //Create a new instance of the FlexibleMessageBox form
var flexibleMessageBoxForm = new FlexibleMessageBoxForm(); var flexibleMessageBoxForm = new FlexibleMessageBoxForm
flexibleMessageBoxForm.ShowInTaskbar = false; {
ShowInTaskbar = false,
//Bind the caption and the message text //Bind the caption and the message text
flexibleMessageBoxForm.CaptionText = caption; CaptionText = caption,
flexibleMessageBoxForm.MessageText = text; MessageText = text
};
flexibleMessageBoxForm.FlexibleMessageBoxFormBindingSource.DataSource = flexibleMessageBoxForm; flexibleMessageBoxForm.FlexibleMessageBoxFormBindingSource.DataSource = flexibleMessageBoxForm;
//Set the buttons visibilities and texts. Also set a default button. //Set the buttons visibilities and texts. Also set a default button.
@@ -914,15 +882,18 @@ namespace JR.Utils.GUI.Forms
/// <param name="icon">The icon.</param> /// <param name="icon">The icon.</param>
/// <param name="defaultButton">The default button.</param> /// <param name="defaultButton">The default button.</param>
/// <returns>The dialog result.</returns> /// <returns>The dialog result.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Keeping buttons for legacy reasons")]
public static DialogResult ShowCustom(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) public static DialogResult ShowCustom(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
{ {
//Create a new instance of the FlexibleMessageBox form //Create a new instance of the FlexibleMessageBox form
var flexibleMessageBoxForm = new FlexibleMessageBoxForm(); var flexibleMessageBoxForm = new FlexibleMessageBoxForm
flexibleMessageBoxForm.ShowInTaskbar = false; {
ShowInTaskbar = false,
//Bind the caption and the message text //Bind the caption and the message text
flexibleMessageBoxForm.CaptionText = caption; CaptionText = caption,
flexibleMessageBoxForm.MessageText = text; MessageText = text
};
flexibleMessageBoxForm.FlexibleMessageBoxFormBindingSource.DataSource = flexibleMessageBoxForm; flexibleMessageBoxForm.FlexibleMessageBoxFormBindingSource.DataSource = flexibleMessageBoxForm;
//Set the buttons visibilities and texts. Also set a default button. //Set the buttons visibilities and texts. Also set a default button.
+1
View File
@@ -66,6 +66,7 @@
<Compile Include="frmFormatCopy.Designer.cs"> <Compile Include="frmFormatCopy.Designer.cs">
<DependentUpon>frmFormatCopy.cs</DependentUpon> <DependentUpon>frmFormatCopy.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="frmFormatCopy.resx"> <EmbeddedResource Include="frmFormatCopy.resx">
+8
View File
@@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Not modifying Naming Styles")]
-1
View File
@@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
namespace Formats namespace Formats
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+14 -23
View File
@@ -1,9 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
@@ -28,7 +23,7 @@ namespace Formats
txbxPROMSFormatsPath.Text = savedFormatPath; txbxPROMSFormatsPath.Text = savedFormatPath;
else else
{ {
string curFolder = Environment.CurrentDirectory; // C:\development/PROMS/Formats/bin/debug string curFolder = Environment.CurrentDirectory; // .../PROMS/Formats/bin/debug
int idx = curFolder.ToUpper().IndexOf(@"\PROMS\"); int idx = curFolder.ToUpper().IndexOf(@"\PROMS\");
txbxPROMSFormatsPath.Text = curFolder.Substring(0, idx); txbxPROMSFormatsPath.Text = curFolder.Substring(0, idx);
} }
@@ -40,9 +35,8 @@ namespace Formats
DirectoryInfo di = new DirectoryInfo(path); DirectoryInfo di = new DirectoryInfo(path);
if (di.Exists == false) //return; if (di.Exists == false) //return;
{ {
DialogResult dlgrslt = DialogResult.No; DialogResult dlgrslt = MessageBox.Show(string.Format("{0} does not exist. Create it?", path), "Create Folder?", MessageBoxButtons.YesNo);
dlgrslt = MessageBox.Show(string.Format("{0} does not exist. Create it?", path), "Create Folder?", MessageBoxButtons.YesNo); if (dlgrslt == DialogResult.Yes)
if (dlgrslt == DialogResult.Yes)
{ {
di.Create(); di.Create();
di.CreateSubdirectory("fmtall"); di.CreateSubdirectory("fmtall");
@@ -86,10 +80,11 @@ namespace Formats
private void btnBrowse_Click(object sender, EventArgs e) private void btnBrowse_Click(object sender, EventArgs e)
{ {
FolderBrowserDialog fbd = new FolderBrowserDialog(); FolderBrowserDialog fbd = new FolderBrowserDialog
{
fbd.SelectedPath = txbxPROMSFormatsPath.Text; SelectedPath = txbxPROMSFormatsPath.Text
if (fbd.ShowDialog() == DialogResult.OK) };
if (fbd.ShowDialog() == DialogResult.OK)
{ {
if (Directory.Exists(fbd.SelectedPath)) txbxPROMSFormatsPath.Text = fbd.SelectedPath + @"\"; if (Directory.Exists(fbd.SelectedPath)) txbxPROMSFormatsPath.Text = fbd.SelectedPath + @"\";
} }
@@ -116,9 +111,9 @@ namespace Formats
if (!txbxPROMSFormatsPath.Text.EndsWith(@"\")) txbxPROMSFormatsPath.Text += @"\"; if (!txbxPROMSFormatsPath.Text.EndsWith(@"\")) txbxPROMSFormatsPath.Text += @"\";
// There should be a "fmtall" and "genmacall" folder in the delelopment project folder // There should be a "fmtall" and "genmacall" folder in the delelopment project folder
// ex: C:\development\PROMS\Formats\fmtall and C:\development\PROMS\Formats\genmacall // ex: ...\PROMS\Formats\fmtall and ...\PROMS\Formats\genmacall
string destFmtallPath = txbxPROMSFormatsPath.Text + @"fmtall\"; string destFmtallPath = $@"{txbxPROMSFormatsPath.Text}fmtall\";
string destGenmacallPath = txbxPROMSFormatsPath.Text + @"genmacall\"; string destGenmacallPath = $@"{txbxPROMSFormatsPath.Text}genmacall\";
string srcFmtallPath = @"..\..\"; // up to levels from startup path string srcFmtallPath = @"..\..\"; // up to levels from startup path
// clear the destination fmtall and genmacall folders // clear the destination fmtall and genmacall folders
@@ -156,14 +151,10 @@ namespace Formats
} }
Properties.Settings.Default.FormatPath = txbxPROMSFormatsPath.Text.Substring(0,txbxPROMSFormatsPath.Text.Length-1); // save the copy format path minus the ending backslash Properties.Settings.Default.FormatPath = txbxPROMSFormatsPath.Text.Substring(0,txbxPROMSFormatsPath.Text.Length-1); // save the copy format path minus the ending backslash
Properties.Settings.Default.Save(); Properties.Settings.Default.Save();
//if(MessageBox.Show("Do you want to end the Format Copier?","Formats Copied.", MessageBoxButtons.YesNo, MessageBoxIcon.Question)== DialogResult.Yes)
Application.Exit();
}
private void buttonX2_Click(object sender, EventArgs e)
{
Application.Exit(); Application.Exit();
} }
} private void buttonX2_Click(object sender, EventArgs e) => Application.Exit();
}
} }
@@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Not modifying Naming Styles")]
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+1
View File
@@ -79,6 +79,7 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="LBComObject.cs" /> <Compile Include="LBComObject.cs" />
<Compile Include="LBObjectExtension.cs" /> <Compile Include="LBObjectExtension.cs" />
<Compile Include="OutlookLBComObject.cs" /> <Compile Include="OutlookLBComObject.cs" />
+51 -148
View File
@@ -1,64 +1,45 @@
using System; using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection; using System.Reflection;
namespace LBOutlookLibrary namespace LBOutlookLibrary
{ {
public abstract partial class LBComObject public abstract partial class LBComObject
{ {
private Object _Item; private object _Item;
internal Object Item internal object Item
{ {
get { return _Item; } get { return _Item; }
set set
{ {
_Item = value; _Item = value;
if (value != null) _MyType = _Item.GetType(); if (value != null) MyType = _Item.GetType();
} }
} }
private Type _MyType;
public Type MyType public Type MyType { get; set; }
{ protected LBComObject() { }
get { return _MyType; }
set { _MyType = value; }
}
protected LBComObject() { }
protected LBComObject(string ProgID) protected LBComObject(string ProgID)
{ {
Type objClassType; Type objClassType;
objClassType = Type.GetTypeFromProgID(ProgID); objClassType = Type.GetTypeFromProgID(ProgID);
Item = Activator.CreateInstance(objClassType); Item = Activator.CreateInstance(objClassType);
} }
protected LBComObject(Object item) protected LBComObject(object item) => Item = item;
{ private object DoInvokeMember(string name, object[] parameters, BindingFlags bf, Binder b)
Item = item;
}
private Object DoInvokeMember(string name, Object[] parameters, BindingFlags bf, Binder b)
{ {
try try
{ {
return _MyType.InvokeMember(name, bf, b, _Item, parameters); return MyType.InvokeMember(name, bf, b, _Item, parameters);
} }
catch (Exception ex) catch (Exception ex)
{ {
throw new Exception(string.Format("LBComObject.DoInvokeMember {0}.{1}", _MyType.Name, name), ex); throw new Exception(string.Format("LBComObject.DoInvokeMember {0}.{1}", MyType.Name, name), ex);
} }
return null;
} }
protected void SetProperty(string propertyName, params Object[] parameters) protected void SetProperty(string propertyName, params object[] parameters) => DoInvokeMember(propertyName, parameters, BindingFlags.SetProperty, null);
{ protected object GetProperty(string propertyName) => DoInvokeMember(propertyName, null, BindingFlags.GetProperty, null);
DoInvokeMember(propertyName, parameters, BindingFlags.SetProperty, null); protected object GetProperty(string propertyName, params object[] parameters) => DoInvokeMember(propertyName, parameters, BindingFlags.GetProperty, null);
} protected object InvokeMethod(string methodName, params object[] parameters)
protected Object GetProperty(string propertyName)
{
return DoInvokeMember(propertyName, null, BindingFlags.GetProperty, null);
}
protected Object GetProperty(string propertyName, params Object[] parameters)
{
return DoInvokeMember(propertyName, parameters, BindingFlags.GetProperty, null);
}
protected Object InvokeMethod(string methodName, params Object[] parameters)
{ {
if (parameters != null) if (parameters != null)
FixParameters(parameters); FixParameters(parameters);
@@ -71,45 +52,15 @@ namespace LBOutlookLibrary
if (parameters[i] is LBComObject) if (parameters[i] is LBComObject)
parameters[i] = (parameters[i] as LBComObject).Item; parameters[i] = (parameters[i] as LBComObject).Item;
} }
protected Object InvokeMethod(string methodName) protected object InvokeMethod(string methodName) => InvokeMethod(methodName, null);
{ }
return InvokeMethod(methodName, null);
}
}
public class LBComObjectList<TList, TItem> : LBComObject
where TList : LBComObjectList<TList, TItem>
where TItem : LBComObject, new()
{
//public new(Object item):base(item){}
public TItem Add()
{
TItem tmp = new TItem();
tmp.Item = InvokeMethod("Add");
return tmp;
}
//public TItem this[int item]
//{
// get
// {
// TItem tmp = new TItem();
// tmp.Item = GetProperty("Item", item);
// return tmp;
// }
//}
}
public partial class LBApplicationClass : LBComObject public partial class LBApplicationClass : LBComObject
{ {
public LBApplicationClass() : base("Outlook.Application") { } public LBApplicationClass() : base("Outlook.Application") { }
public LBApplicationClass(Object item) : base(item) { } public LBApplicationClass(object item) : base(item) { }
public System.Object CreateItem(LBOlItemType ItemType) public object CreateItem(LBOlItemType ItemType) => InvokeMethod("CreateItem", ItemType);
{ public void Quit() => InvokeMethod("Quit");
return InvokeMethod("CreateItem", ItemType); }
}
public void Quit()
{
InvokeMethod("Quit");
}
}
public enum LBOlItemType public enum LBOlItemType
{ {
olMailItem = 0, olMailItem = 0,
@@ -124,13 +75,13 @@ namespace LBOutlookLibrary
public partial class LBMailItem : LBComObject public partial class LBMailItem : LBComObject
{ {
public LBMailItem() { } public LBMailItem() { }
public LBMailItem(Object item) : base(item) { } public LBMailItem(object item) : base(item) { }
} }
public partial class LBMailItemClass : LBComObject public partial class LBMailItemClass : LBComObject
{ {
public LBMailItemClass() { } public LBMailItemClass() { }
public LBMailItemClass(Object item) : base(item) { } public LBMailItemClass(object item) : base(item) { }
public String Body public string Body
{ {
get { return (GetProperty("Body").ToString()); } get { return (GetProperty("Body").ToString()); }
set { SetProperty("Body", value); } set { SetProperty("Body", value); }
@@ -140,29 +91,20 @@ namespace LBOutlookLibrary
get { return (LBOlBodyFormat)GetProperty("BodyFormat"); } get { return (LBOlBodyFormat)GetProperty("BodyFormat"); }
set { SetProperty("BodyFormat", value); } set { SetProperty("BodyFormat", value); }
} }
public LBAttachments Attachments public LBAttachments Attachments => new LBAttachments(GetProperty("Attachments"));
{ public string Subject
get { return new LBAttachments(GetProperty("Attachments")); }
}
public String Subject
{ {
get { return (GetProperty("Subject").ToString()); } get { return (GetProperty("Subject").ToString()); }
set { SetProperty("Subject", value); } set { SetProperty("Subject", value); }
} }
public LBRecipients Recipients public LBRecipients Recipients => new LBRecipients(GetProperty("Recipients"));
{ public string To
get { return new LBRecipients(GetProperty("Recipients")); }
}
public String To
{ {
get { return (GetProperty("To").ToString()); } get { return (GetProperty("To").ToString()); }
set { SetProperty("To", value); } set { SetProperty("To", value); }
} }
public void Send() public void Send() => InvokeMethod("Send");
{ }
InvokeMethod("Send");
}
}
public enum LBOlBodyFormat public enum LBOlBodyFormat
{ {
olFormatUnspecified = 0, olFormatUnspecified = 0,
@@ -173,79 +115,40 @@ namespace LBOutlookLibrary
public partial class LBAttachments : LBComObject public partial class LBAttachments : LBComObject
{ {
public LBAttachments() { } public LBAttachments() { }
public LBAttachments(Object item) : base(item) { } public LBAttachments(object item) : base(item) { }
public int Count public int Count => (GetProperty("Count") as int? ?? 0);
{ public new LBAttachment Item => new LBAttachment(GetProperty("Item"));
get { return (GetProperty("Count") as int? ?? 0); } public LBAttachment Add(object Source) => new LBAttachment(InvokeMethod("Add", Source, Missing.Value, Missing.Value, Missing.Value));
} public LBAttachment Add(object Source, object Type, object Position, object DisplayName)
public LBAttachment Item
{
get { return new LBAttachment(GetProperty("Item")); }
}
public LBAttachment Add(object Source)
{
return new LBAttachment(InvokeMethod("Add", Source, Missing.Value, Missing.Value, Missing.Value));
}
public LBAttachment Add(object Source, object Type, object Position, object DisplayName)
{ {
return new LBAttachment(InvokeMethod("Add", Source, Type, Position, DisplayName)); return new LBAttachment(InvokeMethod("Add", Source, Type, Position, DisplayName));
} }
public void Remove(int Index) public void Remove(int Index) => InvokeMethod("Remove", Index);
{ }
InvokeMethod("Remove", Index);
}
}
public partial class LBRecipients : LBComObject public partial class LBRecipients : LBComObject
{ {
public LBRecipients() { } public LBRecipients() { }
public LBRecipients(Object item) : base(item) { } public LBRecipients(object item) : base(item) { }
public int Count public int Count => (GetProperty("Count") as int? ?? 0);
{ public new LBRecipient Item => new LBRecipient(GetProperty("Item"));
get { return (GetProperty("Count") as int? ?? 0); } public LBRecipient Add(string Name) => new LBRecipient(InvokeMethod("Add", Name));
} public void Remove(int Index) => InvokeMethod("Remove", Index);
public LBRecipient Item public bool ResolveAll() => InvokeMethod("ResolveAll") as bool? ?? false;
{ }
get { return new LBRecipient(GetProperty("Item")); }
}
public LBRecipient Add(string Name)
{
return new LBRecipient(InvokeMethod("Add", Name));
}
public void Remove(int Index)
{
InvokeMethod("Remove", Index);
}
public Boolean ResolveAll()
{
return InvokeMethod("ResolveAll") as Boolean? ?? false;
}
}
public partial class LBAttachment : LBComObject public partial class LBAttachment : LBComObject
{ {
public LBAttachment() { } public LBAttachment() { }
public LBAttachment(Object item) : base(item) { } public LBAttachment(object item) : base(item) { }
public LBOlAttachmentType Type public LBOlAttachmentType Type => (LBOlAttachmentType)GetProperty("Type");
{ }
get { return (LBOlAttachmentType)GetProperty("Type"); }
}
}
public partial class LBRecipient : LBComObject public partial class LBRecipient : LBComObject
{ {
public LBRecipient() { } public LBRecipient() { }
public LBRecipient(Object item) : base(item) { } public LBRecipient(object item) : base(item) { }
public String Address public string Address => (GetProperty("Address").ToString());
{ public string Name => (GetProperty("Name").ToString());
get { return (GetProperty("Address").ToString()); } public bool Resolve() => InvokeMethod("Resolve") as bool? ?? false;
} }
public String Name
{
get { return (GetProperty("Name").ToString()); }
}
public Boolean Resolve()
{
return InvokeMethod("Resolve") as Boolean? ?? false;
}
}
public enum LBOlAttachmentType public enum LBOlAttachmentType
{ {
olByValue = 1, olByValue = 1,
+4 -12
View File
@@ -1,21 +1,13 @@
using System; using System;
using System.Collections.Generic;
using System.Text;
namespace LBOutlookLibrary namespace LBOutlookLibrary
{ {
public partial class LBApplicationClass public partial class LBApplicationClass
{ {
public LBMailItemClass CreateMailItem() public LBMailItemClass CreateMailItem() => new LBMailItemClass(CreateItem(LBOlItemType.olMailItem));
{ }
return new LBMailItemClass(CreateItem(LBOlItemType.olMailItem));
}
}
public partial class LBMailItemClass public partial class LBMailItemClass
{ {
public void AddAttachment(string filename) public void AddAttachment(string filename) => Attachments.Add(filename, LBOlAttachmentType.olByValue, Type.Missing, Type.Missing);
{ }
Attachments.Add(filename, LBOlAttachmentType.olByValue, Type.Missing, Type.Missing);
}
}
} }
+10 -24
View File
@@ -49,19 +49,13 @@ namespace Read64bitRegistryFrom32bitApp
ref uint lpType, ref uint lpType,
System.Text.StringBuilder lpData, System.Text.StringBuilder lpData,
ref uint lpcbData); ref uint lpcbData);
#endregion #endregion
#endregion #endregion
#region Functions #region Functions
static public string GetRegKey64Value(UIntPtr inHive, String inKeyName, String inPropertyName) static public string GetRegKey64Value(UIntPtr inHive, string inKeyName, string inPropertyName) => GetRegKey64Value(inHive, inKeyName, RegSAM.WOW64_64Key, inPropertyName);
{ [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "inHive kept to match dll signature")]
return GetRegKey64Value(inHive, inKeyName, RegSAM.WOW64_64Key, inPropertyName); static public string GetRegKey64Value(UIntPtr inHive, string inKeyName, RegSAM in32or64key, string inPropertyName)
}
static public string GetRegKey32Value(UIntPtr inHive, String inKeyName, String inPropertyName)
{
return GetRegKey64Value(inHive, inKeyName, RegSAM.WOW64_32Key, inPropertyName);
}
static public string GetRegKey64Value(UIntPtr inHive, String inKeyName, RegSAM in32or64key, String inPropertyName)
{ {
int hkey = 0; int hkey = 0;
try try
@@ -80,15 +74,10 @@ namespace Read64bitRegistryFrom32bitApp
if (0 != hkey) RegCloseKey(hkey); if (0 != hkey) RegCloseKey(hkey);
} }
} }
static public bool CheckRegKey64Valid(UIntPtr inHive, String inKeyName) static public bool CheckRegKey64Valid(UIntPtr inHive, string inKeyName) => CheckRegKey64Valid(inHive, inKeyName, RegSAM.WOW64_64Key);
{ static public bool GetRegKey32Valid(UIntPtr inHive, string inKeyName) => CheckRegKey64Valid(inHive, inKeyName, RegSAM.WOW64_32Key);
return CheckRegKey64Valid(inHive, inKeyName, RegSAM.WOW64_64Key); [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "inHive kept to match dll signature")]
} static public bool CheckRegKey64Valid(UIntPtr inHive, string inKeyName, RegSAM in32or64key)
static public bool GetRegKey32Valid(UIntPtr inHive, String inKeyName)
{
return CheckRegKey64Valid(inHive, inKeyName, RegSAM.WOW64_32Key);
}
static public bool CheckRegKey64Valid(UIntPtr inHive, String inKeyName, RegSAM in32or64key)
{ {
int hkey = 0; int hkey = 0;
try try
@@ -103,8 +92,5 @@ namespace Read64bitRegistryFrom32bitApp
} }
} }
#endregion #endregion
#region Enums
#endregion
} }
} }
@@ -659,7 +659,16 @@ namespace ROEditor
{ {
elem.SetAttribute("AccPageIDPrefix",this.tbPrefix.Text); elem.SetAttribute("AccPageIDPrefix",this.tbPrefix.Text);
modified=true; modified=true;
}
if (myrodb.IsDuplicateAccPagePrefix(elem, tbPrefix.Text))
{
tbPrefix.Text = origPrefix;
elem.SetAttribute("AccPageIDPrefix", origPrefix);
modified = false;
MessageBox.Show($"The Prefix field used for the \"Accessory Pages Access\" values should be unique. The fields used in these values can be found under \"Properties\" of an RO Group. If these are not unique, you may have trouble utilizing these ROs within Word Sections in PROMS. Cannot save.", "Problem saving data");
return;
}
}
bool success=true; bool success=true;
if (modified==true) success = myrodb.RODB_WriteRO(elem); if (modified==true) success = myrodb.RODB_WriteRO(elem);
if (modified == true && success == true && modaccpageid==true) if (modified == true && success == true && modaccpageid==true)
@@ -336,7 +336,8 @@ namespace RODBInterface
public abstract bool RODB_GetGroupAndSubgroups(VlnXmlElement node, StringBuilder sb); public abstract bool RODB_GetGroupAndSubgroups(VlnXmlElement node, StringBuilder sb);
public abstract bool RODB_GetChildData(VlnXmlElement node, bool CheckChildCount); public abstract bool RODB_GetChildData(VlnXmlElement node, bool CheckChildCount);
public abstract bool IsDuplicateAccPageID(VlnXmlElement ro, string newacc); public abstract bool IsDuplicateAccPageID(VlnXmlElement ro, string newacc);
public abstract VlnXmlElement RODB_ReadRO(string tbl, string recid); public abstract bool IsDuplicateAccPagePrefix(VlnXmlElement ro, string pfix);
public abstract VlnXmlElement RODB_ReadRO(string tbl, string recid);
public abstract bool RODB_WriteRO(VlnXmlElement ro, bool movedRO = false); public abstract bool RODB_WriteRO(VlnXmlElement ro, bool movedRO = false);
public abstract bool RODB_InsertRO(VlnXmlElement ro); public abstract bool RODB_InsertRO(VlnXmlElement ro);
public abstract ushort RODB_GetFieldType(VlnXmlElement elem, string TableName, string Fld); public abstract ushort RODB_GetFieldType(VlnXmlElement elem, string TableName, string Fld);
@@ -2026,23 +2027,23 @@ namespace RODBInterface
return true; return true;
} }
public override bool IsDuplicateAccPageID(VlnXmlElement ro, string newacc) public override bool IsDuplicateAccPageID(VlnXmlElement ro, string newacc)
{ {
string strcheck, inacc = null; string strcheck, inacc = null;
bool isdup = false; bool isdup = false;
int indx = newacc.IndexOf("'"); int indx = newacc.IndexOf("'");
if (indx >= 0) if (indx >= 0)
inacc = newacc.Insert(indx, "'"); inacc = newacc.Insert(indx, "'");
else else
inacc = newacc; inacc = newacc;
strcheck = "SELECT Count(RecID) AS CNT FROM " + ro.GetAttribute("Table") + " WHERE AccPageID = '" + inacc + "'"; strcheck = "SELECT Count(RecID) AS CNT FROM " + ro.GetAttribute("Table") + " WHERE AccPageID = '" + inacc + "'";
if (ro.HasAttribute("RecID")) // new ro's don't have recid defined yet before this test. if (ro.HasAttribute("RecID")) // new ro's don't have recid defined yet before this test.
strcheck = strcheck + " AND (NOT RecID = '" + ro.GetAttribute("RecID") + "')"; strcheck = strcheck + " AND (NOT RecID = '" + ro.GetAttribute("RecID") + "')";
try try
{ {
DBE.Command(strcheck); DBE.Command(strcheck);
DBE.Reader(); DBE.Reader();
} }
catch (Exception e) catch (Exception e)
{ {
@@ -2062,7 +2063,69 @@ namespace RODBInterface
return isdup; return isdup;
} }
public override VlnXmlElement RODB_ReadRO(string tbl, string recid) //C2026-058 Check all Tables for if Acc Page Id Prefix is Used More than Once
public override bool IsDuplicateAccPagePrefix(VlnXmlElement ro, string pfix)
{
// Loop through and build sql
StringBuilder strGetData = new StringBuilder();
List<string> all_tables = RODB_GetAllTables();
if (all_tables.Count == 0) return false;
foreach (string table in all_tables)
{
//if not the first item, add a union all
if (strGetData.Length > 0)
{ strGetData.Append(" UNION ALL "); }
//All info's containing AccPageIDPrefix should be RecType 3 (Group)
//Note if you use LIKE or ALIKE
// WHERE Info ALIKE '%AccPageIDPrefix%'"
// WHERE Info LIKE '*AccPageIDPrefix*'
//Then it truncates Info only pulling back the 1st 255 characters
strGetData.Append($"SELECT Info, '{table}' AS TBL FROM {table} WHERE RecType = 3");
}
try
{
DBE.Command(strGetData.ToString());
DBE.Reader();
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Error getting Acc Page ID Prefix Data");
return true;
}
while (DBE.Read())
{
string Info = DBE.GetString(0);
string tbl = DBE.GetString(1);
using (XmlTextReader rdr = new XmlTextReader(Info, XmlNodeType.Element, null))
{
VlnXmlElement retele = null;
try
{
XmlNode nd = ROXml.ReadNode(rdr);
retele = (VlnXmlElement)nd;
}
catch
{
//do nothing not a valid item to check
}
if (retele != null && tbl != ro.GetAttribute("Table") && retele.GetAttribute("AccPageIDPrefix").ToLower() == pfix.ToLower())
{
return true; //another table contains the prefix - return true
}
}
}
DBE.CommandDispose();
DBE.ReaderClose();
return false;
}
public override VlnXmlElement RODB_ReadRO(string tbl, string recid)
{ {
ShowCount.ReadRo++; ShowCount.ReadRo++;
VlnXmlElement retele = null; VlnXmlElement retele = null;
@@ -3104,6 +3167,33 @@ namespace RODBInterface
} }
} }
} }
//C2026-058 Check all Tables for if Acc Page Id Prefix is Used More than Once
//Get all Tables in the MS Access DB
public List<string> RODB_GetAllTables()
{
List<string> tables = new List<string>();
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(strDatabaseConnectionCommand))
{
connection.Open();
using (System.Data.OleDb.OleDbCommand command = connection.CreateCommand())
{
using (DataTable schema = connection.GetSchema("Tables"))
{
foreach (DataRow row in schema.Rows)
{
if (row["TABLE_TYPE"].ToString() == "TABLE")
{
tables.Add(row["TABLE_NAME"].ToString());
}
}
}
}
}
return tables;
}
} }
} }
@@ -50,7 +50,7 @@ namespace RODBInterface
SqlConnection cn = new SqlConnection(SqlConnectionStr); SqlConnection cn = new SqlConnection(SqlConnectionStr);
try try
{ {
cn.Open(); if (cn.State == System.Data.ConnectionState.Closed) cn.Open();
if (OnlyConnectOnce && ROAPP_SqlConnectionOnce == null) ROAPP_SqlConnectionOnce = cn; if (OnlyConnectOnce && ROAPP_SqlConnectionOnce == null) ROAPP_SqlConnectionOnce = cn;
return cn; return cn;
} }
@@ -1357,13 +1357,13 @@ namespace RODBInterface
{ {
command.CommandText = "getCountRecidByAccidNotRecid"; command.CommandText = "getCountRecidByAccidNotRecid";
command.Parameters.AddWithValue("RecID", ro.GetAttribute("RecID")); command.Parameters.AddWithValue("RecID", ro.GetAttribute("RecID"));
} }
else else
command.CommandText = "getCountRecidByAccid"; command.CommandText = "getCountRecidByAccid";
command.Parameters.AddWithValue("@AccPageID", inacc); command.Parameters.AddWithValue("@AccPageID", inacc);
command.Parameters.AddWithValue("@ROTable", ro.GetAttribute("Table")); command.Parameters.AddWithValue("@ROTable", ro.GetAttribute("Table"));
using (SqlDataReader reader = command.ExecuteReader()) using (SqlDataReader reader = command.ExecuteReader())
{ {
if (reader.Read()) if (reader.Read())
{ {
@@ -1383,7 +1383,38 @@ namespace RODBInterface
} }
return isdup; return isdup;
} }
public override VlnXmlElement RODB_ReadRO(string tbl, string recid) public override bool IsDuplicateAccPagePrefix(VlnXmlElement ro, string pfix)
{
try
{
using (SqlConnection cn = ROAPP_SqlConnection)
{
SqlCommand command = new SqlCommand();
command.Connection = cn;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "checkAccPagePrefixUsed";
command.Parameters.AddWithValue("@Prefix", pfix);
command.Parameters.AddWithValue("@ROTable", ro.GetAttribute("Table"));
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
int cnt = reader.GetInt32(0);
if (cnt > 0)
return true;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error on IsDuplicateAccPagePrefix");
return true;
}
return false;
}
public override VlnXmlElement RODB_ReadRO(string tbl, string recid)
{ {
ShowCount.ReadRo++; ShowCount.ReadRo++;
VlnXmlElement retele = null; VlnXmlElement retele = null;
@@ -19,11 +19,6 @@
*********************************************************************************************/ *********************************************************************************************/
using System; using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
//using ROProfiler; //don't forget to add VlnProfiler to the reference list
namespace VlnStatus namespace VlnStatus
{ {
@@ -35,11 +30,6 @@ namespace VlnStatus
private System.Windows.Forms.ProgressBar progressBar1; private System.Windows.Forms.ProgressBar progressBar1;
private System.Windows.Forms.Label lblBar; private System.Windows.Forms.Label lblBar;
private System.Windows.Forms.Label StatMsg; private System.Windows.Forms.Label StatMsg;
// private string strLblLast="";
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public StatusBarFrm() public StatusBarFrm()
{ {
@@ -61,21 +51,6 @@ namespace VlnStatus
Text = StatusBoxTitle; Text = StatusBoxTitle;
} }
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code #region Windows Form Designer generated code
/// <summary> /// <summary>
/// Required method for Designer support - do not modify /// Required method for Designer support - do not modify
@@ -190,14 +165,6 @@ namespace VlnStatus
{ {
lblBar.Text = (Math.Round((decimal)(progressBar1.Value * 100) / progressBar1.Maximum)).ToString(); lblBar.Text = (Math.Round((decimal)(progressBar1.Value * 100) / progressBar1.Maximum)).ToString();
lblBar.Text += "% Complete"; lblBar.Text += "% Complete";
// if( lblBar.Text != strLblLast)
// {
// Profiler.Start("UpdateLabel");
lblBar.Refresh();
// lblBar.Update();
// Profiler.End("UpdateLabel");
// }
// strLblLast = lblBar.Text;
} }
public string StatusMessage public string StatusMessage
@@ -209,10 +176,7 @@ namespace VlnStatus
set set
{ {
StatMsg.Text = value; StatMsg.Text = value;
// Profiler.Start("StatusMessage");
StatMsg.Refresh(); StatMsg.Refresh();
// StatMsg.Update();
// Profiler.End("StatusMessage");
} }
} }
@@ -17,12 +17,6 @@
* Added overbounds check * Added overbounds check
*********************************************************************************************/ *********************************************************************************************/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace VlnStatus namespace VlnStatus
{ {
/// <summary> /// <summary>
@@ -31,10 +25,6 @@ namespace VlnStatus
public class StatusMessageFrm : System.Windows.Forms.Form public class StatusMessageFrm : System.Windows.Forms.Form
{ {
private System.Windows.Forms.Label lblStatMsg; private System.Windows.Forms.Label lblStatMsg;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public StatusMessageFrm() public StatusMessageFrm()
{ {
@@ -54,21 +44,6 @@ namespace VlnStatus
Text = StatTitle; Text = StatTitle;
} }
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code #region Windows Form Designer generated code
/// <summary> /// <summary>
/// Required method for Designer support - do not modify /// Required method for Designer support - do not modify
@@ -33,7 +33,7 @@ namespace VlnStatus
/// </summary> /// </summary>
public class VlnStatusBar public class VlnStatusBar
{ {
StatusBarFrm StatBar; readonly StatusBarFrm StatBar;
private int Cnt; private int Cnt;
// Create a status window with the default title of "Status" // Create a status window with the default title of "Status"
@@ -53,8 +53,6 @@ namespace VlnStatus
// Increament the the status bar by the passed in value. // Increament the the status bar by the passed in value.
public void PerformStep(int val) public void PerformStep(int val)
{ {
// StatBar.Value = val;
// Cnt = val;
BarValue = val; BarValue = val;
StatBar.PerformStep(); StatBar.PerformStep();
} }
@@ -62,7 +60,6 @@ namespace VlnStatus
// Increament the the status bar by one // Increament the the status bar by one
public void PerformStep() public void PerformStep()
{ {
// StatBar.Value = StatBar.Value + 1;
Cnt++; Cnt++;
BarValue = Cnt; BarValue = Cnt;
StatBar.PerformStep(); StatBar.PerformStep();
@@ -13,8 +13,6 @@
* Added overbounds check * Added overbounds check
*********************************************************************************************/ *********************************************************************************************/
using System;
namespace VlnStatus namespace VlnStatus
{ {
/// <summary> /// <summary>
@@ -28,7 +26,7 @@ namespace VlnStatus
/// </summary> /// </summary>
public class VlnStatusMessage public class VlnStatusMessage
{ {
StatusMessageFrm StatusMessageBox; readonly StatusMessageFrm StatusMessageBox;
// Create a status window with the default title of "Status" // Create a status window with the default title of "Status"
public VlnStatusMessage() public VlnStatusMessage()
@@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Not modifying Naming Styles")]
-3
View File
@@ -1,7 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
namespace RoAccessToSql namespace RoAccessToSql
+96 -131
View File
@@ -1,16 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data; using System.Data;
using System.IO; using System.IO;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Data.OleDb; using System.Data.OleDb;
using Volian.Base.Library;
[assembly: log4net.Config.XmlConfigurator(Watch = true)] [assembly: log4net.Config.XmlConfigurator(Watch = true)]
@@ -33,25 +27,11 @@ namespace RoAccessToSql
public partial class RoAccessToSql : Form public partial class RoAccessToSql : Form
{ {
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private string _MSAccessPath = null;
public string MSAccessPath public string MSAccessPath { get; set; } = null;
{ public string SqlServerName { get; set; } = null;
get { return _MSAccessPath; } public string SqlDatabaseName { get; set; } = null;
set { _MSAccessPath = value; } readonly bool _Initializing = false;
}
private string _SqlServerName = null;
public string SqlServerName
{
get { return _SqlServerName; }
set { _SqlServerName = value; }
}
private string _SqlDatabaseName = null;
public string SqlDatabaseName
{
get { return _SqlDatabaseName; }
set { _SqlDatabaseName = value; }
}
bool _Initializing = false;
public RoAccessToSql(string[] args) public RoAccessToSql(string[] args)
{ {
@@ -66,7 +46,7 @@ namespace RoAccessToSql
} }
else if (parm.StartsWith("/sqldb=")) else if (parm.StartsWith("/sqldb="))
{ {
SqlDatabaseName = parm.Substring(7) + "_RO"; SqlDatabaseName = $"{parm.Substring(7)}_RO";
} }
else if (parm.StartsWith("/server=")) else if (parm.StartsWith("/server="))
{ {
@@ -92,7 +72,7 @@ namespace RoAccessToSql
if (UserInRoEditor()) this.Close(); if (UserInRoEditor()) this.Close();
tbSqlDbName.Text = SqlDatabaseName; tbSqlDbName.Text = SqlDatabaseName;
_TmpFileForConnectStr = Path.GetTempPath(); _TmpFileForConnectStr = Path.GetTempPath();
_TmpFileForConnectStr = _TmpFileForConnectStr + @"\PromsConnect.txt"; _TmpFileForConnectStr += @"\PromsConnect.txt";
File.Delete(_TmpFileForConnectStr); File.Delete(_TmpFileForConnectStr);
_Initializing = false; _Initializing = false;
} }
@@ -100,10 +80,10 @@ namespace RoAccessToSql
private bool UserInRoEditor() private bool UserInRoEditor()
{ {
FileInfo fiown = null; FileInfo fiown = null;
FileStream fsown = null; FileStream fsown;
// The following code was taken from the roeditor. It uses the 'RoEditor.own' file to assure that // The following code was taken from the roeditor. It uses the 'RoEditor.own' file to assure that
// no one is in the roeditor. This file is located in the microsoft access database directory. // no one is in the roeditor. This file is located in the microsoft access database directory.
try try
{ {
string filename = MSAccessPath + @"\RoEditor.own"; string filename = MSAccessPath + @"\RoEditor.own";
fiown = new FileInfo(filename); fiown = new FileInfo(filename);
@@ -119,7 +99,7 @@ namespace RoAccessToSql
fsown = fiown.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); fsown = fiown.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
TextReader tr1 = new StreamReader(fsown); TextReader tr1 = new StreamReader(fsown);
string who1 = tr1.ReadToEnd(); string who1 = tr1.ReadToEnd();
MessageBox.Show(ex.Message + "\r\n\r\n" + who1, "RO Editor In Use", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); MessageBox.Show($"{ex.Message}\r\n\r\n{who1}", "RO Editor In Use", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
} }
fsown = fiown.Open(FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite); fsown = fiown.Open(FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite);
TextReader tr = new StreamReader(fsown); TextReader tr = new StreamReader(fsown);
@@ -142,8 +122,8 @@ namespace RoAccessToSql
tw.WriteLine("Current User: {0}, Date and Time Started: {1}", Environment.UserName.ToUpper(), DateTime.Now.ToString("MM/dd/yyyy @ hh:mm")); tw.WriteLine("Current User: {0}, Date and Time Started: {1}", Environment.UserName.ToUpper(), DateTime.Now.ToString("MM/dd/yyyy @ hh:mm"));
tw.Flush(); tw.Flush();
} }
catch (IOException ex) catch (IOException)
{ {
fsown = fiown.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); fsown = fiown.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
TextReader tr = new StreamReader(fsown); TextReader tr = new StreamReader(fsown);
string who = tr.ReadToEnd(); string who = tr.ReadToEnd();
@@ -154,25 +134,20 @@ namespace RoAccessToSql
} }
return false; return false;
} }
static string _ErrorLogFileName;
public static string ErrorLogFileName public static string ErrorLogFileName { get; set; }
{ // make error log file name (uses same logic as proms error log)
get { return _ErrorLogFileName; } static bool ChangeLogFileName(string AppenderName, string NewFilename)
set { _ErrorLogFileName = value; }
}
// make error log file name (uses same logic as proms error log)
static bool ChangeLogFileName(string AppenderName, string NewFilename)
{ {
log4net.Repository.ILoggerRepository RootRep; log4net.Repository.ILoggerRepository RootRep;
RootRep = log4net.LogManager.GetRepository(); RootRep = log4net.LogManager.GetRepository();
foreach (log4net.Appender.IAppender iApp in RootRep.GetAppenders()) foreach (log4net.Appender.IAppender iApp in RootRep.GetAppenders())
{ {
if (iApp.Name.CompareTo(AppenderName) == 0 if (iApp.Name.CompareTo(AppenderName) == 0
&& iApp is log4net.Appender.FileAppender) && iApp is log4net.Appender.FileAppender fApp)
{ {
log4net.Appender.FileAppender fApp = (log4net.Appender.FileAppender)iApp;
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
fApp.File = folderPath + @"\VEPROMS\" + (Volian.Base.Library.VlnSettings.GetCommand("prefix", "") + "_").TrimStart("_".ToCharArray()) + NewFilename; fApp.File = $@"{folderPath}\VEPROMS\{($"{Volian.Base.Library.VlnSettings.GetCommand("prefix", "")}_").TrimStart("_".ToCharArray())}{NewFilename}";
ErrorLogFileName = fApp.File; ErrorLogFileName = fApp.File;
fApp.ActivateOptions(); fApp.ActivateOptions();
return true; return true;
@@ -189,7 +164,7 @@ namespace RoAccessToSql
if (Directory.Exists(fbd.SelectedPath)) if (Directory.Exists(fbd.SelectedPath))
tbAccessPath.Text = fbd.SelectedPath; tbAccessPath.Text = fbd.SelectedPath;
else else
MessageBox.Show("Path doesn't exist " + tbAccessPath.Text); MessageBox.Show($"Path doesn't exist {tbAccessPath.Text}");
} }
} }
// Convert the data // Convert the data
@@ -212,7 +187,7 @@ namespace RoAccessToSql
{ {
DateTime dtSunday = DateTime.Now.AddDays(-((int)DateTime.Now.DayOfWeek)); DateTime dtSunday = DateTime.Now.AddDays(-((int)DateTime.Now.DayOfWeek));
ChangeLogFileName("LogFileAppender", SqlDatabaseName + " " + dtSunday.ToString("yyyyMMdd") + " ErrorLog.txt"); ChangeLogFileName("LogFileAppender", $"{SqlDatabaseName} {dtSunday:yyyyMMdd} ErrorLog.txt");
_MyLog.InfoFormat("\r\nSession Beginning\r\n<===={0}[SQL:{1:yyMM.ddHH}]====== User: {2}/{3} Started {4} ===============>{5}" _MyLog.InfoFormat("\r\nSession Beginning\r\n<===={0}[SQL:{1:yyMM.ddHH}]====== User: {2}/{3} Started {4} ===============>{5}"
, Application.ProductVersion, RevDate, DateTime.Now, Environment.UserDomainName, Environment.UserName, DateTime.Now.ToString("dddd MMMM d, yyyy h:mm:ss tt"), ""); , Application.ProductVersion, RevDate, DateTime.Now, Environment.UserDomainName, Environment.UserName, DateTime.Now.ToString("dddd MMMM d, yyyy h:mm:ss tt"), "");
} }
@@ -229,7 +204,7 @@ namespace RoAccessToSql
if (sqlConnection.State == ConnectionState.Open) if (sqlConnection.State == ConnectionState.Open)
{ {
// now try to open access db: // now try to open access db:
string strDatabaseConnectionCommand = "Provider=Microsoft.ACE.OLEDB.12.0;Password=\"\";User ID=Admin;Data Source=" + MSAccessPath + "\\ROMaster.mdb;Mode=Share Deny None;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"; string strDatabaseConnectionCommand = $"Provider=Microsoft.ACE.OLEDB.12.0;Password=\"\";User ID=Admin;Data Source={MSAccessPath}\\ROMaster.mdb;Mode=Share Deny None;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
using (OleDbConnection accessConnection = new OleDbConnection(strDatabaseConnectionCommand)) using (OleDbConnection accessConnection = new OleDbConnection(strDatabaseConnectionCommand))
{ {
try try
@@ -251,13 +226,13 @@ namespace RoAccessToSql
} }
else else
{ {
_MyLog.Error("SQL Connection is not open. Check connection string: " + tbSqlDbName.Text); _MyLog.Error($"SQL Connection is not open. Check connection string: {tbSqlDbName.Text}");
MessageBox.Show("Check connection string: " + tbSqlDbName.Text, "SQL Connection is not open."); MessageBox.Show($"Check connection string: {tbSqlDbName.Text}", "SQL Connection is not open.");
} }
} }
catch (SqlException ex) catch (SqlException ex)
{ {
_MyLog.Error("SQL Connection is not open. Check connection string: " + tbSqlDbName.Text); _MyLog.Error($"SQL Connection is not open. Check connection string: {tbSqlDbName.Text}");
MessageBox.Show(ex.Message, "Unknown error when migrating RO data from MS Access to SQL"); MessageBox.Show(ex.Message, "Unknown error when migrating RO data from MS Access to SQL");
} }
} }
@@ -274,11 +249,10 @@ namespace RoAccessToSql
lastTimeDbs = ProgressBarUpdate(pBarDbs, null, 0, 1, 0, 0, lastTimeDbs, false); lastTimeDbs = ProgressBarUpdate(pBarDbs, null, 0, 1, 0, 0, lastTimeDbs, false);
lastTimeRos = ProgressBarUpdate(pBarROs, null, 0, maxCntRo, 0, 0, lastTimeRos, false); lastTimeRos = ProgressBarUpdate(pBarROs, null, 0, maxCntRo, 0, 0, lastTimeRos, false);
lastTimeDbs = ProgressBarUpdate(pBarDbs, "ROMaster Table", 0, 5, 0, 1, lastTimeDbs, false); lastTimeDbs = ProgressBarUpdate(pBarDbs, "ROMaster Table", 0, 5, 0, 1, lastTimeDbs, false);
OleDbDataReader reader = null; OleDbCommand command = new OleDbCommand("select * from ROMaster", accessConnection);
OleDbCommand command = new OleDbCommand("select * from ROMaster", accessConnection); OleDbDataReader reader = command.ExecuteReader();
reader = command.ExecuteReader(); // Do access's romaster table first so that the list of other tables to process is found. While doing this, migrate this table's data.
// Do access's romaster table first so that the list of other tables to process is found. While doing this, migrate this table's data. int cntRo = 0;
int cntRo = 0;
int cntDb = 0; int cntDb = 0;
int maxCntDb = 0; int maxCntDb = 0;
while (reader.Read()) // reading from Access Database while (reader.Read()) // reading from Access Database
@@ -303,13 +277,12 @@ namespace RoAccessToSql
maxCntDb++; maxCntDb++;
} }
} }
lastTimeRos = ProgressBarUpdate(pBarROs, "ROMaster", 0, maxCntRo, maxCntRo, 1, lastTimeRos, true); ProgressBarUpdate(pBarROs, "ROMaster", 0, maxCntRo, maxCntRo, 1, lastTimeRos, true);
lastTimeDbs = ProgressBarUpdate(pBarDbs, null, 0, maxCntDb, 0, 0, lastTimeDbs, false); lastTimeDbs = ProgressBarUpdate(pBarDbs, null, 0, maxCntDb, 0, 0, lastTimeDbs, false);
reader.Close(); reader.Close();
reader = null;
// now migrate all the tables that were found
// now migrate all the tables that were found foreach (string tableName in allTables)
foreach (string tableName in allTables)
{ {
lastTimeRos = DateTime.Now; lastTimeRos = DateTime.Now;
cntRo = 0; cntRo = 0;
@@ -318,7 +291,7 @@ namespace RoAccessToSql
lastTimeRos = ProgressBarUpdate(pBarROs, null, 0, maxCntRo, 0, 0, lastTimeRos, true); lastTimeRos = ProgressBarUpdate(pBarROs, null, 0, maxCntRo, 0, 0, lastTimeRos, true);
lastTimeDbs = ProgressBarUpdate(pBarDbs, allTablesText[cntDb], 0, maxCntDb, cntDb, 1, lastTimeDbs, false); lastTimeDbs = ProgressBarUpdate(pBarDbs, allTablesText[cntDb], 0, maxCntDb, cntDb, 1, lastTimeDbs, false);
command = null; command = null;
command = new OleDbCommand("select * from " + tableName, accessConnection); command = new OleDbCommand($"select * from {tableName}", accessConnection);
reader = command.ExecuteReader(); reader = command.ExecuteReader();
while (reader.Read()) // read all of the records from the current access table while (reader.Read()) // read all of the records from the current access table
{ {
@@ -338,7 +311,7 @@ namespace RoAccessToSql
reader = null; reader = null;
lastTimeRos = ProgressBarUpdate(pBarROs, tableName, 0, maxCntRo, maxCntRo, 1, lastTimeRos, false); lastTimeRos = ProgressBarUpdate(pBarROs, tableName, 0, maxCntRo, maxCntRo, 1, lastTimeRos, false);
} }
lastTimeDbs = ProgressBarUpdate(pBarDbs, allTablesText[maxCntDb - 1], 0, maxCntDb, maxCntDb, 1, lastTimeDbs, false); ProgressBarUpdate(pBarDbs, allTablesText[maxCntDb - 1], 0, maxCntDb, maxCntDb, 1, lastTimeDbs, false);
pBarDbs.Text = "Referenced Object Tables Migration Completed"; pBarDbs.Text = "Referenced Object Tables Migration Completed";
pBarROs.Text = "Referenced Objects Migration Completed"; pBarROs.Text = "Referenced Objects Migration Completed";
btnConvert.Enabled = false; btnConvert.Enabled = false;
@@ -357,7 +330,7 @@ namespace RoAccessToSql
string dt = string.Format("{0:yyyyMMddHHmmss}", System.DateTime.Now); string dt = string.Format("{0:yyyyMMddHHmmss}", System.DateTime.Now);
string strInsert = "INSERT INTO ROMaster (RecID, RecType, ModDateTime, Info) "; string strInsert = "INSERT INTO ROMaster (RecID, RecType, ModDateTime, Info) ";
// note that '8' for rectype flags database converted: // note that '8' for rectype flags database converted:
strInsert = strInsert + " VALUES ('09999999', 8, '" + dt + "', '" + _SqlConnectStr + "');"; strInsert = $"{strInsert} VALUES ('09999999', 8, '{dt}', '{_SqlConnectStr}');";
OleDbCommand command = new OleDbCommand(strInsert, accessConnection); OleDbCommand command = new OleDbCommand(strInsert, accessConnection);
reader = command.ExecuteReader(); reader = command.ExecuteReader();
if (reader.Read()) return; if (reader.Read()) return;
@@ -367,7 +340,7 @@ namespace RoAccessToSql
MessageBox.Show(e.Message, "Error on insert to flag migration completed"); MessageBox.Show(e.Message, "Error on insert to flag migration completed");
} }
} }
private string _TmpFileForConnectStr = null; private readonly string _TmpFileForConnectStr = null;
private void WriteSqlPathToTempFile() private void WriteSqlPathToTempFile()
{ {
System.IO.File.WriteAllText(_TmpFileForConnectStr, _SqlConnectStr); System.IO.File.WriteAllText(_TmpFileForConnectStr, _SqlConnectStr);
@@ -375,13 +348,12 @@ namespace RoAccessToSql
// the following is used to update the progress bars, it finds how many records are in a table. // the following is used to update the progress bars, it finds how many records are in a table.
private int GetRecordCountForTable(string tableName, OleDbConnection accessConnection) private int GetRecordCountForTable(string tableName, OleDbConnection accessConnection)
{ {
OleDbDataReader reader = null; int retcnt = 100;
int retcnt = 100;
try try
{ {
OleDbCommand command = new OleDbCommand("SELECT COUNT (RecID) as cnt FROM " + tableName, accessConnection); OleDbCommand command = new OleDbCommand($"SELECT COUNT (RecID) as cnt FROM {tableName}", accessConnection);
reader = command.ExecuteReader(); OleDbDataReader reader = command.ExecuteReader();
if (reader.Read()) if (reader.Read())
{ {
retcnt = reader.GetInt32(0); retcnt = reader.GetInt32(0);
} }
@@ -393,7 +365,8 @@ namespace RoAccessToSql
} }
return retcnt; return retcnt;
} }
DateTime ProgressBarUpdate(DevComponents.DotNetBar.Controls.ProgressBarX pbi, string msg, int min, int max, int progress, int flag, DateTime lastUpdateDisplay, bool doTimeCheck) [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Keeping min for Debugging")]
DateTime ProgressBarUpdate(DevComponents.DotNetBar.Controls.ProgressBarX pbi, string msg, int min, int max, int progress, int flag, DateTime lastUpdateDisplay, bool doTimeCheck)
{ {
if (flag == 0) // setup if (flag == 0) // setup
pbi.Maximum = max; pbi.Maximum = max;
@@ -412,11 +385,13 @@ namespace RoAccessToSql
{ {
try try
{ {
SqlCommand command = new SqlCommand(); SqlCommand command = new SqlCommand
command.Connection = sqlConnection; {
command.CommandType = CommandType.StoredProcedure; Connection = sqlConnection,
command.CommandText = "insertAllRectypes"; CommandType = CommandType.StoredProcedure,
command.Parameters.AddWithValue("@RecType", RecType); CommandText = "insertAllRectypes"
};
command.Parameters.AddWithValue("@RecType", RecType);
if (AccPageID == null || AccPageID == "") if (AccPageID == null || AccPageID == "")
command.Parameters.AddWithValue("@AccPageID", string.Empty); command.Parameters.AddWithValue("@AccPageID", string.Empty);
else else
@@ -428,9 +403,8 @@ namespace RoAccessToSql
command.Parameters.AddWithValue("@ModDateTime", ModDateTime); command.Parameters.AddWithValue("@ModDateTime", ModDateTime);
using (SqlDataReader reader = command.ExecuteReader()) using (SqlDataReader reader = command.ExecuteReader())
{ {
bool success = true; }
} command = null;
command = null;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -438,32 +412,15 @@ namespace RoAccessToSql
_MyLog.Error(msg, ex); _MyLog.Error(msg, ex);
} }
} }
private void btnExit_Click(object sender, EventArgs e) private void btnExit_Click(object sender, EventArgs e) => this.Close();
{ // the user selected the button to test the sql connection string
this.Close(); private void btnTestConnect_Click(object sender, EventArgs e) => TestConnection(true);
}
// the user selected the button to test the sql connection string public static DateTime RevDate { get; set; } = DateTime.MinValue;
private void btnTestConnect_Click(object sender, EventArgs e) public static string RevDescription { get; set; } = "Unknown";
{ // This is called to test the sql connection, either from the button when pressed by user, or from the convert button, before
TestConnection(true); // the conversion is done. See below for what is checked
} private bool TestConnection(bool notifyUser)
// the RevDate & RevDescription are found in a stored procedure, vesp_GetSQLCodeRevision, in the sql database. These get updated each
// time a revision is made to the sql database using ROFixes.sql script.
private static DateTime _RevDate = DateTime.MinValue;
public static DateTime RevDate
{
get { return _RevDate; }
set { _RevDate = value; }
}
private static string _RevDescription = "Unknown";
public static string RevDescription
{
get { return _RevDescription; }
set { _RevDescription = value; }
}
// This is called to test the sql connection, either from the button when pressed by user, or from the convert button, before
// the conversion is done. See below for what is checked
private bool TestConnection(bool notifyUser)
{ {
// The following conditions must be true in order to migrate the ro data to sql. Only the first condition can be // The following conditions must be true in order to migrate the ro data to sql. Only the first condition can be
// tested in this executable since the roall database is interfaced to by the roeditor & the program that migrates the data. // tested in this executable since the roall database is interfaced to by the roeditor & the program that migrates the data.
@@ -485,12 +442,14 @@ namespace RoAccessToSql
connection.Open(); connection.Open();
if (connection.State == ConnectionState.Open) if (connection.State == ConnectionState.Open)
{ {
// now see if there is an roall table // now see if there is an roall table
SqlCommand command = new SqlCommand(); SqlCommand command = new SqlCommand
command.Connection = connection; {
command.CommandType = CommandType.Text; Connection = connection,
command.CommandText = "(SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ROALL]') AND type in (N'U'))"; CommandType = CommandType.Text,
using (SqlDataReader reader = command.ExecuteReader()) CommandText = "(SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ROALL]') AND type in (N'U'))"
};
using (SqlDataReader reader = command.ExecuteReader())
{ {
if (reader.Read()) if (reader.Read())
{ {
@@ -509,11 +468,13 @@ namespace RoAccessToSql
{ {
// now see if there are stored procedures: // now see if there are stored procedures:
command = null; // reset command command = null; // reset command
command = new SqlCommand(); command = new SqlCommand
command.Connection = connection; {
command.CommandType = CommandType.Text; Connection = connection,
command.CommandText = "(SELECT count(*) FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteByROTable]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)"; CommandType = CommandType.Text,
using (SqlDataReader reader = command.ExecuteReader()) CommandText = "(SELECT count(*) FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteByROTable]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)"
};
using (SqlDataReader reader = command.ExecuteReader())
{ {
if (reader.Read()) if (reader.Read())
{ {
@@ -533,11 +494,13 @@ namespace RoAccessToSql
{ {
// now test that the roall table is empty: // now test that the roall table is empty:
command = null; // reset command command = null; // reset command
command = new SqlCommand(); command = new SqlCommand
command.Connection = connection; {
command.CommandType = CommandType.Text; Connection = connection,
command.CommandText = "SELECT count(*) FROM roall"; CommandType = CommandType.Text,
using (SqlDataReader reader = command.ExecuteReader()) CommandText = "SELECT count(*) FROM roall"
};
using (SqlDataReader reader = command.ExecuteReader())
{ {
if (reader.Read()) if (reader.Read())
{ {
@@ -557,16 +520,18 @@ namespace RoAccessToSql
{ {
// now test that the database version is ok // now test that the database version is ok
command = null; // reset command command = null; // reset command
command = new SqlCommand(); command = new SqlCommand
command.Connection = connection; {
command.CommandType = CommandType.StoredProcedure; Connection = connection,
command.CommandText = "vesp_GetSQLCodeRevision"; CommandType = CommandType.StoredProcedure,
using (SqlDataReader reader = command.ExecuteReader()) CommandText = "vesp_GetSQLCodeRevision"
};
using (SqlDataReader reader = command.ExecuteReader())
{ {
if (reader.Read()) if (reader.Read())
{ {
_RevDate = reader.GetDateTime(0); RevDate = reader.GetDateTime(0);
_RevDescription = reader.GetString(1); RevDescription = reader.GetString(1);
dbsuc = true; dbsuc = true;
} }
else else
@@ -582,13 +547,13 @@ namespace RoAccessToSql
} }
catch (SqlException ex) catch (SqlException ex)
{ {
if (notifyUser) MessageBox.Show("Connection failed: " + ex, "Connection Failed"); if (notifyUser) MessageBox.Show($"Connection failed: {ex}", "Connection Failed");
} }
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
if (notifyUser) MessageBox.Show("Connection failed: " + ex, "Connection Failed"); if (notifyUser) MessageBox.Show($"Connection failed: {ex}", "Connection Failed");
} }
if (notifyUser && success) MessageBox.Show("You have been successfully connected to the database!", "Connection Succeeded"); if (notifyUser && success) MessageBox.Show("You have been successfully connected to the database!", "Connection Succeeded");
+1
View File
@@ -66,6 +66,7 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="RoAccessToSql.cs"> <Compile Include="RoAccessToSql.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
+34 -129
View File
@@ -1,7 +1,4 @@
using System;
using System.Drawing; using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms; using System.Windows.Forms;
namespace Accentra.Controls namespace Accentra.Controls
@@ -11,11 +8,6 @@ namespace Accentra.Controls
/// </summary> /// </summary>
public class TablePicker : System.Windows.Forms.Form public class TablePicker : System.Windows.Forms.Form
{ {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public TablePicker() public TablePicker()
{ {
// Activates double buffering // Activates double buffering
@@ -29,21 +21,6 @@ namespace Accentra.Controls
InitializeComponent(); InitializeComponent();
} }
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code #region Windows Form Designer generated code
/// <summary> /// <summary>
/// Required method for Designer support - do not modify /// Required method for Designer support - do not modify
@@ -75,82 +52,41 @@ namespace Accentra.Controls
} }
#endregion #endregion
private Pen BeigePen = new Pen(Color.Beige, 1); private readonly Brush BlackBrush = System.Drawing.Brushes.Black;
private Brush BeigeBrush = System.Drawing.Brushes.Beige; private readonly Brush WhiteBrush = System.Drawing.Brushes.White;
private Brush GrayBrush = System.Drawing.Brushes.Gray;
private Brush BlackBrush = System.Drawing.Brushes.Black;
private Brush WhiteBrush = System.Drawing.Brushes.White;
private Brush Jbrush = System.Drawing.Brushes.LightBlue; private readonly Brush Jbrush = System.Drawing.Brushes.LightBlue;
//private Brush Jbrush = System.Drawing.Brushes.LightSteelBlue;
//private Brush Jbrush = System.Drawing.Brushes.SteelBlue;
//private Brush Jbrush = System.Drawing.Brushes.PowderBlue;
private Pen BorderPen = new Pen(SystemColors.ControlDark); private readonly Pen BorderPen = new Pen(SystemColors.ControlDark);
private Pen BluePen = new Pen(Color.SlateGray, 1); private readonly Pen BluePen = new Pen(Color.SlateGray, 1);
private string DispText = "Esc to Cancel"; // Display text private string DispText = "Esc to Cancel"; // Display text
private int DispHeight = 40;//20; // Display ("Table 1x1", "Cancel") private readonly int DispHeight = 40; // Display ("Table 1x1", "Cancel")
private Font DispFont = new Font("Tahoma", 8.25F); private readonly Font DispFont = new Font("Tahoma", 8.25F);
private int SquareX = 20; // Width of squares private readonly int SquareX = 20; // Width of squares
private int SquareY = 20; // Height of squares private readonly int SquareY = 20; // Height of squares
private int SquareQX = 3; // Number of visible squares (X) private int SquareQX = 3; // Number of visible squares (X)
private int SquareQY = 3; // Number of visible squares (Y) private int SquareQY = 3; // Number of visible squares (Y)
private int SelQX = 1; // Number of selected squares (x) private int SelQX = 1; // Number of selected squares (x)
private int SelQY = 1; // Number of selected squares (y) private int SelQY = 1; // Number of selected squares (y)
private bool bHiding = false; public int MaxRows { get; set; } = -1;
private bool bCancel = true; // Determines whether to Cancel
// Added my Volian 4/27/11 public int MaxCols { get; set; } = -1;
private int _MaxRows = -1;
public int MaxRows /// <summary>
{ /// Returns the number of columns, or the horizontal / X count,
get { return _MaxRows; } /// of the selection.
set { _MaxRows = value; } /// </summary>
} public int SelectedColumns => SelQX;
private int _MaxCols = -1;
public int MaxCols /// <summary>
{ /// Returns the number of rows, or the vertical / Y count,
get { return _MaxCols; } /// of the selection.
set { _MaxCols = value; } /// </summary>
} public int SelectedRows => SelQY;
/// <summary> private void TablePicker_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {
/// Similar to <code><see cref="DialogResult"/>
/// == <see cref="DialogResult.Cancel"/></code>,
/// but is used as a state value before the form
/// is hidden and cancellation is finalized.
/// </summary>
public bool Cancel {
get {
return bCancel;
}
}
/// <summary>
/// Returns the number of columns, or the horizontal / X count,
/// of the selection.
/// </summary>
public int SelectedColumns {
get {
return SelQX;
}
}
/// <summary>
/// Returns the number of rows, or the vertical / Y count,
/// of the selection.
/// </summary>
public int SelectedRows {
get {
return SelQY;
}
}
private void TablePicker_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {
Graphics g = e.Graphics; Graphics g = e.Graphics;
// First, increment the number of visible squares if the // First, increment the number of visible squares if the
@@ -162,8 +98,8 @@ namespace Accentra.Controls
if (SquareQX < 7) SquareQX = 7; if (SquareQX < 7) SquareQX = 7;
if (SquareQY < 5) SquareQY = 5; if (SquareQY < 5) SquareQY = 5;
if (_MaxRows > 0 && SquareQY > _MaxRows) SquareQY = _MaxRows; if (MaxRows > 0 && SquareQY > MaxRows) SquareQY = MaxRows;
if (_MaxCols > 0 && SquareQX > _MaxCols) SquareQX = _MaxCols; if (MaxCols > 0 && SquareQX > MaxCols) SquareQX = MaxCols;
// Second, expand the dimensions of this form according to the // Second, expand the dimensions of this form according to the
// number of visible squares. // number of visible squares.
@@ -177,14 +113,7 @@ namespace Accentra.Controls
// the text is left-justified, only the Y (vertical) position // the text is left-justified, only the Y (vertical) position
// is calculated. // is calculated.
int dispY = ((SquareY - 1) * SquareQY) + SquareQY + 4; int dispY = ((SquareY - 1) * SquareQY) + SquareQY + 4;
//if (this.Cancel) { DispText = $"{SelQY} Row{((SelQY > 1) ? "s" : "")} {SelQX} Column{((SelQX > 1) ? "s" : "")}\nEsc to Cancel";
// DispText = "Esc Key to Cancel";
//} else {
// DispText = SelQX.ToString() + " by " + SelQY.ToString() + " Table";
//}
//DispText = SelQX.ToString() + " by " + SelQY.ToString() + " Table\nEsc Key to Cancel";
//DispText = SelQY.ToString() + " Row"+((SelQY>1)?"s by ":" by ") + SelQX.ToString() + " Column"+((SelQX>1)?"s\nEsc Key to Cancel":"\nEsc Key to Cancel");
DispText = SelQY.ToString() + " Row" + ((SelQY > 1) ? "s" : "") + " " + SelQX.ToString() + " Column" + ((SelQX > 1) ? "s" : "")+ "\nEsc to Cancel";
g.DrawString(DispText, DispFont, BlackBrush, 3, dispY + 2); g.DrawString(DispText, DispFont, BlackBrush, 3, dispY + 2);
// Draw each of the squares and fill with the default color. // Draw each of the squares and fill with the default color.
@@ -198,7 +127,6 @@ namespace Accentra.Controls
// Go back and paint the squares with selection colors. // Go back and paint the squares with selection colors.
for (int x=0; x<SelQX; x++) { for (int x=0; x<SelQX; x++) {
for (int y=0; y<SelQY; y++) { for (int y=0; y<SelQY; y++) {
//g.FillRectangle(BeigeBrush, (x*SquareX) + 3, (y*SquareY) + 3, SquareX - 2, SquareY - 2);
g.FillRectangle(Jbrush, (x * SquareX) + 3, (y * SquareY) + 3, SquareX - 2, SquareY - 2); g.FillRectangle(Jbrush, (x * SquareX) + 3, (y * SquareY) + 3, SquareX - 2, SquareY - 2);
g.DrawRectangle(BluePen, (x * SquareX) + 3, (y * SquareY) + 3, SquareX - 2, SquareY - 2); g.DrawRectangle(BluePen, (x * SquareX) + 3, (y * SquareY) + 3, SquareX - 2, SquareY - 2);
} }
@@ -210,11 +138,6 @@ namespace Accentra.Controls
/// </summary> /// </summary>
private void TablePicker_Deactivate(object sender, System.EventArgs e) { private void TablePicker_Deactivate(object sender, System.EventArgs e) {
// bCancel = true
// and DialogResult = DialogResult.Cancel
// were previously already set in MouseLeave.
//this.Hide();
} }
/// <summary> /// <summary>
@@ -242,42 +165,24 @@ namespace Accentra.Controls
/// escaped (canceling) state. /// escaped (canceling) state.
/// </summary> /// </summary>
private void TablePicker_MouseLeave(object sender, System.EventArgs e) { private void TablePicker_MouseLeave(object sender, System.EventArgs e) {
//if (!bHiding) bCancel = true;
//this.DialogResult = DialogResult.Cancel;
//this.Invalidate();
if (this.DialogResult == DialogResult.None) if (this.DialogResult == DialogResult.None)
this.DialogResult = DialogResult.Cancel; this.DialogResult = DialogResult.Cancel;
} }
/// <summary> /// <summary>
/// Cancels the prior cancellation caused by MouseLeave. /// Cancels the prior cancellation caused by MouseLeave.
/// </summary> /// </summary>
private void TablePicker_MouseEnter(object sender, System.EventArgs e) { private void TablePicker_MouseEnter(object sender, System.EventArgs e) => this.Invalidate();
//bHiding = false;
//bCancel = false;
//this.DialogResult = DialogResult.OK;
this.Invalidate();
}
/// <summary> /// <summary>
/// Detects that the user made a selection by clicking. /// Detects that the user made a selection by clicking.
/// </summary> /// </summary>
private void TablePicker_Click(object sender, System.EventArgs e) { private void TablePicker_Click(object sender, System.EventArgs e) => this.DialogResult = DialogResult.OK;
//bHiding = true; // Not the same as Visible == false
// // because bHiding suggests that the control
// // is still "active" (not canceled).
//this.Hide();
this.DialogResult = DialogResult.OK;
}
private void TablePicker_KeyPress(object sender, KeyPressEventArgs e) private void TablePicker_KeyPress(object sender, KeyPressEventArgs e)
{ {
if (e.KeyChar == (char)Keys.Escape) if (e.KeyChar == (char)Keys.Escape)
{ {
//bHiding = true; // Not the same as Visible == false
//// because bHiding suggests that the control
//// is still "active" (not canceled).
//this.Hide();
this.DialogResult = DialogResult.Cancel; this.DialogResult = DialogResult.Cancel;
} }
} }
+25 -51
View File
@@ -1,7 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
using System.Reflection; using System.Reflection;
using Volian.Controls.Library; using Volian.Controls.Library;
@@ -24,7 +21,7 @@ namespace VEPROMS
string connectionString = Database.VEPROMS_Connection; string connectionString = Database.VEPROMS_Connection;
Match mServer = Regex.Match(connectionString, ".*Data Source=([^;]*).*"); Match mServer = Regex.Match(connectionString, ".*Data Source=([^;]*).*");
_SQLServerName = (mServer.Success) ? mServer.Groups[1].Value : "unknown"; _SQLServerName = (mServer.Success) ? mServer.Groups[1].Value : "unknown";
if (_SQLServerName.StartsWith(@".\")) _SQLServerName = @"Local \ " + _SQLServerName.Substring(2); if (_SQLServerName.StartsWith(@".\")) _SQLServerName = $@"Local \ {_SQLServerName.Substring(2)}";
} }
return _SQLServerName; return _SQLServerName;
} }
@@ -37,7 +34,7 @@ namespace VEPROMS
{ {
if (_DatabaseName == null) if (_DatabaseName == null)
{ {
_DatabaseName = string.Format("{0}[SQL:{1:yyMM.ddHH}]", Database.ActiveDatabase, Database.RevDate); _DatabaseName = $"{Database.ActiveDatabase}[SQL:{Database.RevDate:yyMM.ddHH}]";
} }
return _DatabaseName; return _DatabaseName;
} }
@@ -55,26 +52,16 @@ namespace VEPROMS
DateTime buildDateTime = new System.IO.FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime; DateTime buildDateTime = new System.IO.FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime;
// If the AssemblyConfiguration is "DEMO" then we are running a Demo version // If the AssemblyConfiguration is "DEMO" then we are running a Demo version
string demoTxt = VlnSettings.DemoMode ? "(Demo)": VlnSettings.DebugMode ? "(Debug)" : "(Production)"; string demoTxt = VlnSettings.DemoMode ? "(Demo)": VlnSettings.DebugMode ? "(Debug)" : "(Production)";
// C2018-015 made this information static so we can use in meta files Text = $"About {AssemblyTitle} {demoTxt}";
//string connectionString = Database.VEPROMS_Connection; labelProductName.Text = AssemblyProduct;
//Match mServer = Regex.Match(connectionString,".*Data Source=([^;]*).*"); labelVersion.Text = $"Version {AssemblyVersion}";
//string server = (mServer.Success)?mServer.Groups[1].Value:"unknown"; labelVersionDateTime.Text = $"Build Date: {buildDateTime}";
//if (server.StartsWith(@".\")) server = @"Local \ " + server.Substring(2); labelCopyright.Text = $"Copyright © {buildDateTime.Year}. All Rights Reserved.";
//string databaseName = string.Format("{0}[SQL:{1:yyMM.ddHH}]", Database.ActiveDatabase, Database.RevDate); labelCompanyName.Text = AssemblyCompany;
this.Text = String.Format("About {0}", AssemblyTitle + " " + demoTxt); labelCompanyName.Links[0].LinkData = "Volian Enterprises Inc.";
this.labelProductName.Text = AssemblyProduct; labelCompanyName.Links.Add(0,23,"www.volian.com");
this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); labelServer.Text = $"SQL Server: {SQLServerName}"; // C2018-015 use static for this info.
this.labelVersionDateTime.Text = String.Format("Build Date: {0}", buildDateTime.ToString()); labelDatabase.Text = $"Database: {DatabaseName}"; // C2018-015 use static for this info.
this.labelCopyright.Text = String.Format("Copyright © {0}. All Rights Reserved.", buildDateTime.Year.ToString());
this.labelCompanyName.Text = AssemblyCompany;
// this.textBoxDescription.Text = AssemblyDescription;
this.labelCompanyName.Links[0].LinkData = "Volian Enterprises Inc.";
this.labelCompanyName.Links.Add(0,23,"www.volian.com");
//this.labelServer.Text = string.Format("SQL Server: {0}", server);
this.labelServer.Text = string.Format("SQL Server: {0}", SQLServerName); // C2018-015 use static for this info.
//if (databaseName == null) databaseName = Regex.Replace(connectionString, "^.*Initial Catalog=([^;]*);.*$", "$1", RegexOptions.IgnoreCase);
//this.labelDatabase.Text = string.Format("Database: {0}", databaseName);
this.labelDatabase.Text = string.Format("Database: {0}", DatabaseName); // C2018-015 use static for this info.
} }
#region Assembly Attribute Accessors #region Assembly Attribute Accessors
@@ -99,24 +86,12 @@ namespace VEPROMS
} }
} }
public string AssemblyVersion public string AssemblyVersion => Assembly.GetExecutingAssembly().GetName().Version.ToString();
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
// C2018-009 used to print the PROMS version number at the top of each PDF page // C2018-009 used to print the PROMS version number at the top of each PDF page
public static string PROMSVersion public static string PROMSVersion => Assembly.GetExecutingAssembly().GetName().Version.ToString();
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
public string AssemblyDescription public string AssemblyDescription
{ {
get get
{ {
@@ -162,7 +137,7 @@ namespace VEPROMS
private void labelCompanyName_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) private void labelCompanyName_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{ {
// Determine which link was clicked within the LinkLabel. // Determine which link was clicked within the LinkLabel.
this.labelCompanyName.Links[0].Visited = true; labelCompanyName.Links[0].Visited = true;
// Display the appropriate link based on the value of the // Display the appropriate link based on the value of the
// LinkData property of the Link object. // LinkData property of the Link object.
@@ -171,18 +146,17 @@ namespace VEPROMS
System.Diagnostics.Process.Start(target); // this should start the default web browser System.Diagnostics.Process.Start(target); // this should start the default web browser
} }
private void logoPictureBox_Click(object sender, EventArgs e) private void logoPictureBox_Click(object sender, EventArgs e) => System.Diagnostics.Process.Start(labelCompanyName.Links[0].LinkData as string); // this should start the default web browser
{
System.Diagnostics.Process.Start(labelCompanyName.Links[0].LinkData as string); // this should start the default web browser
}
private void btnViewEULA_Click(object sender, EventArgs e) private void btnViewEULA_Click(object sender, EventArgs e)
{ {
string EulaFile = string.Format(@"\{0}", VlnSettings.EULAfile); string EulaFile = $@"\{VlnSettings.EULAfile}";
string strEULA = System.Environment.CurrentDirectory + EulaFile; string strEULA = System.Environment.CurrentDirectory + EulaFile;
frmViewTextFile ViewFile = new frmViewTextFile(strEULA,RichTextBoxStreamType.PlainText); frmViewTextFile ViewFile = new frmViewTextFile(strEULA, RichTextBoxStreamType.PlainText)
ViewFile.Text = "End-User License Agreement"; {
ViewFile.ShowDialog(); Text = "End-User License Agreement"
};
ViewFile.ShowDialog();
} }
} }
-34
View File
@@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using VEPROMS.CSLA.Library;
namespace VEPROMS
{
public class BookMarks
{
public string Name;
public VETreeNode Node;
public BookMarks()
{
}
public BookMarks(string n, VETreeNode o)
{
Name = n;
Node = o;
}
public BookMarks(VETreeNode o)
{
Name = o.Text;
Node = o;
}
public override string ToString()
{
return Name;
}
}
}
@@ -1,11 +1,6 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
@@ -14,10 +9,7 @@ namespace VEPROMS
// C2025-027 Annotation Type Filtering // C2025-027 Annotation Type Filtering
public partial class dlgAnnotationsSelect : Form public partial class dlgAnnotationsSelect : Form
{ {
public dlgAnnotationsSelect() public dlgAnnotationsSelect() => InitializeComponent();
{
InitializeComponent();
}
public dlgAnnotationsSelect(string userid) public dlgAnnotationsSelect(string userid)
{ {
@@ -25,30 +17,13 @@ namespace VEPROMS
UserID = userid; UserID = userid;
} }
private int _MyItemID; public int MyItemID { get; set; }
public int MyItemID public string UserID { get; set; }
{
get { return _MyItemID; }
set { _MyItemID = value; }
}
private string _UserID; private void btnSelect_Click(object sender, EventArgs e) => MoveSelectedItems(lstUnselected, lstSelected);
public string UserID
{
get { return _UserID; }
set { _UserID = value; }
}
private void btnSelect_Click(object sender, EventArgs e)
{
MoveSelectedItems(lstUnselected, lstSelected);
}
// Move selected items to lstUnselected. // Move selected items to lstUnselected.
private void btnDeselect_Click(object sender, EventArgs e) private void btnDeselect_Click(object sender, EventArgs e) => MoveSelectedItems(lstSelected, lstUnselected);
{
MoveSelectedItems(lstSelected, lstUnselected);
}
// Move selected items from one ListBox to another. // Move selected items from one ListBox to another.
private void MoveSelectedItems(ListBox lstFrom, ListBox lstTo) private void MoveSelectedItems(ListBox lstFrom, ListBox lstTo)
@@ -90,39 +65,21 @@ namespace VEPROMS
} }
// Enable and disable buttons. // Enable and disable buttons.
private void lst_SelectedIndexChanged(object sender, EventArgs e) private void lst_SelectedIndexChanged(object sender, EventArgs e) => SetButtonsEditable();
{
SetButtonsEditable();
}
// Save selected list to DB. // Save selected list to DB.
private void btnUpdate_Click(object sender, EventArgs e) private void btnUpdate_Click(object sender, EventArgs e) => saveChanges();
{
saveChanges();
}
public class AnnotataionItem public class AnnotataionItem
{ {
private string _NameStr; private readonly string _NameStr;
private int _TypeID; private readonly int _TypeID;
public AnnotataionItem(string NameStr, int TypeID) public AnnotataionItem(string NameStr, int TypeID)
{ {
this._NameStr = NameStr; _NameStr = NameStr;
this._TypeID = TypeID; _TypeID = TypeID;
}
public string NameStr
{
get
{
return _NameStr;
}
}
public int TypeID
{
get
{
return _TypeID;
}
} }
public string NameStr => _NameStr;
public int TypeID => _TypeID;
} }
// Enable and disable buttons. // Enable and disable buttons.
@@ -167,16 +124,16 @@ namespace VEPROMS
if (result == DialogResult.Yes) if (result == DialogResult.Yes)
{ {
saveChanges(); saveChanges();
this.Close(); Close();
} }
else else
{ {
this.Close(); Close();
} }
} }
else else
{ {
this.Close(); Close();
} }
} }
@@ -1,12 +1,4 @@
using System; 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;
namespace VEPROMS namespace VEPROMS
{ {
@@ -16,19 +8,10 @@ namespace VEPROMS
{ {
private bool _Cancel = true; private bool _Cancel = true;
public bool Cancel public bool Cancel => _Cancel;
{
get { return _Cancel; }
}
private bool _ExitPROMS; public bool ExitPROMS { get; set; }
public DlgCloseTabsOrExit(bool isMainWindow, bool hasChildWindows)
public bool ExitPROMS
{
get { return _ExitPROMS; }
set { _ExitPROMS = value; }
}
public DlgCloseTabsOrExit(bool isMainWindow, bool hasChildWindows)
{ {
InitializeComponent(); InitializeComponent();
if (!isMainWindow) if (!isMainWindow)
@@ -46,22 +29,22 @@ namespace VEPROMS
private void BtnClsTab_Click(object sender, EventArgs e) private void BtnClsTab_Click(object sender, EventArgs e)
{ {
_Cancel = false; _Cancel = false;
_ExitPROMS = false; ExitPROMS = false;
this.Hide(); Hide();
} }
private void BtnExitPROMS_Click(object sender, EventArgs e) private void BtnExitPROMS_Click(object sender, EventArgs e)
{ {
_Cancel = false; _Cancel = false;
_ExitPROMS = true; ExitPROMS = true;
this.Hide(); Hide();
} }
private void btnCancel_Click(object sender, EventArgs e) private void btnCancel_Click(object sender, EventArgs e)
{ {
_Cancel = true; _Cancel = true;
_ExitPROMS = false; ExitPROMS = false;
this.Hide(); Hide();
} }
} }
} }
+101 -240
View File
@@ -1,29 +1,21 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing; using System.Drawing;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.IO; using System.IO;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Print.Library; using Volian.Print.Library;
//using Volian.Controls.Library;
using Volian.Base.Library; using Volian.Base.Library;
using JR.Utils.GUI.Forms; using JR.Utils.GUI.Forms;
using System.Linq;
namespace VEPROMS namespace VEPROMS
{ {
public partial class DlgPrintProcedure : DevComponents.DotNetBar.Office2007Form public partial class DlgPrintProcedure : DevComponents.DotNetBar.Office2007Form
{ {
public bool SaveLinks public bool SaveLinks => swtbtnPDFLinks.Value;
{ public int RemoveTrailingHardReturnsAndManualPageBreaks
get
{
return swtbtnPDFLinks.Value;
}
}
public int RemoveTrailingHardReturnsAndManualPageBreaks
{ {
get get
{ {
@@ -36,38 +28,19 @@ namespace VEPROMS
return 3; return 3;
} }
} }
private string _Prefix = ""; // RHM20150506 Multiline ItemID TextBox // RHM20150506 Multiline ItemID TextBox
public string Prefix public string Prefix { get; set; } = "";
{ public bool OpenAfterCreate // RHM20150506 Multiline ItemID TextBox
get { return _Prefix; }
set { _Prefix = value; }
}
public bool OpenAfterCreate // RHM20150506 Multiline ItemID TextBox
{ {
get { return cbxOpenAfterCreate2.Checked; } get { return cbxOpenAfterCreate2.Checked; }
set { cbxOpenAfterCreate2.Checked = value; } set { cbxOpenAfterCreate2.Checked = value; }
} }
private SessionInfo _MySessionInfo;
public SessionInfo MySessionInfo
{
get { return _MySessionInfo; }
set { _MySessionInfo = value; }
}
private bool _Automatic;
public bool Automatic
{
get { return _Automatic; }
set { _Automatic = value; }
}
private int _prtSectID = -1;
public int PrtSectID
{
get { return _prtSectID; }
set { _prtSectID = value; }
}
private bool _OverwritePDF; public SessionInfo MySessionInfo { get; set; }
public bool OverwritePDF public bool Automatic { get; set; }
public int PrtSectID { get; set; } = -1;
public bool OverwritePDF
{ {
get { return cbxOverwritePDF2.Checked; } get { return cbxOverwritePDF2.Checked; }
set { cbxOverwritePDF2.Checked = value; } set { cbxOverwritePDF2.Checked = value; }
@@ -85,18 +58,17 @@ namespace VEPROMS
swtbtnPDFdtPrefixSuffix.Value = swtbtnPDFdtPrefixSuffix.Enabled = _AllowDateTimePrefixSuffix; swtbtnPDFdtPrefixSuffix.Value = swtbtnPDFdtPrefixSuffix.Enabled = _AllowDateTimePrefixSuffix;
} }
} }
private DateTime _PrefixSuffixDTS = DateTime.Now; // C2018-033 date/time used for the date/time PDF file prefix and suffix private readonly DateTime _PrefixSuffixDTS = DateTime.Now; // C2018-033 date/time used for the date/time PDF file prefix and suffix
private bool _DateTimePrefixSuffixPrintingAllProcedures = true; // C2018-033 to control adding the Date/Time Prefix/Suffix to PFD name when printing All procedures private bool _DateTimePrefixSuffixPrintingAllProcedures = true; // C2018-033 to control adding the Date/Time Prefix/Suffix to PFD name when printing All procedures
private bool _IncludeWordSecTextInMetafile = true; // C2018-023 so that we can turn off including Word attachment text in metafile private bool _IncludeWordSecTextInMetafile = true; // C2018-023 so that we can turn off including Word attachment text in metafile
private void RunAutomatic() private void RunAutomatic()
{ {
cbxDebugPagination.Checked = true; cbxDebugPagination.Checked = true;
cbxDebugText.Checked = true; cbxDebugText.Checked = true;
cbxMetaFile.Checked = true; // C2018-004 create meta file for baseline compares cbxMetaFile.Checked = true; // C2018-004 create meta file for baseline compares
_IncludeWordSecTextInMetafile = true; _IncludeWordSecTextInMetafile = true;
Application.DoEvents(); Application.DoEvents();
string[] parameters = System.Environment.CommandLine.Split(" ".ToCharArray()); string[] parameters = System.Environment.CommandLine.Split(" ".ToCharArray());
bool ranAuto = false;
foreach (string parameter in parameters) foreach (string parameter in parameters)
{ {
if (parameter.ToUpper() == "/NT") if (parameter.ToUpper() == "/NT")
@@ -111,11 +83,11 @@ namespace VEPROMS
_IncludeWordSecTextInMetafile = false; // C2018-023 turn off putting Word attachment text in the meta file for baseline compares _IncludeWordSecTextInMetafile = false; // C2018-023 turn off putting Word attachment text in the meta file for baseline compares
} }
CreatePDFs(); CreatePDFs();
this.Close(); Close();
} }
private DocVersionInfo _DocVersionInfo = null; private readonly DocVersionInfo _DocVersionInfo = null;
private bool _AllProcedures; private readonly bool _AllProcedures;
private DocVersionConfig _DocVersionConfig; private readonly DocVersionConfig _DocVersionConfig;
public string RevNum public string RevNum
{ {
get { return txbRevNum.Text; } get { return txbRevNum.Text; }
@@ -143,11 +115,8 @@ namespace VEPROMS
return RevNum + "/" + RevDate; return RevNum + "/" + RevDate;
} }
} }
public string ProcNum public string ProcNum => MyProcedure.DisplayNumber;
{ public string PDFPath
get { return MyProcedure.DisplayNumber; }
}
public string PDFPath
{ {
get {// B2018-069 Revert to Temporary for Baseline testing get {// B2018-069 Revert to Temporary for Baseline testing
if (PromsPrinter.BaselineTesting) if (PromsPrinter.BaselineTesting)
@@ -179,7 +148,7 @@ namespace VEPROMS
private bool _CreateButtonClicked = false; // B2020-062 control the toggle of date/time prefix/suffix on pdf file name private bool _CreateButtonClicked = false; // B2020-062 control the toggle of date/time prefix/suffix on pdf file name
public DlgPrintProcedure(DocVersionInfo dvi, bool automatic) public DlgPrintProcedure(DocVersionInfo dvi, bool automatic)
{ {
_Automatic = automatic; Automatic = automatic;
InitializeComponent(); InitializeComponent();
_AllProcedures = true; _AllProcedures = true;
_DocVersionConfig = dvi.DocVersionConfig; _DocVersionConfig = dvi.DocVersionConfig;
@@ -201,14 +170,12 @@ namespace VEPROMS
btnCreatePDF.Text = "Create PDFs"; btnCreatePDF.Text = "Create PDFs";
HandleDocVersionSettings(); HandleDocVersionSettings();
PrepForAllOrOne(false); PrepForAllOrOne(false);
// don't open all PDFs if doing All Procedures
//cbxOpenAfterCreate2.Checked = dvi.DocVersionConfig.Print_AlwaysViewPDFAfterCreate;
// C2018-033 added the Prefix / Suffix switch to the expand Additional Settings check // C2018-033 added the Prefix / Suffix switch to the expand Additional Settings check
expPrnSetting.Expanded = swtbtnBlankPgsForDuplex.Value || swtbtnChgBar.Value || swtbtnGeneratePlacekeeper.Value || swtbtnPDFLinks.Value || swtbtnPROMSVersion.Value || swtbtnWaterMark.Value || swtbtnPDFdtPrefixSuffix.Value; expPrnSetting.Expanded = swtbtnBlankPgsForDuplex.Value || swtbtnChgBar.Value || swtbtnGeneratePlacekeeper.Value || swtbtnPDFLinks.Value || swtbtnPROMSVersion.Value || swtbtnWaterMark.Value || swtbtnPDFdtPrefixSuffix.Value;
} }
public DlgPrintProcedure(DocVersionInfo dvi) public DlgPrintProcedure(DocVersionInfo dvi)
{ {
_Automatic = false; Automatic = false;
InitializeComponent(); InitializeComponent();
_AllProcedures = true; _AllProcedures = true;
_DocVersionConfig = dvi.DocVersionConfig; _DocVersionConfig = dvi.DocVersionConfig;
@@ -249,21 +216,12 @@ namespace VEPROMS
// C2021-063 make the Generate Alarm Point List text checkbox visable in the format flag is set. // C2021-063 make the Generate Alarm Point List text checkbox visable in the format flag is set.
cbxAlmPtTxt.Visible = !oneProcedure && MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.ChkBoxToGeneratePointListText; cbxAlmPtTxt.Visible = !oneProcedure && MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.ChkBoxToGeneratePointListText;
} }
private string _UnitNumber;
public string UnitNumber
{
get { return _UnitNumber; }
set { _UnitNumber = value; }
}
private int _UnitIndex;
public int UnitIndex
{
get { return _UnitIndex; }
set { _UnitIndex = value; }
}
// C2018-012 - Code Cleanup - redesigned the Print Dialog to include a sliding panel and remplaced check boxes with ON/OFF switches public string UnitNumber { get; set; }
public DlgPrintProcedure(ProcedureInfo pi) public int UnitIndex { get; set; }
// C2018-012 - Code Cleanup - redesigned the Print Dialog to include a sliding panel and remplaced check boxes with ON/OFF switches
public DlgPrintProcedure(ProcedureInfo pi)
{ {
InitializeComponent(); InitializeComponent();
_AllProcedures = false; _AllProcedures = false;
@@ -354,31 +312,9 @@ namespace VEPROMS
swtbtnWaterMark.Value = false; swtbtnWaterMark.Value = false;
else else
swtbtnWaterMark.Value = true; swtbtnWaterMark.Value = true;
// Auto Duplexing on/off - Auto duplex was used only by Point Beach formats These buttons were removed from the dialog
// There was not print coding to support this format flag
//if ((_MyProcedure.ActiveParent as DocVersionInfo).ActiveFormat.PlantFormat.FormatData.PrintData.AllowDuplex)
//{
// lblAutoDuplexing.Visible = true;
// btnDuplxOff.Visible = true;
// btnDuplxOn.Visible = true;
// if (_DocVersionConfig.Print_DisableDuplex)
// btnDuplxOff.PerformClick();
// else
// btnDuplxOn.PerformClick();
//}
//else
//{
// lblAutoDuplexing.Visible = false;
// btnDuplxOff.Visible = false;
// btnDuplxOn.Visible = false;
//}
SetCompareVisibility(); SetCompareVisibility();
cbxOrPgBrk.Visible = false; //per Harry
// default to using OriginalPageBreaks (16bit page breaks) if App.config is set
// to true:
//cbxOrPgBrk.Visible = VlnSettings.OriginalPageBreak && VlnSettings.DebugMode;
cbxOrPgBrk.Visible = false; //per Harry
cbxOrPgBrk.Checked = false; cbxOrPgBrk.Checked = false;
} }
@@ -416,13 +352,7 @@ namespace VEPROMS
private Timer _MyTimer; private Timer _MyTimer;
public void SetupForProcedure() // RHM20150506 Multiline ItemID TextBox public void SetupForProcedure() // RHM20150506 Multiline ItemID TextBox
{ {
if(_DocVersionInfo == null)this.Text = "Create PDF for " + ProcNum; if(_DocVersionInfo == null)Text = "Create PDF for " + ProcNum;
// get list of previous pdf files
// if no previous pdf file, then get path from frmVersionProperties
// dlgSelectFile.InitialDirectory = pdf path from frmVersionProperties
//cbxPDF.Text = string.Format(@"{0}\{1}.pdf", _PDFPath, _ProcNum);
// General 2 settings
//txbPDFLocation.Text = _PDFPath;
BuildPDFFileName(); BuildPDFFileName();
ProcedureConfig pc = _MyProcedure.MyConfig as ProcedureConfig; ProcedureConfig pc = _MyProcedure.MyConfig as ProcedureConfig;
// C2025-033 set which Child procedure is being printed used for PageStyle items // C2025-033 set which Child procedure is being printed used for PageStyle items
@@ -434,7 +364,7 @@ namespace VEPROMS
if (pc != null) if (pc != null)
{ {
//C2021-062 use the save rev number for all procedures if set, or just use the rev number in the current procedure config //C2021-062 use the save rev number for all procedures if set, or just use the rev number in the current procedure config
RevNum = (_NewRevForAllProcs == null) ? pc.Print_Rev : _NewRevForAllProcs; RevNum = _NewRevForAllProcs ?? pc.Print_Rev;
RevDate = pc.Print_RevDate; //== null || pc.Print_RevDate=="" ? DateTime.Today : Convert.ToDateTime(pc.Print_RevDate); RevDate = pc.Print_RevDate; //== null || pc.Print_RevDate=="" ? DateTime.Today : Convert.ToDateTime(pc.Print_RevDate);
ReviewDate = pc.Print_ReviewDate; // == null ? DateTime.Today : Convert.ToDateTime(pc.Print_ReviewDate); ReviewDate = pc.Print_ReviewDate; // == null ? DateTime.Today : Convert.ToDateTime(pc.Print_ReviewDate);
//Now check the format flags to determine if/how the Rev string should be parsed. //Now check the format flags to determine if/how the Rev string should be parsed.
@@ -498,11 +428,6 @@ namespace VEPROMS
else else
swtbtnWaterMark.Value = false; // set to None at folder level so set Watermark switch to the off position swtbtnWaterMark.Value = false; // set to None at folder level so set Watermark switch to the off position
//ppCmbxChgBarPos.DataSource = EnumDetail<PrintChangeBarLoc>.Details();
//ppCmbxChgBarPos.DisplayMember = "Description";
//ppCmbxChgBarPos.ValueMember = "EValue";
//ppCmbxChgBarPos.SelectedIndex = (int)MyProcedure.MyDocVersion.DocVersionConfig.Print_ChangeBarLoc;
ppCmbxChgBarTxtType.DataSource = EnumDetail<PrintChangeBarText>.Details(); ppCmbxChgBarTxtType.DataSource = EnumDetail<PrintChangeBarText>.Details();
ppCmbxChgBarTxtType.DisplayMember = "Description"; ppCmbxChgBarTxtType.DisplayMember = "Description";
ppCmbxChgBarTxtType.ValueMember = "EValue"; ppCmbxChgBarTxtType.ValueMember = "EValue";
@@ -515,7 +440,7 @@ namespace VEPROMS
bool usesRevDate = _MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate || _MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash; bool usesRevDate = _MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate || _MyProcedure.ActiveFormat.PlantFormat.FormatData.PrintData.RevDateWithForwardSlash;
if (_MyProcedure.Sections != null) if (_MyProcedure.Sections != null)
{ {
foreach (SectionInfo mysection in _MyProcedure.Sections) foreach (SectionInfo mysection in _MyProcedure.Sections.OfType<SectionInfo>())
hasReviewDate |= mysection.ActiveFormat.PlantFormat.HasPageListToken("{REVIEWDATE}"); hasReviewDate |= mysection.ActiveFormat.PlantFormat.HasPageListToken("{REVIEWDATE}");
} }
// Only the New HLP format and the MYA format use this // Only the New HLP format and the MYA format use this
@@ -535,9 +460,8 @@ namespace VEPROMS
if (MyProcedure == null) return; if (MyProcedure == null) return;
string PDFFilePrefix = _DocVersionConfig.Print_PDFFilePrefix; string PDFFilePrefix = _DocVersionConfig.Print_PDFFilePrefix;
string PDFFileSuffix = _DocVersionConfig.Print_PDFFileSuffix; string PDFFileSuffix = _DocVersionConfig.Print_PDFFileSuffix;
string PDFFileName = ""; PDFDTPrefix dtPre = _DocVersionConfig.Print_PDFdtFilePrefix;
PDFDTPrefix dtPre = _DocVersionConfig.Print_PDFdtFilePrefix; PDFDTSuffix dtSuf = _DocVersionConfig.Print_PDFdtFileSuffix;
PDFDTSuffix dtSuf = _DocVersionConfig.Print_PDFdtFileSuffix;
if (dtPre != PDFDTPrefix.None) PDFFilePrefix = ""; // incase user entered prefix text but then selected a date/time (in working draft properties) if (dtPre != PDFDTPrefix.None) PDFFilePrefix = ""; // incase user entered prefix text but then selected a date/time (in working draft properties)
if (dtSuf != PDFDTSuffix.None) PDFFileSuffix = ""; // incase user entered suffix text but then selected a date/time (in working draft properties) if (dtSuf != PDFDTSuffix.None) PDFFileSuffix = ""; // incase user entered suffix text but then selected a date/time (in working draft properties)
// B2020-062 control the toggle of date/time prefix/suffix on pdf file name // B2020-062 control the toggle of date/time prefix/suffix on pdf file name
@@ -556,19 +480,17 @@ namespace VEPROMS
if (dtSuf != PDFDTSuffix.None) if (dtSuf != PDFDTSuffix.None)
PDFFileSuffix = "_" + (_PrefixSuffixDTS.ToString(dtSuf.ToString())).Replace("__", " ").Replace("_", "-"); PDFFileSuffix = "_" + (_PrefixSuffixDTS.ToString(dtSuf.ToString())).Replace("__", " ").Replace("_", "-");
} }
if (ProcNum == string.Empty) string PDFFileName;
//txbPDFName.Text = this.UnitNumber + ".pdf"; if (ProcNum == string.Empty)
PDFFileName = this.UnitNumber; PDFFileName = UnitNumber;
else else
//txbPDFName.Text = string.Format("{0}.pdf", _MyProcedure.PDFNumber); PDFFileName = string.Format("{0}", _MyProcedure.PDFNumber);
PDFFileName = string.Format("{0}", _MyProcedure.PDFNumber);
//if (txbPDFName.Text.StartsWith("*")) if ((PDFFileName ?? "") == "") PDFFileName = "NoProcNumber";
// txbPDFName.Text = txbPDFName.Text.Replace("*", this.UnitNumber);
if ((PDFFileName ?? "") == "") PDFFileName = "NoProcNumber";
if (PDFFileName.StartsWith("*")) if (PDFFileName.StartsWith("*"))
PDFFileName = PDFFileName.Replace("*", this.UnitNumber); PDFFileName = PDFFileName.Replace("*", UnitNumber);
if (PDFFileName.Contains("?")) PDFFileName = PDFFileName.Replace("?", "_"); // for wcn sys/BM-2xxA??, etc if (PDFFileName.Contains("?")) PDFFileName = PDFFileName.Replace("?", "_"); // for wcn sys/BM-2xxA??, etc
txbPDFName.Text = PDFFilePrefix + PDFFileName + PDFFileSuffix + ".pdf"; txbPDFName.Text = $"{PDFFilePrefix}{PDFFileName}{PDFFileSuffix}.pdf";
} }
// C2018-033 Enable/disable the switch to control whether to add Prefix and/or Suffix to PDF file name // C2018-033 Enable/disable the switch to control whether to add Prefix and/or Suffix to PDF file name
@@ -585,12 +507,9 @@ namespace VEPROMS
swtbtnPDFdtPrefixSuffix.Enabled = hasPrefixSuffix; swtbtnPDFdtPrefixSuffix.Enabled = hasPrefixSuffix;
} }
private void btnCancel_Click(object sender, EventArgs e) private void btnCancel_Click(object sender, EventArgs e) => Close();
{
this.Close();
}
private void swtbtnChgBar_ValueChanged(object sender, EventArgs e) private void swtbtnChgBar_ValueChanged(object sender, EventArgs e)
{ {
// C2019-031 - disable the override change bar grouping when default change bar is set to format default or no change bar // C2019-031 - disable the override change bar grouping when default change bar is set to format default or no change bar
cbxOvrrideDefChgBars.Checked = false; // uncheck the override change bar check box inside the grouping cbxOvrrideDefChgBars.Checked = false; // uncheck the override change bar check box inside the grouping
@@ -714,7 +633,7 @@ namespace VEPROMS
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (MySessionInfo != null) if (MySessionInfo != null)
{ {
foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures) foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures.OfType<ProcedureInfo>())
{ {
string message = string.Empty; string message = string.Empty;
if (!MySessionInfo.CanCheckOutItem(myProc.ItemID, CheckOutType.Procedure, ref message)) if (!MySessionInfo.CanCheckOutItem(myProc.ItemID, CheckOutType.Procedure, ref message))
@@ -742,15 +661,14 @@ namespace VEPROMS
pbPDFsStatus.Maximum = n; pbPDFsStatus.Maximum = n;
pbPDFsStatus.Visible = true; pbPDFsStatus.Visible = true;
VlnSvgPageHelper.CountInApplProcs = 1; // B2021-127: BNPPalr - Auto set of serial #, skip Front Matter as per PAL 11/1/21 (set to 1 not 0) VlnSvgPageHelper.CountInApplProcs = 1; // B2021-127: BNPPalr - Auto set of serial #, skip Front Matter as per PAL 11/1/21 (set to 1 not 0)
this.Text = string.Format("Processing {0}", _DocVersionInfo.MyFolder.Name); Text = string.Format("Processing {0}", _DocVersionInfo.MyFolder.Name);
foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures) foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures.OfType<ProcedureInfo>())
{ {
string locpdfname = null; // get pdf file name for later merge code string locpdfname = null; // get pdf file name for later merge code
MyProcedure = myProc; MyProcedure = myProc;
// C2021-019: Override Watermark Text, 'waterMarkText' will have whatever watermark text should be printed // C2021-019: Override Watermark Text, 'waterMarkText' will have whatever watermark text should be printed
ProcedureConfig procConfig = MyProcedure.MyConfig as ProcedureConfig; string waterMarkTextOverride = "";
string waterMarkTextOverride = ""; if (MyProcedure.MyConfig is ProcedureConfig procConfig) waterMarkTextOverride = procConfig.GetValue("PSI", "WATERMARKOVERRIDE");
if (procConfig != null) waterMarkTextOverride = procConfig.GetValue("PSI", "WATERMARKOVERRIDE");
// C2020-002 paper size is now set in the format files - default is Letter // C2020-002 paper size is now set in the format files - default is Letter
Volian.Print.Library.Rtf2Pdf.PaperSize = myProc.ActiveFormat.PlantFormat.FormatData.PDFPageSize.PaperSize; Volian.Print.Library.Rtf2Pdf.PaperSize = myProc.ActiveFormat.PlantFormat.FormatData.PDFPageSize.PaperSize;
if (myProc.Sections != null) if (myProc.Sections != null)
@@ -772,13 +690,6 @@ namespace VEPROMS
pbPDFsStatus.TextVisible = true; pbPDFsStatus.TextVisible = true;
pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
pbPDFsStatus.Value = i; pbPDFsStatus.Value = i;
// this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
// B2021-102 we now get this information in frmPDFStatusForm()
//MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave);
// C2018-015 add the procedure tree path and the procedure number and title to the meta file
//if (BaselineMetaFile.IsOpen && i == 1) BaselineMetaFile.WriteLine("!! {0}", MyProcedure.SearchDVPath.Replace("\a", " | "));
//if (BaselineMetaFile.IsOpen) BaselineMetaFile.WriteLine("!! {0} | {1}", MyProcedure.DisplayNumber, MyProcedure.DisplayText);
string myPDFPath = GetMultiunitPDFPath(); string myPDFPath = GetMultiunitPDFPath();
_MergedPdfPath = myPDFPath; // If Slave, need its subdirectory/unit path for merging _MergedPdfPath = myPDFPath; // If Slave, need its subdirectory/unit path for merging
@@ -814,14 +725,7 @@ namespace VEPROMS
pbPDFsStatus.TextVisible = true; pbPDFsStatus.TextVisible = true;
pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
pbPDFsStatus.Value = i; pbPDFsStatus.Value = i;
// this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
// B2021-102 we now get this information in frmPDFStatusForm()
//MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave);
// C2018-015 add the procedure tree path and the procedure number and title to the meta file
//if (BaselineMetaFile.IsOpen && i == 1) BaselineMetaFile.WriteLine("!! {0}", MyProcedure.SearchDVPath.Replace("\a", " | "));
//if (BaselineMetaFile.IsOpen) BaselineMetaFile.WriteLine("!! {0} | {1}", MyProcedure.DisplayNumber, MyProcedure.DisplayText);
// RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered. // RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered.
// B2016-249 Output Procedure to folder associated with Parent Child // B2016-249 Output Procedure to folder associated with Parent Child
// B2021-102 put in the using for better memory management // B2021-102 put in the using for better memory management
@@ -850,18 +754,9 @@ namespace VEPROMS
pbPDFsStatus.TextVisible = true; pbPDFsStatus.TextVisible = true;
pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
pbPDFsStatus.Value = i; pbPDFsStatus.Value = i;
// this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
// RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered. // RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered.
int profileDepth1 = ProfileTimer.Push(">>>> GetItemAndChildren"); int profileDepth1 = ProfileTimer.Push(">>>> GetItemAndChildren");
// B2021-102 we now get this information in frmPDFStatusForm()
//if (MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseTransitionModifier || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseSpecificTransitionModifier)
// MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave);
//else
// MyProcedure = ProcedureInfo.GetItemAndChildren(MyProcedure.ItemID);
//// C2018-015 add the procedure tree path and the procedure number and title to the meta file
//if (BaselineMetaFile.IsOpen && i == 1) BaselineMetaFile.WriteLine("!! {0}", MyProcedure.SearchDVPath.Replace("\a", " | "));
//if (BaselineMetaFile.IsOpen) BaselineMetaFile.WriteLine("!! {0} | {1}", MyProcedure.DisplayNumber, MyProcedure.DisplayText);
ProfileTimer.Pop(profileDepth1); ProfileTimer.Pop(profileDepth1);
// B2021-102 put in the using for better memory management // B2021-102 put in the using for better memory management
// B2016-249 Output Procedure to folder associated with Parent Child // B2016-249 Output Procedure to folder associated with Parent Child
@@ -934,12 +829,12 @@ namespace VEPROMS
private void CreateDebugFiles() private void CreateDebugFiles()
{ {
if (cbxDebugPagination.Checked) if (cbxDebugPagination.Checked)
Volian.Base.Library.DebugPagination.Open(PDFPath + "\\DebugPagination.txt"); // RHM 20120925 Corrected spelling Volian.Base.Library.DebugPagination.Open($"{PDFPath}\\DebugPagination.txt"); // RHM 20120925 Corrected spelling
if (cbxDebugText.Checked) if (cbxDebugText.Checked)
Volian.Base.Library.DebugText.Open(PDFPath + "\\DebugText.txt"); Volian.Base.Library.DebugText.Open($"{PDFPath}\\DebugText.txt");
if (cbxMetaFile.Checked) // C2018-004 create meta file for baseline compares if (cbxMetaFile.Checked) // C2018-004 create meta file for baseline compares
{ {
Volian.Base.Library.BaselineMetaFile.Open(PDFPath + "\\DebugMeta.txt"); Volian.Base.Library.BaselineMetaFile.Open($"{PDFPath}\\DebugMeta.txt");
// C2018-015 add the PROMS Version, SQL Server, and Database to top of the meta file // C2018-015 add the PROMS Version, SQL Server, and Database to top of the meta file
Volian.Base.Library.BaselineMetaFile.WriteLine("!! Ver {0} {1} {2}", AboutVEPROMS.PROMSVersion, AboutVEPROMS.SQLServerName, AboutVEPROMS.DatabaseName); Volian.Base.Library.BaselineMetaFile.WriteLine("!! Ver {0} {1} {2}", AboutVEPROMS.PROMSVersion, AboutVEPROMS.SQLServerName, AboutVEPROMS.DatabaseName);
// C2018-023 set as to whether we are going to include the Word attment text in the baseline metafile // C2018-023 set as to whether we are going to include the Word attment text in the baseline metafile
@@ -975,7 +870,7 @@ namespace VEPROMS
if (MyProcedure.MyDocVersion.MultiUnitCount > 1) if (MyProcedure.MyDocVersion.MultiUnitCount > 1)
{ {
VlnSvgPageHelper.CountInApplProcs = 1; VlnSvgPageHelper.CountInApplProcs = 1;
foreach (ProcedureInfo pi in MyProcedure.MyDocVersion.Procedures) foreach (ProcedureInfo pi in MyProcedure.MyDocVersion.Procedures.OfType<ProcedureInfo>())
{ {
if (pi.ItemID == MyProcedure.ItemID) break; if (pi.ItemID == MyProcedure.ItemID) break;
bool includeProc = pi.ApplInclude(SelectedSlave); bool includeProc = pi.ApplInclude(SelectedSlave);
@@ -991,24 +886,14 @@ namespace VEPROMS
string waterMarkText = (swtbtnWaterMark.Value) ? cbxWaterMark.Text : "None" ; // B2018-124 use text of watermark form drop down list instead of enum value string waterMarkText = (swtbtnWaterMark.Value) ? cbxWaterMark.Text : "None" ; // B2018-124 use text of watermark form drop down list instead of enum value
string watermarkColor = "Blue"; // this is the default watermark color string watermarkColor = "Blue"; // this is the default watermark color
frmPDFStatusForm.SetUnitWatermark(MyProcedure, ref waterMarkText, ref watermarkColor); //C2022-004 Unit Designator Watermark frmPDFStatusForm.SetUnitWatermark(MyProcedure, ref waterMarkText, ref watermarkColor); //C2022-004 Unit Designator Watermark
ProcedureConfig procConfig = MyProcedure.MyConfig as ProcedureConfig; string waterMarkTextOverride = "";
string waterMarkTextOverride = ""; if (MyProcedure.MyConfig is ProcedureConfig procConfig) waterMarkTextOverride = procConfig.GetValue("PSI", "WATERMARKOVERRIDE"); // C2021-019: override watermark text
if (procConfig != null) waterMarkTextOverride = procConfig.GetValue("PSI", "WATERMARKOVERRIDE"); // C2021-019: override watermark text
if (swtbtnWaterMark.Value && waterMarkTextOverride != null && waterMarkTextOverride != "") waterMarkText = waterMarkTextOverride; if (swtbtnWaterMark.Value && waterMarkTextOverride != null && waterMarkTextOverride != "") waterMarkText = waterMarkTextOverride;
// Determine change bar settings. First get from config & then see if override from dialog. // Determine change bar settings. First get from config & then see if override from dialog.
// Also check that format allows override. // Also check that format allows override.
ChangeBarDefinition cbd = DetermineChangeBarSettings(); ChangeBarDefinition cbd = DetermineChangeBarSettings();
int profileDepth2 = ProfileTimer.Push(">>>> CreatePdf.GetItemAndChildren"); int profileDepth2 = ProfileTimer.Push(">>>> CreatePdf.GetItemAndChildren");
// B2021-088 moved this if/else to frmPDFStatusForm() so that the Approval logic will have access to this logic
//if (MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave > 0 || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseTransitionModifier || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseSpecificTransitionModifier)
// MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave);
//else
// MyProcedure = ProcedureInfo.GetItemAndChildren(MyProcedure.ItemID);
// C2018-015 add the procedure tree path and the procedure number and title to the meta file
//if (BaselineMetaFile.IsOpen) BaselineMetaFile.WriteLine("!! {0}", MyProcedure.SearchDVPath.Replace("\a"," | "));
//if (BaselineMetaFile.IsOpen) BaselineMetaFile.WriteLine("!! {0} | {1}", MyProcedure.DisplayNumber, MyProcedure.DisplayText);
// B2022-088: Find Doc Ro button not working in Word Sections // B2022-088: Find Doc Ro button not working in Word Sections
// Initialize Print Cache // Initialize Print Cache
MSWordToPDF.RoPrintCache = new Dictionary<string, ROFSTLookup.rochild>(); MSWordToPDF.RoPrintCache = new Dictionary<string, ROFSTLookup.rochild>();
@@ -1045,7 +930,7 @@ namespace VEPROMS
MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = 0; MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
MyProcedure.SelectedChildToPrint = 0; // B2023-035 reset MyProcedure.SelectedChildToPrint = 0; // B2023-035 reset
this.Close(); Close();
ShowDebugFiles(); ShowDebugFiles();
ProfileTimer.Pop(profileDepth); ProfileTimer.Pop(profileDepth);
ProfileTimer.ShowTimerTable(); ProfileTimer.ShowTimerTable();
@@ -1121,22 +1006,19 @@ namespace VEPROMS
DoCreatePDF(); DoCreatePDF();
} }
public void QPCreatePDF() public void QPCreatePDF() => DoCreatePDF();
{
DoCreatePDF();
}
private void DoCreatePDF() private void DoCreatePDF()
{ {
if (_AllProcedures) if (_AllProcedures)
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime dtStart = DateTime.Now; DateTime dtStart = DateTime.Now;
_MultiunitPdfLocation = cbxMultiunitPdfLocation.SelectedItem.ToString(); _MultiunitPdfLocation = cbxMultiunitPdfLocation.SelectedItem.ToString();
PromsPrinter.ClearTransPageNumProblems(); PromsPrinter.ClearTransPageNumProblems();
CreatePDFs(); CreatePDFs();
PromsPrinter.ReportTransPageNumProblems(); PromsPrinter.ReportTransPageNumProblems();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
if (_MergedPfd == null) if (_MergedPfd == null)
{ {
if (VlnSettings.DebugMode) if (VlnSettings.DebugMode)
@@ -1149,7 +1031,7 @@ namespace VEPROMS
{ {
MessageBox.Show("Completed Successfully", "Print All Procedures", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Completed Successfully", "Print All Procedures", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
this.Close(); Close();
} }
} }
else else
@@ -1158,14 +1040,14 @@ namespace VEPROMS
// B2017-009 If the selected item is null don't add a folder // B2017-009 If the selected item is null don't add a folder
if (cbxMultiunitPdfLocation.SelectedItem != null) if (cbxMultiunitPdfLocation.SelectedItem != null)
_MultiunitPdfLocation = cbxMultiunitPdfLocation.SelectedItem.ToString(); _MultiunitPdfLocation = cbxMultiunitPdfLocation.SelectedItem.ToString();
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
_CreateButtonClicked = true; // B2020-062 control the toggle of date/time prefix/suffix on pdf file name _CreateButtonClicked = true; // B2020-062 control the toggle of date/time prefix/suffix on pdf file name
CreatePDF(); CreatePDF();
_CreateButtonClicked = false; _CreateButtonClicked = false;
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
} }
private bool _Initializing = false; private readonly bool _Initializing = false;
private void btnPdfLocation_Click(object sender, EventArgs e) private void btnPdfLocation_Click(object sender, EventArgs e)
{ {
@@ -1191,12 +1073,9 @@ namespace VEPROMS
ppTxbxChangeBarUserMsgOne.Enabled = enabled; ppTxbxChangeBarUserMsgOne.Enabled = enabled;
ppTxbxChangeBarUserMsgTwo.Enabled = enabled; ppTxbxChangeBarUserMsgTwo.Enabled = enabled;
} }
private void cbxOvrrideDefChgBars_CheckStateChanged(object sender, EventArgs e) private void cbxOvrrideDefChgBars_CheckStateChanged(object sender, EventArgs e) => SetCustomControls(cbxOvrrideDefChgBars.Checked);
{
SetCustomControls(cbxOvrrideDefChgBars.Checked);
}
private void rbCustom_Click(object sender, EventArgs e) private void rbCustom_Click(object sender, EventArgs e)
{ {
SetCustomControls(true); SetCustomControls(true);
// Make Custom controls visible // Make Custom controls visible
@@ -1218,24 +1097,22 @@ namespace VEPROMS
// B2024-058 Add validation for Revision Date field of the Print dialog // B2024-058 Add validation for Revision Date field of the Print dialog
private bool validateDate(TextBox txtDate) private bool validateDate(TextBox txtDate)
{ {
DateTime dDate; if (!(txtDate.Text == ""))
if (!(txtDate.Text == "")) {
{ if (DateTime.TryParse(txtDate.Text, out _))
{
if (DateTime.TryParse(txtDate.Text, out dDate)) return true;
{ }
return true; else
} {
else string txtDate2 = txtDate.Text;
{ string message = String.Format("Date {0} in wrong format" + System.Environment.NewLine + "Correct the revision date.", txtDate2);
string txtDate2 = txtDate.Text; string txtTitle = "Invalid Format";
string message = String.Format("Date {0} in wrong format" + System.Environment.NewLine + "Correct the revision date.", txtDate2); MessageBox.Show(message, txtTitle);
string txtTitle = "Invalid Format"; return false;
MessageBox.Show(message, txtTitle); }
return false; }
} return true;
}
return true;
} }
private void txbRevDate_Enter(object sender, EventArgs e) private void txbRevDate_Enter(object sender, EventArgs e)
@@ -1243,8 +1120,6 @@ namespace VEPROMS
txbDate = txbRevDate; txbDate = txbRevDate;
grpDateSelector.Text = "Select Revision Date"; grpDateSelector.Text = "Select Revision Date";
grpDateSelector.Visible = calDateSelector.Visible = true; grpDateSelector.Visible = calDateSelector.Visible = true;
//C2021-007 position the calendar to the current RevDate or if no RevDate, position to today's date
DateTime dDate;
// B2024-058 Add validation for Revision Date field of the Print dialog // B2024-058 Add validation for Revision Date field of the Print dialog
if (!validateDate(txbDate)) if (!validateDate(txbDate))
{ {
@@ -1259,17 +1134,16 @@ namespace VEPROMS
private void txbRevDate_Leave(object sender, EventArgs e) private void txbRevDate_Leave(object sender, EventArgs e)
{ {
if (_Initializing) return; if (_Initializing) return;
if (this.ActiveControl == calDateSelector) if (ActiveControl == calDateSelector)
{ {
txbRevDate.Focus(); //B2018-059 keep the calendar open until a different field on the print dialog is selected txbRevDate.Focus(); //B2018-059 keep the calendar open until a different field on the print dialog is selected
return; return;
} }
txbDate = null; txbDate = null;
grpDateSelector.Visible = calDateSelector.Visible = false; grpDateSelector.Visible = calDateSelector.Visible = false;
// save the RevDate to the procedure's config. // save the RevDate to the procedure's config.
ProcedureConfig pc = MyProcedure.MyConfig as ProcedureConfig; if (!(MyProcedure.MyConfig is ProcedureConfig pc)) return;
if (pc == null) return; pc.Print_RevDate = txbRevDate.Text;
pc.Print_RevDate = txbRevDate.Text;
using (Item itm = Item.Get(MyProcedure.ItemID)) using (Item itm = Item.Get(MyProcedure.ItemID))
{ {
itm.MyContent.Config = MyProcedure.MyConfig.ToString(); itm.MyContent.Config = MyProcedure.MyConfig.ToString();
@@ -1283,10 +1157,9 @@ namespace VEPROMS
if (_Initializing) return; if (_Initializing) return;
txbDate = null; txbDate = null;
grpDateSelector.Visible = calDateSelector.Visible = false; grpDateSelector.Visible = calDateSelector.Visible = false;
// save the ReviewDate to the procedure's config. // save the ReviewDate to the procedure's config.
ProcedureConfig pc = MyProcedure.MyConfig as ProcedureConfig; if (!(MyProcedure.MyConfig is ProcedureConfig pc)) return;
if (pc == null) return; pc.Print_ReviewDate = txbReviewDate.Text;
pc.Print_ReviewDate = txbReviewDate.Text;
using (Item itm = Item.Get(MyProcedure.ItemID)) using (Item itm = Item.Get(MyProcedure.ItemID))
{ {
itm.MyContent.Config = MyProcedure.MyConfig.ToString(); itm.MyContent.Config = MyProcedure.MyConfig.ToString();
@@ -1326,10 +1199,9 @@ namespace VEPROMS
// C2021-062 used to save rev number information when all procedures are printed or merged // C2021-062 used to save rev number information when all procedures are printed or merged
private void SaveRevNumToProcedureConfig(string newrevnum) private void SaveRevNumToProcedureConfig(string newrevnum)
{ {
// save the RevNum to the procedure's config. // save the RevNum to the procedure's config.
ProcedureConfig pc = MyProcedure.MyConfig as ProcedureConfig; if (!(MyProcedure.MyConfig is ProcedureConfig pc)) return;
if (pc == null) return; pc.Print_Rev = newrevnum;
pc.Print_Rev = newrevnum;
using (Item itm = Item.Get(MyProcedure.ItemID)) using (Item itm = Item.Get(MyProcedure.ItemID))
{ {
itm.MyContent.Config = MyProcedure.MyConfig.ToString(); itm.MyContent.Config = MyProcedure.MyConfig.ToString();
@@ -1341,22 +1213,16 @@ namespace VEPROMS
{ {
if (expPrnSetting.Expanded) if (expPrnSetting.Expanded)
{ {
this.Size = new Size(this.Size.Width + (expPrnSetting.Size.Width - expPrnSetting.TitlePanel.Size.Height), this.Size.Height); Size = new Size(Size.Width + (expPrnSetting.Size.Width - expPrnSetting.TitlePanel.Size.Height), Size.Height);
// B2018-137 set the visability of Generate Placekeeper // B2018-137 set the visability of Generate Placekeeper
swtbtnGeneratePlacekeeper.Visible = lblGeneratePlacekeeper.Visible = ((MyProcedure.ActiveFormat.PlantFormat.FormatData.PurchaseOptions & E_PurchaseOptions.AutoPlacekeeper) == E_PurchaseOptions.AutoPlacekeeper); swtbtnGeneratePlacekeeper.Visible = lblGeneratePlacekeeper.Visible = ((MyProcedure.ActiveFormat.PlantFormat.FormatData.PurchaseOptions & E_PurchaseOptions.AutoPlacekeeper) == E_PurchaseOptions.AutoPlacekeeper);
} }
//else
// this.Size = new Size(this.Size.Width-(expPrnSetting.Size.Width-expPrnSetting.TitlePanel.Size.Height), this.Size.Height);
//Refresh();
} }
private void expPrnSetting_ExpandedChanging(object sender, DevComponents.DotNetBar.ExpandedChangeEventArgs e) private void expPrnSetting_ExpandedChanging(object sender, DevComponents.DotNetBar.ExpandedChangeEventArgs e)
{ {
if (expPrnSetting.Expanded) if (expPrnSetting.Expanded)
//this.Size = new Size(this.Size.Width+(expPrnSetting.Size.Width-expPrnSetting.TitlePanel.Size.Height), this.Size.Height); Size = new Size(Size.Width-(expPrnSetting.Size.Width-expPrnSetting.TitlePanel.Size.Height), Size.Height);
//else
this.Size = new Size(this.Size.Width-(expPrnSetting.Size.Width-expPrnSetting.TitlePanel.Size.Height), this.Size.Height);
//Refresh();
} }
@@ -1395,15 +1261,15 @@ namespace VEPROMS
DoCreatePDF(); // create indivitual pdfs DoCreatePDF(); // create indivitual pdfs
if (_MergedPdfPath != null && _MergedPdfPath != PDFPath) PDFPath = _MergedPfd.Folder = _MergedPdfPath; if (_MergedPdfPath != null && _MergedPdfPath != PDFPath) PDFPath = _MergedPfd.Folder = _MergedPdfPath;
// C2021-063 pass in whether to generate Alarm Point List text when a merge is done // C2021-063 pass in whether to generate Alarm Point List text when a merge is done
if (!_MergedPfd.DoTheMerge(PromsPrinter.MergedLandscapePages,cbxAlmPtTxt.Checked)) return; // merge them together. if (!_MergedPfd.DoTheMerge(cbxAlmPtTxt.Checked)) return; // merge them together.
// if the property to show the file after printing is set (on the version dialog), display it. Otherwise do a dialog to let user know it's done // if the property to show the file after printing is set (on the version dialog), display it. Otherwise do a dialog to let user know it's done
if (_DocVersionConfig.Print_MergedPdfsViewAfter) if (_DocVersionConfig.Print_MergedPdfsViewAfter)
{ {
if (_MergedPfd.MergedPdfs != null && _MergedPfd.MergedPdfs.Count > 0) if (_MergedPfd.MergedPdfs != null && _MergedPfd.MergedPdfs.Count > 0)
{ {
System.Diagnostics.Process sdp = System.Diagnostics.Process.Start(_MergedPfd.MergedFileName); System.Diagnostics.Process sdp = System.Diagnostics.Process.Start(_MergedPfd.MergedFileName);
if (sdp != null) // B2020-055 if the current .NET version does not recognize the program used to display the PDF, it will return a NULL (ex. Microsoft Edge) // B2020-055 if the current .NET version does not recognize the program used to display the PDF, it will return a NULL (ex. Microsoft Edge)
sdp.WaitForInputIdle(); sdp?.WaitForInputIdle();
} }
} }
else if (VlnSettings.DebugMode) else if (VlnSettings.DebugMode)
@@ -1416,7 +1282,7 @@ namespace VEPROMS
{ {
FlexibleMessageBox.Show("Completed Successfully", "Print All and Merge Procedures", MessageBoxButtons.OK, MessageBoxIcon.Information); FlexibleMessageBox.Show("Completed Successfully", "Print All and Merge Procedures", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
this.Close(); Close();
} }
private void cbxAssignRevToAllMergedPrcs_CheckedChanged(object sender, EventArgs e) private void cbxAssignRevToAllMergedPrcs_CheckedChanged(object sender, EventArgs e)
@@ -1428,10 +1294,5 @@ namespace VEPROMS
_NewRevForAllProcs = null; _NewRevForAllProcs = null;
} }
//private void cbxDebug_CheckedChanged(object sender, EventArgs e)
//{
// cbxCmpPRMSpfd.Visible = cbxDebug.Checked;
//}
} }
} }
@@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Not modifying Naming Styles")]
+158 -2
View File
@@ -25035,6 +25035,162 @@ IF (@@Error = 0) PRINT 'Trigger Alteration: tr_Contents_Delete Succeeded'
ELSE PRINT 'Trigger Alteration: tr_Contents_Delete Error on Creation' ELSE PRINT 'Trigger Alteration: tr_Contents_Delete Error on Creation'
GO GO
/****** Object: View [dbo].[vwDupAccIDs] ***********************/
If Exists(SELECT * FROM sys.objects Where name = 'vwDupAccIDs' AND type in (N'V'))
DROP VIEW [dbo].[vwDupAccIDs]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 10/7/2026
Description: View for Duplicate Accessory Page IDs in ROs in PROMS
Usage: Select * FROM dbo.vwDupAccIDs Order by RofstID, AccPageID, GroupTitle
==========================================================================================================
*/
CREATE View [dbo].[vwDupAccIDs]
AS
SELECT rochild.AccPageID, NUMAccPageIDs,
AccPageIDPrefix = dbiAP, GroupTitle = dbiTitle,
title, value, roid, rochild.RofstID
FROM
vwRofstData_RofstChildren rochild
INNER JOIN
(SELECT ROFstID = Max(ROFstID)
FROM ROFsts
Group by RODbID) latestfsts
ON latestfsts.ROFstID = rochild.RofstID
INNER JOIN
(SELECT NUMAccPageIDs=COunt(*), RoFstID, AccPageID FROM
vwRofstData_RofstChildren
WHERE AccPageID IS NOT NULL
Group by RoFstID, AccPageID
Having Count(*) > 1
) dupAcc
ON latestfsts.ROFstID = dupAcc.RofstID
AND dupAcc.AccPageID = rochild.AccPageID
go
IF (@@Error = 0) PRINT 'View [vwDupAccIDs] Succeeded'
ELSE PRINT 'View [vwDupAccIDs] Error on Creation'
go
/****** Object: StoredProcedure [getDupAccIDs] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getDupAccIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [getDupAccIDs];
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 10/7/2026
Description: Procedure for Duplicate Accessory Page IDs in ROs in PROMS
==========================================================================================================
*/
CREATE PROCEDURE [dbo].[getDupAccIDs]
AS
BEGIN
Select * FROM dbo.vwDupAccIDs Order by RofstID, AccPageID, GroupTitle
RETURN
END
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: getDupAccIDs Succeeded'
ELSE PRINT 'Procedure Creation: getDupAccIDs Error on Creation'
GO
/****** Object: StoredProcedure [getDupAccPrefixes] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getDupAccPrefixes]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [getDupAccPrefixes];
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 10/7/2026
Description: Procedure for Duplicate Accessory Page Prefixes in ROs in PROMS
==========================================================================================================
*/
CREATE PROCEDURE [dbo].[getDupAccPrefixes]
AS
BEGIN
SELECT AccPageIDPrefix = dbiAP, GroupTitle = dbiTitle
FROM
RofstDatabase
INNER JOIN
(SELECT ROFstID = Max(ROFstID)
FROM ROFsts
Group by RODbID) latestfsts
ON latestfsts.ROFstID = RofstDatabase.RofstID
INNER JOIN
(SELECT RoFstID, APPrefix = dbiAP FROM
RofstDatabase
Group by RoFstID, dbiAP
Having Count(*) > 1
) dupAcc
ON latestfsts.ROFstID = dupAcc.RofstID AND APPrefix = dbiAP
Order by dbiAP, dbiTitle
RETURN
END
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: getDupAccPrefixes Succeeded'
ELSE PRINT 'Procedure Creation: getDupAccPrefixes Error on Creation'
GO
/****** Object: StoredProcedure [getDocsDupAccIDs] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getDocsDupAccIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [getDocsDupAccIDs];
GO
/*
==========================================================================================================
Author: Matthew Schill
Create Date: 10/7/2026
Description: Get PROMS Documents containing Duplicate Accessory Page IDs
==========================================================================================================
*/
CREATE PROCEDURE [dbo].[getDocsDupAccIDs]
AS
BEGIN
Select Path = CASE WHEN VN.ParentName = VN.GrandParentName THEN ''
ELSE VN.GrandParentName + '->' END +
VN.ParentName + '->' + VN.FolderName + '->' + Pth.Path + '`' + Text,
AccPageID, DupAcc.roid, Contents.ContentID
FROM dbo.vwDupAccIDs DupAcc
INNER JOIN DROUsages with (NoLock) ON LEFT(DROUsages.ROID,12) = LEFT(DupAcc.roid,12)
INNER JOIN Entries with (NoLock) on DROUsages.DocID = Entries.DocID
INNER JOIN Contents with (NoLock) on Contents.ContentID = Entries.ContentID
INNER JOIN Items with (NoLock) on Contents.ContentID = Items.ContentID
INNER JOIN vefn_getversionItems('') vi on Contents.contentID = vi.contentID
INNER JOIN VEFN_GetVersionNames() VN ON vi.VersionID = VN.VersionID
OUTER APPLY
(Select Path = REPLACE(dbo.ve_GetPath(Items.ItemID), '\u8209?', '-')) Pth
Order by GrandParentName, ParentName, FolderName, Path, Text, AccPageID
RETURN
END
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: getDocsDupAccIDs Succeeded'
ELSE PRINT 'Procedure Creation: getDocsDupAccIDs Error on Creation'
GO
/* /*
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
| ADD New Code Before this Block | | ADD New Code Before this Block |
@@ -25068,8 +25224,8 @@ BEGIN TRY -- Try Block
DECLARE @RevDate varchar(255) DECLARE @RevDate varchar(255)
DECLARE @RevDescription varchar(255) DECLARE @RevDescription varchar(255)
set @RevDate = '07/16/2026 8:30 AM' set @RevDate = '10/7/2026 9:30 AM'
set @RevDescription = 'Reworked ve_GetParentItem for Performance improvement' set @RevDescription = 'Added Reports for Duplicate Acc Page IDs in ROs'
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
-2
View File
@@ -1,7 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
using Volian.Base.Library;
namespace VEPROMS namespace VEPROMS
{ {
+31 -1
View File
@@ -263,7 +263,7 @@ WITH EXECUTE AS OWNER
AS AS
SELECT COUNT (RecID) SELECT COUNT (RecID)
FROM [ROALL] FROM [ROALL]
WHERE [ROTable]=@ROTable AND AccPageID=@AccPageID WHERE [ROTable]=@ROTable AND AccPageID=@AccPageID
GO GO
-- Display the status of Proc creation -- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: getCountRecidByAccid Succeeded' IF (@@Error = 0) PRINT 'Procedure Creation: getCountRecidByAccid Succeeded'
@@ -827,4 +827,34 @@ IF (@@Error = 0) PRINT 'Table Creation: ROALL Succeeded'
ELSE PRINT 'Table Creation: DeleteLog ROALL on Creation' ELSE PRINT 'Table Creation: DeleteLog ROALL on Creation'
GO GO
/****** Object: StoredProcedure [dbo].[checkAccPagePrefixUsed] ******/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[checkAccPagePrefixUsed]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [checkAccPagePrefixUsed];
GO
/*****************************************************************************
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
Copyright 2026 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
CREATE PROCEDURE [dbo].[checkAccPagePrefixUsed]
(
@Prefix char(32),
@ROTable char(8)
)
WITH EXECUTE AS OWNER
AS
SELECT COUNT(*)
FROM
(
SELECT ROTable, cast(info as xml) xinfo
FROM [ROALL]
WHERE Info LIKE '%AccPageIDPrefix%' AND ROTable <> @ROTable
) TBL
cross apply
xinfo.nodes('vlnGroup') t1(r1)
WHERE r1.value('@AccPageIDPrefix','varchar(max)') = @Prefix
GO
-- Display the status of Proc creation
IF (@@Error = 0) PRINT 'Procedure Creation: checkAccPagePrefixUsed Succeeded'
ELSE PRINT 'Procedure Creation: checkAccPagePrefixUsed Error on Creation'
GO
@@ -1,12 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using DevComponents.DotNetBar;
namespace VEPROMS namespace VEPROMS
{ {
@@ -154,18 +154,12 @@
<Compile Include="AboutVEPROMS.Designer.cs"> <Compile Include="AboutVEPROMS.Designer.cs">
<DependentUpon>AboutVEPROMS.cs</DependentUpon> <DependentUpon>AboutVEPROMS.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="BookMarks.cs" />
<Compile Include="dlgAnnotationsSelect.cs"> <Compile Include="dlgAnnotationsSelect.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="dlgAnnotationsSelect.Designer.cs"> <Compile Include="dlgAnnotationsSelect.Designer.cs">
<DependentUpon>dlgAnnotationsSelect.cs</DependentUpon> <DependentUpon>dlgAnnotationsSelect.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="dlgAnnotationsSelect.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>dlgAnnotationsSelect.resx</DependentUpon>
</Compile>
<Compile Include="dlgApproveProcedure.cs"> <Compile Include="dlgApproveProcedure.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -349,6 +343,7 @@
<Compile Include="frmVersionsProperties.Designer.cs"> <Compile Include="frmVersionsProperties.Designer.cs">
<DependentUpon>frmVersionsProperties.cs</DependentUpon> <DependentUpon>frmVersionsProperties.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<EmbeddedResource Include="AboutVEPROMS.resx"> <EmbeddedResource Include="AboutVEPROMS.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
@@ -385,6 +380,7 @@
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmGenTools.resx"> <EmbeddedResource Include="frmGenTools.resx">
<DependentUpon>frmGenTools.cs</DependentUpon> <DependentUpon>frmGenTools.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmPDFStatusForm.resx"> <EmbeddedResource Include="frmPDFStatusForm.resx">
<DependentUpon>frmPDFStatusForm.cs</DependentUpon> <DependentUpon>frmPDFStatusForm.cs</DependentUpon>
-6
View File
@@ -1,9 +1,3 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
namespace VEPROMS namespace VEPROMS
@@ -1,7 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data;
using System.Drawing; using System.Drawing;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
@@ -21,11 +20,7 @@ namespace VEPROMS
public partial class dlgApproveProcedure : Form public partial class dlgApproveProcedure : Form
{ {
public event DisplayConsistencyReportEvent ConsistencyPrintRequest; public event DisplayConsistencyReportEvent ConsistencyPrintRequest;
private void OnConsistencyPrintRequest(ConsistencyReportArgs args) private void OnConsistencyPrintRequest(ConsistencyReportArgs args) => ConsistencyPrintRequest?.Invoke(this, args);
{
if (ConsistencyPrintRequest != null)
ConsistencyPrintRequest(this, args);
}
private bool CanApprove private bool CanApprove
{ {
get { return btnApprove2.Enabled; } get { return btnApprove2.Enabled; }
@@ -37,12 +32,8 @@ namespace VEPROMS
tsslStatus.Text = value ? "" : "Need to correct the Rev Numbers marked with Question Marks"; tsslStatus.Text = value ? "" : "Need to correct the Rev Numbers marked with Question Marks";
} }
} }
private int _ApplicabilityIndex = 0;
public int ApplicabilityIndex public int ApplicabilityIndex { get; set; } = 0;
{
get { return _ApplicabilityIndex; }
set { _ApplicabilityIndex = value; }
}
private SessionInfo _MySessionInfo; private SessionInfo _MySessionInfo;
public SessionInfo MySessionInfo public SessionInfo MySessionInfo
{ {
@@ -53,23 +44,19 @@ namespace VEPROMS
_MyApproval.MySessionInfo = _MySessionInfo; _MyApproval.MySessionInfo = _MySessionInfo;
} }
} }
private ApprovalInfo _MyApproval; private readonly ApprovalInfo _MyApproval;
private DocVersionInfo _MyDocVersion; private readonly DocVersionInfo _MyDocVersion;
frmVEPROMS _MyFrmVEPROMS = null;
public frmVEPROMS MyFrmVEPROMS public frmVEPROMS MyFrmVEPROMS { get; set; } = null;
{ private readonly bool _initializing = false; // C2018-008 redesign of user interface
get { return _MyFrmVEPROMS; }
set { _MyFrmVEPROMS = value; }
}
private bool _initializing = false; // C2018-008 redesign of user interface
public dlgApproveProcedure(DocVersionInfo myDocVersion, frmVEPROMS myFrmVEPROMS) // approve all procedures public dlgApproveProcedure(DocVersionInfo myDocVersion, frmVEPROMS myFrmVEPROMS) // approve all procedures
{ {
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing _MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
ApplicabilityIndex = myDocVersion.DocVersionConfig.SelectedSlave; ApplicabilityIndex = myDocVersion.DocVersionConfig.SelectedSlave;
_MyApproval.SavedSlave = ApplicabilityIndex; _MyApproval.SavedSlave = ApplicabilityIndex;
this.ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest); ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
this.ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest); ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
_MyDocVersion = myDocVersion; _MyDocVersion = myDocVersion;
_MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list _MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list
InitializeComponent(); InitializeComponent();
@@ -77,7 +64,7 @@ namespace VEPROMS
_MyApproval.StatusUpdated -= new ApprovalStatusChangeEvent(_MyApproval_StatusUpdated); _MyApproval.StatusUpdated -= new ApprovalStatusChangeEvent(_MyApproval_StatusUpdated);
_MyApproval.StatusUpdated += new ApprovalStatusChangeEvent(_MyApproval_StatusUpdated); _MyApproval.StatusUpdated += new ApprovalStatusChangeEvent(_MyApproval_StatusUpdated);
SetupComboBoxes(); SetupComboBoxes();
foreach (ProcedureInfo pi in myDocVersion.Procedures) foreach (ProcedureInfo pi in myDocVersion.Procedures.OfType<ProcedureInfo>())
{ {
bool includeProc = pi.ApplInclude(ApplicabilityIndex); // C2021-027: Procedure level PC/PC bool includeProc = pi.ApplInclude(ApplicabilityIndex); // C2021-027: Procedure level PC/PC
if (includeProc) if (includeProc)
@@ -98,31 +85,8 @@ namespace VEPROMS
private void FlexGridAddEvents() private void FlexGridAddEvents()
{ {
//fgProcs.ChangeEdit += new EventHandler(fgProcs_ChangeEdit);
//Console.WriteLine(fgProcs.ComboBoxEditor.GetType().Name);
//Console.WriteLine(fgProcs.Editor.GetType().Name);
//fgProcs.ImeModeChanged += new EventHandler(fgProcs_ImeModeChanged);
//fgProcs.LeaveEdit += new C1.Win.C1FlexGrid.RowColEventHandler(fgProcs_LeaveEdit);
//fgProcs.SetupEditor += new C1.Win.C1FlexGrid.RowColEventHandler(fgProcs_SetupEditor);
//fgProcs.StartEdit += new C1.Win.C1FlexGrid.RowColEventHandler(fgProcs_StartEdit);
//fgProcs.ValidateEdit += new C1.Win.C1FlexGrid.ValidateEditEventHandler(fgProcs_ValidateEdit);
fgProcs.ComboCloseUp -= new C1.Win.C1FlexGrid.RowColEventHandler(fgProcs_ComboCloseUp); fgProcs.ComboCloseUp -= new C1.Win.C1FlexGrid.RowColEventHandler(fgProcs_ComboCloseUp);
fgProcs.ComboCloseUp += new C1.Win.C1FlexGrid.RowColEventHandler(fgProcs_ComboCloseUp); fgProcs.ComboCloseUp += new C1.Win.C1FlexGrid.RowColEventHandler(fgProcs_ComboCloseUp);
//fgProcs.MouseDown += new MouseEventHandler(fgProcs_MouseDown);
//fgProcs.MouseUp += new MouseEventHandler(fgProcs_MouseUp);
}
void fgProcs_MouseUp(object sender, MouseEventArgs e)
{
C1.Win.C1FlexGrid.HitTestInfo hti = fgProcs.HitTest(e.X, e.Y);
//Console.WriteLine("fgProcs_MouseUp X={0},Y={1},Row={2},Col={3}", e.X, e.Y, hti.Row, hti.Column);
}
void fgProcs_MouseDown(object sender, MouseEventArgs e)
{
C1.Win.C1FlexGrid.HitTestInfo hti = fgProcs.HitTest(e.X, e.Y);
//Console.WriteLine("fgProcs_MouseDown X={0},Y={1},Row={2},Col={3}", e.X, e.Y, hti.Row, hti.Column);
} }
void fgProcs_ComboCloseUp(object sender, C1.Win.C1FlexGrid.RowColEventArgs e) void fgProcs_ComboCloseUp(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
@@ -134,46 +98,6 @@ namespace VEPROMS
//Console.WriteLine("fgProcs_ComboCloseUp row: {0}, col: {1}, val: {2}, etostring: {3}", e.Row, e.Col, fgProcs[e.Row, e.Col], e.ToString()); //Console.WriteLine("fgProcs_ComboCloseUp row: {0}, col: {1}, val: {2}, etostring: {3}", e.Row, e.Col, fgProcs[e.Row, e.Col], e.ToString());
} }
void fgProcs_ValidateEdit(object sender, C1.Win.C1FlexGrid.ValidateEditEventArgs e)
{
//Console.WriteLine("fgProcs_ValidateEdit");
}
void fgProcs_StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
object val = fgProcs[e.Row, e.Col];
DateTime dt = (DateTime)val;
if (dt != null)
dt = dt.AddHours(1);
fgProcs[e.Row, e.Col] = dt;
//Console.WriteLine("fgProcs_StartEdit val: {0}, dt: {1}", val, dt);
}
void fgProcs_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
//Console.WriteLine("fgProcs_SetupEditor");
}
void fgProcs_LeaveEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
object val = fgProcs[e.Row, e.Col];
DateTime dt = (DateTime)val;
if (dt != null && dt.Hour != 0)
dt = dt.AddHours(-1);
fgProcs[e.Row, e.Col] = dt;
//Console.WriteLine("fgProcs_LeaveEdit val: {0}, dt: {1}, mouserow={2}, mousecol={3}", val, dt, fgProcs.MouseRow, fgProcs.MouseCol);
}
void fgProcs_ImeModeChanged(object sender, EventArgs e)
{
//Console.WriteLine("fgProcs_ImeModeChanged");
}
void fgProcs_ChangeEdit(object sender, EventArgs e)
{
//Console.WriteLine("fgProcs_ChangeEdit");
}
//C2020-036 returns a string of duplicate procedure numbers separated by newlines for use in FlexibleMessageBox //C2020-036 returns a string of duplicate procedure numbers separated by newlines for use in FlexibleMessageBox
private string dupProcList private string dupProcList
{ {
@@ -183,12 +107,13 @@ namespace VEPROMS
if (dpl.Count > 0) if (dpl.Count > 0)
{ {
foreach (string pn in dpl) foreach (string pn in dpl)
rtn += pn + "\n"; rtn += $"{pn}\n";
rtn = rtn.TrimEnd('\n'); rtn = rtn.TrimEnd('\n');
} }
return rtn; return rtn;
} }
} }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private List<string> dpl = new List<string>(); //C2020-036 used to create list duplicate procedure numbers private List<string> dpl = new List<string>(); //C2020-036 used to create list duplicate procedure numbers
private bool InitializePanelSelect() private bool InitializePanelSelect()
@@ -196,7 +121,7 @@ namespace VEPROMS
if (clbMore.Items.Count == 0) if (clbMore.Items.Count == 0)
{ {
dpl.Clear(); dpl.Clear();
foreach (ProcedureInfo pi in _MyDocVersion.Procedures) foreach (ProcedureInfo pi in _MyDocVersion.Procedures.OfType<ProcedureInfo>())
{ {
bool includeProc = pi.ApplInclude(ApplicabilityIndex); // C2021-027: Procedure level PC/PC bool includeProc = pi.ApplInclude(ApplicabilityIndex); // C2021-027: Procedure level PC/PC
if (includeProc) if (includeProc)
@@ -245,22 +170,22 @@ namespace VEPROMS
lblViewPDF.Enabled = false; lblViewPDF.Enabled = false;
if (_MyApproval.MyProcedures.Count == 1) if (_MyApproval.MyProcedures.Count == 1)
{ {
this.Text = "Approve " + _MyApproval.MyProcedures[0].ProcInfo.DisplayNumber; Text = "Approve " + _MyApproval.MyProcedures[0].ProcInfo.DisplayNumber;
swtbtViewPDF.Value = false; swtbtViewPDF.Value = false;
swtbtViewPDF.Enabled = true; swtbtViewPDF.Enabled = true;
lblViewPDF.Enabled = true; lblViewPDF.Enabled = true;
} }
else if (_MyApproval.MyProcedures.Count == _MyDocVersion.Procedures.Count) else if (_MyApproval.MyProcedures.Count == _MyDocVersion.Procedures.Count)
this.Text = "Approve All Procedures"; Text = "Approve All Procedures";
else else
this.Text = "Approve Selected Procedures"; Text = "Approve Selected Procedures";
} }
private void InitializePanelApprove() private void InitializePanelApprove()
{ {
setupLablesAndSwitches(); // C2018-008 redesign of user interface setupLablesAndSwitches(); // C2018-008 redesign of user interface
SetupMyApproval(); SetupMyApproval();
} }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private Dictionary<string, ProcedureInfo> tmpProcedures = new Dictionary<string, ProcedureInfo>(); private Dictionary<string, ProcedureInfo> tmpProcedures = new Dictionary<string, ProcedureInfo>();
private ProcedureInfo GetProcedureInfoByKey(string key) private ProcedureInfo GetProcedureInfoByKey(string key)
{ {
@@ -277,12 +202,13 @@ namespace VEPROMS
return tmpProcedures[GetDisplayNumberOnly(key)]; return tmpProcedures[GetDisplayNumberOnly(key)];
} }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "selectsome Kept for Legacy - To give Constructor a different Signature")]
public dlgApproveProcedure(DocVersionInfo myDocVersion, bool selectSome, frmVEPROMS myFrmVEPROMS) // approve some procedures public dlgApproveProcedure(DocVersionInfo myDocVersion, bool selectSome, frmVEPROMS myFrmVEPROMS) // approve some procedures
{ {
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing _MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
this.ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest); ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
this.ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest); ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
_MyDocVersion = myDocVersion; _MyDocVersion = myDocVersion;
_MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list _MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list
InitializeComponent(); InitializeComponent();
@@ -303,8 +229,8 @@ namespace VEPROMS
{ {
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing _MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
this.ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest); ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
this.ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest); ConsistencyPrintRequest += new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
_MyDocVersion = myProcedure.MyDocVersion; _MyDocVersion = myProcedure.MyDocVersion;
_MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list _MyDocVersion.ResetProcedures(); // B2021-035: Pasted, modified number and deleted procedures not refreshed so missing from list
ApplicabilityIndex = _MyDocVersion.DocVersionConfig.SelectedSlave; // B2022-033 set the child being approved or workflow so other procedure list can populate ApplicabilityIndex = _MyDocVersion.DocVersionConfig.SelectedSlave; // B2022-033 set the child being approved or workflow so other procedure list can populate
@@ -328,12 +254,7 @@ namespace VEPROMS
} }
_initializing = false; _initializing = false;
} }
private bool ProcedureSetHasDuplicateProcedureNumbers()
{
bool hasDuplicateProcNums = false;
return hasDuplicateProcNums;
}
void _MyApproval_StatusUpdated(ApprovalInfo sender, ApprovalMessageArgs e) void _MyApproval_StatusUpdated(ApprovalInfo sender, ApprovalMessageArgs e)
{ {
tsslMsg2.Text = e.MyStatus; tsslMsg2.Text = e.MyStatus;
@@ -342,33 +263,16 @@ namespace VEPROMS
private void SetupMyApproval() private void SetupMyApproval()
{ {
approvalInfoBindingSource.DataSource = _MyApproval; approvalInfoBindingSource.DataSource = _MyApproval;
//if(_MyApproval.MyProcedures.Count == 1) _MyApproval.RevType = 1; // C2018-008 redesign of user interface
// lblOldRevNumber.Text = _MyApproval.RevNumber;
//else if (_MyApproval.MyProcedures.Count > 1)
// lblMaxRevNumber1.Text = GetMaxRevNumber();
_MyApproval.RevType = 1; // C2018-008 redesign of user interface //(revTypeBindingSource.Current as RevType).TypeID;
_MyApproval.RevStage = (stageInfoBindingSource.Current == null) ? 0 : (stageInfoBindingSource.Current as StageInfo).StageID;// C2018-008 redesign of user interface _MyApproval.RevStage = (stageInfoBindingSource.Current == null) ? 0 : (stageInfoBindingSource.Current as StageInfo).StageID;// C2018-008 redesign of user interface
approvalInfoBindingSource.ResetBindings(false); approvalInfoBindingSource.ResetBindings(false);
approvalProcedureBindingSource.DataSource = _MyApproval.MyProcedures; approvalProcedureBindingSource.DataSource = _MyApproval.MyProcedures;
approvalProcedureBindingSource.ResetBindings(false); approvalProcedureBindingSource.ResetBindings(false);
//this.ConsistencyPrintRequest -= new DisplayConsistencyReportEvent(dlgApproveProcedure_ConsistencyPrintRequest);
}
private string GetMaxRevNumber()
{
string mrn = string.Empty;
foreach (ApprovalProcedure ap in _MyApproval.MyProcedures)
{
int k = _MyApproval.FancyShmancyRevCompare(mrn, ap.RevNumber);
if (k < 0)
mrn = ap.RevNumber;
}
return mrn;
} }
void dlgApproveProcedure_ConsistencyPrintRequest(object sender, ConsistencyReportArgs args) void dlgApproveProcedure_ConsistencyPrintRequest(object sender, ConsistencyReportArgs args)
{ {
foreach (ProcedureInfo pi in args.MyItems) foreach (ProcedureInfo pi in args.MyItems.OfType<ProcedureInfo>())
pi.IsSelected = _MyApproval.ProcedureExists(pi); pi.IsSelected = _MyApproval.ProcedureExists(pi);
PDFConsistencyCheckReport rpt = new PDFConsistencyCheckReport(args.ReportName, args.MyItems, args.MyDocVersion); //B2020-020 needed to pass in DocVersion to get paper size from format PDFConsistencyCheckReport rpt = new PDFConsistencyCheckReport(args.ReportName, args.MyItems, args.MyDocVersion); //B2020-020 needed to pass in DocVersion to get paper size from format
rpt.BuildReport(); rpt.BuildReport();
@@ -389,20 +293,12 @@ namespace VEPROMS
private void btnApprove_Click(object sender, EventArgs e) private void btnApprove_Click(object sender, EventArgs e)
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
if(!_MyApproval.Approve(new Point(Left,Bottom),cmbRevisionStage2.Text)) // C2021-020 pass in the revision stage name if(!_MyApproval.Approve(new Point(Left,Bottom),cmbRevisionStage2.Text)) // C2021-020 pass in the revision stage name
this.DialogResult = DialogResult.None; DialogResult = DialogResult.None;
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// C2018-008 redesign of user interface
// -- Note that the Revison Type data source is still connected (revTypeBindingSource) - commented out for documentatin purposes
//private void cmbRevisionType_SelectedIndexChanged(object sender, EventArgs e)
//{
// RevType rt = cmbRevisionType2.SelectedItem as RevType;
// _MyApproval.RevType = rt.TypeID;
//}
private void cmbRevisionStage_SelectedIndexChanged(object sender, EventArgs e) private void cmbRevisionStage_SelectedIndexChanged(object sender, EventArgs e)
{ {
StageInfo si = cmbRevisionStage2.SelectedItem as StageInfo; StageInfo si = cmbRevisionStage2.SelectedItem as StageInfo;
@@ -431,7 +327,6 @@ namespace VEPROMS
SetupComboBoxes(); SetupComboBoxes();
for (int i = 0; i < clbMore.Items.Count; i++) for (int i = 0; i < clbMore.Items.Count; i++)
{ {
string xyz = clbMore.Items[i].ToString();
ProcedureInfo pi = GetProcedureInfoByKey(clbMore.Items[i].ToString()); ProcedureInfo pi = GetProcedureInfoByKey(clbMore.Items[i].ToString());
if (clbMore.GetItemChecked(i)) if (clbMore.GetItemChecked(i))
{ {
@@ -449,10 +344,7 @@ namespace VEPROMS
RefreshCount(); // B2021-015: select/clear all not populating left panel & count not refreshed. RefreshCount(); // B2021-015: select/clear all not populating left panel & count not refreshed.
} }
private void btnCheck_Click(object sender, EventArgs e) private void btnCheck_Click(object sender, EventArgs e) => UpdateClbMore();
{
UpdateClbMore();
}
private ItemInfoList _MyItemInfoList; private ItemInfoList _MyItemInfoList;
private void UpdateClbMore() private void UpdateClbMore()
@@ -485,7 +377,7 @@ namespace VEPROMS
if (info.Contains(" - (")) if (info.Contains(" - ("))
clbMore.Items[i] = info.Substring(0, info.IndexOf(" - (")); clbMore.Items[i] = info.Substring(0, info.IndexOf(" - ("));
} }
foreach (ProcedureInfo npi in _MyItemInfoList) foreach (ProcedureInfo npi in _MyItemInfoList.OfType<ProcedureInfo>())
{ {
string info = string.Format("{0} - ({1})", npi.DisplayNumber, npi.MyDifferenceReasons); string info = string.Format("{0} - ({1})", npi.DisplayNumber, npi.MyDifferenceReasons);
//checked list box //checked list box
@@ -506,7 +398,7 @@ namespace VEPROMS
for (int i = 0; i < clbMore.Items.Count; i++) for (int i = 0; i < clbMore.Items.Count; i++)
{ {
if (!clbMore.Items[i].ToString().Contains(" - (")) if (!clbMore.Items[i].ToString().Contains(" - ("))
clbMore.Items[i] = clbMore.Items[i].ToString() + " - (none)"; clbMore.Items[i] = $"{clbMore.Items[i]} - (none)";
} }
Application.DoEvents(); Application.DoEvents();
clbMore.Enabled = btnAll.Enabled = btnClear.Enabled = true; clbMore.Enabled = btnAll.Enabled = btnClear.Enabled = true;
@@ -523,10 +415,7 @@ namespace VEPROMS
} }
} }
// B2021-015: select/clear all not populating left panel & count not refreshed. // B2021-015: select/clear all not populating left panel & count not refreshed.
private void RefreshCount() private void RefreshCount() => lblMore.Text = string.Format("{0} Procedures, {1} Selected", clbMore.Items.Count, clbMore.CheckedItems.Count);
{
lblMore.Text = string.Format("{0} Procedures, {1} Selected", clbMore.Items.Count, clbMore.CheckedItems.Count);
}
void ItemInfoList_ConsistencyCheckUpdated(object sender, ItemInfoListCCEventArgs args) void ItemInfoList_ConsistencyCheckUpdated(object sender, ItemInfoListCCEventArgs args)
{ {
@@ -572,14 +461,12 @@ namespace VEPROMS
if (clbMore.Items[itemIndex] != null) if (clbMore.Items[itemIndex] != null)
{ {
SuperTooltipInfo stti = sttMore.GetSuperTooltip(clbMore); SuperTooltipInfo stti = sttMore.GetSuperTooltip(clbMore);
//string headerText = tmpProcedures[xyz].DisplayNumber;
//string bodyText = tmpProcedures[xyz].MyDifferencesText;
stti.HeaderText = GetProcedureInfoByKey(clbMore.Items[itemIndex].ToString()).DisplayNumber; stti.HeaderText = GetProcedureInfoByKey(clbMore.Items[itemIndex].ToString()).DisplayNumber;
stti.BodyText = GetProcedureInfoByKey(clbMore.Items[itemIndex].ToString()).MyDifferencesText; stti.BodyText = GetProcedureInfoByKey(clbMore.Items[itemIndex].ToString()).MyDifferencesText;
stti.FooterVisible = false; stti.FooterVisible = false;
using (Graphics g = CreateGraphics()) using (Graphics g = CreateGraphics())
{ {
SizeF sf = g.MeasureString(stti.BodyText, this.Font); SizeF sf = g.MeasureString(stti.BodyText, Font);
stti.CustomSize = new Size(10 + sf.ToSize().Width, 0); stti.CustomSize = new Size(10 + sf.ToSize().Width, 0);
} }
sttMore.ShowTooltip(sender); sttMore.ShowTooltip(sender);
@@ -611,10 +498,7 @@ namespace VEPROMS
} }
private void btnReportMore_Click(object sender, EventArgs e) private void btnReportMore_Click(object sender, EventArgs e) => OnConsistencyPrintRequest(new ConsistencyReportArgs(Volian.Base.Library.VlnSettings.TemporaryFolder + @"\MyConsistency.pdf", _MyItemInfoList, _MyDocVersion)); //B2020-020 needed to pass in DocVersion to get paper size from format
{
OnConsistencyPrintRequest(new ConsistencyReportArgs(Volian.Base.Library.VlnSettings.TemporaryFolder + @"\MyConsistency.pdf", _MyItemInfoList, _MyDocVersion)); //B2020-020 needed to pass in DocVersion to get paper size from format
}
private void fgProcs_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e) private void fgProcs_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{ {
@@ -724,19 +608,16 @@ namespace VEPROMS
private void expAddProcConChk_ExpandedChanged(object sender, ExpandedChangeEventArgs e) // C2018-008 redesign of user interface private void expAddProcConChk_ExpandedChanged(object sender, ExpandedChangeEventArgs e) // C2018-008 redesign of user interface
{ {
if (expAddProcConChk.Expanded) if (expAddProcConChk.Expanded)
this.Size = new Size(this.Size.Width + (expAddProcConChk.Size.Width - expAddProcConChk.TitlePanel.Size.Height), this.Size.Height); Size = new Size(Size.Width + (expAddProcConChk.Size.Width - expAddProcConChk.TitlePanel.Size.Height), Size.Height);
} }
private void expAddProcConChk_ExpandedChanging(object sender, ExpandedChangeEventArgs e) // C2018-008 redesign of user interface private void expAddProcConChk_ExpandedChanging(object sender, ExpandedChangeEventArgs e) // C2018-008 redesign of user interface
{ {
if (expAddProcConChk.Expanded) if (expAddProcConChk.Expanded)
this.Size = new Size(this.Size.Width - (expAddProcConChk.Size.Width - expAddProcConChk.TitlePanel.Size.Height), this.Size.Height); Size = new Size(Size.Width - (expAddProcConChk.Size.Width - expAddProcConChk.TitlePanel.Size.Height), Size.Height);
} }
private void fgProcs_AfterDataRefresh(object sender, ListChangedEventArgs e) private void fgProcs_AfterDataRefresh(object sender, ListChangedEventArgs e) => btnApprove2.Enabled = CanApprove && tsslStatus.Text.Length == 0; // B2016-057 If did un-successful Auto Increament Rev Number, then don't enable Approve (Do Work Flow) button
{
btnApprove2.Enabled = CanApprove && tsslStatus.Text.Length == 0; // B2016-057 If did un-successful Auto Increament Rev Number, then don't enable Approve (Do Work Flow) button
}
// C2020-040 automatically update left panel when tree item in right panel is selected or deselected // C2020-040 automatically update left panel when tree item in right panel is selected or deselected
private void clbMore_SelectedIndexChanged(object sender, EventArgs e) private void clbMore_SelectedIndexChanged(object sender, EventArgs e)
@@ -758,18 +639,11 @@ namespace VEPROMS
} }
private void clbMore_MouseLeave(object sender, EventArgs e) //C2020-045 - added switch to control if pop-ups are displayed in procedure list private void clbMore_MouseLeave(object sender, EventArgs e) //C2020-045 - added switch to control if pop-ups are displayed in procedure list
{ => sttMore.Enabled = true;
sttMore.Enabled = true;
}
} }
public class ApprovalProcedure public class ApprovalProcedure
{ {
private ProcedureInfo _ProcInfo; public ProcedureInfo ProcInfo { get; set; }
public ProcedureInfo ProcInfo
{
get { return _ProcInfo; }
set { _ProcInfo = value; }
}
private string _RevNumber; private string _RevNumber;
public string RevNumber public string RevNumber
{ {
@@ -779,37 +653,17 @@ namespace VEPROMS
if (value.Trim() != _RevNumber) if (value.Trim() != _RevNumber)
{ {
_RevNumber = value.Trim(); _RevNumber = value.Trim();
//_RevDate = DateTime.Now; // commented out for bug fix B2013-012
} }
} }
} }
private DateTime _RevDate;
public DateTime RevDate public DateTime RevDate { get; set; }
{
get { return _RevDate; }
set { _RevDate = value; }
}
// added RevNumAndDate to handle the use use of the DoRevDate flag // added RevNumAndDate to handle the use use of the DoRevDate flag
// this fixes bug B2013-011 where Today's date would print on the approved procedures (Westinghouse data) // this fixes bug B2013-011 where Today's date would print on the approved procedures (Westinghouse data)
// instead of the the Revision Date assigned to the procedure. // instead of the the Revision Date assigned to the procedure.
public string RevNumAndDate public string RevNumAndDate => ProcInfo.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate ? $"{RevNumber}/{RevDate:M/d/yyyy}" : RevNumber;
{ public string DisplayNumber => ProcInfo.DisplayNumber;
get public override string ToString() => string.Format("{0}\t{1}\t{2:M/d/yyyy}", ProcInfo.DisplayNumber, _RevNumber, RevDate);
{
if (_ProcInfo.ActiveFormat.PlantFormat.FormatData.PrintData.DoRevDate)
return RevNumber + "/" + RevDate.ToString("M/d/yyyy");
else
return RevNumber;
}
}
public string DisplayNumber
{
get { return _ProcInfo.DisplayNumber; }
}
public override string ToString()
{
return string.Format("{0}\t{1}\t{2:M/d/yyyy}", _ProcInfo.DisplayNumber, _RevNumber, _RevDate);
}
public ApprovalProcedure(ProcedureInfo proc) public ApprovalProcedure(ProcedureInfo proc)
{ {
proc.ProcedureConfig.SelectedSlave = proc.MyDocVersion.DocVersionConfig.SelectedSlave; proc.ProcedureConfig.SelectedSlave = proc.MyDocVersion.DocVersionConfig.SelectedSlave;
@@ -818,105 +672,42 @@ namespace VEPROMS
string sRevDate = proc.ProcedureConfig.Print_RevDate; string sRevDate = proc.ProcedureConfig.Print_RevDate;
if (sRevDate == string.Empty) if (sRevDate == string.Empty)
sRevDate = DateTime.Now.ToString("M/d/y"); sRevDate = DateTime.Now.ToString("M/d/y");
DateTime revDate; if (!DateTime.TryParse(sRevDate, out DateTime revDate)) revDate = DateTime.Now;
if (!DateTime.TryParse(sRevDate, out revDate)) revDate = DateTime.Now;
RevDate = revDate; RevDate = revDate;
} }
} }
public class ApprovalMessageArgs : EventArgs public class ApprovalMessageArgs : EventArgs
{ {
public ApprovalMessageArgs(string msg) public ApprovalMessageArgs(string msg) => MyStatus = msg;
{
_MyStatus = msg; public string MyStatus { get; set; }
}
private string _MyStatus;
public string MyStatus
{
get { return _MyStatus; }
set { _MyStatus = value; }
}
} }
public delegate void ApprovalStatusChangeEvent(ApprovalInfo sender, ApprovalMessageArgs e); public delegate void ApprovalStatusChangeEvent(ApprovalInfo sender, ApprovalMessageArgs e);
public class ApprovalInfo public class ApprovalInfo
{ {
frmVEPROMS _MyFrmVEPROMS = null; public frmVEPROMS MyFrmVEPROMS { get; set; } = null;
public frmVEPROMS MyFrmVEPROMS
{
get { return _MyFrmVEPROMS; }
set { _MyFrmVEPROMS = value; }
}
public event ApprovalStatusChangeEvent StatusUpdated; public event ApprovalStatusChangeEvent StatusUpdated;
public void OnStatusUpdated(ApprovalInfo sender, ApprovalMessageArgs e) public void OnStatusUpdated(ApprovalInfo sender, ApprovalMessageArgs e) => StatusUpdated?.Invoke(sender, e);
{
if (StatusUpdated != null) public SessionInfo MySessionInfo { get; set; }
StatusUpdated(sender, e); public int RevType { get; set; }
} public string RevNumber { get; set; }
private SessionInfo _MySessionInfo; private DateTime? _RevDate;
public SessionInfo MySessionInfo public DateTime? RevDate
{
get { return _MySessionInfo; }
set { _MySessionInfo = value; }
}
private int _RevType;
public int RevType
{
get { return _RevType; }
set { _RevType = value; }
}
private string _RevNumber;
public string RevNumber
{
get { return _RevNumber; }
set { _RevNumber = value; }
}
private Nullable<DateTime> _RevDate;
public Nullable<DateTime> RevDate
{ {
get { return _RevDate == null ? _RevDate : _RevDate.Value; } get { return _RevDate == null ? _RevDate : _RevDate.Value; }
set { _RevDate = value; } set { _RevDate = value; }
} }
private int _RevStage;
public int RevStage public int RevStage { get; set; }
{ public string RevNote { get; set; }
get { return _RevStage; } public bool ViewPDF { get; set; }
set { _RevStage = value; } public string MsgNumber { get; set; }
} public string MsgDate { get; set; }
private string _RevNote; public bool CanIncrement { get; set; }
public string RevNote [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
{
get { return _RevNote; }
set { _RevNote = value; }
}
private bool _ViewPDF;
public bool ViewPDF
{
get { return _ViewPDF; }
set { _ViewPDF = value; }
}
private string _MsgNumber;
public string MsgNumber
{
get { return _MsgNumber; }
set { _MsgNumber = value; }
}
private string _MsgDate;
public string MsgDate
{
get { return _MsgDate; }
set { _MsgDate = value; }
}
private bool _CanIncrement;
public bool CanIncrement
{
get { return _CanIncrement; }
set { _CanIncrement = value; }
}
private List<ApprovalProcedure> _MyProcedures; private List<ApprovalProcedure> _MyProcedures;
public List<ApprovalProcedure> MyProcedures public List<ApprovalProcedure> MyProcedures => _MyProcedures;
{
get { return _MyProcedures; }
//set { _MyProcedures = value; }
}
//B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit. //B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit.
// this will save the SectedSlave in case a refresh causes it to get lost // this will save the SectedSlave in case a refresh causes it to get lost
@@ -927,10 +718,6 @@ namespace VEPROMS
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyProcedures = new List<ApprovalProcedure>(); _MyProcedures = new List<ApprovalProcedure>();
} }
private static string FormatRev(Match m)
{
return "".PadLeft(5 - m.Groups[1].Value.Length, '0') + m.Groups[1].Value;
}
public void AddProcedure(ProcedureInfo proc) public void AddProcedure(ProcedureInfo proc)
{ {
ApprovalProcedure ap = new ApprovalProcedure(proc); ApprovalProcedure ap = new ApprovalProcedure(proc);
@@ -963,64 +750,11 @@ namespace VEPROMS
public void Refresh() public void Refresh()
{ {
bool ok = true; bool ok = true;
int rv = 0;
foreach (ApprovalProcedure ap in MyProcedures) foreach (ApprovalProcedure ap in MyProcedures)
{ {
ok = ok && int.TryParse(ap.RevNumber, out rv); ok = ok && int.TryParse(ap.RevNumber, out int rv);
} }
_CanIncrement = ok; CanIncrement = ok;
//if (MyProcedures.Count == 1)
//{
// ProcedureInfo pi = _MyProcedures[0].ProcInfo;
// RevNumber = pi.ProcedureConfig.Print_Rev == string.Empty ? "0" : pi.ProcedureConfig.Print_Rev;
// DateTime revdate = pi.ProcedureConfig.Print_RevDate == string.Empty ? DateTime.Now : DateTime.TryParse(pi.ProcedureConfig.Print_RevDate, out revdate) ? revdate : DateTime.Now;
// RevDate = revdate;
// RevNote = string.Empty;
// ViewPDF = false;
//}
//else if (MyProcedures.Count > 1)
//{
// Regex myRegEx = new Regex("^([0-9]{1,5})");
// SortedList<string, ProcedureInfo> printRevs = new SortedList<string, ProcedureInfo>();
// SortedList<string, ProcedureInfo> printRevDates = new SortedList<string, ProcedureInfo>();
// string printRev = string.Empty;
// foreach (ApprovalProcedure pi in MyProcedures)
// {
// printRev = myRegEx.Replace(pi.RevNumber, new MatchEvaluator(FormatRev));
// printRev = printRev == string.Empty ? "0" : printRev;
// if (printRev != string.Empty)
// if (!printRevs.ContainsKey(printRev))
// printRevs.Add(printRev, pi.ProcInfo);
// if (pi.RevDate != null)
// if (!printRevDates.ContainsKey(pi.RevDate.ToString()))
// printRevDates.Add(pi.RevDate.ToString(), pi.ProcInfo);
// }
// if (printRevs.Count > 1)
// {
// ProcedureInfo pi = printRevs[printRevs.Keys[printRevs.Count - 1]];
// RevNumber = "*";
// MsgNumber = "Multiple Revision Numbers found. Enter asterisk (*) to use current revision numbers or plus sign (+) to increment revision numbers";
// }
// else if (printRevs.Count == 1)
// {
// ProcedureInfo pi = printRevs[printRevs.Keys[printRevs.Count - 1]];
// RevNumber = pi.ProcedureConfig.Print_Rev;
// MsgNumber = string.Empty;
// }
// if (printRevDates.Count > 1)
// {
// RevDate = null;
// MsgDate = "Multiple Revision Dates found. Use current revision dates or manually assign revision date by selecting a date";
// }
// else if (printRevDates.Count == 1)
// {
// ProcedureInfo pi = printRevDates[printRevDates.Keys[printRevDates.Count - 1]];
// RevDate = DateTime.Parse(pi.ProcedureConfig.Print_RevDate);
// MsgDate = string.Empty;
// }
// else if (printRevDates.Count == 0)
// RevDate = DateTime.Now;
//}
} }
public void DeleteProcedure(ProcedureInfo pi) public void DeleteProcedure(ProcedureInfo pi)
{ {
@@ -1036,10 +770,7 @@ namespace VEPROMS
Refresh(); Refresh();
} }
} }
public bool CanApprove public bool CanApprove => RevType > 0 && RevNumber != string.Empty && RevStage > 0;
{
get { return _RevType > 0 && _RevNumber != string.Empty && _RevStage > 0; }
}
public int FancyShmancyRevCompare(string s1, string s2) public int FancyShmancyRevCompare(string s1, string s2)
{ {
if (s1 == s2) if (s1 == s2)
@@ -1164,13 +895,13 @@ namespace VEPROMS
if (MessageBox.Show(sb.ToString(),string.Format("Revert to {0}",nsi.Name),MessageBoxButtons.YesNo,MessageBoxIcon.Stop) == DialogResult.No) if (MessageBox.Show(sb.ToString(),string.Format("Revert to {0}",nsi.Name),MessageBoxButtons.YesNo,MessageBoxIcon.Stop) == DialogResult.No)
return false; return false;
} }
DialogResult doSumChgDR = FlexibleMessageBox.Show("Do you want to save the Summary of Changes along with the Approved PDF?\r\n\r\nSelecting 'Cancel' will cancel the approval process.", "Create Summary of Changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);// == DialogResult.Yes;
if (doSumChgDR == DialogResult.Cancel) return false;
// C2018-007: When performing more than a single procedure approval (approve all or some), only prompt once whether to include // C2018-007: When performing more than a single procedure approval (approve all or some), only prompt once whether to include
// Summary of Changes (use the following 2 flags, code using them is below) // Summary of Changes (use the following 2 flags, code using them is below)
// C2022-022: Moved the prompt once for Summary of changes out of loop and allow user to cancel, go back to approval dialog // C2022-022: Moved the prompt once for Summary of changes out of loop and allow user to cancel, go back to approval dialog
bool doSumChg = false; bool doSumChg = doSumChgDR == DialogResult.Yes;
DialogResult doSumChgDR = FlexibleMessageBox.Show("Do you want to save the Summary of Changes along with the Approved PDF?\r\n\r\nSelecting 'Cancel' will cancel the approval process.", "Create Summary of Changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);// == DialogResult.Yes;
if (doSumChgDR == DialogResult.Cancel) return false;
doSumChg = doSumChgDR == DialogResult.Yes;
List<string> procsApproved = new List<string>(); List<string> procsApproved = new List<string>();
foreach (ApprovalProcedure ap in MyProcedures) foreach (ApprovalProcedure ap in MyProcedures)
{ {
@@ -1186,9 +917,8 @@ namespace VEPROMS
//B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit. //B2026-058 - If approving multiple procedures at the same time with a multiunit set and one of the procedures is open, PROMS sometimes loses that it is set for an individual unit.
ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave = SavedSlave; ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave = SavedSlave;
} }
procsApproved.Add(ap.ProcInfo.DisplayNumber + " " + ap.ProcInfo.DisplayText); procsApproved.Add($"{ap.ProcInfo.DisplayNumber} {ap.ProcInfo.DisplayText}");
RevisionInfo ric = pi.MyDocVersion.DocVersionConfig.SelectedSlave > 0 ? RevisionInfo.GetCurrentByItemIDandUnitID(pi.ItemID, pi.MyDocVersion.DocVersionConfig.SelectedSlave) : RevisionInfo.GetCurrentByItemID(pi.ItemID); RevisionInfo ric = pi.MyDocVersion.DocVersionConfig.SelectedSlave > 0 ? RevisionInfo.GetCurrentByItemIDandUnitID(pi.ItemID, pi.MyDocVersion.DocVersionConfig.SelectedSlave) : RevisionInfo.GetCurrentByItemID(pi.ItemID);
// RevisionInfo rip = RevisionInfo.GetPreviousByItemID(pi.ItemID);
DateTime myDTS = pi.DTS; // pi.DTS is date of last approval DateTime myDTS = pi.DTS; // pi.DTS is date of last approval
string cbDTS = (pi.MyConfig as ProcedureConfig).Print_ChangeBarDate; string cbDTS = (pi.MyConfig as ProcedureConfig).Print_ChangeBarDate;
// pi.DTS was the field that was used to store the approval date before master/slave code was added. Use ChangeBarDate if it is set - this is set either manually if no approval date (from treeview menu) or // pi.DTS was the field that was used to store the approval date before master/slave code was added. Use ChangeBarDate if it is set - this is set either manually if no approval date (from treeview menu) or
@@ -1203,7 +933,6 @@ namespace VEPROMS
if (ap.RevNumber == ric.RevisionNumber) if (ap.RevNumber == ric.RevisionNumber)
{ {
myDTS = ric.MyConfig.History_StartDate; myDTS = ric.MyConfig.History_StartDate;
//UpdateProcedureDTS(pi, myDTS);
} }
// New approval, i.e. not same revision number, use the date from the latest approved version // New approval, i.e. not same revision number, use the date from the latest approved version
else else
@@ -1211,26 +940,24 @@ namespace VEPROMS
myDTS = ric.LatestVersion.DTS; // B2019-051: Extra info in Change Summary. Use the last 'approved' (ric.LatestVersion.MyStage.IsApproved==1) myDTS = ric.LatestVersion.DTS; // B2019-051: Extra info in Change Summary. Use the last 'approved' (ric.LatestVersion.MyStage.IsApproved==1)
} }
} }
Revision revision = null; Revision revision;
if (ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave > 0) if (ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave > 0)
{ {
revision = Revision.GetByItemIDAndRevisionNumberAndUnitID(pi.ItemID, ap.RevNumber, ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave); revision = Revision.GetByItemIDAndRevisionNumberAndUnitID(pi.ItemID, ap.RevNumber, ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave);
if (revision == null) // no revision yet, need to set the StartDate & which slave if (revision == null) // no revision yet, need to set the StartDate & which slave
{ {
RevisionConfig cfg = new RevisionConfig(); RevisionConfig cfg = new RevisionConfig
cfg.History_StartDate = myDTS; // if there is a slave, date found from above code {
cfg.Applicability_Index = ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave; History_StartDate = myDTS, // if there is a slave, date found from above code
//cfg.Save(); Applicability_Index = ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave
};
revision = Revision.MakeRevision(pi.ItemID, RevType, ap.RevNumber, ap.RevDate, RevNote, cfg.ToString(), now, Volian.Base.Library.VlnSettings.UserID); revision = Revision.MakeRevision(pi.ItemID, RevType, ap.RevNumber, ap.RevDate, RevNote, cfg.ToString(), now, Volian.Base.Library.VlnSettings.UserID);
// revision.MyConfig.History_StartDate = pi.DTS;
// revision.MyConfig.Save();
// revision = revision.Save();
} }
else if (revision.Notes != RevNote || revision.RevisionDate != ap.RevDate) else if (revision.Notes != RevNote || revision.RevisionDate != ap.RevDate)
{ {
//C2016-036 - Inform the user that an existing approved version will be replaced //C2016-036 - Inform the user that an existing approved version will be replaced
//C2022-016 - Improve/clarify the dialog message //C2022-016 - Improve/clarify the dialog message
if (MessageBox.Show("Replace Existing Revision " + ap.RevNumber + "?\r\n\r\nTo create a new revision, click Cancel then change\r\nthe Rev. Number.", "Replace Existing", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) if (MessageBox.Show($"Replace Existing Revision {ap.RevNumber}?\r\n\r\nTo create a new revision, click Cancel then change\r\nthe Rev. Number.", "Replace Existing", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
return false; return false;
revision.Notes = RevNote; revision.Notes = RevNote;
revision.RevisionDate = ap.RevDate; revision.RevisionDate = ap.RevDate;
@@ -1245,19 +972,17 @@ namespace VEPROMS
// went wrong, the revision could be created but not the version. Added the count check below. // went wrong, the revision could be created but not the version. Added the count check below.
if (revision == null || revision.RevisionVersionCount==0) // no revision yet, need to set the StartDate. If there is a revision, it uses the revision date as the startdate if (revision == null || revision.RevisionVersionCount==0) // no revision yet, need to set the StartDate. If there is a revision, it uses the revision date as the startdate
{ {
RevisionConfig cfg = new RevisionConfig(); RevisionConfig cfg = new RevisionConfig
cfg.History_StartDate = pi.DTS; // todo: this should probably be myDTS, found during fix of B2019-051. {
//cfg.Save(); History_StartDate = pi.DTS // todo: this should probably be myDTS, found during fix of B2019-051.
};
revision = Revision.MakeRevision(pi.ItemID, RevType, ap.RevNumber, ap.RevDate, RevNote, cfg.ToString(), now, Volian.Base.Library.VlnSettings.UserID); revision = Revision.MakeRevision(pi.ItemID, RevType, ap.RevNumber, ap.RevDate, RevNote, cfg.ToString(), now, Volian.Base.Library.VlnSettings.UserID);
// revision.MyConfig.History_StartDate = pi.DTS;
// revision.MyConfig.Save();
// revision = revision.Save();
} }
else if (revision.Notes != RevNote || revision.RevisionDate != ap.RevDate) else if (revision.Notes != RevNote || revision.RevisionDate != ap.RevDate)
{ {
//C2016-036 - Inform the user that an existing approved version will be replaced //C2016-036 - Inform the user that an existing approved version will be replaced
//C2022-016 - Improve/clarify the dialog message //C2022-016 - Improve/clarify the dialog message
if (MessageBox.Show("Replace Existing Revision " + ap.RevNumber + "?\r\n\r\nTo create a new revision, click Cancel then change\r\nthe Rev. Number.", "Replace Existing", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) if (MessageBox.Show($"Replace Existing Revision {ap.RevNumber}?\r\n\r\nTo create a new revision, click Cancel then change\r\nthe Rev. Number.", "Replace Existing", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
return false; return false;
revision.Notes = RevNote; revision.Notes = RevNote;
revision.RevisionDate = ap.RevDate; revision.RevisionDate = ap.RevDate;
@@ -1268,10 +993,7 @@ namespace VEPROMS
//B2017-149 Allow the user to choose if they want the Summary of Changes report created during the approval process //B2017-149 Allow the user to choose if they want the Summary of Changes report created during the approval process
if (doSumChg) summaryBuf = CreateSummary(ref pi, summaryPDF, myDTS); if (doSumChg) summaryBuf = CreateSummary(ref pi, summaryPDF, myDTS);
DateTime currentDTS = now; DateTime currentDTS = now;
Check check = Check.MakeCheck(revision, Stage.GetJustStage(RevStage), RevisionInfo.BuildRevisionChecks(pi), currentDTS, VlnSettings.UserID); _ = Check.MakeCheck(revision, Stage.GetJustStage(RevStage), RevisionInfo.BuildRevisionChecks(pi), currentDTS, VlnSettings.UserID);
//make pdf with promsprinter and get byte stream
// Moved to end so that Item and Content are saved at the same time
//UpdateProcedureConfig(pi, ap.RevNumber, ap.RevDate, myDTS);
string watermarkColor = "Blue"; // this is the default watermark color string watermarkColor = "Blue"; // this is the default watermark color
string waterMark = Stage.GetJustStage(RevStage).IsApproved > 0 ? null : Stage.GetJustStage(RevStage).Name; string waterMark = Stage.GetJustStage(RevStage).IsApproved > 0 ? null : Stage.GetJustStage(RevStage).Name;
// C2022-004 - BNPP if doing an approval stage, and the format file uses the UseUnitWatermarkOnApproved format flag (<PrintData UseUnitWatermarkOnApproved = "true"\>) // C2022-004 - BNPP if doing an approval stage, and the format file uses the UseUnitWatermarkOnApproved format flag (<PrintData UseUnitWatermarkOnApproved = "true"\>)
@@ -1281,39 +1003,14 @@ namespace VEPROMS
waterMark = "Unit Designator"; waterMark = "Unit Designator";
frmPDFStatusForm.SetUnitWatermark(MyProcedures[0].ProcInfo, ref waterMark, ref watermarkColor); frmPDFStatusForm.SetUnitWatermark(MyProcedures[0].ProcInfo, ref waterMark, ref watermarkColor);
} }
//ProcedureInfo myproc = pi;
//frmPDFStatusForm frm = new frmPDFStatusForm(myproc, ap.RevNumber, /* revdate change: ap.RevDate.ToString("MM/dd/yyyy") ,*/ waterMark, false, false, ViewPDF, true, VlnSettings.TemporaryFolder, new ChangeBarDefinition(pi.MyDocVersion.MyConfig as DocVersionConfig, pi.ActiveFormat), pdfTmp, location);
//myproc.ChangeBarDate = myDTS;
frmPDFStatusForm frm = new frmPDFStatusForm(pi, ap.RevNumAndDate, /* revdate change: ap.RevDate.ToString("MM/dd/yyyy") ,*/ waterMark, false, false, ViewPDF, true, VlnSettings.TemporaryFolder, new ChangeBarDefinition(pi.MyDocVersion.MyConfig as DocVersionConfig, pi.ActiveFormat), pdfTmp, location, pi.MyDocVersion.DocVersionConfig.Print_AddBlankPagesWhenUsingDuplexFoldouts, true, "", false, 0, false, frmPDFStatusForm frm = new frmPDFStatusForm(pi, ap.RevNumAndDate, /* revdate change: ap.RevDate.ToString("MM/dd/yyyy") ,*/ waterMark, false, false, ViewPDF, true, VlnSettings.TemporaryFolder, new ChangeBarDefinition(pi.MyDocVersion.MyConfig as DocVersionConfig, pi.ActiveFormat), pdfTmp, location, pi.MyDocVersion.DocVersionConfig.Print_AddBlankPagesWhenUsingDuplexFoldouts, true, "", false, 0, false,
MyProcedures.Count > (MyProcedures[0].ProcInfo.MyDocVersion.Procedures.Count / 4), pi.MyDocVersion.DocVersionConfig.Print_DuplexBlankPageText, null, watermarkColor); // C2019-004: Allow user to define duplex lank page text at the docversion level MyProcedures.Count > (MyProcedures[0].ProcInfo.MyDocVersion.Procedures.Count / 4), pi.MyDocVersion.DocVersionConfig.Print_DuplexBlankPageText, null, watermarkColor)
frm.AllowAllWatermarks = true; {
frm.CloseWhenDone = !ViewPDF; AllowAllWatermarks = true,
frm.DocReplace = new Dictionary<int, byte[]>(); // will hold the Word Attachments with resolved ROs CloseWhenDone = !ViewPDF,
DocReplace = new Dictionary<int, byte[]>() // will hold the Word Attachments with resolved ROs
}; // C2019-004: Allow user to define duplex lank page text at the docversion level
frm.ShowDialog(); frm.ShowDialog();
//if (ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave > 0)
//{
// using (ProcedureInfo myproc = ProcedureInfo.GetItemAndChildrenByUnit(pi.ItemID, 0, ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave))
// {
// //frmPDFStatusForm frm = new frmPDFStatusForm(myproc, ap.RevNumber, /* revdate change: ap.RevDate.ToString("MM/dd/yyyy") ,*/ waterMark, false, false, ViewPDF, true, VlnSettings.TemporaryFolder, new ChangeBarDefinition(pi.MyDocVersion.MyConfig as DocVersionConfig, pi.ActiveFormat), pdfTmp, location);
// myproc.ChangeBarDate = myDTS;
// frmPDFStatusForm frm = new frmPDFStatusForm(myproc, ap.RevNumAndDate, /* revdate change: ap.RevDate.ToString("MM/dd/yyyy") ,*/ waterMark, false, false, ViewPDF, true, VlnSettings.TemporaryFolder, new ChangeBarDefinition(pi.MyDocVersion.MyConfig as DocVersionConfig, pi.ActiveFormat), pdfTmp, location);
// frm.AllowAllWatermarks = true;
// frm.CloseWhenDone = !ViewPDF;
// frm.ShowDialog();
// }
//}
//else
//{
// using (ProcedureInfo myproc = ProcedureInfo.GetItemAndChildren(pi.ItemID))
// {
// //frmPDFStatusForm frm = new frmPDFStatusForm(myproc, ap.RevNumber, /* revdate change: ap.RevDate.ToString("MM/dd/yyyy") ,*/ waterMark, false, false, ViewPDF, true, VlnSettings.TemporaryFolder, new ChangeBarDefinition(pi.MyDocVersion.MyConfig as DocVersionConfig, pi.ActiveFormat), pdfTmp, location);
// myproc.ChangeBarDate = myDTS;
// frmPDFStatusForm frm = new frmPDFStatusForm(myproc, ap.RevNumAndDate, /* revdate change: ap.RevDate.ToString("MM/dd/yyyy") ,*/ waterMark, false, false, ViewPDF, true, VlnSettings.TemporaryFolder, new ChangeBarDefinition(pi.MyDocVersion.MyConfig as DocVersionConfig, pi.ActiveFormat), pdfTmp, location);
// frm.AllowAllWatermarks = true;
// frm.CloseWhenDone = !ViewPDF;
// frm.ShowDialog();
// }
//}
FileInfo pdfFile = new FileInfo(pdfPath); FileInfo pdfFile = new FileInfo(pdfPath);
FileStream fs = pdfFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); FileStream fs = pdfFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
byte[] buf = new byte[pdfFile.Length]; byte[] buf = new byte[pdfFile.Length];
@@ -1333,8 +1030,10 @@ namespace VEPROMS
return false; return false;
} }
dlgExportImport dlg = new dlgExportImport("Export", pi, MyFrmVEPROMS, (selectedSlave)); // "true tell export to convert ROs and Transitions to text dlgExportImport dlg = new dlgExportImport("Export", pi, MyFrmVEPROMS, (selectedSlave))
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 {
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
}; // "true tell export to convert ROs and Transitions to text
System.Xml.XmlDocument xd = new System.Xml.XmlDocument(); System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
dlg.ExportItem(xd, pi, "procedure"); dlg.ExportItem(xd, pi, "procedure");
frm.DocReplace = dlg.DocReplace = null; frm.DocReplace = dlg.DocReplace = null;
@@ -1376,21 +1075,20 @@ namespace VEPROMS
} }
else else
UpdateProcedureConfig(pi, ap.RevNumber, ap.RevDate, myDTS, selectedSlave); UpdateProcedureConfig(pi, ap.RevNumber, ap.RevDate, myDTS, selectedSlave);
//UpdateProcedureDTS(pi, DateTime.Now);
pi.MyDocVersion.DocVersionConfig.SelectedSlave = selectedSlave; pi.MyDocVersion.DocVersionConfig.SelectedSlave = selectedSlave;
} }
// C2019-019: Put out a complete message when approval is done. // C2019-019: Put out a complete message when approval is done.
// C2020-024 Display a more descriptive end message // C2020-024 Display a more descriptive end message
if (procsApproved.Count > 0) if (procsApproved.Count > 0)
{ {
string msg = ""; string msg;
if (procsApproved.Count == (MyProcedures[0]).ProcInfo.MyDocVersion.Procedures.Count) if (procsApproved.Count == (MyProcedures[0]).ProcInfo.MyDocVersion.Procedures.Count)
msg = "All Procedures were Approved."; msg = "All Procedures were Approved.";
else else
{ {
msg = "The following procedures were approved:\n"; msg = "The following procedures were approved:\n";
foreach (string prc in procsApproved) foreach (string prc in procsApproved)
msg += "\n" + prc; msg += $"\n{prc}";
} }
FlexibleMessageBox.Show( msg, "Approve Procedure(s)", MessageBoxButtons.OK); FlexibleMessageBox.Show( msg, "Approve Procedure(s)", MessageBoxButtons.OK);
} }
@@ -1434,7 +1132,7 @@ namespace VEPROMS
{ {
while (!(ex is System.Data.SqlClient.SqlException) && ex.InnerException != null) while (!(ex is System.Data.SqlClient.SqlException) && ex.InnerException != null)
ex = ex.InnerException; ex = ex.InnerException;
MessageBox.Show(ex.Message +"\r\n\r\nApproval will continue without the Summary of Change Report", ex.GetType().Name + " while trying to create Summary of Changes." , MessageBoxButtons.OK, MessageBoxIcon.Exclamation); MessageBox.Show(ex.Message +"\r\n\r\nApproval will continue without the Summary of Change Report", $"{ex.GetType().Name} while trying to create Summary of Changes.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return null; return null;
} }
} }
@@ -1456,7 +1154,7 @@ namespace VEPROMS
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.AppendLine("Could not create"); sb.AppendLine("Could not create");
sb.AppendLine(); sb.AppendLine();
sb.AppendLine(pdfFile + "."); sb.AppendLine($"{pdfFile}.");
sb.AppendLine(); sb.AppendLine();
sb.AppendLine("If it is open, close it then press the OK button."); sb.AppendLine("If it is open, close it then press the OK button.");
if (cntr >= 3) // after two tries offer additional troubleshooting information if (cntr >= 3) // after two tries offer additional troubleshooting information
@@ -1471,18 +1169,9 @@ namespace VEPROMS
return true; return true;
} }
private void UpdateProcedureDTS(ProcedureInfo pi, DateTime dts)
{
using (Item itm = Item.Get(pi.ItemID))
{
itm.DTS = dts;
itm.Save();
}
}
private void UpdateProcedureConfig(ProcedureInfo procedureInfo, string revNumber, DateTime revDate, DateTime dts, int selectedSlave) private void UpdateProcedureConfig(ProcedureInfo procedureInfo, string revNumber, DateTime revDate, DateTime dts, int selectedSlave)
{ {
ProcedureConfig pc = procedureInfo.MyConfig as ProcedureConfig; if (!(procedureInfo.MyConfig is ProcedureConfig pc)) return;
if (pc == null) return;
pc.SelectedSlave = selectedSlave; pc.SelectedSlave = selectedSlave;
pc.Print_Rev = revNumber; pc.Print_Rev = revNumber;
@@ -1492,7 +1181,6 @@ namespace VEPROMS
using (Item itm = Item.Get(procedureInfo.ItemID)) using (Item itm = Item.Get(procedureInfo.ItemID))
{ {
itm.MyContent.Config = pc.ToString(); itm.MyContent.Config = pc.ToString();
//itm.DTS = dts;
itm.UserID = Volian.Base.Library.VlnSettings.UserID; itm.UserID = Volian.Base.Library.VlnSettings.UserID;
itm.Save(); itm.Save();
@@ -1515,22 +1203,12 @@ namespace VEPROMS
} }
public class RevType public class RevType
{ {
private int _TypeID; public int TypeID { get; set; }
public int TypeID public string TypeName { get; set; }
{
get { return _TypeID; }
set { _TypeID = value; }
}
private string _TypeName;
public string TypeName
{
get { return _TypeName; }
set { _TypeName = value; }
}
public RevType(int i, string s) public RevType(int i, string s)
{ {
_TypeID = i; TypeID = i;
_TypeName = s; TypeName = s;
} }
} }
public class RevTypes : List<RevType> public class RevTypes : List<RevType>
@@ -1539,29 +1217,14 @@ namespace VEPROMS
public delegate void DisplayConsistencyReportEvent(object sender, ConsistencyReportArgs args); public delegate void DisplayConsistencyReportEvent(object sender, ConsistencyReportArgs args);
public class ConsistencyReportArgs : EventArgs public class ConsistencyReportArgs : EventArgs
{ {
private string _ReportName; public string ReportName { get; set; }
public string ReportName public ItemInfoList MyItems { get; set; }
{ public DocVersionInfo MyDocVersion { get; set; }
get { return _ReportName; }
set { _ReportName = value; }
}
private ItemInfoList _MyItems;
public ItemInfoList MyItems
{
get { return _MyItems; }
set { _MyItems = value; }
}
private DocVersionInfo _MyDocVersion;
public DocVersionInfo MyDocVersion
{
get { return _MyDocVersion; }
set { _MyDocVersion = value; }
}
public ConsistencyReportArgs(string reportName, ItemInfoList myItems, DocVersionInfo myDocVerion) public ConsistencyReportArgs(string reportName, ItemInfoList myItems, DocVersionInfo myDocVerion)
{ {
_ReportName = reportName; ReportName = reportName;
_MyItems = myItems; MyItems = myItems;
_MyDocVersion = myDocVerion; //B2020-020 needed to pass in DocVersion to get paper size from format MyDocVersion = myDocVerion; //B2020-020 needed to pass in DocVersion to get paper size from format
} }
} }
} }
+10 -9
View File
@@ -1,4 +1,5 @@
 
namespace VEPROMS namespace VEPROMS
{ {
partial class dlgCheckOpenTabs partial class dlgCheckOpenTabs
@@ -42,12 +43,12 @@ namespace VEPROMS
// //
this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelX1.Location = new System.Drawing.Point(23, 2); this.labelX1.Location = new System.Drawing.Point(23, 5);
this.labelX1.Name = "labelX1"; this.labelX1.Name = "labelX1";
this.labelX1.Size = new System.Drawing.Size(363, 78); this.labelX1.Size = new System.Drawing.Size(363, 90);
this.labelX1.TabIndex = 0; this.labelX1.TabIndex = 0;
this.labelX1.Text = "Would you like for PROMS to reopen the tabs that you had open during your last se" + this.labelX1.Text = "Would you like for PROMS to reopen the tabs that you had open during your last se" +
"ssion?"; "ssion?" + System.Environment.NewLine + System.Environment.NewLine + "NOTE: This will not apply to Word section tabs that were previously open.";
this.labelX1.WordWrap = true; this.labelX1.WordWrap = true;
// //
// cbRemember // cbRemember
@@ -56,20 +57,20 @@ namespace VEPROMS
// //
// //
this.cbRemember.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.cbRemember.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.cbRemember.Location = new System.Drawing.Point(23, 75); this.cbRemember.Location = new System.Drawing.Point(23, 100);
this.cbRemember.Name = "cbRemember"; this.cbRemember.Name = "cbRemember";
this.cbRemember.Size = new System.Drawing.Size(376, 47); this.cbRemember.Size = new System.Drawing.Size(376, 55);
this.cbRemember.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.cbRemember.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.cbRemember.TabIndex = 1; this.cbRemember.TabIndex = 1;
this.cbRemember.Text = "Check this box to not be prompted in the future when opening PROMS. \nNote that th" + this.cbRemember.Text = "Check this box to not be prompted in the future when opening PROMS. \nNote that th" +
"ese settings can be adjusted at any time from the \nOPTIONS menu for PROMS."; "ese settings can be adjusted at any time from the \nOPTIONS menu for PROMS.";
// //
// btnOpenTabs // btnOpenTabs
// //
this.btnOpenTabs.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.btnOpenTabs.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnOpenTabs.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.btnOpenTabs.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnOpenTabs.DialogResult = System.Windows.Forms.DialogResult.Yes; this.btnOpenTabs.DialogResult = System.Windows.Forms.DialogResult.Yes;
this.btnOpenTabs.Location = new System.Drawing.Point(23, 139); this.btnOpenTabs.Location = new System.Drawing.Point(23, 165);
this.btnOpenTabs.Name = "btnOpenTabs"; this.btnOpenTabs.Name = "btnOpenTabs";
this.btnOpenTabs.Size = new System.Drawing.Size(150, 42); this.btnOpenTabs.Size = new System.Drawing.Size(150, 42);
this.btnOpenTabs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnOpenTabs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
@@ -82,7 +83,7 @@ namespace VEPROMS
this.btnNoTabs.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.btnNoTabs.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnNoTabs.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.btnNoTabs.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnNoTabs.DialogResult = System.Windows.Forms.DialogResult.No; this.btnNoTabs.DialogResult = System.Windows.Forms.DialogResult.No;
this.btnNoTabs.Location = new System.Drawing.Point(216, 139); this.btnNoTabs.Location = new System.Drawing.Point(216, 165);
this.btnNoTabs.Name = "btnNoTabs"; this.btnNoTabs.Name = "btnNoTabs";
this.btnNoTabs.Size = new System.Drawing.Size(150, 42); this.btnNoTabs.Size = new System.Drawing.Size(150, 42);
this.btnNoTabs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnNoTabs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
@@ -94,7 +95,7 @@ namespace VEPROMS
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(411, 193); this.ClientSize = new System.Drawing.Size(411, 220);
this.ControlBox = false; this.ControlBox = false;
this.Controls.Add(this.btnNoTabs); this.Controls.Add(this.btnNoTabs);
this.Controls.Add(this.btnOpenTabs); this.Controls.Add(this.btnOpenTabs);
@@ -1,11 +1,4 @@
using System; 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.Windows.Forms;
namespace VEPROMS namespace VEPROMS
@@ -21,8 +14,8 @@ namespace VEPROMS
private void btnTabs_Click(object sender, EventArgs e) private void btnTabs_Click(object sender, EventArgs e)
{ {
Remember = this.cbRemember.Checked; Remember = cbRemember.Checked;
this.Close(); Close();
} }
} }
} }
@@ -1,8 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
@@ -23,36 +19,22 @@ namespace VEPROMS
_MySessionInfo = SessionInfo.Get(_MyOwnerInfo.SessionID); _MySessionInfo = SessionInfo.Get(_MyOwnerInfo.SessionID);
_MyUserInfo = ui; _MyUserInfo = ui;
} }
private ProcedureInfo _MyProcedureInfo; private readonly ProcedureInfo _MyProcedureInfo;
public ProcedureInfo MyProcedureInfo public ProcedureInfo MyProcedureInfo => _MyProcedureInfo;
{ private readonly SectionInfo _MySectionInfo;
get { return _MyProcedureInfo; } public SectionInfo MySectionInfo => _MySectionInfo;
} private readonly OwnerInfo _MyOwnerInfo;
private SectionInfo _MySectionInfo; public OwnerInfo MyOwnerInfo => _MyOwnerInfo;
public SectionInfo MySectionInfo private readonly SessionInfo _MySessionInfo;
{ public SessionInfo MySessionInfo => _MySessionInfo;
get { return _MySectionInfo; } private readonly UserInfo _MyUserInfo;
} public UserInfo MyUserInfo => _MyUserInfo;
private OwnerInfo _MyOwnerInfo;
public OwnerInfo MyOwnerInfo
{
get { return _MyOwnerInfo; }
}
private SessionInfo _MySessionInfo;
public SessionInfo MySessionInfo
{
get { return _MySessionInfo; }
}
private UserInfo _MyUserInfo;
public UserInfo MyUserInfo
{
get { return _MyUserInfo; }
}
StringBuilder sb = new StringBuilder();
private void dlgCheckedOutProcedure_Load(object sender, EventArgs e) private void dlgCheckedOutProcedure_Load(object sender, EventArgs e)
{ {
if (MyProcedureInfo != null) StringBuilder sb = new StringBuilder();
if (MyProcedureInfo != null)
sb.AppendLine(string.Format("The procedure {0} - {1}", MyProcedureInfo.DisplayNumber, MyProcedureInfo.DisplayText)); sb.AppendLine(string.Format("The procedure {0} - {1}", MyProcedureInfo.DisplayNumber, MyProcedureInfo.DisplayText));
else else
sb.AppendLine(string.Format("The document {0}", MySectionInfo.DisplayText)); sb.AppendLine(string.Format("The document {0}", MySectionInfo.DisplayText));
@@ -74,7 +56,8 @@ namespace VEPROMS
private void btnForce_Click(object sender, EventArgs e) private void btnForce_Click(object sender, EventArgs e)
{ {
MySessionInfo.CheckInItem(MyOwnerInfo.OwnerID); StringBuilder sb = new StringBuilder();
MySessionInfo.CheckInItem(MyOwnerInfo.OwnerID);
sb.AppendLine(); sb.AppendLine();
sb.AppendLine("Forced Check In has been completed"); sb.AppendLine("Forced Check In has been completed");
lblInfo.Text = sb.ToString(); lblInfo.Text = sb.ToString();
+163 -184
View File
@@ -1,9 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Controls.Library;
using Volian.Base.Library; using Volian.Base.Library;
using System.Xml; using System.Xml;
using System.IO; using System.IO;
@@ -20,14 +18,9 @@ namespace VEPROMS
{ {
#region Log4Net #region Log4Net
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion #endregion
frmVEPROMS _MyFrmVEPROMS = null;// Save frmVEPROMS for Import to shutoff SessionPing public frmVEPROMS MyFrmVEPROMS { get; set; } = null;
public frmVEPROMS MyFrmVEPROMS private bool _ConvertROsToTextDuringImport = false;
{
get { return _MyFrmVEPROMS; }
set { _MyFrmVEPROMS = value; }
}
private bool _ConvertROsToTextDuringImport = false;
private bool _ConvertROsAndTransitionsToText = false; // set to true when Approval creates an Export file private bool _ConvertROsAndTransitionsToText = false; // set to true when Approval creates an Export file
protected bool _ExportBothConvertedandNot = false; // set to true when Electronic Procedure export protected bool _ExportBothConvertedandNot = false; // set to true when Electronic Procedure export
@@ -40,32 +33,18 @@ namespace VEPROMS
//this will hold if a specific unit was selected //this will hold if a specific unit was selected
readonly protected int _UnitIndex; readonly protected int _UnitIndex;
private ItemInfo _ExternalTransitionItem = null; public ItemInfo ExternalTransitionItem { get; set; } = null;
public ItemInfo ExternalTransitionItem private Dictionary<int, int> floatFoldout;
{
get { return _ExternalTransitionItem; }
set { _ExternalTransitionItem = value; }
}
private Dictionary<int, int> floatFoldout;
private Dictionary<int, string> importedFormat; private Dictionary<int, string> importedFormat;
private Dictionary<string, int> existingFormat; private Dictionary<string, int> existingFormat;
private Dictionary<string, string> renamedUCFFormatName; // if format is renamed, this is its new name so references to it can be made
private Dictionary<int, int> renamedUCFFormatId; // if format is renamed, this is its old->new formatid
private int oldRODbID; private int oldRODbID;
private int newRODbID; private int newRODbID;
private FolderInfo _MyNewFolder; private FolderInfo _MyNewFolder;
public FolderInfo MyNewFolder public FolderInfo MyNewFolder => _MyNewFolder;
{
get { return _MyNewFolder; } public ProcedureInfo MyNewProcedure { get; set; }
} private string PEIPath;
private ProcedureInfo _MyNewProcedure; private readonly string _MyMode;
public ProcedureInfo MyNewProcedure
{
get { return _MyNewProcedure; }
set { _MyNewProcedure = value; }
}
private string PEIPath;
private string _MyMode;
protected FolderInfo MyFolder = null; protected FolderInfo MyFolder = null;
protected DocVersionInfo MyDocVersion = null; protected DocVersionInfo MyDocVersion = null;
protected ProcedureInfo MyProcedure = null; protected ProcedureInfo MyProcedure = null;
@@ -81,7 +60,7 @@ namespace VEPROMS
_MyMode = mode; _MyMode = mode;
MyFolder = folderInfo; MyFolder = folderInfo;
InitializeComponent(); InitializeComponent();
this.Text = mode + " Dialog for " + folderInfo.Name; Text = $"{mode} Dialog for {folderInfo.Name}";
_UnitIndex = unitIndex; _UnitIndex = unitIndex;
if (_UnitIndex > 0) if (_UnitIndex > 0)
@@ -103,9 +82,9 @@ namespace VEPROMS
MyDocVersion = docVersionInfo; MyDocVersion = docVersionInfo;
InitializeComponent(); InitializeComponent();
if (mode.ToUpper().Contains("FORMAT")) if (mode.ToUpper().Contains("FORMAT"))
this.Text = mode; Text = mode;
else else
this.Text = mode + " Dialog for " + docVersionInfo.Name + " of " + docVersionInfo.MyFolder.Name; Text = $"{mode} Dialog for {docVersionInfo.Name} of {docVersionInfo.MyFolder.Name}";
_UnitIndex = unitIndex; _UnitIndex = unitIndex;
if (_UnitIndex > 0) if (_UnitIndex > 0)
@@ -124,7 +103,7 @@ namespace VEPROMS
_MyMode = mode; _MyMode = mode;
MyProcedure = procedureInfo; MyProcedure = procedureInfo;
InitializeComponent(); InitializeComponent();
this.Text = mode + " Dialog for " + procedureInfo.DisplayNumber; Text = $"{mode} Dialog for {procedureInfo.DisplayNumber}";
_UnitIndex = unitIndex; _UnitIndex = unitIndex;
if (_UnitIndex > 0) if (_UnitIndex > 0)
@@ -173,7 +152,7 @@ namespace VEPROMS
ofd.InitialDirectory = PEIPath; ofd.InitialDirectory = PEIPath;
pnlImport.BringToFront(); pnlImport.BringToFront();
} }
this.Height = this.Height / formsize; Height /= formsize;
} }
private void btnExport_Click(object sender, EventArgs e) private void btnExport_Click(object sender, EventArgs e)
{ {
@@ -184,7 +163,7 @@ namespace VEPROMS
} }
if (MyFolder != null) if (MyFolder != null)
{ {
sfd.FileName = string.Format("{0}-{1}.expx", Database.ActiveDatabase, MyFolder.Name); sfd.FileName = string.Format("{0}-{1}.expx", Database.ActiveDatabase, MyFolder.Name.Replace("/", "_").Replace("\\", "_"));
if (sfd.ShowDialog(this) == DialogResult.OK && sfd.FileName != string.Empty) if (sfd.ShowDialog(this) == DialogResult.OK && sfd.FileName != string.Empty)
{ {
txtExport.Text = sfd.FileName; txtExport.Text = sfd.FileName;
@@ -220,19 +199,19 @@ namespace VEPROMS
string msg = "Finished Exporting:\n\n"; string msg = "Finished Exporting:\n\n";
if (_MyMode.ToUpper().Contains("FORMAT")) if (_MyMode.ToUpper().Contains("FORMAT"))
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
MyStart = DateTime.Now; MyStart = DateTime.Now;
btnDoExport.Enabled = false; btnDoExport.Enabled = false;
lblExportStatus.Text = "Performing Export of UC Formats"; lblExportStatus.Text = "Performing Export of UC Formats";
SaveExportUCF(); SaveExportUCF();
TimeSpan elapsed = DateTime.Now.Subtract(MyStart); TimeSpan elapsed = DateTime.Now.Subtract(MyStart);
lblExportStatus.Text = "Format Export Completed in " + elapsed.ToString(); lblExportStatus.Text = $"Format Export Completed in {elapsed}";
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
else if (MyFolder != null) else if (MyFolder != null)
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
MyStart = DateTime.Now; MyStart = DateTime.Now;
btnDoExport.Enabled = false; btnDoExport.Enabled = false;
lblExportStatus.Text = "Performing Export"; lblExportStatus.Text = "Performing Export";
@@ -240,7 +219,7 @@ namespace VEPROMS
TimeSpan elapsed = DateTime.Now.Subtract(MyStart); TimeSpan elapsed = DateTime.Now.Subtract(MyStart);
lblExportStatus.Text = "Export Completed in " + elapsed.ToString(); lblExportStatus.Text = "Export Completed in " + elapsed.ToString();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
msg += MyFolder.Name; msg += MyFolder.Name;
} }
else if (MyProcedure != null) else if (MyProcedure != null)
@@ -281,7 +260,7 @@ namespace VEPROMS
} }
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
MyStart = DateTime.Now; MyStart = DateTime.Now;
btnDoExport.Enabled = false; btnDoExport.Enabled = false;
lblExportStatus.Text = "Performing Export"; lblExportStatus.Text = "Performing Export";
@@ -294,7 +273,7 @@ namespace VEPROMS
xd.Save(fileLocation); xd.Save(fileLocation);
TimeSpan elapsed = DateTime.Now.Subtract(MyStart); TimeSpan elapsed = DateTime.Now.Subtract(MyStart);
lblExportStatus.Text = "Export Completed in " + elapsed.ToString(); lblExportStatus.Text = "Export Completed in " + elapsed.ToString();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// added message to user when export of a procedure or procedure set has completed // added message to user when export of a procedure or procedure set has completed
if (successfullExport) if (successfullExport)
@@ -338,7 +317,7 @@ namespace VEPROMS
bool isImported = false; bool isImported = false;
bool canceledPressed = false; bool canceledPressed = false;
btnImport.Enabled = false; btnImport.Enabled = false;
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
MyStart = DateTime.Now; MyStart = DateTime.Now;
btnDoImport.Enabled = false; btnDoImport.Enabled = false;
lblImportStatus.Text = "Performing Import"; lblImportStatus.Text = "Performing Import";
@@ -350,13 +329,13 @@ namespace VEPROMS
{ {
TurnChangeManagerOff.Execute(); TurnChangeManagerOff.Execute();
MyFrmVEPROMS.DisablePing = true;// Turn-off SessionPing MyFrmVEPROMS.DisablePing = true;// Turn-off SessionPing
bool result = TryToImportUCFs(ref isImported, ref canceledPressed); bool result = TryToImportUCFs(ref isImported);
MyFrmVEPROMS.DisablePing = false;// Turn-on SessionPing MyFrmVEPROMS.DisablePing = false;// Turn-on SessionPing
TurnChangeManagerOn.Execute(); TurnChangeManagerOn.Execute();
if (!result) // B2019-006: let user know there was an error during import: if (!result) // B2019-006: let user know there was an error during import:
{ {
MessageBox.Show("Error occurred during import. Format(s) not imported."); MessageBox.Show("Error occurred during import. Format(s) not imported.");
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
btnCloseImport.Enabled = true; btnCloseImport.Enabled = true;
return; return;
} }
@@ -400,7 +379,7 @@ namespace VEPROMS
if (isImported) if (isImported)
{ {
TimeSpan elapsed = DateTime.Now.Subtract(MyStart); TimeSpan elapsed = DateTime.Now.Subtract(MyStart);
lblImportStatus.Text = "Import Completed in " + elapsed.ToString(); lblImportStatus.Text = $"Import Completed in {elapsed}";
} }
else else
{ {
@@ -408,7 +387,7 @@ namespace VEPROMS
btnDoImport.Enabled = true; btnDoImport.Enabled = true;
} }
} }
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
btnCloseImport.Enabled = true; btnCloseImport.Enabled = true;
if (isImported) if (isImported)
{ {
@@ -436,7 +415,7 @@ namespace VEPROMS
} }
} }
private bool TryToImportUCFs(ref bool isImported, ref bool canceledPressed) private bool TryToImportUCFs(ref bool isImported)
{ {
try try
{ {
@@ -450,7 +429,7 @@ namespace VEPROMS
if (nl == null || nl.Count == 0) // B2019-014: Check contents of import file for compatible operation if (nl == null || nl.Count == 0) // B2019-014: Check contents of import file for compatible operation
{ {
MessageBox.Show("A Procedure export file can only be imported from the Tree View.", "Import Failed", MessageBoxButtons.OK); MessageBox.Show("A Procedure export file can only be imported from the Tree View.", "Import Failed", MessageBoxButtons.OK);
this.Close(); Close();
isImported = false; isImported = false;
return false; return false;
} }
@@ -504,7 +483,7 @@ namespace VEPROMS
{ {
MessageBox.Show(ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Asterisk); MessageBox.Show(ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
_MyLog.Warn("Failed during UC Formats Import", ex); _MyLog.Warn("Failed during UC Formats Import", ex);
this.Close(); Close();
isImported = false; isImported = false;
return false; return false;
} }
@@ -519,7 +498,7 @@ namespace VEPROMS
{ {
MessageBox.Show(ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Asterisk); MessageBox.Show(ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
_MyLog.Warn("Failed during Procedure Import", ex); _MyLog.Warn("Failed during Procedure Import", ex);
this.Close(); Close();
return false; return false;
} }
} }
@@ -528,11 +507,9 @@ namespace VEPROMS
private bool _ImportingApprovedExportFile = false; private bool _ImportingApprovedExportFile = false;
private bool ImportingApprovedExport(string fnAndPath) private bool ImportingApprovedExport(string fnAndPath)
{ {
bool rtnval = false; int idx = fnAndPath.LastIndexOf("//") + 1;
int idx = fnAndPath.LastIndexOf("//") + 1;
string tmp = fnAndPath.Substring(idx); string tmp = fnAndPath.Substring(idx);
rtnval = tmp.ToUpper().Contains("APPROVED_REV_"); return tmp.ToUpper().Contains("APPROVED_REV_");
return rtnval;
} }
private bool ImportProcedure(ref bool isImported, ref bool canceledPressed) private bool ImportProcedure(ref bool isImported, ref bool canceledPressed)
{ {
@@ -544,15 +521,17 @@ namespace VEPROMS
if (ucf != null) if (ucf != null)
{ {
MessageBox.Show("A User Control of Format export file can only be imported from Administration on the V-Button.", "Import Failed", MessageBoxButtons.OK); MessageBox.Show("A User Control of Format export file can only be imported from Administration on the V-Button.", "Import Failed", MessageBoxButtons.OK);
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
this.btnImport.Enabled = true; // allow user to select a different export file to import btnImport.Enabled = true; // allow user to select a different export file to import
this.btnCloseImport.Enabled = true; // allow user to close import dialog btnCloseImport.Enabled = true; // allow user to close import dialog
return false; return false;
} }
string rofolderpath = xd.DocumentElement.Attributes.GetNamedItem("rofolderpath").InnerText; string rofolderpath = xd.DocumentElement.Attributes.GetNamedItem("rofolderpath").InnerText;
int rodbid = int.Parse(xd.DocumentElement.Attributes.GetNamedItem("rodbid").InnerText); int rodbid = int.Parse(xd.DocumentElement.Attributes.GetNamedItem("rodbid").InnerText);
int rofstid = int.Parse(xd.DocumentElement.Attributes.GetNamedItem("rofstid").InnerText); #pragma warning disable IDE0059 // Unnecessary assignment of a value - rofstid for Debugging/future use
if (MyDocVersion.DocVersionAssociationCount > 0) int rofstid = int.Parse(xd.DocumentElement.Attributes.GetNamedItem("rofstid").InnerText);
#pragma warning restore IDE0059 // Unnecessary assignment of a value
if (MyDocVersion.DocVersionAssociationCount > 0)
{ {
// use current ROPath // use current ROPath
MyRODb = RODb.GetJustRoDb(MyDocVersion.DocVersionAssociations[0].MyROFst.MyRODb.RODbID); MyRODb = RODb.GetJustRoDb(MyDocVersion.DocVersionAssociations[0].MyROFst.MyRODb.RODbID);
@@ -560,15 +539,17 @@ namespace VEPROMS
// then ask if we should import using the current workingdraft RO Path, convert the ROs to text, or cancel the import // then ask if we should import using the current workingdraft RO Path, convert the ROs to text, or cancel the import
if (MyRODb.FolderPath != rofolderpath && !_ImportingApprovedExportFile) //B2020-095 don't display dialog if importing approved procedure export file if (MyRODb.FolderPath != rofolderpath && !_ImportingApprovedExportFile) //B2020-095 don't display dialog if importing approved procedure export file
{ {
dlgImpHowToHandleROs dlg = new dlgImpHowToHandleROs(); dlgImpHowToHandleROs dlg = new dlgImpHowToHandleROs
dlg.ImportedROFolder = rofolderpath; {
dlg.WorkingDraftROFolder = MyRODb.FolderPath; ImportedROFolder = rofolderpath,
dlg.ShowDialog(this); WorkingDraftROFolder = MyRODb.FolderPath
};
dlg.ShowDialog(this);
if (dlg.CancelImport) if (dlg.CancelImport)
{ {
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
this.btnImport.Enabled = true; // allow user to select a different export file to import 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 btnDoImport.Enabled = true; // allow user to change mind and perform the import
return false; // Return False to Indicate that the Import did not succeed return false; // Return False to Indicate that the Import did not succeed
} }
_ConvertROsToTextDuringImport = dlg.ConvertROsToText; _ConvertROsToTextDuringImport = dlg.ConvertROsToText;
@@ -612,16 +593,18 @@ namespace VEPROMS
if (localROPaths.Count == 0) if (localROPaths.Count == 0)
{ {
MessageBox.Show("There has been no RO folder defined for this database.\r\n\r\nIn order to import a procedure, you need to assign a RO folder path.\r\n\r\nImport process will terminate."); MessageBox.Show("There has been no RO folder defined for this database.\r\n\r\nIn order to import a procedure, you need to assign a RO folder path.\r\n\r\nImport process will terminate.");
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
return false;// Return False to Indicate that the Import did not succeed return false;// Return False to Indicate that the Import did not succeed
} }
else else
{ {
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
dlgPickROFolder dlg = new dlgPickROFolder(); dlgPickROFolder dlg = new dlgPickROFolder
dlg.ImportedROFolder = rofolderpath; {
dlg.LocalROFolders = localROPaths; ImportedROFolder = rofolderpath,
dlg.ShowDialog(this); LocalROFolders = localROPaths
};
dlg.ShowDialog(this);
if ((dlg.SelectedROFolder ?? string.Empty) != string.Empty) // B2015-216 If the return value is null treat it like an empty string if ((dlg.SelectedROFolder ?? string.Empty) != string.Empty) // B2015-216 If the return value is null treat it like an empty string
{ {
MyRODb = RODb.GetByFolderPath(dlg.SelectedROFolder); MyRODb = RODb.GetByFolderPath(dlg.SelectedROFolder);
@@ -645,7 +628,7 @@ namespace VEPROMS
else else
{ {
MessageBox.Show("Since you did not pick an existing RO folder defined for this database, the import process will terminate."); MessageBox.Show("Since you did not pick an existing RO folder defined for this database, the import process will terminate.");
this.Close();// Close the Import Window Close();// Close the Import Window
return false;// Return False to Indicate that the Import did not succeed return false;// Return False to Indicate that the Import did not succeed
} }
} }
@@ -655,9 +638,9 @@ namespace VEPROMS
bool didImp = LoadFormats(xd, "procedure/formats/format"); bool didImp = LoadFormats(xd, "procedure/formats/format");
if (!didImp) if (!didImp)
{ {
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
this.btnImport.Enabled = true; // allow user to select a different export file to import 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 btnDoImport.Enabled = true; // allow user to change mind and perform the import
return false; // Return False to Indicate that the Import did not succeed return false; // Return False to Indicate that the Import did not succeed
} }
// use resolvedProcNum to determine if procedure is 'unique', i.e. if the procedure number exists // use resolvedProcNum to determine if procedure is 'unique', i.e. if the procedure number exists
@@ -763,7 +746,7 @@ namespace VEPROMS
ProcedureInfo lastProcedure = null; ProcedureInfo lastProcedure = null;
foreach (ProcedureInfo pi in MyDocVersion.Procedures.OfType<ProcedureInfo>()) foreach (ProcedureInfo pi in MyDocVersion.Procedures.OfType<ProcedureInfo>())
lastProcedure = pi; lastProcedure = pi;
_MyNewProcedure = AddProcedure(xd.DocumentElement, MyDocVersion, lastProcedure); MyNewProcedure = AddProcedure(xd.DocumentElement, MyDocVersion, lastProcedure);
//update transitions //update transitions
AddTransitions(PendingTransitions); AddTransitions(PendingTransitions);
PendingTransitions.Save(fn); PendingTransitions.Save(fn);
@@ -803,7 +786,7 @@ namespace VEPROMS
} }
xd.SelectSingleNode("procedure/content/@number").InnerText = string.Format("Copy({0}) of {1}", count.ToString(), number); xd.SelectSingleNode("procedure/content/@number").InnerText = string.Format("Copy({0}) of {1}", count.ToString(), number);
//add imported procedure and copy count //add imported procedure and copy count
_MyNewProcedure = AddProcedure(xd.DocumentElement, MyDocVersion, lastProcedure); MyNewProcedure = AddProcedure(xd.DocumentElement, MyDocVersion, lastProcedure);
//update transitions //update transitions
AddTransitions(PendingTransitions); AddTransitions(PendingTransitions);
FixFloatingFoldouts(); FixFloatingFoldouts();
@@ -861,7 +844,7 @@ namespace VEPROMS
return false; return false;
} }
//add imported procedure //add imported procedure
_MyNewProcedure = AddProcedure(xd.DocumentElement, MyDocVersion, lastProcedure); MyNewProcedure = AddProcedure(xd.DocumentElement, MyDocVersion, lastProcedure);
//update transitions //update transitions
AddTransitions(PendingTransitions); AddTransitions(PendingTransitions);
FixFloatingFoldouts(); FixFloatingFoldouts();
@@ -884,9 +867,9 @@ namespace VEPROMS
bool didImp = LoadFormats(xd, "folder/formats/format"); bool didImp = LoadFormats(xd, "folder/formats/format");
if (!didImp) if (!didImp)
{ {
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
this.btnImport.Enabled = true; // allow user to select a different export file to import 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 btnDoImport.Enabled = true; // allow user to change mind and perform the import
return false; // Return False to Indicate that the Import did not succeed return false; // Return False to Indicate that the Import did not succeed
} }
string name = xd.DocumentElement.Attributes.GetNamedItem("name").InnerText; string name = xd.DocumentElement.Attributes.GetNamedItem("name").InnerText;
@@ -1004,7 +987,8 @@ namespace VEPROMS
c.Save(); c.Save();
} }
} }
Dictionary<string, string> existingCopyFCName = new Dictionary<string, string>(); [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
Dictionary<string, string> existingCopyFCName = new Dictionary<string, string>();
// note that this is used when importing a folder or a procedure (procedure was added for UCF changes) // 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) private bool LoadFormats(XmlDocument xd, string xmlpath)
{ {
@@ -1015,21 +999,20 @@ namespace VEPROMS
importedFormat = new Dictionary<int, string>(); importedFormat = new Dictionary<int, string>();
XmlNodeList nl = xd.SelectNodes(xmlpath); XmlNodeList nl = xd.SelectNodes(xmlpath);
bool conflictingUCFdata = false;
List<string> existingFC = new List<string>(); List<string> existingFC = new List<string>();
List<string> importedFC = new List<string>(); List<string> importedFC = new List<string>();
List<string> fname = new List<string>(); List<string> fname = new List<string>();
foreach (XmlNode nd in nl) foreach (XmlNode nd in nl)
{ {
string copyOfUCF = null; // see if any of the imported formats are 'UCF' formats, i.e. have config data. If they are UCF,
// see if any of the imported formats are 'UCF' formats, i.e. have config data. If they are UCF, // see if this is different that what is in the database. If it is, the user needs to decide
// see if this is different that what is in the database. If it is, the user needs to decide // whether to associate sections with existing UCF format or the new one. All UCF formats will be
// whether to associate sections with existing UCF format or the new one. All UCF formats will be // connected the same way, i.e. existing or new.
// connected the same way, i.e. existing or new. #pragma warning disable IDE0059 // Unnecessary assignment of a value - formatid for Debugging/future use
int formatid = int.Parse(nd.Attributes.GetNamedItem("formatid").InnerText); int formatid = int.Parse(nd.Attributes.GetNamedItem("formatid").InnerText);
string name = nd.Attributes.GetNamedItem("name").InnerText; #pragma warning restore IDE0059 // Unnecessary assignment of a value
string name = nd.Attributes.GetNamedItem("name").InnerText;
string config = null; string config = null;
XmlNode cfg = nd.Attributes.GetNamedItem("config"); XmlNode cfg = nd.Attributes.GetNamedItem("config");
if (cfg != null) config = cfg.InnerText; if (cfg != null) config = cfg.InnerText;
@@ -1038,10 +1021,10 @@ namespace VEPROMS
FormatInfo exFI = FormatInfo.Get(existingFormat[name]); FormatInfo exFI = FormatInfo.Get(existingFormat[name]);
if (exFI.Config != config && exFI.Config != "" && exFI.Config != null && config != "" && config != null) if (exFI.Config != config && exFI.Config != "" && exFI.Config != null && config != "" && config != null)
{ {
// See if there are copies of this UCF format, if so, this may match (have same config) one of those and should // See if there are copies of this UCF format, if so, this may match (have same config) one of those and should
// use it before stating there is conflicting data. // use it before stating there is conflicting data.
copyOfUCF = ContentsOfUCFExists(name, config); string copyOfUCF = ContentsOfUCFExists(name, config);
if (copyOfUCF == null) if (copyOfUCF == null)
{ {
existingFC.Add(exFI.Config); existingFC.Add(exFI.Config);
importedFC.Add(config); importedFC.Add(config);
@@ -1069,15 +1052,16 @@ namespace VEPROMS
if (pnameAttrib != null) if (pnameAttrib != null)
pname = pnameAttrib.InnerText; pname = pnameAttrib.InnerText;
if (pname == null) continue; if (pname == null) continue;
string description = null; XmlNode descript = nd.Attributes.GetNamedItem("description");
XmlNode descript = nd.Attributes.GetNamedItem("description"); #pragma warning disable IDE0059 // Unnecessary assignment of a value - description, userid, dts for future use
if (descript != null) description = descript.InnerText; string description = descript?.InnerText;
string userid = nd.Attributes.GetNamedItem("userid").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText;
DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText);
// If the format that is being imported exists as a copy (already was imported and a 'Copy x of name' was created) and the imported and #pragma warning restore IDE0059 // Unnecessary assignment of a value
// existing config match, use the existing (copied) format's name rather than importing it again (the dictionary was set up during // If the format that is being imported exists as a copy (already was imported and a 'Copy x of name' was created) and the imported and
// the import formats process. // existing config match, use the existing (copied) format's name rather than importing it again (the dictionary was set up during
if (existingCopyFCName.ContainsKey(name)) name = existingCopyFCName[name]; // the import formats process.
if (existingCopyFCName.ContainsKey(name)) name = existingCopyFCName[name];
// compare this imported format to the original in the database. // compare this imported format to the original in the database.
// If format name exists, or if it has same config data, just use it. // If format name exists, or if it has same config data, just use it.
@@ -1098,11 +1082,11 @@ namespace VEPROMS
// parent format will always be in there, if it is a new format, it will be added before the child. Check just in case (no null reference). // parent format will always be in there, if it is a new format, it will be added before the child. Check just in case (no null reference).
if (!existingFormat.ContainsKey(pname)) break; if (!existingFormat.ContainsKey(pname)) break;
int pid = existingFormat[pname]; int pid = existingFormat[pname];
Format pformat = Format.Get(pid); _ = Format.Get(pid);
// if the new format doesn't exist, it will be added (after these other checks). Otherwise, handle the // if the new format doesn't exist, it will be added (after these other checks). Otherwise, handle the
// various cases listed above: // various cases listed above:
if (existingFormat.ContainsKey(name)) if (existingFormat.ContainsKey(name))
{ {
@@ -1221,7 +1205,6 @@ namespace VEPROMS
{ {
int oldid = int.Parse(nd.Attributes.GetNamedItem("old").InnerText); int oldid = int.Parse(nd.Attributes.GetNamedItem("old").InnerText);
int newid = int.Parse(nd.Attributes.GetNamedItem("new").InnerText); int newid = int.Parse(nd.Attributes.GetNamedItem("new").InnerText);
//if (!Old2NewContent.ContainsKey(oldid))
Old2NewLibDoc.Add(oldid, newid); Old2NewLibDoc.Add(oldid, newid);
} }
File.Delete(fn); File.Delete(fn);
@@ -1362,8 +1345,8 @@ namespace VEPROMS
} }
private void ExportFormats(FormatInfoList fil, XmlElement xn, string nodename, bool doElement) private void ExportFormats(FormatInfoList fil, XmlElement xn, string nodename, bool doElement)
{ {
XmlElement xe = null; XmlElement xe;
if (doElement) xe = xn.OwnerDocument.CreateElement(nodename); if (doElement) xe = xn.OwnerDocument.CreateElement(nodename);
else xe = xn; else xe = xn;
foreach (FormatInfo fi in fil) foreach (FormatInfo fi in fil)
ExportFormat(xe, fi, "format"); ExportFormat(xe, fi, "format");
@@ -1489,7 +1472,7 @@ namespace VEPROMS
{ {
pbExportProcedure.Value = 0; pbExportProcedure.Value = 0;
pbExportProcedure.Maximum = dvi.Procedures.Count; pbExportProcedure.Maximum = dvi.Procedures.Count;
lblExportProcedure.Text = pbExportProcedure.Maximum.ToString() + " Procedures"; lblExportProcedure.Text = $"{pbExportProcedure.Maximum} Procedures";
foreach (ItemInfo ii in dvi.Procedures) foreach (ItemInfo ii in dvi.Procedures)
{ {
XmlDocument xd = new XmlDocument(); XmlDocument xd = new XmlDocument();
@@ -1641,14 +1624,14 @@ namespace VEPROMS
private void ExportItem(XmlElement xn, ItemInfo ii, string nodename) private void ExportItem(XmlElement xn, ItemInfo ii, string nodename)
{ {
/* /*
ItemID ItemID
PreviousID PreviousID
ContentID ContentID
DTS DTS
*/ */
XmlElement xe = null; XmlElement xe;
if (xn.Name == "procedure") if (xn.Name == "procedure")
xe = xn; xe = xn;
else else
{ {
@@ -2434,12 +2417,9 @@ namespace VEPROMS
} }
} }
private void AddTransitions() private void AddTransitions() => AddTransitions(PendingTransitions);
{
AddTransitions(PendingTransitions);
}
private void AddTransitions(XmlDocument xd) private void AddTransitions(XmlDocument xd)
{ {
/* /*
Content Content
@@ -2459,7 +2439,7 @@ namespace VEPROMS
type,id,toid,rangeid type,id,toid,rangeid
*/ */
XmlNodeList nl = xd.SelectNodes("//transition"); XmlNodeList nl = xd.SelectNodes("//transition");
lblImportStatus.Text = string.Format("Updating {0} Tranistions", nl.Count.ToString()); lblImportStatus.Text = $"Updating {nl.Count} Tranistions";
foreach (XmlNode nd in nl) foreach (XmlNode nd in nl)
{ {
@@ -2522,9 +2502,8 @@ namespace VEPROMS
} }
else //transition to existing itemid (external) else //transition to existing itemid (external)
{ {
bool forceConvertToText = false; int transitionid = int.Parse(nd.Attributes.GetNamedItem("transitionid").InnerText);
int transitionid = int.Parse(nd.Attributes.GetNamedItem("transitionid").InnerText); int isrange = int.Parse(nd.Attributes.GetNamedItem("isrange").InnerText);
int isrange = int.Parse(nd.Attributes.GetNamedItem("isrange").InnerText);
string config = nd.Attributes.GetNamedItem("config").InnerText; string config = nd.Attributes.GetNamedItem("config").InnerText;
string userid = nd.Attributes.GetNamedItem("userid").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText;
DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText);
@@ -2538,43 +2517,44 @@ namespace VEPROMS
fromid = Old2NewContent[fromid]; fromid = Old2NewContent[fromid];
Content cc = Content.Get(fromid); Content cc = Content.Get(fromid);
Transition tt = Transition.MakeTransition(cc, Item.Get(toid), Item.Get(rangeid), isrange, trantype, config, dts, userid); Transition tt = Transition.MakeTransition(cc, Item.Get(toid), Item.Get(rangeid), isrange, trantype, config, dts, userid);
if (tt.TransitionID < 0)
{
forceConvertToText = true;
_DidProcessTransitions |= cc.FixTransitionText(TransitionInfo.Get(tt.TransitionID), forceConvertToText); // B2017-076 FixTransitionText will tell us if transitions were processed/changed
cc.Save();
nd.InnerText = "done";
}
else
{
transitionid = tt.TransitionID;
string replacewith;
if (isrange == 0)
replacewith = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid);
else
replacewith = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid);
cc.Text = cc.Text.Replace(lookfor, replacewith);
if (cc.MyGrid != null && !string.IsNullOrEmpty(cc.MyGrid.Data)) bool forceConvertToText;
{ if (tt.TransitionID < 0)
cc.MyGrid.Data = cc.MyGrid.Data.Replace(lookfor, replacewith); {
} forceConvertToText = true;
_DidProcessTransitions |= cc.FixTransitionText(TransitionInfo.Get(tt.TransitionID), forceConvertToText); // B2017-076 FixTransitionText will tell us if transitions were processed/changed
cc.Save();
nd.InnerText = "done";
}
else
{
transitionid = tt.TransitionID;
string replacewith;
// B2016-176, B2016-197 - external transitions should be converted to text if (isrange == 0)
forceConvertToText = true; replacewith = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid);
_DidProcessTransitions |= cc.FixTransitionText(TransitionInfo.Get(tt.TransitionID), forceConvertToText); // B2017-076 FixTransitionText will tell us if transitions were processed/changed else
// B2017=003 make sure any grid changes are saved. replacewith = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid);
// done here because FixTransitionText() could update the transitions in the grid
if (cc.MyGrid != null && cc.MyGrid.Data != "") cc.Text = cc.Text.Replace(lookfor, replacewith);
cc.MyGrid.Save();
cc.Save(); if (cc.MyGrid != null && !string.IsNullOrEmpty(cc.MyGrid.Data))
nd.InnerText = "done"; {
_DidConvertTransitionsToText |= (forceConvertToText && _DidProcessTransitions); // B2016-225 - notify user when transitions are converted to text cc.MyGrid.Data = cc.MyGrid.Data.Replace(lookfor, replacewith);
} }
}
// B2016-176, B2016-197 - external transitions should be converted to text
forceConvertToText = true;
_DidProcessTransitions |= cc.FixTransitionText(TransitionInfo.Get(tt.TransitionID), forceConvertToText); // B2017-076 FixTransitionText will tell us if transitions were processed/changed
// B2017=003 make sure any grid changes are saved.
// done here because FixTransitionText() could update the transitions in the grid
if (cc.MyGrid != null && cc.MyGrid.Data != "")
cc.MyGrid.Save();
cc.Save();
nd.InnerText = "done";
_DidConvertTransitionsToText |= (forceConvertToText && _DidProcessTransitions); // B2016-225 - notify user when transitions are converted to text
}
}
} }
} }
} }
@@ -2620,7 +2600,6 @@ namespace VEPROMS
if (formatID >= importedFormat.Count) return null; // formatID not found, use default file name if (formatID >= importedFormat.Count) return null; // formatID not found, use default file name
formatName = importedFormat[formatID]; // for backwards compatibility with older export files formatName = importedFormat[formatID]; // for backwards compatibility with older export files
} }
if (renamedUCFFormatName != null && renamedUCFFormatName.ContainsKey(formatFileName)) formatName = renamedUCFFormatName[formatName];
formatID = existingFormat[formatName]; formatID = existingFormat[formatName];
return Format.Get(formatID); return Format.Get(formatID);
} }
@@ -2668,9 +2647,11 @@ namespace VEPROMS
MyRODb = AddRODb(xrodb); MyRODb = AddRODb(xrodb);
ROFst rofst = AddROFst(xrofst); ROFst rofst = AddROFst(xrofst);
DocVersionAssociation dva = dv.DocVersionAssociations.Add(rofst); #pragma warning disable IDE0059 // Unnecessary assignment of a value - dva kept for side effect code
DocVersionAssociation dva = dv.DocVersionAssociations.Add(rofst);
#pragma warning restore IDE0059 // Unnecessary assignment of a value
dv.Save(); dv.Save();
} }
return DocVersionInfo.Get(dv.VersionID); return DocVersionInfo.Get(dv.VersionID);
@@ -2905,9 +2886,11 @@ namespace VEPROMS
foreach (XmlNode nd in xn.SelectNodes("rousage")) foreach (XmlNode nd in xn.SelectNodes("rousage"))
{ {
string rousageid = nd.Attributes.GetNamedItem("rousageid").InnerText; string rousageid = nd.Attributes.GetNamedItem("rousageid").InnerText;
string roid = nd.Attributes.GetNamedItem("roid").InnerText; #pragma warning disable IDE0059 // Unnecessary assignment of a value - roid for Debugging/future use
string roid = nd.Attributes.GetNamedItem("roid").InnerText;
#pragma warning restore IDE0059 // Unnecessary assignment of a value
string findLink = @"<START\].*?\[END>"; string findLink = @"<START\].*?\[END>";
content.Text = content.Text.Replace("<START]<START]", "<START]").Replace(@"[END><START]", @"[END>\v0 \v <START]"); //B2020-057 bad RO link - remove extra START and insert comment off/on between <END]<START] content.Text = content.Text.Replace("<START]<START]", "<START]").Replace(@"[END><START]", @"[END>\v0 \v <START]"); //B2020-057 bad RO link - remove extra START and insert comment off/on between <END]<START]
content.Save(); content.Save();
MatchCollection ms = Regex.Matches(content.Text, findLink); MatchCollection ms = Regex.Matches(content.Text, findLink);
@@ -2943,7 +2926,7 @@ namespace VEPROMS
if (prefix == @"\v ") if (prefix == @"\v ")
part1 = part1.Substring(0, part1.Length - 3); part1 = part1.Substring(0, part1.Length - 3);
else else
part1 = part1.Substring(0, part1.Length - 3) + " "; part1 = $"{part1.Substring(0, part1.Length - 3)} ";
//modify part3 based on suffix //modify part3 based on suffix
if (suffix == @"\v0 ") if (suffix == @"\v0 ")
part3 = part3.Substring(4); part3 = part3.Substring(4);
@@ -3114,8 +3097,10 @@ namespace VEPROMS
{ {
foreach (XmlNode nd in xn.SelectNodes("annotation")) foreach (XmlNode nd in xn.SelectNodes("annotation"))
{ {
int typeid = int.Parse(nd.Attributes.GetNamedItem("typeid").InnerText); #pragma warning disable IDE0059 // Unnecessary assignment of a value - typeid for debugging/future use
string rtftext = nd.Attributes.GetNamedItem("rtftext").InnerText; int typeid = int.Parse(nd.Attributes.GetNamedItem("typeid").InnerText);
#pragma warning restore IDE0059 // Unnecessary assignment of a value
string rtftext = nd.Attributes.GetNamedItem("rtftext").InnerText;
string searchtext = nd.Attributes.GetNamedItem("searchtext").InnerText; string searchtext = nd.Attributes.GetNamedItem("searchtext").InnerText;
string config = nd.Attributes.GetNamedItem("config").InnerText; string config = nd.Attributes.GetNamedItem("config").InnerText;
string userid = nd.Attributes.GetNamedItem("userid").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText;
@@ -3850,7 +3835,7 @@ namespace VEPROMS
if (d == null) if (d == null)
{ {
// B2019-035 better memory management. Prior logic would eat up memory (and not free it). // B2019-035 better memory management. Prior logic would eat up memory (and not free it).
string libkey = libtitle + "_" + dts.ToString(); string libkey = $"{libtitle}_{dts}";
if (ExistingLibDocs.ContainsKey(libkey)) if (ExistingLibDocs.ContainsKey(libkey))
d = Document.Get(ExistingLibDocs[libkey]); // found library document in existing database d = Document.Get(ExistingLibDocs[libkey]); // found library document in existing database
} }
@@ -3863,7 +3848,7 @@ namespace VEPROMS
string config = xn.Attributes.GetNamedItem("config").InnerText; string config = xn.Attributes.GetNamedItem("config").InnerText;
string userid = xn.Attributes.GetNamedItem("userid").InnerText; string userid = xn.Attributes.GetNamedItem("userid").InnerText;
string fileextension = xn.Attributes.GetNamedItem("fileextension").InnerText; string fileextension = xn.Attributes.GetNamedItem("fileextension").InnerText;
if (libtitle != "") libtitle = libtitle + "_" + dts.ToString(); // if a lib document, append the date/time to the title incase there are duplicate titles if (libtitle != "") libtitle = $"{libtitle}_{dts}"; // if a lib document, append the date/time to the title incase there are duplicate titles
d = Document.MakeDocument(libtitle, doccontent, docascii, config, dts, userid, fileextension); d = Document.MakeDocument(libtitle, doccontent, docascii, config, dts, userid, fileextension);
d.Save(); d.Save();
Old2NewLibDoc.Add(docid, d.DocID); Old2NewLibDoc.Add(docid, d.DocID);
@@ -3873,20 +3858,14 @@ namespace VEPROMS
return d; return d;
} }
#endregion #endregion
private void btnCloseExport_Click(object sender, EventArgs e) private void btnCloseExport_Click(object sender, EventArgs e) => Close();
{
this.Close();
}
private void btnCloseImport_Click(object sender, EventArgs e) private void btnCloseImport_Click(object sender, EventArgs e) => Close();
{
this.Close();
}
//unset the unit (SelectedSlave) //unset the unit (SelectedSlave)
private void RemoveUnit_OnClose(object sender, EventArgs e) private void RemoveUnit_OnClose(object sender, EventArgs e)
{ {
if (MyProcedure != null) if (MyProcedure != null)
{ {
@@ -19,7 +19,7 @@ namespace VEPROMS
private readonly AnnotationTypeInfo _AnnotationType; private readonly AnnotationTypeInfo _AnnotationType;
private readonly string multiseparator = ","; private readonly string multiseparator = ",";
private static Regex _ROAccPageTokenPattern = new Regex("[<][^<>-]+-[^<>]+[>]"); private static readonly Regex _ROAccPageTokenPattern = new Regex("[<][^<>-]+-[^<>]+[>]");
public dlgExportImportEP(string mode, FolderInfo folderInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, folderInfo, myFrmVEPROMS, ( unitIndex)) public dlgExportImportEP(string mode, FolderInfo folderInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, folderInfo, myFrmVEPROMS, ( unitIndex))
{ {
@@ -261,10 +261,8 @@ namespace VEPROMS
{ {
string rodbpath = rodb.FolderPath; string rodbpath = rodb.FolderPath;
string rocval = roc.value; string rocval = roc.value ?? Array.Find(roc.children, x => x.value.Contains('.')).value;
if (rocval == null) rocval = Array.Find(roc.children, x => x.value.Contains('.')).value; if (rocval == null) return "";
if (rocval == null) return "";
string imgname; string imgname;
if (isMulti) if (isMulti)
{ {
@@ -1,54 +1,23 @@
using System; 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.Windows.Forms;
namespace VEPROMS namespace VEPROMS
{ {
public partial class dlgImpHowToHandleROs : Form public partial class dlgImpHowToHandleROs : Form
{ {
private string _ImportedROFolder; public string ImportedROFolder { get; set; }
public string ImportedROFolder public string WorkingDraftROFolder { get; set; }
{ private bool _CancelImport = true; // default to truen in case the dialog is closed with the red X in the upper right corner
get { return _ImportedROFolder; } public bool CancelImport => _CancelImport;
set { _ImportedROFolder = value; } private bool _ConvertROsToText = false;
} public bool ConvertROsToText => _ConvertROsToText;
private string _WorkingDraftROFolder; public dlgImpHowToHandleROs() => InitializeComponent();
public string WorkingDraftROFolder
{
get { return _WorkingDraftROFolder; }
set { _WorkingDraftROFolder = value; }
}
private bool _CancelImport = true; // default to truen in case the dialog is closed with the red X in the upper right corner
public bool CancelImport
{
get { return _CancelImport; }
}
private bool _ConvertROsToText = false;
public bool ConvertROsToText
{
get { return _ConvertROsToText; }
}
public dlgImpHowToHandleROs()
{
InitializeComponent();
}
private void dlgImpHowToHandleROs_Load(object sender, EventArgs e) private void dlgImpHowToHandleROs_Load(object sender, EventArgs e) => rtbROPathInfo.Text = string.Format("The current Working Draft RO folder path is:\n\n {0}\n\nThe procedure you are trying to import is from a database that has the RO folder path:\n\n {1}\n\nSelect from the options below on how to handle the RO values when importing this procedure.", WorkingDraftROFolder, ImportedROFolder);
{
rtbROPathInfo.Text = string.Format("The current Working Draft RO folder path is:\n\n {0}\n\nThe procedure you are trying to import is from a database that has the RO folder path:\n\n {1}\n\nSelect from the options below on how to handle the RO values when importing this procedure.", _WorkingDraftROFolder, _ImportedROFolder);
}
private void btnUseCurrentROs_Click(object sender, EventArgs e) private void btnUseCurrentROs_Click(object sender, EventArgs e) => _ConvertROsToText = _CancelImport = false;
{
_ConvertROsToText = _CancelImport = false;
}
private void btnROsToText_Click(object sender, EventArgs e) private void btnROsToText_Click(object sender, EventArgs e)
{ {
_CancelImport = false; _CancelImport = false;
_ConvertROsToText = true; _ConvertROsToText = true;
@@ -60,9 +29,6 @@ namespace VEPROMS
_ConvertROsToText = false; _ConvertROsToText = false;
} }
private void dlgImpHowToHandleROs_Resize(object sender, EventArgs e) private void dlgImpHowToHandleROs_Resize(object sender, EventArgs e) => rtbROPathInfo.Refresh();
{ }
rtbROPathInfo.Refresh();
}
}
} }
@@ -1,11 +1,4 @@
using System; 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.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.Library; using Volian.Base.Library;
@@ -38,7 +31,7 @@ namespace VEPROMS
usersettings.SetUserSetting_MSWord_Summary_Prompt(false); usersettings.SetUserSetting_MSWord_Summary_Prompt(false);
} }
this.Close(); Close();
} }
} }
@@ -1,12 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.Library;
using Volian.Controls.Library; using Volian.Controls.Library;
using System.Linq; using System.Linq;
@@ -26,11 +21,8 @@ namespace VEPROMS
private List<MembershipInfo> myMembershipInfoList; private List<MembershipInfo> myMembershipInfoList;
private Folder myFolder; private Folder myFolder;
public dlgManageSecurity() public dlgManageSecurity() => InitializeComponent();
{ private void dlgManageSecurity_Load(object sender, EventArgs e)
InitializeComponent();
}
private void dlgManageSecurity_Load(object sender, EventArgs e)
{ {
//load all folders //load all folders
myFolder = Folder.Get(1); myFolder = Folder.Get(1);
@@ -331,10 +323,12 @@ namespace VEPROMS
private void addUserToolStripMenuItem_Click(object sender, EventArgs e) private void addUserToolStripMenuItem_Click(object sender, EventArgs e)
{ {
User u = User.MakeUser("[Enter New UserID]", "", "", "", "", "", "", "", "", "", "", DateTime.Now, ""); User u = User.MakeUser("[Enter New UserID]", "", "", "", "", "", "", "", "", "", "", DateTime.Now, "");
frmManageUser frm = new frmManageUser("add"); frmManageUser frm = new frmManageUser("add")
frm.MyUser = u; {
frm.Text = "Enter New UserID"; //C2026-002 Change Title bar on Add/Edit User MyUser = u,
if (frm.ShowDialog(this) == DialogResult.OK) Text = "Enter New UserID" //C2026-002 Change Title bar on Add/Edit User
};
if (frm.ShowDialog(this) == DialogResult.OK)
{ {
u = frm.MyUser; u = frm.MyUser;
u.Save(); u.Save();
@@ -362,9 +356,11 @@ namespace VEPROMS
UserInfo ui = myUserInfoList[lstUsers.SelectedIndex]; UserInfo ui = myUserInfoList[lstUsers.SelectedIndex];
using (User u = User.Get(ui.UID)) using (User u = User.Get(ui.UID))
{ {
frmManageUser frm = new frmManageUser("edit"); frmManageUser frm = new frmManageUser("edit")
frm.MyUser = u; {
if (frm.ShowDialog(this) == DialogResult.OK) MyUser = u
};
if (frm.ShowDialog(this) == DialogResult.OK)
{ {
frm.MyUser.Save(); frm.MyUser.Save();
@@ -505,12 +501,14 @@ namespace VEPROMS
pnlGroups.Controls.Clear(); pnlGroups.Controls.Clear();
foreach (GroupInfo gi in myGroupInfoList) foreach (GroupInfo gi in myGroupInfoList)
{ {
RadioButton rb = new RadioButton(); RadioButton rb = new RadioButton
rb.Text = gi.GroupName; {
rb.Parent = pnlGroups; Text = gi.GroupName,
rb.Dock = DockStyle.Top; Parent = pnlGroups,
rb.Tag = gi; Dock = DockStyle.Top,
rb.CheckedChanged -= new EventHandler(rb_CheckedChanged); Tag = gi
};
rb.CheckedChanged -= new EventHandler(rb_CheckedChanged);
rb.CheckedChanged += new EventHandler(rb_CheckedChanged); rb.CheckedChanged += new EventHandler(rb_CheckedChanged);
pnlGroups.Controls.Add(rb); pnlGroups.Controls.Add(rb);
rb.BringToFront(); rb.BringToFront();
+2 -7
View File
@@ -1,9 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
@@ -11,8 +6,8 @@ namespace VEPROMS
{ {
public partial class dlgPhoneList : Form public partial class dlgPhoneList : Form
{ {
private DocVersionConfig _docVersionConfig; private readonly DocVersionConfig _docVersionConfig;
private string _origPhoneList; private readonly string _origPhoneList;
public dlgPhoneList(DocVersionConfig dvc) public dlgPhoneList(DocVersionConfig dvc)
{ {
_docVersionConfig = dvc; _docVersionConfig = dvc;
@@ -1,57 +1,24 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
namespace VEPROMS namespace VEPROMS
{ {
public partial class dlgPickROFolder : Form public partial class dlgPickROFolder : Form
{ {
private string _ImportedROFolder; public string ImportedROFolder { get; set; }
public string ImportedROFolder public List<string> LocalROFolders { get; set; }
{ public string SelectedROFolder { get; set; }
get { return _ImportedROFolder; } public dlgPickROFolder() => InitializeComponent();
set { _ImportedROFolder = value; }
}
private List<string> _LocalROFolders;
public List<string> LocalROFolders
{
get { return _LocalROFolders; }
set { _LocalROFolders = value; }
}
private string _SelectedROFolder;
public string SelectedROFolder
{
get { return _SelectedROFolder; }
set { _SelectedROFolder = value; }
}
public dlgPickROFolder()
{
InitializeComponent();
}
private void dlgPickROFolder_Load(object sender, EventArgs e) private void dlgPickROFolder_Load(object sender, EventArgs e)
{ {
lblImportRO.Text = string.Format("The procedure you are trying to import was exported from a database that had the following RO folder path:\r\n\r\n{0}\r\n\r\nSelect from the following RO Folders that exist in the database you are trying to import this procedure into so that the import process can continue", _ImportedROFolder); lblImportRO.Text = string.Format("The procedure you are trying to import was exported from a database that had the following RO folder path:\r\n\r\n{0}\r\n\r\nSelect from the following RO Folders that exist in the database you are trying to import this procedure into so that the import process can continue", ImportedROFolder);
clbLocalROFolders.DataSource = LocalROFolders; clbLocalROFolders.DataSource = LocalROFolders;
} }
private void clbLocalROFolders_SelectedIndexChanged(object sender, EventArgs e) private void clbLocalROFolders_SelectedIndexChanged(object sender, EventArgs e) => btnOkay.Enabled = clbLocalROFolders.CheckedItems.Count > 0;
{
if (clbLocalROFolders.CheckedItems.Count > 0)
{
btnOkay.Enabled = true;
}
else
btnOkay.Enabled = false;
}
private void btnOkay_Click(object sender, EventArgs e) private void btnOkay_Click(object sender, EventArgs e) => SelectedROFolder = clbLocalROFolders.CheckedItems[0].ToString();
{ }
SelectedROFolder = clbLocalROFolders.CheckedItems[0].ToString();
}
}
} }
@@ -1,24 +1,19 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.IO; using System.IO;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using JR.Utils.GUI.Forms; using JR.Utils.GUI.Forms;
using System.Linq;
namespace VEPROMS namespace VEPROMS
{ {
public partial class dlgPrintAllApprovedProcedures : DevComponents.DotNetBar.Office2007Form public partial class dlgPrintAllApprovedProcedures : DevComponents.DotNetBar.Office2007Form
{ {
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private StringBuilder NotApproved; private readonly StringBuilder NotApproved;
private DocVersionInfo _DocVersionInfo = null; private readonly DocVersionInfo _DocVersionInfo = null;
private int unitId = 0; private readonly int unitId = 0;
public dlgPrintAllApprovedProcedures(DocVersionInfo dvi) public dlgPrintAllApprovedProcedures(DocVersionInfo dvi)
{ {
InitializeComponent(); InitializeComponent();
@@ -43,7 +38,7 @@ namespace VEPROMS
// if SelectedSlave is > 0 then we are printing Approved Child Procedures and // 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) // subtract one from the index (unitId) into the list of child names (UnitNames)
if (unitId > 0) if (unitId > 0)
rtnstr += "\\" + _DocVersionInfo.UnitNames[unitId - 1]; // append Child name to path rtnstr += $"\\{_DocVersionInfo.UnitNames[unitId - 1]}"; // append Child name to path
return rtnstr; return rtnstr;
} }
@@ -91,7 +86,7 @@ namespace VEPROMS
int pdfCount = 0; int pdfCount = 0;
DeleteExistingPDFs(); // delete existing PDFs in the target folder DeleteExistingPDFs(); // delete existing PDFs in the target folder
// Get the Child index for Parent/Child procedure - if not Parent/Child this will be zero // Get the Child index for Parent/Child procedure - if not Parent/Child this will be zero
foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures) foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures.OfType<ProcedureInfo>())
{ {
RevisionInfoList ril = RevisionInfoList.GetByItemID(myProc.ItemID); RevisionInfoList ril = RevisionInfoList.GetByItemID(myProc.ItemID);
if (ril.Count == 0) if (ril.Count == 0)
@@ -144,7 +139,7 @@ namespace VEPROMS
_MyLog.Error("Print All Approved PDFs", ex);// save error in PROMS error log _MyLog.Error("Print All Approved PDFs", ex);// save error in PROMS error log
MessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
this.Close(); // close dialog Close(); // close dialog
} }
private void SaveApprovedPDFToFolder(RevisionInfo revInfo,string PDFName) private void SaveApprovedPDFToFolder(RevisionInfo revInfo,string PDFName)
{ {
@@ -168,10 +163,6 @@ namespace VEPROMS
{ {
DirectoryInfo di = new DirectoryInfo(txbApprovedPDFsPath.Text); DirectoryInfo di = new DirectoryInfo(txbApprovedPDFsPath.Text);
FileInfo[] fis; FileInfo[] fis;
//DirectoryInfo[] diAry = di.GetDirectories(txbApprovedPDFsPath.Text);
//DirectoryInfo di_fmtgen;
// remove all of the PDF fils
//di_fmtgen = diAry[0];
try try
{ {
fis = di.GetFiles("*.pdf"); fis = di.GetFiles("*.pdf");
@@ -189,14 +180,8 @@ namespace VEPROMS
} }
} }
private void txbApprovedPDFsPath_TextChanged(object sender, EventArgs e) private void txbApprovedPDFsPath_TextChanged(object sender, EventArgs e) => btnPrntAllAprv.Enabled = txbApprovedPDFsPath.Text.Length > 0;
{
btnPrntAllAprv.Enabled = txbApprovedPDFsPath.Text.Length > 0;
}
private void btnCancel_Click(object sender, EventArgs e) private void btnCancel_Click(object sender, EventArgs e) => Close();
{ }
this.Close();
}
}
} }
@@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Data; using System.Data;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
@@ -29,7 +28,7 @@ namespace VEPROMS
if (tmp[0] == null || tmp[0] == "") // First time date set. if (tmp[0] == null || tmp[0] == "") // First time date set.
{ {
cbdt = DateTime.Now.ToString("MM/dd/yyyy") + " " + DateTime.Now.ToString("HH:mm:ss"); cbdt = $"{DateTime.Now:MM/dd/yyyy} {DateTime.Now:HH:mm:ss}";
dateTimeInput1.Value = DateTime.Parse(cbdt); dateTimeInput1.Value = DateTime.Parse(cbdt);
return; return;
} }
@@ -43,13 +42,13 @@ namespace VEPROMS
var time = tmpdt.TimeOfDay; var time = tmpdt.TimeOfDay;
if (start < time) // If time is greater than 12:00:00 AM if (start < time) // If time is greater than 12:00:00 AM
{ {
cbdt = DateTime.Now.ToString("MM/dd/yyyy") + " " + tmpdt.TimeOfDay.ToString(); cbdt = $"{DateTime.Now:MM/dd/yyyy} {tmpdt.TimeOfDay}";
dateTimeInput1.Value = DateTime.Parse(cbdt); dateTimeInput1.Value = DateTime.Parse(cbdt);
return; return;
} }
else // if time is 12:00:00 AM else // if time is 12:00:00 AM
{ {
cbdt = DateTime.Now.ToString("MM/dd/yyyy") + " " + " 00:00:00"; cbdt = $"{DateTime.Now:MM/dd/yyyy} 00:00:00";
dateTimeInput1.Value = DateTime.Parse(cbdt); dateTimeInput1.Value = DateTime.Parse(cbdt);
return; return;
} }
@@ -68,7 +67,7 @@ namespace VEPROMS
MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");// ("MM/dd/yyyy HH:mm:ss"); MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");// ("MM/dd/yyyy HH:mm:ss");
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History //CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss")}) by ({VlnSettings.UserID}) on ({DateTime.Now})", DateTime.Now, VlnSettings.UserID, 0); ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({dateTimeInput1.Value:MM/dd/yyyy HH:mm:ss}) by ({VlnSettings.UserID}) on ({DateTime.Now})", DateTime.Now, VlnSettings.UserID, 0);
//CSM C2026-014 if multi-unit, set for each unit //CSM C2026-014 if multi-unit, set for each unit
System.Data.DataTable dt = RevisionData.GetRevisionDataByUnit(MyProcInfo.ItemID); System.Data.DataTable dt = RevisionData.GetRevisionDataByUnit(MyProcInfo.ItemID);
@@ -83,7 +82,7 @@ namespace VEPROMS
MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss"); MyProcConfig.Print_ChangeBarDate = dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss");
//CSM - C2026-010 - Add Audit Record for Change Bar Audit History //CSM - C2026-010 - Add Audit Record for Change Bar Audit History
ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({dateTimeInput1.Value.ToString("MM/dd/yyyy HH:mm:ss")}) by ({VlnSettings.UserID}) on ({DateTime.Now}) for (Unit {r["UnitName"]})", DateTime.Now, VlnSettings.UserID, MyProcConfig.SelectedSlave); ChangeBarAuditHistory.AddAudit(MyProcInfo.ItemID, $"Set ChangeBars set to ({dateTimeInput1.Value:MM/dd/yyyy HH:mm:ss}) by ({VlnSettings.UserID}) on ({DateTime.Now}) for (Unit {r["UnitName"]})", DateTime.Now, VlnSettings.UserID, MyProcConfig.SelectedSlave);
} }
} }
MyProcConfig.SelectedSlave = 0; MyProcConfig.SelectedSlave = 0;
@@ -91,12 +90,9 @@ namespace VEPROMS
} }
private void btnNow_Click(object sender, EventArgs e) private void btnNow_Click(object sender, EventArgs e) => dateTimeInput1.Value = DateTime.Now;
{
dateTimeInput1.Value = DateTime.Now;
}
//C2026-009 Add Option to Reset Change Bar to Last Approved Date/Time //C2026-009 Add Option to Reset Change Bar to Last Approved Date/Time
private void btnResetToApproved_Click(object sender, EventArgs e) private void btnResetToApproved_Click(object sender, EventArgs e)
{ {
System.Data.DataTable dt = RevisionData.GetRevisionDataByUnit(MyProcInfo.ItemID); System.Data.DataTable dt = RevisionData.GetRevisionDataByUnit(MyProcInfo.ItemID);
@@ -134,7 +130,7 @@ namespace VEPROMS
sb.Append("\r\n Any Change Bars for Units not listed above will use the Overall/Procedure Viewer Change Bar Date (as these Units have no approvals)."); sb.Append("\r\n Any Change Bars for Units not listed above will use the Overall/Procedure Viewer Change Bar Date (as these Units have no approvals).");
if (CustomMessageBox.Show($"This will reset ChangeBars to show for changes newer than the last approval.\r\nThis includes the following changes:\r\n{sb.ToString()}\r\n\r\nAre you sure you wish to reset ChangeBars?", "Reset ChangeBar Date", "Yes", "No") == DialogResult.Yes) if (CustomMessageBox.Show($"This will reset ChangeBars to show for changes newer than the last approval.\r\nThis includes the following changes:\r\n{sb}\r\n\r\nAre you sure you wish to reset ChangeBars?", "Reset ChangeBar Date", "Yes", "No") == DialogResult.Yes)
{ {
//Change the overall ChangeBarDate //Change the overall ChangeBarDate
MyProcConfig.Print_ChangeBarDate = maxDTS; MyProcConfig.Print_ChangeBarDate = maxDTS;
@@ -1,9 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Print.Library; using Volian.Print.Library;
@@ -13,10 +9,11 @@ namespace VEPROMS
{ {
public partial class dlgTransitionReport : Form public partial class dlgTransitionReport : Form
{ {
private FolderInfo folderInfo = null; private readonly FolderInfo folderInfo = null;
private ProcedureInfo procedureInfo = null; private readonly ProcedureInfo procedureInfo = null;
private PDFTransitionReport rpt; private PDFTransitionReport rpt;
private List<DocVersionInfo> lstDocVersions; [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private List<DocVersionInfo> lstDocVersions;
public dlgTransitionReport(FolderInfo fi) public dlgTransitionReport(FolderInfo fi)
{ {
InitializeComponent(); InitializeComponent();
@@ -26,7 +23,7 @@ namespace VEPROMS
if (lstDocVersions.Count == 1) if (lstDocVersions.Count == 1)
{ {
pnlVersions.Visible = false; pnlVersions.Visible = false;
this.Height = this.Height - pnlVersions.Height; Height -= pnlVersions.Height;
} }
} }
public dlgTransitionReport(ProcedureInfo pi) public dlgTransitionReport(ProcedureInfo pi)
@@ -34,16 +31,17 @@ namespace VEPROMS
InitializeComponent(); InitializeComponent();
procedureInfo = pi; procedureInfo = pi;
pnlVersions.Visible = pnlProcs.Visible = false; pnlVersions.Visible = pnlProcs.Visible = false;
this.Height = this.Height - pnlVersions.Height - pnlProcs.Height; Height = Height - pnlVersions.Height - pnlProcs.Height;
} }
//private DocVersionInfo docVersionInfo;
private void dlgTransitionReport_Load(object sender, EventArgs e) private void dlgTransitionReport_Load(object sender, EventArgs e)
{ {
if (folderInfo != null) if (folderInfo != null)
{ {
rpt = new PDFTransitionReport(folderInfo, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\TransitionReport.pdf"); rpt = new PDFTransitionReport(folderInfo, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\TransitionReport.pdf")
rpt.MyDocVersionList = lstDocVersions; {
if (lstDocVersions.Count == 1) MyDocVersionList = lstDocVersions
};
if (lstDocVersions.Count == 1)
pbProcs.Maximum = lstDocVersions[0].Procedures.Count; pbProcs.Maximum = lstDocVersions[0].Procedures.Count;
else else
pbVersions.Maximum = lstDocVersions.Count; pbVersions.Maximum = lstDocVersions.Count;
@@ -54,8 +52,8 @@ namespace VEPROMS
if (VlnSettings.GetCommandFlag("PROFILE")) ProfileTimer.TurnOnTracking("Profile.txt"); if (VlnSettings.GetCommandFlag("PROFILE")) ProfileTimer.TurnOnTracking("Profile.txt");
VEPROMS.CSLA.Library.Database.TrackDBUsage = VlnSettings.GetCommandFlag("DBTrack"); VEPROMS.CSLA.Library.Database.TrackDBUsage = VlnSettings.GetCommandFlag("DBTrack");
ProfileTimer.Reset(); ProfileTimer.Reset();
int profileDepth = ProfileTimer.Push(">>>> transitionreport"); _ = ProfileTimer.Push(">>>> transitionreport");
rpt = new PDFTransitionReport(procedureInfo, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\TransitionReport.pdf"); rpt = new PDFTransitionReport(procedureInfo, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\TransitionReport.pdf");
pbTrans.Maximum = rpt.TransitionInfoCount; pbTrans.Maximum = rpt.TransitionInfoCount;
tmrReportStart.Enabled = true; tmrReportStart.Enabled = true;
} }
@@ -131,7 +129,7 @@ namespace VEPROMS
{ {
tmrReportFinish.Enabled = false; tmrReportFinish.Enabled = false;
System.Diagnostics.Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\TransitionReport.pdf"); System.Diagnostics.Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\TransitionReport.pdf");
this.Close(); Close();
} }
} }
} }
@@ -1,32 +1,22 @@
using System; using System;
using System.Collections.Generic; 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.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using Volian.Base.Library;
//using Volian.Pipe.Library;
using System.Xml;
using System.Diagnostics;
using JR.Utils.GUI.Forms;
namespace VEPROMS namespace VEPROMS
{ {
public partial class frmAnnotationsCleanup : Form public partial class frmAnnotationsCleanup : Form
{ {
Label mylab = new Label();
string procList = ""; string procList = "";
string docvList = ""; string docvList = "";
int AnnotationTyp; int AnnotationTyp;
string AnnotationName = ""; string AnnotationName = "";
string totalDeleteCnt = ""; string totalDeleteCnt = "";
List<ProcedureInfo> pil2 = new List<ProcedureInfo>(); [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
List<DocVersionInfo> dvil2 = new List<DocVersionInfo>(); List<ProcedureInfo> pil2 = new List<ProcedureInfo>();
private frmBatchRefresh mainForm = null; [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
List<DocVersionInfo> dvil2 = new List<DocVersionInfo>();
private readonly frmBatchRefresh mainForm = null;
// frmAnnotationsCleanup constructor passes users procedure and docversion selections from frmBatchRefresh // frmAnnotationsCleanup constructor passes users procedure and docversion selections from frmBatchRefresh
public frmAnnotationsCleanup(Form callingForm, List<ProcedureInfo> pil, List<DocVersionInfo> dvil) public frmAnnotationsCleanup(Form callingForm, List<ProcedureInfo> pil, List<DocVersionInfo> dvil)
@@ -47,7 +37,6 @@ namespace VEPROMS
foreach (LocalAnnotationTypeInfo lati in myLocalAnnotationTypeInfoList) foreach (LocalAnnotationTypeInfo lati in myLocalAnnotationTypeInfoList)
{ {
AnnotationsList.Add(lati.TypeID.ToString(), lati.Name); AnnotationsList.Add(lati.TypeID.ToString(), lati.Name);
//cbAnnotationTypes.Items.Add(new { Name = lati.Name, Value = lati.TypeID });
} }
lbAnnotationTypes.DataSource = new BindingSource(AnnotationsList, null); lbAnnotationTypes.DataSource = new BindingSource(AnnotationsList, null);
@@ -67,11 +56,11 @@ namespace VEPROMS
{ {
if (procList == "") if (procList == "")
{ {
procList = procList + p.ItemID.ToString(); procList += p.ItemID.ToString();
} }
else else
{ {
procList = procList + "," + p.ItemID.ToString(); procList = $"{procList},{p.ItemID}";
} }
} }
} }
@@ -88,19 +77,20 @@ namespace VEPROMS
{ {
if (docvList == "") if (docvList == "")
{ {
docvList = docvList + d.VersionID.ToString(); docvList += d.VersionID.ToString();
} }
else else
{ {
docvList = docvList + "," + d.VersionID.ToString(); docvList = $"{docvList},{d.VersionID}";
} }
} }
} }
return docvList; return docvList;
} }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private AnnotationTypeInfoList myAnnotationTypeInfoList = null; private AnnotationTypeInfoList myAnnotationTypeInfoList = null;
private LocalAnnotationTypeInfoList myLocalAnnotationTypeInfoList = null; [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private LocalAnnotationTypeInfoList myLocalAnnotationTypeInfoList = null;
// Process used to cleanup annotations "(Proceed?" button) // Process used to cleanup annotations "(Proceed?" button)
private void button1_Click(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e)
@@ -112,21 +102,15 @@ namespace VEPROMS
TextBox frm3 = mainForm.GettxtResults(); TextBox frm3 = mainForm.GettxtResults();
AnnotationTyp = System.Convert.ToInt32(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Key); AnnotationTyp = System.Convert.ToInt32(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Key);
AnnotationName = System.Convert.ToString(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Value); AnnotationName = System.Convert.ToString(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Value);
frm3.AppendText("Deleting Annotations: Annotation Type: " + '"' + AnnotationName + '"'); frm3.AppendText($"Deleting Annotations: Annotation Type: \"{AnnotationName}\"");
frm3.AppendText(Environment.NewLine + "P = Procedure, F = Folder" + Environment.NewLine); frm3.AppendText($"{Environment.NewLine}P = Procedure, F = Folder{Environment.NewLine}");
int deletecountProc = 0; foreach (var p in pil2)
int deletecountDocv = 0;
foreach (var p in pil2)
{ {
if (p.IsProcedure) if (p.IsProcedure)
{ {
//AnnotationTyp = System.Convert.ToInt32(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Key); int deletecountProc = Annotation.getAnnotationProcCnt(AnnotationTyp, p.ItemID.ToString());
//AnnotationName = System.Convert.ToString(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Value); frm2.AppendText($"{Environment.NewLine}{p.DisplayNumber} {p.DisplayText}");
//deletecountProc = Annotation.getAnnotationProcCnt(AnnotationTyp, getAnnotationProcItems(p)); frm3.AppendText($"{Environment.NewLine}P: {p.DisplayNumber}\"{p.DisplayText}\" Delete count: {deletecountProc}");
deletecountProc = Annotation.getAnnotationProcCnt(AnnotationTyp, p.ItemID.ToString());
frm2.AppendText(Environment.NewLine + p.DisplayNumber + ' ' + p.DisplayText);
//frm3.AppendText(Environment.NewLine + "P: " + p.DisplayNumber + '"' + p.DisplayText + '"' + " Type: " + '"' + AnnotationName + '"' + " count: " + deletecountProc);
frm3.AppendText(Environment.NewLine + "P: " + p.DisplayNumber + '"' + p.DisplayText + '"' + " Delete count: " + deletecountProc);
Annotation.DeleteAnnotationProcByType(AnnotationTyp, p.ItemID.ToString()); Annotation.DeleteAnnotationProcByType(AnnotationTyp, p.ItemID.ToString());
lblCountNumber.Text = "0"; lblCountNumber.Text = "0";
} }
@@ -136,18 +120,16 @@ namespace VEPROMS
{ {
if (d.IsDocVersion) if (d.IsDocVersion)
{ {
//AnnotationTyp = System.Convert.ToInt32(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Key); int deletecountDocv = Annotation.getAnnotationCountDocv(AnnotationTyp, d.VersionID.ToString());
//AnnotationName = System.Convert.ToString(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Value); frm2.AppendText(Environment.NewLine + d.ActiveParent.ToString());
deletecountDocv = Annotation.getAnnotationCountDocv(AnnotationTyp, d.VersionID.ToString()); frm3.AppendText($"{Environment.NewLine}F: \"{d.ActiveParent.ToString()}\" Delete count: {deletecountDocv}");
frm2.AppendText(Environment.NewLine + d.ActiveParent.ToString());
frm3.AppendText(Environment.NewLine + "F: " + '"' + d.ActiveParent.ToString() + '"' + " Delete count: " + deletecountDocv);
AnnotationTyp = System.Convert.ToInt32(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Key); AnnotationTyp = System.Convert.ToInt32(((KeyValuePair<string, string>)lbAnnotationTypes.SelectedItem).Key);
Annotation.DeleteAnnotationDocvByType(AnnotationTyp, d.VersionID.ToString()); Annotation.DeleteAnnotationDocvByType(AnnotationTyp, d.VersionID.ToString());
lblCountNumber.Text = "0"; lblCountNumber.Text = "0";
} }
} }
frm3.AppendText(Environment.NewLine + Environment.NewLine + "Total Annotations Deleted: " + totalDeleteCnt + Environment.NewLine + Environment.NewLine); frm3.AppendText($"{Environment.NewLine}{Environment.NewLine}Total Annotations Deleted: {totalDeleteCnt}{Environment.NewLine}{Environment.NewLine}");
} }
} }
@@ -178,13 +160,10 @@ namespace VEPROMS
} }
} }
// Close form. // Close form.
private void btnClose_Click(object sender, EventArgs e) private void btnClose_Click(object sender, EventArgs e) => Close();
{
this.Close();
}
} }
} }
+136 -152
View File
@@ -15,28 +15,23 @@ namespace VEPROMS
{ {
public partial class frmBatchRefresh : Form public partial class frmBatchRefresh : Form
{ {
private SessionInfo _MySessionInfo; public SessionInfo MySessionInfo { get; set; }
public SessionInfo MySessionInfo private readonly bool IsAdministratorUser = false; //C2020-035 used to control what Set Amins can do
{
get { return _MySessionInfo; }
set { _MySessionInfo = value; }
}
private bool IsAdministratorUser = false; //C2020-035 used to control what Set Amins can do
// C2017-030 - new Admin Tools user interface // C2017-030 - new Admin Tools user interface
// pass in session info to constructor // pass in session info to constructor
private frmVEPROMS _veProms; private readonly frmVEPROMS _veProms;
public frmBatchRefresh(SessionInfo sessionInfo, frmVEPROMS veProms) public frmBatchRefresh(SessionInfo sessionInfo, frmVEPROMS veProms)
{ {
InitializeComponent(); InitializeComponent();
_MySessionInfo = sessionInfo; MySessionInfo = sessionInfo;
_veProms = veProms; _veProms = veProms;
// When opening Admin tools Repair tab will be default. // When opening Admin tools Repair tab will be default.
this.sideNavItmRepair.Checked = true; sideNavItmRepair.Checked = true;
if (sideNavItmDelete.Checked) if (sideNavItmDelete.Checked)
{ {
@@ -73,28 +68,22 @@ namespace VEPROMS
//default to 10 years back //default to 10 years back
dtePurge.Value = DateTime.Now.AddYears(-10); dtePurge.Value = DateTime.Now.AddYears(-10);
} }
// Make txtProcess text box available to frmAnnotationsClean form. // Make txtProcess text box available to frmAnnotationsClean form.
internal TextBox GettxtProcess() internal TextBox GettxtProcess() => txtProcess;
// Make txtResults text box available to frmAnnotationsClean form.
internal TextBox GettxtResults() => txtResults;
// NOTE: removed the Refresh ROs and Refresh Transitions and ROs options (now only Transitions can be refreshed)
// the Update ROs and Refresh ROs logic was merged together. The Update ROs will functionally do both
// also annotations will be placed on step elements that have RO changes
// make all of the hyphen character consistant so they can all be found with the Search function
private void FixHyphens()
{ {
return txtProcess; Cursor = Cursors.WaitCursor;
}
// Make txtResults text box available to frmAnnotationsClean form.
internal TextBox GettxtResults()
{
return txtResults;
}
// NOTE: removed the Refresh ROs and Refresh Transitions and ROs options (now only Transitions can be refreshed)
// the Update ROs and Refresh ROs logic was merged together. The Update ROs will functionally do both
// also annotations will be placed on step elements that have RO changes
// make all of the hyphen character consistant so they can all be found with the Search function
private void FixHyphens()
{
this.Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Standardizing Hyphens"); txtProcess.AppendText("Standardizing Hyphens");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -112,29 +101,26 @@ namespace VEPROMS
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
private Dictionary<TreeNode, ProcedureInfo> myProcedures = new Dictionary<TreeNode, ProcedureInfo>(); [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private Dictionary<TreeNode, DocVersionInfo> myDocVersions = new Dictionary<TreeNode, DocVersionInfo>(); private Dictionary<TreeNode, ProcedureInfo> myProcedures = new Dictionary<TreeNode, ProcedureInfo>();
private Dictionary<TreeNode, FolderInfo> myFolders = new Dictionary<TreeNode, FolderInfo>(); [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private Dictionary<TreeNode, DocVersionInfo> myDocVersions = new Dictionary<TreeNode, DocVersionInfo>();
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Keeping Collections Not ReadOnly")]
private Dictionary<TreeNode, FolderInfo> myFolders = new Dictionary<TreeNode, FolderInfo>();
private void frmBatchRefresh_Load(object sender, EventArgs e) private void frmBatchRefresh_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.
IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process. private void frmBatchRefresh_FormClosing(object sender, EventArgs e) => IsClosing = true;//B2017-221 Allow the batch dialog to close when waiting to process.
} // C2017-030 - new Admin Tools user interface
private bool IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process. // check to see if at least one tree node is checked.
private void frmBatchRefresh_FormClosing(object sender, EventArgs e) // Used to determin whether to make the process button active for
{ // Refresh Transitions and for Update RO Values
IsClosing = true;//B2017-221 Allow the batch dialog to close when waiting to process. // B2025-013 Admin Tool Tree Behavior
} //Made this generic so same logic for all the TreeViews on this form
// C2017-030 - new Admin Tools user interface private bool AtLeastOneNodeChecked(TreeNodeCollection col)
// check to see if at least one tree node is checked.
// Used to determin whether to make the process button active for
// Refresh Transitions and for Update RO Values
// B2025-013 Admin Tool Tree Behavior
//Made this generic so same logic for all the TreeViews on this form
private bool AtLeastOneNodeChecked(TreeNodeCollection col)
{ {
foreach (TreeNode tn in col) foreach (TreeNode tn in col)
if (NodeIsChecked(tn)) if (NodeIsChecked(tn))
@@ -154,7 +140,7 @@ namespace VEPROMS
//C2026-002 Enhancements to new admin Tool for ROs not used. //C2026-002 Enhancements to new admin Tool for ROs not used.
private void ResetmyTV_RO_DBs() private void ResetmyTV_RO_DBs()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
myTV_RO_DBs.Nodes.Clear(); myTV_RO_DBs.Nodes.Clear();
TreeNode tn = myTV_RO_DBs.Nodes.Add("Select All"); TreeNode tn = myTV_RO_DBs.Nodes.Add("Select All");
@@ -169,13 +155,13 @@ namespace VEPROMS
} }
tn.Expand(); tn.Expand();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
private void ResetTV(bool noProcs) private void ResetTV(bool noProcs)
{ {
btnFixLinks.Enabled = false; btnFixLinks.Enabled = false;
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
myTV.Nodes.Clear(); myTV.Nodes.Clear();
myDocVersions.Clear(); myDocVersions.Clear();
myFolders.Clear(); myFolders.Clear();
@@ -184,14 +170,13 @@ namespace VEPROMS
tn.Tag = fi; tn.Tag = fi;
if (fi.ChildFolderCount > 0) if (fi.ChildFolderCount > 0)
LoadChildFolders(fi, tn, noProcs); LoadChildFolders(fi, tn, noProcs);
if (myTV.SelectedNode != null) myTV.SelectedNode?.Expand();
myTV.SelectedNode.Expand(); Cursor = Cursors.Default;
this.Cursor = Cursors.Default;
} }
private void ResetDelTV(bool noProcs) private void ResetDelTV(bool noProcs)
{ {
btnFixLinks.Enabled = false; btnFixLinks.Enabled = false;
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
myTVdel.Nodes.Clear(); myTVdel.Nodes.Clear();
myDocVersions.Clear(); myDocVersions.Clear();
FolderInfo fi = FolderInfo.GetTop(); FolderInfo fi = FolderInfo.GetTop();
@@ -200,21 +185,22 @@ namespace VEPROMS
if (fi.ChildFolderCount > 0) if (fi.ChildFolderCount > 0)
{ {
TreeNode tn = new TreeNode(fi.Name); TreeNode tn = new TreeNode(fi.Name)
tn.Tag = fi; {
tn.StateImageIndex = -1; // Hide the checkbox for the root node Tag = fi,
LoadChildFolders(fi, tn, noProcs); StateImageIndex = -1 // Hide the checkbox for the root node
};
LoadChildFolders(fi, tn, noProcs);
myTVdel.Nodes.Add(tn); myTVdel.Nodes.Add(tn);
} }
if (myTVdel.SelectedNode != null) myTVdel.SelectedNode?.Expand();
myTVdel.SelectedNode.Expand();
//Expand if folders //Expand if folders
if (noProcs) if (noProcs)
myTVdel.ExpandAll(); myTVdel.ExpandAll();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// B2021-060 Higher level folders where being removed from the tree even if there was a child folder that containe a working draft set // B2021-060 Higher level folders where being removed from the tree even if there was a child folder that containe a working draft set
@@ -304,7 +290,7 @@ namespace VEPROMS
private void UpdateROValues() private void UpdateROValues()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
List<ProcedureInfo> pil = new List<ProcedureInfo>(); // C2023-002: list of checked out procedures, used in frmBatchRefreshCheckedOut dialog List<ProcedureInfo> pil = new List<ProcedureInfo>(); // C2023-002: list of checked out procedures, used in frmBatchRefreshCheckedOut dialog
List<DocVersionInfo> dvil = new List<DocVersionInfo>(); List<DocVersionInfo> dvil = new List<DocVersionInfo>();
foreach (TreeNode tn in myDocVersions.Keys) foreach (TreeNode tn in myDocVersions.Keys)
@@ -377,14 +363,16 @@ namespace VEPROMS
sb.AppendLine("Once this is complete you can continue the process otherwise you may terminate the process immediately."); sb.AppendLine("Once this is complete you can continue the process otherwise you may terminate the process immediately.");
sb.AppendLine(); sb.AppendLine();
sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?"); sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?");
frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut(1); frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut(1)
frmCO.MySessionInfo = MySessionInfo; {
frmCO.CheckedOutProcedures = pil; // C2023-002: set list of checked out procedures MySessionInfo = MySessionInfo,
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height); CheckedOutProcedures = pil // C2023-002: set list of checked out procedures
};
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height);
// C2023-002: Allow close of dialog that has list of procedures that are checked out // C2023-002: Allow close of dialog that has list of procedures that are checked out
if (frmCO.ShowDialog(this) != DialogResult.Cancel) if (frmCO.ShowDialog(this) != DialogResult.Cancel)
{ {
while (!this.Visible) while (!Visible)
Application.DoEvents(); Application.DoEvents();
} }
else else
@@ -400,7 +388,7 @@ namespace VEPROMS
txtProcess.AppendText(string.Format("Could Not Complete: {0} {1} Seconds Elapsed", pEnd.ToString("MM/dd/yyyy @ HH:mm"), TimeSpan.FromTicks(pEnd.Ticks - pStart.Ticks).TotalSeconds)); txtProcess.AppendText(string.Format("Could Not Complete: {0} {1} Seconds Elapsed", pEnd.ToString("MM/dd/yyyy @ HH:mm"), TimeSpan.FromTicks(pEnd.Ticks - pStart.Ticks).TotalSeconds));
pbProcess.Value = pbProcess.Maximum; pbProcess.Value = pbProcess.Maximum;
} }
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
//C2025-011 RO Update Admin Tool Memory Enhancements //C2025-011 RO Update Admin Tool Memory Enhancements
@@ -425,7 +413,7 @@ namespace VEPROMS
private void CheckROLinks() private void CheckROLinks()
{ {
bool badLinksFound = false; bool badLinksFound = false;
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
List<ProcedureInfo> pil = new List<ProcedureInfo>(); List<ProcedureInfo> pil = new List<ProcedureInfo>();
// populate a list of procedures that the user selected to process // populate a list of procedures that the user selected to process
foreach (TreeNode tn in myProcedures.Keys) foreach (TreeNode tn in myProcedures.Keys)
@@ -500,15 +488,17 @@ namespace VEPROMS
if (piq.Count > 0) if (piq.Count > 0)
{ {
frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut(0); frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut(0)
frmCO.MySessionInfo = MySessionInfo; {
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height); MySessionInfo = MySessionInfo
};
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height);
frmCO.Show(this); frmCO.Show(this);
while (!this.Visible) while (!Visible)
Application.DoEvents(); Application.DoEvents();
} }
} }
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// B2018-002 - Invalid Transitions - Define Transition Refresh Statistics // B2018-002 - Invalid Transitions - Define Transition Refresh Statistics
@@ -528,7 +518,7 @@ namespace VEPROMS
{ {
// B2018-002 - Invalid Transitions - Initialize Transition Refresh Statistics // B2018-002 - Invalid Transitions - Initialize Transition Refresh Statistics
ResetTransNumbers(); ResetTransNumbers();
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
List<ProcedureInfo> pil = new List<ProcedureInfo>(); List<ProcedureInfo> pil = new List<ProcedureInfo>();
foreach (TreeNode tn in myProcedures.Keys) foreach (TreeNode tn in myProcedures.Keys)
if (tn.Checked) if (tn.Checked)
@@ -606,16 +596,18 @@ namespace VEPROMS
sb.AppendLine("Once this is complete you can continue the process otherwise you may terminate the process immediately."); sb.AppendLine("Once this is complete you can continue the process otherwise you may terminate the process immediately.");
sb.AppendLine(); sb.AppendLine();
sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?"); sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?");
frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut(0); frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut(0)
frmCO.MySessionInfo = MySessionInfo; {
frmCO.CheckedOutProcedures = pil; MySessionInfo = MySessionInfo,
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height); CheckedOutProcedures = pil
};
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height);
frmCO.Show(this); frmCO.Show(this);
while (!this.Visible) while (!Visible)
Application.DoEvents(); Application.DoEvents();
} }
} }
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
// B2018-002 - Invalid Transitions - Display Transition Refresh Statistic // B2018-002 - Invalid Transitions - Display Transition Refresh Statistic
if (numTransFixed == 0 && numTransConverted == 0 && numTransCantFix == 0) if (numTransFixed == 0 && numTransConverted == 0 && numTransCantFix == 0)
MessageBox.Show(string.Format("{0} Transitions Checked.\n\nNo Transitions Modified.", numTransProcessed), "Refresh Transitions Completed"); MessageBox.Show(string.Format("{0} Transitions Checked.\n\nNo Transitions Modified.", numTransProcessed), "Refresh Transitions Completed");
@@ -629,7 +621,7 @@ namespace VEPROMS
// the next time the procedures are printed. This also forces ROs to be refreshed in the attachments // the next time the procedures are printed. This also forces ROs to be refreshed in the attachments
private void DeletePDFs() private void DeletePDFs()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Refreshing Word Attachments"); txtProcess.AppendText("Refreshing Word Attachments");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -647,7 +639,7 @@ namespace VEPROMS
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
private int RegenCounter = 0; private int RegenCounter = 0;
@@ -659,7 +651,7 @@ namespace VEPROMS
// so that this is not needed the next time the procedures are printed. This also forces ROs to be refreshed in the attachments // so that this is not needed the next time the procedures are printed. This also forces ROs to be refreshed in the attachments
private void RegenPDFs() private void RegenPDFs()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Generating missing Word Attachments"); txtProcess.AppendText("Generating missing Word Attachments");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -737,7 +729,7 @@ namespace VEPROMS
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
//Outputs the Progress of Regenerating the PDFs every __ minutes //Outputs the Progress of Regenerating the PDFs every __ minutes
@@ -756,7 +748,7 @@ namespace VEPROMS
// rerun until all tables/text fields are completed. // rerun until all tables/text fields are completed.
private void RefreshTablesForSearch() private void RefreshTablesForSearch()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Refreshing Tables for Search"); txtProcess.AppendText("Refreshing Tables for Search");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -783,7 +775,7 @@ namespace VEPROMS
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
private int RefreshForSearch() private int RefreshForSearch()
{ {
@@ -824,7 +816,7 @@ namespace VEPROMS
} }
catch catch
{ {
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
return -cntfix; return -cntfix;
} }
} }
@@ -839,7 +831,7 @@ namespace VEPROMS
// tool renamed to Remove Orphan Items // tool renamed to Remove Orphan Items
private void PurgeDisconnectedItems() private void PurgeDisconnectedItems()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Purging Orphan Items"); txtProcess.AppendText("Purging Orphan Items");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -881,13 +873,13 @@ namespace VEPROMS
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// C2017-030 - new Admin Tools user interface is one of two tools run from Remove Obsolete RO Data // C2017-030 - new Admin Tools user interface is one of two tools run from Remove Obsolete RO Data
private void RemoveUnusedRoFstsAndFigures() private void RemoveUnusedRoFstsAndFigures()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Purging Unused RoFSTs and Figures Items"); txtProcess.AppendText("Purging Unused RoFSTs and Figures Items");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -936,14 +928,14 @@ namespace VEPROMS
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// C2017-030 - new Admin Tools user interface // C2017-030 - new Admin Tools user interface
// is one of two tools run from Remove Obsolete RO Data // is one of two tools run from Remove Obsolete RO Data
private void CleanUpROAssociations() private void CleanUpROAssociations()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Purging Unused Referenced Object Associations"); txtProcess.AppendText("Purging Unused Referenced Object Associations");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -985,14 +977,14 @@ namespace VEPROMS
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// C2017-030 - new Admin Tools user interface // C2017-030 - new Admin Tools user interface
// tool was renamed to Show Users // tool was renamed to Show Users
private void GetDatabaseSessions() private void GetDatabaseSessions()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Show Users in PROMS"); txtProcess.AppendText("Show Users in PROMS");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -1004,7 +996,7 @@ namespace VEPROMS
DateTime pEnd = DateTime.Now; DateTime pEnd = DateTime.Now;
txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm")));
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
MessageBox.Show("Show Users Completed", "Show Users"); MessageBox.Show("Show Users Completed", "Show Users");
} }
@@ -1046,10 +1038,10 @@ namespace VEPROMS
FinalProgressBarMessage = "No existing RO.FST"; FinalProgressBarMessage = "No existing RO.FST";
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText("No existing ro.fst in path " + roFstInfo.MyRODb.FolderPath + ". Check for invalid path"); txtProcess.AppendText($"No existing ro.fst in path {roFstInfo.MyRODb.FolderPath}. Check for invalid path");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtResults.AppendText("No existing ro.fst in path " + roFstInfo.MyRODb.FolderPath + ". Check for invalid path"); txtResults.AppendText($"No existing ro.fst in path {roFstInfo.MyRODb.FolderPath}. Check for invalid path");
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
return; return;
@@ -1123,15 +1115,12 @@ namespace VEPROMS
} }
StringBuilder myFixes; StringBuilder myFixes;
int myFixesCount = 0;
int myConvertCount = 0;
// show the changes made in the Results pannel, include the ItemId of the step element // show the changes made in the Results pannel, include the ItemId of the step element
void ContentInfo_StaticContentInfoChange(object sender, StaticContentInfoEventArgs args) void ContentInfo_StaticContentInfoChange(object sender, StaticContentInfoEventArgs args)
{ {
if (args.Type == "TX") if (args.Type == "TX")
{ {
myFixesCount++;
if (args.NewValue.StartsWith("Reason for Change:")) if (args.NewValue.StartsWith("Reason for Change:"))
myFixes.AppendLine(string.Format("Fixed Transition for {1}({4}){0}Old Text: {2}{0}{3}{0}", Environment.NewLine, (sender as ItemInfo).ShortPath, args.OldValue, args.NewValue, (sender as ItemInfo).ItemID)); myFixes.AppendLine(string.Format("Fixed Transition for {1}({4}){0}Old Text: {2}{0}{3}{0}", Environment.NewLine, (sender as ItemInfo).ShortPath, args.OldValue, args.NewValue, (sender as ItemInfo).ItemID));
else else
@@ -1155,13 +1144,15 @@ namespace VEPROMS
private void btnSave_Click(object sender, EventArgs e) private void btnSave_Click(object sender, EventArgs e)
{ {
SaveFileDialog sfd = new SaveFileDialog(); SaveFileDialog sfd = new SaveFileDialog
sfd.DefaultExt = "txt"; {
sfd.AddExtension = true; DefaultExt = "txt",
sfd.Filter = "Text Files (*.txt)|*.txt"; AddExtension = true,
sfd.FileName = string.Format("BatchRefreshResults_{0}", DateTime.Now.ToString("yyyyMMdd_HHmm")); Filter = "Text Files (*.txt)|*.txt",
sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS"; FileName = string.Format("BatchRefreshResults_{0}", DateTime.Now.ToString("yyyyMMdd_HHmm")),
DialogResult dr = sfd.ShowDialog(); InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS"
};
DialogResult dr = sfd.ShowDialog();
if (dr == DialogResult.OK) if (dr == DialogResult.OK)
{ {
@@ -1186,7 +1177,7 @@ namespace VEPROMS
{ {
//Purge Change History //Purge Change History
string statmsg = $"Purging all Change History before {dtePurge.Value.Date.ToString("MM/dd/yyyy")}"; string statmsg = $"Purging all Change History before {dtePurge.Value.Date:MM/dd/yyyy}";
InitialProgressBarMessage = statmsg; InitialProgressBarMessage = statmsg;
txtResults.AppendText(statmsg); txtResults.AppendText(statmsg);
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
@@ -1194,7 +1185,7 @@ namespace VEPROMS
Maintenance.PurgeChangeHistory(dtePurge.Value); Maintenance.PurgeChangeHistory(dtePurge.Value);
//update status //update status
statmsg = $"Finished Purging all Change History before {dtePurge.Value.Date.ToString("MM/dd/yyyy")}. Updating indexes to reflect cleaned data."; statmsg = $"Finished Purging all Change History before {dtePurge.Value.Date:MM/dd/yyyy}. Updating indexes to reflect cleaned data.";
DoProgressBarRefresh(50, 100, statmsg); DoProgressBarRefresh(50, 100, statmsg);
txtProcess.AppendText(statmsg); txtProcess.AppendText(statmsg);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
@@ -1380,14 +1371,11 @@ namespace VEPROMS
ResetTV(false); ResetTV(false);
} }
// C2017-030 new Admin Tools user interface // C2017-030 new Admin Tools user interface
private void sideNavItmExit_Click(object sender, EventArgs e) private void sideNavItmExit_Click(object sender, EventArgs e) => Close();
{
this.Close();
}
// new Admin Tools user interface for deletes // new Admin Tools user interface for deletes
private void sideNavItmDelete_Click(object sender, EventArgs e) private void sideNavItmDelete_Click(object sender, EventArgs e)
{ {
AdminToolType = E_AdminToolType.Delete; AdminToolType = E_AdminToolType.Delete;
lblAdmToolProgressType.Text = ""; lblAdmToolProgressType.Text = "";
@@ -1426,12 +1414,12 @@ namespace VEPROMS
}; };
private E_AdminToolType AdminToolType = E_AdminToolType.Repair; private E_AdminToolType AdminToolType = E_AdminToolType.Repair;
DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records"); readonly DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records");
DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data"); readonly DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data");
DevComponents.DotNetBar.StepItem siStandardHyphens = new DevComponents.DotNetBar.StepItem("siStandardHyphens", "Standardize Hyphens"); readonly DevComponents.DotNetBar.StepItem siStandardHyphens = new DevComponents.DotNetBar.StepItem("siStandardHyphens", "Standardize Hyphens");
DevComponents.DotNetBar.StepItem siRefreshAttmts = new DevComponents.DotNetBar.StepItem("siRefreshAttmts", "Refresh Word Attachments"); readonly DevComponents.DotNetBar.StepItem siRefreshAttmts = new DevComponents.DotNetBar.StepItem("siRefreshAttmts", "Refresh Word Attachments");
DevComponents.DotNetBar.StepItem siRegenAttmts = new DevComponents.DotNetBar.StepItem("siRegenAttmts", "Regenerate Word Attachments"); readonly DevComponents.DotNetBar.StepItem siRegenAttmts = new DevComponents.DotNetBar.StepItem("siRegenAttmts", "Regenerate Word Attachments");
DevComponents.DotNetBar.StepItem siRefreshTblsSrchTxt = new DevComponents.DotNetBar.StepItem("siRefreshTblsSrchTxt", "Refresh Tables For Search"); readonly DevComponents.DotNetBar.StepItem siRefreshTblsSrchTxt = new DevComponents.DotNetBar.StepItem("siRefreshTblsSrchTxt", "Refresh Tables For Search");
// this will update/rebuild the progress bar in the bottom panel of Admin Tools // this will update/rebuild the progress bar in the bottom panel of Admin Tools
private void setupProgessSteps1() private void setupProgessSteps1()
{ {
@@ -1483,13 +1471,10 @@ namespace VEPROMS
} }
} }
// used for all of the Switch buttons (ON/OFF buttons) // used for all of the Switch buttons (ON/OFF buttons)
private void swCk_ValueChanged(object sender, EventArgs e) private void swCk_ValueChanged(object sender, EventArgs e) => setupProgessSteps1();
{
setupProgessSteps1();
}
private void swUpdateROVals_ValueChanged(object sender, EventArgs e) private void swUpdateROVals_ValueChanged(object sender, EventArgs e)
{ {
if (swUpdateROVals.Value) if (swUpdateROVals.Value)
{ {
@@ -1509,16 +1494,13 @@ namespace VEPROMS
} }
} }
#endregion #endregion
// C2017-030 New Admin Tools user interface // C2017-030 New Admin Tools user interface
// functions to handle the progress bar in the bottom panel of Admin Tools // functions to handle the progress bar in the bottom panel of Admin Tools
private void StepProgress(int prgStpIdx, int val) private void StepProgress(int prgStpIdx, int val) => ((DevComponents.DotNetBar.StepItem)progressSteps1.Items[prgStpIdx]).Value = val;
{
((DevComponents.DotNetBar.StepItem)progressSteps1.Items[prgStpIdx]).Value = val;
}
private void ClearStepProgress() private void ClearStepProgress()
{ {
for (int i = 0; i < progressSteps1.Items.Count; i++) for (int i = 0; i < progressSteps1.Items.Count; i++)
{ {
@@ -1673,7 +1655,7 @@ namespace VEPROMS
txtResults.Clear(); txtResults.Clear();
txtProcess.Clear(); txtProcess.Clear();
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
//Create checked proce and doc info lists. //Create checked proce and doc info lists.
List<ProcedureInfo> pil = new List<ProcedureInfo>(); List<ProcedureInfo> pil = new List<ProcedureInfo>();
@@ -1756,7 +1738,7 @@ namespace VEPROMS
sb.AppendLine("If you want to delete annotations from these working drafts, please contact the respective users and have them close any procedures in the working draft."); sb.AppendLine("If you want to delete annotations from these working drafts, please contact the respective users and have them close any procedures in the working draft.");
sb.AppendLine(); sb.AppendLine();
txtProcess.AppendText(sb.ToString()); txtProcess.AppendText(sb.ToString());
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
return; return;
} }
@@ -1790,7 +1772,7 @@ namespace VEPROMS
} }
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
private void ProcessDelete(List<DocVersionInfo> foldersToDelete, List<FolderInfo> emptyFoldersToDelete) private void ProcessDelete(List<DocVersionInfo> foldersToDelete, List<FolderInfo> emptyFoldersToDelete)
@@ -1952,14 +1934,16 @@ namespace VEPROMS
//CSM - C2025-043 report RO's that are not used in any of the PROMS data. //CSM - C2025-043 report RO's that are not used in any of the PROMS data.
private void btnROsNotUsed_Click(object sender, EventArgs e) private void btnROsNotUsed_Click(object sender, EventArgs e)
{ {
//Get the path to save the Image to //Get the path to save the Image to
SaveFileDialog sfd = new SaveFileDialog(); SaveFileDialog sfd = new SaveFileDialog
sfd.DefaultExt = "bmp"; {
sfd.AddExtension = true; DefaultExt = "bmp",
sfd.Filter = "Image Files (*.bmp)|*.bmp"; AddExtension = true,
sfd.FileName = string.Format("ROsNotUsed_{0}", DateTime.Now.ToString("yyyyMMdd_HHmm")); Filter = "Image Files (*.bmp)|*.bmp",
sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS"; FileName = string.Format("ROsNotUsed_{0}", DateTime.Now.ToString("yyyyMMdd_HHmm")),
DialogResult dr = sfd.ShowDialog(); InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS"
};
DialogResult dr = sfd.ShowDialog();
if (dr == DialogResult.OK) if (dr == DialogResult.OK)
{ {
@@ -1,35 +1,18 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing; using System.Drawing;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using LBOutlookLibrary; using LBOutlookLibrary;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Net.Mail;
using System.Net;
using System.IO;
namespace VEPROMS namespace VEPROMS
{ {
public partial class frmBatchRefreshCheckedOut : Form public partial class frmBatchRefreshCheckedOut : Form
{ {
private SessionInfo _MySessionInfo; public SessionInfo MySessionInfo { get; set; }
public SessionInfo MySessionInfo public List<ProcedureInfo> CheckedOutProcedures { get; set; }
{ private readonly int RType = -1; // C2023-002: Flag type of checkout, docversion -1 or procedures 0
get { return _MySessionInfo; }
set { _MySessionInfo = value; }
}
private List<ProcedureInfo> _CheckedOutProcedures;
public List<ProcedureInfo> CheckedOutProcedures
{
get { return _CheckedOutProcedures; }
set { _CheckedOutProcedures = value; }
}
private int RType = -1; // C2023-002: Flag type of checkout, docversion -1 or procedures 0
public frmBatchRefreshCheckedOut(int type) public frmBatchRefreshCheckedOut(int type)
{ {
RType = type; RType = type;
@@ -53,32 +36,39 @@ namespace VEPROMS
} }
private void AddToDisplayList(ProcedureInfo pi) private void AddToDisplayList(ProcedureInfo pi)
{ {
Panel p = new Panel(); Panel p = new Panel
p.BorderStyle = BorderStyle.FixedSingle; {
p.Dock = DockStyle.Top; BorderStyle = BorderStyle.FixedSingle,
p.Height = 28; Dock = DockStyle.Top,
if (RType != 1) // C2023-002: only put out ForceCheckin & sendemail buttons if on procedures (can't check in a docversion) Height = 28
};
if (RType != 1) // C2023-002: only put out ForceCheckin & sendemail buttons if on procedures (can't check in a docversion)
{ {
Button b = new Button(); Button b = new Button
//b.FlatStyle = FlatStyle.Popup; {
b.Dock = DockStyle.Right; Dock = DockStyle.Right,
b.Text = "Force Check In"; Text = "Force Check In",
b.Tag = pi; Tag = pi
b.Click += new EventHandler(ForceCheckIn_Click); };
b.Click += new EventHandler(ForceCheckIn_Click);
p.Controls.Add(b); p.Controls.Add(b);
b = new Button(); b = new Button
//b.FlatStyle = FlatStyle.Popup; {
b.Dock = DockStyle.Right; //b.FlatStyle = FlatStyle.Popup;
b.Text = "Send Email"; Dock = DockStyle.Right,
b.Tag = pi; Text = "Send Email",
b.Click += new EventHandler(SendEmail_Click); Tag = pi
};
b.Click += new EventHandler(SendEmail_Click);
p.Controls.Add(b); p.Controls.Add(b);
} }
Label l = new Label(); Label l = new Label
l.Dock = DockStyle.Fill; {
l.TextAlign = ContentAlignment.MiddleLeft; Dock = DockStyle.Fill,
l.Text = string.Format("Procedure {0} is checked out to {1}", pi.DisplayNumber, UserInfo.GetByUserID(OwnerInfo.GetByItemID(pi.ItemID, CheckOutType.Procedure).SessionUserID).UserID); TextAlign = ContentAlignment.MiddleLeft,
p.Controls.Add(l); Text = $"Procedure {pi.DisplayNumber} is checked out to {UserInfo.GetByUserID(OwnerInfo.GetByItemID(pi.ItemID, CheckOutType.Procedure).SessionUserID).UserID}"
};
p.Controls.Add(l);
pnlList.Controls.Add(p); pnlList.Controls.Add(p);
p.BringToFront(); p.BringToFront();
pnlList.Focus(); pnlList.Focus();
@@ -103,15 +93,7 @@ namespace VEPROMS
private string BuildEmailMessageBody(ProcedureInfo pi) private string BuildEmailMessageBody(ProcedureInfo pi)
{ {
StringBuilder body = new StringBuilder(); StringBuilder body = new StringBuilder();
//body.AppendLine("THIS IS A TEST MESSAGE FROM JIM BODINE"); body.AppendLine($"The administrator needs you to check in procedure {pi.DisplayNumber} so the administrator can continue an administrative tool process");
//body.AppendLine();
body.AppendLine(string.Format("The administrator needs you to check in procedure {0} so the administrator can continue an administrative tool process", pi.DisplayNumber));
//body.AppendLine();
//body.AppendLine("Obviously, you do not really have this procedure checked out, so you really do not have to do anything.");
//body.AppendLine();
//body.AppendLine("However, I would appreciate it if you would reply to this email so I know the email worked");
//body.AppendLine();
//body.AppendLine("I will try NOT to overwhelm your email system :-)");
return body.ToString(); return body.ToString();
} }
void ForceCheckIn_Click(object sender, EventArgs e) void ForceCheckIn_Click(object sender, EventArgs e)
@@ -134,15 +116,7 @@ namespace VEPROMS
private string BuildForcedMessageBody(ProcedureInfo pi) private string BuildForcedMessageBody(ProcedureInfo pi)
{ {
StringBuilder body = new StringBuilder(); StringBuilder body = new StringBuilder();
//body.AppendLine("THIS IS A TEST MESSAGE FROM JIM BODINE"); body.AppendLine($"The administrator needed to force check in procedure {pi.DisplayNumber} so the administrator could continue an administrative tool process");
//body.AppendLine();
body.AppendLine(string.Format("The administrator needed to force check in procedure {0} so the administrator could continue an administrative tool process", pi.DisplayNumber));
//body.AppendLine();
//body.AppendLine("Obviously, you do not really have this procedure checked out, so nothing really got forced checked in.");
//body.AppendLine();
//body.AppendLine("However, I would appreciate it if you would reply to this email so I know the email worked");
//body.AppendLine();
//body.AppendLine("I will try NOT to overwhelm your email system :-)");
return body.ToString(); return body.ToString();
} }
private bool SendOutlookEmail(string email, string subject, string body) private bool SendOutlookEmail(string email, string subject, string body)
@@ -163,7 +137,7 @@ namespace VEPROMS
if (ex.Message.ToLower().Contains("failed due to the following error: 80080005")) if (ex.Message.ToLower().Contains("failed due to the following error: 80080005"))
MessageBox.Show("You cannot send email via a running instance of Outlook from VE PROMS running from within Visual Studio."); MessageBox.Show("You cannot send email via a running instance of Outlook from VE PROMS running from within Visual Studio.");
else else
MessageBox.Show(string.Format("{0} - {1}", ex.GetType().Name, ex.Message)); MessageBox.Show($"{ex.GetType().Name} - {ex.Message}");
return false; return false;
} }
} }
@@ -180,7 +154,7 @@ namespace VEPROMS
CheckedOutProcedures = tmp; CheckedOutProcedures = tmp;
if (CheckedOutProcedures.Count == 0) if (CheckedOutProcedures.Count == 0)
{ {
this.Close(); Close();
return; return;
} }
foreach (ProcedureInfo pi in CheckedOutProcedures) foreach (ProcedureInfo pi in CheckedOutProcedures)
File diff suppressed because it is too large. Load diff
+313 -180
View File
@@ -1,14 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using VEPROMS.CSLA.Library; using VEPROMS.CSLA.Library;
using System.IO;
using Volian.Controls.Library; using Volian.Controls.Library;
using DevComponents.DotNetBar; using DevComponents.DotNetBar;
using JR.Utils.GUI.Forms;
using System.Linq;
using System.Data; using System.Data;
using xls = Microsoft.Office.Interop.Excel; using xls = Microsoft.Office.Interop.Excel;
@@ -16,52 +11,42 @@ namespace VEPROMS
{ {
public partial class frmGenTools : Form public partial class frmGenTools : Form
{ {
private SessionInfo _MySessionInfo; public SessionInfo MySessionInfo { get; set; }
public SessionInfo MySessionInfo
{
get { return _MySessionInfo; }
set { _MySessionInfo = value; }
}
public frmGenTools(SessionInfo sessionInfo, frmVEPROMS veProms) [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "Keeping veProms for potential future use")]
public frmGenTools(SessionInfo sessionInfo, frmVEPROMS veProms)
{ {
InitializeComponent(); InitializeComponent();
_MySessionInfo = sessionInfo; MySessionInfo = sessionInfo;
// When opening General tools Check tab will be default. // When opening General tools Check tab will be default.
this.sideNavItmCheck.Checked = true; sideNavItmCheck.Checked = true;
setupProgessSteps1(); // C2017-030 - new Tools user interface setupProgessSteps1(); // C2017-030 - new Tools user interface
} }
private void frmGenTools_Load(object sender, EventArgs e) 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.
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.
}
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 // C2017-030 - new Tools user interface
// tool renamed to Identify Orphan Items // tool renamed to Identify Orphan Items
private void IdentifyDisconnectedItems() private void IdentifyDisconnectedItems()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Identifing Orphan Items"); txtProcess.AppendText("Identifing Orphan Items");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
int rowCount = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount"); int rowCount = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount");
txtProcess.AppendText(string.Format("Orphan Items Count: {0}", rowCount)); txtProcess.AppendText($"Orphan Items Count: {rowCount}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
if (rowCount > 0) if (rowCount > 0)
{ {
txtResults.AppendText(string.Format("The database contains {0} Orphan items.", rowCount)); txtResults.AppendText($"The database contains {rowCount} Orphan items.");
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
txtResults.AppendText("These can be removed via the Remove Orphan Data Records in the Repair tools"); txtResults.AppendText("These can be removed via the Remove Orphan Data Records in the Repair tools");
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
@@ -74,33 +59,33 @@ namespace VEPROMS
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
} }
DateTime pEnd = DateTime.Now; DateTime pEnd = DateTime.Now;
txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// C2017-030 - new Tools user interface // C2017-030 - new Tools user interface
// is one of two tools run from Check Obsolete RO Data // is one of two tools run from Check Obsolete RO Data
private void IdentifyUnusedRoFstsAndFigures() private void IdentifyUnusedRoFstsAndFigures()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Identifing Unused RoFsts and Figures"); txtProcess.AppendText("Identifing Unused RoFsts and Figures");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
int rowCountRoFst = ESP_GetUnusedRoFsts.Execute("vesp_GetUnusedRoFstsCount"); int rowCountRoFst = ESP_GetUnusedRoFsts.Execute("vesp_GetUnusedRoFstsCount");
int rowCountFigures = ESP_GetUnusedFigures.Execute("vesp_GetUnusedFiguresCount"); int rowCountFigures = ESP_GetUnusedFigures.Execute("vesp_GetUnusedFiguresCount");
txtProcess.AppendText(string.Format("Unused RoFsts Count: {0}, Unused Figures Count: {1}", rowCountRoFst, rowCountFigures)); txtProcess.AppendText($"Unused RoFsts Count: {rowCountRoFst}, Unused Figures Count: {rowCountFigures}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
if (rowCountRoFst > 0 || rowCountFigures > 0) if (rowCountRoFst > 0 || rowCountFigures > 0)
{ {
txtResults.AppendText(string.Format("The database contains {0} unused RoFsts.", rowCountRoFst)); txtResults.AppendText($"The database contains {rowCountRoFst} unused RoFsts.");
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
txtResults.AppendText(string.Format("The database contains {0} unused Figures items.", rowCountFigures)); txtResults.AppendText($"The database contains {rowCountFigures} unused Figures items.");
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
} }
@@ -112,31 +97,31 @@ namespace VEPROMS
} }
DateTime pEnd = DateTime.Now; DateTime pEnd = DateTime.Now;
txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// C2017-030 - new Tools user interface // C2017-030 - new Tools user interface
// is one of two tools run from Check Obsolete RO Data // is one of two tools run from Check Obsolete RO Data
private void IdentifyROAssociations() private void IdentifyROAssociations()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Identifing Unused RO Associations"); txtProcess.AppendText("Identifing Unused RO Associations");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
int rowCount = ESP_GetROAssoc.Execute("vesp_GetUnusedROAssociationsCount"); int rowCount = ESP_GetROAssoc.Execute("vesp_GetUnusedROAssociationsCount");
txtProcess.AppendText(string.Format("Unused RO Associations Count: {0}", rowCount)); txtProcess.AppendText($"Unused RO Associations Count: {rowCount}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
if (rowCount > 0) if (rowCount > 0)
{ {
txtResults.AppendText(string.Format("The database contains {0} unused RO Associations.", rowCount)); txtResults.AppendText($"The database contains {rowCount} unused RO Associations.");
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
} }
@@ -147,26 +132,26 @@ namespace VEPROMS
txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine);
} }
DateTime pEnd = DateTime.Now; DateTime pEnd = DateTime.Now;
txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// C2017-030 - new Tools user interface // C2017-030 - new Tools user interface
// tool was renamed to Hidden Data Locations (on Check list) // tool was renamed to Hidden Data Locations (on Check list)
private void IdentifyNonEditableItems() private void IdentifyNonEditableItems()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Identifing Hidden Item Locations"); txtProcess.AppendText("Identifing Hidden Item Locations");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
List<ItemInfo> myItems = ESP_IdentifyNonEditableItems.Execute("vesp_GetNonEditableItems"); List<ItemInfo> myItems = ESP_IdentifyNonEditableItems.Execute("vesp_GetNonEditableItems");
txtProcess.AppendText(string.Format("Hidden Items Count: {0}", myItems.Count)); txtProcess.AppendText($"Hidden Items Count: {myItems.Count}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
if (myItems.Count > 0) if (myItems.Count > 0)
{ {
@@ -190,52 +175,46 @@ namespace VEPROMS
//clear the list since no longer using it //clear the list since no longer using it
myItems.Clear(); myItems.Clear();
DateTime pEnd = DateTime.Now; DateTime pEnd = DateTime.Now;
txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
} }
// C2017-030 - new Tools user interface // C2017-030 - new Tools user interface
// tool was renamed to Show Users // tool was renamed to Show Users
private void GetDatabaseSessions() private void GetDatabaseSessions()
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Show Users in PROMS"); txtProcess.AppendText("Show Users in PROMS");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
txtResults.Clear(); txtResults.Clear();
txtResults.AppendText(ESP_GetDatabaseSessions.Execute("vesp_GetDatabaseSessions")); txtResults.AppendText(ESP_GetDatabaseSessions.Execute("vesp_GetDatabaseSessions"));
DateTime pEnd = DateTime.Now; DateTime pEnd = DateTime.Now;
txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
Application.DoEvents(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
MessageBox.Show("Show Users Completed", "Show Users"); MessageBox.Show("Show Users Completed", "Show Users");
} }
public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args) private void btnClear_Click(object sender, EventArgs e) => txtResults.Clear();
{
return VlnFlexGrid.ROTableUpdate(sender, args);
}
private void btnClear_Click(object sender, EventArgs e) private void btnSave_Click(object sender, EventArgs e)
{ {
txtResults.Clear(); SaveFileDialog sfd = new SaveFileDialog
} {
DefaultExt = "txt",
private void btnSave_Click(object sender, EventArgs e) AddExtension = true,
{ Filter = "Text Files (*.txt)|*.txt",
SaveFileDialog sfd = new SaveFileDialog(); FileName = $"BatchRefreshResults_{DateTime.Now:yyyyMMdd_HHmm}",
sfd.DefaultExt = "txt"; InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS"
sfd.AddExtension = true; };
sfd.Filter = "Text Files (*.txt)|*.txt"; DialogResult dr = sfd.ShowDialog();
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) if (dr == DialogResult.OK)
{ {
@@ -257,13 +236,10 @@ namespace VEPROMS
} }
} }
private void chkLater_CheckedChanged(object sender, EventArgs e) private void chkLater_CheckedChanged(object sender, EventArgs e) => pnlLater.Enabled = chkLater.Checked;
{
pnlLater.Enabled = chkLater.Checked;
}
// C2017-030 new Tools user interface // C2017-030 new Tools user interface
private void sideNavItmCheck_Click(object sender, EventArgs e) private void sideNavItmCheck_Click(object sender, EventArgs e)
{ {
GenToolType = E_GenToolType.Check; GenToolType = E_GenToolType.Check;
lblAdmToolProgressType.Text = "Checking:"; lblAdmToolProgressType.Text = "Checking:";
@@ -284,16 +260,13 @@ namespace VEPROMS
setupProgessSteps1(); setupProgessSteps1();
} }
// C2017-030 new Tools user interface // C2017-030 new Tools user interface
private void sideNavItmExit_Click(object sender, EventArgs e) private void sideNavItmExit_Click(object sender, EventArgs e) => Close();
{
this.Close();
}
#region On/Off Swiches #region On/Off Swiches
// C2017-030 new Tools user interface // C2017-030 new Tools user interface
private enum E_GenToolType : int private enum E_GenToolType : int
{ {
Check = 0, Check = 0,
Users = 3, Users = 3,
@@ -301,9 +274,9 @@ namespace VEPROMS
}; };
private E_GenToolType GenToolType = 0; private E_GenToolType GenToolType = 0;
DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records"); readonly DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records");
DevComponents.DotNetBar.StepItem siHiddenDataLocs = new DevComponents.DotNetBar.StepItem("siHiddenDataLocs", "Hidden Data"); readonly DevComponents.DotNetBar.StepItem siHiddenDataLocs = new DevComponents.DotNetBar.StepItem("siHiddenDataLocs", "Hidden Data");
DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data"); readonly 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 // this will update/rebuild the progress bar in the bottom panel of Tools
private void setupProgessSteps1() private void setupProgessSteps1()
@@ -332,22 +305,16 @@ namespace VEPROMS
} }
} }
// used for all of the Switch buttons (ON/OFF buttons) // used for all of the Switch buttons (ON/OFF buttons)
private void swCk_ValueChanged(object sender, EventArgs e) private void swCk_ValueChanged(object sender, EventArgs e) => setupProgessSteps1();
{
setupProgessSteps1();
}
#endregion #endregion
// C2017-030 New Tools user interface // C2017-030 New Tools user interface
// functions to handle the progress bar in the bottom panel of Tools // functions to handle the progress bar in the bottom panel of Tools
private void StepProgress(int prgStpIdx, int val) private void StepProgress(int prgStpIdx, int val) => ((DevComponents.DotNetBar.StepItem)progressSteps1.Items[prgStpIdx]).Value = val;
{
((DevComponents.DotNetBar.StepItem)progressSteps1.Items[prgStpIdx]).Value = val;
}
private void ClearStepProgress() private void ClearStepProgress()
{ {
for (int i = 0; i < progressSteps1.Items.Count; i++) for (int i = 0; i < progressSteps1.Items.Count; i++)
{ {
@@ -362,7 +329,7 @@ namespace VEPROMS
{ {
if (chkLater.Checked) if (chkLater.Checked)
{ {
long later = long.Parse(dtpDate.Value.ToString("yyyyMMdd") + dtpTime.Value.ToString("HHmm")); long later = long.Parse($"{dtpDate.Value:yyyyMMdd}{dtpTime.Value:HHmm}");
long now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm")); long now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm"));
while (now < later) while (now < later)
@@ -435,10 +402,12 @@ namespace VEPROMS
{ {
if (string.IsNullOrEmpty(UACfilename)) if (string.IsNullOrEmpty(UACfilename))
{ {
SaveFileDialog sfd = new SaveFileDialog(); SaveFileDialog sfd = new SaveFileDialog
sfd.Filter = "Excel XLS (*.xlsx)|*.xlsx"; {
sfd.FileName = "UACReport.xlsx"; Filter = "Excel XLS (*.xlsx)|*.xlsx",
if (sfd.ShowDialog() == DialogResult.OK) FileName = "UACReport.xlsx"
};
if (sfd.ShowDialog() == DialogResult.OK)
{ {
UACfilename = sfd.FileName; UACfilename = sfd.FileName;
} }
@@ -462,79 +431,250 @@ namespace VEPROMS
//Get Datatable of results then loop through outputting into excel //Get Datatable of results then loop through outputting into excel
private void Generate_UAC_Report(string filename) private void Generate_UAC_Report(string filename)
{ {
this.Cursor = Cursors.WaitCursor; Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now; DateTime pStart = DateTime.Now;
txtProcess.AppendText("Generate User Access Control Report in PROMS"); txtProcess.AppendText("Generate User Access Control Report in PROMS");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine);
Application.DoEvents(); Application.DoEvents();
txtResults.Clear(); txtResults.Clear();
txtResults.AppendText("Generating User Access Control Report"); txtResults.AppendText("Generating User Access Control Report");
using (DataTable dt = UserReports.GetUserAccessControlData()) //Get data and Create excel file from it
{ Create_ExcelFile(UserReports.GetUserAccessControlData(), "UAC Report", filename);
// 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. DateTime pEnd = DateTime.Now;
xls.Workbook excelworkBook = excel.Workbooks.Add(); txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
// 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(); Application.DoEvents();
this.Cursor = Cursors.Default; Cursor = Cursors.Default;
MessageBox.Show("Generate User Access Control Report Completed", "User Access Control Report"); MessageBox.Show("Generate User Access Control Report Completed", "User Access Control Report");
} }
//C2025-009 Report for tracking PROMS Users / security #region Duplicate Accessory Page IDs
//for releasing any Excel com objects still in memory
private void releaseObject(object obj) //C2026-058 Report for tracking Duplicate Accessory Page IDs in ROs in PROMS
//hold the filename for cases when scheduled for later
private string DupAccIDsfilename;
private void btnDupAccIDs_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(DupAccIDsfilename))
{
SaveFileDialog sfd = new SaveFileDialog
{
Filter = "Excel XLS (*.xlsx)|*.xlsx",
FileName = "DupAccIDsReport.xlsx"
};
if (sfd.ShowDialog() == DialogResult.OK)
{
DupAccIDsfilename = 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(DupAccIDsfilename))
{
Generate_DupAccIDs_Report(DupAccIDsfilename);
}
DupAccIDsfilename = null;
}
private void Generate_DupAccIDs_Report(string filename)
{
Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now;
txtProcess.AppendText("Generate Duplicate Accessory Page IDs Report in PROMS");
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine);
Application.DoEvents();
txtResults.Clear();
txtResults.AppendText("Generating Duplicate Accessory Page IDs Report");
//Get data and Create excel file from it
Create_ExcelFile(UserReports.GetDupAccIDsData(), "Dup Acc IDs", filename);
DateTime pEnd = DateTime.Now;
txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
Application.DoEvents();
Cursor = Cursors.Default;
MessageBox.Show("Generate Duplicate Accessory Page IDs Report Completed", "Duplicate Accessory Page IDs Report");
}
//C2026-058 Report for tracking Duplicate Accessory Page Prefixes in ROs in PROMS
//hold the filename for cases when scheduled for later
private string DupAccPrefixesfilename;
private void btnDupAccPrefixes_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(DupAccPrefixesfilename))
{
SaveFileDialog sfd = new SaveFileDialog
{
Filter = "Excel XLS (*.xlsx)|*.xlsx",
FileName = "DupAccPrefixesReport.xlsx"
};
if (sfd.ShowDialog() == DialogResult.OK)
{
DupAccPrefixesfilename = 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(DupAccPrefixesfilename))
{
Generate_DupAccPrefixes_Report(DupAccPrefixesfilename);
}
DupAccPrefixesfilename = null;
}
private void Generate_DupAccPrefixes_Report(string filename)
{
Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now;
txtProcess.AppendText("Generate Duplicate Accessory Page Prefixes Report in PROMS");
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine);
Application.DoEvents();
txtResults.Clear();
txtResults.AppendText("Generating Duplicate Accessory Page Prefixes Report");
//Get data and Create excel file from it
Create_ExcelFile(UserReports.GetDupAccPrefixesData(), "Dup Acc Prefixes", filename);
DateTime pEnd = DateTime.Now;
txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
Application.DoEvents();
Cursor = Cursors.Default;
MessageBox.Show("Generate Duplicate Accessory Page Prefixes Report Completed", "Duplicate Accessory Page Prefixes Report");
}
//C2026-058 Report for tracking Word Sections/Documents containing Duplicate Accessory Page IDs
//hold the filename for cases when scheduled for later
private string WordDocsDupAccIDsfilename;
private void btnWordDocsDupAccIDs_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(WordDocsDupAccIDsfilename))
{
SaveFileDialog sfd = new SaveFileDialog
{
Filter = "Excel XLS (*.xlsx)|*.xlsx",
FileName = "WordDocsDupAccIDsReport.xlsx"
};
if (sfd.ShowDialog() == DialogResult.OK)
{
WordDocsDupAccIDsfilename = 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(WordDocsDupAccIDsfilename))
{
Generate_WordDocsDupAccIDs_Report(WordDocsDupAccIDsfilename);
}
WordDocsDupAccIDsfilename = null;
}
private void Generate_WordDocsDupAccIDs_Report(string filename)
{
Cursor = Cursors.WaitCursor;
DateTime pStart = DateTime.Now;
txtProcess.AppendText("Generate Word Sections Containing Duplicate Accessory Page IDs Report in PROMS");
txtProcess.AppendText(Environment.NewLine);
txtProcess.AppendText($"Started: {pStart:MM/dd/yyyy @ HH:mm}");
txtProcess.AppendText(Environment.NewLine);
Application.DoEvents();
txtResults.Clear();
txtResults.AppendText("Generating Word Sections Containing Duplicate Accessory Page IDs Report");
//Get data and Create excel file from it
Create_ExcelFile(UserReports.GetDocsDupAccIDsData(), "Word Dup AccIDs", filename);
DateTime pEnd = DateTime.Now;
txtProcess.AppendText($"Completed: {pEnd:MM/dd/yyyy @ HH:mm}");
Application.DoEvents();
Cursor = Cursors.Default;
MessageBox.Show("Generate Word Sections Containing Duplicate Accessory Page IDs Report Completed", "Word Sections Containing Duplicate Accessory Page IDs Report");
}
#endregion
//C2026-058 Check all Tables for if Acc Page Id Prefix is Used More than Once
//Create an excel file made up of data table dt,
//with worksheet named (name) and file name (filename)
private void Create_ExcelFile(DataTable dt, string name, string filename)
{
// 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 = name;
// 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);
}
//C2025-009 Report for tracking PROMS Users / security
//for releasing any Excel com objects still in memory
private void releaseObject(object obj)
{ {
try try
{ {
@@ -544,7 +684,7 @@ namespace VEPROMS
catch (Exception ex) catch (Exception ex)
{ {
obj = null; obj = null;
MessageBox.Show("Exception Occurred while releasing object " + ex.ToString()); MessageBox.Show($"Exception Occurred while releasing object {ex}");
} }
finally finally
{ {
@@ -552,18 +692,11 @@ namespace VEPROMS
} }
} }
//C2025-011 RO Update Tool Memory Enhancements //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.
{ private void txtProcess_TextChanged(object sender, EventArgs e) => txtProcess.ClearUndo();
//clears the stack to help with memory - should never need to undo text changes to this. //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) => txtResults.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();
}
} }
} }
+77 -13
View File
@@ -52,6 +52,9 @@
this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); this.panelEx1 = new DevComponents.DotNetBar.PanelEx();
this.sideNav1 = new DevComponents.DotNetBar.Controls.SideNav(); this.sideNav1 = new DevComponents.DotNetBar.Controls.SideNav();
this.sideNavPanel6 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.sideNavPanel6 = new DevComponents.DotNetBar.Controls.SideNavPanel();
this.btnWrdDupAcc = new DevComponents.DotNetBar.ButtonX();
this.line2 = new DevComponents.DotNetBar.Controls.Line();
this.btnUAC = new DevComponents.DotNetBar.ButtonX();
this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel();
this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX(); this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX();
this.sideNavPanel1 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.sideNavPanel1 = new DevComponents.DotNetBar.Controls.SideNavPanel();
@@ -80,7 +83,8 @@
this.lblAdmToolProgressType = new DevComponents.DotNetBar.LabelX(); this.lblAdmToolProgressType = new DevComponents.DotNetBar.LabelX();
this.buttonItem1 = new DevComponents.DotNetBar.ButtonItem(); this.buttonItem1 = new DevComponents.DotNetBar.ButtonItem();
this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip(); this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip();
this.btnUAC = new DevComponents.DotNetBar.ButtonX(); this.btnDupAccPrefix = new DevComponents.DotNetBar.ButtonX();
this.btnDupAccIDs = new DevComponents.DotNetBar.ButtonX();
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();
this.splitContainer3.Panel1.SuspendLayout(); this.splitContainer3.Panel1.SuspendLayout();
this.splitContainer3.Panel2.SuspendLayout(); this.splitContainer3.Panel2.SuspendLayout();
@@ -442,6 +446,10 @@
// //
// sideNavPanel6 // sideNavPanel6
// //
this.sideNavPanel6.Controls.Add(this.btnDupAccIDs);
this.sideNavPanel6.Controls.Add(this.btnDupAccPrefix);
this.sideNavPanel6.Controls.Add(this.btnWrdDupAcc);
this.sideNavPanel6.Controls.Add(this.line2);
this.sideNavPanel6.Controls.Add(this.btnUAC); this.sideNavPanel6.Controls.Add(this.btnUAC);
this.sideNavPanel6.Dock = System.Windows.Forms.DockStyle.Fill; this.sideNavPanel6.Dock = System.Windows.Forms.DockStyle.Fill;
this.sideNavPanel6.Location = new System.Drawing.Point(88, 31); this.sideNavPanel6.Location = new System.Drawing.Point(88, 31);
@@ -449,6 +457,44 @@
this.sideNavPanel6.Size = new System.Drawing.Size(292, 493); this.sideNavPanel6.Size = new System.Drawing.Size(292, 493);
this.sideNavPanel6.TabIndex = 14; this.sideNavPanel6.TabIndex = 14;
// //
// btnWrdDupAcc
//
this.btnWrdDupAcc.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnWrdDupAcc.Checked = true;
this.btnWrdDupAcc.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnWrdDupAcc.Location = new System.Drawing.Point(26, 94);
this.btnWrdDupAcc.Name = "btnWrdDupAcc";
this.btnWrdDupAcc.Size = new System.Drawing.Size(211, 39);
this.btnWrdDupAcc.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.superTooltip1.SetSuperTooltip(this.btnWrdDupAcc, new DevComponents.DotNetBar.SuperTooltipInfo("Word Sections Containing Duplicate Accessory Page IDs Report", "", resources.GetString("btnWrdDupAcc.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
this.btnWrdDupAcc.TabIndex = 31;
this.btnWrdDupAcc.Text = "Run Word Sections Containing Duplicate Accessory Page IDs Report";
this.btnWrdDupAcc.Click += new System.EventHandler(this.btnWordDocsDupAccIDs_Click);
//
// line2
//
this.line2.BackColor = System.Drawing.Color.Transparent;
this.line2.Location = new System.Drawing.Point(5, 71);
this.line2.Name = "line2";
this.line2.Size = new System.Drawing.Size(285, 12);
this.line2.TabIndex = 30;
this.line2.Text = "line2";
//
// 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.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 w" +
"hen users were added to specific PROMS security groups.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
this.btnUAC.TabIndex = 0;
this.btnUAC.Text = "Run User Access Control Report";
this.btnUAC.Click += new System.EventHandler(this.btnUAC_Click);
//
// sideNavPanel5 // sideNavPanel5
// //
this.sideNavPanel5.Controls.Add(this.btn_ShowUsers); this.sideNavPanel5.Controls.Add(this.btn_ShowUsers);
@@ -785,19 +831,33 @@
this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray); this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray);
this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F"; this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
// //
// btnUAC // btnDupAccPrefix
// //
this.btnUAC.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; this.btnDupAccPrefix.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnUAC.Checked = true; this.btnDupAccPrefix.Checked = true;
this.btnUAC.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; this.btnDupAccPrefix.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnUAC.Location = new System.Drawing.Point(35, 30); this.btnDupAccPrefix.Location = new System.Drawing.Point(26, 156);
this.btnUAC.Name = "btnUAC"; this.btnDupAccPrefix.Name = "btnDupAccPrefix";
this.btnUAC.Size = new System.Drawing.Size(187, 23); this.btnDupAccPrefix.Size = new System.Drawing.Size(211, 39);
this.btnUAC.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnDupAccPrefix.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.btnUAC.TabIndex = 0; this.superTooltip1.SetSuperTooltip(this.btnDupAccPrefix, new DevComponents.DotNetBar.SuperTooltipInfo("Word Sections Containing Duplicate Accessory Page IDs Report", "", resources.GetString("btnDupAccPrefix.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
this.btnUAC.Text = "Run User Access Control Report"; this.btnDupAccPrefix.TabIndex = 32;
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.btnDupAccPrefix.Text = "Run Duplicate Accessory Page Prefixes Report";
this.btnUAC.Click += new System.EventHandler(this.btnUAC_Click); this.btnDupAccPrefix.Click += new System.EventHandler(this.btnDupAccPrefixes_Click);
//
// btnDupAccIDs
//
this.btnDupAccIDs.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnDupAccIDs.Checked = true;
this.btnDupAccIDs.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnDupAccIDs.Location = new System.Drawing.Point(26, 220);
this.btnDupAccIDs.Name = "btnDupAccIDs";
this.btnDupAccIDs.Size = new System.Drawing.Size(211, 39);
this.btnDupAccIDs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.superTooltip1.SetSuperTooltip(this.btnDupAccIDs, new DevComponents.DotNetBar.SuperTooltipInfo("Word Sections Containing Duplicate Accessory Page IDs Report", "", resources.GetString("btnDupAccIDs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
this.btnDupAccIDs.TabIndex = 33;
this.btnDupAccIDs.Text = "Run Duplicate Accessory Page IDs Report";
this.btnDupAccIDs.Click += new System.EventHandler(this.btnDupAccIDs_Click);
// //
// frmGenTools // frmGenTools
// //
@@ -889,6 +949,10 @@
private DevComponents.DotNetBar.Controls.WarningBox warningBox3; private DevComponents.DotNetBar.Controls.WarningBox warningBox3;
private DevComponents.DotNetBar.ButtonItem buttonItem1; private DevComponents.DotNetBar.ButtonItem buttonItem1;
private DevComponents.DotNetBar.ButtonX btnUAC; private DevComponents.DotNetBar.ButtonX btnUAC;
private DevComponents.DotNetBar.ButtonX btnWrdDupAcc;
private DevComponents.DotNetBar.Controls.Line line2;
private DevComponents.DotNetBar.ButtonX btnDupAccIDs;
private DevComponents.DotNetBar.ButtonX btnDupAccPrefix;
} }
} }
+22 -9
View File
@@ -117,10 +117,25 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="superTooltip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="superTooltip1.TrayLocation" type="System.Drawing.Point, System.Drawing">
<value>17, 17</value>
</data>
<data name="btnDupAccIDs.SuperTooltip" xml:space="preserve">
<value>If multiple ROs contain the same Accessory Page IDs, then users could inadvertently use the wrong RO in word documents since those print and save by Accessory Page ID).
This will return a report containing info on ROs that have Duplicate Accessory Page IDs. This can be reviewed and used in conjunction with the other Supplicate Accessory Page ID/Prefix Reports to ensure that ROs and RO Groups are properly set up. Common reasons for Duplicate Accessory Page IDs Include: RO Groups unintentionally set up with duplicate prefixes, fields in ROs that Accessory Page Access uses that have the same text but are upper vs lower case, and some duplicates may be RO Groups that were never intended to be used in PROMS (these may be only used as a group heading).</value>
</data>
<data name="btnDupAccPrefix.SuperTooltip" xml:space="preserve">
<value>If multiple ROs contain the same Accessory Page IDs, then users could inadvertently use the wrong RO in word documents since those print and save by Accessory Page ID.
This will return a report containing info on which RO Groups have duplicate Accessory Page Prefixes. This can be run and used to clean up RO Groups so that they have unique Accessory Page Prefixes.</value>
</data>
<data name="btnWrdDupAcc.SuperTooltip" xml:space="preserve">
<value>If multiple ROs contain the same Accessory Page IDs, then users could inadvertently use the wrong RO in word documents since those print and save by Accessory Page ID.
This will return a report containing info on which Word Sections Contain ROs that have Duplicate Accessory Page IDs. This can be run before cleaning up Duplicates and then utilized after to identify which Word Sections may need edited to the newly updated Accessory Page IDs.</value>
</data>
<data name="warningBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="warningBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAp5JREFUOE+F
@@ -138,9 +153,6 @@
ud8AKwnMnBpmYFAAAAAASUVORK5CYII= ud8AKwnMnBpmYFAAAAAASUVORK5CYII=
</value> </value>
</data> </data>
<metadata name="superTooltip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="swCkObsoleteROData.SuperTooltip" xml:space="preserve"> <data name="swCkObsoleteROData.SuperTooltip" xml:space="preserve">
<value>Referenced Objects databases are associated with a procedure set (such as Working Draft). <value>Referenced Objects databases are associated with a procedure set (such as Working Draft).
@@ -189,7 +201,8 @@ Should an item become orphaned (disconnected) from the rest of the data, it will
This tool may take an extended period of time to execute. This tool may take an extended period of time to execute.
</value> </value>
</data> </data>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<value>46</value> <data name="$this.TrayHeight" type="System.Int32, mscorlib">
</metadata> <value>49</value>
</data>
</root> </root>
Loaded 100 of 569 files, more files were not shown because too many files have changed in this diff. Show more