Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,8 @@
<Build Include="Stored Procedures\Hierarchy\HierarchyEditDeleteNodeReferenceDetails.sql" />
<Build Include="Stored Procedures\Hierarchy\HierarchyEditDeleteResourceReferenceDetails.sql" />
<Build Include="Stored Procedures\Hierarchy\HierarchyNewResourceReferenceForReferedCatalogue.sql" />
<Build Include="Stored Procedures\Hierarchy\HierarchyEditCreateNodeReference.sql" />
<Build Include="Stored Procedures\Hierarchy\HierarchyEditCreateResourceReference.sql" />
</ItemGroup>
<ItemGroup>
<None Include="Scripts\Pre-Deploy\Scripts\Card5766_AuthorTableChanges.PreDeployment.sql" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
-------------------------------------------------------------------------------
-- Author Swapnamol Abraham
-- Created 18-09-2024
-- Purpose Create node resource reference within a Hierarchy Edit.
--
-- Modification History
--
-- 18-09-2024 SA Initial Revision.
-------------------------------------------------------------------------------
CREATE PROCEDURE [hierarchy].[HierarchyEditCreateNodeReference]
(
@HierarchyEditDetailId int,
@MoveToHierarchyEditDetailId int,
@UserId int,
@UserTimezoneOffset int = NULL
)

AS

BEGIN

BEGIN TRY

BEGIN TRAN

DECLARE @AmendDate datetimeoffset(7) = ISNULL(TODATETIMEOFFSET(DATEADD(mi, @UserTimezoneOffset, GETUTCDATE()), @UserTimezoneOffset), SYSDATETIMEOFFSET())

DECLARE @HierarchyEditId int
DECLARE @ResourceId int, @ParentNodeId INT
SELECT @HierarchyEditId = HierarchyEditId, @ResourceId = ResourceId,@ParentNodeId = ParentNodeId FROM [hierarchy].[HierarchyEditDetail] WHERE Id = @HierarchyEditDetailId


-- creating a folder reference into a referenced folder should affect all instances of the referenced folder.

DECLARE @CurrentNodeId INT,
@ReferenceHierarchyEditDetailId INT

SELECT @CurrentNodeId = hed.NodeId
FROM [hierarchy].[HierarchyEditDetail] hed
WHERE hed.Id = @MoveToHierarchyEditDetailId
AND HierarchyEditId = @HierarchyEditId

-- Declare the cursor

DECLARE NodeCursor CURSOR FOR
SELECT Id AS ReferenceHierarchyEditDetailId
FROM hierarchy.HierarchyEditDetail
WHERE NodeId = @CurrentNodeId
AND HierarchyEditId = @HierarchyEditId
AND deleted = 0
-- Open the cursor
OPEN NodeCursor;

-- Fetch the first row from the cursor
FETCH NEXT FROM NodeCursor
INTO @ReferenceHierarchyEditDetailId;

-- Loop until no more rows are returned
WHILE @@FETCH_STATUS = 0
BEGIN
--Execute the script to add new folder references in all referenced instances
EXEC [hierarchy].[HierarchyEditReferenceNode] @HierarchyEditDetailId, @ReferenceHierarchyEditDetailId, @UserId,@UserTimezoneOffset

-- Fetch the next row from the cursor
FETCH NEXT FROM NodeCursor
INTO @ReferenceHierarchyEditDetailId;
END

-- Close and deallocate the cursor
CLOSE NodeCursor;
--DEALLOCATE NodeCursor;

COMMIT

END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();

IF @@TRANCOUNT > 0
ROLLBACK TRAN;

RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);

END CATCH
END
Go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
-------------------------------------------------------------------------------
-- Author Swapnamol Abraham
-- Created 18-09-2024
-- Purpose Create a resource reference within a Hierarchy Edit.
--
-- Modification History
--
-- 18-09-2024 SA Initial Revision.
-------------------------------------------------------------------------------
CREATE PROCEDURE [hierarchy].[HierarchyEditCreateResourceReference]
(
@HierarchyEditDetailId int,
@MoveToHierarchyEditDetailId int,
@UserId int,
@UserTimezoneOffset int = NULL
)

AS

BEGIN

BEGIN TRY

BEGIN TRAN

DECLARE @AmendDate datetimeoffset(7) = ISNULL(TODATETIMEOFFSET(DATEADD(mi, @UserTimezoneOffset, GETUTCDATE()), @UserTimezoneOffset), SYSDATETIMEOFFSET())

DECLARE @HierarchyEditId int
DECLARE @ResourceId int, @ParentNodeId INT
SELECT @HierarchyEditId = HierarchyEditId, @ResourceId = ResourceId,@ParentNodeId = ParentNodeId FROM [hierarchy].[HierarchyEditDetail] WHERE Id = @HierarchyEditDetailId


-- creating a resource reference into a referenced folder should affect all instances of the referenced folder

DECLARE @CurrentNodeId INT,
@ReferenceHierarchyEditDetailId INT

SELECT @CurrentNodeId = hed.NodeId
FROM [hierarchy].[HierarchyEditDetail] hed
WHERE hed.Id = @MoveToHierarchyEditDetailId
AND HierarchyEditId = @HierarchyEditId

-- Declare the cursor

DECLARE NodeCursor CURSOR FOR
SELECT Id AS ReferenceHierarchyEditDetailId
FROM hierarchy.HierarchyEditDetail
WHERE NodeId = @CurrentNodeId
AND HierarchyEditId = @HierarchyEditId
AND deleted = 0
-- Open the cursor
OPEN NodeCursor;

-- Fetch the first row from the cursor
FETCH NEXT FROM NodeCursor
INTO @ReferenceHierarchyEditDetailId;

-- Loop until no more rows are returned
WHILE @@FETCH_STATUS = 0
BEGIN
-- Execute the update statement for the current row
EXEC [hierarchy].[HierarchyEditReferenceResource] @HierarchyEditDetailId, @ReferenceHierarchyEditDetailId, @UserId,@UserTimezoneOffset

-- Fetch the next row from the cursor
FETCH NEXT FROM NodeCursor
INTO @ReferenceHierarchyEditDetailId;
END

-- Close and deallocate the cursor
CLOSE NodeCursor;
DEALLOCATE NodeCursor;

COMMIT

END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();

IF @@TRANCOUNT > 0
ROLLBACK TRAN;

RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);

END CATCH
END
GO
Original file line number Diff line number Diff line change
Expand Up @@ -132,20 +132,24 @@ BEGIN

-- UPDATE NodeLink 'deleted' for remove reference

UPDATE
nl
SET
Deleted = 1,
AmendUserId = @AmendUserId,
AmendDate = @AmendDate
FROM
hierarchy.HierarchyEditDetail hed
INNER JOIN
hierarchy.NodeLink nl ON hed.NodeLinkId = nl.Id
WHERE
HierarchyEditId = @HierarchyEditId
AND hed.HierarchyEditDetailTypeId = 4 -- Node Link
AND hed.Deleted = 1
UPDATE nl
SET nl.Deleted = 1
FROM hierarchy.NodeLink nl
INNER JOIN (
SELECT hed.NodeLinkId
FROM hierarchy.HierarchyEditDetail hed
WHERE hed.HierarchyEditId = @HierarchyEditId
AND hed.Deleted = 1
--Only include rows where no corresponding non-deleted row exists
AND NOT EXISTS (
SELECT 1
FROM hierarchy.HierarchyEditDetail hed2
WHERE hed2.HierarchyEditId = @HierarchyEditId
AND hed2.Deleted = 0
AND hed2.NodeLinkId = hed.NodeLinkId
)
) AS filtered
ON nl.Id = filtered.NodeLinkId

-- For moved nodes, delete the original NodeLinks, providing they have not been used (by a reference to the original position).
UPDATE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
-- 29-04-2024 DB Initial Revision.
-- 13-05-2024 DB Set the parent node path id for the new reference node.
-- 08-07-2024 DB Populate the PrimaryCatalogueNodeId.
-- 24-09-2024 SA Correct the display order of the referenced folder.
-------------------------------------------------------------------------------
CREATE PROCEDURE [hierarchy].[HierarchyEditReferenceNode]
(
Expand Down Expand Up @@ -49,24 +50,18 @@ BEGIN
WHERE Id = @ReferenceToHierarchyEditDetailId

-- Increment display order of nodes in destination.
UPDATE
hed_moveTo_children
SET
HierarchyEditDetailOperationId = CASE WHEN hed_moveTo_children.HierarchyEditDetailOperationId IS NULL THEN 2 ELSE hed_moveTo_children.HierarchyEditDetailOperationId END,
DisplayOrder = hed_moveTo_children.DisplayOrder + 1,
UPDATE
[hierarchy].[HierarchyEditDetail]
SET
HierarchyEditDetailOperationId = CASE WHEN HierarchyEditDetailOperationId IS NULL THEN 2 ELSE HierarchyEditDetailOperationId END,
DisplayOrder = DisplayOrder + 1,
AmendDate = @AmendDate
FROM
[hierarchy].[HierarchyEditDetail] hed_moveTo
INNER JOIN
[hierarchy].[HierarchyEditDetail] hed_moveTo_children ON hed_moveTo_children.HierarchyEditId = hed_moveTo.HierarchyEditId
AND hed_moveTo_children.ParentNodeId = hed_moveTo.NodeId
AND ISNULL(hed_moveTo_children.HierarchyEditDetailOperationId, 0) != 3 -- ignore deletes.
WHERE
hed_moveTo.Id = @ReferenceToHierarchyEditDetailId
AND hed_moveTo.ResourceId IS NULL
AND hed_moveTo.Deleted = 0
AND hed_moveTo_children.Deleted = 0

where
HierarchyEditId = @HierarchyEditId AND
ParentNodeId = @NewParentNodeId
and ParentNodePathId = @NewParentNodePathId
AND ISNULL(HierarchyEditDetailOperationId, 0) != 3
AND Deleted = 0

-- Create the new Hierarchy Edit Detail records for the reference nodes and resources.
DECLARE @OriginalNodePath NVARCHAR(256)
Expand Down Expand Up @@ -98,7 +93,7 @@ BEGIN
ResourceVersionId,
NULL AS ResourceReferenceId, -- Populated further down
NodeResourceId,
DisplayOrder,
1,
NULL AS InitialNodePath,
@DestinationParentNodePath + SUBSTRING(ISNULL(NewNodePath, InitialNodePath), LEN(@OriginalParentNodePath)+1, LEN(ISNULL(NewNodePath, InitialNodePath))) AS NewNodePath, -- Not using REPLACE incase number of digits in nodeIds are not consistant
0 AS Deleted,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ public async Task ReferenceNode(MoveNodeViewModel moveNodeViewModel, int userId)
var param3 = new SqlParameter("@p2", SqlDbType.Int) { Value = userId };
var param2 = new SqlParameter("@p3", SqlDbType.Int) { Value = this.TimezoneOffsetManager.UserTimezoneOffset ?? (object)DBNull.Value };

string sql = "hierarchy.HierarchyEditReferenceNode @p0, @p1, @p2, @p3";
string sql = "hierarchy.HierarchyEditCreateNodeReference @p0, @p1, @p2, @p3";
var sqlParams = new List<SqlParameter>() { param0, param1, param2, param3 };

await this.DbContext.Database.ExecuteSqlRawAsync(sql, sqlParams);
Expand Down Expand Up @@ -336,7 +336,7 @@ public async Task HierarchyEditReferenceResource(HierarchyEditMoveResourceViewMo
var param2 = new SqlParameter("@p2", SqlDbType.Int) { Value = userId };
var param3 = new SqlParameter("@p3", SqlDbType.Int) { Value = this.TimezoneOffsetManager.UserTimezoneOffset ?? (object)DBNull.Value };

string sql = "hierarchy.HierarchyEditReferenceResource @p0, @p1, @p2, @p3";
string sql = "hierarchy.HierarchyEditCreateResourceReference @p0, @p1, @p2, @p3";
var sqlParams = new List<SqlParameter>() { param0, param1, param2, param3 };

await this.DbContext.Database.ExecuteSqlRawAsync(sql, sqlParams);
Expand Down
Loading