using System; using System.Collections.Generic; using System.Drawing; using System.Text; using System.Windows.Forms; using VEPROMS.CSLA.Library; using System.IO; using Volian.Controls.Library; using DevComponents.DotNetBar; using JR.Utils.GUI.Forms; using System.Linq; namespace VEPROMS { public partial class frmGenTools : Form { private SessionInfo _MySessionInfo; public SessionInfo MySessionInfo { get { return _MySessionInfo; } set { _MySessionInfo = value; } } public frmGenTools(SessionInfo sessionInfo, frmVEPROMS veProms) { InitializeComponent(); _MySessionInfo = sessionInfo; // When opening General tools Check tab will be default. this.sideNavItmCheck.Checked = true; setupProgessSteps1(); // C2017-030 - new Tools user interface } private void frmGenTools_Load(object sender, EventArgs e) { IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process. } private bool IsClosing = false;//B2017-221 Allow the batch dialog to close when waiting to process. private void frmGenTools_FormClosing(object sender, EventArgs e) { IsClosing = true;//B2017-221 Allow the batch dialog to close when waiting to process. } // C2017-030 - new Tools user interface // tool renamed to Identify Orphan Items private void IdentifyDisconnectedItems() { this.Cursor = Cursors.WaitCursor; DateTime pStart = DateTime.Now; txtProcess.AppendText("Identifing Orphan Items"); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCount = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount"); txtProcess.AppendText(string.Format("Orphan Items Count: {0}", rowCount)); txtProcess.AppendText(Environment.NewLine); if (rowCount > 0) { txtResults.AppendText(string.Format("The database contains {0} Orphan items.", rowCount)); txtResults.AppendText(Environment.NewLine); txtResults.AppendText("These can be removed via the Remove Orphan Data Records in the Repair tools"); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } else { txtResults.AppendText("No Orphan Records Found");// B2017-108 Always output results even if there isn't any txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); this.Cursor = Cursors.Default; } // C2017-030 - new Tools user interface // is one of two tools run from Check Obsolete RO Data private void IdentifyUnusedRoFstsAndFigures() { this.Cursor = Cursors.WaitCursor; DateTime pStart = DateTime.Now; txtProcess.AppendText("Identifing Unused RoFsts and Figures"); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCountRoFst = ESP_GetUnusedRoFsts.Execute("vesp_GetUnusedRoFstsCount"); int rowCountFigures = ESP_GetUnusedFigures.Execute("vesp_GetUnusedFiguresCount"); txtProcess.AppendText(string.Format("Unused RoFsts Count: {0}, Unused Figures Count: {1}", rowCountRoFst, rowCountFigures)); txtProcess.AppendText(Environment.NewLine); if (rowCountRoFst > 0 || rowCountFigures > 0) { txtResults.AppendText(string.Format("The database contains {0} unused RoFsts.", rowCountRoFst)); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(string.Format("The database contains {0} unused Figures items.", rowCountFigures)); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } else { txtResults.AppendText("No Unused RoFsts or Figures Found"); // B2017-108 Always output results even if there isn't any txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); this.Cursor = Cursors.Default; } // C2017-030 - new Tools user interface // is one of two tools run from Check Obsolete RO Data private void IdentifyROAssociations() { this.Cursor = Cursors.WaitCursor; DateTime pStart = DateTime.Now; txtProcess.AppendText("Identifing Unused RO Associations"); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCount = ESP_GetROAssoc.Execute("vesp_GetUnusedROAssociationsCount"); txtProcess.AppendText(string.Format("Unused RO Associations Count: {0}", rowCount)); txtProcess.AppendText(Environment.NewLine); if (rowCount > 0) { txtResults.AppendText(string.Format("The database contains {0} unused RO Associations.", rowCount)); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } else { txtResults.AppendText("No unused RO Associations Found");// B2017-108 Always output results even if there isn't any txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); this.Cursor = Cursors.Default; } // C2017-030 - new Tools user interface // tool was renamed to Hidden Data Locations (on Check list) private void IdentifyNonEditableItems() { this.Cursor = Cursors.WaitCursor; DateTime pStart = DateTime.Now; txtProcess.AppendText("Identifing Hidden Item Locations"); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); List myItems = ESP_IdentifyNonEditableItems.Execute("vesp_GetNonEditableItems"); txtProcess.AppendText(string.Format("Hidden Items Count: {0}", myItems.Count)); txtProcess.AppendText(Environment.NewLine); if (myItems.Count > 0) { txtResults.AppendText("The following items are hidden (non-editable)..."); txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); foreach (ItemInfo ii in myItems) { txtResults.AppendText(ii.Path); txtResults.AppendText(Environment.NewLine); } txtResults.AppendText(Environment.NewLine); } else { txtResults.AppendText("No Hidden Data Found");// B2017-108 Always output results even if there isn't any txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); } //C2025-011 RO Update Tool Memory Enhancements //clear the list since no longer using it myItems.Clear(); DateTime pEnd = DateTime.Now; txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); this.Cursor = Cursors.Default; } // C2017-030 - new Tools user interface // tool was renamed to Show Users private void GetDatabaseSessions() { this.Cursor = Cursors.WaitCursor; DateTime pStart = DateTime.Now; txtProcess.AppendText("Show Users in PROMS"); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); txtResults.Clear(); txtResults.AppendText(ESP_GetDatabaseSessions.Execute("vesp_GetDatabaseSessions")); DateTime pEnd = DateTime.Now; txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); Application.DoEvents(); this.Cursor = Cursors.Default; MessageBox.Show("Show Users Completed", "Show Users"); } public List roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args) { return VlnFlexGrid.ROTableUpdate(sender, args); } private void btnClear_Click(object sender, EventArgs e) { txtResults.Clear(); } private void btnSave_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.DefaultExt = "txt"; sfd.AddExtension = true; sfd.Filter = "Text Files (*.txt)|*.txt"; sfd.FileName = string.Format("BatchRefreshResults_{0}", DateTime.Now.ToString("yyyyMMdd_HHmm")); sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS"; DialogResult dr = sfd.ShowDialog(); if (dr == DialogResult.OK) { System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName); sw.Write(txtResults.Text); sw.Close(); } } private ProgressBarItem _ProgressBar = null; public ProgressBarItem ProgressBar { get { return _ProgressBar; } set { _ProgressBar = value; _ProgressBar.TextVisible = true; } } private void chkLater_CheckedChanged(object sender, EventArgs e) { pnlLater.Enabled = chkLater.Checked; } // C2017-030 new Tools user interface private void sideNavItmCheck_Click(object sender, EventArgs e) { GenToolType = E_GenToolType.Check; lblAdmToolProgressType.Text = "Checking:"; setupProgessSteps1(); } // C2017-030 new Tools user interface private void sideNavItmUsers_Click(object sender, EventArgs e) { GenToolType = E_GenToolType.Users; setupProgessSteps1(); } // C2017-030 new Tools user interface private void sideNavItmExit_Click(object sender, EventArgs e) { this.Close(); } #region On/Off Swiches // C2017-030 new Tools user interface private enum E_GenToolType : int { Check = 0, Users = 3 }; private E_GenToolType GenToolType = 0; DevComponents.DotNetBar.StepItem siOrphDatRecs = new DevComponents.DotNetBar.StepItem("siOrphDatRecs", "Orphan Data Records"); DevComponents.DotNetBar.StepItem siHiddenDataLocs = new DevComponents.DotNetBar.StepItem("siHiddenDataLocs", "Hidden Data"); DevComponents.DotNetBar.StepItem siObsoleteROData = new DevComponents.DotNetBar.StepItem("siObsoleteROData", "Obsolete RO Data"); // this will update/rebuild the progress bar in the bottom panel of Tools private void setupProgessSteps1() { progressSteps1.Visible = false; progressSteps1.Items.Clear(); switch (GenToolType) { case E_GenToolType.Check: if (swCkOrphanDataRecs.Value) progressSteps1.Items.Add(siOrphDatRecs); if (swHiddenDataLocs.Value) progressSteps1.Items.Add(siHiddenDataLocs); if (swCkObsoleteROData.Value) progressSteps1.Items.Add(siObsoleteROData); splitContainer3.Panel2Collapsed = false; progressSteps1.Visible = true; progressSteps1.Refresh(); break; case E_GenToolType.Users: splitContainer3.Panel2Collapsed = true; progressSteps1.Visible = false; break; } } // used for all of the Switch buttons (ON/OFF buttons) private void swCk_ValueChanged(object sender, EventArgs e) { setupProgessSteps1(); } #endregion // C2017-030 New Tools user interface // functions to handle the progress bar in the bottom panel of Tools private void StepProgress(int prgStpIdx, int val) { ((DevComponents.DotNetBar.StepItem)progressSteps1.Items[prgStpIdx]).Value = val; } private void ClearStepProgress() { for (int i = 0; i < progressSteps1.Items.Count; i++) { ((DevComponents.DotNetBar.StepItem)progressSteps1.Items[i]).Value = 0; } } // C2017-030 New Tools user interface // button clicks for processing selected tools //B2017-221 Allow the batch dialog to close when waiting to process. private bool CheckProcessLater() // see if we should delay processing until later { if (chkLater.Checked) { long later = long.Parse(dtpDate.Value.ToString("yyyyMMdd") + dtpTime.Value.ToString("HHmm")); long now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm")); while (now < later) { txtProcess.Clear(); txtProcess.AppendText("Waiting..."); System.Threading.Thread.Sleep(1000);//Check each second if (IsClosing) return false;//B2017-221 Allow the batch dialog to close when waiting to process. Application.DoEvents();// Allow user interface to react now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm")); } } return true;// Close after complete } // C2017-030 new Tools user interface private void btn_ShowUsers_Click(object sender, EventArgs e) { if (!CheckProcessLater()) return; // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process. txtProcess.Clear(); txtResults.Clear(); GetDatabaseSessions(); } private void btnRunCheck_Click(object sender, EventArgs e) { if (!CheckProcessLater()) return; // delay processing if set//B2017-221 Allow the batch dialog to close when waiting to process. int prgStpIdx = -1; txtResults.Clear(); txtProcess.Clear(); if (swCkOrphanDataRecs.Value) { StepProgress(++prgStpIdx, 50); IdentifyDisconnectedItems(); // orphan items StepProgress(prgStpIdx, 100); } if (swHiddenDataLocs.Value) { StepProgress(++prgStpIdx, 50); IdentifyNonEditableItems(); // hidden items StepProgress(prgStpIdx, 100); } if (swCkObsoleteROData.Value) { StepProgress(++prgStpIdx, 25); IdentifyROAssociations(); StepProgress(prgStpIdx, 50); IdentifyUnusedRoFstsAndFigures(); StepProgress(prgStpIdx, 100); } MessageBox.Show("Check Functions Completed", "Check"); ClearStepProgress(); } //C2025-011 RO Update Tool Memory Enhancements private void txtProcess_TextChanged(object sender, EventArgs e) { //clears the stack to help with memory - should never need to undo text changes to this. txtProcess.ClearUndo(); } private void txtResults_TextChanged(object sender, EventArgs e) { //clears the stack to help with memory - should never need to undo text changes to this. txtResults.ClearUndo(); } } }