Compare commits
8 Commits
C2025-017_
...
C2025-009
Author | SHA1 | Date | |
---|---|---|---|
0da2d38bd8 | |||
3a6ce52ead | |||
eb0582ae69 | |||
3143d094e8 | |||
f265a23f97 | |||
dceeb410c6 | |||
30be08fe4d | |||
20247d0bc2 |
@@ -24231,6 +24231,39 @@ GO
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
-- C2025-009 Report for tracking PROMS Users / Security
|
||||
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getUserAcessControl]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||
DROP PROCEDURE [getUserAcessControl];
|
||||
|
||||
GO
|
||||
|
||||
/****** Object: StoredProcedure [dbo].[getUserAcessControl] Script Date: 9/5/2025 6:51:42 AM ******/
|
||||
|
||||
-- =============================================
|
||||
-- Author: Matthew Schill
|
||||
-- Create date: 09/05/2025
|
||||
-- Description: Get Data on When Users were added to PROMS and when they were added to Security Groups
|
||||
-- =============================================
|
||||
CREATE PROCEDURE [dbo].[getUserAcessControl]
|
||||
AS
|
||||
BEGIN
|
||||
SELECT Users.UserID,
|
||||
WhenUserAddedToPROMS = Users.[DTS],
|
||||
GroupName = Groups.GroupName,
|
||||
WhenUserAddedToGroup = Memberships.[DTS],
|
||||
WhoAddedUserToGroup = CASE WHEN
|
||||
Memberships.UsrID = Users.UsrID
|
||||
AND Users.UsrID = Users.UserID
|
||||
THEN 'INITIAL_SETUP'
|
||||
ELSE Memberships.UsrID END,
|
||||
DateUserRemovedFromGroup = Memberships.EndDate
|
||||
FROM Memberships
|
||||
inner join Groups on Memberships.GID = Groups.GID
|
||||
right outer join Users on Users.UID = Memberships.UID
|
||||
order by UserID, Memberships.[DTS]
|
||||
RETURN
|
||||
END
|
||||
|
||||
/*
|
||||
---------------------------------------------------------------------------
|
||||
| ADD New Code Before this Block |
|
||||
@@ -24264,8 +24297,8 @@ BEGIN TRY -- Try Block
|
||||
DECLARE @RevDate varchar(255)
|
||||
DECLARE @RevDescription varchar(255)
|
||||
|
||||
set @RevDate = '08/18/2025 2:07 PM'
|
||||
set @RevDescription = 'Updated Index maintenance that occurs after RO FST Load to improve RO Performance'
|
||||
set @RevDate = '09/05/2025 7:00 AM'
|
||||
set @RevDescription = 'Added stored procedure for User Access Control Report'
|
||||
|
||||
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
||||
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
||||
|
@@ -121,6 +121,10 @@
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\..\3rdPartyLibraries\Log4Net\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Data">
|
||||
|
@@ -9,6 +9,8 @@ using Volian.Controls.Library;
|
||||
using DevComponents.DotNetBar;
|
||||
using JR.Utils.GUI.Forms;
|
||||
using System.Linq;
|
||||
using System.Data;
|
||||
using xls = Microsoft.Office.Interop.Excel;
|
||||
|
||||
namespace VEPROMS
|
||||
{
|
||||
@@ -275,6 +277,13 @@ namespace VEPROMS
|
||||
setupProgessSteps1();
|
||||
}
|
||||
|
||||
//C2025-009 Report for tracking PROMS Users / security
|
||||
private void sideNavItmReports_Click(object sender, EventArgs e)
|
||||
{
|
||||
GenToolType = E_GenToolType.Reports;
|
||||
setupProgessSteps1();
|
||||
}
|
||||
|
||||
// C2017-030 new Tools user interface
|
||||
private void sideNavItmExit_Click(object sender, EventArgs e)
|
||||
{
|
||||
@@ -287,7 +296,8 @@ namespace VEPROMS
|
||||
private enum E_GenToolType : int
|
||||
{
|
||||
Check = 0,
|
||||
Users = 3
|
||||
Users = 3,
|
||||
Reports = 5
|
||||
};
|
||||
private E_GenToolType GenToolType = 0;
|
||||
|
||||
@@ -314,8 +324,8 @@ namespace VEPROMS
|
||||
progressSteps1.Visible = true;
|
||||
progressSteps1.Refresh();
|
||||
break;
|
||||
|
||||
case E_GenToolType.Users:
|
||||
case E_GenToolType.Reports:
|
||||
splitContainer3.Panel2Collapsed = true;
|
||||
progressSteps1.Visible = false;
|
||||
break;
|
||||
@@ -415,7 +425,133 @@ namespace VEPROMS
|
||||
|
||||
ClearStepProgress();
|
||||
}
|
||||
|
||||
|
||||
//C2025-009 Report for tracking PROMS Users / security
|
||||
//UACfilename will hold the filename for cases when scheduled for later
|
||||
private string UACfilename;
|
||||
|
||||
//C2025-009 Report for tracking PROMS Users / security
|
||||
private void btnUAC_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(UACfilename))
|
||||
{
|
||||
SaveFileDialog sfd = new SaveFileDialog();
|
||||
sfd.Filter = "Excel XLS (*.xlsx)|*.xlsx";
|
||||
sfd.FileName = "UACReport.xlsx";
|
||||
if (sfd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
UACfilename = sfd.FileName;
|
||||
}
|
||||
}
|
||||
|
||||
if (!CheckProcessLater()) return; // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process.
|
||||
|
||||
txtProcess.Clear();
|
||||
txtResults.Clear();
|
||||
|
||||
if (!string.IsNullOrEmpty(UACfilename))
|
||||
{
|
||||
Generate_UAC_Report(UACfilename);
|
||||
}
|
||||
|
||||
UACfilename = null;
|
||||
|
||||
}
|
||||
|
||||
//C2025-009 Report for tracking PROMS Users / security
|
||||
//Get Datatable of results then loop through outputting into excel
|
||||
private void Generate_UAC_Report(string filename)
|
||||
{
|
||||
this.Cursor = Cursors.WaitCursor;
|
||||
DateTime pStart = DateTime.Now;
|
||||
txtProcess.AppendText("Generate User Access Control Report in PROMS");
|
||||
txtProcess.AppendText(Environment.NewLine);
|
||||
txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
|
||||
txtProcess.AppendText(Environment.NewLine);
|
||||
Application.DoEvents();
|
||||
txtResults.Clear();
|
||||
txtResults.AppendText("Generating User Access Control Report");
|
||||
|
||||
using (DataTable dt = UserReports.GetUserAccessControlData())
|
||||
{
|
||||
// Start Excel and get Application object.
|
||||
xls.Application excel = new xls.Application
|
||||
{
|
||||
// Make Excel invisible and disable alerts.
|
||||
Visible = false,
|
||||
DisplayAlerts = false
|
||||
};
|
||||
|
||||
// Create a new Workbook.
|
||||
xls.Workbook excelworkBook = excel.Workbooks.Add();
|
||||
|
||||
// Create a Worksheet.
|
||||
var workSheet = (xls.Worksheet)excelworkBook.ActiveSheet;
|
||||
workSheet.Name = "UAC Report";
|
||||
|
||||
// column headings
|
||||
for (var i = 0; i < dt.Columns.Count; i++)
|
||||
{
|
||||
workSheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
|
||||
}
|
||||
|
||||
// rows
|
||||
for (var i = 0; i < dt.Rows.Count; i++)
|
||||
{
|
||||
for (var j = 0; j < dt.Columns.Count; j++)
|
||||
{
|
||||
workSheet.Cells[i + 2, j + 1] = dt.Rows[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
//resize the columns to match the data
|
||||
workSheet.Columns.AutoFit();
|
||||
|
||||
//freeze the top row, and highlight those cells
|
||||
workSheet.Application.ActiveWindow.SplitRow = 1;
|
||||
workSheet.Application.ActiveWindow.FreezePanes = true;
|
||||
workSheet.Cells.Range[workSheet.Cells[1, 1], workSheet.Cells[1, dt.Columns.Count]].Interior.Color = xls.XlRgbColor.rgbLightBlue;
|
||||
|
||||
//save the excel file
|
||||
excelworkBook.SaveAs(filename);
|
||||
excelworkBook.Close();
|
||||
excel.Quit();
|
||||
|
||||
//release any in use com objects
|
||||
releaseObject(workSheet);
|
||||
releaseObject(excelworkBook);
|
||||
releaseObject(excel);
|
||||
|
||||
}
|
||||
|
||||
DateTime pEnd = DateTime.Now;
|
||||
txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm")));
|
||||
Application.DoEvents();
|
||||
this.Cursor = Cursors.Default;
|
||||
MessageBox.Show("Generate User Access Control Report Completed", "User Access Control Report");
|
||||
|
||||
}
|
||||
|
||||
//C2025-009 Report for tracking PROMS Users / security
|
||||
//for releasing any Excel com objects still in memory
|
||||
private void releaseObject(object obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
|
||||
obj = null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
obj = null;
|
||||
MessageBox.Show("Exception Occurred while releasing object " + ex.ToString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
GC.Collect();
|
||||
}
|
||||
}
|
||||
|
||||
//C2025-011 RO Update Tool Memory Enhancements
|
||||
private void txtProcess_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
114
PROMS/VEPROMS User Interface/frmGenTools.designer.cs
generated
114
PROMS/VEPROMS User Interface/frmGenTools.designer.cs
generated
@@ -51,6 +51,9 @@
|
||||
this.expandableSplitter1 = new DevComponents.DotNetBar.ExpandableSplitter();
|
||||
this.panelEx1 = new DevComponents.DotNetBar.PanelEx();
|
||||
this.sideNav1 = new DevComponents.DotNetBar.Controls.SideNav();
|
||||
this.sideNavPanel6 = new DevComponents.DotNetBar.Controls.SideNavPanel();
|
||||
this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel();
|
||||
this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX();
|
||||
this.sideNavPanel1 = new DevComponents.DotNetBar.Controls.SideNavPanel();
|
||||
this.warningBox3 = new DevComponents.DotNetBar.Controls.WarningBox();
|
||||
this.labelX7 = new DevComponents.DotNetBar.LabelX();
|
||||
@@ -62,12 +65,11 @@
|
||||
this.swCkOrphanDataRecs = new DevComponents.DotNetBar.Controls.SwitchButton();
|
||||
this.labelX1 = new DevComponents.DotNetBar.LabelX();
|
||||
this.btnRunCheck = new DevComponents.DotNetBar.ButtonX();
|
||||
this.sideNavPanel5 = new DevComponents.DotNetBar.Controls.SideNavPanel();
|
||||
this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX();
|
||||
this.sideNavItem1 = new DevComponents.DotNetBar.Controls.SideNavItem();
|
||||
this.separator1 = new DevComponents.DotNetBar.Separator();
|
||||
this.sideNavItmCheck = new DevComponents.DotNetBar.Controls.SideNavItem();
|
||||
this.sideNavItmUsers = new DevComponents.DotNetBar.Controls.SideNavItem();
|
||||
this.sideNavItmReports = new DevComponents.DotNetBar.Controls.SideNavItem();
|
||||
this.sideNavItmExit = new DevComponents.DotNetBar.Controls.SideNavItem();
|
||||
this.panelEx4 = new DevComponents.DotNetBar.PanelEx();
|
||||
this.progressSteps1 = new DevComponents.DotNetBar.ProgressSteps();
|
||||
@@ -78,6 +80,7 @@
|
||||
this.lblAdmToolProgressType = new DevComponents.DotNetBar.LabelX();
|
||||
this.buttonItem1 = new DevComponents.DotNetBar.ButtonItem();
|
||||
this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip();
|
||||
this.btnUAC = new DevComponents.DotNetBar.ButtonX();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();
|
||||
this.splitContainer3.Panel1.SuspendLayout();
|
||||
this.splitContainer3.Panel2.SuspendLayout();
|
||||
@@ -89,8 +92,9 @@
|
||||
this.pnlLater.SuspendLayout();
|
||||
this.panelEx1.SuspendLayout();
|
||||
this.sideNav1.SuspendLayout();
|
||||
this.sideNavPanel1.SuspendLayout();
|
||||
this.sideNavPanel6.SuspendLayout();
|
||||
this.sideNavPanel5.SuspendLayout();
|
||||
this.sideNavPanel1.SuspendLayout();
|
||||
this.panelEx4.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -416,8 +420,9 @@
|
||||
// sideNav1
|
||||
//
|
||||
this.sideNav1.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.sideNav1.Controls.Add(this.sideNavPanel1);
|
||||
this.sideNav1.Controls.Add(this.sideNavPanel6);
|
||||
this.sideNav1.Controls.Add(this.sideNavPanel5);
|
||||
this.sideNav1.Controls.Add(this.sideNavPanel1);
|
||||
this.sideNav1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sideNav1.EnableClose = false;
|
||||
this.sideNav1.EnableMaximize = false;
|
||||
@@ -426,6 +431,7 @@
|
||||
this.separator1,
|
||||
this.sideNavItmCheck,
|
||||
this.sideNavItmUsers,
|
||||
this.sideNavItmReports,
|
||||
this.sideNavItmExit});
|
||||
this.sideNav1.Location = new System.Drawing.Point(0, 0);
|
||||
this.sideNav1.Name = "sideNav1";
|
||||
@@ -434,6 +440,40 @@
|
||||
this.sideNav1.TabIndex = 3;
|
||||
this.sideNav1.Text = "sideNav1";
|
||||
//
|
||||
// sideNavPanel6
|
||||
//
|
||||
this.sideNavPanel6.Controls.Add(this.btnUAC);
|
||||
this.sideNavPanel6.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sideNavPanel6.Location = new System.Drawing.Point(88, 31);
|
||||
this.sideNavPanel6.Name = "sideNavPanel6";
|
||||
this.sideNavPanel6.Size = new System.Drawing.Size(292, 493);
|
||||
this.sideNavPanel6.TabIndex = 14;
|
||||
//
|
||||
// sideNavPanel5
|
||||
//
|
||||
this.sideNavPanel5.Controls.Add(this.btn_ShowUsers);
|
||||
this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sideNavPanel5.Location = new System.Drawing.Point(88, 31);
|
||||
this.sideNavPanel5.Name = "sideNavPanel5";
|
||||
this.sideNavPanel5.Size = new System.Drawing.Size(292, 493);
|
||||
this.sideNavPanel5.TabIndex = 14;
|
||||
this.sideNavPanel5.Visible = false;
|
||||
//
|
||||
// btn_ShowUsers
|
||||
//
|
||||
this.btn_ShowUsers.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
|
||||
this.btn_ShowUsers.Checked = true;
|
||||
this.btn_ShowUsers.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
|
||||
this.btn_ShowUsers.Location = new System.Drawing.Point(57, 37);
|
||||
this.btn_ShowUsers.Name = "btn_ShowUsers";
|
||||
this.btn_ShowUsers.Size = new System.Drawing.Size(171, 23);
|
||||
this.btn_ShowUsers.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
|
||||
this.superTooltip1.SetSuperTooltip(this.btn_ShowUsers, new DevComponents.DotNetBar.SuperTooltipInfo("Show Users", "", "This will return all of the users currently with open sessions in the database an" +
|
||||
"d the details of any items they have checked out.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 80)));
|
||||
this.btn_ShowUsers.TabIndex = 0;
|
||||
this.btn_ShowUsers.Text = "Show Users";
|
||||
this.btn_ShowUsers.Click += new System.EventHandler(this.btn_ShowUsers_Click);
|
||||
//
|
||||
// sideNavPanel1
|
||||
//
|
||||
this.sideNavPanel1.Controls.Add(this.warningBox3);
|
||||
@@ -451,6 +491,7 @@
|
||||
this.sideNavPanel1.Name = "sideNavPanel1";
|
||||
this.sideNavPanel1.Size = new System.Drawing.Size(292, 493);
|
||||
this.sideNavPanel1.TabIndex = 2;
|
||||
this.sideNavPanel1.Visible = false;
|
||||
//
|
||||
// warningBox3
|
||||
//
|
||||
@@ -600,31 +641,6 @@
|
||||
this.btnRunCheck.Text = "Run Check";
|
||||
this.btnRunCheck.Click += new System.EventHandler(this.btnRunCheck_Click);
|
||||
//
|
||||
// sideNavPanel5
|
||||
//
|
||||
this.sideNavPanel5.Controls.Add(this.btn_ShowUsers);
|
||||
this.sideNavPanel5.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sideNavPanel5.Location = new System.Drawing.Point(88, 31);
|
||||
this.sideNavPanel5.Name = "sideNavPanel5";
|
||||
this.sideNavPanel5.Size = new System.Drawing.Size(292, 493);
|
||||
this.sideNavPanel5.TabIndex = 14;
|
||||
this.sideNavPanel5.Visible = false;
|
||||
//
|
||||
// btn_ShowUsers
|
||||
//
|
||||
this.btn_ShowUsers.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
|
||||
this.btn_ShowUsers.Checked = true;
|
||||
this.btn_ShowUsers.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
|
||||
this.btn_ShowUsers.Location = new System.Drawing.Point(57, 37);
|
||||
this.btn_ShowUsers.Name = "btn_ShowUsers";
|
||||
this.btn_ShowUsers.Size = new System.Drawing.Size(171, 23);
|
||||
this.btn_ShowUsers.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
|
||||
this.superTooltip1.SetSuperTooltip(this.btn_ShowUsers, new DevComponents.DotNetBar.SuperTooltipInfo("Show Users", "", "This will return all of the users currently with open sessions in the database an" +
|
||||
"d the details of any items they have checked out.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 80)));
|
||||
this.btn_ShowUsers.TabIndex = 0;
|
||||
this.btn_ShowUsers.Text = "Show Users";
|
||||
this.btn_ShowUsers.Click += new System.EventHandler(this.btn_ShowUsers_Click);
|
||||
//
|
||||
// sideNavItem1
|
||||
//
|
||||
this.sideNavItem1.IsSystemMenu = true;
|
||||
@@ -644,7 +660,6 @@
|
||||
//
|
||||
// sideNavItmCheck
|
||||
//
|
||||
this.sideNavItmCheck.Checked = true;
|
||||
this.sideNavItmCheck.Name = "sideNavItmCheck";
|
||||
this.sideNavItmCheck.Panel = this.sideNavPanel1;
|
||||
this.sideNavItmCheck.Symbol = "";
|
||||
@@ -659,6 +674,15 @@
|
||||
this.sideNavItmUsers.Text = "Users";
|
||||
this.sideNavItmUsers.Click += new System.EventHandler(this.sideNavItmUsers_Click);
|
||||
//
|
||||
// sideNavItmReports
|
||||
//
|
||||
this.sideNavItmReports.Checked = true;
|
||||
this.sideNavItmReports.Name = "sideNavItmReports";
|
||||
this.sideNavItmReports.Panel = this.sideNavPanel6;
|
||||
this.sideNavItmReports.Symbol = "";
|
||||
this.sideNavItmReports.Text = "Reports";
|
||||
this.sideNavItmReports.Click += new System.EventHandler(this.sideNavItmReports_Click);
|
||||
//
|
||||
// sideNavItmExit
|
||||
//
|
||||
this.sideNavItmExit.Name = "sideNavItmExit";
|
||||
@@ -761,6 +785,20 @@
|
||||
this.superTooltip1.DefaultTooltipSettings = new DevComponents.DotNetBar.SuperTooltipInfo("", "", "", null, null, DevComponents.DotNetBar.eTooltipColor.Gray);
|
||||
this.superTooltip1.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
|
||||
//
|
||||
// btnUAC
|
||||
//
|
||||
this.btnUAC.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
|
||||
this.btnUAC.Checked = true;
|
||||
this.btnUAC.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
|
||||
this.btnUAC.Location = new System.Drawing.Point(35, 30);
|
||||
this.btnUAC.Name = "btnUAC";
|
||||
this.btnUAC.Size = new System.Drawing.Size(187, 23);
|
||||
this.btnUAC.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
|
||||
this.btnUAC.TabIndex = 0;
|
||||
this.btnUAC.Text = "Run User Access Control Report";
|
||||
this.superTooltip1.SetSuperTooltip(this.btnUAC, new DevComponents.DotNetBar.SuperTooltipInfo("UAC Report", "", "This will return a report containing info on when users were added to PROMS and when users were added to specific PROMS security groups.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
|
||||
this.btnUAC.Click += new System.EventHandler(this.btnUAC_Click);
|
||||
//
|
||||
// frmGenTools
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
@@ -790,15 +828,16 @@
|
||||
this.panelEx1.ResumeLayout(false);
|
||||
this.sideNav1.ResumeLayout(false);
|
||||
this.sideNav1.PerformLayout();
|
||||
this.sideNavPanel1.ResumeLayout(false);
|
||||
this.sideNavPanel6.ResumeLayout(false);
|
||||
this.sideNavPanel5.ResumeLayout(false);
|
||||
this.sideNavPanel1.ResumeLayout(false);
|
||||
this.panelEx4.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.SplitContainer splitContainer3;
|
||||
#endregion
|
||||
private System.Windows.Forms.SplitContainer splitContainer3;
|
||||
private DevComponents.DotNetBar.PanelEx panelEx3;
|
||||
private System.Windows.Forms.TextBox txtResults;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
@@ -829,11 +868,13 @@
|
||||
private DevComponents.DotNetBar.ButtonX btnRunCheck;
|
||||
private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel5;
|
||||
private DevComponents.DotNetBar.ButtonX btn_ShowUsers;
|
||||
private DevComponents.DotNetBar.Controls.SideNavItem sideNavItem1;
|
||||
private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel6;
|
||||
private DevComponents.DotNetBar.Controls.SideNavItem sideNavItem1;
|
||||
private DevComponents.DotNetBar.Separator separator1;
|
||||
private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmCheck;
|
||||
private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmUsers;
|
||||
private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmExit;
|
||||
private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmReports;
|
||||
private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmExit;
|
||||
private DevComponents.DotNetBar.LabelX lblAdmToolProgressType;
|
||||
private DevComponents.DotNetBar.ProgressSteps progressSteps1;
|
||||
private DevComponents.DotNetBar.StepItem stepItem1;
|
||||
@@ -847,7 +888,8 @@
|
||||
private DevComponents.DotNetBar.PanelEx panelEx4;
|
||||
private DevComponents.DotNetBar.Controls.WarningBox warningBox3;
|
||||
private DevComponents.DotNetBar.ButtonItem buttonItem1;
|
||||
}
|
||||
private DevComponents.DotNetBar.ButtonX btnUAC;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@@ -117,6 +117,9 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</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" />
|
||||
<data name="warningBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
|
55
PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs
generated
55
PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs
generated
@@ -71,9 +71,12 @@ namespace VEPROMS
|
||||
this.labelItem10 = new DevComponents.DotNetBar.LabelItem();
|
||||
this.bottomProgBar = new DevComponents.DotNetBar.ProgressBarItem();
|
||||
this.labelItem9 = new DevComponents.DotNetBar.LabelItem();
|
||||
this.lblPreEditView = new DevComponents.DotNetBar.LabelItem();
|
||||
this.lblEditView = new DevComponents.DotNetBar.LabelItem();
|
||||
this.labelItem11 = new DevComponents.DotNetBar.LabelItem();
|
||||
this.btnItemInfo = new DevComponents.DotNetBar.ButtonItem();
|
||||
this.btnFilter = new DevComponents.DotNetBar.ButtonItem();
|
||||
this.txtFilter = new DevComponents.DotNetBar.TextBoxItem();
|
||||
this.lblItemID = new DevComponents.DotNetBar.LabelItem();
|
||||
this.lblResolution = new DevComponents.DotNetBar.LabelItem();
|
||||
this.btnEditItem = new DevComponents.DotNetBar.ButtonItem();
|
||||
@@ -524,19 +527,22 @@ namespace VEPROMS
|
||||
this.bottomBar.Font = new System.Drawing.Font("Segoe UI", 9F);
|
||||
this.bottomBar.IsMaximized = false;
|
||||
this.bottomBar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
|
||||
this.labelItem10,
|
||||
this.btnFilter,
|
||||
this.txtFilter,
|
||||
this.labelItem10,
|
||||
this.bottomProgBar,
|
||||
this.labelItem9,
|
||||
this.lblEditView,
|
||||
this.labelItem11,
|
||||
this.btnItemInfo,
|
||||
this.lblItemID,
|
||||
this.lblResolution,
|
||||
this.btnEditItem,
|
||||
this.lblUser,
|
||||
this.lblLastChange,
|
||||
this.btnStepRTF,
|
||||
this.btnFixMSWord});
|
||||
this.lblPreEditView,
|
||||
this.lblEditView,
|
||||
this.labelItem11,
|
||||
this.btnItemInfo,
|
||||
this.lblItemID,
|
||||
this.lblResolution,
|
||||
this.btnEditItem,
|
||||
this.lblUser,
|
||||
this.lblLastChange,
|
||||
this.btnStepRTF,
|
||||
this.btnFixMSWord});
|
||||
this.bottomBar.Location = new System.Drawing.Point(5, 573);
|
||||
this.bottomBar.Name = "bottomBar";
|
||||
this.bottomBar.Size = new System.Drawing.Size(1185, 25);
|
||||
@@ -546,6 +552,21 @@ namespace VEPROMS
|
||||
this.bottomBar.TabStop = false;
|
||||
this.bottomBar.Text = "bar1";
|
||||
//
|
||||
// btnFilter
|
||||
//
|
||||
this.btnFilter.Name = "btnFilter";
|
||||
this.btnFilter.Text = "Tree View Search:";
|
||||
this.btnFilter.Click += SubmitFilter;
|
||||
//
|
||||
// txtFilter
|
||||
//
|
||||
this.txtFilter.TextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);
|
||||
this.txtFilter.Name = "txtFilter";
|
||||
this.txtFilter.TextBoxWidth = 120;
|
||||
this.txtFilter.TextBox.TabIndex = 0;
|
||||
this.txtFilter.TextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FilterEnterKey);
|
||||
this.superTooltip1.SetSuperTooltip(this.txtFilter, new DevComponents.DotNetBar.SuperTooltipInfo("Filter", "", "This will filter the Procedure Tree in PROMS to Procedures containing entered words in the Procedure Number or Title. Press enter or the Tree View Search button to submit.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray));
|
||||
//
|
||||
// txtSearch
|
||||
//
|
||||
this.txtSearch.Dock = System.Windows.Forms.DockStyle.Right;
|
||||
@@ -647,6 +668,11 @@ namespace VEPROMS
|
||||
this.lblEditView.ForeColor = System.Drawing.SystemColors.MenuText;
|
||||
this.lblEditView.Name = "lblEditView";
|
||||
this.lblEditView.Text = "Edit";
|
||||
// lblEditView
|
||||
//
|
||||
this.lblPreEditView.BorderSide = DevComponents.DotNetBar.eBorderSide.Left;
|
||||
this.lblPreEditView.BorderType = DevComponents.DotNetBar.eBorderType.Bump;
|
||||
this.lblPreEditView.Name = "lblPreEditView";
|
||||
//
|
||||
// labelItem11
|
||||
//
|
||||
@@ -1646,9 +1672,9 @@ namespace VEPROMS
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
private DevComponents.DotNetBar.RibbonControl ribbonControl1;
|
||||
private DevComponents.DotNetBar.RibbonControl ribbonControl1;
|
||||
private DevComponents.DotNetBar.Office2007StartButton office2007StartButton1;
|
||||
private DevComponents.DotNetBar.ItemContainer itemContainer1;
|
||||
private DevComponents.DotNetBar.ItemContainer itemContainer2;
|
||||
@@ -1744,8 +1770,11 @@ namespace VEPROMS
|
||||
private DevComponents.DotNetBar.TabItem tabItemLibDocs;
|
||||
private Volian.Controls.Library.DisplayTags displayTags;
|
||||
private Volian.Controls.Library.DisplaySearch displaySearch1;
|
||||
private DevComponents.DotNetBar.LabelItem lblPreEditView;
|
||||
private DevComponents.DotNetBar.LabelItem lblEditView;
|
||||
private DevComponents.DotNetBar.ButtonItem btnItemInfo;
|
||||
private DevComponents.DotNetBar.ButtonItem btnFilter;
|
||||
private DevComponents.DotNetBar.TextBoxItem txtFilter;
|
||||
private DevComponents.DotNetBar.ButtonItem btnFixMSWord;
|
||||
private Volian.Controls.Library.DisplayBookMarks displayBookMarks;
|
||||
//private DevComponents.DotNetBar.LabelItem lblLocked;
|
||||
|
@@ -22,6 +22,9 @@ using Volian.Base.Library;
|
||||
using Volian.Print.Library;
|
||||
using JR.Utils.GUI.Forms;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
|
||||
|
||||
@@ -2771,6 +2774,199 @@ namespace VEPROMS
|
||||
}
|
||||
}
|
||||
|
||||
//C2024-036 IntelliSense
|
||||
// Recursively Expand the Tree
|
||||
// up to the procedure level
|
||||
// Since items are only loaded as they are expanded,
|
||||
// this is needed to search for matching text.
|
||||
private void LoadAllProcedures(VETreeNode tn)
|
||||
{
|
||||
if (tn == null || tn.VEObject.IsProcedure)
|
||||
return;
|
||||
|
||||
if (!tn.IsExpanded)
|
||||
{ tn.Expand(); }
|
||||
|
||||
foreach (var nde in tn.Nodes)
|
||||
LoadAllProcedures((VETreeNode)nde);
|
||||
}
|
||||
|
||||
//C2024-036 IntelliSense
|
||||
// Return a list containing all
|
||||
// items in the Tree that match the entered text
|
||||
// + any item that is a parent of those.
|
||||
private List<IVEDrillDownReadOnly> GetMatchingTreeNodes(VETreeNode tn, string texttomatch)
|
||||
{
|
||||
List<IVEDrillDownReadOnly> matches = new List<IVEDrillDownReadOnly>();
|
||||
|
||||
//add any item that matches text
|
||||
//and all parents back up to the top most item
|
||||
if (tn.Text.ToLower().Contains(texttomatch.ToLower()))
|
||||
{
|
||||
matches.Add(tn.VEObject);
|
||||
VETreeNode parent_tn = (VETreeNode) tn.Parent;
|
||||
while (parent_tn != null)
|
||||
{
|
||||
if (!matches.Contains(parent_tn.VEObject))
|
||||
{ matches.Add(parent_tn.VEObject); }
|
||||
parent_tn = (VETreeNode)parent_tn.Parent;
|
||||
}
|
||||
}
|
||||
|
||||
if (!tn.VEObject.IsProcedure)
|
||||
{
|
||||
//if not at a procedure level,
|
||||
//loop through sub items
|
||||
//to check those for matches
|
||||
foreach (VETreeNode nde in tn.Nodes.OfType<VETreeNode>())
|
||||
{
|
||||
if (nde.Text != "Dummy VETreeNode(IVEDrillDownReadOnly o)")
|
||||
{
|
||||
List<IVEDrillDownReadOnly> tmpmatches = GetMatchingTreeNodes(nde, texttomatch);
|
||||
matches.AddRange(from mtch in tmpmatches
|
||||
where !matches.Contains(mtch)
|
||||
select mtch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
|
||||
//C2024-036 IntelliSense
|
||||
// Recursively loop through the Child Nodes
|
||||
// in the TreeView
|
||||
// remove anything not in the list
|
||||
private bool FilterTreeNodes(VETreeNode tn, List<IVEDrillDownReadOnly> filterlist)
|
||||
{
|
||||
if (tn == null)
|
||||
return false;
|
||||
|
||||
if (!filterlist.Contains(tn.VEObject) && (tn != (VETreeNode) tv.Nodes[0])) //Note:Always keep the top node
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (!tn.VEObject.IsProcedure)
|
||||
{
|
||||
//if not a procedure
|
||||
//mark the sub-items that need removal
|
||||
List<TreeNode> lst = (from VETreeNode nde in tn.Nodes.OfType<VETreeNode>()
|
||||
where FilterTreeNodes(nde, filterlist)
|
||||
select (TreeNode) nde).ToList();
|
||||
|
||||
//remove all items in the removal list
|
||||
//need to do this separately as can't modify the collection while looping through it above
|
||||
while (lst.Count > 0)
|
||||
{
|
||||
tn.Nodes.Remove(lst[0]);
|
||||
lst.Remove(lst[0]);
|
||||
}
|
||||
|
||||
//found a folder that matched that has no matching procedures
|
||||
//if this is case, allow folder to be expanded
|
||||
if (tn.Nodes.Count == 0 && filterlist.Contains(tn.VEObject))
|
||||
{
|
||||
tn.ChildrenLoaded = false;
|
||||
tn.RefreshNode();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
//C2024-036 IntelliSense
|
||||
//Collection to block for task to complete
|
||||
private BlockingCollection<string> blockingQueueFilter = new BlockingCollection<string>();
|
||||
|
||||
//C2024-036 IntelliSense
|
||||
// When Text Changes, Perform the filtering
|
||||
// Note that uses a blocking collection
|
||||
// in case multiple events fire at the same time
|
||||
// this is to prevent incorrect behavior when
|
||||
//doing something like hitting backspace a bunch
|
||||
private void SubmitFilter(object sender, EventArgs e)
|
||||
{
|
||||
//Consumer
|
||||
Task.Run(() =>
|
||||
{
|
||||
//Blocks until a new filter is available
|
||||
while (!blockingQueueFilter.IsCompleted)
|
||||
{
|
||||
string fltrtxt = blockingQueueFilter.Take();
|
||||
ProcessFilter(fltrtxt);
|
||||
}
|
||||
});
|
||||
|
||||
//Producer
|
||||
Task.Run(() => { blockingQueueFilter.Add(txtFilter?.Text); });
|
||||
|
||||
}
|
||||
|
||||
//C2024-036 IntelliSense
|
||||
// When Enter Key is pressed in the TextBox
|
||||
private void FilterEnterKey(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
if (e.KeyChar == '\r') // enter key pressed
|
||||
{
|
||||
e.Handled = true;
|
||||
SubmitFilter(sender, e);
|
||||
}
|
||||
}
|
||||
|
||||
//C2024-036 IntelliSense
|
||||
// When Text Changes, Perform the filtering
|
||||
// Note that uses Invoke to
|
||||
// avoid multi-threaded problems
|
||||
//with the blocking collection
|
||||
private void ProcessFilter(string fltrtxt)
|
||||
{
|
||||
//Step 1: reload the base tree
|
||||
VETreeNode tbase = (VETreeNode)tv.Nodes[0];
|
||||
tbase.ChildrenLoaded = false;
|
||||
this.Invoke((Action) (() => { tbase.RefreshNode(); }));
|
||||
|
||||
if (!string.IsNullOrEmpty(fltrtxt))
|
||||
{
|
||||
//Step 2: Expand all TreeNodes
|
||||
this.Invoke((Action)(() => { LoadAllProcedures(tbase); }));
|
||||
|
||||
//Step 3: get items that match filter to those containing the title or number
|
||||
List<IVEDrillDownReadOnly> filterlist = GetMatchingTreeNodes(tbase, fltrtxt);
|
||||
|
||||
//Step 4: filter to those containing the title or number
|
||||
this.Invoke((Action)(() => {FilterTreeNodes(tbase, filterlist);}));
|
||||
|
||||
//Step 5: refresh the view
|
||||
this.Invoke((Action)(() => {tv.Update();}));
|
||||
|
||||
//Step 6: select 1st procedure in tree view
|
||||
this.Invoke((Action)(() => {SelectFirstProcedure(filterlist);}));
|
||||
}
|
||||
|
||||
//Step 7: set progress bar as done
|
||||
this.Invoke((Action)(() => {ProgBarText = "Filtering Complete";}));
|
||||
|
||||
}
|
||||
|
||||
//C2024-036 IntelliSense
|
||||
//Gives Focus to last child in first section of treeview
|
||||
//then given focus to treeview
|
||||
//so that can click enter and open 1st found item/procedure
|
||||
void SelectFirstProcedure(List<IVEDrillDownReadOnly> filterlist)
|
||||
{
|
||||
TreeNode tn = tv.Nodes[0];
|
||||
while (tn.Nodes.Count > 0 && filterlist.Contains(((VETreeNode) tn).VEObject))
|
||||
{
|
||||
tn = tn.Nodes[0];
|
||||
}
|
||||
|
||||
tv.SelectedNode = tn;
|
||||
tv.Enabled = true;
|
||||
tv.SelectedNode.Collapse();
|
||||
tv.Focus();
|
||||
}
|
||||
|
||||
void btnPrevious_Click(object sender, EventArgs e)
|
||||
{
|
||||
CurrentID = FindPreviousLine();
|
||||
|
42
PROMS/VEPROMS.CSLA.Library/Minimal/UserReports.cs
Normal file
42
PROMS/VEPROMS.CSLA.Library/Minimal/UserReports.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using Csla.Data;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
//CSM - C2025-009 - Minimal Class for User based Reports
|
||||
namespace VEPROMS.CSLA.Library
|
||||
{
|
||||
public static class UserReports
|
||||
{
|
||||
|
||||
#region Get User Reports
|
||||
//CSM - C2025-009 Report for tracking PROMS Users / security
|
||||
public static DataTable GetUserAccessControlData()
|
||||
{
|
||||
try
|
||||
{
|
||||
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||
{
|
||||
using (SqlCommand cm = cn.CreateCommand())
|
||||
{
|
||||
cm.CommandType = CommandType.StoredProcedure;
|
||||
cm.CommandText = "getUserAcessControl";
|
||||
cm.CommandTimeout = Database.DefaultTimeout;
|
||||
using (SqlDataAdapter da = new SqlDataAdapter(cm))
|
||||
{
|
||||
DataTable dt = new DataTable();
|
||||
da.Fill(dt);
|
||||
return dt;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new DbCslaException("Error in getUserAcessControl Report: retrieving data failed", ex);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
@@ -388,6 +388,7 @@
|
||||
<Compile Include="Generated\ZTransition.cs" />
|
||||
<Compile Include="Generated\ZTransitionInfo.cs" />
|
||||
<Compile Include="Minimal\AnnotationstypeSections.cs" />
|
||||
<Compile Include="Minimal\UserReports.cs" />
|
||||
<Compile Include="Minimal\UserSettings.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="VEObjects\VEDrillDown.cs" />
|
||||
|
Reference in New Issue
Block a user