Phase 10H.1: Fix Word Companion Scene Links Empty Selection Saving
This commit is contained in:
parent
500c70cb58
commit
825a66f66a
@ -0,0 +1,109 @@
|
|||||||
|
SET ANSI_NULLS ON;
|
||||||
|
GO
|
||||||
|
SET QUOTED_IDENTIFIER ON;
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE OR ALTER PROCEDURE dbo.WordCompanion_SceneLinks_Update
|
||||||
|
@SceneID int,
|
||||||
|
@UserID int,
|
||||||
|
@CharacterIds nvarchar(max) = NULL,
|
||||||
|
@AssetIds nvarchar(max) = NULL,
|
||||||
|
@LocationIds nvarchar(max) = NULL
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
|
||||||
|
DECLARE @ProjectID int;
|
||||||
|
SELECT @ProjectID = b.ProjectID
|
||||||
|
FROM dbo.Scenes s
|
||||||
|
INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID
|
||||||
|
INNER JOIN dbo.Books b ON b.BookID = c.BookID
|
||||||
|
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID
|
||||||
|
INNER JOIN dbo.ProjectUserAccess pua ON pua.ProjectID = p.ProjectID
|
||||||
|
WHERE s.SceneID = @SceneID
|
||||||
|
AND s.IsArchived = 0
|
||||||
|
AND c.IsArchived = 0
|
||||||
|
AND b.IsArchived = 0
|
||||||
|
AND p.IsArchived = 0
|
||||||
|
AND pua.UserID = @UserID
|
||||||
|
AND pua.IsActive = 1;
|
||||||
|
|
||||||
|
IF @ProjectID IS NULL
|
||||||
|
RETURN;
|
||||||
|
|
||||||
|
DECLARE @Characters TABLE (ID int PRIMARY KEY);
|
||||||
|
DECLARE @Assets TABLE (ID int PRIMARY KEY);
|
||||||
|
DECLARE @Locations TABLE (ID int PRIMARY KEY);
|
||||||
|
|
||||||
|
INSERT @Characters (ID)
|
||||||
|
SELECT DISTINCT TRY_CONVERT(int, LTRIM(RTRIM(value)))
|
||||||
|
FROM STRING_SPLIT(ISNULL(@CharacterIds, N''), N',')
|
||||||
|
WHERE NULLIF(LTRIM(RTRIM(value)), N'') IS NOT NULL
|
||||||
|
AND TRY_CONVERT(int, LTRIM(RTRIM(value))) IS NOT NULL;
|
||||||
|
|
||||||
|
INSERT @Assets (ID)
|
||||||
|
SELECT DISTINCT TRY_CONVERT(int, LTRIM(RTRIM(value)))
|
||||||
|
FROM STRING_SPLIT(ISNULL(@AssetIds, N''), N',')
|
||||||
|
WHERE NULLIF(LTRIM(RTRIM(value)), N'') IS NOT NULL
|
||||||
|
AND TRY_CONVERT(int, LTRIM(RTRIM(value))) IS NOT NULL;
|
||||||
|
|
||||||
|
INSERT @Locations (ID)
|
||||||
|
SELECT DISTINCT TRY_CONVERT(int, LTRIM(RTRIM(value)))
|
||||||
|
FROM STRING_SPLIT(ISNULL(@LocationIds, N''), N',')
|
||||||
|
WHERE NULLIF(LTRIM(RTRIM(value)), N'') IS NOT NULL
|
||||||
|
AND TRY_CONVERT(int, LTRIM(RTRIM(value))) IS NOT NULL;
|
||||||
|
|
||||||
|
IF EXISTS (SELECT 1 FROM @Characters requested WHERE requested.ID <= 0 OR NOT EXISTS (SELECT 1 FROM dbo.Characters c WHERE c.CharacterID = requested.ID AND c.ProjectID = @ProjectID AND c.IsArchived = 0))
|
||||||
|
RETURN;
|
||||||
|
IF EXISTS (SELECT 1 FROM @Assets requested WHERE requested.ID <= 0 OR NOT EXISTS (SELECT 1 FROM dbo.StoryAssets sa WHERE sa.StoryAssetID = requested.ID AND sa.ProjectID = @ProjectID AND sa.IsArchived = 0))
|
||||||
|
RETURN;
|
||||||
|
IF EXISTS (SELECT 1 FROM @Locations requested WHERE requested.ID <= 0 OR NOT EXISTS (SELECT 1 FROM dbo.Locations l WHERE l.LocationID = requested.ID AND l.ProjectID = @ProjectID AND l.IsArchived = 0))
|
||||||
|
RETURN;
|
||||||
|
|
||||||
|
DELETE sc
|
||||||
|
FROM dbo.SceneCharacters sc
|
||||||
|
WHERE sc.SceneID = @SceneID
|
||||||
|
AND NOT EXISTS (SELECT 1 FROM @Characters requested WHERE requested.ID = sc.CharacterID)
|
||||||
|
AND sc.RoleInSceneTypeID IS NULL
|
||||||
|
AND sc.PresenceTypeID IS NULL
|
||||||
|
AND sc.LocationID IS NULL
|
||||||
|
AND sc.EntryLocationID IS NULL
|
||||||
|
AND sc.ExitLocationID IS NULL
|
||||||
|
AND sc.AppearanceNotes IS NULL
|
||||||
|
AND sc.OutfitDescription IS NULL
|
||||||
|
AND sc.PhysicalCondition IS NULL
|
||||||
|
AND sc.EmotionalState IS NULL
|
||||||
|
AND sc.KnowledgeNotes IS NULL;
|
||||||
|
|
||||||
|
INSERT dbo.SceneCharacters (SceneID, CharacterID)
|
||||||
|
SELECT @SceneID, requested.ID
|
||||||
|
FROM @Characters requested
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM dbo.SceneCharacters sc WHERE sc.SceneID = @SceneID AND sc.CharacterID = requested.ID);
|
||||||
|
|
||||||
|
DELETE wcsa
|
||||||
|
FROM dbo.WordCompanionSceneAssets wcsa
|
||||||
|
WHERE wcsa.SceneID = @SceneID
|
||||||
|
AND NOT EXISTS (SELECT 1 FROM @Assets requested WHERE requested.ID = wcsa.StoryAssetID);
|
||||||
|
|
||||||
|
INSERT dbo.WordCompanionSceneAssets (SceneID, StoryAssetID)
|
||||||
|
SELECT @SceneID, requested.ID
|
||||||
|
FROM @Assets requested
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM dbo.WordCompanionSceneAssets wcsa WHERE wcsa.SceneID = @SceneID AND wcsa.StoryAssetID = requested.ID);
|
||||||
|
|
||||||
|
DELETE wcsl
|
||||||
|
FROM dbo.WordCompanionSceneLocations wcsl
|
||||||
|
WHERE wcsl.SceneID = @SceneID
|
||||||
|
AND NOT EXISTS (SELECT 1 FROM @Locations requested WHERE requested.ID = wcsl.LocationID);
|
||||||
|
|
||||||
|
INSERT dbo.WordCompanionSceneLocations (SceneID, LocationID)
|
||||||
|
SELECT @SceneID, requested.ID
|
||||||
|
FROM @Locations requested
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM dbo.WordCompanionSceneLocations wcsl WHERE wcsl.SceneID = @SceneID AND wcsl.LocationID = requested.ID);
|
||||||
|
|
||||||
|
SELECT @SceneID AS SceneId,
|
||||||
|
(SELECT COUNT(*) FROM @Characters) AS CharactersUpdated,
|
||||||
|
(SELECT COUNT(*) FROM @Assets) AS AssetsUpdated,
|
||||||
|
(SELECT COUNT(*) FROM @Locations) AS LocationsUpdated,
|
||||||
|
N'Scene links updated.' AS Message;
|
||||||
|
END;
|
||||||
|
GO
|
||||||
@ -810,8 +810,10 @@
|
|||||||
});
|
});
|
||||||
updateCurrentSceneLinkState();
|
updateCurrentSceneLinkState();
|
||||||
setSceneLinksStatus("Scene links saved successfully.");
|
setSceneLinksStatus("Scene links saved successfully.");
|
||||||
} catch {
|
setDiagnostics({ lastError: "-" });
|
||||||
|
} catch (error) {
|
||||||
setSceneLinksStatus("Unable to save scene links.");
|
setSceneLinksStatus("Unable to save scene links.");
|
||||||
|
setDiagnostics({ lastError: errorText(error) });
|
||||||
} finally {
|
} finally {
|
||||||
if (saveSceneLinksButton) {
|
if (saveSceneLinksButton) {
|
||||||
saveSceneLinksButton.disabled = !resolvedSceneId;
|
saveSceneLinksButton.disabled = !resolvedSceneId;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user