diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs index e5c85cb9..5fea1635 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs @@ -11,6 +11,7 @@ using Volian.Controls.Library; using DevComponents.DotNetBar; using JR.Utils.GUI.Forms; using Volian.Controls.Library; +using System.Linq; namespace VEPROMS { @@ -1799,6 +1800,21 @@ namespace VEPROMS } } + //B2024-074 If only deleting annotations from an individual procedure, verify can check out procedure. + string msgpi = string.Empty; + foreach (ProcedureInfo pi in pil) + { + //LINQ used for 1st check of if statement + //basically check if procedure was already part of a docVersionsFolder + //before checking if procedure was checked out already + //to avoid duplicate messages for checked out procedures + if (!dvil.Any(x => x.Procedures.Any(y => y.ItemID == pi.ItemID)) && !MySessionInfo.CanCheckOutItem(pi.ItemID, CheckOutType.Procedure, ref msgpi)) + { + sbDocVersions.AppendLine(msgpi); + cancelledOut = true; + } + } + if (cancelledOut) { StringBuilder sb = new StringBuilder(); diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/MultiUserExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/MultiUserExt.cs index d9072509..7e525bcc 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/MultiUserExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/MultiUserExt.cs @@ -156,32 +156,38 @@ namespace VEPROMS.CSLA.Library SessionInfoList sil = DataPortal.Fetch(new SessionInfoList.CanCheckOutItemCriteria(objectID, objectType)); if (sil.Count == 0) return true; - if (objectType == CheckOutType.Session) - { - if (sil.Count == 1) - { - OwnerInfoList oil = OwnerInfoList.GetBySessionID(sil[0].SessionID); - if (oil.Count == 0) - return true; - else - { - message = "Export Procedure Set and Import Procedure Set are not available because you have open procedures or documents"; - return false; - } - } - else - { - message = "Export Procedure Set and Import Procedure Set are not available because there are other sessions open in the database"; - return false; - } - } + if (objectType == CheckOutType.Session) + { + if (sil.Count == 1) + { + OwnerInfoList oil = OwnerInfoList.GetBySessionID(sil[0].SessionID); + if (oil.Count == 0) + return true; + else + { + message = "Export Procedure Set and Import Procedure Set are not available because you have open procedures or documents"; + return false; + } + } + else + { + message = "Export Procedure Set and Import Procedure Set are not available because there are other sessions open in the database"; + return false; + } + } bool rv = true; // C2015-022 part of separate windows logic, check the processID instead of the sessionID foreach (SessionInfo si in sil) { if (si.ProcessID != this.ProcessID && objectType == CheckOutType.Procedure) { - message = string.Format("The procedure {0} is already checked out to {1}", ItemInfo.Get(objectID).MyProcedure.DisplayNumber, si.UserID); + //B2024-074 If no Number for Procedure, Display Title + ProcedureInfo tmpproc = ItemInfo.Get(objectID).MyProcedure; + string name = tmpproc.DisplayNumber; + if (string.IsNullOrEmpty(name)) + { name = tmpproc.DisplayText; } + + message = string.Format("The procedure {0} is already checked out to {1}", name, si.UserID); rv = rv && false; } else if (si.ProcessID != this.ProcessID && objectType == CheckOutType.Document) @@ -195,8 +201,16 @@ namespace VEPROMS.CSLA.Library OwnerInfo oi = OwnerInfo.GetBySessionIDandVersionID(si.SessionID, objectID); if (oi == null) message = message + string.Format("The working draft is already checked out to {0}", si.UserID) + Environment.NewLine; - else if(oi.OwnerType == 0) - message = message + string.Format("The procedure {0} is already checked out to {1}", ItemInfo.Get(oi.OwnerItemID).MyProcedure.DisplayNumber, si.UserID) + Environment.NewLine; + else if (oi.OwnerType == 0) + { + //B2024-074 If no Number for Procedure, Display Title + ProcedureInfo tmpproc = ItemInfo.Get(oi.OwnerItemID).MyProcedure; + string name = tmpproc.DisplayNumber; + if (string.IsNullOrEmpty(name)) + { name = tmpproc.DisplayText; } + + message = message + string.Format("The procedure {0} is already checked out to {1}", name, si.UserID) + Environment.NewLine; + } else if (oi.OwnerType == 1) message = message + string.Format("The document {0} is already checked out to {1}", DocumentInfo.Get(oi.OwnerItemID).DocumentEntries[0].MyContent.Text, si.UserID) + Environment.NewLine; else if (oi.OwnerType == 2) @@ -211,7 +225,15 @@ namespace VEPROMS.CSLA.Library if (oi != null) { if (oi.OwnerType == 0) - message = message + string.Format("The procedure {0} is already checked out to {1}", ItemInfo.Get(oi.OwnerItemID).MyProcedure.DisplayNumber, si.UserID) + Environment.NewLine; + { + //B2024-074 If no Number for Procedure, Display Title + ProcedureInfo tmpproc = ItemInfo.Get(oi.OwnerItemID).MyProcedure; + string name = tmpproc.DisplayNumber; + if (string.IsNullOrEmpty(name)) + { name = tmpproc.DisplayText; } + + message = message + string.Format("The procedure {0} is already checked out to {1}", name, si.UserID) + Environment.NewLine; + } else if (oi.OwnerType == 1) message = message + string.Format("The document {0} is already checked out to {1}", DocumentInfo.Get(oi.OwnerItemID).DocumentEntries[0].MyContent.Text, si.UserID) + Environment.NewLine; else if (oi.OwnerType == 2)