437 lines
15 KiB
C#
437 lines
15 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;
|
|
|
|
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();
|
|
}
|
|
|
|
// 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();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|