264 lines
8.8 KiB
Transact-SQL
264 lines
8.8 KiB
Transact-SQL
|
|
-- =============================================
|
|
-- 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 <MasterSlave Applicability="1" />
|
|
----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;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|