diff --git a/PROMS/Volian.Controls.Library/DisplayApplicability.cs b/PROMS/Volian.Controls.Library/DisplayApplicability.cs index 8b9d460b..48b7003e 100644 --- a/PROMS/Volian.Controls.Library/DisplayApplicability.cs +++ b/PROMS/Volian.Controls.Library/DisplayApplicability.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Linq; using System.Text; using System.Windows.Forms; using VEPROMS.CSLA.Library; @@ -225,8 +226,8 @@ namespace Volian.Controls.Library // return internal and external for the procedure level) if ((!MyItemInfo.IsProcedure && invalidTrans.Count == 0) || IsProcWithNoExternalTrans(MyItemInfo, invalidTrans)) { - // C2021 - 027: Procedure level PC/PC - if (MyItemInfo.IsProcedure && MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ProcAppl) + // C2021 - 027: Procedure level PC/PC + if (MyItemInfo.IsProcedure && MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ProcAppl) { ProcedureConfig sc = MyItemInfo.MyConfig as ProcedureConfig; sc.MasterSlave_Applicability = Volian.Base.Library.BigNum.MakeBigNum(MyApplicability); @@ -284,26 +285,56 @@ namespace Volian.Controls.Library Volian.Base.Library.BigNum MasterSlave_ApplicabilityTmp; StepConfig sc = MyItemInfo.MyConfig as StepConfig; MasterSlave_ApplicabilityTmp = sc.MasterSlave_Applicability; + StringBuilder sb = new StringBuilder(); - ItemInfo startitm = MyItemInfo.FirstSibling; + + ItemInfo startitm = MyItemInfo.FirstSibling; while (startitm != null) { - StepConfig sc2 = startitm.MyConfig as StepConfig; - using (Content cnt = Content.Get(startitm.MyContent.ContentID)) - { - sc2.MasterSlave_Applicability = (MasterSlave_ApplicabilityTmp); - cnt.Config = sc2.ToString(); - cnt.Save(); + + // C2026-023: Check for Transitions when setting Applicability to all for a level + List invalidTrans = WillTransitionsBeValidCommand.Execute(startitm.ItemID, MasterSlave_ApplicabilityTmp.ToString()); + if (IsProcWithNoExternalTrans(startitm, invalidTrans)) + { + StepConfig sc2 = startitm.MyConfig as StepConfig; + using (Content cnt = Content.Get(startitm.MyContent.ContentID)) + { + sc2.MasterSlave_Applicability = (MasterSlave_ApplicabilityTmp); + cnt.Config = sc2.ToString(); + cnt.Save(); + } } + else + { + if (sb.Length == 0) + { + sb.AppendLine("The applicability for some Step(s) cannot be changed due to transition links."); + sb.AppendLine("Applicability settings for these steps will return to original settings when OK is selected."); + sb.AppendLine("Changing the applicability for would invalidate a transition in the following steps:"); + sb.AppendLine(); + } + + foreach (InvalidTransition inv in invalidTrans.Where(x => !x.TgtStep.StartsWith(x.SrcStep))) + { + sb.AppendLine(string.Format("{0} : From {1} to {2}.", startitm.MyTab.CleanTextNoSymbols.Trim(), inv.TgtStep, inv.SrcStep)); + } + + invalidTrans.Clear(); + } + startitm = startitm.GetNext(); } _MyDisplayTabItem.MyStepTabPanel.MyStepTabRibbon.RefreshProcedure(); - } + if (sb.Length > 0) + FlexibleMessageBox.Show(sb.ToString(), "Transitions Affected By Applicability Change"); - // B2021-149: for procedure, only consider external transitions as invalid - private bool IsProcWithNoExternalTrans(ItemInfo ii, List invalidTrans) + + } + + // B2021-149: for procedure, only consider external transitions as invalid + private bool IsProcWithNoExternalTrans(ItemInfo ii, List invalidTrans) { if (invalidTrans.Count == 0) return true; foreach (InvalidTransition iT in invalidTrans)