diff --git a/PROMS/Formats/fmtall/VEGPBckStpsall.xml b/PROMS/Formats/fmtall/VEGPBckStpsall.xml index 49b0a794..6e965f6b 100644 Binary files a/PROMS/Formats/fmtall/VEGPBckStpsall.xml and b/PROMS/Formats/fmtall/VEGPBckStpsall.xml differ diff --git a/PROMS/VEPROMS User Interface/dlgManageSecurity.cs b/PROMS/VEPROMS User Interface/dlgManageSecurity.cs index 5da9d00c..f3ab5011 100644 --- a/PROMS/VEPROMS User Interface/dlgManageSecurity.cs +++ b/PROMS/VEPROMS User Interface/dlgManageSecurity.cs @@ -145,6 +145,9 @@ namespace VEPROMS } LoadRefreshGroupUsers(); + + // C2026-004 - messagebox when create group + MessageBox.Show($"{txt} group successfully created.", "Create group", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void tvFolders_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { @@ -187,18 +190,22 @@ namespace VEPROMS //Add a Member to a Group private void addMember_Click(object sender, EventArgs e) { - int groupIndex = cbGroupSelection.SelectedIndex; - string selectedUserID = lstNonMembers.SelectedValue.ToString(); - int selectedUID = UserInfo.GetByUserID(selectedUserID).UID; - GroupInfo gi = myGroupInfoList[groupIndex]; - User selectedUser = User.Get(selectedUID); + // B2026-007 PROMS Security - don't error when add a user to a group but no group selected + if (lstNonMembers.SelectedValue != null) + { + int groupIndex = cbGroupSelection.SelectedIndex; + string selectedUserID = lstNonMembers.SelectedValue.ToString(); + int selectedUID = UserInfo.GetByUserID(selectedUserID).UID; + GroupInfo gi = myGroupInfoList[groupIndex]; + User selectedUser = User.Get(selectedUID); - Membership.MakeMembership(selectedUser, Group.Get(gi.GID), null, ""); - updateMembershipLists(); - lstNonMembers.SelectedIndex = -1; + Membership.MakeMembership(selectedUser, Group.Get(gi.GID), null, ""); + updateMembershipLists(); + lstNonMembers.SelectedIndex = -1; - int index = lstMembers.FindString(selectedUserID); - lstMembers.SetSelected(index, true); + int index = lstMembers.FindString(selectedUserID); + lstMembers.SetSelected(index, true); + } } //Remove a Member From a Group @@ -326,6 +333,7 @@ namespace VEPROMS User u = User.MakeUser("[Enter New UserID]", "", "", "", "", "", "", "", "", "", "", DateTime.Now, ""); frmManageUser frm = new frmManageUser("add"); frm.MyUser = u; + frm.Text = "Enter New UserID"; //C2026-002 Change Title bar on Add/Edit User if (frm.ShowDialog(this) == DialogResult.OK) { u = frm.MyUser; diff --git a/PROMS/VEPROMS User Interface/frmManageUser.cs b/PROMS/VEPROMS User Interface/frmManageUser.cs index 400d8464..f9ac650e 100644 --- a/PROMS/VEPROMS User Interface/frmManageUser.cs +++ b/PROMS/VEPROMS User Interface/frmManageUser.cs @@ -20,7 +20,27 @@ namespace VEPROMS _MyUser = value; SimpleUser su = new SimpleUser(_MyUser); pgUser.SelectedObject = su; - this.Text = string.Format("{0} ({1} {2}) Information",su.UserID,su.FirstName,su.LastName); + + //C2026-002 Change Title bar on Add/Edit User + string tmp; + if (!string.IsNullOrEmpty(su.FirstName) && !string.IsNullOrEmpty(su.LastName)) + { + tmp = $"{su.UserID} ({su.FirstName} {su.LastName}) Information"; + } + else if (!string.IsNullOrEmpty(su.LastName)) + { + tmp = $"{su.UserID} ({su.LastName}) Information"; + } + else if (!string.IsNullOrEmpty(su.FirstName)) + { + tmp = $"{su.UserID} ({su.FirstName}) Information"; + } + else + { + tmp = $"{su.UserID} Information"; + } + + this.Text = tmp; } } private string _Mode; diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index a0340ed4..1f200bb3 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -4749,13 +4749,20 @@ namespace VEPROMS.CSLA.Library if (ActiveFormat.MyStepSectionLayoutData.AddContActTagToHighLevelRNOWhenIncludedOnCAS && IsInRNO && !MyParent.IsInRNO && FormatStepData.TabData.CASPrintMacro != null) { - StepConfig sc = MyConfig as StepConfig; - if (sc != null && sc.Step_CAS == "True") + // B2026-009 needed to make sure parent wasn't a continuous action step type + // the ExcludeFromContActSum is set to False for continuous action + // step types and True for all others + StepConfig psc = MyParent.MyConfig as StepConfig; + if (MyParent.FormatStepData.ExcludeFromContActSum && psc != null && psc.Step_CAS != "True") { - if (FormatStepData.TabData.CASPrintMacro != null) - _MyTab.Text = FormatStepData.TabData.CASPrintMacro + _MyTab.Text; - if (FormatStepData.TabData.CASEditTag != null) - _MyTab.CleanText = FormatStepData.TabData.CASEditTag + _MyTab.CleanText; + StepConfig sc = MyConfig as StepConfig; + if (sc != null && sc.Step_CAS == "True") + { + if (FormatStepData.TabData.CASPrintMacro != null) + _MyTab.Text = FormatStepData.TabData.CASPrintMacro + _MyTab.Text; + if (FormatStepData.TabData.CASEditTag != null) + _MyTab.CleanText = FormatStepData.TabData.CASEditTag + _MyTab.CleanText; + } } } _MyTab.RNOTabWidthAdjust = ((ItemInfo)ActiveParent).FormatStepData.TabData.RNOAdjustTabSize ?? 0; diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.cs b/PROMS/Volian.Controls.Library/DisplayHistory.cs index 1978e024..a190e4f7 100644 --- a/PROMS/Volian.Controls.Library/DisplayHistory.cs +++ b/PROMS/Volian.Controls.Library/DisplayHistory.cs @@ -11,7 +11,7 @@ using System.Text.RegularExpressions; using JR.Utils.GUI.Forms; using Volian.Base.Library; using System.Linq; - + namespace Volian.Controls.Library { public partial class DisplayHistory : UserControl diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs b/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs index 0475e1c8..a7c9d046 100644 Binary files a/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs and b/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs differ diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.resx b/PROMS/Volian.Controls.Library/DisplayHistory.resx index ba42be92..28034095 100644 --- a/PROMS/Volian.Controls.Library/DisplayHistory.resx +++ b/PROMS/Volian.Controls.Library/DisplayHistory.resx @@ -112,13 +112,13 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - <?xml version="1.0" encoding="utf-8"?> + <?xml version="1.0" encoding="utf-16"?> <VlnBorders Rows="4" Columns="3"> <VerticalLines Rows="4" Columns="4"> <Lines> @@ -161,7 +161,31 @@ </HorizontalLines> </VlnBorders> - - Normal{Font:Microsoft Sans Serif, 8.25pt;BackColor:White;TextAlign:LeftTop;Border:Flat,1,Black,Both;} Alternate{BackColor:White;} Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;BackgroundImageLayout:Hide;} Highlight{BackColor:LightCyan;ForeColor:Black;} Focus{BackColor:LightCyan;} Editor{} Search{BackColor:Highlight;ForeColor:HighlightText;} Frozen{BackColor:Beige;} NewRow{ForeColor:GrayText;} EmptyArea{BackColor:Transparent;Border:None,1,Black,Both;} SelectedColumnHeader{} SelectedRowHeader{} GrandTotal{BackColor:Black;ForeColor:White;} Subtotal0{BackColor:ControlDarkDark;ForeColor:White;} Subtotal1{BackColor:ControlDarkDark;ForeColor:White;} Subtotal2{BackColor:ControlDarkDark;ForeColor:White;} Subtotal3{BackColor:ControlDarkDark;ForeColor:White;} Subtotal4{BackColor:ControlDarkDark;ForeColor:White;} Subtotal5{BackColor:ControlDarkDark;ForeColor:White;} FilterEditor{} FirstCustomStyle{} + + <?xml version="1.0" encoding="utf-16"?> +<VlnGridCellShading Rows="4" Columns="3"> + <TableShadingInfo Rows="4" Columns="3"> + <CellShadingColor> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + <string>[A=255, R=255, G=255, B=255]</string> + </CellShadingColor> + </TableShadingInfo> +</VlnGridCellShading> + + Normal{Font:Microsoft Sans Serif, 8.25pt;BackColor:White;TextAlign:LeftTop;Border:Flat,1,Black,Both;} Alternate{BackColor:White;} Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;BackgroundImageLayout:Hide;} Highlight{BackColor:LightCyan;ForeColor:Black;} Focus{BackColor:LightCyan;} Editor{} Search{BackColor:Highlight;ForeColor:HighlightText;} Frozen{BackColor:Beige;} FrozenAlternate{} NewRow{ForeColor:GrayText;} EmptyArea{BackColor:Transparent;Border:None,1,Black,Both;} SelectedColumnHeader{} SelectedRowHeader{} GrandTotal{BackColor:Black;ForeColor:White;} Subtotal0{BackColor:ControlDarkDark;ForeColor:White;} Subtotal1{BackColor:ControlDarkDark;ForeColor:White;} Subtotal2{BackColor:ControlDarkDark;ForeColor:White;} Subtotal3{BackColor:ControlDarkDark;ForeColor:White;} Subtotal4{BackColor:ControlDarkDark;ForeColor:White;} Subtotal5{BackColor:ControlDarkDark;ForeColor:White;} FilterEditor{} FirstCustomStyle{} + + + 17, 17 + \ No newline at end of file diff --git a/PROMS/Volian.Controls.Library/GridItem.cs b/PROMS/Volian.Controls.Library/GridItem.cs index 1a2292cc..4b794d91 100644 --- a/PROMS/Volian.Controls.Library/GridItem.cs +++ b/PROMS/Volian.Controls.Library/GridItem.cs @@ -537,6 +537,10 @@ namespace Volian.Controls.Library // if it is a modify and there will be no usages if it is new (the usage gets created on the save) if (!MyFlexGrid.IsRoTable) { + // B2026-003 we where using a string.format on this inside the while loop - allocating memory each time + // so I move it outside the while loop and did a simple assigment of text + string lookForLinks = @""; + while (r < h) { CellRange cr = MyFlexGrid.GetMergedRange(r, c); @@ -546,8 +550,7 @@ namespace Volian.Controls.Library { // see if there are any links and save these so that any deleted ROs or transitions in the // steprtb can have associated usages/transitions records removed from the database. - string lookFor = string.Format(@""); - MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookFor); + MatchCollection matches = Regex.Matches((string)MyFlexGrid[r, c], lookForLinks); for (int i = matches.Count - 1; i >= 0; i--) { Match m = matches[i]; @@ -569,15 +572,15 @@ namespace Volian.Controls.Library { int tid = int.Parse(myMatch.Groups[2].Value); RtfTransList.Add(tid); - int myIndex = m.Groups[4].Index; - int myLength = m.Groups[4].Length; - if (m.Groups[3].Value != " ") - { - myIndex = m.Groups[3].Index; - myLength += m.Groups[3].Length; - } - string gg = ((string)MyFlexGrid[r, c]).Substring(myIndex, myLength); - if (gg.ToUpper().Contains("(PAGE ~)")) RtfTransPageNumList.Add(tid); // B2020-089, check for upper case Page ~ in case step was upper cased + int myIndex = m.Groups[4].Index; + int myLength = m.Groups[4].Length; + if (m.Groups[3].Value != " ") + { + myIndex = m.Groups[3].Index; + myLength += m.Groups[3].Length; + } + string gg = ((string)MyFlexGrid[r, c]).Substring(myIndex, myLength); + if (gg.ToUpper().Contains("(PAGE ~)")) RtfTransPageNumList.Add(tid); // B2020-089, check for upper case Page ~ in case step was upper cased } } } diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs index 046af0aa..ee6162dc 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs @@ -272,21 +272,24 @@ namespace Volian.Controls.Library for (int i = 0; i < rows * cols; i++) datum.Add("|"); XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data"); - string data = string.Empty; + // B2026-003 use StringBuilder a "using" statement around the RichTextBox for better mememory management + StringBuilder data = new StringBuilder(); foreach (XmlNode xn in nl) { - RichTextBox rtb = new RichTextBox(); - rtb.Rtf = xn.InnerText; - XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute; - string[] rc = xa.InnerText.Split(','); - int r = int.Parse(rc[0]); - int c = int.Parse(rc[1]); - int index = r * cols + c; - datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text); + using (RichTextBox rtb = new RichTextBox()) + { + rtb.Rtf = xn.InnerText; + XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute; + string[] rc = xa.InnerText.Split(','); + int r = int.Parse(rc[0]); + int c = int.Parse(rc[1]); + int index = r * cols + c; + datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text); + } } foreach (string s in datum) - data += s; - return data; + data.Append(s); + return data.ToString(); } private string GetCellFormatString(XmlDocument xd) { diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index c4f41e44..f63be9f6 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -460,6 +460,7 @@ DisplayHistory.cs + Designer DisplayLibDocs.cs