diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 439e9bb7..0f44b292 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -2148,7 +2148,7 @@ namespace VEPROMS //C2019-036 View Only mode work with Checked Out Procedures // View Only Mode is no longer checked out, so no longer has an OwnerID // This will keep those tabs from auto-closing based on the timer - if (!myList.Contains(dti.OwnerID) && dti.MyStepTabPanel.MyStepPanel.VwMode != E_ViewMode.View) + if (!myList.Contains(dti.OwnerID) && dti?.MyStepTabPanel?.MyStepPanel?.VwMode != E_ViewMode.View) { MyCloseTabList.PushDTI(dti); } diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs index f2e4ffc2..50ff8877 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs @@ -262,8 +262,10 @@ namespace VEPROMS.CSLA.Library if (dvi.DocVersionAssociations[0].MyROFst.ROFstID != newfstid) { dv.DocVersionAssociations[0].MyROFst = localROFst.GetJustROFst(); - SetAssociationLastCompleted(dv, DateTime.Now.ToString()); } + // B2026-066 moved this out of if statement above + // - was not resetting the datetime and thus not disabling the Update RO Values button and menu item + SetAssociationLastCompleted(dv, DateTime.Now.ToString()); } } diff --git a/PROMS/Volian.Controls.Library/DSOTabPanel.cs b/PROMS/Volian.Controls.Library/DSOTabPanel.cs index 9fe40cd0..cd8f412a 100644 --- a/PROMS/Volian.Controls.Library/DSOTabPanel.cs +++ b/PROMS/Volian.Controls.Library/DSOTabPanel.cs @@ -485,7 +485,15 @@ namespace Volian.Controls.Library _In_DSOTabPanel_Enter = false; _MyDisplayTabControl.SelectedDisplayTabItem = MyDisplayTabItem; // B2018-070 Position the text cursor - Activate MS Word Panel - _MyEdWord.GotoItem(EDWordLib.WdGoToItem.wdGoToObject, EDWordLib.WdGoToDirection.wdGoToNext, 0, null); + try + { + _MyEdWord.GotoItem(EDWordLib.WdGoToItem.wdGoToObject, EDWordLib.WdGoToDirection.wdGoToNext, 0, null); + } + catch + { + //B2026-067 - Do nothing if cannot Position cursor + } + } #endregion #region Public Methods diff --git a/PROMS/Volian.Controls.Library/DisplayRO.cs b/PROMS/Volian.Controls.Library/DisplayRO.cs index ad1fd582..9a839b60 100644 --- a/PROMS/Volian.Controls.Library/DisplayRO.cs +++ b/PROMS/Volian.Controls.Library/DisplayRO.cs @@ -630,10 +630,9 @@ namespace Volian.Controls.Library if (_docVersionInfo != null && fstid != -1 && fstid != MyROFSTLookup.RofstID) { string message = string.Empty; - if (_progressBar?.Text != "Cannot check-out Working Draft" && !MySessionInfo.CanCheckOutItem(_docVersionInfo.VersionID, CheckOutType.DocVersion, ref message)) + if (_progressBar?.Text != "RO Check Paused - Other Users In Set" && !MySessionInfo.CanCheckOutItem(_docVersionInfo.VersionID, CheckOutType.DocVersion, ref message)) { - FlexibleMessageBox.Show(this, message, "Working Draft Has Items Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning); - FinalProgressBarMessage = "Cannot check-out Working Draft"; + FinalProgressBarMessage = "RO Check Paused - Other Users In Set"; } else if (!MySessionInfo.CanCheckOutItem(_docVersionInfo.VersionID, CheckOutType.DocVersion, ref message)) { @@ -708,7 +707,7 @@ namespace Volian.Controls.Library if (tmpROID != null) ExpandNode(ROFSTLookup.FormatRoidKey(tmpROID, true)); //doc version would have updated (if needed) so reset flag - if (_progressBar?.Text != "Cannot check-out Working Draft") + if (_progressBar?.Text != "RO Check Paused - Other Users In Set") { changedDocVersion = false; } diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 3694f618..ce360e31 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -2015,35 +2015,16 @@ namespace Volian.Controls.Library { ReportTitle = string.Format("Search for '{0}'", TextSearchString); - // C2020-009: Search - Allow search 'By Word'. string byWordPrefix = string.Empty; string byWordSuffix = string.Empty; if (cbxByWord.Checked) { - // Generate a prefix & suffix to be used in the sql query around the search string. - // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that - // does not allow the preceding/following text to have a number, '.', letter or other rtf - // commands. If the search string starts/ends with a letter, then use an expression that does not - // find the preceding/following text that is text, i.e. a letter. - if (Regex.IsMatch(TextSearchString, @"^[\d\.]")) // starts with a number or '.' decimal pt - { - byWordPrefix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(TextSearchString, @"^[a-zA-Z]")) // starts with a letter - { - byWordPrefix = @"[^a-zA-Z]"; - } - if (Regex.IsMatch(TextSearchString, @"[\d\.]$")) // ends with a number or decimal - { - byWordSuffix = @"[^0-9a-zA-Z.vbpi:\\-]"; - } - else if (Regex.IsMatch(TextSearchString, @"[a-zA-Z]$")) // ends with a letter - { - byWordSuffix = @"[^a-zA-Z]"; - } + byWordPrefix = GetByWordSettings(TextSearchString, true); + byWordSuffix = GetByWordSettings(TextSearchString, false); } - SearchString = TextSearchString; - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. + + SearchString = TextSearchString; + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString /*.Replace(@"\",@"\u9586?")*/, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, byWordPrefix, byWordSuffix); cmbResultsStyleIndex = 3; // display step text in results @@ -2077,8 +2058,8 @@ namespace Volian.Controls.Library if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - // B2022-031 - added a cbxProcSectSrch to filter out procedure and section titles from global search results. - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, string.Empty, string.Empty); + + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxProcSectSrch.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix, GetByWordSettings(ROSearchList, true), GetByWordSettings(ROSearchList, false)); cmbResultsStyleIndex = 3; // display step text in results } else @@ -2188,7 +2169,52 @@ namespace Volian.Controls.Library } OnSearchComplete(new DisplaySearchEventArgs(TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks))); } + private string GetByWordSettings(string ss, bool checkstart) + { + // C2020-009: Search - Allow search 'By Word'. + + // // Generate a prefix & suffix to be used in the sql query around the search string. + // // If the search string starts (prefix)/ends(suffix) with a number, then use an expression that + // // does not allow the preceding/following text to have a number, '.', letter or other rtf + // // commands. If the search string starts/ends with a letter, then use an expression that does not + // // find the preceding/following text that is text, i.e. a letter. + + if (ss.Length > 0) + { + //checking start + if (checkstart) + { + // starts with a number or '.' decimal pt + if (char.IsNumber(ss, 0) || ss[0] == '.') + { + return @"[^0-9a-zA-Z.vbpi:\\-]"; + } + // starts with a letter + else if (char.IsLetter(ss, 0)) + { + return @"[^a-zA-Z]"; + } + } + //checking end + else + { + // ends with a number or '.' decimal pt + if (char.IsNumber(ss, ss.Length - 1) || ss[ss.Length - 1] == '.') + { + return @"[^0-9a-zA-Z.vbpi:\\-]"; + } + // ends with a letter + else if (char.IsLetter(ss, ss.Length - 1)) + { + return @"[^a-zA-Z]"; + } + } + } + + //default + return string.Empty; + } private void ClearResults() // B2021-103 if no results when RNO only, clear results list. (moved from btnSearch_Click) { if (tabSearchTypes.SelectedTab != tabSearchTypes.Tabs[4]) diff --git a/PROMS/Volian.Controls.Library/EditItem.cs b/PROMS/Volian.Controls.Library/EditItem.cs index 0537312a..eb51397e 100644 --- a/PROMS/Volian.Controls.Library/EditItem.cs +++ b/PROMS/Volian.Controls.Library/EditItem.cs @@ -3355,15 +3355,14 @@ namespace Volian.Controls.Library { ROFSTLookup myLookup = MySection.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MySection.MyDocVersion, null); - string accpgid = accpageid; - - //B2022 - 083: Support Conditional RO Values - ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID(string.Format("<{0}.{1}>", accpgid, multiid), MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); + //B2022-083: Support Conditional RO Values + //C2026-047 first try the RO Lookup with the ascii dash character in the accpageid. If not found, try again with the unicode dash + ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID(string.Format("<{0}.{1}>", accpageid.Replace(@"\u8209?", "-"), multiid), MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); if (roc.value == null) { - accpgid = accpgid.Replace(@"\u8209?", "-"); - roc = myLookup.GetROChildByAccPageID(string.Format("<{0}.{1}>", accpgid, multiid), MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); + // try again but this time with the unicode dash + roc = myLookup.GetROChildByAccPageID(string.Format("<{0}.{1}>", accpageid, multiid), MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); } if (!deflt.StartsWith("[") && !string.IsNullOrEmpty(roc.value) && roc.value.Trim().Length > 0) // don't return val if it's an empty or blank string - jsj 01-28-2019 diff --git a/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs b/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs index 2c3592f9..d10c9202 100644 --- a/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs +++ b/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs @@ -1364,14 +1364,14 @@ namespace Volian.Print.Library private string ROLookup(string accpageid, string multiid, string deflt, string overrideChild) { ROFSTLookup myLookup = MySection.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MySection.MyDocVersion, overrideChild); - - string accpgid = accpageid; - ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID($"<{accpgid}.{multiid}>", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); + + //C2026-047 first try the RO Lookup with the ascii dash character in the accpageid. If not found, try again with the unicode dash + ROFSTLookup.rochild roc = myLookup.GetROChildByAccPageID($"<{accpageid.Replace(@"\u8209?", "-")}.{multiid}>", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); if (roc.value == null) { - accpgid = accpgid.Replace(@"\u8209?", "-"); - roc = myLookup.GetROChildByAccPageID($"<{accpgid}.{multiid}>", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); + // try again but this time with the unicode dash + roc = myLookup.GetROChildByAccPageID($"<{accpageid}.{multiid}>", MySection.MyDocVersion.DocVersionConfig.RODefaults_setpointprefix, MySection.MyDocVersion.DocVersionConfig.RODefaults_graphicsprefix); } if (!deflt.StartsWith("[") && !string.IsNullOrEmpty(roc.value) && roc.value.Trim().Length > 0) // don't return val if it's an empty or blank string - jsj 01-28-2019