B2016-057 Don’t enable the Approve button if there are rev numbers that need fixed, C2018-008 Redesigned of the user interface to make less confusing, C2018-025 We were not checking for more than one procedure with the same procedure number when generating the consistency check procedure list.

C2018-026 Added a menu option off of the Versions tree node menu, to view the notes added when the approval or workflow stage was done
This commit is contained in:
2018-08-31 18:28:17 +00:00
parent 341a1d3e6a
commit fafaf62b6d
4 changed files with 492 additions and 385 deletions

View File

@@ -50,7 +50,6 @@ namespace VEPROMS
}
}
private ApprovalInfo _MyApproval;
private bool _CheckForMore = false;
private DocVersionInfo _MyDocVersion;
frmVEPROMS _MyFrmVEPROMS = null;
public frmVEPROMS MyFrmVEPROMS
@@ -58,7 +57,8 @@ namespace VEPROMS
get { return _MyFrmVEPROMS; }
set { _MyFrmVEPROMS = value; }
}
public dlgApproveProcedure(DocVersionInfo myDocVersion, frmVEPROMS myFrmVEPROMS)
private bool _initializing = false; // C2018-008 redesign of user interface
public dlgApproveProcedure(DocVersionInfo myDocVersion, frmVEPROMS myFrmVEPROMS) // approve all procedures
{
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
@@ -75,13 +75,13 @@ namespace VEPROMS
_MyApproval.AddProcedure(pi);
}
SetupMyApproval();
//pnlApprove.LocationChanged += new EventHandler(Panel_LocationChanged);
//pnlSelect.LocationChanged += new EventHandler(Panel_LocationChanged);
pnlApprove.SendToBack();
this.Width = pnlApprove.Width + this.Width - this.ClientSize.Width;
// C2018-008 redesign of user interface
_initializing = true;
expAddProcConChk.Expanded = false;
InitializePanelApprove();
InitializePanelSelect();
_initializing = false;
// C2018-006: Disable Consistency Check and Cascade buttons when doing a Approve All
chkCascade2.Enabled = false;
btnCheck2.Enabled = false;
}
private void FlexGridAddEvents()
@@ -161,33 +161,8 @@ namespace VEPROMS
{
Console.WriteLine("fgProcs_ChangeEdit");
}
void Panel_LocationChanged(object sender, EventArgs e)
{
if (pnlApprove.Location.X == 0 && pnlSelect.Location.X == 0)
return;
if (pnlApprove.Location.X == 0)
{
chkViewPDF.Visible = false;
chkSetAllDates.Visible = true;
if (_MyApproval.MyProcedures.Count == 1)
{
this.Text = "Approve " + _MyApproval.MyProcedures[0].ProcInfo.DisplayNumber;
chkViewPDF.Visible = true;
chkSetAllDates.Visible = false;
}
else if (_MyApproval.MyProcedures.Count == _MyDocVersion.Procedures.Count)
this.Text = "Approve All Procedures";
else
this.Text = "Approve Selected Procedures";
InitializePanelApprove();
}
if (pnlSelect.Location.X == 0)
{
this.Text = "Select Procedures To Approve";
InitializePanelSelect();
}
}
private void InitializePanelSelect()
private bool InitializePanelSelect()
{
if (clbMore.Items.Count == 0)
{
@@ -195,6 +170,7 @@ namespace VEPROMS
{
OwnerInfo oi = OwnerInfo.GetByItemID(pi.ItemID, CheckOutType.Procedure);
pi.MyDocVersion.DocVersionConfig.SelectedSlave = _MyDocVersion.DocVersionConfig.SelectedSlave;
if (clbMore.Items.Contains(pi.DisplayNumber)) return false; // C2018-025 cannot load list of procedure - duplicate proc numbers
// B2018-083: check for null MySessionInfo.
if (oi != null && MySessionInfo != null && oi.SessionID != MySessionInfo.SessionID)
{
@@ -211,9 +187,31 @@ namespace VEPROMS
ProcedureInfo pi = GetProcedureInfoByKey(clbMore.Items[i].ToString());
clbMore.SetItemChecked(i, _MyApproval.ProcedureExists(pi));
}
lblMore.Text = string.Format("{0} Procedures, {1} Selected", clbMore.Items.Count, clbMore.CheckedItems.Count);
return true;
}
// C2018-008 redesign of user interface
private void setupLablesAndSwitches()
{
swtbtViewPDF.Value = false;
swtbtViewPDF.Enabled = false;
lblViewPDF.Enabled = false;
if (_MyApproval.MyProcedures.Count == 1)
{
this.Text = "Approve " + _MyApproval.MyProcedures[0].ProcInfo.DisplayNumber;
swtbtViewPDF.Value = false;
swtbtViewPDF.Enabled = true;
lblViewPDF.Enabled = true;
}
else if (_MyApproval.MyProcedures.Count == _MyDocVersion.Procedures.Count)
this.Text = "Approve All Procedures";
else
this.Text = "Approve Selected Procedures";
}
private void InitializePanelApprove()
{
setupLablesAndSwitches(); // C2018-008 redesign of user interface
SetupMyApproval();
}
private Dictionary<string, ProcedureInfo> tmpProcedures = new Dictionary<string, ProcedureInfo>();
@@ -226,7 +224,7 @@ namespace VEPROMS
else
return tmpProcedures[GetDisplayNumberOnly(key)];
}
public dlgApproveProcedure(DocVersionInfo myDocVersion, bool selectSome, frmVEPROMS myFrmVEPROMS)
public dlgApproveProcedure(DocVersionInfo myDocVersion, bool selectSome, frmVEPROMS myFrmVEPROMS) // approve some procedures
{
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
@@ -235,13 +233,14 @@ namespace VEPROMS
InitializeComponent();
FlexGridAddEvents();
_MyApproval.StatusUpdated += new ApprovalStatusChangeEvent(_MyApproval_StatusUpdated);
_CheckForMore = false;
//pnlApprove.LocationChanged += new EventHandler(Panel_LocationChanged);
//pnlSelect.LocationChanged += new EventHandler(Panel_LocationChanged);
pnlSelect.SendToBack();
this.Width = pnlSelect.Width + this.Width - this.ClientSize.Width; ;
// C2018-008 redesign of user interface
expAddProcConChk.Expanded = true;
_initializing = true;
InitializePanelApprove();
InitializePanelSelect();
_initializing = false;
}
public dlgApproveProcedure(ProcedureInfo myProcedure, frmVEPROMS myFrmVEPROMS)
public dlgApproveProcedure(ProcedureInfo myProcedure, frmVEPROMS myFrmVEPROMS) // approve sigle (selected from tree view)
{
MyFrmVEPROMS = myFrmVEPROMS;// Save frmVEPROMS for Import to shutoff SessionPing
_MyApproval = new ApprovalInfo(myFrmVEPROMS);// Save frmVEPROMS for Import to shutoff SessionPing
@@ -251,11 +250,24 @@ namespace VEPROMS
FlexGridAddEvents();
SetupComboBoxes();
_MyApproval.AddProcedure(myProcedure);
//SetupMyApproval();
//pnlApprove.LocationChanged += new EventHandler(Panel_LocationChanged);
//pnlSelect.LocationChanged += new EventHandler(Panel_LocationChanged);
pnlApprove.SendToBack();
this.Width = pnlApprove.Width;
// C2018-008 redesign of user interface
_initializing = true;
expAddProcConChk.Expanded = false;
InitializePanelApprove();
if (!InitializePanelSelect()) //C2018-025 if there are duplicate proc numbers disable the Procedure List panel and display an message - this only needed with approving an indivial procedure from the tree
{
expAddProcConChk.Enabled = false;
MessageBox.Show("This procedure set has two or more procedures with the same procedure number.\n\n" +
"The Procedure List panel had be disabled.\n\n" +
"A Consistency Check cannot be done and the list of procedures in the set cannot be displayed.", "Approve Procedure",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
_initializing = false;
}
private bool ProcedureSetHasDuplicateProcedureNumbers()
{
bool hasDuplicateProcNums = false;
return hasDuplicateProcNums;
}
void _MyApproval_StatusUpdated(ApprovalInfo sender, ApprovalMessageArgs e)
{
@@ -269,8 +281,8 @@ namespace VEPROMS
// lblOldRevNumber.Text = _MyApproval.RevNumber;
//else if (_MyApproval.MyProcedures.Count > 1)
// lblMaxRevNumber1.Text = GetMaxRevNumber();
_MyApproval.RevType = (revTypeBindingSource.Current as RevType).TypeID;
_MyApproval.RevStage = (stageInfoBindingSource.Current as StageInfo).StageID;
_MyApproval.RevType = 1; // C2018-008 redesign of user interface //(revTypeBindingSource.Current as RevType).TypeID;
_MyApproval.RevStage = (stageInfoBindingSource.Current == null) ? 0 : (stageInfoBindingSource.Current as StageInfo).StageID;// C2018-008 redesign of user interface
approvalInfoBindingSource.ResetBindings(false);
approvalProcedureBindingSource.DataSource = _MyApproval.MyProcedures;
approvalProcedureBindingSource.ResetBindings(false);
@@ -313,11 +325,13 @@ namespace VEPROMS
this.DialogResult = DialogResult.None;
this.Cursor = Cursors.Default;
}
private void cmbRevisionType_SelectedIndexChanged(object sender, EventArgs e)
{
RevType rt = cmbRevisionType2.SelectedItem as RevType;
_MyApproval.RevType = rt.TypeID;
}
// C2018-008 redesign of user interface
// -- Note that the Revison Type data source is still connected (revTypeBindingSource) - commented out for documentatin purposes
//private void cmbRevisionType_SelectedIndexChanged(object sender, EventArgs e)
//{
// RevType rt = cmbRevisionType2.SelectedItem as RevType;
// _MyApproval.RevType = rt.TypeID;
//}
private void cmbRevisionStage_SelectedIndexChanged(object sender, EventArgs e)
{
StageInfo si = cmbRevisionStage2.SelectedItem as StageInfo;
@@ -327,7 +341,7 @@ namespace VEPROMS
{
ProcedureInfo pi = GetProcedureInfoByKey(clbMore.Items[e.Index].ToString());
OwnerInfo oi = OwnerInfo.GetByItemID(pi.ItemID, CheckOutType.Procedure);
if (oi != null && oi.SessionID != MySessionInfo.SessionID)
if (oi != null && MySessionInfo != null && oi.SessionID != MySessionInfo.SessionID)
{
string msg = string.Format("Cannot select this procedure for approval.\n\n It is checked out to {0}", oi.SessionUserID);
MessageBox.Show(msg,pi.DisplayNumber);
@@ -335,26 +349,20 @@ namespace VEPROMS
return;
}
if (e.NewValue == CheckState.Checked)
btnOkay.Enabled = true;
else
btnOkay.Enabled = (clbMore.CheckedItems.Count > 1);
btnCheckMore.Enabled = btnOkay.Enabled;
btnReportMore.Enabled = false;
{
btnCheckMore.Enabled = true;
}
btnOkay.Enabled = !_initializing && !_DoingConsistencyCheck;
}
private void btnOkay_Click(object sender, EventArgs e)
{
UpdateMyApproval();
//lbProcs.DataSource = null;
//lbProcs.DataSource = _MyApproval.MyProcedures;
//lbProcs.DisplayMember = "DisplayNumber";
approvalProcedureBindingSource.DataSource = _MyApproval.MyProcedures;
approvalProcedureBindingSource.ResetCurrentItem();
pnlApprove.SendToBack();
btnOkay.Enabled = false;
}
private void UpdateMyApproval()
{
if (clbMore.CheckedItems.Count == 0)
pnlApprove.SendToBack();
SetupComboBoxes();
for (int i = 0; i < clbMore.Items.Count; i++)
{
@@ -371,25 +379,18 @@ namespace VEPROMS
_MyApproval.DeleteProcedure(pi);
}
}
setupLablesAndSwitches(); // C2018-008 redesign of user interface
SetupMyApproval();
}
private void btnCheck_Click(object sender, EventArgs e)
{
//if (chkCascade1.Checked || chkCascade2.Checked)
//{
// MessageBox.Show("cascade");
//}
//else
//{
pnlSelect.SendToBack();
UpdateClbMore();
//}
}
private ItemInfoList _MyItemInfoList;
private void UpdateClbMore()
{
int checkedCount = clbMore.CheckedItems.Count;
int z = int.Parse("0" + lblPhase.Text);
int z = int.Parse("0" + lblPhase.Text);
z++;
lblPhase.Text = z.ToString();
string oldLabel = lblMore.Text;
@@ -403,8 +404,6 @@ namespace VEPROMS
ItemInfoList.ConsistencyCheckUpdated -= new ItemInfoListCCEvent(ItemInfoList_ConsistencyCheckUpdated);
lblMore.Text = oldLabel;
pbMore.Visible = false;
//clbMore.Items.Clear();
//tmpProcedures.Clear();
for (int i = 0; i < clbMore.Items.Count; i++)
{
string info = clbMore.Items[i].ToString();
@@ -413,42 +412,39 @@ namespace VEPROMS
}
foreach (ProcedureInfo npi in _MyItemInfoList)
{
string info = string.Format(npi.MyDifferenceReasons.StartsWith("No ") ? "{0}" : "{0} - ({1})", npi.DisplayNumber, npi.MyDifferenceReasons);
string info = string.Format("{0} - ({1})", npi.DisplayNumber, npi.MyDifferenceReasons);
//checked list box
//int k = clbMore.Items.Add(info);
for (int i = 0; i < clbMore.Items.Count; i++)
{
if (clbMore.Items[i].ToString().StartsWith(npi.DisplayNumber))
if (npi.DisplayNumber.Length == 0 && clbMore.Items[i].ToString().Length == 0 ||
(npi.DisplayNumber.Length > 0 && clbMore.Items[i].ToString().StartsWith(npi.DisplayNumber))) // C2018-008 redesign of user interface
{
clbMore.Items[i] = info;
tmpProcedures[npi.DisplayNumber] = npi;
if (chkCascade2.Checked || chkCascadeMore.Checked)
if (swtbtCascade.Value) // C2018-008 redesign of user interface
clbMore.SetItemChecked(i, true);
break;
}
}
}
// C2018-008 redesign of user interface
for (int i = 0; i < clbMore.Items.Count; i++)
{
if (!clbMore.Items[i].ToString().Contains(" - ("))
clbMore.Items[i] = clbMore.Items[i].ToString() + " - (none)";
}
Application.DoEvents();
clbMore.Enabled = btnAll.Enabled = btnClear.Enabled = true;
//if (clbMore.Items.Count == 0)
//{
// clbMore.Items.Add("None Found");
// clbMore.Enabled = btnAll.Enabled = btnClear.Enabled = false;
//}
lblMore.Text = string.Format("{0} Procedures, {1} Selected", clbMore.Items.Count, clbMore.CheckedItems.Count);
btnReportMore.Enabled = true;
_CheckForMore = true;
if (chkCascade2.Checked || chkCascadeMore.Checked)
if (swtbtCascade.Value) // C2018-008 redesign of user interface
{
if (clbMore.CheckedItems.Count > checkedCount)
{
//btnAll_Click(btnAll, new EventArgs());
UpdateMyApproval();
UpdateClbMore();
}
else
lblPhase.Text = "";
}
}
void ItemInfoList_ConsistencyCheckUpdated(object sender, ItemInfoListCCEventArgs args)
@@ -465,10 +461,6 @@ namespace VEPROMS
}
Application.DoEvents();
}
//private void dtiRevisionDate_ValueChanged(object sender, EventArgs e)
//{
// DevComponents.Editors.DateTimeAdv.DateTimeInput dti = sender as DevComponents.Editors.DateTimeAdv.DateTimeInput;
//}
private void btnAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < clbMore.Items.Count; i++)
@@ -479,29 +471,6 @@ namespace VEPROMS
for (int i = 0; i < clbMore.Items.Count; i++)
clbMore.SetItemChecked(i, false);
}
private void btnCancelMore_Click(object sender, EventArgs e)
{
if (!_CheckForMore)
{
this.Close();
return;
}
//if (_MyApproval.MyProcedures.Count == 1)
// pnlOne.SendToBack();
//else
pnlApprove.SendToBack();
}
//private void tsmiRemove_Click(object sender, EventArgs e)
//{
// ApprovalProcedure ap = approvalProcedureBindingSource.Current as ApprovalProcedure;
// _MyApproval.RemoveProcedure(ap.ProcInfo);
// approvalProcedureBindingSource.DataSource = _MyApproval.MyProcedures;
// approvalProcedureBindingSource.ResetCurrentItem();
// //_MyApproval.RemoveProcedure(lbProcs.SelectedItem as ProcedureInfo);
// //lbProcs.DataSource = null;
// //lbProcs.DataSource = _MyApproval.MyProcedures;
// //lbProcs.DisplayMember = "DisplayNumber";
//}
private int _LastIndex = -1;
private void clbMore_MouseMove(object sender, MouseEventArgs e)
{
@@ -533,7 +502,6 @@ namespace VEPROMS
}
}
}
//sttMore.HideTooltip();
}
private string GetDisplayNumberOnly(string s)
{
@@ -542,23 +510,23 @@ namespace VEPROMS
s = s.Substring(0, d); //B2018-109 remvoed the call ".Trim()". had a procedure that began with a space and was being used as such everywhere else in the approveal logic
return s;
}
private bool _DoingConsistencyCheck = false; // C2018-008 redesign of user interface
private void btnCheckMore_Click(object sender, EventArgs e)
{
UpdateMyApproval();
_DoingConsistencyCheck = true;
if (swtbtCascade.Value)
UpdateMyApproval();
UpdateClbMore();
_DoingConsistencyCheck = false;
btnCheckMore.Enabled = false;
btnOkay.Enabled = !swtbtCascade.Value; // C2018-008 only disable if we automatically selected procedures (cascade during consistancy check)
}
private void btnReportMore_Click(object sender, EventArgs e)
{
OnConsistencyPrintRequest(new ConsistencyReportArgs(Volian.Base.Library.VlnSettings.TemporaryFolder + @"\MyConsistency.pdf", _MyItemInfoList));
}
private void CascadeChecksUpdated(object sender, EventArgs e)
{
DevComponents.DotNetBar.Controls.CheckBoxX cb = sender as DevComponents.DotNetBar.Controls.CheckBoxX;
if (cb != null)
{
chkCascade2.Checked = chkCascadeMore.Checked = cb.Checked;
}
}
private void fgProcs_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
ApprovalProcedure ap = approvalProcedureBindingSource.Current as ApprovalProcedure;
@@ -580,7 +548,7 @@ namespace VEPROMS
int fgmr = fgProcs.MouseRow;
if (e.Row == fgmr && ap.RevDate == dts)
return;
if (chkSetAllDates.Checked)
if (swtbtSetAllRevDates.Value) // C2018-008 redesign of user interface
{
foreach (ApprovalProcedure app in _MyApproval.MyProcedures)
{
@@ -590,14 +558,6 @@ namespace VEPROMS
}
}
}
//private void tsmiAddMore_Click(object sender, EventArgs e)
//{
// pnlSelect.SendToBack();
//}
private void btnModifyList_Click(object sender, EventArgs e)
{
pnlSelect.SendToBack();
}
private void btnIncrement_Click(object sender, EventArgs e)
{
@@ -661,6 +621,30 @@ namespace VEPROMS
}
return rv;
}
private void swtbtCascade_ValueChanged(object sender, EventArgs e) // C2018-008 redesign of user interface
{
if (swtbtCascade.Value)
btnCheckMore.Enabled = true;
}
private void expAddProcConChk_ExpandedChanged(object sender, ExpandedChangeEventArgs e) // C2018-008 redesign of user interface
{
if (expAddProcConChk.Expanded)
this.Size = new Size(this.Size.Width + (expAddProcConChk.Size.Width - expAddProcConChk.TitlePanel.Size.Height), this.Size.Height);
}
private void expAddProcConChk_ExpandedChanging(object sender, ExpandedChangeEventArgs e) // C2018-008 redesign of user interface
{
if (expAddProcConChk.Expanded)
this.Size = new Size(this.Size.Width - (expAddProcConChk.Size.Width - expAddProcConChk.TitlePanel.Size.Height), this.Size.Height);
}
private void fgProcs_AfterDataRefresh(object sender, ListChangedEventArgs e)
{
btnApprove2.Enabled = CanApprove && tsslStatus.Text.Length == 0; // B2016-057 If did un-successful Auto Increament Rev Number, then don't enable Approve (Do Work Flow) button
}
}
public class ApprovalProcedure
{
@@ -715,21 +699,12 @@ namespace VEPROMS
proc.ProcedureConfig.SelectedSlave = proc.MyDocVersion.DocVersionConfig.SelectedSlave;
ProcInfo = proc;
RevNumber = proc.ProcedureConfig.Print_Rev == string.Empty ? "0" : proc.ProcedureConfig.Print_Rev;
//AppRevDate Change
//DateTime revdate;
string sRevDate = proc.ProcedureConfig.Print_RevDate;
if (sRevDate == string.Empty)
sRevDate = DateTime.Now.ToString("M/d/y");
DateTime revDate;
if (!DateTime.TryParse(sRevDate, out revDate)) revDate = DateTime.Now;
RevDate = revDate;
//RevDate = DateTime.Parse(sRevDate);
//RevDate = DateTime.Parse(proc.ProcedureConfig.Print_RevDate);
//if (print_revdate == string.Empty && DateTime.TryParse(RevNumber, out revdate))
// ;
//else
// revdate = DateTime.TryParse(proc.ProcedureConfig.Print_RevDate.Replace("-", "/").Replace("00/", "01/"), out revdate) ? revdate : DateTime.Now;
//RevDate = revdate;
}
}
public class ApprovalMessageArgs : EventArgs
@@ -1021,7 +996,6 @@ namespace VEPROMS
StageInfo nsi = StageInfo.GetJustStage(RevStage);
foreach (ApprovalProcedure ap in MyProcedures) //spin thru looking for updating current revision
{
//RevisionInfo ric = RevisionInfo.GetCurrentByItemID(ap.ProcInfo.ItemID);
RevisionInfo ric = ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave > 0 ? RevisionInfo.GetCurrentByItemIDandUnitID(ap.ProcInfo.ItemID,ap.ProcInfo.MyDocVersion.DocVersionConfig.SelectedSlave) : RevisionInfo.GetCurrentByItemID(ap.ProcInfo.ItemID);
if (ric != null)
{