From 069ffb80e9a9200e14036cbba9806f0ff4092934 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Wed, 17 Jul 2024 14:28:24 -0400 Subject: [PATCH 1/3] C2024-005-Annotations-Cleanup-2 --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 913 ++++++------------ .../VEPROMS User Interface/VEPROMS_UI.csproj | 14 +- .../frmAnnotationsCleanup.Designer.cs | 132 +++ .../frmAnnotationsCleanup.cs | 156 +++ .../frmAnnotationsCleanup.resx | 123 +++ .../frmBatchRefresh.Designer.cs | 637 ++++++------ .../VEPROMS User Interface/frmBatchRefresh.cs | 381 +++++++- .../frmBatchRefresh.resx | 213 ++-- .../frmVEPROMS.Designer.cs | 3 +- .../Extension/AnnotationExt.cs | 291 +++++- 10 files changed, 1811 insertions(+), 1052 deletions(-) create mode 100644 PROMS/VEPROMS User Interface/frmAnnotationsCleanup.Designer.cs create mode 100644 PROMS/VEPROMS User Interface/frmAnnotationsCleanup.cs create mode 100644 PROMS/VEPROMS User Interface/frmAnnotationsCleanup.resx diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index d32889b3..c60d5b26 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -1,5 +1,3 @@ - - Set NoCount On; If (db_name() in('master','model','msdn','tempdb')) @@ -22232,13 +22230,12 @@ Go /* ========================================================================================================== - Begin: C2024-004 | B2024-041: KL - Update Copy Replace functionality, (remove ''copy of'') + Begin: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'') ========================================================================================================== */ - -IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ReplaceItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) - DROP PROCEDURE [ReplaceItemAndChildren]; +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[CopyItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [CopyItemAndChildren]; GO /***************************************************************************** @@ -22248,22 +22245,11 @@ GO /* ========================================================================================================== Author: Kevin Laskey - Create Date: 07/15/2024 - Description: B2024-041: "Copy of" is no longer being appended for paste before/after + Modified Date: 07/09/2024 + Description: Copy Item and its Children ========================================================================================================== */ - -/****** Object: StoredProcedure [dbo].[CopyItemAndChildren] Script Date: 7/15/2024 9:29:21 AM ******/ -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO - -/***************************************************************************** - Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE - Copyright 2012 - Volian Enterprises, Inc. All rights reserved. -*****************************************************************************/ -CREATE PROCEDURE [dbo].[ReplaceItemAndChildren] +CREATE PROCEDURE [dbo].[CopyItemAndChildren] ( @StartItemID INT, @DestFormatID INT, @@ -22308,6 +22294,7 @@ INSERT INTO @Children SELECT ItemID,ItemID,ContentID,ContentID,FormatID,FormatID -- <<< Copy Contents >>> -- Create new content rows to match the existing rows. Set the type to the Current ContentID temporarily -- so that the new content rows can be associated with the existing content rows. +-- Rem 'Copy Of ' + before first [Number] for C2024-004 (KL) INSERT INTO Contents ([Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID]) select CASE when [ContentID] = @StartContentID and [Type]<20000 then [Number] else [Number] end, @@ -22635,618 +22622,13 @@ BEGIN CATCH -- Catch Block ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback EXEC vlnErrorHandler END CATCH -GO - - - - - - -IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[PasteItemReplace]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) - DROP PROCEDURE [PasteItemReplace]; -GO - - /***************************************************************************** - Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE - Copyright 2024 - Volian Enterprises, Inc. All rights reserved. - *****************************************************************************/ - /* - ========================================================================================================== - Author: Kevin Laskey - Create Date: 07/15/2024 - Description: B2024-041: "Copy of" is no longer being appended for paste before/after - ========================================================================================================== - */ - - -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO -/****** Object: StoredProcedure [dbo].[PasteItemReplace] Script Date: 03/20/2012 16:02:54 ******/ -/* -declare @NewItemID int -declare @dts datetime -set @newitemid = 0 -set @dts = getdate() -exec PasteItemReplace 398,397,20014,@dts,'bodine',@NewItemID output -*/ --- ItemID is item to replace --- StartItemID is item to copy -/***************************************************************************** - Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE - Copyright 2012 - Volian Enterprises, Inc. All rights reserved. -*****************************************************************************/ -CREATE PROCEDURE [dbo].[PasteItemReplace] -( - @ItemID int=null, @StartItemID int=null, - @Type int=null, @DTS datetime, @UserID nvarchar(100), - @NewItemID int output -) -WITH EXECUTE AS OWNER -AS -BEGIN TRY -- Try Block - BEGIN TRANSACTION - DECLARE @ContentID AS INT - DECLARE @NextItemID AS INT - DECLARE @PreviousItemID AS INT - DECLARE @ExternalChildCount AS INT - DECLARE @ExternalCount AS INT - DECLARE @Path AS VARCHAR(MAX) - DECLARE @Children AS TABLE - ( - ItemID INT PRIMARY KEY, - ContentID INT - ) - - if exists (select * from tblitems where itemid = @ItemID and DeleteStatus !=0) - BEGIN - RAISERROR ('###Cannot Paste Step###This current step has been deleted in another session',16,1) - RETURN - END - -- First check if the replaced item can be deleted, i.e. it doesn't have transitions - -- pointing to it or children. - - DECLARE @ExternalTrans TABLE - ( - [FromItemID] int, - [TransitionID] [int] NOT NULL, - [FromID] [int] NOT NULL, - [ToID] [int] NOT NULL, - [RangeID] [int] NOT NULL, - [Config] [nvarchar](max) NULL - ) - SET NOCOUNT ON - DECLARE @DeleteID int - INSERT INTO DeleteLog (UserID) VALUES (@UserID) - SELECT @DeleteID = SCOPE_IDENTITY() - SELECT @ContentID = ContentID, @PreviousItemID = PreviousID FROM Items WHERE ItemID = @ItemID - SELECT @NextItemID = ItemID FROM Items WHERE PreviousID = @ItemID - --SELECT @ExternalCount = count(*) FROM vefn_FindExternalTransitions(@ItemID) - SELECT @ExternalChildCount = count(*) FROM vefn_FindExternalChildTransitions(@ItemID) - SET @Path = [dbo].[ve_GetShortPath](@ItemID) - - --IF @ExternalCount > 0 AND @NextItemID is null - --BEGIN - -- RAISERROR ('###Cannot Delete Item###Step %d has External Transitions and has no next step - (%s)',16,1,@ItemID,@Path) - -- RETURN - --END - - IF @ExternalChildCount > 0 - BEGIN - RAISERROR ('###Cannot Delete Item###Step %d has External Transitions to it''s children - (%s)',16,1,@ItemID,@Path) - RETURN - END - - -- Copy the item, 'NewItemID' represents the new item(s) - -- DestFormatID is the formatid for the destination parent's format - DECLARE @DestFormatID int - SET @DestFormatID = .dbo.vefn_GetInheritedFormat(@ItemID, 0) - EXECUTE ReplaceItemAndChildren @StartItemID, @DestFormatID, @UserID, @NewItemID OUTPUT - - -- Adjust the next/previous to point to the new item - - DECLARE @PreviousID int - SELECT @PreviousID = [PreviousID] - FROM [ITEMS] II - WHERE [ItemID]=@ItemID - UPDATE [ITEMS] SET [PreviousID]=@PreviousID where [ItemID]=@NewItemID - UPDATE [CONTENTS] SET [Type]=@Type - FROM [CONTENTS] CC JOIN [ITEMS] ii ON CC.[ContentID]=II.[ContentID] - WHERE [ItemID]=@NewItemID - UPDATE [ITEMS] SET [PreviousID]=@NewItemID where [PreviousID]=@ItemID - UPDATE [PARTS] SET [ItemID]=@NewItemID where [ItemID]=@ItemID - - -- UPDATE DocVersion if this was a procedure - UPDATE DocVersions SET ItemID=@NewItemID where ItemID = @ItemID - - -- If there were 'external transitions' that pointed to the original - -- top replaced step, adjust them to point to the new top. - INSERT INTO @ExternalTrans SELECT * FROM vefn_FindExternalTransitions(@ItemID) - OPTION (MAXRECURSION 10000) - IF (SELECT COUNT(*) from @ExternalTrans) > 0 - BEGIN - -- Update content records for the transitions - Update CC - Set Text = DBO.vefn_FixTransitionText(Text,TT.TransitionID,TT.TranType,TT.ToID,TT.RangeID,@ItemID,@NewItemID) - From CONTENTS CC - JOIN Transitions TT ON TT.FromID = CC.ContentID - WHERE TransitionID in(Select TransitionID from @ExternalTrans) - -- Update transitions that point to @ItemID to Point to @NextItemID - UPDATE TRANSITIONS - SET ToID = case when ToID = @ItemID then @NewItemID else ToID END, - RangeID = case when RangeID = @ItemID then @NewItemID else RangeID END - WHERE TransitionID in(Select TransitionID from @ExternalTrans) - - DECLARE @typeID int -- AnnotationType - SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required' - IF(@typeID IS NULL) - BEGIN - INSERT INTO [AnnotationTypes] ([Name],[UserID]) VALUES ('Verification Required','Volian') - SELECT @typeID = SCOPE_IDENTITY() - END - -- Add 'Verification Required' annotions for transtions that pointed to top step - -- and need to point to - INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID]) - SELECT ItemID, @typeID,'Verify Replaced Step Transition Destination',@UserID - FROM Items where ItemID in (SELECT FromItemID FROM @ExternalTrans) - - END - -- Remove the old one - - -- Get list of Children - INSERT INTO @Children SELECT * FROM vefn_ChildItems(@ItemID) - -- Delete Annotations for @ItemID and children - DELETE from Annotations where ItemID in(Select ItemID from @Children) - -- Delete Details associated with @ContentID and children - DELETE from Details where ContentID in(Select ContentID from @Children) - -- Delete Grids associated with @ContentID and children - DELETE from Grids where ContentID in(Select ContentID from @Children) - -- Delete Images associated with @ContentID and children - DELETE from Images where ContentID in(Select ContentID from @Children) - -- Delete Entries associated with @ContentID and children - DELETE from Entries where ContentID in(Select ContentID from @Children) - -- Delete ROUsages associated with @ContentID and children - DELETE from RoUsages where ContentID in(Select ContentID from @Children) - -- Delete ZTransitions records associated with @ContentID and children - DELETE FROM ZTransitions where TransitionID - in(SELECT TransitionID from Transitions where FromID in(SELECT ContentID FROM @Children) or FromID = @ContentID) - -- Delete Transitions associated with @ContentID and children - DELETE FROM Transitions where FromID in(SELECT ContentID FROM @Children) or FromID = @ContentID - -- Delete Parts associated with @ContentID and children - DELETE from Parts where ContentID in(Select ContentID from @Children) - -- Delete ZContents associated with @ContentID and children - DELETE from ZContents where ContentID in(Select ContentID from @Children) - -- Disconnect Items from Each Other - DELETE from Items where ItemID in(Select ItemID from @Children) and PreviousID Is Not Null - -- Disconnect Items to be deleted from each other - Update Items set PreviousID = null where ItemID in (Select ItemID from @Children) and PreviousID Is Not Null - -- Delete Item Records - DELETE from Items where ItemID in(Select ItemID from @Children) - -- DELETE Contents - DELETE from Contents where ContentID in(Select ContentID from @Children) ---delete from itemaudits where itemid = @newitemid -delete from itemaudits where itemid in (select itemid from vefn_ChildItems(@newitemid)) ---delete from contentaudits where contentid = (select contentid from items where itemid = @newitemid) -delete from contentaudits where contentid in (select contentid from vefn_ChildItems(@newitemid)) - DELETE from DeleteLog where DeleteID = @DeleteID - IF( @@TRANCOUNT > 0 ) COMMIT - EXECUTE GetItem @NewItemID -END TRY -BEGIN CATCH -- Catch Block - IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level - ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback - EXEC vlnErrorHandler -END CATCH -go - - - - - - -IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[CopyItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) - DROP PROCEDURE [CopyItemAndChildren]; -GO - - /***************************************************************************** - Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE - Copyright 2024 - Volian Enterprises, Inc. All rights reserved. - *****************************************************************************/ - /* - ========================================================================================================== - Author: Kevin Laskey - Create Date: 07/15/2024 - Description: B2024-041: "Copy of" is no longer being appended for paste before/after - ========================================================================================================== - */ - - -/****** Object: StoredProcedure [dbo].[CopyItemAndChildren] Script Date: 7/15/2024 10:01:59 AM ******/ -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO - -/***************************************************************************** - Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE - Copyright 2012 - Volian Enterprises, Inc. All rights reserved. -*****************************************************************************/ -CREATE PROCEDURE [dbo].[CopyItemAndChildren] -( - @StartItemID INT, - @DestFormatID INT, - @UserID NVARCHAR(100), - @NewStartItemID int output -) -WITH EXECUTE AS OWNER -AS -BEGIN TRY -- Try Block - ---+-----------------------------------------------------------------+ ---& BEGIN TRANSACTION to make these changes temporary & ---+-----------------------------------------------------------------+ - BEGIN TRANSACTION - if exists (select * from tblitems where itemid = @StartItemID and DeleteStatus !=0) - BEGIN - RAISERROR ('###Cannot Paste Step###This step has been deleted',16,1) - RETURN - END -DECLARE @Children AS TABLE -( - ItemID INT PRIMARY KEY, - NewItemID INT, - ContentID INT, - NewContentID INT, - FormatID INT, - NewFormatID INT -) -DECLARE @NewDocuments AS TABLE -( - DocID INT PRIMARY KEY, - NewDocID INT -) --- Locals -DECLARE @DTS DATETIME -- DTS of all New Items -DECLARE @StartContentID INT -Select @StartContentID = ContentID from Items where ItemID = @StartItemID -SET @DTS = GETDATE() -- Get the current Date and Time --- Get a list of all of the Items to be copied based upon StartItemID and EndItemID --- If the StartItemID = EndItemID then it is a single item and it's children -INSERT INTO @Children SELECT ItemID,ItemID,ContentID,ContentID,FormatID,FormatID FROM vefn_ChildItemsRange(@StartItemID,@StartItemID,null) --- <<< Copy Contents >>> --- Create new content rows to match the existing rows. Set the type to the Current ContentID temporarily --- so that the new content rows can be associated with the existing content rows. -INSERT INTO Contents - ([Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID]) - select CASE when [ContentID] = @StartContentID and [Type]<20000 then 'Copy Of ' + [Number] else [Number] end, - [Text],[ContentID],[FormatID],[Config],@DTS,@UserID - from Contents where ContentID in(Select ContentID from @Children) --- Update the @Children with the NewConentIDs ---print 'A ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -UPDATE NN set NN.NewContentID = CC.ContentID -From Contents CC -Join @Children NN on NN.ContentID = CC.Type AND CC.DTS = @DTS and CC.UserID = @UserID --- Reset the Type column in the Contents table with the Type column from the original Records. ---print 'B ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -DECLARE @SourceType INT -Select @SourceType = Type from Contents where ContentID = @StartContentID -if @SourceType = 0 - BEGIN - UPDATE CC set CC.Type = CC2.Type, CC.DTS = CC2.DTS, CC.UserID = CC2.UserID - From Contents CC - Join @Children NN on NN.NewContentID = CC.ContentID - Join Contents CC2 on NN.ContentID = CC2.ContentID - END -else - BEGIN -UPDATE CC set CC.Type = CC2.Type -From Contents CC -Join @Children NN on NN.NewContentID = CC.ContentID -Join Contents CC2 on NN.ContentID = CC2.ContentID - END ---print 'B1 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- Contents are done - -- SELECT * From Contents where DTS = @DTS and UserID = @UserID --- <<< Copy Grids >>> -INSERT INTO [Grids]([ContentID],[Data],[Config],[DTS],[UserID]) - SELECT NN.[NewContentID],[Data],[Config],@DTS,@UserID - FROM [Grids] GG Join @Children NN on GG.ContentID = NN.ContentID --- <<< Copy Images >>> ---print 'B2 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -INSERT INTO [Images]([ContentID],[ImageType],[FileName],[Data],[Config],[DTS],[UserID]) - SELECT NN.[NewContentID],[ImageType],[FileName],[Data],[Config],@DTS,@UserID - FROM [Images] II Join @Children NN on II.ContentID = NN.ContentID --- Create new item rows based upon the current item rows and the @Children table, with the NewContentIDs ---print 'B3 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -INSERT INTO [Items] ([PreviousID],[ContentID],[DTS],[UserID]) - SELECT II.[PreviousID], -- Leave the PreviousID as is for now - NN.NewContentID, @DTS, @UserID - from @Children NN - join Items II on II.ContentID = NN.ContentID --- Update the @Children with the NewItemIDs ---print 'B4 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -UPDATE NN set NN.NewItemID = II.ItemID -From Items II -Join @Children NN on NN.NewContentID = II.ContentID AND II.DTS = @DTS and II.UserID = @UserID -DECLARE @NewItemID int -SELECT @NewItemID = NewItemID - FROM @Children - WHERE ItemID = @StartItemID ---print 'B5 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -UPDATE NN SET NN.[NewFormatID] = CC.[FormatID] - FROM @Children NN - Join vefn_ChildItemsRange(@NewItemID,@NewItemID,@DestFormatID) CC - ON NN.NewItemID = CC.ItemID --- The @Children table is now complete - --SELECT * From @Children --- Update the PreviousID in the new Item rows, to the new ItemIDs based upon the old ItemIDs ---print 'B6 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -Update II Set II.[PreviousID] = NN.NewItemID -from Items II -Join @Children NN on NN.ItemID = II.PreviousID AND II.DTS = @DTS and II.UserID = @UserID --- Get the new ItemIDs based upon the old ItemIDs -SELECT @NewStartItemID = NewItemID from @Children where ItemID = @StartItemID ---SELECT @NewEndItemID = NewItemID from @Children where ItemID = @EndItemID --- Set the PreviousID for the starting Item to null temporarily. --- This will be adjusted based upon where the step is inserted. ---print 'B7 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -Update Items Set PreviousID = null where ItemID = @NewStartItemID -if @SourceType = 0 - BEGIN - UPDATE II SET II.DTS = II2.DTS, II.UserID = II2.UserID - From Items II - Join @Children NN on NN.NewItemID = II.ItemID - Join Items II2 on NN.ItemID = II2.ItemID - WHERE NN.ItemID = @StartItemID - END ---print 'C ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- Items are done - --SELECT * From Items where DTS = @DTS and UserID = @UserID --- <<< Copy Parts >>> -INSERT INTO [Parts] ([ContentID],[FromType],[ItemID],[DTS],[UserID]) -Select NNF.NewContentID,[FromType],NNT.NewItemID, @DTS, @UserID from Parts PP -JOIN @Children NNF on PP.ContentID = NNF.ContentID -JOIN @Children NNT on PP.ItemID = NNT.ItemID ---print 'D ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- Parts are done - -- SELECT * From Parts where DTS = @DTS and UserID = @UserID --- <<< Copy Annotations >>> -INSERT INTO [Annotations] ([ItemID],[TypeID],[RtfText],[SearchText],[Config],[DTS],[UserID]) - Select NewItemID, TypeID, RtfText, SearchText, Config, @DTS, @UserID - from Annotations AA Join @Children NN on AA.ItemID = NN.ItemID ---print 'E ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- Annotations are done - -- SELECT * From Annotations where DTS = @DTS and UserID = @UserID --- <<< Copy Documents and Entries>>> --- logic to create Entries for Library Documents -INSERT INTO [Entries] ([ContentID],[DocID],[DTS],[UserID]) - SELECT NN.[NewContentID],EE.[DocID],@DTS,@UserID - FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID - JOIN [Documents] DD on EE.[DocID] = DD.[DocID] and Isnull(LibTitle,'') <> '' --- Logic to create new documents for any documents used that do not have libtitles -INSERT INTO [Documents] ([LibTitle],[DocContent],[DocAscii],[Config],[DTS],[UserID],[FileExtension]) - OUTPUT CAST(INSERTED.[LibTitle] as INT),INSERTED.[DocID] INTO @NewDocuments - SELECT str(DD.[DocID]),[DocContent],[DocAscii],[Config],@DTS,@UserID,[FileExtension] - FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID - JOIN [Documents] DD on EE.[DocID] = DD.[DocID] and Isnull(LibTitle,'') = '' -UPDATE DD SET LibTitle = '' - FROM Documents DD JOIN @NewDocuments ND on DD.[DocID] = ND.[NewDocID] - where DTS = @DTS and UserID = @UserID ---print 'F ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- Documents are Done - -- SELECT * From Documents where DTS = @DTS and UserID = @UserID --- Logic to create entries for these newly created documents -INSERT INTO [Entries] ([ContentID],[DocID],[DTS],[UserID]) - SELECT NN.[NewContentID],ND.[NewDocID],@DTS,@UserID - FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID - JOIN @NewDocuments ND on EE.[DocID] = ND.[DocID] --- Logic to Create DROUsages for these newly created documents -INSERT INTO [DROUsages] ([DocID],[ROID],[Config],[DTS],[UserID],[RODbID]) - SELECT ND.[NewDocID],[ROID],[Config],@DTS,@UserID,[RODbID] - FROM [DROUsages] RR - JOIN @NewDocuments ND on RR.[DocID] = ND.[DocID] - ---print 'G ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- Entries are done - -- SELECT * From Entries EE JOIN Documents DD on ee.DocID = DD.DocID where EE.DTS = @DTS and EE.UserID = @UserID --- <<< Copy RoUsages >>> -INSERT INTO [RoUsages] ([ContentID],[ROID],[Config],[DTS],[UserID],[RODbID]) - SELECT NN.[NewContentID],CAST([ROUsageID] as nvarchar(16)),[Config],@DTS,@UserID,[RODbID] - FROM [RoUsages] RR Join @Children NN on RR.ContentID = NN.ContentID --- Update content records for newly copied records to use correct RO usage ids in the RO tags -DECLARE @RowsAffected int -SET @RowsAffected=1 -WHILE @RowsAffected > 0 -BEGIN - UPDATE CC SET [TEXT] = C2.NewText - FROM CONTENTS CC - JOIN (SELECT C1.ContentID, .dbo.vefn_FixROText(C1.Text, CAST([ROID] as int), [ROUsageID]) NewText - FROM CONTENTS C1 - JOIN @Children NN on C1.ContentID = NN.NewContentID - JOIN RoUsages RO on NN.NewContentID = RO.ContentID where Len([ROID]) < 12) C2 ON CC.ContentID = C2.ContentID - WHERE [TEXT] <> C2.NewText - SET @RowsAffected = @@RowCount -END --- Update grid records for newly copied records to use correct RO usage ids in the RO tags -SET @RowsAffected=1 -WHILE @RowsAffected > 0 -BEGIN - UPDATE GG SET [Data] = G2.NewData - FROM GRIDS GG - JOIN (SELECT G1.ContentID, .dbo.vefn_FixROData(G1.Data, CAST([ROID] as int), [ROUsageID]) NewData - FROM GRIDS G1 - JOIN @Children NN on G1.ContentID = NN.NewContentID - JOIN RoUsages RO on NN.NewContentID = RO.ContentID where Len([ROID]) < 12) G2 ON GG.ContentID = G2.ContentID - WHERE Cast([Data] as nvarchar(max)) <> cast(G2.NewData as nvarchar(max)) - SET @RowsAffected = @@RowCount -END -UPDATE RON SET [ROID] = ROO.[ROID] - FROM RoUsages RON - JOIN @Children NN on RON.ContentID = NN.NewContentID - JOIN RoUsages ROO on CAST(RON.ROID as int) = ROO.RoUsageID - where Len(RON.[ROID]) < 12 ---print 'H ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- RoUsages are done - -- SELECT * From RoUsages where DTS = @DTS and UserID = @UserID - --- <<< Copy Transtions >>> --- Note that the inserted record has the 'TranType' field set to old transitionid. This is done --- so that the next step can replace the old transitionid with the new transitionid in the --- content record's transition tokens. The TranType gets reset after the content records are --- updated. --- Also note that the 'toid/rangeid' may need converted to newly copied ids or may not. If it's --- not a range, then it always is converted to new, if there is a new. If it's a range, both --- the toid & the rangeid must be new in order for the conversion to be correct. You cannot --- have part of the range pointing to the new and part of the range pointing to the original --- locations. - -INSERT INTO .[dbo].[Transitions] ([FromID],[ToID],[RangeID],[IsRange],[TranType],[Config],[DTS],[UserID]) - SELECT NNF.[NewContentID], - -- if both toid & range are null, use the original toid & rangeid - CASE WHEN NNT.[NewItemID] is null or NNR.[NewItemID] is null THEN [ToID] ELSE NNT.[NewItemID] END, - CASE WHEN NNT.[NewItemID] is null or NNR.[NewItemID] is null THEN [RangeID] ELSE NNR.[NewItemID] END, - [IsRange],[TransitionID],[Config],@DTS,@UserID - FROM .[dbo].[Transitions] TT - JOIN @Children NNF on TT.[FromID] = NNF.[ContentID] - LEFT JOIN @Children NNT on TT.[ToID] = NNT.[ItemID] - LEFT JOIN @Children NNR on TT.[RangeID] = NNR.[ItemID] ---print 'H1 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- -- Update content records for newly copied records to use correct TransitionIDs in the Transition tags -SET @RowsAffected=1 -WHILE @RowsAffected > 0 -BEGIN -UPDATE CC SET [TEXT] = C2.NewText - FROM CONTENTS CC - JOIN (SELECT C1.ContentID, .dbo.vefn_FixTransitionTextForCopy(C1.Text, TRO.TransitionID, TRO.TranType, TRO.[ToID], TRO.[RangeID],TR.[TransitionID], TR.[ToID], TR.[RangeID], .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)) NewText - FROM CONTENTS C1 - JOIN @Children NN on C1.ContentID = NN.NewContentID - JOIN Transitions TR on NN.NewContentID = TR.FromID - JOIN Transitions TRO on TR.TranType = TRO.TransitionID) C2 ON CC.ContentID = C2.ContentID - WHERE [TEXT] <> C2.NewText - SET @RowsAffected = @@RowCount -END ---print 'H2 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) ---set nocount off --- -- Update grid records for newly copied records to use correct TransitionIDs in the Transition tags -declare @grids table -( -contentid int primary key, -data xml -) -insert into @grids select gg.contentid,gg.data from GRIDS GG - where gg.contentid in (select nn.newcontentid from - @Children NN - JOIN Transitions TR on NN.NewContentID = TR.FromID - JOIN Transitions TRO on TR.TranType = TRO.TransitionID) ---print 'H2.1 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) ---select * from @grids -SET @RowsAffected=1 -WHILE @RowsAffected > 0 -BEGIN -UPDATE GG SET [DATA] = G2.NewData - FROM @GRIDS GG - JOIN (SELECT G1.ContentID, .dbo.vefn_FixTransitionDataForCopy(G1.Data, TRO.TransitionID, TRO.TranType, TRO.[ToID], TRO.[RangeID],TR.[TransitionID], TR.[ToID], TR.[RangeID], .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)) NewData - FROM @GRIDS G1 - JOIN @Children NN on G1.ContentID = NN.NewContentID - JOIN Transitions TR on NN.NewContentID = TR.FromID - JOIN Transitions TRO on TR.TranType = TRO.TransitionID) G2 ON GG.ContentID = G2.ContentID - WHERE Cast([DATA] as nvarchar(max)) <> CAST(G2.NewData as nvarchar(max)) - SET @RowsAffected = @@RowCount -END ---print 'H2.2 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -update GG set data = g1.data from Grids gg join @grids g1 on gg.contentid = g1.contentid ---print 'H3 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) ---set nocount on --- Add 'Verification Required' AnnotationType - DECLARE @typeID int - SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required' - IF(@typeID IS NULL) - BEGIN - INSERT INTO [AnnotationTypes] ([Name],[UserID]) VALUES ('Verification Required','Volian') - SELECT @typeID = SCOPE_IDENTITY() - END - -- Add "Verification Required" Annotation for each Transition whose transition format changes -INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID]) - SELECT NN.NewItemID, @typeID,'Verify Transition Format',@UserID - FROM Transitions TR - JOIN @Children NN on TR.FromID = NN.NewContentID - JOIN Transitions TRO on TR.TranType = TRO.TransitionID - WHERE .dbo.vefn_CompareTranFormat(NN.FormatID, NN.NewFormatID, TRO.TranType) <> 0 ---print 'H4 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) -UPDATE TR SET TR.[TranType] = .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType) - FROM Transitions TR - JOIN @Children NN on TR.FromID = NN.NewContentID - JOIN Transitions TRO on TR.TranType = TRO.TransitionID ---print 'H5 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) --- Transitions are done - -- SELECT * From Transitions where DTS = @DTS and UserID = @UserID ---print 'Z ' + cast(datediff(s,@dts,getdate()) as varchar(100)) ---foldouts fixing code -if exists (select * from contents where contentid in (select newcontentid from @children) and config like '%FloatingFoldout%') -begin - --insert into #mytemp - select cc.contentid,xsteps.value('@FloatingFoldout','int') oldfoldoutid,(select newitemid - from @children - where itemid = xsteps.value('@FloatingFoldout','int')) newfoldoutid,xconfig - into #mytemp - from (select *,cast(config as xml) xconfig from contents where contentid in (select newcontentid from @children)) cc - cross apply xconfig.nodes('Config/Step') tsteps(xsteps) - --build @cmd string - declare @cmd nvarchar(max) - declare cmds cursor for - select distinct 'update #mytemp set xconfig.modify(''replace value of (Config/Step/@FloatingFoldout)[1] with "' - + cast(newfoldoutid as varchar(10)) - + '"'') where xconfig.value(''(Config/Step/@FloatingFoldout)[1]'',''int'') = ' - + cast(oldfoldoutid as varchar(10)) - from #mytemp - --execute cursor over rows - open cmds - fetch next from cmds into @cmd - while @@fetch_status = 0 - begin - exec sp_executesql @cmd - fetch next from cmds into @cmd - end - close cmds - deallocate cmds - --actually update contents - update cc set config = cast(xconfig as varchar(max)) from contents cc join #mytemp mt on cc.contentid = mt.contentid - --get rid of #mytemp - drop table #mytemp -end ---end foldouts fixing code ---section start -DECLARE @NewContentID int -Select @NewContentID = NewContentID from @Children where ItemID = @StartItemID -DECLARE @Config varchar(max) -DECLARE @XConfig xml -select @Config = config from contents where contentid = @NewContentID -select @XConfig = cast(@Config as xml) -if @Config like '%SectionStart%' begin - DECLARE @SectionStart int - select @SectionStart = xproc.value('@SectionStart','int') from @xconfig.nodes('Config/Procedure') tproc(xproc) - DECLARE @NewSectionStart int - select @NewSectionStart = newitemid from @children where itemid = @SectionStart - DECLARE @cmd2 nvarchar(max) - set @cmd2 = ' - declare @XConfig xml; - set @XConfig = cast(''' + @Config + ''' as xml); - set @XConfig.modify(''replace value of (Config/Procedure/@SectionStart)[1] with "' + cast(@NewSectionStart as nvarchar(10)) + '"''); - update contents set config = cast(@XConfig as varchar(max)) where contentid = ' + cast(@NewContentID as nvarchar(10)) + ';' - exec sp_executesql @cmd2 -end ---end section start - IF( @@TRANCOUNT > 0 ) COMMIT -END TRY -BEGIN CATCH -- Catch Block - IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level - ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback - EXEC vlnErrorHandler -END CATCH Go + IF (@@Error = 0) PRINT 'Procedure Creation: [CopyItemAndChildren] Succeeded' + ELSE PRINT 'Procedure Creation: [CopyItemAndChildren] Error on Creation' + GO + /* ========================================================================================================== End: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'') @@ -23255,6 +22637,275 @@ Go +/* +========================================================================================================== + Begin: C2024-005: PRL - SPs to support Admin tool to clean Annotations +========================================================================================================== +*/ + +/****** Object: StoredProcedure [dbo].[deleteAnnotationsDocvByType] Script Date: 7/11/2024 2:39:59 PM ******/ + +IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'deleteAnnotationsDocvByType') +DROP PROCEDURE [dbo].[deleteAnnotationsDocvByType] +GO + +/****** Object: StoredProcedure [dbo].[deleteAnnotationsDocvByType] Script Date: 7/11/2024 2:39:59 PM ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + /***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2024 - Volian Enterprises, Inc. All rights reserved. + *****************************************************************************/ + /* + ========================================================================================================== + Author: Paul Larsen + Modified Date: 07/11/2024 + Description: Delete Annotations in DocVersions by Annotation Type + ========================================================================================================== + */ + +CREATE procedure [dbo].[deleteAnnotationsDocvByType] +( + @docvList varchar(MAX), + @typeid int +) +AS + + DECLARE @docvs TABLE + ( + RowID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, + DocvVersionID int + ) + + DECLARE @Annotationitems table + ( + RowID int NOT NULL IDENTITY(1,1), + AllItemIDs int + ) + + INSERT INTO @docvs (DocvVersionID) (select id from vefn_SplitInt(@docvList, ',')) + + DECLARE @cnt int = 0 + DECLARE @cnt2 int + DECLARE @itemid int + DECLARE @i INT + SET @i = (SELECT MIN(RowID) FROM @docvs); + DECLARE @max INT; + SET @max = (SELECT MAX(RowID) FROM @docvs); + + -- add all itemids relateted to requested Annotation cleaning. + while (@i <= @max) + BEGIN + SELECT @itemid = DocvVersionID from @docvs where RowID = @i + INSERT INTO @Annotationitems (AllItemIDs) + (SELECT cir.itemid FROM [vefn_GetVersionItems](@docvList) cir JOIN Annotations an on an.itemid = cir.itemid where an.typeid = @typeid) + --vefn_ChildItemsRange(@itemid,@itemid,null) cir JOIN Annotations an on an.itemid = cir.itemid where an.typeid = @typeid) + SET @i = @i + 1; + END + + SELECT @i = MIN(RowID) FROM @docvs; + SELECT @max = MAX(RowID) FROM @docvs; + + -- Delete Annotations + DELETE FROM Ann + FROM tblAnnotations Ann INNER JOIN @Annotationitems AI ON Ann.itemid = AI.AllItemIDs WHERE TypeID = @typeidI beleive the + +GO + +IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'deleteAnnotationsProcByType') +DROP PROCEDURE [dbo].[deleteAnnotationsProcByType] +GO + +/****** Object: StoredProcedure [dbo].[deleteAnnotationsProcByType] Script Date: 7/11/2024 2:46:05 PM ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + /***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2024 - Volian Enterprises, Inc. All rights reserved. + *****************************************************************************/ + /* + ========================================================================================================== + Author: Paul Larsen + Modified Date: 07/11/2024 + Description: Delete Annotations in Procedures by Annotation Type + ========================================================================================================== + */ + +CREATE procedure [dbo].[deleteAnnotationsProcByType] +( + @procList varchar(MAX), + @typeid int +) +AS + + DECLARE @procs TABLE + ( + RowID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, + ProcItemIDs int + ) + + DECLARE @Annotationitems table + ( + RowID int NOT NULL IDENTITY(1,1), + AllItemIDs int + ) + + DECLARE @cnt int = 0 + DECLARE @cnt2 int + DECLARE @itemid int + + INSERT INTO @procs (ProcItemIDs) (select id from vefn_SplitInt(@procList, ',')) + + DECLARE @i INT + SET @i = (SELECT MIN(RowID) FROM @procs); + DECLARE @max INT; + SET @max = (SELECT MAX(RowID) FROM @procs); + + -- add all itemids relateted to requested Annotation cleaning. + while (@i <= @max) + BEGIN + SELECT @itemid = ProcItemIDs from @procs where RowID = @i + INSERT INTO @Annotationitems (AllItemIDs) + (SELECT cir.itemid FROM vefn_ChildItemsRange(@itemid,@itemid,null) cir JOIN Annotations an on an.itemid = cir.itemid where an.typeid = @typeid) + SET @i = @i + 1; + END + + SELECT @i = MIN(RowID) FROM @procs; + SELECT @max = MAX(RowID) FROM @procs; + + -- Delete Annotations + DELETE FROM Ann + FROM tblAnnotations Ann INNER JOIN @Annotationitems AI ON Ann.itemid = AI.AllItemIDs WHERE TypeID = @typeid +GO + +IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'getAnnotationDocvCount') +DROP PROCEDURE [dbo].[getAnnotationDocvCount] +GO + +/****** Object: StoredProcedure [dbo].[getAnnotationDocvCount] Script Date: 7/11/2024 2:48:35 PM ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + /***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2024 - Volian Enterprises, Inc. All rights reserved. + *****************************************************************************/ + /* + ========================================================================================================== + Author: Paul Larsen + Modified Date: 07/11/2024 + Description: Retrieve the number of Annotations that will be deleted (DocVersions) + ========================================================================================================== + */ + +CREATE procedure [dbo].[getAnnotationDocvCount] +( + @docvList varchar(MAX), + @typeid int +) +AS + +DECLARE @docvs TABLE +( + RowID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, + itemid int +) + +--INSERT INTO @procs from STRING_SPLIT(@procList, ',') + +INSERT INTO @docvs (itemid) (select id from vefn_SplitInt(@docvList, ',')) + + DECLARE @cnt int = 0 + + SELECT @cnt = count(cir.itemid) FROM [vefn_GetVersionItems](@docvList) cir JOIN Annotations an on an.itemid = cir.itemid where an.typeid = @typeid + + SELECT @cnt AS 'COUNT' + +GO + + +/****** Object: StoredProcedure [dbo].[getAnnotationProcCount] Script Date: 7/11/2024 3:02:05 PM ******/ + + +IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'getAnnotationProcCount') +DROP PROCEDURE [dbo].[getAnnotationProcCount] +GO + + +/****** Object: StoredProcedure [dbo].[getAnnotationProcCount] Script Date: 7/11/2024 3:02:05 PM ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + /***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2024 - Volian Enterprises, Inc. All rights reserved. + *****************************************************************************/ + /* + ========================================================================================================== + Author: Paul Larsen + Modified Date: 07/11/2024 + Description: Retrieve the number of Annotations that will be deleted (Procedures) + ========================================================================================================== + */ + +CREATE procedure [dbo].[getAnnotationProcCount] +( + @procList varchar(MAX), + @typeid int +) +AS + +DECLARE @procs TABLE +( + RowID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, + itemid int +) + +INSERT INTO @procs (itemid) (select id from vefn_SplitInt(@procList, ',')) + + DECLARE @cnt int = 0 + DECLARE @cnt2 int + DECLARE @itemid int + DECLARE @i INT + SELECT @i = MIN(RowID) FROM @procs; + DECLARE @max INT; + SELECT @max = MAX(RowID) FROM @procs; + + while (@i <= @max) + BEGIN + SELECT @itemid = itemid from @procs where RowID = @i + SELECT @cnt = @cnt + (SELECT count(cir.itemid) FROM vefn_ChildItemsRange(@itemid,@itemid,null) cir JOIN Annotations an on an.itemid = cir.itemid where an.typeid = @typeid) + SET @i = @i + 1; + END + + SELECT @cnt AS 'count' + +GO + + +/* +========================================================================================================== + End: C2024-005: PRL - SPs to support Admin tool to clean Annotations +========================================================================================================== +*/ + + + + ----------------------------------------------------------------------------- /* --------------------------------------------------------------------------- @@ -23289,8 +22940,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '07/16/2024 4:19 AM' - set @RevDescription = 'B2024-041: Bug fix for copy/replace functionality on procedures and steps' + set @RevDate = '07/16/2024 5:00 PM' + set @RevDescription = 'C2024-005: An Admin tool that can delete a group of annotations should be developed' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index 64d6b612..1a410a53 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -99,7 +99,10 @@ false + + + ..\..\..\..\3rdPartyLibraries\CSLA\Csla.dll @@ -220,6 +223,12 @@ dlgUCFDetail.cs + + Form + + + frmAnnotationsCleanup.cs + Form @@ -331,6 +340,9 @@ dlgUCFDetail.cs + + frmAnnotationsCleanup.cs + frmPDFStatusForm.cs Designer @@ -614,4 +626,4 @@ cmd /c "$(ProjectDir)FixRev.bat" - \ No newline at end of file + diff --git a/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.Designer.cs b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.Designer.cs new file mode 100644 index 00000000..06925a54 --- /dev/null +++ b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.Designer.cs @@ -0,0 +1,132 @@ + +using VEPROMS.CSLA.Library; +using Volian.Base.Library; +namespace VEPROMS +{ + partial class frmAnnotationsCleanup + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.lbAnnotationTypes = new System.Windows.Forms.ListBox(); + this.itemAnnotationsBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.lblAnnotationsList = new System.Windows.Forms.Label(); + this.btnClean = new System.Windows.Forms.Button(); + this.lblCountNumber = new System.Windows.Forms.Label(); + this.lblCount = new System.Windows.Forms.Label(); + this.btnClose = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.itemAnnotationsBindingSource)).BeginInit(); + this.SuspendLayout(); + // + // lbAnnotationTypes + // + this.lbAnnotationTypes.DataSource = this.itemAnnotationsBindingSource; + this.lbAnnotationTypes.FormattingEnabled = true; + this.lbAnnotationTypes.Location = new System.Drawing.Point(25, 48); + this.lbAnnotationTypes.Name = "lbAnnotationTypes"; + this.lbAnnotationTypes.Size = new System.Drawing.Size(295, 433); + this.lbAnnotationTypes.TabIndex = 0; + // + // lblAnnotationsList + // + this.lblAnnotationsList.AutoSize = true; + this.lblAnnotationsList.Location = new System.Drawing.Point(26, 21); + this.lblAnnotationsList.Name = "lblAnnotationsList"; + this.lblAnnotationsList.Size = new System.Drawing.Size(169, 13); + this.lblAnnotationsList.TabIndex = 1; + this.lblAnnotationsList.Text = "Select a Annotation Type to Clean"; + // + // btnClean + // + this.btnClean.Location = new System.Drawing.Point(365, 164); + this.btnClean.Name = "btnClean"; + this.btnClean.Size = new System.Drawing.Size(131, 36); + this.btnClean.TabIndex = 2; + this.btnClean.Text = "Proceed?"; + this.btnClean.UseVisualStyleBackColor = true; + this.btnClean.Click += new System.EventHandler(this.button1_Click); + // + // lblCountNumber + // + this.lblCountNumber.AutoSize = true; + this.lblCountNumber.Location = new System.Drawing.Point(395, 100); + this.lblCountNumber.Name = "lblCountNumber"; + this.lblCountNumber.Size = new System.Drawing.Size(69, 13); + this.lblCountNumber.TabIndex = 3; + this.lblCountNumber.Text = "Delete Count"; + this.lblCountNumber.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lblCount + // + this.lblCount.AutoSize = true; + this.lblCount.Location = new System.Drawing.Point(331, 70); + this.lblCount.Name = "lblCount"; + this.lblCount.Size = new System.Drawing.Size(206, 13); + this.lblCount.TabIndex = 4; + this.lblCount.Text = "Number of Annotations that will be deleted"; + // + // btnClose + // + this.btnClose.Location = new System.Drawing.Point(397, 457); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(75, 23); + this.btnClose.TabIndex = 5; + this.btnClose.Text = "Close"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // frmAnnotationsCleanup + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(549, 535); + this.Controls.Add(this.btnClose); + this.Controls.Add(this.lblCount); + this.Controls.Add(this.lblCountNumber); + this.Controls.Add(this.btnClean); + this.Controls.Add(this.lblAnnotationsList); + this.Controls.Add(this.lbAnnotationTypes); + this.Name = "frmAnnotationsCleanup"; + this.Text = "Clean Annotations"; + ((System.ComponentModel.ISupportInitialize)(this.itemAnnotationsBindingSource)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListBox lbAnnotationTypes; + private System.Windows.Forms.Label lblAnnotationsList; + private System.Windows.Forms.BindingSource itemAnnotationsBindingSource; + private System.Windows.Forms.Button btnClean; + private System.Windows.Forms.Label lblCountNumber; + private System.Windows.Forms.Label lblCount; + private System.Windows.Forms.Button btnClose; + } +} + diff --git a/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.cs b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.cs new file mode 100644 index 00000000..59506f14 --- /dev/null +++ b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using VEPROMS.CSLA.Library; +using Volian.Base.Library; +//using Volian.Pipe.Library; +using System.Xml; +using System.Diagnostics; +using JR.Utils.GUI.Forms; + +namespace VEPROMS +{ + public partial class frmAnnotationsCleanup : Form + { + Label mylab = new Label(); + string procList = ""; + string docvList = ""; + int AnnotationTyp; + List pil2 = new List(); + List dvil2 = new List(); + private frmBatchRefresh mainForm = null; + // frmAnnotationsCleanup constructor passes users procedure and docversion selections from frmBatchRefresh + public frmAnnotationsCleanup(Form callingForm, List pil, List dvil) + + { // Set up link back to parent form. + mainForm = callingForm as frmBatchRefresh; + InitializeComponent(); + + pil2 = pil; + dvil2 = dvil; + + // Get list of annotation types for plant. + myAnnotationTypeInfoList = AnnotationTypeInfoList.Get(); + lbAnnotationTypes.DataSource = myLocalAnnotationTypeInfoList = new LocalAnnotationTypeInfoList(myAnnotationTypeInfoList); + + Dictionary AnnotationsList = new Dictionary(); + + // Add name and type ID to form. + foreach (LocalAnnotationTypeInfo lati in myLocalAnnotationTypeInfoList) + { + AnnotationsList.Add(lati.TypeID.ToString(), lati.Name); + //cbAnnotationTypes.Items.Add(new { Name = lati.Name, Value = lati.TypeID }); + } + + lbAnnotationTypes.DataSource = new BindingSource(AnnotationsList, null); + lbAnnotationTypes.DisplayMember = "Value"; + lbAnnotationTypes.ValueMember = "Key"; + lbAnnotationTypes.SelectedIndexChanged += lbAnnotationTypes_SelectedIndexChanged; + + } + // create comma delimited string of procedures selected by user. + private string getAnnotationProcItems(List pil2) + { + procList = ""; + foreach (var p in pil2) + { + if (p.IsProcedure) + { + if (procList == "") + { + procList = procList + p.ItemID.ToString(); + } + else + { + procList = procList + "," + p.ItemID.ToString(); + } + } + } + return procList; + } + + // create comma delimited string of doc versions selected by user. + private string getAnnotationDocvItems(List dvil2) + { + docvList = ""; + foreach (var d in dvil2) + { + if (d.IsDocVersion) + { + if (docvList == "") + { + docvList = docvList + d.VersionID.ToString(); + } + else + { + docvList = docvList + "," + d.VersionID.ToString(); + } + } + } + return docvList; + } + + private AnnotationTypeInfoList myAnnotationTypeInfoList = null; + private LocalAnnotationTypeInfoList myLocalAnnotationTypeInfoList = null; + + // Process used to cleanup annotations "(Proceed?" button) + private void button1_Click(object sender, EventArgs e) + { + foreach (var p in pil2) + { + if (p.IsProcedure) + { + TextBox frm2 = mainForm.GettxtProcess(); + frm2.AppendText(p.DisplayNumber + ' ' + p.DisplayText); + AnnotationTyp = System.Convert.ToInt32(((KeyValuePair)lbAnnotationTypes.SelectedItem).Key); + Annotation.DeleteAnnotationProcByType(AnnotationTyp, p.ItemID.ToString()); + lblCountNumber.Text = "0"; + } + + } + foreach (var d in dvil2) + { + if (d.IsDocVersion) + { + TextBox frm2 = mainForm.GettxtProcess(); + frm2.AppendText(d.ActiveParent.ToString()); + AnnotationTyp = System.Convert.ToInt32(((KeyValuePair)lbAnnotationTypes.SelectedItem).Key); + Annotation.DeleteAnnotationDocvByType(AnnotationTyp, d.VersionID.ToString()); + lblCountNumber.Text = "0"; + } + } + } + // Retrieve number of annotations that will be deleted. + private void lbAnnotationTypes_SelectedIndexChanged(object sender, EventArgs e) + { + lblCountNumber.Text = ""; + int deletecountProc = 0; + int deletecountDocv = 0; + if (pil2.Count > 0) + { + AnnotationTyp = System.Convert.ToInt32(((KeyValuePair)lbAnnotationTypes.SelectedItem).Key); + deletecountProc = Annotation.getAnnotationProcCnt(AnnotationTyp, getAnnotationProcItems(pil2)); + } + + if (dvil2.Count > 0) + { + AnnotationTyp = System.Convert.ToInt32(((KeyValuePair)lbAnnotationTypes.SelectedItem).Key); + deletecountDocv = Annotation.getAnnotationCountDocv(AnnotationTyp, getAnnotationDocvItems(dvil2)); + } + lblCountNumber.Text = (deletecountProc + deletecountDocv).ToString(); + + } + // Close form. + private void btnClose_Click(object sender, EventArgs e) + { + this.Close(); + } + + } +} diff --git a/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.resx b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.resx new file mode 100644 index 00000000..e0ab540c --- /dev/null +++ b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs index a917d5b3..547c5582 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.Designer.cs @@ -52,6 +52,24 @@ this.expandableSplitter1 = new DevComponents.DotNetBar.ExpandableSplitter(); this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); this.sideNav1 = new DevComponents.DotNetBar.Controls.SideNav(); + this.sideNavPanel4 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.swDeleteFolder = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX13 = new DevComponents.DotNetBar.LabelX(); + this.swDeleteAnnotations = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX14 = new DevComponents.DotNetBar.LabelX(); + this.myTVdel = new System.Windows.Forms.TreeView(); + this.btnDeleteItems = new DevComponents.DotNetBar.ButtonX(); + this.sideNavPanel1 = new DevComponents.DotNetBar.Controls.SideNavPanel(); + this.warningBox3 = new DevComponents.DotNetBar.Controls.WarningBox(); + this.labelX7 = new DevComponents.DotNetBar.LabelX(); + this.line1 = new DevComponents.DotNetBar.Controls.Line(); + this.swCkObsoleteROData = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.swHiddenDataLocs = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX3 = new DevComponents.DotNetBar.LabelX(); + this.labelX2 = new DevComponents.DotNetBar.LabelX(); + this.swCkOrphanDataRecs = new DevComponents.DotNetBar.Controls.SwitchButton(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.btnRunCheck = new DevComponents.DotNetBar.ButtonX(); this.sideNavPanel2 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.swRefreshTblsForSrch = new DevComponents.DotNetBar.Controls.SwitchButton(); this.lblRefreshTblForSrch = new DevComponents.DotNetBar.LabelX(); @@ -68,17 +86,6 @@ this.labelX8 = new DevComponents.DotNetBar.LabelX(); this.line2 = new DevComponents.DotNetBar.Controls.Line(); this.btnRunRepair = new DevComponents.DotNetBar.ButtonX(); - this.sideNavPanel1 = new DevComponents.DotNetBar.Controls.SideNavPanel(); - this.warningBox3 = new DevComponents.DotNetBar.Controls.WarningBox(); - this.labelX7 = new DevComponents.DotNetBar.LabelX(); - this.line1 = new DevComponents.DotNetBar.Controls.Line(); - this.swCkObsoleteROData = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.swHiddenDataLocs = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.labelX3 = new DevComponents.DotNetBar.LabelX(); - this.labelX2 = new DevComponents.DotNetBar.LabelX(); - this.swCkOrphanDataRecs = new DevComponents.DotNetBar.Controls.SwitchButton(); - this.labelX1 = new DevComponents.DotNetBar.LabelX(); - this.btnRunCheck = new DevComponents.DotNetBar.ButtonX(); this.sideNavPanel3 = new DevComponents.DotNetBar.Controls.SideNavPanel(); this.swCheckROLinks = new DevComponents.DotNetBar.Controls.SwitchButton(); this.labelX12 = new DevComponents.DotNetBar.LabelX(); @@ -90,14 +97,14 @@ this.labelX6 = new DevComponents.DotNetBar.LabelX(); this.warningBox1 = new DevComponents.DotNetBar.Controls.WarningBox(); this.btnFixLinks = new DevComponents.DotNetBar.ButtonX(); - this.sideNavPanel4 = new DevComponents.DotNetBar.Controls.SideNavPanel(); - this.btn_ShowUsers = new DevComponents.DotNetBar.ButtonX(); this.sideNavItem1 = new DevComponents.DotNetBar.Controls.SideNavItem(); this.separator1 = new DevComponents.DotNetBar.Separator(); this.sideNavItmCheck = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmRepair = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmLinks = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmUsers = new DevComponents.DotNetBar.Controls.SideNavItem(); + this.buttonItem1 = new DevComponents.DotNetBar.ButtonItem(); + this.sideNavItmDelete = new DevComponents.DotNetBar.Controls.SideNavItem(); this.sideNavItmExit = new DevComponents.DotNetBar.Controls.SideNavItem(); this.panelEx4 = new DevComponents.DotNetBar.PanelEx(); this.progressSteps1 = new DevComponents.DotNetBar.ProgressSteps(); @@ -118,10 +125,10 @@ this.pnlLater.SuspendLayout(); this.panelEx1.SuspendLayout(); this.sideNav1.SuspendLayout(); - this.sideNavPanel2.SuspendLayout(); - this.sideNavPanel1.SuspendLayout(); - this.sideNavPanel3.SuspendLayout(); this.sideNavPanel4.SuspendLayout(); + this.sideNavPanel1.SuspendLayout(); + this.sideNavPanel2.SuspendLayout(); + this.sideNavPanel3.SuspendLayout(); this.panelEx4.SuspendLayout(); this.SuspendLayout(); // @@ -133,7 +140,7 @@ this.myTV.CheckBoxes = true; this.myTV.Location = new System.Drawing.Point(0, 230); this.myTV.Name = "myTV"; - this.myTV.Size = new System.Drawing.Size(300, 264); + this.myTV.Size = new System.Drawing.Size(183, 226); this.myTV.TabIndex = 4; this.myTV.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.myTV_AfterCheck); // @@ -457,10 +464,10 @@ // sideNav1 // this.sideNav1.BackColor = System.Drawing.SystemColors.Control; - this.sideNav1.Controls.Add(this.sideNavPanel1); - this.sideNav1.Controls.Add(this.sideNavPanel3); - this.sideNav1.Controls.Add(this.sideNavPanel2); this.sideNav1.Controls.Add(this.sideNavPanel4); + this.sideNav1.Controls.Add(this.sideNavPanel1); + this.sideNav1.Controls.Add(this.sideNavPanel2); + this.sideNav1.Controls.Add(this.sideNavPanel3); this.sideNav1.Dock = System.Windows.Forms.DockStyle.Fill; this.sideNav1.EnableClose = false; this.sideNav1.EnableMaximize = false; @@ -471,6 +478,7 @@ this.sideNavItmRepair, this.sideNavItmLinks, this.sideNavItmUsers, + this.sideNavItmDelete, this.sideNavItmExit}); this.sideNav1.Location = new System.Drawing.Point(0, 0); this.sideNav1.Name = "sideNav1"; @@ -479,6 +487,302 @@ this.sideNav1.TabIndex = 3; this.sideNav1.Text = "sideNav1"; // + // sideNavPanel4 + // + this.sideNavPanel4.Controls.Add(this.swDeleteFolder); + this.sideNavPanel4.Controls.Add(this.labelX13); + this.sideNavPanel4.Controls.Add(this.swDeleteAnnotations); + this.sideNavPanel4.Controls.Add(this.labelX14); + this.sideNavPanel4.Controls.Add(this.myTVdel); + this.sideNavPanel4.Controls.Add(this.btnDeleteItems); + this.sideNavPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel4.Location = new System.Drawing.Point(89, 31); + this.sideNavPanel4.Name = "sideNavPanel4"; + this.sideNavPanel4.Size = new System.Drawing.Size(291, 494); + this.sideNavPanel4.TabIndex = 27; + // + // swDeleteFolder + // + // + // + // + this.swDeleteFolder.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swDeleteFolder.Location = new System.Drawing.Point(10, 43); + this.swDeleteFolder.Name = "swDeleteFolder"; + this.swDeleteFolder.Size = new System.Drawing.Size(69, 22); + this.swDeleteFolder.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swDeleteFolder, new DevComponents.DotNetBar.SuperTooltipInfo("Check RO Links", "", resources.GetString("swDeleteFolder.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 150))); + this.swDeleteFolder.SwitchClickTogglesValue = true; + this.swDeleteFolder.TabIndex = 39; + this.swDeleteFolder.Visible = false; + this.swDeleteFolder.ValueChanged += new System.EventHandler(this.swDeleteFolder_ValueChanged); + // + // labelX13 + // + this.labelX13.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX13.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX13.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX13.Location = new System.Drawing.Point(85, 42); + this.labelX13.Name = "labelX13"; + this.labelX13.Size = new System.Drawing.Size(168, 22); + this.superTooltip1.SetSuperTooltip(this.labelX13, new DevComponents.DotNetBar.SuperTooltipInfo("Check RO Links", "", resources.GetString("labelX13.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(350, 175))); + this.labelX13.TabIndex = 38; + this.labelX13.Text = "Delete Folders"; + this.labelX13.Visible = false; + // + // swDeleteAnnotations + // + // + // + // + this.swDeleteAnnotations.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swDeleteAnnotations.Location = new System.Drawing.Point(10, 15); + this.swDeleteAnnotations.Name = "swDeleteAnnotations"; + this.swDeleteAnnotations.Size = new System.Drawing.Size(69, 22); + this.swDeleteAnnotations.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swDeleteAnnotations, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Transitions", "", resources.GetString("swDeleteAnnotations.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(265, 175))); + this.swDeleteAnnotations.SwitchClickTogglesValue = true; + this.swDeleteAnnotations.TabIndex = 37; + this.swDeleteAnnotations.Value = true; + this.swDeleteAnnotations.ValueObject = "Y"; + this.swDeleteAnnotations.ValueChanged += new System.EventHandler(this.swDeleteAnnotations_ValueChanged); + // + // labelX14 + // + this.labelX14.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX14.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX14.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX14.Location = new System.Drawing.Point(85, 14); + this.labelX14.Name = "labelX14"; + this.labelX14.Size = new System.Drawing.Size(186, 22); + this.superTooltip1.SetSuperTooltip(this.labelX14, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Transitions", "", resources.GetString("labelX14.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(256, 175))); + this.labelX14.TabIndex = 36; + this.labelX14.Text = "Delete Annotations"; + // + // myTVdel + // + this.myTVdel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.myTVdel.CheckBoxes = true; + this.myTVdel.Location = new System.Drawing.Point(14, 145); + this.myTVdel.Name = "myTVdel"; + this.myTVdel.Size = new System.Drawing.Size(267, 331); + this.myTVdel.TabIndex = 34; + // + // btnDeleteItems + // + this.btnDeleteItems.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnDeleteItems.Checked = true; + this.btnDeleteItems.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnDeleteItems.Location = new System.Drawing.Point(3, 98); + this.btnDeleteItems.Name = "btnDeleteItems"; + this.btnDeleteItems.Size = new System.Drawing.Size(280, 23); + this.btnDeleteItems.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.btnDeleteItems, new DevComponents.DotNetBar.SuperTooltipInfo("Process Links", "", "This will run the selected RO Links or Transitions Links tool.\r\n\r\nClick on the on" + + "/off switches to turn on/off each tool.\r\n\r\nNote that only one of these tools can" + + " be run at a time.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 130))); + this.btnDeleteItems.TabIndex = 35; + this.btnDeleteItems.Text = "Process Deletions"; + this.btnDeleteItems.Click += new System.EventHandler(this.btnDeleteItems_Click); + // + // sideNavPanel1 + // + this.sideNavPanel1.Controls.Add(this.warningBox3); + this.sideNavPanel1.Controls.Add(this.labelX7); + this.sideNavPanel1.Controls.Add(this.line1); + this.sideNavPanel1.Controls.Add(this.swCkObsoleteROData); + this.sideNavPanel1.Controls.Add(this.swHiddenDataLocs); + this.sideNavPanel1.Controls.Add(this.labelX3); + this.sideNavPanel1.Controls.Add(this.labelX2); + this.sideNavPanel1.Controls.Add(this.swCkOrphanDataRecs); + this.sideNavPanel1.Controls.Add(this.labelX1); + this.sideNavPanel1.Controls.Add(this.btnRunCheck); + this.sideNavPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel1.Location = new System.Drawing.Point(89, 31); + this.sideNavPanel1.Name = "sideNavPanel1"; + this.sideNavPanel1.Size = new System.Drawing.Size(291, 494); + this.sideNavPanel1.TabIndex = 2; + this.sideNavPanel1.Visible = false; + // + // warningBox3 + // + this.warningBox3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); + this.warningBox3.CloseButtonVisible = false; + this.warningBox3.Image = ((System.Drawing.Image)(resources.GetObject("warningBox3.Image"))); + this.warningBox3.Location = new System.Drawing.Point(17, 207); + this.warningBox3.Margin = new System.Windows.Forms.Padding(4); + this.warningBox3.Name = "warningBox3"; + this.warningBox3.OptionsButtonVisible = false; + this.warningBox3.Size = new System.Drawing.Size(264, 32); + this.warningBox3.TabIndex = 29; + this.warningBox3.Text = "NOTE These tools can take a long time to run"; + // + // labelX7 + // + this.labelX7.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX7.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX7.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX7.Location = new System.Drawing.Point(5, 3); + this.labelX7.Name = "labelX7"; + this.labelX7.Size = new System.Drawing.Size(251, 22); + this.labelX7.TabIndex = 19; + this.labelX7.Text = "Check for these Data Issues:"; + // + // line1 + // + this.line1.BackColor = System.Drawing.Color.Transparent; + this.line1.Location = new System.Drawing.Point(8, 179); + this.line1.Name = "line1"; + this.line1.Size = new System.Drawing.Size(285, 12); + this.line1.TabIndex = 18; + this.line1.Text = "line1"; + // + // swCkObsoleteROData + // + // + // + // + this.swCkObsoleteROData.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swCkObsoleteROData.Location = new System.Drawing.Point(10, 99); + this.swCkObsoleteROData.Name = "swCkObsoleteROData"; + this.swCkObsoleteROData.Size = new System.Drawing.Size(91, 22); + this.swCkObsoleteROData.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swCkObsoleteROData, new DevComponents.DotNetBar.SuperTooltipInfo("Obsolete RO Data", "", resources.GetString("swCkObsoleteROData.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 135))); + this.swCkObsoleteROData.SwitchClickTogglesValue = true; + this.swCkObsoleteROData.TabIndex = 14; + this.swCkObsoleteROData.Value = true; + this.swCkObsoleteROData.ValueObject = "Y"; + this.swCkObsoleteROData.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); + // + // swHiddenDataLocs + // + // + // + // + this.swHiddenDataLocs.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swHiddenDataLocs.Location = new System.Drawing.Point(10, 71); + this.swHiddenDataLocs.Name = "swHiddenDataLocs"; + this.swHiddenDataLocs.Size = new System.Drawing.Size(91, 22); + this.swHiddenDataLocs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swHiddenDataLocs, new DevComponents.DotNetBar.SuperTooltipInfo("Hidden Data Locations", "", resources.GetString("swHiddenDataLocs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.swHiddenDataLocs.SwitchClickTogglesValue = true; + this.swHiddenDataLocs.TabIndex = 15; + this.swHiddenDataLocs.Value = true; + this.swHiddenDataLocs.ValueObject = "Y"; + this.swHiddenDataLocs.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); + // + // labelX3 + // + this.labelX3.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX3.Location = new System.Drawing.Point(107, 99); + this.labelX3.Name = "labelX3"; + this.labelX3.Size = new System.Drawing.Size(154, 22); + this.superTooltip1.SetSuperTooltip(this.labelX3, new DevComponents.DotNetBar.SuperTooltipInfo("Obsolete RO Data", "", resources.GetString("labelX3.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 135))); + this.labelX3.TabIndex = 11; + this.labelX3.Text = "Obsolete RO Data"; + // + // labelX2 + // + this.labelX2.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX2.Location = new System.Drawing.Point(107, 71); + this.labelX2.Name = "labelX2"; + this.labelX2.Size = new System.Drawing.Size(140, 22); + this.superTooltip1.SetSuperTooltip(this.labelX2, new DevComponents.DotNetBar.SuperTooltipInfo("Hidden Data Locations", "", resources.GetString("labelX2.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); + this.labelX2.TabIndex = 12; + this.labelX2.Text = "Hidden Data Locations"; + // + // swCkOrphanDataRecs + // + // + // + // + this.swCkOrphanDataRecs.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.swCkOrphanDataRecs.Location = new System.Drawing.Point(10, 43); + this.swCkOrphanDataRecs.Name = "swCkOrphanDataRecs"; + this.swCkOrphanDataRecs.Size = new System.Drawing.Size(91, 22); + this.swCkOrphanDataRecs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.swCkOrphanDataRecs, new DevComponents.DotNetBar.SuperTooltipInfo("Orphan Data Records", "", resources.GetString("swCkOrphanDataRecs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(275, 193))); + this.swCkOrphanDataRecs.SwitchClickTogglesValue = true; + this.swCkOrphanDataRecs.TabIndex = 9; + this.swCkOrphanDataRecs.Value = true; + this.swCkOrphanDataRecs.ValueObject = "Y"; + this.swCkOrphanDataRecs.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); + // + // labelX1 + // + this.labelX1.BackColor = System.Drawing.Color.Transparent; + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX1.Location = new System.Drawing.Point(107, 43); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(172, 22); + this.superTooltip1.SetSuperTooltip(this.labelX1, new DevComponents.DotNetBar.SuperTooltipInfo("Orphan Data Records", "", resources.GetString("labelX1.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(275, 190))); + this.labelX1.TabIndex = 8; + this.labelX1.Text = "Orphan Data Records"; + // + // btnRunCheck + // + this.btnRunCheck.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnRunCheck.Checked = true; + this.btnRunCheck.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnRunCheck.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnRunCheck.Location = new System.Drawing.Point(5, 150); + this.btnRunCheck.Name = "btnRunCheck"; + this.btnRunCheck.Size = new System.Drawing.Size(286, 23); + this.btnRunCheck.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.superTooltip1.SetSuperTooltip(this.btnRunCheck, new DevComponents.DotNetBar.SuperTooltipInfo("Run Check", "", "This will run the database check tools selected.\r\n\r\nClick on the on/off switches " + + "to turn on/off each tool.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 100))); + this.btnRunCheck.TabIndex = 7; + this.btnRunCheck.Text = "Run Check"; + this.btnRunCheck.Click += new System.EventHandler(this.btnRunCheck_Click); + // + // sideNavPanel2 + // + this.sideNavPanel2.Controls.Add(this.swRefreshTblsForSrch); + this.sideNavPanel2.Controls.Add(this.lblRefreshTblForSrch); + this.sideNavPanel2.Controls.Add(this.warningBox4); + this.sideNavPanel2.Controls.Add(this.warningBox2); + this.sideNavPanel2.Controls.Add(this.swRmObsoleteROData); + this.sideNavPanel2.Controls.Add(this.swRefreshWordAttmts); + this.sideNavPanel2.Controls.Add(this.swStandardHypenChars); + this.sideNavPanel2.Controls.Add(this.labelX4); + this.sideNavPanel2.Controls.Add(this.labelX5); + this.sideNavPanel2.Controls.Add(this.labelX9); + this.sideNavPanel2.Controls.Add(this.swRmOrphanDataRecs); + this.sideNavPanel2.Controls.Add(this.labelX10); + this.sideNavPanel2.Controls.Add(this.labelX8); + this.sideNavPanel2.Controls.Add(this.line2); + this.sideNavPanel2.Controls.Add(this.btnRunRepair); + this.sideNavPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.sideNavPanel2.Location = new System.Drawing.Point(89, 31); + this.sideNavPanel2.Name = "sideNavPanel2"; + this.sideNavPanel2.Size = new System.Drawing.Size(291, 494); + this.sideNavPanel2.TabIndex = 6; + this.sideNavPanel2.Visible = false; + // // swRefreshTblsForSrch // // @@ -517,6 +821,7 @@ this.warningBox4.CloseButtonVisible = false; this.warningBox4.Image = ((System.Drawing.Image)(resources.GetObject("warningBox4.Image"))); this.warningBox4.Location = new System.Drawing.Point(12, 264); + this.warningBox4.Margin = new System.Windows.Forms.Padding(4); this.warningBox4.Name = "warningBox4"; this.warningBox4.OptionsButtonVisible = false; this.warningBox4.Size = new System.Drawing.Size(264, 32); @@ -529,6 +834,7 @@ this.warningBox2.CloseButtonVisible = false; this.warningBox2.Image = ((System.Drawing.Image)(resources.GetObject("warningBox2.Image"))); this.warningBox2.Location = new System.Drawing.Point(12, 302); + this.warningBox2.Margin = new System.Windows.Forms.Padding(4); this.warningBox2.Name = "warningBox2"; this.warningBox2.OptionsButtonVisible = false; this.warningBox2.Size = new System.Drawing.Size(264, 43); @@ -698,176 +1004,11 @@ this.btnRunRepair.Size = new System.Drawing.Size(280, 23); this.btnRunRepair.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.superTooltip1.SetSuperTooltip(this.btnRunRepair, new DevComponents.DotNetBar.SuperTooltipInfo("Run Repair", "", "This will run the database repair tools selected.\r\n\r\nClick on the on/off switches" + - " to turn on/off each tool.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 103))); + " to turn on/off each tool.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 103))); this.btnRunRepair.TabIndex = 3; this.btnRunRepair.Text = "Run Repair"; this.btnRunRepair.Click += new System.EventHandler(this.btnRunRepair_Click); // - // sideNavPanel1 - // - this.sideNavPanel1.Controls.Add(this.warningBox3); - this.sideNavPanel1.Controls.Add(this.labelX7); - this.sideNavPanel1.Controls.Add(this.line1); - this.sideNavPanel1.Controls.Add(this.swCkObsoleteROData); - this.sideNavPanel1.Controls.Add(this.swHiddenDataLocs); - this.sideNavPanel1.Controls.Add(this.labelX3); - this.sideNavPanel1.Controls.Add(this.labelX2); - this.sideNavPanel1.Controls.Add(this.swCkOrphanDataRecs); - this.sideNavPanel1.Controls.Add(this.labelX1); - this.sideNavPanel1.Controls.Add(this.btnRunCheck); - this.sideNavPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel1.Location = new System.Drawing.Point(80, 31); - this.sideNavPanel1.Name = "sideNavPanel1"; - this.sideNavPanel1.Size = new System.Drawing.Size(300, 494); - this.sideNavPanel1.TabIndex = 2; - // - // warningBox3 - // - this.warningBox3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(196)))), ((int)(((byte)(219)))), ((int)(((byte)(249))))); - this.warningBox3.CloseButtonVisible = false; - this.warningBox3.Image = ((System.Drawing.Image)(resources.GetObject("warningBox3.Image"))); - this.warningBox3.Location = new System.Drawing.Point(17, 207); - this.warningBox3.Name = "warningBox3"; - this.warningBox3.OptionsButtonVisible = false; - this.warningBox3.Size = new System.Drawing.Size(264, 32); - this.warningBox3.TabIndex = 29; - this.warningBox3.Text = "NOTE These tools can take a long time to run"; - // - // labelX7 - // - this.labelX7.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX7.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX7.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX7.Location = new System.Drawing.Point(5, 3); - this.labelX7.Name = "labelX7"; - this.labelX7.Size = new System.Drawing.Size(251, 22); - this.labelX7.TabIndex = 19; - this.labelX7.Text = "Check for these Data Issues:"; - // - // line1 - // - this.line1.BackColor = System.Drawing.Color.Transparent; - this.line1.Location = new System.Drawing.Point(8, 179); - this.line1.Name = "line1"; - this.line1.Size = new System.Drawing.Size(285, 12); - this.line1.TabIndex = 18; - this.line1.Text = "line1"; - // - // swCkObsoleteROData - // - // - // - // - this.swCkObsoleteROData.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swCkObsoleteROData.Location = new System.Drawing.Point(10, 99); - this.swCkObsoleteROData.Name = "swCkObsoleteROData"; - this.swCkObsoleteROData.Size = new System.Drawing.Size(91, 22); - this.swCkObsoleteROData.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swCkObsoleteROData, new DevComponents.DotNetBar.SuperTooltipInfo("Obsolete RO Data", "", resources.GetString("swCkObsoleteROData.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 135))); - this.swCkObsoleteROData.SwitchClickTogglesValue = true; - this.swCkObsoleteROData.TabIndex = 14; - this.swCkObsoleteROData.Value = true; - this.swCkObsoleteROData.ValueObject = "Y"; - this.swCkObsoleteROData.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); - // - // swHiddenDataLocs - // - // - // - // - this.swHiddenDataLocs.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swHiddenDataLocs.Location = new System.Drawing.Point(10, 71); - this.swHiddenDataLocs.Name = "swHiddenDataLocs"; - this.swHiddenDataLocs.Size = new System.Drawing.Size(91, 22); - this.swHiddenDataLocs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swHiddenDataLocs, new DevComponents.DotNetBar.SuperTooltipInfo("Hidden Data Locations", "", resources.GetString("swHiddenDataLocs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.swHiddenDataLocs.SwitchClickTogglesValue = true; - this.swHiddenDataLocs.TabIndex = 15; - this.swHiddenDataLocs.Value = true; - this.swHiddenDataLocs.ValueObject = "Y"; - this.swHiddenDataLocs.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); - // - // labelX3 - // - this.labelX3.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX3.Location = new System.Drawing.Point(107, 99); - this.labelX3.Name = "labelX3"; - this.labelX3.Size = new System.Drawing.Size(154, 22); - this.superTooltip1.SetSuperTooltip(this.labelX3, new DevComponents.DotNetBar.SuperTooltipInfo("Obsolete RO Data", "", resources.GetString("labelX3.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(250, 135))); - this.labelX3.TabIndex = 11; - this.labelX3.Text = "Obsolete RO Data"; - // - // labelX2 - // - this.labelX2.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX2.Location = new System.Drawing.Point(107, 71); - this.labelX2.Name = "labelX2"; - this.labelX2.Size = new System.Drawing.Size(140, 22); - this.superTooltip1.SetSuperTooltip(this.labelX2, new DevComponents.DotNetBar.SuperTooltipInfo("Hidden Data Locations", "", resources.GetString("labelX2.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); - this.labelX2.TabIndex = 12; - this.labelX2.Text = "Hidden Data Locations"; - // - // swCkOrphanDataRecs - // - // - // - // - this.swCkOrphanDataRecs.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swCkOrphanDataRecs.Location = new System.Drawing.Point(10, 43); - this.swCkOrphanDataRecs.Name = "swCkOrphanDataRecs"; - this.swCkOrphanDataRecs.Size = new System.Drawing.Size(91, 22); - this.swCkOrphanDataRecs.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swCkOrphanDataRecs, new DevComponents.DotNetBar.SuperTooltipInfo("Orphan Data Records", "", resources.GetString("swCkOrphanDataRecs.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(275, 193))); - this.swCkOrphanDataRecs.SwitchClickTogglesValue = true; - this.swCkOrphanDataRecs.TabIndex = 9; - this.swCkOrphanDataRecs.Value = true; - this.swCkOrphanDataRecs.ValueObject = "Y"; - this.swCkOrphanDataRecs.ValueChanged += new System.EventHandler(this.swCk_ValueChanged); - // - // labelX1 - // - this.labelX1.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelX1.Location = new System.Drawing.Point(107, 43); - this.labelX1.Name = "labelX1"; - this.labelX1.Size = new System.Drawing.Size(172, 22); - this.superTooltip1.SetSuperTooltip(this.labelX1, new DevComponents.DotNetBar.SuperTooltipInfo("Orphan Data Records", "", resources.GetString("labelX1.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(275, 190))); - this.labelX1.TabIndex = 8; - this.labelX1.Text = "Orphan Data Records"; - // - // btnRunCheck - // - this.btnRunCheck.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btnRunCheck.Checked = true; - this.btnRunCheck.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btnRunCheck.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnRunCheck.Location = new System.Drawing.Point(5, 150); - this.btnRunCheck.Name = "btnRunCheck"; - this.btnRunCheck.Size = new System.Drawing.Size(286, 23); - this.btnRunCheck.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.btnRunCheck, new DevComponents.DotNetBar.SuperTooltipInfo("Run Check", "", "This will run the database check tools selected.\r\n\r\nClick on the on/off switches " + - "to turn on/off each tool.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 100))); - this.btnRunCheck.TabIndex = 7; - this.btnRunCheck.Text = "Run Check"; - this.btnRunCheck.Click += new System.EventHandler(this.btnRunCheck_Click); - // // sideNavPanel3 // this.sideNavPanel3.Controls.Add(this.swCheckROLinks); @@ -882,9 +1023,9 @@ this.sideNavPanel3.Controls.Add(this.myTV); this.sideNavPanel3.Controls.Add(this.btnFixLinks); this.sideNavPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel3.Location = new System.Drawing.Point(80, 31); + this.sideNavPanel3.Location = new System.Drawing.Point(89, 31); this.sideNavPanel3.Name = "sideNavPanel3"; - this.sideNavPanel3.Size = new System.Drawing.Size(300, 494); + this.sideNavPanel3.Size = new System.Drawing.Size(291, 494); this.sideNavPanel3.TabIndex = 10; this.sideNavPanel3.Visible = false; // @@ -924,6 +1065,7 @@ this.warningBox5.CloseButtonVisible = false; this.warningBox5.Image = ((System.Drawing.Image)(resources.GetObject("warningBox5.Image"))); this.warningBox5.Location = new System.Drawing.Point(17, 145); + this.warningBox5.Margin = new System.Windows.Forms.Padding(4); this.warningBox5.Name = "warningBox5"; this.warningBox5.OptionsButtonVisible = false; this.warningBox5.Size = new System.Drawing.Size(262, 32); @@ -1007,6 +1149,7 @@ this.warningBox1.CloseButtonVisible = false; this.warningBox1.Image = ((System.Drawing.Image)(resources.GetObject("warningBox1.Image"))); this.warningBox1.Location = new System.Drawing.Point(17, 181); + this.warningBox1.Margin = new System.Windows.Forms.Padding(4); this.warningBox1.Name = "warningBox1"; this.warningBox1.OptionsButtonVisible = false; this.warningBox1.Size = new System.Drawing.Size(262, 43); @@ -1030,86 +1173,6 @@ this.btnFixLinks.Text = "Process Links"; this.btnFixLinks.Click += new System.EventHandler(this.btnFixLinks_Click); // - // sideNavPanel2 - // - this.sideNavPanel2.Controls.Add(this.swRefreshTblsForSrch); - this.sideNavPanel2.Controls.Add(this.lblRefreshTblForSrch); - this.sideNavPanel2.Controls.Add(this.warningBox4); - this.sideNavPanel2.Controls.Add(this.warningBox2); - this.sideNavPanel2.Controls.Add(this.swRmObsoleteROData); - this.sideNavPanel2.Controls.Add(this.swRefreshWordAttmts); - this.sideNavPanel2.Controls.Add(this.swStandardHypenChars); - this.sideNavPanel2.Controls.Add(this.labelX4); - this.sideNavPanel2.Controls.Add(this.labelX5); - this.sideNavPanel2.Controls.Add(this.labelX9); - this.sideNavPanel2.Controls.Add(this.swRmOrphanDataRecs); - this.sideNavPanel2.Controls.Add(this.labelX10); - this.sideNavPanel2.Controls.Add(this.labelX8); - this.sideNavPanel2.Controls.Add(this.line2); - this.sideNavPanel2.Controls.Add(this.btnRunRepair); - this.sideNavPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel2.Location = new System.Drawing.Point(80, 31); - this.sideNavPanel2.Name = "sideNavPanel2"; - this.sideNavPanel2.Size = new System.Drawing.Size(300, 494); - this.sideNavPanel2.TabIndex = 6; - this.sideNavPanel2.Visible = false; - // - // swRefreshTblsForSrch - // - // - // - // - this.swRefreshTblsForSrch.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.swRefreshTblsForSrch.Location = new System.Drawing.Point(10, 153); - this.swRefreshTblsForSrch.Name = "swRefreshTblsForSrch"; - this.swRefreshTblsForSrch.Size = new System.Drawing.Size(91, 22); - this.swRefreshTblsForSrch.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.swRefreshTblsForSrch, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Word Attachments", "", resources.GetString("swRefreshTblsForSrch.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(300, 200))); - this.swRefreshTblsForSrch.SwitchClickTogglesValue = true; - this.swRefreshTblsForSrch.TabIndex = 32; - this.swRefreshTblsForSrch.Value = true; - this.swRefreshTblsForSrch.ValueObject = "Y"; - // - // lblRefreshTblForSrch - // - this.lblRefreshTblForSrch.BackColor = System.Drawing.Color.Transparent; - // - // - // - this.lblRefreshTblForSrch.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.lblRefreshTblForSrch.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblRefreshTblForSrch.Location = new System.Drawing.Point(107, 153); - this.lblRefreshTblForSrch.Name = "lblRefreshTblForSrch"; - this.lblRefreshTblForSrch.Size = new System.Drawing.Size(186, 22); - this.superTooltip1.SetSuperTooltip(this.lblRefreshTblForSrch, new DevComponents.DotNetBar.SuperTooltipInfo("Refresh Word Attachments", "", resources.GetString("lblRefreshTblForSrch.SuperTooltip"), null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(300, 200))); - this.lblRefreshTblForSrch.TabIndex = 31; - this.lblRefreshTblForSrch.Text = "Refresh Tables For Search"; - // - // sideNavPanel4 - // - this.sideNavPanel4.Controls.Add(this.btn_ShowUsers); - this.sideNavPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.sideNavPanel4.Location = new System.Drawing.Point(81, 31); - this.sideNavPanel4.Name = "sideNavPanel4"; - this.sideNavPanel4.Size = new System.Drawing.Size(299, 494); - this.sideNavPanel4.TabIndex = 14; - this.sideNavPanel4.Visible = false; - // - // btn_ShowUsers - // - this.btn_ShowUsers.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.btn_ShowUsers.Checked = true; - this.btn_ShowUsers.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; - this.btn_ShowUsers.Location = new System.Drawing.Point(57, 37); - this.btn_ShowUsers.Name = "btn_ShowUsers"; - this.btn_ShowUsers.Size = new System.Drawing.Size(171, 23); - this.btn_ShowUsers.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.superTooltip1.SetSuperTooltip(this.btn_ShowUsers, new DevComponents.DotNetBar.SuperTooltipInfo("Show Users", "", "This will return all of the users currently with open sessions in the database an" + - "d the details of any items they have checked out.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(200, 80))); - this.btn_ShowUsers.TabIndex = 0; - this.btn_ShowUsers.Text = "Show Users"; - this.btn_ShowUsers.Click += new System.EventHandler(this.btn_ShowUsers_Click); - // // sideNavItem1 // this.sideNavItem1.IsSystemMenu = true; @@ -1129,7 +1192,6 @@ // // sideNavItmCheck // - this.sideNavItmCheck.Checked = true; this.sideNavItmCheck.Name = "sideNavItmCheck"; this.sideNavItmCheck.Panel = this.sideNavPanel1; this.sideNavItmCheck.Symbol = ""; @@ -1155,11 +1217,26 @@ // sideNavItmUsers // this.sideNavItmUsers.Name = "sideNavItmUsers"; - this.sideNavItmUsers.Panel = this.sideNavPanel4; + this.sideNavItmUsers.SubItems.AddRange(new DevComponents.DotNetBar.BaseItem[] { + this.buttonItem1}); this.sideNavItmUsers.Symbol = ""; this.sideNavItmUsers.Text = "Users"; this.sideNavItmUsers.Click += new System.EventHandler(this.sideNavItmUsers_Click); // + // buttonItem1 + // + this.buttonItem1.Name = "buttonItem1"; + this.buttonItem1.Text = "buttonItem1"; + // + // sideNavItmDelete + // + this.sideNavItmDelete.Checked = true; + this.sideNavItmDelete.Name = "sideNavItmDelete"; + this.sideNavItmDelete.Panel = this.sideNavPanel4; + this.sideNavItmDelete.Symbol = ""; + this.sideNavItmDelete.Text = "Delete"; + this.sideNavItmDelete.Click += new System.EventHandler(this.sideNavItmDelete_Click); + // // sideNavItmExit // this.sideNavItmExit.Name = "sideNavItmExit"; @@ -1286,11 +1363,10 @@ this.panelEx1.ResumeLayout(false); this.sideNav1.ResumeLayout(false); this.sideNav1.PerformLayout(); - this.sideNavPanel2.ResumeLayout(false); - this.sideNavPanel1.ResumeLayout(false); - this.sideNavPanel3.ResumeLayout(false); - //this.sideNavPanel2.ResumeLayout(false); this.sideNavPanel4.ResumeLayout(false); + this.sideNavPanel1.ResumeLayout(false); + this.sideNavPanel2.ResumeLayout(false); + this.sideNavPanel3.ResumeLayout(false); this.panelEx4.ResumeLayout(false); this.ResumeLayout(false); @@ -1340,8 +1416,6 @@ private DevComponents.DotNetBar.LabelX labelX8; private DevComponents.DotNetBar.Controls.Line line2; private DevComponents.DotNetBar.ButtonX btnRunRepair; - private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel4; - private DevComponents.DotNetBar.ButtonX btn_ShowUsers; private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel3; private DevComponents.DotNetBar.ButtonX btnFixLinks; private DevComponents.DotNetBar.Controls.SideNavItem sideNavItem1; @@ -1376,5 +1450,16 @@ private DevComponents.DotNetBar.LabelX lblRefreshTblForSrch; private DevComponents.DotNetBar.Controls.SwitchButton swCheckROLinks; private DevComponents.DotNetBar.LabelX labelX12; + private DevComponents.DotNetBar.ButtonItem buttonItem1; + private DevComponents.DotNetBar.Controls.SideNavPanel sideNavPanel4; + private DevComponents.DotNetBar.Controls.SwitchButton swDeleteFolder; + private DevComponents.DotNetBar.LabelX labelX13; + private DevComponents.DotNetBar.Controls.SwitchButton swDeleteAnnotations; + private DevComponents.DotNetBar.LabelX labelX14; + private System.Windows.Forms.TreeView myTVdel; + private DevComponents.DotNetBar.ButtonX btnDeleteItems; + private DevComponents.DotNetBar.Controls.SideNavItem sideNavItmDelete; } } + + diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs index 8dbc901c..bca40b1b 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.cs +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.cs @@ -22,12 +22,22 @@ namespace VEPROMS set { _MySessionInfo = value; } } private bool IsAdministratorUser = false; //C2020-035 used to control what Set Amins can do - // C2017-030 - new Admin Tools user interface - // pass in session info to constructor + // C2017-030 - new Admin Tools user interface + // pass in session info to constructor public frmBatchRefresh(SessionInfo sessionInfo) { InitializeComponent(); _MySessionInfo = sessionInfo; + + if (sideNavItmDelete.Checked) + { + AdminToolType = (E_AdminToolType)4; + if (swDeleteFolder.Value) + ResetDelTV(true); + else + ResetDelTV(false); + } + setupProgessSteps1(); // C2017-030 - new Admin Tools user interface UserInfo ui = UserInfo.GetByUserID(MySessionInfo.UserID); IsAdministratorUser = ui.IsAdministrator(); @@ -43,18 +53,25 @@ namespace VEPROMS swStandardHypenChars.Enabled = false; } } + // Make txtProcess text box available to frmAnnotationsClean form. + internal TextBox GettxtProcess() + { + return txtProcess; + } // NOTE: removed the Refresh ROs and Refresh Transitions and ROs options (now only Transitions can be refreshed) // the Update ROs and Refresh ROs logic was merged together. The Update ROs will functionally do both // also annotations will be placed on step elements that have RO changes // make all of the hyphen character consistant so they can all be found with the Search function + + private void FixHyphens() { this.Cursor = Cursors.WaitCursor; DateTime pStart = DateTime.Now; txtProcess.AppendText("Standardizing Hyphens"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int affectedRows = ESP_FixHyphens.Execute("vesp_FixHyphens") / 2;// Two results for each change @@ -65,7 +82,7 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); @@ -125,6 +142,60 @@ namespace VEPROMS myTV.SelectedNode.Expand(); this.Cursor = Cursors.Default; } + private void ResetDelTV() + { + ResetDelTV(false); + } + private void ResetDelTV(bool noProcs) + { + btnFixLinks.Enabled = false; + this.Cursor = Cursors.WaitCursor; + myTVdel.Nodes.Clear(); + myDocVersions.Clear(); + FolderInfo fi = FolderInfo.GetTop(); + + if (fi.ChildFolderCount > 0) + { + if (noProcs) + { + LoadBottomLevelFolders(fi, myTVdel); + } + else + { + TreeNode tn = new TreeNode(fi.Name); + tn.Tag = fi; + tn.StateImageIndex = -1; // Hide the checkbox for the root node + LoadChildFolders(fi, tn, noProcs); + myTVdel.Nodes.Add(tn); + } + } + + if (myTVdel.SelectedNode != null) + myTVdel.SelectedNode.Expand(); + this.Cursor = Cursors.Default; + + //btnFixLinks.Enabled = false; + //this.Cursor = Cursors.WaitCursor; + ////myTreeNodePath = new List(); + //myTVdel.Nodes.Clear(); + //myDocVersions.Clear(); + //FolderInfo fi = FolderInfo.GetTop(); + //TreeNode tn = myTVdel.Nodes.Add(fi.Name ); + //tn.Tag = fi; + //if (fi.ChildFolderCount > 0) + //{ + // if (noProcs) + // { + // LoadBottomLevelFolders(fi, myTVdel); + // } + // else + // LoadChildFolders(fi, tn, noProcs); + //} + //if (myTVdel.SelectedNode != null) + // myTVdel.SelectedNode.Expand(); + //this.Cursor = Cursors.Default; + } + // B2021-060 Higher level folders where being removed from the tree even if there was a child folder that containe a working draft set private bool LoadChildFolders(FolderInfo fi, TreeNode tn, bool noProcs) { @@ -135,8 +206,8 @@ namespace VEPROMS TreeNode tnc = tn.Nodes.Add(fic.Name); tnc.Tag = fic; if (fic.ChildFolderCount > 0) - if(LoadChildFolders(fic, tnc, noProcs)) - loadedChildWorkingDraft=true; + if (LoadChildFolders(fic, tnc, noProcs)) + loadedChildWorkingDraft = true; // B2020-114 and C2020-035 only show folders the Set Admin can access if (fic.FolderDocVersionCount > 0) { @@ -151,6 +222,34 @@ namespace VEPROMS tn.Remove(); return loadedWorkingDraft; } + /// + /// Load only bottom layer of folders into treenode. + /// + /// + /// + private void LoadBottomLevelFolders(FolderInfo fi, TreeView treeView) + { + foreach (FolderInfo fic in fi.SortedChildFolders) + { + if (fic.ChildFolderCount > 0) + { + // Recursively call for child folders + LoadBottomLevelFolders(fic, treeView); + } + else + { + if (fic.Name != "PROMS") + { + + + + // If the folder is a bottom-level folder (no child folders), add it directly to the TreeView + TreeNode tnc = treeView.Nodes.Add(fic.Name); + tnc.Tag = fic; + } + } + } + } private bool LoadDocVersions(FolderInfo fic, TreeNode tnc, bool noProcs) { bool rtnval = false; @@ -201,7 +300,7 @@ namespace VEPROMS private void UpdateROValues() { this.Cursor = Cursors.WaitCursor; - List pil = new List(); // C2023-002: list of checked out procedures, used in frmBatchRefreshCheckedOut dialog + List pil = new List(); // C2023-002: list of checked out procedures, used in frmBatchRefreshCheckedOut dialog List dvil = new List(); foreach (TreeNode tn in myDocVersions.Keys) if (tn.Checked) @@ -251,7 +350,7 @@ namespace VEPROMS Application.DoEvents(); } } - + Application.DoEvents(); // when processing more than one procedure set, display only one completed message after all are processed if (ROFstInfo.MessageList != null) @@ -273,7 +372,7 @@ namespace VEPROMS sb.AppendLine("Have you requested the users to close the procedures and do you want to continue the process?"); frmBatchRefreshCheckedOut frmCO = new frmBatchRefreshCheckedOut(1); frmCO.MySessionInfo = MySessionInfo; - frmCO.CheckedOutProcedures = pil; // C2023-002: set list of checked out procedures + frmCO.CheckedOutProcedures = pil; // C2023-002: set list of checked out procedures frmCO.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - frmCO.Width, Screen.PrimaryScreen.WorkingArea.Height - frmCO.Height); // C2023-002: Allow close of dialog that has list of procedures that are checked out if (frmCO.ShowDialog(this) != DialogResult.Cancel) @@ -412,7 +511,7 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Refresh Transitions"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtResults.AppendText("Refresh Transitions"); txtResults.AppendText(Environment.NewLine); @@ -449,19 +548,19 @@ namespace VEPROMS Application.DoEvents(); } } - if (numTransFixed == 0 && numTransConverted ==0) + if (numTransFixed == 0 && numTransConverted == 0) { txtResults.AppendText("No Transitions Needed Updated."); txtResults.AppendText(Environment.NewLine); } ContentInfo.StaticContentInfoChange -= new StaticContentInfoEvent(ContentInfo_StaticContentInfoChange); DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Transitions Checked: {0}",numTransProcessed)); + txtProcess.AppendText(string.Format("Transitions Checked: {0}", numTransProcessed)); txtProcess.AppendText(Environment.NewLine); // B2018-002 - Invalid Transitions - Display Transition Refresh Statistics - txtProcess.AppendText(string.Format("Transitions Correct As Is: {0}",numTransProcessed - (numTransConverted + numTransFixed))); + txtProcess.AppendText(string.Format("Transitions Correct As Is: {0}", numTransProcessed - (numTransConverted + numTransFixed))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(string.Format("Transitions Modified: {0}", numTransFixed)); txtProcess.AppendText(Environment.NewLine); @@ -490,10 +589,10 @@ namespace VEPROMS } this.Cursor = Cursors.Default; // B2018-002 - Invalid Transitions - Display Transition Refresh Statisitic - if (numTransFixed == 0 && numTransConverted ==0) - MessageBox.Show(string.Format("{0} Transitions Checked.\n\nNo Transitions Modified.",numTransProcessed), "Refresh Transitions Completed"); + if (numTransFixed == 0 && numTransConverted == 0) + MessageBox.Show(string.Format("{0} Transitions Checked.\n\nNo Transitions Modified.", numTransProcessed), "Refresh Transitions Completed"); else - MessageBox.Show(string.Format("{0} Transitions Checked.\n\n {1} Correct as is.\n\n {2} Transitions modified.\n\n {3} Transitions converted to text.", numTransProcessed, numTransProcessed - (numTransFixed + numTransConverted),numTransFixed, numTransConverted), "Refresh Transitions Completed"); + MessageBox.Show(string.Format("{0} Transitions Checked.\n\n {1} Correct as is.\n\n {2} Transitions modified.\n\n {3} Transitions converted to text.", numTransProcessed, numTransProcessed - (numTransFixed + numTransConverted), numTransFixed, numTransConverted), "Refresh Transitions Completed"); } // C2017-030 - new Admin Tools user interface @@ -506,7 +605,7 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Refreshing Word Attachments"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int affectedRows = ESP_DeletePDFs.Execute("vesp_DeletePDFs"); @@ -516,7 +615,7 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); txtResults.AppendText(Environment.NewLine); DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); @@ -561,7 +660,7 @@ namespace VEPROMS private int RefreshForSearch() { int cntfix = 0; - List gids = GridInfoList.GetIds(); // get all grids in database + List gids = GridInfoList.GetIds(); // get all grids in database pbProcess.Minimum = 0; pbProcess.Maximum = gids.Count; pbProcess.Step = 1; @@ -570,7 +669,7 @@ namespace VEPROMS using (Content cc = Content.Get(cid)) { StepConfig sc = new StepConfig(cc.Config); - if (!sc.Step_FixedTblForSrch) // if not processed through this code already, get searchable text & save + if (!sc.Step_FixedTblForSrch) // if not processed through this code already, get searchable text & save { try { @@ -588,7 +687,7 @@ namespace VEPROMS cc.UserID = Volian.Base.Library.VlnSettings.UserID; cc.DTS = DateTime.Now; cc.Text = srchtxt; - + } sc.Step_FixedTblForSrch = true; cc.Config = sc.ToString(); @@ -615,7 +714,7 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Identifing Orphan Items"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCount = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount"); @@ -636,7 +735,7 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); @@ -652,7 +751,7 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Purging Orphan Items"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCount = ESP_IdentifyDisconnectedItems.Execute("vesp_GetDisconnectedItemsCount"); @@ -689,7 +788,7 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); @@ -704,7 +803,7 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Identifing Unused RoFsts and Figures"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCountRoFst = ESP_GetUnusedRoFsts.Execute("vesp_GetUnusedRoFstsCount"); @@ -727,9 +826,9 @@ namespace VEPROMS } DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); this.Cursor = Cursors.Default; @@ -742,7 +841,7 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Purging Unused RoFSTs and Figures Items"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCountRoFst = ESP_GetUnusedRoFsts.Execute("vesp_GetUnusedRoFstsCount"); @@ -783,7 +882,7 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); @@ -798,7 +897,7 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Identifing Unused RO Associations"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCount = ESP_GetROAssoc.Execute("vesp_GetUnusedROAssociationsCount"); @@ -817,7 +916,7 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); @@ -832,7 +931,7 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Purging Unused Referenced Object Associations"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); int rowCount = ESP_GetROAssoc.Execute("vesp_GetUnusedROAssociationsCount"); @@ -866,7 +965,7 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); @@ -881,11 +980,11 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Identifing Hidden Item Locations"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); List myItems = ESP_IdentifyNonEditableItems.Execute("vesp_GetNonEditableItems"); - txtProcess.AppendText(string.Format("Hidden Items Count: {0}",myItems.Count)); + txtProcess.AppendText(string.Format("Hidden Items Count: {0}", myItems.Count)); txtProcess.AppendText(Environment.NewLine); if (myItems.Count > 0) { @@ -906,7 +1005,7 @@ namespace VEPROMS txtResults.AppendText(Environment.NewLine); } DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); @@ -921,16 +1020,16 @@ namespace VEPROMS DateTime pStart = DateTime.Now; txtProcess.AppendText("Show Users in PROMS"); txtProcess.AppendText(Environment.NewLine); - txtProcess.AppendText(string.Format("Started: {0}",pStart.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Started: {0}", pStart.ToString("MM/dd/yyyy @ HH:mm"))); txtProcess.AppendText(Environment.NewLine); Application.DoEvents(); txtResults.Clear(); txtResults.AppendText(ESP_GetDatabaseSessions.Execute("vesp_GetDatabaseSessions")); DateTime pEnd = DateTime.Now; - txtProcess.AppendText(string.Format("Completed: {0}",pEnd.ToString("MM/dd/yyyy @ HH:mm"))); + txtProcess.AppendText(string.Format("Completed: {0}", pEnd.ToString("MM/dd/yyyy @ HH:mm"))); Application.DoEvents(); this.Cursor = Cursors.Default; - MessageBox.Show( "Show Users Completed", "Show Users"); + MessageBox.Show("Show Users Completed", "Show Users"); } private void ProcessUpdateROValues(DocVersionInfo dq) @@ -1068,7 +1167,7 @@ namespace VEPROMS // show the changes made in the Results pannel, include the ItemId of the step element void ContentInfo_StaticContentInfoChange(object sender, StaticContentInfoEventArgs args) { - + if (args.Type == "TX") { myFixesCount++; @@ -1085,7 +1184,7 @@ namespace VEPROMS } else // B2018-002 - Invalid Transitions - Display Transition Cconversion Statistics { - myFixes.AppendLine(string.Format("Converted Transition to text for {0}({1})", (sender as ItemInfo).ShortPath, (sender as ItemInfo).ItemID)); + myFixes.AppendLine(string.Format("Converted Transition to text for {0}({1})", (sender as ItemInfo).ShortPath, (sender as ItemInfo).ItemID)); } } @@ -1121,10 +1220,40 @@ namespace VEPROMS CheckChildNodes(e.Node, e.Node.Checked); } } + if (swDeleteAnnotations.Value) + { + if (e.Node.Checked) + { + DiselectParentNodes(e.Node.Parent); + DiselectChildNodes(e.Node.Nodes); + } + + } btnFixLinks.Enabled = AtLeastOneNodeChecked(); // C2017-030 support for Refresh Transitions/Update RO Values } + private void DiselectParentNodes(TreeNode parent) + { + while (parent != null) + { + if (parent.Checked) + parent.Checked = false; + parent = parent.Parent; + } + } + + private void DiselectChildNodes(TreeNodeCollection childes) + { + foreach (TreeNode oneChild in childes) + { + if (oneChild.Checked) + oneChild.Checked = false; + DiselectChildNodes(oneChild.Nodes); + } + } + + private void CheckChildNodes(TreeNode treeNode, bool ischecked) { foreach (TreeNode tn in treeNode.Nodes) @@ -1143,9 +1272,9 @@ namespace VEPROMS public ProgressBarItem ProgressBar { get { return _ProgressBar; } - set - { - _ProgressBar = value; + set + { + _ProgressBar = value; _ProgressBar.TextVisible = true; } } @@ -1246,6 +1375,25 @@ namespace VEPROMS this.Close(); } + // new Admin Tools user interface for deletes + private void sideNavItmDelete_Click(object sender, EventArgs e) + { + AdminToolType = E_AdminToolType.Delete; + lblAdmToolProgressType.Text = ""; + setupProgessSteps1(); + + if (swDeleteFolder.Value) + ResetDelTV(true); + else + ResetDelTV(false); + } + + // new Admin Tools user interface for deletes + //private void sideNavItmDelete_Click_1(object sender, EventArgs e) + //{ + + //} + #region On/Off Swiches // C2017-030 new Admin Tools user interface @@ -1254,7 +1402,8 @@ namespace VEPROMS Check = 0, Repair = 1, Links = 2, - Users = 3 + Users = 3, + Delete = 4 }; private E_AdminToolType AdminToolType = 0; @@ -1305,6 +1454,11 @@ namespace VEPROMS splitContainer3.Panel2Collapsed = true; progressSteps1.Visible = false; break; + + case E_AdminToolType.Delete: + splitContainer3.Panel2Collapsed = true; + progressSteps1.Visible = false; + break; } } @@ -1500,5 +1654,138 @@ namespace VEPROMS } } + + + //C2024-005 Delete Annotations, Delete Folders + private void swDeleteAnnotations_ValueChanged(object sender, EventArgs e) + { + swDeleteFolder.Value = !swDeleteAnnotations.Value; + if (swDeleteFolder.Value) + ResetDelTV(true); + else + ResetDelTV(false); + } + + private void swDeleteFolder_ValueChanged(object sender, EventArgs e) + { + swDeleteAnnotations.Value = !swDeleteFolder.Value; + if (swDeleteFolder.Value) + ResetDelTV(true); + else + ResetDelTV(false); + } + + private void btnDeleteItems_Click(object sender, EventArgs e) + { + //clear + txtResults.Clear(); + txtProcess.Clear(); + + + if (swDeleteFolder.Value) + { + //TODO process deletions of folders + txtProcess.AppendText("Deleting Folders..."); + + //List pil = new List(); + //foreach (TreeNode tn in myProcedures.Keys) + // if (tn.Checked) + // pil.Add(myProcedures[tn]); + + ////Load Selected Folders + Dictionary folderData = new Dictionary(); + + //List Flist = new List(); + //foreach (TreeNode tn in myDocVersions.Keys) + // if (tn.Checked) + // Flist.Add(); + + //List dvil = new List(); + //foreach (TreeNode tn in myDocVersions.Keys) + // if (tn.Checked) + // dvil.Add(myDocVersions[tn]); + + //foreach (TreeNode tn in myTVdel.Nodes) + //{ + // if (tn.Checked) + // { + // var itemInfo = myProcedures[tn]; + // folderData.Add(itemInfo.ItemID, itemInfo.DisplayText); + // } + //} + + //ProcessDelete(dvil); + } + else + { + // Write progress status + txtProcess.AppendText("Deleting Annotations..."); + + // Create a list of procedures the user selected + List pil = new List(); + foreach (TreeNode tn in myProcedures.Keys) + if (tn.Checked) + pil.Add(myProcedures[tn]); + + // Create a list of doc versions the user selected + List dvil = new List(); + foreach (TreeNode tn in myDocVersions.Keys) + if (tn.Checked) + dvil.Add(myDocVersions[tn]); + + frmAnnotationsCleanup frmAnnoDel = new frmAnnotationsCleanup(this, pil, dvil); + + frmAnnoDel.ShowDialog(); + + + } + } + + private void ProcessDelete(List foldersToDelete) + { + DateTime pStart = DateTime.Now; + txtProcess.AppendText(Environment.NewLine); + txtProcess.AppendText(pStart.ToString("MM/dd/yyyy @ HH:mm")); + txtProcess.AppendText(Environment.NewLine); + + foreach (var kvp in foldersToDelete) + { + int itemID = (int)kvp.ItemID; + string folderName = kvp.Name; + + // Perform the deletion operation + // Assume DeleteFolderByID is a method that deletes the folder by its ItemID + bool deletionSuccessful = DeleteFolderByID(itemID); + + // Update txtProcess with the progress + if (deletionSuccessful) + { + txtProcess.AppendText($"Successfully deleted folder: {folderName} (ID: {itemID})"); + } + else + { + txtProcess.AppendText($"Failed to delete folder: {folderName} (ID: {itemID})"); + } + txtProcess.AppendText(Environment.NewLine); + } + } + // Example deletion method + private bool DeleteFolderByID(int itemID) + { + // Implement your folder deletion logic here + // Return true if deletion was successful, false otherwise + return true; // Placeholder + } + + public List RetrieveChkAnnotations() + { + List pil = new List(); + foreach (TreeNode tn in myProcedures.Keys) + if (tn.Checked) + pil.Add(myProcedures[tn]); + return pil; + } } } + + diff --git a/PROMS/VEPROMS User Interface/frmBatchRefresh.resx b/PROMS/VEPROMS User Interface/frmBatchRefresh.resx index 45fdc8fb..ee2c6dfc 100644 --- a/PROMS/VEPROMS User Interface/frmBatchRefresh.resx +++ b/PROMS/VEPROMS User Interface/frmBatchRefresh.resx @@ -117,6 +117,44 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + + + This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. + +Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + + This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. + +Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + This function will refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. + +Be sure a current backup of the database exists prior to running this function. + +If more than one procedure is selected, it is recommended that this be performed during off hours. + + + This function will refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. + +Be sure a current backup of the database exists prior to running this function. + +If more than one procedure is selected, it is recommended that this be performed during off hours. + @@ -135,9 +173,6 @@ zJwL4b/EAAAAAElFTkSuQmCC - - 17, 17 - Referenced Objects databases are associated with a procedure set (such as Working Draft). @@ -184,91 +219,6 @@ This tool may take an extended period of time to execute. Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool detects any orphaned items in the database. This tool may take an extended period of time to execute. - - - - This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. - -Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. - -Be sure a current backup of the database exists prior performing this function. - -It is recommended that this be done during off hours. - - - - - This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. - -Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. - -Be sure a current backup of the database exists prior performing this function. - -It is recommended that this be done during off hours. - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAplJREFUOE+N - k11IU2Ecxv9zouK8CULrzo8SU3QKaSYmOJ2uFL8SK4igEIok6qKUwggySTShC41CRiiGdWNfYBcVWiGl - FqN0lh+UTaekzuWcuu2c9316nSdKLPEHz817/s/zPv9zOPQ/nlVQEGulF3ILPe+8SIHK8eYR5lusLwHy - Oy08RqpXjjfHVCMlsydbGbekg4/r4HmwRbLWUZzyeGNqD5NK1O5lw8L8NQHckgh5SAdXA3UqIxuzZKSj - 8ssI8Il9wMQeYDoVfD4HrsdhsNdRgTL2b4yl5Ce1qL+xcQOWxpKxMzwAMVEayIv7IU8XwVnv8+XuEfJV - xtfjMlKZ/CYG3JYJ96wOPj6EoCBfMCkfnJdguSMG89eoVBlfS+tJCpCafa1stgBYzAZbzoFGo0ZIiD84 - KwJ350P+UQxHtfr7vUPkp9j+4GqiM1K3FtyVB8h5wlSI4GB/RIQHgjtzwWaywMb1WHwYg7lKOq3YVrlz - jPw8RrWFOUoAJhpwcaNciNDQQMRGB4FNpIMNp4B93A2pXw/7ZbWlufCvFguNdNzzOta7J5S6fP4AdkVq - kKQVAQNJYO8TwHq0kD8kwdkWhZkLdMJrrsonlfu2yszmSsA9Bat1p0XdsTTcvxmJtpowyL1ar/m3PKYM - 2MpVgzcySUWTdWRwd+wAXzoo3r5B7CnqDqVg+lW89yuoVARrR/SaANm0F46mUFjOUjYtN9BTaVQYJzPA - RlPB+hNF3XjvP3C9bDuqTm2D9DZuTcCKXN1psJ2ndhGgnpJGciENGyB9zoJk1kMezFonySw0oIf0KVOs - oIO7L3MlYITstVTsrKNHCzXU5aimnvmrZPp5hfrtlWS2X6LBuQoatJWTWQz3C5mEeoS6hNqt5yj7FysJ - zJwL4b/EAAAAAElFTkSuQmCC - - - - This allows the user to update referenced objects values for multiple working drafts in a batch mode. - -Be sure a current backup of the database exists prior performing this function. - -It is recommended that this be done during off hours. - - - - This function will refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. - -Be sure a current backup of the database exists prior to running this function. - -If more than one procedure is selected, it is recommended that this be performed during off hours. - - - This allows the user to update referenced objects values for multiple working drafts in a batch mode. - -Be sure a current backup of the database exists prior performing this function. - -It is recommended that this be done during off hours. - - - - This function will refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. - -Be sure a current backup of the database exists prior to running this function. - -If more than one procedure is selected, it is recommended that this be performed during off hours. - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAplJREFUOE+N - k11IU2Ecxv9zouK8CULrzo8SU3QKaSYmOJ2uFL8SK4igEIok6qKUwggySTShC41CRiiGdWNfYBcVWiGl - FqN0lh+UTaekzuWcuu2c9316nSdKLPEHz817/s/zPv9zOPQ/nlVQEGulF3ILPe+8SIHK8eYR5lusLwHy - Oy08RqpXjjfHVCMlsydbGbekg4/r4HmwRbLWUZzyeGNqD5NK1O5lw8L8NQHckgh5SAdXA3UqIxuzZKSj - 8ssI8Il9wMQeYDoVfD4HrsdhsNdRgTL2b4yl5Ce1qL+xcQOWxpKxMzwAMVEayIv7IU8XwVnv8+XuEfJV - xtfjMlKZ/CYG3JYJ96wOPj6EoCBfMCkfnJdguSMG89eoVBlfS+tJCpCafa1stgBYzAZbzoFGo0ZIiD84 - KwJ350P+UQxHtfr7vUPkp9j+4GqiM1K3FtyVB8h5wlSI4GB/RIQHgjtzwWaywMb1WHwYg7lKOq3YVrlz - jPw8RrWFOUoAJhpwcaNciNDQQMRGB4FNpIMNp4B93A2pXw/7ZbWlufCvFguNdNzzOta7J5S6fP4AdkVq - kKQVAQNJYO8TwHq0kD8kwdkWhZkLdMJrrsonlfu2yszmSsA9Bat1p0XdsTTcvxmJtpowyL1ar/m3PKYM - 2MpVgzcySUWTdWRwd+wAXzoo3r5B7CnqDqVg+lW89yuoVARrR/SaANm0F46mUFjOUjYtN9BTaVQYJzPA - RlPB+hNF3XjvP3C9bDuqTm2D9DZuTcCKXN1psJ2ndhGgnpJGciENGyB9zoJk1kMezFonySw0oIf0KVOs - oIO7L3MlYITstVTsrKNHCzXU5aimnvmrZPp5hfrtlWS2X6LBuQoatJWTWQz3C5mEeoS6hNqt5yj7FysJ - zJwL4b/EAAAAAElFTkSuQmCC @@ -365,9 +315,94 @@ Should an item become orphaned (disconnected) from the rest of the data, it will Everything in PROMS is inter-related. A working draft knows what is its first procedure and a procedure knows what is its first step. Likewise, a procedure knows what procedure is before it and after it. Should an item become orphaned (disconnected) from the rest of the data, it will no longer be accessible. This tool removes any orphaned items from the database. + + + + This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. + +Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + + This allows the user to check referenced objects links in procedure step data for multiple working drafts in a batch mode. + +Bad referenced bject links will be identified with an Bad RO Link annotation. Use the PROMS Search tool to list all of the steps that have this annotation. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAplJREFUOE+N + k11IU2Ecxv9zouK8CULrzo8SU3QKaSYmOJ2uFL8SK4igEIok6qKUwggySTShC41CRiiGdWNfYBcVWiGl + FqN0lh+UTaekzuWcuu2c9316nSdKLPEHz817/s/zPv9zOPQ/nlVQEGulF3ILPe+8SIHK8eYR5lusLwHy + Oy08RqpXjjfHVCMlsydbGbekg4/r4HmwRbLWUZzyeGNqD5NK1O5lw8L8NQHckgh5SAdXA3UqIxuzZKSj + 8ssI8Il9wMQeYDoVfD4HrsdhsNdRgTL2b4yl5Ce1qL+xcQOWxpKxMzwAMVEayIv7IU8XwVnv8+XuEfJV + xtfjMlKZ/CYG3JYJ96wOPj6EoCBfMCkfnJdguSMG89eoVBlfS+tJCpCafa1stgBYzAZbzoFGo0ZIiD84 + KwJ350P+UQxHtfr7vUPkp9j+4GqiM1K3FtyVB8h5wlSI4GB/RIQHgjtzwWaywMb1WHwYg7lKOq3YVrlz + jPw8RrWFOUoAJhpwcaNciNDQQMRGB4FNpIMNp4B93A2pXw/7ZbWlufCvFguNdNzzOta7J5S6fP4AdkVq + kKQVAQNJYO8TwHq0kD8kwdkWhZkLdMJrrsonlfu2yszmSsA9Bat1p0XdsTTcvxmJtpowyL1ar/m3PKYM + 2MpVgzcySUWTdWRwd+wAXzoo3r5B7CnqDqVg+lW89yuoVARrR/SaANm0F46mUFjOUjYtN9BTaVQYJzPA + RlPB+hNF3XjvP3C9bDuqTm2D9DZuTcCKXN1psJ2ndhGgnpJGciENGyB9zoJk1kMezFonySw0oIf0KVOs + oIO7L3MlYITstVTsrKNHCzXU5aimnvmrZPp5hfrtlWS2X6LBuQoatJWTWQz3C5mEeoS6hNqt5yj7FysJ + zJwL4b/EAAAAAElFTkSuQmCC + + + + This allows the user to update referenced objects values for multiple working drafts in a batch mode. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + This function will refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. + +Be sure a current backup of the database exists prior to running this function. + +If more than one procedure is selected, it is recommended that this be performed during off hours. + + + This allows the user to update referenced objects values for multiple working drafts in a batch mode. + +Be sure a current backup of the database exists prior performing this function. + +It is recommended that this be done during off hours. + + + + This function will refresh transitions in all procedures selected below, whether they were selected individually or as a group via a procedure set. + +Be sure a current backup of the database exists prior to running this function. + +If more than one procedure is selected, it is recommended that this be performed during off hours. + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAplJREFUOE+N + k11IU2Ecxv9zouK8CULrzo8SU3QKaSYmOJ2uFL8SK4igEIok6qKUwggySTShC41CRiiGdWNfYBcVWiGl + FqN0lh+UTaekzuWcuu2c9316nSdKLPEHz817/s/zPv9zOPQ/nlVQEGulF3ILPe+8SIHK8eYR5lusLwHy + Oy08RqpXjjfHVCMlsydbGbekg4/r4HmwRbLWUZzyeGNqD5NK1O5lw8L8NQHckgh5SAdXA3UqIxuzZKSj + 8ssI8Il9wMQeYDoVfD4HrsdhsNdRgTL2b4yl5Ce1qL+xcQOWxpKxMzwAMVEayIv7IU8XwVnv8+XuEfJV + xtfjMlKZ/CYG3JYJ96wOPj6EoCBfMCkfnJdguSMG89eoVBlfS+tJCpCafa1stgBYzAZbzoFGo0ZIiD84 + KwJ350P+UQxHtfr7vUPkp9j+4GqiM1K3FtyVB8h5wlSI4GB/RIQHgjtzwWaywMb1WHwYg7lKOq3YVrlz + jPw8RrWFOUoAJhpwcaNciNDQQMRGB4FNpIMNp4B93A2pXw/7ZbWlufCvFguNdNzzOta7J5S6fP4AdkVq + kKQVAQNJYO8TwHq0kD8kwdkWhZkLdMJrrsonlfu2yszmSsA9Bat1p0XdsTTcvxmJtpowyL1ar/m3PKYM + 2MpVgzcySUWTdWRwd+wAXzoo3r5B7CnqDqVg+lW89yuoVARrR/SaANm0F46mUFjOUjYtN9BTaVQYJzPA + RlPB+hNF3XjvP3C9bDuqTm2D9DZuTcCKXN1psJ2ndhGgnpJGciENGyB9zoJk1kMezFonySw0oIf0KVOs + oIO7L3MlYITstVTsrKNHCzXU5aimnvmrZPp5hfrtlWS2X6LBuQoatJWTWQz3C5mEeoS6hNqt5yj7FysJ + zJwL4b/EAAAAAElFTkSuQmCC - 38 + 46 diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs index 009956d3..8548a650 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.Designer.cs @@ -214,7 +214,7 @@ namespace VEPROMS this.btnSendErrorLog, this.btnShowErrFld, this.btnShowPrtFld, - this.btnHelpAbout}); ; + this.btnHelpAbout}); this.btnHelp.Text = "Help"; // // btnHelpManual @@ -1763,3 +1763,4 @@ namespace VEPROMS } } + diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/AnnotationExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/AnnotationExt.cs index e6979784..6b116fec 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/AnnotationExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/AnnotationExt.cs @@ -225,6 +225,86 @@ namespace VEPROMS.CSLA.Library throw new DbCslaException("Error on Annotation.Delete", ex); } } + + public static void DeleteAnnotationProcByType(int typID, string procList) + { + if (!CanDeleteObject()) + throw new System.Security.SecurityException("User not authorized to remove a Annotation"); + try + { + DataPortal.Delete(new DeleteAnnotationProcByTypeCriteria(typID, procList)); + AnnotationInfo.StaticOnInfoChanged(); + } + catch (Exception ex) + { + System.Data.SqlClient.SqlException exSQL = SqlException(ex); + if (exSQL != null && exSQL.Message.Contains("###Cannot Delete Item###")) + throw exSQL; + Console.WriteLine("AnnotationExt: Stacktrace = {0}", ex.StackTrace); + throw new DbCslaException("Error on Annotation.Delete", ex); + } + } + + public static void DeleteAnnotationDocvByType(int typID, string versionID) + { + if (!CanDeleteObject()) + throw new System.Security.SecurityException("User not authorized to remove a Annotation"); + try + { + DataPortal.Delete(new DeleteAnnotationDocvByTypeCriteria(typID, versionID)); + AnnotationInfo.StaticOnInfoChanged(); + } + catch (Exception ex) + { + System.Data.SqlClient.SqlException exSQL = SqlException(ex); + if (exSQL != null && exSQL.Message.Contains("###Cannot Delete Item###")) + throw exSQL; + Console.WriteLine("AnnotationExt: Stacktrace = {0}", ex.StackTrace); + throw new DbCslaException("Error on Annotation.Delete", ex); + } + } + + public static int getAnnotationProcCnt(int typID, string procList) + { + if (!CanGetObject()) + throw new System.Security.SecurityException("User not authorized to remove a Annotation"); + try + { + Annotation ProcCnt = DataPortal.Fetch(new getAnnotationCountProcCriteria(typID, procList)); + AnnotationInfo.StaticOnInfoChanged(); + return Annotation.ProcCnt; + //return Int32.Parse(ProcCnt); + } + catch (Exception ex) + { + System.Data.SqlClient.SqlException exSQL = SqlException(ex); + if (exSQL != null && exSQL.Message.Contains("###Cannot retrieve Item###")) + throw exSQL; + Console.WriteLine("AnnotationExt: Stacktrace = {0}", ex.StackTrace); + throw new DbCslaException("Error on getAnnotationCountProcCriteria", ex); + } + } + + public static int getAnnotationCountDocv(int typID, string procList) + { + if (!CanGetObject()) + throw new System.Security.SecurityException("User not authorized to remove a Annotation"); + try + { + Annotation DocvCnt = DataPortal.Fetch(new getAnnotationCountDocvCriteria(typID, procList)); + AnnotationInfo.StaticOnInfoChanged(); + return Annotation.DocvCnt; + } + catch (Exception ex) + { + System.Data.SqlClient.SqlException exSQL = SqlException(ex); + if (exSQL != null && exSQL.Message.Contains("###Cannot retrieve Item###")) + throw exSQL; + Console.WriteLine("AnnotationExt: Stacktrace = {0}", ex.StackTrace); + throw new DbCslaException("Error on getAnnotationCountDocvCriteria", ex); + } + } + private static System.Data.SqlClient.SqlException SqlException(Exception ex) { Type sqlExType = typeof(System.Data.SqlClient.SqlException); @@ -280,12 +360,209 @@ namespace VEPROMS.CSLA.Library throw new DbCslaException("Item.DataPortal_Delete", ex); } } + + [Serializable()] + protected class DeleteAnnotationProcByTypeCriteria + { + private int _typeID; + public int TypeID + { get { return _typeID; } } + + private string _procList; + public string ProcList + { get { return _procList; } } + public DeleteAnnotationProcByTypeCriteria(int typeID, string procList) + { + _typeID = typeID; + _procList = procList; + } + } + [Transactional(TransactionalTypes.TransactionScope)] + private void DataPortal_Delete(DeleteAnnotationProcByTypeCriteria criteria) + { + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Item.DataPortal_Delete", GetHashCode()); + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandTimeout = Database.SQLTimeout; + cm.CommandText = "deleteAnnotationsProcByType"; + cm.Parameters.AddWithValue("@typeid", criteria.TypeID); + cm.Parameters.AddWithValue("@procList", criteria.ProcList); + cm.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + if (_MyLog.IsErrorEnabled) _MyLog.Error("Item.DataPortal_Delete", ex); + _ErrorMessage = ex.Message; + throw new DbCslaException("Item.DataPortal_Delete Annotations by group", ex); + } + } + + [Serializable()] + protected class DeleteAnnotationDocvByTypeCriteria + { + private int _typeID; + public int TypeID + { get { return _typeID; } } + + private string _versionID; + public string VersionID + { get { return _versionID; } } + public DeleteAnnotationDocvByTypeCriteria(int typeID, string versionID) + { + _typeID = typeID; + _versionID = versionID; + } + } + [Transactional(TransactionalTypes.TransactionScope)] + private void DataPortal_Delete(DeleteAnnotationDocvByTypeCriteria criteria) + { + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Delete Annotations by Type Docv", GetHashCode()); + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandTimeout = Database.SQLTimeout; + cm.CommandText = "deleteAnnotationsDocvByType"; + cm.Parameters.AddWithValue("@typeid", criteria.TypeID); + cm.Parameters.AddWithValue("@docvList", criteria.VersionID); + cm.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + if (_MyLog.IsErrorEnabled) _MyLog.Error("Item.DataPortal_Delete", ex); + _ErrorMessage = ex.Message; + throw new DbCslaException("Item.DataPortal_Delete Annotations by type Docv", ex); + } + } + + private static int _procCnt; + public static int ProcCnt + { + get { return _procCnt; } + set { _procCnt = value; } + } + + [Serializable()] + protected class getAnnotationCountProcCriteria + { + private int _procCnt; + public int ProcCnt + { get { return _procCnt; } + set { _procCnt = value; } + } + private int _typeID; + public int TypeID + { get { return _typeID; } } + private string _procList; + public string ProcList + { get { return _procList; } } + public getAnnotationCountProcCriteria(int typeID, string procList, int procCnt = 0) + { + _typeID = typeID; + _procList = procList; + _procCnt = procCnt; + } + } + + [Transactional(TransactionalTypes.TransactionScope)] + private getAnnotationCountProcCriteria DataPortal_Fetch(getAnnotationCountProcCriteria criteria) + { + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Item.DataPortal_Fetch", GetHashCode()); + try + { + //int ProcCnt; + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandTimeout = Database.SQLTimeout; + cm.CommandText = "getAnnotationProcCount"; + cm.Parameters.AddWithValue("@procList", criteria.ProcList); + cm.Parameters.AddWithValue("@typeid", criteria.TypeID); + Annotation.ProcCnt = (int)cm.ExecuteScalar(); + + } + } + return criteria; //_procCnt.ToString(); + } + catch (Exception ex) + { + if (_MyLog.IsErrorEnabled) _MyLog.Error("Annotation.GetAnnotationProcCnt", ex); + _ErrorMessage = ex.Message; + throw new DbCslaException("Annotation.GetAnnotationProcCnt by group", ex); + } + } + + private static int _docvCnt; + public static int DocvCnt + { get { return _docvCnt; } + set { _docvCnt = value; } + } + + [Serializable()] + protected class getAnnotationCountDocvCriteria + { + private int _docvCnt; + public int DocvCnt + { get { return _docvCnt; } + set { _docvCnt = value; } + } + private int _TypeID; + public int TypeID + { get { return _TypeID; } } + private string _docvList; + public string DocvList + { get { return _docvList; } } + public getAnnotationCountDocvCriteria(int typeID, string docvList, int docvCnt = 0) + { + _TypeID = typeID; + _docvList = docvList; + _docvCnt = docvCnt; + } + } + + [Transactional(TransactionalTypes.TransactionScope)] + private getAnnotationCountDocvCriteria DataPortal_Fetch(getAnnotationCountDocvCriteria criteria) + { + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Annotation.DataPortal_Fetch", GetHashCode()); + try + { + //int ProcCnt; + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandTimeout = Database.SQLTimeout; + cm.CommandText = "getAnnotationDocvCount"; + cm.Parameters.AddWithValue("@typeid", criteria.TypeID); + cm.Parameters.AddWithValue("@DocvList", criteria.DocvList); + Annotation.DocvCnt = (int)cm.ExecuteScalar(); + } + return criteria; + } + } + catch (Exception ex) + { + if (_MyLog.IsErrorEnabled) _MyLog.Error("Item.DataPortal_Delete", ex); + _ErrorMessage = ex.Message; + throw new DbCslaException("Item.DataPortal_Delete Annotations by group", ex); + } + } } - //public partial class AnnotationTypeAnnotations - //{ - // public static int GetAnnotationID() - // { - // return AnnotationTypeAnnotat - // } - //} } + + From a804a3866a6336a3badeb8d3e9b894e2b9e12431 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 18 Jul 2024 11:12:30 -0400 Subject: [PATCH 2/3] C2024-005-Annotations-Cleanup-2 --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 655 +++++++++++++++++- .../frmAnnotationsCleanup.Designer.cs | 4 +- .../frmAnnotationsCleanup.cs | 2 + 3 files changed, 636 insertions(+), 25 deletions(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index c60d5b26..60a56c45 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -1,3 +1,5 @@ + + Set NoCount On; If (db_name() in('master','model','msdn','tempdb')) @@ -22230,12 +22232,13 @@ Go /* ========================================================================================================== - Begin: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'') + Begin: C2024-004 | B2024-041: KL - Update Copy Replace functionality, (remove ''copy of'') ========================================================================================================== */ -IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[CopyItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) - DROP PROCEDURE [CopyItemAndChildren]; + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[ReplaceItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [ReplaceItemAndChildren]; GO /***************************************************************************** @@ -22245,11 +22248,22 @@ GO /* ========================================================================================================== Author: Kevin Laskey - Modified Date: 07/09/2024 - Description: Copy Item and its Children + Create Date: 07/15/2024 + Description: B2024-041: "Copy of" is no longer being appended for paste before/after ========================================================================================================== */ -CREATE PROCEDURE [dbo].[CopyItemAndChildren] + +/****** Object: StoredProcedure [dbo].[CopyItemAndChildren] Script Date: 7/15/2024 9:29:21 AM ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +/***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2012 - Volian Enterprises, Inc. All rights reserved. +*****************************************************************************/ +CREATE PROCEDURE [dbo].[ReplaceItemAndChildren] ( @StartItemID INT, @DestFormatID INT, @@ -22294,7 +22308,6 @@ INSERT INTO @Children SELECT ItemID,ItemID,ContentID,ContentID,FormatID,FormatID -- <<< Copy Contents >>> -- Create new content rows to match the existing rows. Set the type to the Current ContentID temporarily -- so that the new content rows can be associated with the existing content rows. --- Rem 'Copy Of ' + before first [Number] for C2024-004 (KL) INSERT INTO Contents ([Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID]) select CASE when [ContentID] = @StartContentID and [Type]<20000 then [Number] else [Number] end, @@ -22622,21 +22635,624 @@ BEGIN CATCH -- Catch Block ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback EXEC vlnErrorHandler END CATCH +GO + + + + + + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[PasteItemReplace]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [PasteItemReplace]; +GO + + /***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2024 - Volian Enterprises, Inc. All rights reserved. + *****************************************************************************/ + /* + ========================================================================================================== + Author: Kevin Laskey + Create Date: 07/15/2024 + Description: B2024-041: "Copy of" is no longer being appended for paste before/after + ========================================================================================================== + */ + + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +/****** Object: StoredProcedure [dbo].[PasteItemReplace] Script Date: 03/20/2012 16:02:54 ******/ +/* +declare @NewItemID int +declare @dts datetime +set @newitemid = 0 +set @dts = getdate() +exec PasteItemReplace 398,397,20014,@dts,'bodine',@NewItemID output +*/ +-- ItemID is item to replace +-- StartItemID is item to copy +/***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2012 - Volian Enterprises, Inc. All rights reserved. +*****************************************************************************/ +CREATE PROCEDURE [dbo].[PasteItemReplace] +( + @ItemID int=null, @StartItemID int=null, + @Type int=null, @DTS datetime, @UserID nvarchar(100), + @NewItemID int output +) +WITH EXECUTE AS OWNER +AS +BEGIN TRY -- Try Block + BEGIN TRANSACTION + DECLARE @ContentID AS INT + DECLARE @NextItemID AS INT + DECLARE @PreviousItemID AS INT + DECLARE @ExternalChildCount AS INT + DECLARE @ExternalCount AS INT + DECLARE @Path AS VARCHAR(MAX) + DECLARE @Children AS TABLE + ( + ItemID INT PRIMARY KEY, + ContentID INT + ) + + if exists (select * from tblitems where itemid = @ItemID and DeleteStatus !=0) + BEGIN + RAISERROR ('###Cannot Paste Step###This current step has been deleted in another session',16,1) + RETURN + END + -- First check if the replaced item can be deleted, i.e. it doesn't have transitions + -- pointing to it or children. + + DECLARE @ExternalTrans TABLE + ( + [FromItemID] int, + [TransitionID] [int] NOT NULL, + [FromID] [int] NOT NULL, + [ToID] [int] NOT NULL, + [RangeID] [int] NOT NULL, + [Config] [nvarchar](max) NULL + ) + SET NOCOUNT ON + DECLARE @DeleteID int + INSERT INTO DeleteLog (UserID) VALUES (@UserID) + SELECT @DeleteID = SCOPE_IDENTITY() + SELECT @ContentID = ContentID, @PreviousItemID = PreviousID FROM Items WHERE ItemID = @ItemID + SELECT @NextItemID = ItemID FROM Items WHERE PreviousID = @ItemID + --SELECT @ExternalCount = count(*) FROM vefn_FindExternalTransitions(@ItemID) + SELECT @ExternalChildCount = count(*) FROM vefn_FindExternalChildTransitions(@ItemID) + SET @Path = [dbo].[ve_GetShortPath](@ItemID) + + --IF @ExternalCount > 0 AND @NextItemID is null + --BEGIN + -- RAISERROR ('###Cannot Delete Item###Step %d has External Transitions and has no next step - (%s)',16,1,@ItemID,@Path) + -- RETURN + --END + + IF @ExternalChildCount > 0 + BEGIN + RAISERROR ('###Cannot Delete Item###Step %d has External Transitions to it''s children - (%s)',16,1,@ItemID,@Path) + RETURN + END + + -- Copy the item, 'NewItemID' represents the new item(s) + -- DestFormatID is the formatid for the destination parent's format + DECLARE @DestFormatID int + SET @DestFormatID = .dbo.vefn_GetInheritedFormat(@ItemID, 0) + EXECUTE ReplaceItemAndChildren @StartItemID, @DestFormatID, @UserID, @NewItemID OUTPUT + + -- Adjust the next/previous to point to the new item + + DECLARE @PreviousID int + SELECT @PreviousID = [PreviousID] + FROM [ITEMS] II + WHERE [ItemID]=@ItemID + UPDATE [ITEMS] SET [PreviousID]=@PreviousID where [ItemID]=@NewItemID + UPDATE [CONTENTS] SET [Type]=@Type + FROM [CONTENTS] CC JOIN [ITEMS] ii ON CC.[ContentID]=II.[ContentID] + WHERE [ItemID]=@NewItemID + UPDATE [ITEMS] SET [PreviousID]=@NewItemID where [PreviousID]=@ItemID + UPDATE [PARTS] SET [ItemID]=@NewItemID where [ItemID]=@ItemID + + -- UPDATE DocVersion if this was a procedure + UPDATE DocVersions SET ItemID=@NewItemID where ItemID = @ItemID + + -- If there were 'external transitions' that pointed to the original + -- top replaced step, adjust them to point to the new top. + INSERT INTO @ExternalTrans SELECT * FROM vefn_FindExternalTransitions(@ItemID) + OPTION (MAXRECURSION 10000) + IF (SELECT COUNT(*) from @ExternalTrans) > 0 + BEGIN + -- Update content records for the transitions + Update CC + Set Text = DBO.vefn_FixTransitionText(Text,TT.TransitionID,TT.TranType,TT.ToID,TT.RangeID,@ItemID,@NewItemID) + From CONTENTS CC + JOIN Transitions TT ON TT.FromID = CC.ContentID + WHERE TransitionID in(Select TransitionID from @ExternalTrans) + -- Update transitions that point to @ItemID to Point to @NextItemID + UPDATE TRANSITIONS + SET ToID = case when ToID = @ItemID then @NewItemID else ToID END, + RangeID = case when RangeID = @ItemID then @NewItemID else RangeID END + WHERE TransitionID in(Select TransitionID from @ExternalTrans) + + DECLARE @typeID int -- AnnotationType + SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required' + IF(@typeID IS NULL) + BEGIN + INSERT INTO [AnnotationTypes] ([Name],[UserID]) VALUES ('Verification Required','Volian') + SELECT @typeID = SCOPE_IDENTITY() + END + -- Add 'Verification Required' annotions for transtions that pointed to top step + -- and need to point to + INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID]) + SELECT ItemID, @typeID,'Verify Replaced Step Transition Destination',@UserID + FROM Items where ItemID in (SELECT FromItemID FROM @ExternalTrans) + + END + -- Remove the old one + + -- Get list of Children + INSERT INTO @Children SELECT * FROM vefn_ChildItems(@ItemID) + -- Delete Annotations for @ItemID and children + DELETE from Annotations where ItemID in(Select ItemID from @Children) + -- Delete Details associated with @ContentID and children + DELETE from Details where ContentID in(Select ContentID from @Children) + -- Delete Grids associated with @ContentID and children + DELETE from Grids where ContentID in(Select ContentID from @Children) + -- Delete Images associated with @ContentID and children + DELETE from Images where ContentID in(Select ContentID from @Children) + -- Delete Entries associated with @ContentID and children + DELETE from Entries where ContentID in(Select ContentID from @Children) + -- Delete ROUsages associated with @ContentID and children + DELETE from RoUsages where ContentID in(Select ContentID from @Children) + -- Delete ZTransitions records associated with @ContentID and children + DELETE FROM ZTransitions where TransitionID + in(SELECT TransitionID from Transitions where FromID in(SELECT ContentID FROM @Children) or FromID = @ContentID) + -- Delete Transitions associated with @ContentID and children + DELETE FROM Transitions where FromID in(SELECT ContentID FROM @Children) or FromID = @ContentID + -- Delete Parts associated with @ContentID and children + DELETE from Parts where ContentID in(Select ContentID from @Children) + -- Delete ZContents associated with @ContentID and children + DELETE from ZContents where ContentID in(Select ContentID from @Children) + -- Disconnect Items from Each Other + DELETE from Items where ItemID in(Select ItemID from @Children) and PreviousID Is Not Null + -- Disconnect Items to be deleted from each other + Update Items set PreviousID = null where ItemID in (Select ItemID from @Children) and PreviousID Is Not Null + -- Delete Item Records + DELETE from Items where ItemID in(Select ItemID from @Children) + -- DELETE Contents + DELETE from Contents where ContentID in(Select ContentID from @Children) +--delete from itemaudits where itemid = @newitemid +delete from itemaudits where itemid in (select itemid from vefn_ChildItems(@newitemid)) +--delete from contentaudits where contentid = (select contentid from items where itemid = @newitemid) +delete from contentaudits where contentid in (select contentid from vefn_ChildItems(@newitemid)) + DELETE from DeleteLog where DeleteID = @DeleteID + IF( @@TRANCOUNT > 0 ) COMMIT + EXECUTE GetItem @NewItemID +END TRY +BEGIN CATCH -- Catch Block + IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level + ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback + EXEC vlnErrorHandler +END CATCH +go + + + + + + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[CopyItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [CopyItemAndChildren]; +GO + + /***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2024 - Volian Enterprises, Inc. All rights reserved. + *****************************************************************************/ + /* + ========================================================================================================== + Author: Kevin Laskey + Create Date: 07/15/2024 + Description: B2024-041: "Copy of" is no longer being appended for paste before/after + ========================================================================================================== + */ + + +/****** Object: StoredProcedure [dbo].[CopyItemAndChildren] Script Date: 7/15/2024 10:01:59 AM ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +/***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2012 - Volian Enterprises, Inc. All rights reserved. +*****************************************************************************/ +CREATE PROCEDURE [dbo].[CopyItemAndChildren] +( + @StartItemID INT, + @DestFormatID INT, + @UserID NVARCHAR(100), + @NewStartItemID int output +) +WITH EXECUTE AS OWNER +AS +BEGIN TRY -- Try Block + +--+-----------------------------------------------------------------+ +--& BEGIN TRANSACTION to make these changes temporary & +--+-----------------------------------------------------------------+ + BEGIN TRANSACTION + if exists (select * from tblitems where itemid = @StartItemID and DeleteStatus !=0) + BEGIN + RAISERROR ('###Cannot Paste Step###This step has been deleted',16,1) + RETURN + END +DECLARE @Children AS TABLE +( + ItemID INT PRIMARY KEY, + NewItemID INT, + ContentID INT, + NewContentID INT, + FormatID INT, + NewFormatID INT +) +DECLARE @NewDocuments AS TABLE +( + DocID INT PRIMARY KEY, + NewDocID INT +) +-- Locals +DECLARE @DTS DATETIME -- DTS of all New Items +DECLARE @StartContentID INT +Select @StartContentID = ContentID from Items where ItemID = @StartItemID +SET @DTS = GETDATE() -- Get the current Date and Time +-- Get a list of all of the Items to be copied based upon StartItemID and EndItemID +-- If the StartItemID = EndItemID then it is a single item and it's children +INSERT INTO @Children SELECT ItemID,ItemID,ContentID,ContentID,FormatID,FormatID FROM vefn_ChildItemsRange(@StartItemID,@StartItemID,null) +-- <<< Copy Contents >>> +-- Create new content rows to match the existing rows. Set the type to the Current ContentID temporarily +-- so that the new content rows can be associated with the existing content rows. +INSERT INTO Contents + ([Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID]) + select CASE when [ContentID] = @StartContentID and [Type]<20000 then 'Copy Of ' + [Number] else [Number] end, + [Text],[ContentID],[FormatID],[Config],@DTS,@UserID + from Contents where ContentID in(Select ContentID from @Children) +-- Update the @Children with the NewConentIDs +--print 'A ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +UPDATE NN set NN.NewContentID = CC.ContentID +From Contents CC +Join @Children NN on NN.ContentID = CC.Type AND CC.DTS = @DTS and CC.UserID = @UserID +-- Reset the Type column in the Contents table with the Type column from the original Records. +--print 'B ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +DECLARE @SourceType INT +Select @SourceType = Type from Contents where ContentID = @StartContentID +if @SourceType = 0 + BEGIN + UPDATE CC set CC.Type = CC2.Type, CC.DTS = CC2.DTS, CC.UserID = CC2.UserID + From Contents CC + Join @Children NN on NN.NewContentID = CC.ContentID + Join Contents CC2 on NN.ContentID = CC2.ContentID + END +else + BEGIN +UPDATE CC set CC.Type = CC2.Type +From Contents CC +Join @Children NN on NN.NewContentID = CC.ContentID +Join Contents CC2 on NN.ContentID = CC2.ContentID + END +--print 'B1 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- Contents are done + -- SELECT * From Contents where DTS = @DTS and UserID = @UserID +-- <<< Copy Grids >>> +INSERT INTO [Grids]([ContentID],[Data],[Config],[DTS],[UserID]) + SELECT NN.[NewContentID],[Data],[Config],@DTS,@UserID + FROM [Grids] GG Join @Children NN on GG.ContentID = NN.ContentID +-- <<< Copy Images >>> +--print 'B2 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +INSERT INTO [Images]([ContentID],[ImageType],[FileName],[Data],[Config],[DTS],[UserID]) + SELECT NN.[NewContentID],[ImageType],[FileName],[Data],[Config],@DTS,@UserID + FROM [Images] II Join @Children NN on II.ContentID = NN.ContentID +-- Create new item rows based upon the current item rows and the @Children table, with the NewContentIDs +--print 'B3 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +INSERT INTO [Items] ([PreviousID],[ContentID],[DTS],[UserID]) + SELECT II.[PreviousID], -- Leave the PreviousID as is for now + NN.NewContentID, @DTS, @UserID + from @Children NN + join Items II on II.ContentID = NN.ContentID +-- Update the @Children with the NewItemIDs +--print 'B4 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +UPDATE NN set NN.NewItemID = II.ItemID +From Items II +Join @Children NN on NN.NewContentID = II.ContentID AND II.DTS = @DTS and II.UserID = @UserID +DECLARE @NewItemID int +SELECT @NewItemID = NewItemID + FROM @Children + WHERE ItemID = @StartItemID +--print 'B5 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +UPDATE NN SET NN.[NewFormatID] = CC.[FormatID] + FROM @Children NN + Join vefn_ChildItemsRange(@NewItemID,@NewItemID,@DestFormatID) CC + ON NN.NewItemID = CC.ItemID +-- The @Children table is now complete + --SELECT * From @Children +-- Update the PreviousID in the new Item rows, to the new ItemIDs based upon the old ItemIDs +--print 'B6 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +Update II Set II.[PreviousID] = NN.NewItemID +from Items II +Join @Children NN on NN.ItemID = II.PreviousID AND II.DTS = @DTS and II.UserID = @UserID +-- Get the new ItemIDs based upon the old ItemIDs +SELECT @NewStartItemID = NewItemID from @Children where ItemID = @StartItemID +--SELECT @NewEndItemID = NewItemID from @Children where ItemID = @EndItemID +-- Set the PreviousID for the starting Item to null temporarily. +-- This will be adjusted based upon where the step is inserted. +--print 'B7 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +Update Items Set PreviousID = null where ItemID = @NewStartItemID +if @SourceType = 0 + BEGIN + UPDATE II SET II.DTS = II2.DTS, II.UserID = II2.UserID + From Items II + Join @Children NN on NN.NewItemID = II.ItemID + Join Items II2 on NN.ItemID = II2.ItemID + WHERE NN.ItemID = @StartItemID + END +--print 'C ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- Items are done + --SELECT * From Items where DTS = @DTS and UserID = @UserID +-- <<< Copy Parts >>> +INSERT INTO [Parts] ([ContentID],[FromType],[ItemID],[DTS],[UserID]) +Select NNF.NewContentID,[FromType],NNT.NewItemID, @DTS, @UserID from Parts PP +JOIN @Children NNF on PP.ContentID = NNF.ContentID +JOIN @Children NNT on PP.ItemID = NNT.ItemID +--print 'D ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- Parts are done + -- SELECT * From Parts where DTS = @DTS and UserID = @UserID +-- <<< Copy Annotations >>> +INSERT INTO [Annotations] ([ItemID],[TypeID],[RtfText],[SearchText],[Config],[DTS],[UserID]) + Select NewItemID, TypeID, RtfText, SearchText, Config, @DTS, @UserID + from Annotations AA Join @Children NN on AA.ItemID = NN.ItemID +--print 'E ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- Annotations are done + -- SELECT * From Annotations where DTS = @DTS and UserID = @UserID +-- <<< Copy Documents and Entries>>> +-- logic to create Entries for Library Documents +INSERT INTO [Entries] ([ContentID],[DocID],[DTS],[UserID]) + SELECT NN.[NewContentID],EE.[DocID],@DTS,@UserID + FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID + JOIN [Documents] DD on EE.[DocID] = DD.[DocID] and Isnull(LibTitle,'') <> '' +-- Logic to create new documents for any documents used that do not have libtitles +INSERT INTO [Documents] ([LibTitle],[DocContent],[DocAscii],[Config],[DTS],[UserID],[FileExtension]) + OUTPUT CAST(INSERTED.[LibTitle] as INT),INSERTED.[DocID] INTO @NewDocuments + SELECT str(DD.[DocID]),[DocContent],[DocAscii],[Config],@DTS,@UserID,[FileExtension] + FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID + JOIN [Documents] DD on EE.[DocID] = DD.[DocID] and Isnull(LibTitle,'') = '' +UPDATE DD SET LibTitle = '' + FROM Documents DD JOIN @NewDocuments ND on DD.[DocID] = ND.[NewDocID] + where DTS = @DTS and UserID = @UserID +--print 'F ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- Documents are Done + -- SELECT * From Documents where DTS = @DTS and UserID = @UserID +-- Logic to create entries for these newly created documents +INSERT INTO [Entries] ([ContentID],[DocID],[DTS],[UserID]) + SELECT NN.[NewContentID],ND.[NewDocID],@DTS,@UserID + FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID + JOIN @NewDocuments ND on EE.[DocID] = ND.[DocID] +-- Logic to Create DROUsages for these newly created documents +INSERT INTO [DROUsages] ([DocID],[ROID],[Config],[DTS],[UserID],[RODbID]) + SELECT ND.[NewDocID],[ROID],[Config],@DTS,@UserID,[RODbID] + FROM [DROUsages] RR + JOIN @NewDocuments ND on RR.[DocID] = ND.[DocID] + +--print 'G ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- Entries are done + -- SELECT * From Entries EE JOIN Documents DD on ee.DocID = DD.DocID where EE.DTS = @DTS and EE.UserID = @UserID +-- <<< Copy RoUsages >>> +INSERT INTO [RoUsages] ([ContentID],[ROID],[Config],[DTS],[UserID],[RODbID]) + SELECT NN.[NewContentID],CAST([ROUsageID] as nvarchar(16)),[Config],@DTS,@UserID,[RODbID] + FROM [RoUsages] RR Join @Children NN on RR.ContentID = NN.ContentID +-- Update content records for newly copied records to use correct RO usage ids in the RO tags +DECLARE @RowsAffected int +SET @RowsAffected=1 +WHILE @RowsAffected > 0 +BEGIN + UPDATE CC SET [TEXT] = C2.NewText + FROM CONTENTS CC + JOIN (SELECT C1.ContentID, .dbo.vefn_FixROText(C1.Text, CAST([ROID] as int), [ROUsageID]) NewText + FROM CONTENTS C1 + JOIN @Children NN on C1.ContentID = NN.NewContentID + JOIN RoUsages RO on NN.NewContentID = RO.ContentID where Len([ROID]) < 12) C2 ON CC.ContentID = C2.ContentID + WHERE [TEXT] <> C2.NewText + SET @RowsAffected = @@RowCount +END +-- Update grid records for newly copied records to use correct RO usage ids in the RO tags +SET @RowsAffected=1 +WHILE @RowsAffected > 0 +BEGIN + UPDATE GG SET [Data] = G2.NewData + FROM GRIDS GG + JOIN (SELECT G1.ContentID, .dbo.vefn_FixROData(G1.Data, CAST([ROID] as int), [ROUsageID]) NewData + FROM GRIDS G1 + JOIN @Children NN on G1.ContentID = NN.NewContentID + JOIN RoUsages RO on NN.NewContentID = RO.ContentID where Len([ROID]) < 12) G2 ON GG.ContentID = G2.ContentID + WHERE Cast([Data] as nvarchar(max)) <> cast(G2.NewData as nvarchar(max)) + SET @RowsAffected = @@RowCount +END +UPDATE RON SET [ROID] = ROO.[ROID] + FROM RoUsages RON + JOIN @Children NN on RON.ContentID = NN.NewContentID + JOIN RoUsages ROO on CAST(RON.ROID as int) = ROO.RoUsageID + where Len(RON.[ROID]) < 12 +--print 'H ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- RoUsages are done + -- SELECT * From RoUsages where DTS = @DTS and UserID = @UserID + +-- <<< Copy Transtions >>> +-- Note that the inserted record has the 'TranType' field set to old transitionid. This is done +-- so that the next step can replace the old transitionid with the new transitionid in the +-- content record's transition tokens. The TranType gets reset after the content records are +-- updated. +-- Also note that the 'toid/rangeid' may need converted to newly copied ids or may not. If it's +-- not a range, then it always is converted to new, if there is a new. If it's a range, both +-- the toid & the rangeid must be new in order for the conversion to be correct. You cannot +-- have part of the range pointing to the new and part of the range pointing to the original +-- locations. + +INSERT INTO .[dbo].[Transitions] ([FromID],[ToID],[RangeID],[IsRange],[TranType],[Config],[DTS],[UserID]) + SELECT NNF.[NewContentID], + -- if both toid & range are null, use the original toid & rangeid + CASE WHEN NNT.[NewItemID] is null or NNR.[NewItemID] is null THEN [ToID] ELSE NNT.[NewItemID] END, + CASE WHEN NNT.[NewItemID] is null or NNR.[NewItemID] is null THEN [RangeID] ELSE NNR.[NewItemID] END, + [IsRange],[TransitionID],[Config],@DTS,@UserID + FROM .[dbo].[Transitions] TT + JOIN @Children NNF on TT.[FromID] = NNF.[ContentID] + LEFT JOIN @Children NNT on TT.[ToID] = NNT.[ItemID] + LEFT JOIN @Children NNR on TT.[RangeID] = NNR.[ItemID] +--print 'H1 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- -- Update content records for newly copied records to use correct TransitionIDs in the Transition tags +SET @RowsAffected=1 +WHILE @RowsAffected > 0 +BEGIN +UPDATE CC SET [TEXT] = C2.NewText + FROM CONTENTS CC + JOIN (SELECT C1.ContentID, .dbo.vefn_FixTransitionTextForCopy(C1.Text, TRO.TransitionID, TRO.TranType, TRO.[ToID], TRO.[RangeID],TR.[TransitionID], TR.[ToID], TR.[RangeID], .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)) NewText + FROM CONTENTS C1 + JOIN @Children NN on C1.ContentID = NN.NewContentID + JOIN Transitions TR on NN.NewContentID = TR.FromID + JOIN Transitions TRO on TR.TranType = TRO.TransitionID) C2 ON CC.ContentID = C2.ContentID + WHERE [TEXT] <> C2.NewText + SET @RowsAffected = @@RowCount +END +--print 'H2 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +--set nocount off +-- -- Update grid records for newly copied records to use correct TransitionIDs in the Transition tags +declare @grids table +( +contentid int primary key, +data xml +) +insert into @grids select gg.contentid,gg.data from GRIDS GG + where gg.contentid in (select nn.newcontentid from + @Children NN + JOIN Transitions TR on NN.NewContentID = TR.FromID + JOIN Transitions TRO on TR.TranType = TRO.TransitionID) +--print 'H2.1 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +--select * from @grids +SET @RowsAffected=1 +WHILE @RowsAffected > 0 +BEGIN +UPDATE GG SET [DATA] = G2.NewData + FROM @GRIDS GG + JOIN (SELECT G1.ContentID, .dbo.vefn_FixTransitionDataForCopy(G1.Data, TRO.TransitionID, TRO.TranType, TRO.[ToID], TRO.[RangeID],TR.[TransitionID], TR.[ToID], TR.[RangeID], .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)) NewData + FROM @GRIDS G1 + JOIN @Children NN on G1.ContentID = NN.NewContentID + JOIN Transitions TR on NN.NewContentID = TR.FromID + JOIN Transitions TRO on TR.TranType = TRO.TransitionID) G2 ON GG.ContentID = G2.ContentID + WHERE Cast([DATA] as nvarchar(max)) <> CAST(G2.NewData as nvarchar(max)) + SET @RowsAffected = @@RowCount +END +--print 'H2.2 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +update GG set data = g1.data from Grids gg join @grids g1 on gg.contentid = g1.contentid +--print 'H3 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +--set nocount on +-- Add 'Verification Required' AnnotationType + DECLARE @typeID int + SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required' + IF(@typeID IS NULL) + BEGIN + INSERT INTO [AnnotationTypes] ([Name],[UserID]) VALUES ('Verification Required','Volian') + SELECT @typeID = SCOPE_IDENTITY() + END + -- Add "Verification Required" Annotation for each Transition whose transition format changes +INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID]) + SELECT NN.NewItemID, @typeID,'Verify Transition Format',@UserID + FROM Transitions TR + JOIN @Children NN on TR.FromID = NN.NewContentID + JOIN Transitions TRO on TR.TranType = TRO.TransitionID + WHERE .dbo.vefn_CompareTranFormat(NN.FormatID, NN.NewFormatID, TRO.TranType) <> 0 +--print 'H4 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +UPDATE TR SET TR.[TranType] = .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType) + FROM Transitions TR + JOIN @Children NN on TR.FromID = NN.NewContentID + JOIN Transitions TRO on TR.TranType = TRO.TransitionID +--print 'H5 ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +-- Transitions are done + -- SELECT * From Transitions where DTS = @DTS and UserID = @UserID +--print 'Z ' + cast(datediff(s,@dts,getdate()) as varchar(100)) +--foldouts fixing code +if exists (select * from contents where contentid in (select newcontentid from @children) and config like '%FloatingFoldout%') +begin + --insert into #mytemp + select cc.contentid,xsteps.value('@FloatingFoldout','int') oldfoldoutid,(select newitemid + from @children + where itemid = xsteps.value('@FloatingFoldout','int')) newfoldoutid,xconfig + into #mytemp + from (select *,cast(config as xml) xconfig from contents where contentid in (select newcontentid from @children)) cc + cross apply xconfig.nodes('Config/Step') tsteps(xsteps) + --build @cmd string + declare @cmd nvarchar(max) + declare cmds cursor for + select distinct 'update #mytemp set xconfig.modify(''replace value of (Config/Step/@FloatingFoldout)[1] with "' + + cast(newfoldoutid as varchar(10)) + + '"'') where xconfig.value(''(Config/Step/@FloatingFoldout)[1]'',''int'') = ' + + cast(oldfoldoutid as varchar(10)) + from #mytemp + --execute cursor over rows + open cmds + fetch next from cmds into @cmd + while @@fetch_status = 0 + begin + exec sp_executesql @cmd + fetch next from cmds into @cmd + end + close cmds + deallocate cmds + --actually update contents + update cc set config = cast(xconfig as varchar(max)) from contents cc join #mytemp mt on cc.contentid = mt.contentid + --get rid of #mytemp + drop table #mytemp +end +--end foldouts fixing code +--section start +DECLARE @NewContentID int +Select @NewContentID = NewContentID from @Children where ItemID = @StartItemID +DECLARE @Config varchar(max) +DECLARE @XConfig xml +select @Config = config from contents where contentid = @NewContentID +select @XConfig = cast(@Config as xml) +if @Config like '%SectionStart%' begin + DECLARE @SectionStart int + select @SectionStart = xproc.value('@SectionStart','int') from @xconfig.nodes('Config/Procedure') tproc(xproc) + DECLARE @NewSectionStart int + select @NewSectionStart = newitemid from @children where itemid = @SectionStart + DECLARE @cmd2 nvarchar(max) + set @cmd2 = ' + declare @XConfig xml; + set @XConfig = cast(''' + @Config + ''' as xml); + set @XConfig.modify(''replace value of (Config/Procedure/@SectionStart)[1] with "' + cast(@NewSectionStart as nvarchar(10)) + '"''); + update contents set config = cast(@XConfig as varchar(max)) where contentid = ' + cast(@NewContentID as nvarchar(10)) + ';' + exec sp_executesql @cmd2 +end +--end section start + IF( @@TRANCOUNT > 0 ) COMMIT +END TRY +BEGIN CATCH -- Catch Block + IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level + ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback + EXEC vlnErrorHandler +END CATCH Go - IF (@@Error = 0) PRINT 'Procedure Creation: [CopyItemAndChildren] Succeeded' - ELSE PRINT 'Procedure Creation: [CopyItemAndChildren] Error on Creation' - GO - /* ========================================================================================================== End: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'') ========================================================================================================== */ - - /* ========================================================================================================== Begin: C2024-005: PRL - SPs to support Admin tool to clean Annotations @@ -22712,7 +23328,7 @@ AS -- Delete Annotations DELETE FROM Ann - FROM tblAnnotations Ann INNER JOIN @Annotationitems AI ON Ann.itemid = AI.AllItemIDs WHERE TypeID = @typeidI beleive the + FROM tblAnnotations Ann INNER JOIN @Annotationitems AI ON Ann.itemid = AI.AllItemIDs WHERE TypeID = @typeid GO @@ -22903,10 +23519,6 @@ GO ========================================================================================================== */ - - - ------------------------------------------------------------------------------ /* --------------------------------------------------------------------------- | ADD New Code Before this Block | @@ -22940,8 +23552,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '07/16/2024 5:00 PM' - set @RevDescription = 'C2024-005: An Admin tool that can delete a group of annotations should be developed' + set @RevDate = '07/16/2024 4:19 AM' + set @RevDescription = 'B2024-041: Bug fix for copy/replace functionality on procedures and steps' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription @@ -22959,6 +23571,3 @@ ELSE PRINT 'StoredProcedure [vesp_GetSQLCodeRevision] Error on Creation' go Exec vesp_GetSQLCodeRevision; - - - diff --git a/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.Designer.cs b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.Designer.cs index 06925a54..6347a126 100644 --- a/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.Designer.cs +++ b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.Designer.cs @@ -56,9 +56,9 @@ namespace VEPROMS this.lblAnnotationsList.AutoSize = true; this.lblAnnotationsList.Location = new System.Drawing.Point(26, 21); this.lblAnnotationsList.Name = "lblAnnotationsList"; - this.lblAnnotationsList.Size = new System.Drawing.Size(169, 13); + this.lblAnnotationsList.Size = new System.Drawing.Size(175, 13); this.lblAnnotationsList.TabIndex = 1; - this.lblAnnotationsList.Text = "Select a Annotation Type to Clean"; + this.lblAnnotationsList.Text = "Select an Annotation Type to Clean"; // // btnClean // diff --git a/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.cs b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.cs index 59506f14..7e964995 100644 --- a/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.cs +++ b/PROMS/VEPROMS User Interface/frmAnnotationsCleanup.cs @@ -129,6 +129,7 @@ namespace VEPROMS // Retrieve number of annotations that will be deleted. private void lbAnnotationTypes_SelectedIndexChanged(object sender, EventArgs e) { + btnClean.Enabled = false; lblCountNumber.Text = ""; int deletecountProc = 0; int deletecountDocv = 0; @@ -144,6 +145,7 @@ namespace VEPROMS deletecountDocv = Annotation.getAnnotationCountDocv(AnnotationTyp, getAnnotationDocvItems(dvil2)); } lblCountNumber.Text = (deletecountProc + deletecountDocv).ToString(); + btnClean.Enabled = true; } // Close form. From a240bc2c190eb30f58c6bbc8037452a20c161e1f Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Thu, 18 Jul 2024 11:31:49 -0400 Subject: [PATCH 3/3] C2024-005-Annotations-Cleanup-2 --- PROMS/VEPROMS User Interface/PROMSFixes.Sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PROMS/VEPROMS User Interface/PROMSFixes.Sql b/PROMS/VEPROMS User Interface/PROMSFixes.Sql index 60a56c45..c557604d 100644 --- a/PROMS/VEPROMS User Interface/PROMSFixes.Sql +++ b/PROMS/VEPROMS User Interface/PROMSFixes.Sql @@ -23552,8 +23552,8 @@ BEGIN TRY -- Try Block DECLARE @RevDate varchar(255) DECLARE @RevDescription varchar(255) - set @RevDate = '07/16/2024 4:19 AM' - set @RevDescription = 'B2024-041: Bug fix for copy/replace functionality on procedures and steps' + set @RevDate = '07/18/2024 11:24' + set @RevDescription = 'C2024-005 Add an Admin tool that can delete a group of annotations.' Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription