diff --git a/PROMS/Formats/fmtall/FNPCASall.xml b/PROMS/Formats/fmtall/FNPCASall.xml index af8aa1db..8afc0ba9 100644 Binary files a/PROMS/Formats/fmtall/FNPCASall.xml and b/PROMS/Formats/fmtall/FNPCASall.xml differ diff --git a/PROMS/Formats/fmtall/FNPDEVall.xml b/PROMS/Formats/fmtall/FNPDEVall.xml index e7748639..5ce54f99 100644 Binary files a/PROMS/Formats/fmtall/FNPDEVall.xml and b/PROMS/Formats/fmtall/FNPDEVall.xml differ diff --git a/PROMS/Formats/fmtall/FNPEBKall.xml b/PROMS/Formats/fmtall/FNPEBKall.xml index aa0d7830..30d5ff99 100644 Binary files a/PROMS/Formats/fmtall/FNPEBKall.xml and b/PROMS/Formats/fmtall/FNPEBKall.xml differ diff --git a/PROMS/Formats/fmtall/FNPSAM1all.xml b/PROMS/Formats/fmtall/FNPSAM1all.xml index 0e1b5101..4198c0db 100644 Binary files a/PROMS/Formats/fmtall/FNPSAM1all.xml and b/PROMS/Formats/fmtall/FNPSAM1all.xml differ diff --git a/PROMS/Formats/fmtall/FNP_00all.xml b/PROMS/Formats/fmtall/FNP_00all.xml index ec446118..3ae14422 100644 Binary files a/PROMS/Formats/fmtall/FNP_00all.xml and b/PROMS/Formats/fmtall/FNP_00all.xml differ diff --git a/PROMS/Formats/fmtall/FNP_01all.xml b/PROMS/Formats/fmtall/FNP_01all.xml index 3a42b1bd..a8c6dda6 100644 Binary files a/PROMS/Formats/fmtall/FNP_01all.xml and b/PROMS/Formats/fmtall/FNP_01all.xml differ diff --git a/PROMS/Formats/fmtall/FNPall.xml b/PROMS/Formats/fmtall/FNPall.xml index 75dfa919..d3295de4 100644 Binary files a/PROMS/Formats/fmtall/FNPall.xml and b/PROMS/Formats/fmtall/FNPall.xml differ diff --git a/PROMS/Formats/fmtall/fnpnmpall.xml b/PROMS/Formats/fmtall/fnpnmpall.xml index 8c75ffc0..7912aa34 100644 Binary files a/PROMS/Formats/fmtall/fnpnmpall.xml and b/PROMS/Formats/fmtall/fnpnmpall.xml differ diff --git a/PROMS/ReferencedObjects/Exe/RefObj/ROEditor/RODefFrm.cs b/PROMS/ReferencedObjects/Exe/RefObj/ROEditor/RODefFrm.cs index f2dc6f34..e60a329c 100644 --- a/PROMS/ReferencedObjects/Exe/RefObj/ROEditor/RODefFrm.cs +++ b/PROMS/ReferencedObjects/Exe/RefObj/ROEditor/RODefFrm.cs @@ -1584,7 +1584,7 @@ namespace ROEditor if (i + 1 < InUseList.Count) inuserecs = inuserecs + " "; } } - if (inuserecs != origFieldsInUse) + if ((inuserecs ?? "") != (origFieldsInUse ?? "")) return true; @@ -1599,7 +1599,7 @@ namespace ROEditor if (i + 1 < InUseApplcList.Count) applicfieldrecs = applicfieldrecs + " "; } } - if (applicfieldrecs != origApplicFields) + if ((applicfieldrecs ?? "") != (origApplicFields ?? "")) return true; //nothing has changed diff --git a/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs b/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs index 82cbd45f..f44c1a8e 100644 --- a/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs +++ b/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs @@ -834,7 +834,7 @@ namespace RODBInterface ValueType |= FldType; if (PCApplicability) text = GetPCReturnValues(theDb, pcChildern, elm, PCApplicability, inusename, text); // C2021-026 Get P/C Children return values - strbld.Append(text); + strbld.Append(text.Replace("{", "&123;").Replace("}", "&125;")); } else { diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 47fcf4af..0d9474cf 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -19791,9 +19791,11 @@ GO *****************************************************************************/ /* ========================================================================================================== - Author: Jake Ropar Create Date: 06/23/2022 Description: Inserts New Rofst Child Record / Default Values + Modified: 02/19/2025 + Modification + Description: Added support for ROs with brackets in Unit Values ========================================================================================================== */ Create Procedure [dbo].[vesp_RofstChildInsert] @@ -19806,19 +19808,26 @@ GO @title VarChar(Max), @roid VarChar(50), @appid VarChar(Max) = null, - @value VarChar(Max) = null + @value VarChar(Max) = null, + @missingDefaultValue VarChar(Max) = null ) With Execute as Owner As Begin - Declare @AccPageID VarChar(Max) = null; + Declare @BaseAccPageID VarChar(Max) = null; Declare @DefaultValues VarChar(Max); + Declare @RoidExt VarChar(Max); + Declare @AccPageExt VarChar(Max); - -- Create Rofst Child/Group Record + -- Default missing value if Null (Null values not allowed for the [value] field in the RofstDefaultValue table + if (DataLength(IsNull(@missingDefaultValue, '')) <= 0) + Set @missingDefaultValue = '[TBD]'; + + -- Create Rofst Child/Group Record --> [Roid = (12) Digits] Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, [value]) - Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, @value); + Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}')); -- Check for appid, if exists, then insert the default value for each return type if multi-value @@ -19826,37 +19835,58 @@ GO Begin -- Get Accessory Page ID - Select @AccPageID = Concat(d.dbiAP, '-', @appid) + Select @BaseAccPageID = dbo.vefn_RofstDataCleanUnitInfoTags(Concat(d.dbiAP, '-', @appid), 1) From RofstDatabase d with (NoLock) Where d.RofstID = @RofstID And d.dbiID = @dbiID; - -- Insert Rofst Default Value (Parent RoChild) [roid = 12] - Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) - Values (@RofstID, @roid, Replace(@title, '\u160?', ' '), @AccPageID); + Select @DefaultValues = dbo.vefn_RofstDataReplaceVars(@value); - -- Insert Rofst Default Value(s) (Children RoChild) [roid = 16] (Do Not Insert Duplicates) - Select @DefaultValues = Replace(dbo.vefn_RofstDataReplaceVars(@value), '{', ''); + If (PatIndex('%=%', @DefaultValues) > 0) + Begin + + -- Insert Rofst Default Values (Multi-Values) --> [Roid = (16) Digits] + Select @DefaultValues = Replace(@DefaultValues, '{', ''); - With ChildrenValues as - ( - Select (x.ListPosition + 40) as 'OffsetIndex', - Case When (PatIndex('%=%', x.ListValue) > 0) Then Right(x.ListValue, Len(x.ListValue)-PatIndex('%=%', x.ListValue)) Else x.ListValue End as 'DefaultValue' - From [dbo].[vefn_ParseStringListToTable](@DefaultValues, '}') x - Where Len(x.ListValue) > 0 - ) - Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) - Select @RofstID as 'RofstID', - Concat(@roid, Cast(Format(Min(OffsetIndex), 'D4') as VarChar(4))) as 'roid', - DefaultValue as 'value', - null as 'AccPageID' - From ChildrenValues - Group By DefaultValue - Order By Min(OffsetIndex) Asc + With ChildrenValues as + ( + Select x.ListPosition as 'OffsetIndex', + Case When (PatIndex('%=%', x.ListValue) > 0) Then Right(x.ListValue, Len(x.ListValue)-PatIndex('%=%', x.ListValue)) Else x.ListValue End as 'DefaultValue' + From [dbo].[vefn_ParseStringListToTable](@DefaultValues, '}') x + Where Len(x.ListValue) > 0 + ) + Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) + Select @RofstID as 'RofstID', + Concat(@roid, re.RoidExt) as 'roid', + Case When (DataLength(cv.DefaultValue) > 0) Then + REPLACE(REPLACE(REPLACE(dbo.vefn_RofstDataCleanUnitInfoTags(cv.DefaultValue, 0), '&123;', '{'), '&125;}', '}'), '&125;', '}') + Else @missingDefaultValue End as 'value', + Concat(@BaseAccPageID, '.', re.AccPageExt) as 'AccPageID' + From ChildrenValues cv + inner join vwRofstData_RofstExtensions re on re.Offset = cv.OffsetIndex + Order By cv.OffsetIndex Asc + + End + Else + Begin + + -- Insert Rofst Default Value (Single Value) --> [Roid = (16) Digits] + Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) + Select @RofstID as 'RofstID', + Concat(@roid, re.RoidExt) as 'roid', + Case When (DataLength(@DefaultValues) > 0) Then + REPLACE(REPLACE(REPLACE(dbo.vefn_RofstDataCleanUnitInfoTags(@DefaultValues, 0), '&123;', '{'), '&125;}', '}'), '&125;', '}') + Else @missingDefaultValue End as 'value', + Concat(@BaseAccPageID, '.', re.AccPageExt) as 'AccPageID' + From vwRofstData_RofstExtensions re + Where re.Offset = 1; + + End End -- (Len(@appid) > 0) Return; + End Go @@ -20448,98 +20478,6 @@ GO ELSE PRINT 'Procedure Creation: [vesp_RofstDataGetExtensions] Error on Creation' GO - - - - /****** Object: StoredProcedure [dbo].[vesp_RofstChildInsert] ***********************/ - If Exists(SELECT * FROM sys.objects Where name = 'vesp_RofstChildInsert' AND type in (N'P')) - DROP PROCEDURE [dbo].[vesp_RofstChildInsert] - GO - - SET ANSI_NULLS ON - GO - SET QUOTED_IDENTIFIER ON - GO - - /***************************************************************************** - Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE - Copyright 2020 - Volian Enterprises, Inc. All rights reserved. - *****************************************************************************/ - /* - ========================================================================================================== - Author: Jake Ropar - Create Date: 03/24/2022 - Description: - ========================================================================================================== - */ - Create Procedure [dbo].[vesp_RofstChildInsert] - ( - @RofstID Int, - @ID Int, - @ParentID Int, - @dbiID Int, - @type Int, - @title VarChar(Max), - @roid VarChar(50), - @appid VarChar(Max) = null, - @value VarChar(Max) = null - ) - With Execute as Owner - As - Begin - - Declare @BaseAccPageID VarChar(Max) = null; - Declare @DefaultValues VarChar(Max); - - - -- Create Rofst Child/Group Record --> [Roid = (12) Digits] - Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, [value]) - Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, @value); - - - -- Check for appid, if exists, then insert the default value for each return type if multi-value - If (Len(@appid) > 0) - Begin - - -- Get Accessory Page ID - Select @BaseAccPageID = dbo.vefn_RofstDataCleanUnitInfoTags(Concat(d.dbiAP, '-', @appid), 1) - From RofstDatabase d with (NoLock) - Where d.RofstID = @RofstID And d.dbiID = @dbiID; - - -- Insert Rofst Default Value(s) (Children RoChild) --> [Roid = (16) Digits] - Select @DefaultValues = Replace(dbo.vefn_RofstDataReplaceVars(@value), '{', ''); - - With ChildrenValues as - ( - Select x.ListPosition as 'OffsetIndex', - Case When (PatIndex('%=%', x.ListValue) > 0) Then Right(x.ListValue, Len(x.ListValue)-PatIndex('%=%', x.ListValue)) Else x.ListValue End as 'DefaultValue' - From [dbo].[vefn_ParseStringListToTable](@DefaultValues, '}') x - Where Len(x.ListValue) > 0 - ) - Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) - Select @RofstID as 'RofstID', - Concat(@roid, re.RoidExt) as 'roid', - Case When (Len(RTrim(LTrim(cv.DefaultValue))) > 0 ) Then dbo.vefn_RofstDataCleanUnitInfoTags(cv.DefaultValue, 0) Else '[TBD]' End as 'value', - Concat(@BaseAccPageID, '.', re.AccPageExt) as 'AccPageID' - From ChildrenValues cv - inner join vwRofstData_RofstExtensions re on re.Offset = cv.OffsetIndex - Order By cv.OffsetIndex Asc - - - End -- (Len(@appid) > 0) - - - Return; - - End - Go - - IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_RofstChildInsert] Succeeded' - ELSE PRINT 'Procedure Creation: [vesp_RofstChildInsert] Error on Creation' - GO - - - /****** Object: StoredProcedure [dbo].[vesp_RofstDataSearch] ***********************/ If Exists(SELECT * FROM sys.objects Where name = 'vesp_RofstDataSearch' AND type in (N'P')) DROP PROCEDURE [dbo].[vesp_RofstDataSearch] @@ -21239,121 +21177,6 @@ GO ========================================================================================================== */ - -IF EXISTS (Select * From dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[vesp_RofstChildInsert]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) - DROP Procedure [dbo].[vesp_RofstChildInsert]; -GO - -SET ANSI_NULLS ON -GO - -SET QUOTED_IDENTIFIER ON -GO - - -/***************************************************************************** - Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE - Copyright 2020 - Volian Enterprises, Inc. All rights reserved. -*****************************************************************************/ -/* -========================================================================================================== - Author: Jake Ropar - Create Date: 03/24/2022 - Description: Inserts the RO Child object and associated return values -========================================================================================================== - */ -Create Procedure [dbo].[vesp_RofstChildInsert] -( - @RofstID Int, - @ID Int, - @ParentID Int, - @dbiID Int, - @type Int, - @title VarChar(Max), - @roid VarChar(50), - @appid VarChar(Max) = null, - @value VarChar(Max) = null -) -With Execute as Owner -As -Begin - - Declare @BaseAccPageID VarChar(Max) = null; - Declare @DefaultValues VarChar(Max); - - Declare @RoidExt VarChar(Max); - Declare @AccPageExt VarChar(Max); - - - -- Create Rofst Child/Group Record --> [Roid = (12) Digits] - Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, [value]) - Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, @value); - - - -- Check for appid, if exists, then insert the default value for each return type if multi-value - If (Len(@appid) > 0) - Begin - - -- Get Accessory Page ID - Select @BaseAccPageID = dbo.vefn_RofstDataCleanUnitInfoTags(Concat(d.dbiAP, '-', @appid), 1) - From RofstDatabase d with (NoLock) - Where d.RofstID = @RofstID And d.dbiID = @dbiID; - - Select @DefaultValues = dbo.vefn_RofstDataReplaceVars(@value); - - If (PatIndex('%=%', @DefaultValues) > 0) - Begin - - -- Insert Rofst Default Values (Multi-Values) --> [Roid = (16) Digits] - Select @DefaultValues = Replace(@DefaultValues, '{', ''); - - With ChildrenValues as - ( - Select x.ListPosition as 'OffsetIndex', - Case When (PatIndex('%=%', x.ListValue) > 0) Then Right(x.ListValue, Len(x.ListValue)-PatIndex('%=%', x.ListValue)) Else x.ListValue End as 'DefaultValue' - From [dbo].[vefn_ParseStringListToTable](@DefaultValues, '}') x - Where Len(x.ListValue) > 0 - ) - Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) - Select @RofstID as 'RofstID', - Concat(@roid, re.RoidExt) as 'roid', - Case When (Len(RTrim(LTrim(cv.DefaultValue))) > 0 ) Then dbo.vefn_RofstDataCleanUnitInfoTags(cv.DefaultValue, 0) Else '[TBD]' End as 'value', - Concat(@BaseAccPageID, '.', re.AccPageExt) as 'AccPageID' - From ChildrenValues cv - inner join vwRofstData_RofstExtensions re on re.Offset = cv.OffsetIndex - Order By cv.OffsetIndex Asc - - End - Else - Begin - - -- Insert Rofst Default Value (Single Value) --> [Roid = (16) Digits] - Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) - Select @RofstID as 'RofstID', - Concat(@roid, re.RoidExt) as 'roid', - Case When (Len(RTrim(LTrim(@DefaultValues))) > 0 ) Then dbo.vefn_RofstDataCleanUnitInfoTags(@DefaultValues, 0) Else '[TBD]' End as 'value', - Concat(@BaseAccPageID, '.', re.AccPageExt) as 'AccPageID' - From vwRofstData_RofstExtensions re - Where re.Offset = 1; - - End - - End -- (Len(@appid) > 0) - - - Return; - -End -Go - -IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_RofstChildInsert] Succeeded' -ELSE PRINT 'Procedure Creation: [vesp_RofstChildInsert] Error on Creation' -GO - - - - - If Exists(SELECT * FROM sys.objects Where name = 'vefn_RofstDataReplaceVars' AND type in (N'FN')) DROP FUNCTION [dbo].[vefn_RofstDataReplaceVars] GO @@ -21632,124 +21455,6 @@ GO ELSE PRINT 'Function Creation: [vefn_RofstDataCleanUnitInfoTags] Error on Creation' GO - - - If Exists(SELECT * FROM sys.objects Where name = 'vesp_RofstChildInsert' AND type in (N'P')) - DROP PROCEDURE [dbo].[vesp_RofstChildInsert] - GO - - SET ANSI_NULLS ON - GO - SET QUOTED_IDENTIFIER ON - GO - - /***************************************************************************** - Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE - Copyright 2020 - Volian Enterprises, Inc. All rights reserved. - *****************************************************************************/ - /* - ========================================================================================================== - Author: Jake Ropar - Create Date: 03/24/2022 - Description: Inserts the RO Child object and associated return values - ========================================================================================================== - */ - Create Procedure [dbo].[vesp_RofstChildInsert] - ( - @RofstID Int, - @ID Int, - @ParentID Int, - @dbiID Int, - @type Int, - @title VarChar(Max), - @roid VarChar(50), - @appid VarChar(Max) = null, - @value VarChar(Max) = null, - @missingDefaultValue VarChar(Max) = null - ) - With Execute as Owner - As - Begin - - Declare @BaseAccPageID VarChar(Max) = null; - Declare @DefaultValues VarChar(Max); - - Declare @RoidExt VarChar(Max); - Declare @AccPageExt VarChar(Max); - - -- Default missing value if Null (Null values not allowed for the [value] field in the RofstDefaultValue table - if (DataLength(IsNull(@missingDefaultValue, '')) <= 0) - Set @missingDefaultValue = '[TBD]'; - - -- Create Rofst Child/Group Record --> [Roid = (12) Digits] - Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, [value]) - Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, @value); - - - -- Check for appid, if exists, then insert the default value for each return type if multi-value - If (Len(@appid) > 0) - Begin - - -- Get Accessory Page ID - Select @BaseAccPageID = dbo.vefn_RofstDataCleanUnitInfoTags(Concat(d.dbiAP, '-', @appid), 1) - From RofstDatabase d with (NoLock) - Where d.RofstID = @RofstID And d.dbiID = @dbiID; - - Select @DefaultValues = dbo.vefn_RofstDataReplaceVars(@value); - - If (PatIndex('%=%', @DefaultValues) > 0) - Begin - - -- Insert Rofst Default Values (Multi-Values) --> [Roid = (16) Digits] - Select @DefaultValues = Replace(@DefaultValues, '{', ''); - - With ChildrenValues as - ( - Select x.ListPosition as 'OffsetIndex', - Case When (PatIndex('%=%', x.ListValue) > 0) Then Right(x.ListValue, Len(x.ListValue)-PatIndex('%=%', x.ListValue)) Else x.ListValue End as 'DefaultValue' - From [dbo].[vefn_ParseStringListToTable](@DefaultValues, '}') x - Where Len(x.ListValue) > 0 - ) - Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) - Select @RofstID as 'RofstID', - Concat(@roid, re.RoidExt) as 'roid', - Case When (DataLength(cv.DefaultValue) > 0) Then dbo.vefn_RofstDataCleanUnitInfoTags(cv.DefaultValue, 0) Else @missingDefaultValue End as 'value', - Concat(@BaseAccPageID, '.', re.AccPageExt) as 'AccPageID' - From ChildrenValues cv - inner join vwRofstData_RofstExtensions re on re.Offset = cv.OffsetIndex - Order By cv.OffsetIndex Asc - - End - Else - Begin - - -- Insert Rofst Default Value (Single Value) --> [Roid = (16) Digits] - Insert Into RofstDefaultValue (RofstID, roid, [value], AccPageID) - Select @RofstID as 'RofstID', - Concat(@roid, re.RoidExt) as 'roid', - Case When (DataLength(@DefaultValues) > 0) Then dbo.vefn_RofstDataCleanUnitInfoTags(@DefaultValues, 0) Else @missingDefaultValue End as 'value', - Concat(@BaseAccPageID, '.', re.AccPageExt) as 'AccPageID' - From vwRofstData_RofstExtensions re - Where re.Offset = 1; - - End - - End -- (Len(@appid) > 0) - - - Return; - - End - Go - - - - IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_RofstChildInsert] Succeeded' - ELSE PRINT 'Procedure Creation: [vesp_RofstChildInsert] Error on Creation' - GO - - - /* ========================================================================================================== End: B2022-124: [JPR] Blank RO Values (All Spaces) printing as ? @@ -24132,8 +23837,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '10/28/2024 11:24' - set @RevDescription = 'Add the ability for PROMS to remember the procedure tabs that were open when you closed PROMS' + set @RevDate = '2/19/2025 11:24' + set @RevDescription = 'Added support for legacy ROs with brackets in Unit Values' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs index 856f91f7..287d8e12 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs @@ -194,6 +194,23 @@ namespace VEPROMS.CSLA.Library public partial class AnnotationAuditInfoList { + + /// + /// C2024- 038 - Summary of Changes report generation enhancements + /// Constructor - takes a Generic list of AnnotationAuditInfo + /// and creates a AnnotationAuditInfoList + /// + public AnnotationAuditInfoList(List lst) + { + IsReadOnly = false; + if (lst != null) + { + foreach (AnnotationAuditInfo itm in lst) + this.Add(itm); + } + IsReadOnly = true; + } + /// /// Return a list of all AnnotationAuditInfo by ItemID. /// @@ -487,6 +504,23 @@ namespace VEPROMS.CSLA.Library public partial class ContentAuditInfoList { + + /// + /// C2024- 038 - Summary of Changes report generation enhancements + /// Constructor - takes a Generic list of ContentAuditInfo + /// and creates a ContentAuditInfoList + /// + public ContentAuditInfoList(List lst) + { + IsReadOnly = false; + if (lst != null) + { + foreach (ContentAuditInfo itm in lst) + this.Add(itm); + } + IsReadOnly = true; + } + /// /// Return a list of all ContentAuditInfo by ContentID. /// diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.cs b/PROMS/Volian.Controls.Library/DisplayHistory.cs index 8e647378..a66c6952 100644 --- a/PROMS/Volian.Controls.Library/DisplayHistory.cs +++ b/PROMS/Volian.Controls.Library/DisplayHistory.cs @@ -10,6 +10,7 @@ using System.IO; using System.Text.RegularExpressions; using JR.Utils.GUI.Forms; using Volian.Base.Library; +using System.Linq; namespace Volian.Controls.Library { @@ -163,7 +164,7 @@ namespace Volian.Controls.Library else { DateTime revDate; - if (!DateTime.TryParse(cfg.Print_RevDate, out revDate)) revDate = MyProcedureInfo.ChangeBarDate; // DateTime.Now; + if (!DateTime.TryParse(cfg.Print_RevDate, out revDate)) revDate = MyProcedureInfo.ChangeBarDate; // DateTime.Now; SetRevDate(revDate); //SetRevDate(DateTime.Parse(cfg.Print_RevDate)); } @@ -263,7 +264,7 @@ namespace Volian.Controls.Library { AnnotationTypeInfo ati = AnnotationTypeInfo.Get(aai.TypeID); // B2023-066: Crash when trying to access a deleted annotation type (added the ati==null check) - tn = annotationDeleted.Nodes.Add(ati==null?"Deleted Annotation Type":ati.Name); + tn = annotationDeleted.Nodes.Add(ati == null ? "Deleted Annotation Type" : ati.Name); } TreeNode cn = tn.Nodes.Add(aai.ListString()); cn.Tag = aai; @@ -517,7 +518,7 @@ namespace Volian.Controls.Library if (delC.Type >= 0 && delC.Type < 1000) { int indx = delC.Config.IndexOf("DelProcReason"); - if (indx >= 0 && delC.Config.Length > indx+15) // 15 accounts for 'DelProcReason = "' + if (indx >= 0 && delC.Config.Length > indx + 15) // 15 accounts for 'DelProcReason = "' { string reason = delC.Config.Substring(indx + 15); if (reason != null && reason.Length > 0) @@ -529,7 +530,7 @@ namespace Volian.Controls.Library } } } - TreeNode tnn = deletedItems.Nodes.Add(iai.ToString()+"; Reason: " + strR); + TreeNode tnn = deletedItems.Nodes.Add(iai.ToString() + "; Reason: " + strR); tnn.Tag = iai; #endregion } @@ -558,7 +559,7 @@ namespace Volian.Controls.Library if (MyProcedureInfo == null) { this.ParentForm.Cursor = Cursors.Default; - btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = lbChanges.Items.Count > 0; + btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = cbSumExcludeAnn.Enabled = DT_SumAsOf.Enabled = lbChanges.Items.Count > 0; return; } ContentAuditInfoList cail2; @@ -586,7 +587,7 @@ namespace Volian.Controls.Library // B2020-156: When procedure title is changed, it does not print in Summary/Chronolgy of changes. // Need to only check the date (not the date/time) for some procedures, the original item was listed // in the list box and should not be because some MyRevDate's did not have time included. - if (CompareDateOrDateTime(cai.DTS,MyRevDate) || cai.ActionWhen > MyRevDate) + if (CompareDateOrDateTime(cai.DTS, MyRevDate) || cai.ActionWhen > MyRevDate) { string itemTitle = FixPath(cai.Path); lbChanges.Items.Add(cai); @@ -614,7 +615,7 @@ namespace Volian.Controls.Library } //Console.WriteLine("WalkProcedure fini: {0} seconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalSeconds); this.ParentForm.Cursor = Cursors.Default; - btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = lbChanges.Items.Count > 0; + btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = cbSumExcludeAnn.Enabled = DT_SumAsOf.Enabled = lbChanges.Items.Count > 0; RefreshRequired = false; return; } @@ -648,9 +649,73 @@ namespace Volian.Controls.Library //_AnnotationList = AnnotationAuditInfoList.GetChronology(0, 0, MyProcedureInfo.ChangeBarDate); //added setting selected slave in order for reports to replace unit number,etc jcb 20101010 MyItemInfo.MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = ApplDisplayMode; - // OnSummaryPrintRequest(new DisplayHistoryReportEventArgs(Volian.Base.Library.VlnSettings.TemporaryFolder + @"\MySummary.pdf", MyItemInfo.MyProcedure, _SummaryAuditList, _AnnotationList)); - OnSummaryPrintRequest(new DisplayHistoryReportEventArgs(string.Format(@"{0}\{1} Summary of Changes.pdf", Volian.Base.Library.VlnSettings.TemporaryFolder, MyItemInfo.MyProcedure.PDFNumber), MyItemInfo.MyProcedure, _SummaryAuditList, _AnnotationList)); - //} + + var dhr = new DisplayHistoryReportEventArgs(string.Format(@"{0}\{1} Summary of Changes.pdf", Volian.Base.Library.VlnSettings.TemporaryFolder, MyItemInfo.MyProcedure.PDFNumber), MyItemInfo.MyProcedure, null, null); + + //C2024- 038 - Summary of Changes report generation enhancements + //check if need to modify + // _SummaryAuditList + if (DT_SumAsOf.Checked) + dhr.AuditList = FilterSummaryByDate(_SummaryAuditList, DT_SumAsOf.Value); + else + dhr.AuditList = _SummaryAuditList; + + //C2024- 038 - Summary of Changes report generation enhancements + // if Exclude Annotations Checked + // send an empty list instead of + //_AnnotationList + if (cbSumExcludeAnn.Checked) + dhr.AnnotationList = new AnnotationAuditInfoList(null); + else if (DT_SumAsOf.Checked) + dhr.AnnotationList = FilterSummaryByDate_Annotations(_AnnotationList, DT_SumAsOf.Value); + else + { dhr.AnnotationList = _AnnotationList; } + + OnSummaryPrintRequest(dhr); + } + + //C2024- 038 - Summary of Changes report generation enhancements + //modify _SummaryAuditList + //to limit to a specific date + private ContentAuditInfoList FilterSummaryByDate(ContentAuditInfoList summaryAuditList, DateTime value) + { + List slst = summaryAuditList.Clone().ToList(); + + //Grab the first change to each item before the date and set that to the AsOf date + foreach (ContentAuditInfo firstbeforedate in slst.GroupBy(x => x.ItemID).Select(x => x.OrderByDescending(y => y.DTS).FirstOrDefault(d => d.DTS < value))) + { + if (firstbeforedate != null && firstbeforedate.ActionWhat != "Deleted") + { + firstbeforedate.ActionWhat = $"As Of: {value.ToShortDateString()}"; + } + } + //remove all items before the date we are checking against + //note that for deleted - sometimes the DTS is not correct and + //need to use the ActionWhen + slst.RemoveAll(x => x.DTS < value && !x.ActionWhat.StartsWith("As Of:") && (x.ActionWhat != "Deleted" || (x.ActionWhen < x.DTS ? x.DTS : x.ActionWhen) < value)); + + //remove all items where first text matches the last text + //unless it was added after the date we are checking against + //or the last item is a deletion that occurred after + //the date we are checking against + var itms = slst.Select(x => x.ItemID).Distinct().ToList(); + foreach (int itmID in itms) + { + ContentAuditInfo first = slst.Where(i => i.ItemID == itmID).OrderBy(y => y.DTS).FirstOrDefault(); + ContentAuditInfo last = slst.Where(i => i.ItemID == itmID).OrderByDescending(y => y.DTS).FirstOrDefault(); + if (first != null && last != null && first.DTS < value && (last.ActionWhat != "Deleted" || (last.ActionWhen < last.DTS ? last.DTS : last.ActionWhen) < value) && ItemInfo.ConvertToDisplayText(first.Text) == ItemInfo.ConvertToDisplayText(last.Text)) + slst.RemoveAll(x => x.ItemID == itmID); + } + + return new ContentAuditInfoList(slst); + } + + //C2024- 038 - Summary of Changes report generation enhancements + //modify _SummaryAuditList + //to limit to a specific date + private AnnotationAuditInfoList FilterSummaryByDate_Annotations(AnnotationAuditInfoList annotationAuditList, DateTime value) + { + return new AnnotationAuditInfoList(annotationAuditList.Where(x => x.DTS >= value).ToList()); } private void btnRefresh_Click(object sender, EventArgs e) { @@ -1060,7 +1125,7 @@ namespace Volian.Controls.Library set { _AuditList = value; } } private AnnotationAuditInfoList _AnnotationList; - public AnnotationAuditInfoList AnnotationList + public AnnotationAuditInfoList AnnotationList { get { return _AnnotationList; } set { _AnnotationList = value; } diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs b/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs index 87fcb3ce..0475e1c8 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/StepTabRibbon.designer.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.designer.cs index 4e00b55f..33fc65fe 100644 Binary files a/PROMS/Volian.Controls.Library/StepTabRibbon.designer.cs and b/PROMS/Volian.Controls.Library/StepTabRibbon.designer.cs differ diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index e615e5de..1510659d 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -443,6 +443,9 @@ DisplayBookMarks.cs Designer + + DisplayHistory.cs + DisplayLibDocs.cs Designer diff --git a/PROMS/Volian.Print.Library/PDFChronologyReport.cs b/PROMS/Volian.Print.Library/PDFChronologyReport.cs index b0111d5c..73e7ca1e 100644 --- a/PROMS/Volian.Print.Library/PDFChronologyReport.cs +++ b/PROMS/Volian.Print.Library/PDFChronologyReport.cs @@ -1090,7 +1090,7 @@ namespace Volian.Print.Library firstCAI = null; lastCAI = null; } - else if (firstCAI.ActionWhat == lastCAI.ActionWhat) + else if (firstCAI.ActionWhat == lastCAI.ActionWhat || firstCAI.ActionWhat.StartsWith("As Of:")) { auditList1.Add(firstCAI); auditList1.Add(lastCAI); @@ -1153,7 +1153,7 @@ namespace Volian.Print.Library firstCAI = null; lastCAI = null; } - else if (firstCAI.ActionWhat == lastCAI.ActionWhat) + else if (firstCAI.ActionWhat == lastCAI.ActionWhat || firstCAI.ActionWhat.StartsWith("As Of:")) { auditList1.Add(firstCAI); auditList1.Add(lastCAI); diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index 381a3c95..73b089b4 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -647,8 +647,10 @@ namespace Volian.Print.Library } if (MyItemInfo.IsHigh) { + // C2025-014 change the zoom setting on the bookmark of a step from FITBH to FITV so that instead of zooming in + // on the step it will zoom to the page level ( like it does when you select a bookmark on a section. MyPageHelper.PageBookmarks.Add(MyItemInfo, (MyItemInfo.MyTab == null) ? "" : MyItemInfo.MyTab.CleanText + " " + MyItemInfo.DisplayText, - new PdfDestination(PdfDestination.FITBH, yLocation + YVeryTop - YTopMost + SixLinesPerInch)); + new PdfDestination(PdfDestination.FITV, yLocation + YVeryTop - YTopMost + SixLinesPerInch)); } } if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.WolfcreekCKLFormat)