diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs index e18920a4..1916f78f 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemInsertExt.cs @@ -539,6 +539,55 @@ namespace VEPROMS.CSLA.Library return this; } } + // F2021-009 Get the number of children levels the passed in parent has + private static int GetMaxSubStepLevel(ItemInfo parent) + { + int maxStepLevel = parent.StepLevel-1; // subtract one to account for HLS - we want the sub-step level + foreach (ItemInfo kid in parent.Steps) + { + if (kid.Steps != null) + maxStepLevel = Math.Max(maxStepLevel, GetMaxSubStepLevel(kid)); + else + maxStepLevel = Math.Max(maxStepLevel,kid.StepLevel-1); // subtract one to account for HLS because we are counting only sub-step levels + } + return maxStepLevel; + } + // F2021-009 Find the number of sub-step levels that the Copied Step has. + // This is used to determin if the Paste will result in exesssive sub-step levels + private static int GetCopyStepMaxLevels(int copyStartID) + { + ItemInfo cpyItem = ItemInfo.Get(copyStartID); + return GetMaxSubStepLevel(cpyItem); + } + // F2021-009 Find the number of defined sequential tabs. We use this to determin the number of defined sub-step levels + public int GetDefinedSubStepCount() + { + return GetDefinedSubStepCount(this); + } + // F2021-009 Find the number of defined sequential tabs. We use this to determin the number of defined sub-step levels + public static int GetDefinedSubStepCount(ItemInfo curStep) + { + int cnt = 0; + cnt = curStep.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.SeqTabFmtList.Count; + return cnt-1; // -1 to account for the high level step level + } + // F2021-009 for PROMS Express, display a message if the Paste of a CopyStep will results in sub-step levels + // greater than what is defined in the format + public static bool PasteStepIsWithinDefinedSubStepLevels(int copyStartID, ItemInfo pasteTarget, bool doingReplace) + { + int largestSubStepLevel = GetCopyStepMaxLevels(copyStartID); + int numDefinedSubstepLevels = GetDefinedSubStepCount(pasteTarget); + largestSubStepLevel += (pasteTarget.StepLevel-((doingReplace)?1:0));// subtract one because HLS is level one, results in actual sub-step level + if (largestSubStepLevel > numDefinedSubstepLevels && pasteTarget.ActiveFormat.PlantFormat.FormatData.Express) + { + string mbMsg = "This will result with more sub-step levels than are defined in" + + "\nthe format and could result in a step that is difficult to follow." + + "\n\nConsider rewriting the step using less sub-steps levels."; + MessageBox.Show(mbMsg, "Paste Step Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; + } + return true; + } // B2016-009 - added a message box explaining to the user that the copyed step will take on the destination type. 16-bit PROMS had also done this way. // - this one is used for Paste Replace with copyed step public static void CheckSourceDestinationType(int copyStartID, ItemInfo itemInfo)