
Revised user interface and added improvements to overall process Added code to change Batch Refresh to Administrative Tools
774 lines
30 KiB
C#
774 lines
30 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using VEPROMS.CSLA.Library;
|
|
using System.IO;
|
|
using Volian.Controls.Library;
|
|
using DevComponents.DotNetBar;
|
|
|
|
namespace VEPROMS
|
|
{
|
|
public partial class frmBatchRefresh : Form
|
|
{
|
|
private SessionInfo _MySessionInfo;
|
|
public SessionInfo MySessionInfo
|
|
{
|
|
get { return _MySessionInfo; }
|
|
set { _MySessionInfo = value; }
|
|
}
|
|
public frmBatchRefresh()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
private AdminTools adminToolsList;
|
|
private AdminTool selectedAdminTool;
|
|
private void SetUpAdminTools()
|
|
{
|
|
adminToolsList = new AdminTools();
|
|
adminToolsList.Add("Update RO Values", "Update RO Values Guidance", "This allows the user to update referenced objects values for multiple working drafts in a batch mode.", "It is recommended that this be done during off hours.", "WARNING:", true, false, UpdateROValues);
|
|
adminToolsList.Add("Refresh Referenced Objects", "Refresh Referenced Objects Guidance", "Occasionally, referenced objects do not get updated. One cause of this is a failure to allow the RO update to complete.\r\n\r\nThis function will refresh referenced objects (based on the current ROFst) in all procedures selected below whether they were selected individually or as a group via a procedure set.", "If more than one procedure is selected, it is recommened that this be performed during off hours.", "WARNING:", false, false, RefreshReferencedObjects);
|
|
adminToolsList.Add("Refresh Transitions", "Refresh Transitions Guidance", "Occasionally, transitions do not get updated.\r\n\r\nThis function will refresh transitions in all procedures selected below whether they were selected individually or as a group via a procedure set.", "If more than one procedure is selected, it is recommened that this be performed during off hours.", "WARNING:", false, false, RefreshTransitions);
|
|
adminToolsList.Add("Refresh Referenced Objects and Transitions", "Referenced Objects and Transitions Guidance", "Occasionally, referenced objects and transitions do not get updated." + Environment.NewLine + Environment.NewLine + "This function will refresh referenced objects and transitions (based on the current ROFst) in all procedures selected below whether they were selected individually or as a group via a procedure set.", "If more than one procedure is selected, it is recommened that this be performed during off hours.", "WARNING:", false, false, RefreshReferencedObjectsAndTransitions);
|
|
adminToolsList.Add("Delete PDFs", "Delete PDFs Guidance", "It is sometimes desirable to clean up the database by removing extra pdf files. This process allows for this to occur", "", "", true, true, "vesp_DeletePDFs", DeletePDFs);
|
|
cbxAdminTools.DataSource = adminToolsList;
|
|
cbxAdminTools.DisplayMember = "Title";
|
|
cbxAdminTools.SelectedIndex = -1;
|
|
}
|
|
private Dictionary<TreeNode, ProcedureInfo> myProcedures = new Dictionary<TreeNode, ProcedureInfo>();
|
|
private Dictionary<TreeNode, DocVersionInfo> myDocVersions = new Dictionary<TreeNode, DocVersionInfo>();
|
|
private void frmBatchRefresh_Load(object sender, EventArgs e)
|
|
{
|
|
SetUpAdminTools();
|
|
lblWarning.Visible = false;
|
|
}
|
|
private void ResetTV()
|
|
{
|
|
ResetTV(false);
|
|
}
|
|
private void ResetTV(bool noProcs)
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
myTV.Nodes.Clear();
|
|
if (!selectedAdminTool.NoTreeView)
|
|
{
|
|
FolderInfo fi = FolderInfo.GetTop();
|
|
TreeNode tn = myTV.Nodes.Add(fi.Name);
|
|
tn.Tag = fi;
|
|
if (fi.ChildFolderCount > 0)
|
|
LoadChildFolders(fi, tn, noProcs);
|
|
if (myTV.SelectedNode != null)
|
|
myTV.SelectedNode.Expand();
|
|
}
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
private void LoadChildFolders(FolderInfo fi, TreeNode tn, bool noProcs)
|
|
{
|
|
foreach (FolderInfo fic in fi.ChildFolders)
|
|
{
|
|
TreeNode tnc = tn.Nodes.Add(fic.Name);
|
|
tnc.Tag = fic;
|
|
if (fic.ChildFolderCount > 0)
|
|
LoadChildFolders(fic, tnc, noProcs);
|
|
if (fic.FolderDocVersionCount > 0)
|
|
LoadDocVersions(fic, tnc, noProcs);
|
|
}
|
|
}
|
|
private void LoadDocVersions(FolderInfo fic, TreeNode tnc, bool noProcs)
|
|
{
|
|
foreach (DocVersionInfo dvi in fic.FolderDocVersions)
|
|
{
|
|
tnc.Tag = dvi;
|
|
myDocVersions.Add(tnc, dvi);
|
|
if (!noProcs)
|
|
{
|
|
if (dvi.Procedures.Count > 0)
|
|
LoadProcedures(dvi, tnc);
|
|
}
|
|
}
|
|
}
|
|
private void LoadProcedures(DocVersionInfo dvi, TreeNode tnc)
|
|
{
|
|
foreach (ProcedureInfo pi in dvi.Procedures)
|
|
{
|
|
TreeNode tn = tnc.Nodes.Add(string.Format("{0} {1}", pi.DisplayNumber, pi.DisplayText));
|
|
myProcedures.Add(tn, pi);
|
|
tn.Tag = pi;
|
|
}
|
|
}
|
|
private void LoadFolderInfo(FolderInfo f)
|
|
{
|
|
TreeNode tn = myTV.Nodes.Add(f.Name);
|
|
tn.Tag = f;
|
|
if (f.ChildFolderCount > 0)
|
|
foreach (FolderInfo cf in f.ChildFolders)
|
|
LoadFolderInfo(cf);
|
|
}
|
|
private void UpdateROValues()
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
List<DocVersionInfo> dvil = new List<DocVersionInfo>();
|
|
foreach (TreeNode tn in myDocVersions.Keys)
|
|
if (tn.Checked)
|
|
dvil.Add(myDocVersions[tn]);
|
|
DateTime pStart = DateTime.Now;
|
|
txtProcess.AppendText(pStart.ToString("MM/dd/yyyy @ HH:mm"));
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
Application.DoEvents();
|
|
pbProcess.Minimum = 0;
|
|
pbProcess.Maximum = dvil.Count;
|
|
pbProcess.Step = 1;
|
|
while (dvil.Count > 0)
|
|
{
|
|
StringBuilder sbDocVersions = new StringBuilder();
|
|
Queue<DocVersionInfo> dviq = new Queue<DocVersionInfo>();
|
|
foreach (DocVersionInfo dvi in dvil)
|
|
dviq.Enqueue(dvi);
|
|
dvil.Clear();
|
|
while (dviq.Count > 0)
|
|
{
|
|
string msg = string.Empty;
|
|
DocVersionInfo dq = dviq.Dequeue();
|
|
if (!MySessionInfo.CanCheckOutItem(dq.VersionID, CheckOutType.DocVersion, ref msg))
|
|
{
|
|
dvil.Add(dq);
|
|
sbDocVersions.AppendLine(msg);
|
|
}
|
|
else
|
|
{
|
|
ProcessUpdateROValues(dq);
|
|
pbProcess.PerformStep();
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
DateTime pEnd = DateTime.Now;
|
|
txtProcess.AppendText(pEnd.ToString("MM/dd/yyyy @ HH:mm"));
|
|
Application.DoEvents();
|
|
if (dvil.Count > 0)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.AppendLine("The batch update process was not usccessful for all working drafts selected.");
|
|
sb.AppendLine("The following working drafts were not able to be refreshed...");
|
|
sb.AppendLine();
|
|
sb.AppendLine(sbDocVersions.ToString());
|
|
sb.AppendLine();
|
|
sb.AppendLine("If you want to update these working drafts, please contact the respective users and have them close any procedures in the working draft.");
|
|
sb.AppendLine("Once this is complete you can continue the process otherwise you may terminate the process immediately.");
|
|
sb.AppendLine();
|
|
sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?");
|
|
frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut();
|
|
frmCO.MySessionInfo = MySessionInfo;
|
|
//frmCO.CheckedOutProcedures = dvil;
|
|
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height);
|
|
frmCO.Show(this);
|
|
while (!this.Visible)
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
this.Cursor = Cursors.Default;
|
|
MessageBox.Show(string.Format("{0} Completed", selectedAdminTool.Title), string.Format("{0} Complete", selectedAdminTool.Title));
|
|
}
|
|
private void RefreshReferencedObjects()
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
List<ProcedureInfo> pil = new List<ProcedureInfo>();
|
|
foreach (TreeNode tn in myProcedures.Keys)
|
|
if (tn.Checked)
|
|
pil.Add(myProcedures[tn]);
|
|
//PopulateTransitionInfoLists(pil);
|
|
DateTime pStart = DateTime.Now;
|
|
txtProcess.AppendText(pStart.ToString("MM/dd/yyyy @ HH:mm"));
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
Application.DoEvents();
|
|
pbProcess.Minimum = 0;
|
|
pbProcess.Maximum = pil.Count;
|
|
pbProcess.Step = 1;
|
|
while (pil.Count > 0)
|
|
{
|
|
ContentInfo.StaticContentInfoChange += new StaticContentInfoEvent(ContentInfo_StaticContentInfoChange);
|
|
StringBuilder sbProcs = new StringBuilder();
|
|
Queue<ProcedureInfo> piq = new Queue<ProcedureInfo>();
|
|
foreach (ProcedureInfo pi in pil)
|
|
piq.Enqueue(pi);
|
|
pil.Clear();
|
|
while (piq.Count > 0)
|
|
{
|
|
string msg = string.Empty;
|
|
ProcedureInfo pq = piq.Dequeue();
|
|
if (!MySessionInfo.CanCheckOutItem(pq.ItemID, CheckOutType.Procedure, ref msg))
|
|
{
|
|
pil.Add(pq);
|
|
sbProcs.AppendLine(msg);
|
|
}
|
|
else
|
|
{
|
|
RefreshProcedureReferencedObjects(pq);
|
|
pbProcess.PerformStep();
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
ContentInfo.StaticContentInfoChange -= new StaticContentInfoEvent(ContentInfo_StaticContentInfoChange);
|
|
DateTime pEnd = DateTime.Now;
|
|
txtProcess.AppendText(pEnd.ToString("MM/dd/yyyy @ HH:mm"));
|
|
Application.DoEvents();
|
|
if (pil.Count > 0)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.AppendLine("The batch refresh process was not usccessful for all procedures selected.");
|
|
sb.AppendLine("The following procedures were not able to be refreshed...");
|
|
sb.AppendLine();
|
|
sb.AppendLine(sbProcs.ToString());
|
|
sb.AppendLine();
|
|
sb.AppendLine("If you want to refresh these prcoedures, please contact the respective users and have them close the procedures.");
|
|
sb.AppendLine("Once this is complete you can continue the process otherwise you may terminate the process immediately.");
|
|
sb.AppendLine();
|
|
sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?");
|
|
frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut();
|
|
frmCO.MySessionInfo = MySessionInfo;
|
|
frmCO.CheckedOutProcedures = pil;
|
|
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height);
|
|
frmCO.Show(this);
|
|
while (!this.Visible)
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
this.Cursor = Cursors.Default;
|
|
MessageBox.Show(string.Format("{0} Completed", selectedAdminTool.Title), string.Format("{0} Complete", selectedAdminTool.Title));
|
|
}
|
|
private void RefreshTransitions()
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
List<ProcedureInfo> pil = new List<ProcedureInfo>();
|
|
foreach (TreeNode tn in myProcedures.Keys)
|
|
if (tn.Checked)
|
|
pil.Add(myProcedures[tn]);
|
|
//PopulateTransitionInfoLists(pil);
|
|
DateTime pStart = DateTime.Now;
|
|
txtProcess.AppendText(pStart.ToString("MM/dd/yyyy @ HH:mm"));
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
Application.DoEvents();
|
|
pbProcess.Minimum = 0;
|
|
pbProcess.Maximum = pil.Count;
|
|
pbProcess.Step = 1;
|
|
while (pil.Count > 0)
|
|
{
|
|
ContentInfo.StaticContentInfoChange += new StaticContentInfoEvent(ContentInfo_StaticContentInfoChange);
|
|
StringBuilder sbProcs = new StringBuilder();
|
|
Queue<ProcedureInfo> piq = new Queue<ProcedureInfo>();
|
|
foreach (ProcedureInfo pi in pil)
|
|
piq.Enqueue(pi);
|
|
pil.Clear();
|
|
while (piq.Count > 0)
|
|
{
|
|
string msg = string.Empty;
|
|
ProcedureInfo pq = piq.Dequeue();
|
|
if (!MySessionInfo.CanCheckOutItem(pq.ItemID, CheckOutType.Procedure, ref msg))
|
|
{
|
|
pil.Add(pq);
|
|
sbProcs.AppendLine(msg);
|
|
}
|
|
else
|
|
{
|
|
RefreshProcedureTransitions(pq);
|
|
pbProcess.PerformStep();
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
ContentInfo.StaticContentInfoChange -= new StaticContentInfoEvent(ContentInfo_StaticContentInfoChange);
|
|
DateTime pEnd = DateTime.Now;
|
|
txtProcess.AppendText(pEnd.ToString("MM/dd/yyyy @ HH:mm"));
|
|
Application.DoEvents();
|
|
if (pil.Count > 0)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.AppendLine("The batch refresh process was not usccessful for all procedures selected.");
|
|
sb.AppendLine("The following procedures were not able to be refreshed...");
|
|
sb.AppendLine();
|
|
sb.AppendLine(sbProcs.ToString());
|
|
sb.AppendLine();
|
|
sb.AppendLine("If you want to refresh these prcoedures, please contact the respective users and have them close the procedures.");
|
|
sb.AppendLine("Once this is complete you can continue the process otherwise you may terminate the process immediately.");
|
|
sb.AppendLine();
|
|
sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?");
|
|
frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut();
|
|
frmCO.MySessionInfo = MySessionInfo;
|
|
frmCO.CheckedOutProcedures = pil;
|
|
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height);
|
|
frmCO.Show(this);
|
|
while (!this.Visible)
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
this.Cursor = Cursors.Default;
|
|
MessageBox.Show(string.Format("{0} Completed", selectedAdminTool.Title), string.Format("{0} Complete", selectedAdminTool.Title));
|
|
}
|
|
private void RefreshReferencedObjectsAndTransitions()
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
List<ProcedureInfo> pil = new List<ProcedureInfo>();
|
|
foreach (TreeNode tn in myProcedures.Keys)
|
|
if (tn.Checked)
|
|
pil.Add(myProcedures[tn]);
|
|
//PopulateTransitionInfoLists(pil);
|
|
DateTime pStart = DateTime.Now;
|
|
txtProcess.AppendText(pStart.ToString("MM/dd/yyyy @ HH:mm"));
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
Application.DoEvents();
|
|
pbProcess.Minimum = 0;
|
|
pbProcess.Maximum = pil.Count;
|
|
pbProcess.Step = 1;
|
|
while (pil.Count > 0)
|
|
{
|
|
ContentInfo.StaticContentInfoChange += new StaticContentInfoEvent(ContentInfo_StaticContentInfoChange);
|
|
StringBuilder sbProcs = new StringBuilder();
|
|
Queue<ProcedureInfo> piq = new Queue<ProcedureInfo>();
|
|
foreach (ProcedureInfo pi in pil)
|
|
piq.Enqueue(pi);
|
|
pil.Clear();
|
|
while (piq.Count > 0)
|
|
{
|
|
string msg = string.Empty;
|
|
ProcedureInfo pq = piq.Dequeue();
|
|
if (!MySessionInfo.CanCheckOutItem(pq.ItemID, CheckOutType.Procedure, ref msg))
|
|
{
|
|
pil.Add(pq);
|
|
sbProcs.AppendLine(msg);
|
|
}
|
|
else
|
|
{
|
|
RefreshProcedureTransitions(pq);
|
|
RefreshProcedureReferencedObjects(pq);
|
|
pbProcess.PerformStep();
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
ContentInfo.StaticContentInfoChange -= new StaticContentInfoEvent(ContentInfo_StaticContentInfoChange);
|
|
DateTime pEnd = DateTime.Now;
|
|
txtProcess.AppendText(pEnd.ToString("MM/dd/yyyy @ HH:mm"));
|
|
Application.DoEvents();
|
|
if (pil.Count > 0)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.AppendLine("The batch refresh process was not usccessful for all procedures selected.");
|
|
sb.AppendLine("The following procedures were not able to be refreshed...");
|
|
sb.AppendLine();
|
|
sb.AppendLine(sbProcs.ToString());
|
|
sb.AppendLine();
|
|
sb.AppendLine("If you want to refresh these prcoedures, please contact the respective users and have them close the procedures.");
|
|
sb.AppendLine("Once this is complete you can continue the process otherwise you may terminate the process immediately.");
|
|
sb.AppendLine();
|
|
sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?");
|
|
frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut();
|
|
frmCO.MySessionInfo = MySessionInfo;
|
|
frmCO.CheckedOutProcedures = pil;
|
|
frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height);
|
|
frmCO.Show(this);
|
|
while (!this.Visible)
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
this.Cursor = Cursors.Default;
|
|
MessageBox.Show(string.Format("{0} Completed", selectedAdminTool.Title), string.Format("{0} Complete", selectedAdminTool.Title));
|
|
}
|
|
private void DeletePDFs()
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
DateTime pStart = DateTime.Now;
|
|
txtProcess.AppendText(pStart.ToString("MM/dd/yyyy @ HH:mm"));
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
Application.DoEvents();
|
|
int affectedRows = ExecuteStoredProcedure.Execute(selectedAdminTool.StoredProcedure);
|
|
txtProcess.AppendText(string.Format("Deleted {0} PDFs", affectedRows));
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
DateTime pEnd = DateTime.Now;
|
|
txtProcess.AppendText(pEnd.ToString("MM/dd/yyyy @ HH:mm"));
|
|
Application.DoEvents();
|
|
this.Cursor = Cursors.Default;
|
|
MessageBox.Show(string.Format("{0} Completed", selectedAdminTool.Title), string.Format("{0} Complete", selectedAdminTool.Title));
|
|
}
|
|
private void btnRefresh_Click(object sender, EventArgs e)
|
|
{
|
|
if (btnRefresh.Text == "NO OPTION SELECTED")
|
|
{
|
|
MessageBox.Show("You must select an option under the Option panel", btnRefresh.Text);
|
|
return;
|
|
}
|
|
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(60000);
|
|
now = long.Parse(DateTime.Now.ToString("yyyyMMddHHmm"));
|
|
}
|
|
}
|
|
selectedAdminTool.Execute();
|
|
}
|
|
private void ProcessUpdateROValues(DocVersionInfo dq)
|
|
{
|
|
InitialProgressBarMessage = string.Format("Updating ROs for {0}", dq.MyFolder.Name);
|
|
if (dq.DocVersionAssociationCount < 1)
|
|
{
|
|
ProgressBar.ColorTable = eProgressBarItemColor.Error;
|
|
FinalProgressBarMessage = "No ROs associated";
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText("Error Updating ro.fst. No associated ro.fst");
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
return;
|
|
}
|
|
ROFstInfo roFstInfo = dq.DocVersionAssociations[0].MyROFst;
|
|
string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst";
|
|
if (!File.Exists(rofstPath))
|
|
{
|
|
ProgressBar.ColorTable = eProgressBarItemColor.Error;
|
|
FinalProgressBarMessage = "No existing RO.FST";
|
|
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(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
return;
|
|
}
|
|
FileInfo fiRofst = new FileInfo(rofstPath);
|
|
if (roFstInfo.DTS == fiRofst.LastWriteTimeUtc)
|
|
{
|
|
ProgressBar.ColorTable = eProgressBarItemColor.Paused;
|
|
FinalProgressBarMessage = "RO.FST up to date";
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText("ro.fst files are same for path " + roFstInfo.MyRODb.FolderPath + ", import of that ro.fst will not be done");
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
return;
|
|
}
|
|
if (roFstInfo.DTS > fiRofst.LastWriteTimeUtc)
|
|
{
|
|
ProgressBar.ColorTable = eProgressBarItemColor.Error;
|
|
FinalProgressBarMessage = "RO.FST is older";
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText("Cannot copy older ro.fst from " + roFstInfo.MyRODb.FolderPath + ", import of that ro.fst will not be done");
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
return;
|
|
}
|
|
Cursor = Cursors.WaitCursor;
|
|
using (DocVersion dv = DocVersion.Get(dq.VersionID))
|
|
{
|
|
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
|
ROFst newrofst = ROFstInfo.UpdateRoFst(roFstInfo.MyRODb, dv.DocVersionAssociations[0], dv, roFstInfo, DoProgressBarRefresh);
|
|
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
|
}
|
|
Cursor = Cursors.Default;
|
|
ProgressBar.ColorTable = eProgressBarItemColor.Normal;
|
|
FinalProgressBarMessage = "ROs values updated";
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText("ROs values updated");
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
return;
|
|
}
|
|
private void RefreshProcedureReferencedObjects(ProcedureInfo pq)
|
|
{
|
|
DateTime start = DateTime.Now;
|
|
myFixes = new StringBuilder();
|
|
ProcedureInfo.ResetROCounters();
|
|
ProcedureInfo.RefreshReferenceObjects(pq);
|
|
TimeSpan ts = DateTime.Now - start;
|
|
txtProcess.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}", Environment.NewLine, pq.DisplayNumber, ProcedureInfo.ROCheckCount, ProcedureInfo.ROFixCount, ts.TotalSeconds));
|
|
if (myFixes.Length > 0)
|
|
{
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtResults.AppendText(myFixes.ToString());
|
|
txtResults.AppendText(Environment.NewLine);
|
|
}
|
|
}
|
|
//private TransitionInfoList transitionsToDisconnected;
|
|
//private TransitionInfoList transitionsToNonEditable;
|
|
private void RefreshProcedureTransitions(ProcedureInfo pq)
|
|
{
|
|
DateTime start = DateTime.Now;
|
|
myFixes = new StringBuilder();
|
|
ProcedureInfo.ResetTranCounters();
|
|
ProcedureInfo.RefreshTransitions(pq);//, transitionsToDisconnected, transitionsToNonEditable);
|
|
TimeSpan ts = DateTime.Now - start;
|
|
txtProcess.AppendText(string.Format("Procedure: {1}{0}Checked {2} Transitions{0}Fixed {3} Transitions{0}Elapsed Seconds:{4}{0}", Environment.NewLine, pq.DisplayNumber, ProcedureInfo.TranCheckCount, ProcedureInfo.TranFixCount, ts.TotalSeconds));
|
|
if (myFixes.Length > 0)
|
|
{
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtResults.AppendText(myFixes.ToString());
|
|
txtResults.AppendText(Environment.NewLine);
|
|
}
|
|
}
|
|
public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
|
|
{
|
|
return VlnFlexGrid.ROTableUpdate(sender, args);
|
|
}
|
|
private void PopulateTransitionInfoLists(List<ProcedureInfo> pil)
|
|
{
|
|
Dictionary<int, int> dic = new Dictionary<int, int>();
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (ProcedureInfo pi in pil)
|
|
if (!dic.ContainsKey(pi.MyDocVersion.VersionID))
|
|
{
|
|
dic.Add(pi.MyDocVersion.VersionID, pi.MyDocVersion.VersionID);
|
|
sb.Append(sb.Length == 0 ? pi.MyDocVersion.VersionID.ToString() : "," + pi.MyDocVersion.VersionID.ToString());
|
|
}
|
|
txtProcess.AppendText("Preparing to process...");
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
Application.DoEvents();
|
|
//transitionsToDisconnected = TransitionInfoList.GetTransitionsToDisconnected(sb.ToString());
|
|
//transitionsToNonEditable = TransitionInfoList.GetTransitionsToNonEditable(sb.ToString());
|
|
}
|
|
private void ProgressBarShowText()
|
|
{
|
|
pbProcess.Refresh();
|
|
int percent = (int)(((double)(pbProcess.Value - pbProcess.Minimum) /
|
|
(double)(pbProcess.Maximum - pbProcess.Minimum)) * 100);
|
|
using (Graphics gr = pbProcess.CreateGraphics())
|
|
{
|
|
gr.DrawString(percent.ToString() + "%",
|
|
SystemFonts.DefaultFont,
|
|
Brushes.Black,
|
|
new PointF(pbProcess.Width / 2 - (gr.MeasureString(percent.ToString() + "%",
|
|
SystemFonts.DefaultFont).Width / 2.0F),
|
|
pbProcess.Height / 2 - (gr.MeasureString(percent.ToString() + "%",
|
|
SystemFonts.DefaultFont).Height / 2.0F)));
|
|
}
|
|
Application.DoEvents();
|
|
}
|
|
StringBuilder myFixes;
|
|
void ContentInfo_StaticContentInfoChange(object sender, StaticContentInfoEventArgs args)
|
|
{
|
|
if (args.Type == "TX")
|
|
{
|
|
if(args.NewValue.StartsWith("Reason for Change:"))
|
|
myFixes.AppendLine(string.Format("Fixed Transition for {1}{0}Old Text: {2}{0}{3}{0}", Environment.NewLine, (sender as ItemInfo).ShortPath, args.OldValue, args.NewValue));
|
|
else
|
|
myFixes.AppendLine(string.Format("Fixed Transition for {1}{0}Old Text: {2}{0}New Text: {3}{0}", Environment.NewLine, (sender as ItemInfo).ShortPath, args.OldValue, args.NewValue));
|
|
}
|
|
else if (args.Type == "RO")
|
|
myFixes.AppendLine(string.Format("Fixed Referenced Object for {1}{0}Old Text: {2}{0}New Text: {3}{0}", Environment.NewLine, (sender as ItemInfo).ShortPath, args.OldValue, args.NewValue));
|
|
}
|
|
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 void myTV_AfterCheck(object sender, TreeViewEventArgs e)
|
|
{
|
|
if (e.Action != TreeViewAction.Unknown)
|
|
if(e.Node.Nodes.Count > 0)
|
|
CheckChildNodes(e.Node, e.Node.Checked);
|
|
}
|
|
private void CheckChildNodes(TreeNode treeNode, bool ischecked)
|
|
{
|
|
foreach (TreeNode tn in treeNode.Nodes)
|
|
{
|
|
tn.Checked = ischecked;
|
|
if (tn.Nodes.Count > 0)
|
|
CheckChildNodes(tn, ischecked);
|
|
}
|
|
}
|
|
private ProgressBarItem _ProgressBar = null;
|
|
public ProgressBarItem ProgressBar
|
|
{
|
|
get { return _ProgressBar; }
|
|
set
|
|
{
|
|
_ProgressBar = value;
|
|
_ProgressBar.TextVisible = true;
|
|
}
|
|
}
|
|
private void DoProgressBarRefresh(int value, int max, string text)
|
|
{
|
|
if (ProgressBar == null) return;
|
|
ProgressBar.Value = value;
|
|
ProgressBar.Maximum = max;
|
|
ProgressBar.Text = text;
|
|
Application.DoEvents();
|
|
}
|
|
private string InitialProgressBarMessage
|
|
{
|
|
set
|
|
{
|
|
if (ProgressBar == null) return;
|
|
ProgressBar.Value = 0;
|
|
ProgressBar.Maximum = 100;
|
|
ProgressBar.Text = value;
|
|
txtProcess.AppendText(value);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
private string FinalProgressBarMessage
|
|
{
|
|
set
|
|
{
|
|
if (ProgressBar == null) return;
|
|
ProgressBar.Value = 100;
|
|
ProgressBar.Maximum = 100;
|
|
ProgressBar.Text = value;
|
|
txtProcess.AppendText(value);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
txtProcess.AppendText(Environment.NewLine);
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
private void cbxAdminTools_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
selectedAdminTool = cbxAdminTools.SelectedItem as AdminTool;
|
|
if (selectedAdminTool == null)
|
|
{
|
|
lblCaption.Text = string.Empty;
|
|
lblDescription.Text = string.Empty;
|
|
lblWarning.Text = string.Empty;
|
|
myTV.Nodes.Clear();
|
|
btnRefresh.Text = "NO OPTION SELECTED";
|
|
}
|
|
else
|
|
{
|
|
lblCaption.Text = selectedAdminTool.Caption;
|
|
lblDescription.Text = selectedAdminTool.Description;
|
|
lblWarning.Text = selectedAdminTool.WarningPrefix + " " + selectedAdminTool.Warning;
|
|
lblWarning.Visible = selectedAdminTool.Warning.Length > 0;
|
|
ResetTV(selectedAdminTool.NoProcedures);
|
|
btnRefresh.Text = selectedAdminTool.Title;
|
|
}
|
|
}
|
|
private void chkLater_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
pnlLater.Enabled = chkLater.Checked;
|
|
}
|
|
}
|
|
public class AdminTool
|
|
{
|
|
private string _Title;
|
|
public string Title
|
|
{
|
|
get { return _Title; }
|
|
set { _Title = value; }
|
|
}
|
|
private string _Caption;
|
|
public string Caption
|
|
{
|
|
get { return _Caption; }
|
|
set { _Caption = value; }
|
|
}
|
|
private string _Description;
|
|
public string Description
|
|
{
|
|
get { return _Description; }
|
|
set { _Description = value; }
|
|
}
|
|
private string _Warning;
|
|
public string Warning
|
|
{
|
|
get { return _Warning; }
|
|
set { _Warning = value; }
|
|
}
|
|
private string _WarningPrefix;
|
|
public string WarningPrefix
|
|
{
|
|
get { return _WarningPrefix; }
|
|
set { _WarningPrefix = value; }
|
|
}
|
|
private bool _NoProcedures;
|
|
public bool NoProcedures
|
|
{
|
|
get { return _NoProcedures; }
|
|
set { _NoProcedures = value; }
|
|
}
|
|
private bool _NoTreeView;
|
|
public bool NoTreeView
|
|
{
|
|
get { return _NoTreeView; }
|
|
set { _NoTreeView = value; }
|
|
}
|
|
private AdminToolExecute _MyExecute;
|
|
public AdminToolExecute MyExecute
|
|
{
|
|
get { return _MyExecute; }
|
|
set { _MyExecute = value; }
|
|
}
|
|
private string _StoredProcedure;
|
|
public string StoredProcedure
|
|
{
|
|
get { return _StoredProcedure; }
|
|
set { _StoredProcedure = value; }
|
|
}
|
|
public void Execute()
|
|
{
|
|
if (MyExecute != null) MyExecute();
|
|
}
|
|
public AdminTool()
|
|
{
|
|
}
|
|
public AdminTool(string title, string caption, string description, string warning, string warningPrefix, bool noProcedures, bool noTreeView, AdminToolExecute myExecute)
|
|
{
|
|
_Title = title;
|
|
_Caption = caption;
|
|
_Description = description;
|
|
_Warning = warning;
|
|
_WarningPrefix = warningPrefix;
|
|
_NoProcedures = noProcedures;
|
|
_NoTreeView = noTreeView;
|
|
_MyExecute = myExecute;
|
|
}
|
|
public AdminTool(string title, string caption, string description, string warning, string warningPrefix, bool noProcedures, bool noTreeView, string storedProcedure, AdminToolExecute myExecute)
|
|
{
|
|
_Title = title;
|
|
_Caption = caption;
|
|
_Description = description;
|
|
_Warning = warning;
|
|
_WarningPrefix = warningPrefix;
|
|
_NoProcedures = noProcedures;
|
|
_NoTreeView = noTreeView;
|
|
_StoredProcedure = storedProcedure;
|
|
_MyExecute = myExecute;
|
|
}
|
|
}
|
|
public class AdminTools : List<AdminTool>
|
|
{
|
|
public void Add(string title, string caption, string description, string warning, string warningPrefix, bool noProcedures, bool noTreeView, AdminToolExecute myExecute)
|
|
{
|
|
base.Add(new AdminTool(title, caption, description, warning, warningPrefix, noProcedures, noTreeView, myExecute));
|
|
}
|
|
public void Add(string title, string caption, string description, string warning, string warningPrefix, bool noProcedures, bool noTreeView, string storedProcedure, AdminToolExecute myExecute)
|
|
{
|
|
base.Add(new AdminTool(title, caption, description, warning, warningPrefix, noProcedures, noTreeView, storedProcedure, myExecute));
|
|
}
|
|
}
|
|
public delegate void AdminToolExecute();
|
|
} |