diff --git a/PROMS/SQL/ClientSpecific/BNPP_CoverPageConsolidation.sql b/PROMS/SQL/ClientSpecific/BNPP_CoverPageConsolidation.sql new file mode 100644 index 00000000..3ba8cd8e --- /dev/null +++ b/PROMS/SQL/ClientSpecific/BNPP_CoverPageConsolidation.sql @@ -0,0 +1,147 @@ + /***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2022 - Volian Enterprises, Inc. All rights reserved. +*****************************************************************************/ + +-- ============================================= +-- Author: Matthew Schill +-- Create date: 03/20/2026 +-- Description: Script to consolidate Cover Pages for Barakah +-- by Converting multi-unit procedures with Cover Pages +-- to use 1 Library Document Cover Page +-- ============================================= + + select Contents.ContentID + , Contenttext = Contents.Text + , Items.ItemID + , tblDocuments.DocID + , ParentContentID + , ParentItemID + , LibTitle = ISNULL(LibTitle,'') + , numLibCP + , numCP + ,BaseFlag = 0 + INTO #tmpUpdate + from Contents + inner join Entries on Contents.ContentID = Entries.ContentID + inner join tblDocuments on tblDocuments.DocID = Entries.DocID + inner join Items on Items.ContentID = Contents.ContentID + outer apply + (select ParentContentID=ContentID, ParentItemID = PItm.ItemID + FROM dbo.vefn_ParentItems(Items.ItemID) PItm + where PItm.ItemID <> Items.ItemID + ) parent + outer apply + (select numLibCP = Count(*) + FROM dbo.vefn_ChildItems(ParentItemID) PItm + INNER JOIN Contents on Contents.ContentID = PItm.ContentID + INNER JOIN Entries on Contents.ContentID = Entries.ContentID + INNER JOIN tblDocuments on tblDocuments.DocID = Entries.DocID + where PItm.ItemID <> ParentItemID + AND Contents.text like 'Cover Page%' and ISNULL(tblDocuments.LibTitle,'') <> '' + ) childWithLibTitle + outer apply + (select numCP = Count(*) + FROM dbo.vefn_ChildItems(ParentItemID) PItm + INNER JOIN Contents on Contents.ContentID = PItm.ContentID + where PItm.ItemID <> ParentItemID + AND Contents.text like 'Cover Page%' + ) child + where Contents.text like 'Cover Page%' + order by ParentContentID asc, CASE WHEN ISNULL(LibTitle,'') <> '' THEN 1 ELSE 2 END asc, Contents.Text asc + + UPDATE #tmpUpdate SET BaseFlag = 1 where LibTitle <> '' and numLibCP = 1 + + UPDATE #tmpUpdate SET BaseFlag = CASE WHEN tU.LibTitle <> '' THEN 1 ELSE 2 END FROM #tmpUpdate tU + where BaseFlag = 0 AND tU.ContentID IN + ( + Select ContentID FROM + (SELECT sub.ContentID, + row_number() OVER(PARTITION BY sub.ParentContentID ORDER BY CASE WHEN ISNULL(sub.LibTitle,'') <> '' THEN 1 ELSE 2 END asc, sub.Contenttext asc) as pos + FROM #tmpUpdate sub + ) x + WHERE x.pos = 1 + ) + + declare @Cont TABLE + ( + ContentID int, + ItemID int, + xConfig xml + ) + insert into @Cont + SELECT tU.ContentID, ItemID, xConfig = CAST(tblContents.config AS xml) FROM + tblContents + INNER JOIN + #tmpUpdate tU ON tU.ContentID = tblContents.ContentID + where tU.BaseFlag > 0 + + Update @Cont Set xConfig.modify('delete //MasterSlave') From @Cont; + + Update tblContents SET Text = 'Cover Page', Config = CAST(xConfig AS varchar(max)), + DTS = GETDATE(), UserID = 'CPVolian2026' + FROM + @Cont CNT INNER JOIN + tblContents ON CNT.ContentID = tblContents.ContentID; + + --Update items PreviousIds + UPDATE tblItems Set PreviousID = IdToSwapTO.ItemID + FROM + tblItems + INNER JOIN + #tmpUpdate tU ON tblItems.PreviousID = tU.ItemID AND tU.BaseFlag = 0 + INNER JOIN #tmpUpdate IdToSwapTO ON IdToSwapTO.ParentContentID = tU.ParentContentID AND IdToSwapTO.BaseFlag IN (1,2) + + UPDATE tblItems Set DeleteStatus = 1, DTS = GETDATE(), UserID = 'CPVolian2026' + FROM + #tmpUpdate tU INNER JOIN + tblItems ON tU.ContentID = tblItems.ContentID + WHERE tU.BaseFlag = 0; + + UPDATE tblContents Set DeleteStatus = 1, DTS = GETDATE(), UserID = 'CPVolian2026' + FROM + #tmpUpdate tU INNER JOIN + tblContents ON tU.ContentID = tblContents.ContentID + WHERE tU.BaseFlag = 0; + + DELETE FROM + tblEntries + FROM + tblEntries + INNER JOIN + #tmpUpdate tU ON tU.ContentID = tblEntries.ContentID + WHERE tU.BaseFlag in (0,2); + + INSERT INTO [dbo].[tblEntries] + ([ContentID] + ,[DocID] + ,[DTS] + ,[UserID] + ,[DeleteStatus]) + SELECT + DISTINCT tU.ContentID, + 766, -- docid 766 "Cover Page 1" + GETDATE(), + 'CPVolian2026', + 0 + FROM + #tmpUpdate tU + INNER JOIN + @Cont CNT ON tU.ContentID = CNT.ContentID + WHERE tU.BaseFlag = 2; + + drop table #tmpUpdate; + +IF (@@Error = 0) SELECT '[Barakah Cover Page Consolidation] Succeeded' +ELSE SELECT '[Barakah Cover Page Consolidation] Error' +go + + + + + + + + + + diff --git a/PROMS/SQL/ClientSpecific/BNPP_CoverPageConsolidation_Test.sql b/PROMS/SQL/ClientSpecific/BNPP_CoverPageConsolidation_Test.sql new file mode 100644 index 00000000..411179db --- /dev/null +++ b/PROMS/SQL/ClientSpecific/BNPP_CoverPageConsolidation_Test.sql @@ -0,0 +1,263 @@ + +-- ============================================= +-- Author: Matthew Schill +-- Create date: 03/20/2026 +-- Description: Script to consolidate Cover Pages for Barakah +-- by Converting multi-unit procedures with Cover Pages +-- to use 1 Library Document Cover Page +-- ============================================= + + ----@isTest = 0 will change data + ----@isTest = 1 for internal testing (no data will be changed) +DECLARE @isTest bit = 1; + + ----Per Cover Page, pull how many cover pages + ----Each Cover Page's procedure has + ----and how many of those are library documents + select Contents.ContentID + , Contenttext = Contents.Text + , Items.ItemID + , tblDocuments.DocID + , ParentContentID + , ParentItemID + , LibTitle = ISNULL(LibTitle,'') + , numLibCP + , numCP + ,BaseFlag = 0 + INTO #tmpUpdate + from Contents + inner join Entries on Contents.ContentID = Entries.ContentID + inner join tblDocuments on tblDocuments.DocID = Entries.DocID + inner join Items on Items.ContentID = Contents.ContentID + outer apply + (select ParentContentID=ContentID, ParentItemID = PItm.ItemID + FROM dbo.vefn_ParentItems(Items.ItemID) PItm + where PItm.ItemID <> Items.ItemID + ) parent + outer apply + (select numLibCP = Count(*) + FROM dbo.vefn_ChildItems(ParentItemID) PItm + INNER JOIN Contents on Contents.ContentID = PItm.ContentID + INNER JOIN Entries on Contents.ContentID = Entries.ContentID + INNER JOIN tblDocuments on tblDocuments.DocID = Entries.DocID + where PItm.ItemID <> ParentItemID + AND Contents.text like 'Cover Page%' and ISNULL(tblDocuments.LibTitle,'') <> '' + ) childWithLibTitle + outer apply + (select numCP = Count(*) + FROM dbo.vefn_ChildItems(ParentItemID) PItm + INNER JOIN Contents on Contents.ContentID = PItm.ContentID + where PItm.ItemID <> ParentItemID + AND Contents.text like 'Cover Page%' + ) child + where Contents.text like 'Cover Page%' + order by ParentContentID asc, CASE WHEN ISNULL(LibTitle,'') <> '' THEN 1 ELSE 2 END asc, Contents.Text asc + +--BaseFlag +-- 0 = a Cover Page that will be deleted +-- 1 = is base item (Cover Page will get renamed and applicability set to all) +-- 2 = would be base item but not linked to Lib document (Cover Page will get renamed and applicability set to all + will need linked to library doc) + +---- If only 1 Library Doc CP for the CP's procedure and this is it, then mark this CP as the one we will keep + UPDATE #tmpUpdate SET BaseFlag = 1 where LibTitle <> '' and numLibCP = 1 + +---- If multiple Library Document CPs, pick the first one as the one we will keep (BaseFlag = 1) +---- If no Library Document CPs, pick the first one as the one we will repurpose (BaseFlag = 2) + UPDATE #tmpUpdate SET BaseFlag = CASE WHEN tU.LibTitle <> '' THEN 1 ELSE 2 END FROM #tmpUpdate tU + where BaseFlag = 0 AND tU.ContentID IN + ( + Select ContentID FROM + (SELECT sub.ContentID, + row_number() OVER(PARTITION BY sub.ParentContentID ORDER BY CASE WHEN ISNULL(sub.LibTitle,'') <> '' THEN 1 ELSE 2 END asc, sub.Contenttext asc) as pos + FROM #tmpUpdate sub + ) x + WHERE x.pos = 1 + ) + +----BEGIN TESTS-- + if(@isTest = 1) + BEGIN + select Count(*), 'Should be Zero - not exactly one BaseFlag set to non 0 for each Parent Item' FROM #tmpUpdate TU + OUTER APPLY + (select numBaseFlagSet = SUM(CASE WHEN sub.BaseFlag > 0 THEN 1 ELSE 0 END) + FROM #tmpUpdate sub + where sub.ParentContentID = TU.ParentContentID + ) sub + where numBaseFlagSet <> 1 + + select Count(*), 'Should be Zero - 0 Lib Docs, BaseFlag is 1' FROM #tmpUpdate TU + where numLibCP = 0 and BaseFlag = 1 + + select Count(*), 'Should be Zero - at least 1 Lib Docs, BaseFlag is 2' FROM #tmpUpdate TU + where numLibCP > 0 and BaseFlag = 2 + + select Count(*), 'Should be Zero - 1 Lib Docs, BaseFlag not 1 for that Lib doc' FROM #tmpUpdate TU + where numLibCP = 1 and LibTitle <> '' and BaseFlag <> 1 + + select Count(*), 'Should be Zero - 1 Lib Docs, BaseFlag not 0 for ones without Lib Doc' FROM #tmpUpdate TU + where numLibCP = 1 and LibTitle = '' and BaseFlag <> 0 + + select Count(*), 'Should be Zero - 1 CP, no Lib Docs, BaseFlag not 2' FROM #tmpUpdate TU + where numLibCP = 0 and numCP = 1 and BaseFlag <> 2 + + select Count(*), 'Should be Zero - more than 1 Lib Docs, BaseFlag is 1' FROM #tmpUpdate TU + where numLibCP = 0 and BaseFlag = 1 + + select Count(*), 'Should be Zero - not exactly one BaseFlag set to non 0 for each Parent Item' FROM #tmpUpdate TU + OUTER APPLY + (select numBaseFlagSet = SUM(CASE WHEN sub.BaseFlag > 0 THEN 1 ELSE 0 END) + FROM #tmpUpdate sub + where sub.ParentContentID = TU.ParentContentID + ) sub + where numBaseFlagSet <> 1 + + select Count(*), 'Should be Zero - 0 Lib Docs, BaseFlag is 1' FROM #tmpUpdate TU + where numLibCP = 0 + and BaseFlag = 1 + + --all Parents should have exactly 1 Baseflag=1 or BaseFlage = 2 + select 'Should be No Records where not a BaseFlag 1 or 2' + select NumNotBaseFlag12 = Count(*) + FROM #tmpUpdate TU + Group by ParentContentID + HAVING SUM(CASE WHEN BaseFlag in (1,2) THEN 1 ELSE 0 END) <> 1 + + select 'Should be No Records where with both a BaseFlag 1 and 2' + select NumBothBaseFlag12 = Count(*) + FROM #tmpUpdate TU + Group by ParentContentID + HAVING SUM(BaseFlag) > 2 + + END + --END TESTS-- + +--BaseFlag +-- 0 = a Cover Page that will be deleted +-- 1 = is base item (Cover Page will get renamed and applicability set to all) +-- 2 = would be base item but not linked to Lib document (Cover Page will get renamed and applicability set to all + will need linked to library doc) + +----Update config for Coverpage 1 to remove +----from that config +----cover page 1s + declare @Cont TABLE + ( + ContentID int, + ItemID int, + xConfig xml + ) + insert into @Cont + SELECT tU.ContentID, ItemID, xConfig = CAST(tblContents.config AS xml) FROM + tblContents + INNER JOIN + #tmpUpdate tU ON tU.ContentID = tblContents.ContentID + where tU.BaseFlag > 0 + + if(@isTest = 1) + BEGIN + select WRD='Have Masterslave in xconfig', NumwithMasterSlave = Count(*) FROM @Cont CNT + INNER JOIN + tblContents ON CNT.ContentID = tblContents.ContentID + where CAST(xConfig AS varchar(max)) like '%MasterSlave%' + END + + Update @Cont Set xConfig.modify('delete //MasterSlave') From @Cont; + + if(@isTest = 1) + BEGIN + select WRD='None should have Masterslave Removed in xconfig', NumwithMasterSlave = Count(*) FROM @Cont CNT + INNER JOIN + tblContents ON CNT.ContentID = tblContents.ContentID + where CAST(xConfig AS varchar(max)) like '%MasterSlave%' + + select 'Show Records and how the ids will be re-linked' + + Select tblItems.ItemID, tblItems.ContentID, tblItems.PreviousID, tblContents.Text, + PreviousItemID = tU.ItemID, PreviousContentID = tU.ContentID, PreviousText = tUCont.Text, + RelinkToItemID = IdToSwapTO.ItemID, RelinkToContentID = IdToSwapTO.ContentID, RelinkToText = IdToSwapTOCont.Text + FROM + tblItems + INNER JOIN + tblContents on tblContents.ContentID = tblItems.ContentID + INNER JOIN + #tmpUpdate tU ON tblItems.PreviousID = tU.ItemID AND tU.BaseFlag = 0 + INNER JOIN + tblContents tUCont on tUCont.ContentID = tU.ContentID + LEFT OUTER JOIN #tmpUpdate IdToSwapTO ON IdToSwapTO.ParentContentID = tU.ParentContentID AND IdToSwapTO.BaseFlag IN (1,2) + LEFT OUTER JOIN tblContents IdToSwapTOCont on IdToSwapTOCont.ContentID = IdToSwapTO.ContentID + + END + ELSE + BEGIN + --Update Config for Contents and set Text = 'Cover Page' + Update tblContents SET Text = 'Cover Page', Config = CAST(xConfig AS varchar(max)), + DTS = GETDATE(), UserID = 'CPVolian2026' + FROM + @Cont CNT INNER JOIN + tblContents ON CNT.ContentID = tblContents.ContentID; + + --Update items PreviousIds + UPDATE tblItems Set PreviousID = IdToSwapTO.ItemID + FROM + tblItems + INNER JOIN + #tmpUpdate tU ON tblItems.PreviousID = tU.ItemID AND tU.BaseFlag = 0 + INNER JOIN #tmpUpdate IdToSwapTO ON IdToSwapTO.ParentContentID = tU.ParentContentID AND IdToSwapTO.BaseFlag IN (1,2) + + --delete where BaseFlag = 0 ---Items,Content,Entries, --set DeleteStatus = 1 + --these are ones that will be replaced by a library document + UPDATE tblItems Set DeleteStatus = 1, DTS = GETDATE(), UserID = 'CPVolian2026' + FROM + #tmpUpdate tU INNER JOIN + tblItems ON tU.ContentID = tblItems.ContentID + WHERE tU.BaseFlag = 0; + + UPDATE tblContents Set DeleteStatus = 1, DTS = GETDATE(), UserID = 'CPVolian2026' + FROM + #tmpUpdate tU INNER JOIN + tblContents ON tU.ContentID = tblContents.ContentID + WHERE tU.BaseFlag = 0; + + --delete entries where Baseflag = 2 + --create new entries where Baseflag = 2 + + DELETE FROM + tblEntries + FROM + tblEntries + INNER JOIN + #tmpUpdate tU ON tU.ContentID = tblEntries.ContentID + WHERE tU.BaseFlag in (0,2); + + INSERT INTO [dbo].[tblEntries] + ([ContentID] + ,[DocID] + ,[DTS] + ,[UserID] + ,[DeleteStatus]) + SELECT + DISTINCT tU.ContentID, + 766, -- docid 766 "Cover Page 1" + GETDATE(), + 'CPVolian2026', + 0 + FROM + #tmpUpdate tU + INNER JOIN + @Cont CNT ON tU.ContentID = CNT.ContentID + WHERE tU.BaseFlag = 2; + + END; + + drop table #tmpUpdate; + + + + + + + + + + + +