573 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			573 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Drawing;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using VEPROMS.CSLA.Library;
 | |
| using System.IO;
 | |
| using Volian.Controls.Library;
 | |
| using DevComponents.DotNetBar;
 | |
| using JR.Utils.GUI.Forms;
 | |
| using System.Linq;
 | |
| using System.Data;
 | |
| using xls = Microsoft.Office.Interop.Excel;
 | |
| 
 | |
| namespace VEPROMS
 | |
| {
 | |
| 	public partial class frmGenTools : Form
 | |
| 	{
 | |
| 		private SessionInfo _MySessionInfo;
 | |
| 		public SessionInfo MySessionInfo
 | |
| 		{
 | |
| 			get { return _MySessionInfo; }
 | |
| 			set { _MySessionInfo = value; }
 | |
| 		}
 | |
| 
 | |
| 		public frmGenTools(SessionInfo sessionInfo, frmVEPROMS veProms)
 | |
| 		{
 | |
| 			InitializeComponent();
 | |
| 			_MySessionInfo = sessionInfo;
 | |
| 
 | |
| 			// When opening General tools Check tab will be default.
 | |
| 			this.sideNavItmCheck.Checked = true;
 | |
| 
 | |
| 			setupProgessSteps1(); // C2017-030 - new Tools user interface
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		private void frmGenTools_Load(object sender, EventArgs e)
 | |
| 		{
 | |
| 			IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process.
 | |
| 		}
 | |
| 		private bool IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process.
 | |
| 		private void frmGenTools_FormClosing(object sender, EventArgs e)
 | |
| 		{
 | |
| 			IsClosing = true;//B2017-221 Allow the batch dialog to close when waiting to process.
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 - new Tools user interface
 | |
| 		// tool renamed to Identify Orphan Items
 | |
| 		private void IdentifyDisconnectedItems()
 | |
| 		{
 | |
| 			this.Cursor = Cursors.WaitCursor;
 | |
| 			DateTime pStart = DateTime.Now;
 | |
| 			txtProcess.AppendText("Identifing Orphan Items");
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			int rowCount = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount");
 | |
| 			txtProcess.AppendText(string.Format("Orphan Items Count:  {0}", rowCount));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			if (rowCount > 0)
 | |
| 			{
 | |
| 				txtResults.AppendText(string.Format("The database contains {0} Orphan items.", rowCount));
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText("These can be removed via the Remove Orphan Data Records in the Repair tools");
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				txtResults.AppendText("No Orphan Records Found");// B2017-108 Always output results even if there isn't any 
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 			}
 | |
| 			DateTime pEnd = DateTime.Now;
 | |
| 			txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			this.Cursor = Cursors.Default;
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 - new Tools user interface
 | |
| 		// is one of two tools run from Check Obsolete RO Data
 | |
| 		private void IdentifyUnusedRoFstsAndFigures()
 | |
| 		{
 | |
| 			this.Cursor = Cursors.WaitCursor;
 | |
| 			DateTime pStart = DateTime.Now;
 | |
| 			txtProcess.AppendText("Identifing Unused RoFsts and Figures");
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			int rowCountRoFst = ESP_GetUnusedRoFsts.Execute("vesp_GetUnusedRoFstsCount");
 | |
| 			int rowCountFigures = ESP_GetUnusedFigures.Execute("vesp_GetUnusedFiguresCount");
 | |
| 			txtProcess.AppendText(string.Format("Unused RoFsts Count:  {0}, Unused Figures Count:  {1}", rowCountRoFst, rowCountFigures));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			if (rowCountRoFst > 0 || rowCountFigures > 0)
 | |
| 			{
 | |
| 				txtResults.AppendText(string.Format("The database contains {0} unused RoFsts.", rowCountRoFst));
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(string.Format("The database contains {0} unused Figures items.", rowCountFigures));
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				txtResults.AppendText("No Unused  RoFsts or Figures Found"); // B2017-108 Always output results even if there isn't any
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 			}
 | |
| 
 | |
| 			DateTime pEnd = DateTime.Now;
 | |
| 			txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			this.Cursor = Cursors.Default;
 | |
| 		}
 | |
| 
 | |
|         // C2017-030 - new Tools user interface
 | |
|         // is one of two tools run from Check Obsolete RO Data
 | |
|         private void IdentifyROAssociations()
 | |
| 		{
 | |
| 			this.Cursor = Cursors.WaitCursor;
 | |
| 			DateTime pStart = DateTime.Now;
 | |
| 			txtProcess.AppendText("Identifing Unused RO Associations");
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			int rowCount = ESP_GetROAssoc.Execute("vesp_GetUnusedROAssociationsCount");
 | |
| 			txtProcess.AppendText(string.Format("Unused RO Associations Count:  {0}", rowCount));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			if (rowCount > 0)
 | |
| 			{
 | |
| 				txtResults.AppendText(string.Format("The database contains {0} unused RO Associations.", rowCount));
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				txtResults.AppendText("No unused RO Associations Found");// B2017-108 Always output results even if there isn't any
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 			}
 | |
| 			DateTime pEnd = DateTime.Now;
 | |
| 			txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			this.Cursor = Cursors.Default;
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 - new Tools user interface
 | |
| 		// tool was renamed to Hidden Data Locations (on Check list)
 | |
| 		private void IdentifyNonEditableItems()
 | |
| 		{
 | |
| 			this.Cursor = Cursors.WaitCursor;
 | |
| 			DateTime pStart = DateTime.Now;
 | |
| 			txtProcess.AppendText("Identifing Hidden Item Locations");
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			List<ItemInfo> myItems = ESP_IdentifyNonEditableItems.Execute("vesp_GetNonEditableItems");
 | |
| 			txtProcess.AppendText(string.Format("Hidden Items Count:  {0}", myItems.Count));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			if (myItems.Count > 0)
 | |
| 			{
 | |
| 				txtResults.AppendText("The following items are hidden (non-editable)...");
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				foreach (ItemInfo ii in myItems)
 | |
| 				{
 | |
| 					txtResults.AppendText(ii.Path);
 | |
| 					txtResults.AppendText(Environment.NewLine);
 | |
| 				}
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				txtResults.AppendText("No Hidden Data Found");// B2017-108 Always output results even if there isn't any
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 				txtResults.AppendText(Environment.NewLine);
 | |
| 			}
 | |
| 			//C2025-011 RO Update Tool Memory Enhancements 
 | |
| 			//clear the list since no longer using it
 | |
| 			myItems.Clear();
 | |
| 			DateTime pEnd = DateTime.Now;
 | |
| 			txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			this.Cursor = Cursors.Default;
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 - new Tools user interface
 | |
| 		// tool was renamed to Show Users
 | |
| 		private void GetDatabaseSessions()
 | |
| 		{
 | |
| 			this.Cursor = Cursors.WaitCursor;
 | |
| 			DateTime pStart = DateTime.Now;
 | |
| 			txtProcess.AppendText("Show Users in PROMS");
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			txtResults.Clear();
 | |
| 			txtResults.AppendText(ESP_GetDatabaseSessions.Execute("vesp_GetDatabaseSessions"));
 | |
| 			DateTime pEnd = DateTime.Now;
 | |
| 			txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			Application.DoEvents();
 | |
| 			this.Cursor = Cursors.Default;
 | |
| 			MessageBox.Show("Show Users Completed", "Show Users");
 | |
| 		}
 | |
| 
 | |
|         public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
 | |
| 		{
 | |
| 			return VlnFlexGrid.ROTableUpdate(sender, args);
 | |
| 		}
 | |
| 
 | |
|         private void btnClear_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			txtResults.Clear();
 | |
| 		}
 | |
| 
 | |
| 		private void btnSave_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			SaveFileDialog sfd = new SaveFileDialog();
 | |
| 			sfd.DefaultExt = "txt";
 | |
| 			sfd.AddExtension = true;
 | |
| 			sfd.Filter = "Text Files (*.txt)|*.txt";
 | |
| 			sfd.FileName = string.Format("BatchRefreshResults_{0}", DateTime.Now.ToString("yyyyMMdd_HHmm"));
 | |
| 			sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS";
 | |
| 			DialogResult dr = sfd.ShowDialog();
 | |
| 
 | |
| 			if (dr == DialogResult.OK)
 | |
| 			{
 | |
| 				System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName);
 | |
| 				sw.Write(txtResults.Text);
 | |
| 				sw.Close();
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		private ProgressBarItem _ProgressBar = null;
 | |
| 
 | |
| 		public ProgressBarItem ProgressBar
 | |
| 		{
 | |
| 			get { return _ProgressBar; }
 | |
| 			set
 | |
| 			{
 | |
| 				_ProgressBar = value;
 | |
| 				_ProgressBar.TextVisible = true;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		private void chkLater_CheckedChanged(object sender, EventArgs e)
 | |
| 		{
 | |
| 			pnlLater.Enabled = chkLater.Checked;
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 new Tools user interface
 | |
| 		private void sideNavItmCheck_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			GenToolType = E_GenToolType.Check;
 | |
| 			lblAdmToolProgressType.Text = "Checking:";
 | |
| 			setupProgessSteps1();
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 new Tools user interface
 | |
| 		private void sideNavItmUsers_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			GenToolType = E_GenToolType.Users;
 | |
| 			setupProgessSteps1();
 | |
| 		}
 | |
| 
 | |
| 		//C2025-009 Report for tracking PROMS Users / security
 | |
| 		private void sideNavItmReports_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			GenToolType = E_GenToolType.Reports;
 | |
| 			setupProgessSteps1();
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 new Tools user interface
 | |
| 		private void sideNavItmExit_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			this.Close();
 | |
| 		}
 | |
| 
 | |
| 		#region On/Off Swiches
 | |
| 
 | |
| 		// C2017-030 new Tools user interface
 | |
| 		private enum E_GenToolType : int
 | |
| 		{
 | |
| 			Check = 0,
 | |
| 			Users = 3,
 | |
| 			Reports = 5
 | |
| 		};
 | |
| 		private E_GenToolType GenToolType = 0;
 | |
| 
 | |
| 		DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records");
 | |
| 		DevComponents.DotNetBar.StepItem siHiddenDataLocs = new DevComponents.DotNetBar.StepItem("siHiddenDataLocs", "Hidden Data");
 | |
| 		DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data");
 | |
| 
 | |
| 		// this will update/rebuild the progress bar in the bottom panel of Tools
 | |
| 		private void setupProgessSteps1()
 | |
| 		{
 | |
| 			progressSteps1.Visible = false;
 | |
| 			progressSteps1.Items.Clear();
 | |
| 
 | |
| 			switch (GenToolType)
 | |
| 			{
 | |
| 				case E_GenToolType.Check:
 | |
| 					if (swCkOrphanDataRecs.Value)
 | |
| 						progressSteps1.Items.Add(siOrphDatRecs);
 | |
| 					if (swHiddenDataLocs.Value)
 | |
| 						progressSteps1.Items.Add(siHiddenDataLocs);
 | |
| 					if (swCkObsoleteROData.Value)
 | |
| 						progressSteps1.Items.Add(siObsoleteROData);
 | |
| 					splitContainer3.Panel2Collapsed = false;
 | |
| 					progressSteps1.Visible = true;
 | |
| 					progressSteps1.Refresh();
 | |
| 					break;
 | |
| 				case E_GenToolType.Users:
 | |
| 				case E_GenToolType.Reports:
 | |
| 					splitContainer3.Panel2Collapsed = true;
 | |
| 					progressSteps1.Visible = false;
 | |
| 					break;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// used for all of the Switch buttons (ON/OFF buttons)
 | |
| 		private void swCk_ValueChanged(object sender, EventArgs e)
 | |
| 		{
 | |
| 			setupProgessSteps1();
 | |
| 		}
 | |
| 
 | |
| 		#endregion
 | |
| 
 | |
| 		// C2017-030 New Tools user interface
 | |
| 		// functions to handle the progress bar in the bottom panel of Tools
 | |
| 		private void StepProgress(int prgStpIdx, int val)
 | |
| 		{
 | |
| 			((DevComponents.DotNetBar.StepItem)progressSteps1.Items[prgStpIdx]).Value = val;
 | |
| 		}
 | |
| 
 | |
| 		private void ClearStepProgress()
 | |
| 		{
 | |
| 			for (int i = 0; i < progressSteps1.Items.Count; i++)
 | |
| 			{
 | |
| 				((DevComponents.DotNetBar.StepItem)progressSteps1.Items[i]).Value = 0;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 New Tools user interface
 | |
| 		// button clicks for processing selected tools
 | |
| 		//B2017-221 Allow the batch dialog to close when waiting to process.
 | |
| 		private bool CheckProcessLater()  // see if we should delay processing until later
 | |
| 		{
 | |
| 			if (chkLater.Checked)
 | |
| 			{
 | |
| 				long later = long.Parse(dtpDate.Value.ToString("yyyyMMdd") + dtpTime.Value.ToString("HHmm"));
 | |
| 				long now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm"));
 | |
| 
 | |
| 				while (now < later)
 | |
| 				{
 | |
| 					txtProcess.Clear();
 | |
| 					txtProcess.AppendText("Waiting...");
 | |
| 					System.Threading.Thread.Sleep(1000);//Check each second
 | |
| 					if (IsClosing) return false;//B2017-221 Allow the batch dialog to close when waiting to process.
 | |
| 					Application.DoEvents();// Allow user interface to react
 | |
| 					now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm"));
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			return true;// Close after complete
 | |
| 		}
 | |
| 
 | |
| 		// C2017-030 new Tools user interface
 | |
| 		private void btn_ShowUsers_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			if (!CheckProcessLater()) return;  // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process.
 | |
| 
 | |
| 			txtProcess.Clear();
 | |
| 			txtResults.Clear();
 | |
| 
 | |
| 			GetDatabaseSessions();
 | |
| 		}
 | |
| 
 | |
| 		private void btnRunCheck_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			if (!CheckProcessLater()) return;  // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process.
 | |
| 
 | |
| 			int prgStpIdx = -1;
 | |
| 			txtResults.Clear();
 | |
| 			txtProcess.Clear();
 | |
| 
 | |
| 			if (swCkOrphanDataRecs.Value)
 | |
| 			{
 | |
| 				StepProgress(++prgStpIdx, 50);
 | |
| 				IdentifyDisconnectedItems(); // orphan items
 | |
| 				StepProgress(prgStpIdx, 100);
 | |
| 			}
 | |
| 
 | |
| 			if (swHiddenDataLocs.Value)
 | |
| 			{
 | |
| 				StepProgress(++prgStpIdx, 50);
 | |
| 				IdentifyNonEditableItems(); // hidden items
 | |
| 				StepProgress(prgStpIdx, 100);
 | |
| 			}
 | |
| 
 | |
| 			if (swCkObsoleteROData.Value)
 | |
| 			{
 | |
| 				StepProgress(++prgStpIdx, 25);
 | |
| 				IdentifyROAssociations();
 | |
| 				StepProgress(prgStpIdx, 50);
 | |
| 				IdentifyUnusedRoFstsAndFigures();
 | |
| 				StepProgress(prgStpIdx, 100);
 | |
| 			}
 | |
| 
 | |
| 			MessageBox.Show("Check Functions Completed", "Check");
 | |
| 
 | |
| 			ClearStepProgress();
 | |
| 		}
 | |
| 
 | |
| 		//C2025-009 Report for tracking PROMS Users / security
 | |
| 		//UACfilename will hold the filename for cases when scheduled for later
 | |
| 		private string UACfilename;
 | |
| 
 | |
| 		//C2025-009 Report for tracking PROMS Users / security
 | |
| 		private void btnUAC_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			if (string.IsNullOrEmpty(UACfilename))
 | |
| 			{
 | |
| 				SaveFileDialog sfd = new SaveFileDialog();
 | |
| 				sfd.Filter = "Excel XLS (*.xlsx)|*.xlsx";
 | |
| 				sfd.FileName = "UACReport.xlsx";
 | |
| 				if (sfd.ShowDialog() == DialogResult.OK)
 | |
| 				{
 | |
| 					UACfilename = sfd.FileName;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			if (!CheckProcessLater()) return;  // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process.
 | |
| 
 | |
| 			txtProcess.Clear();
 | |
| 			txtResults.Clear();
 | |
| 
 | |
| 			if (!string.IsNullOrEmpty(UACfilename))
 | |
| 			{
 | |
| 				Generate_UAC_Report(UACfilename);
 | |
| 			}
 | |
| 
 | |
| 			UACfilename = null;
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		//C2025-009 Report for tracking PROMS Users / security
 | |
| 		//Get Datatable of results then loop through outputting into excel
 | |
| 		private void Generate_UAC_Report(string filename)
 | |
| 		{
 | |
| 			this.Cursor = Cursors.WaitCursor;
 | |
| 			DateTime pStart = DateTime.Now;
 | |
| 			txtProcess.AppendText("Generate User Access Control Report in PROMS");
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			txtProcess.AppendText(Environment.NewLine);
 | |
| 			Application.DoEvents();
 | |
| 			txtResults.Clear();
 | |
| 			txtResults.AppendText("Generating User Access Control Report");
 | |
| 
 | |
| 			using (DataTable dt = UserReports.GetUserAccessControlData())
 | |
| 			{
 | |
|                 // Start Excel and get Application object.
 | |
|                 xls.Application excel = new xls.Application
 | |
|                 {
 | |
|                     // Make Excel invisible and disable alerts.
 | |
|                     Visible = false,
 | |
|                     DisplayAlerts = false
 | |
|                 };
 | |
| 
 | |
|                 // Create a new Workbook.
 | |
|                 xls.Workbook excelworkBook = excel.Workbooks.Add();
 | |
| 
 | |
| 				// Create a Worksheet.
 | |
| 				var workSheet = (xls.Worksheet)excelworkBook.ActiveSheet;
 | |
| 				workSheet.Name = "UAC Report";
 | |
| 
 | |
| 				// column headings
 | |
| 				for (var i = 0; i < dt.Columns.Count; i++)
 | |
| 				{
 | |
| 					workSheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
 | |
| 				}
 | |
| 
 | |
| 				// rows
 | |
| 				for (var i = 0; i < dt.Rows.Count; i++)
 | |
| 				{
 | |
| 					for (var j = 0; j < dt.Columns.Count; j++)
 | |
| 					{
 | |
| 						workSheet.Cells[i + 2, j + 1] = dt.Rows[i][j];
 | |
| 					}
 | |
| 				}
 | |
| 
 | |
| 				//resize the columns to match the data
 | |
| 				workSheet.Columns.AutoFit();
 | |
| 
 | |
| 				//freeze the top row, and highlight those cells
 | |
| 				workSheet.Application.ActiveWindow.SplitRow = 1;
 | |
| 				workSheet.Application.ActiveWindow.FreezePanes = true;
 | |
| 				workSheet.Cells.Range[workSheet.Cells[1, 1], workSheet.Cells[1, dt.Columns.Count]].Interior.Color = xls.XlRgbColor.rgbLightBlue;
 | |
| 
 | |
| 				//save the excel file
 | |
| 				excelworkBook.SaveAs(filename);
 | |
| 				excelworkBook.Close();
 | |
| 				excel.Quit();
 | |
| 
 | |
| 				//release any in use com objects
 | |
| 				releaseObject(workSheet);
 | |
| 				releaseObject(excelworkBook);
 | |
| 				releaseObject(excel);
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			DateTime pEnd = DateTime.Now;
 | |
| 			txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm")));
 | |
| 			Application.DoEvents();
 | |
| 			this.Cursor = Cursors.Default;
 | |
| 			MessageBox.Show("Generate User Access Control Report Completed", "User Access Control Report");
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		//C2025-009 Report for tracking PROMS Users / security
 | |
| 		//for releasing any Excel com objects still in memory
 | |
| 		private void releaseObject(object obj)
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 				System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
 | |
| 				obj = null;
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				obj = null;
 | |
| 				MessageBox.Show("Exception Occurred while releasing object " + ex.ToString());
 | |
| 			}
 | |
| 			finally
 | |
| 			{
 | |
| 				GC.Collect();
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		//C2025-011 RO Update Tool Memory Enhancements
 | |
| 		private void txtProcess_TextChanged(object sender, EventArgs e)
 | |
|         {
 | |
| 			//clears the stack to help with memory - should never need to undo text changes to this.
 | |
| 			txtProcess.ClearUndo();
 | |
| 		}
 | |
| 
 | |
|         private void txtResults_TextChanged(object sender, EventArgs e)
 | |
|         {
 | |
| 			//clears the stack to help with memory - should never need to undo text changes to this.
 | |
| 			txtResults.ClearUndo();
 | |
| 		}
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |