PlotDirector/PlotLine/Sql/122_Phase20Y_DefaultPlaceholderCommit.sql

262 lines
9.7 KiB
Transact-SQL

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceImportCommit_GetChapterReadiness
@ChapterID int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ActiveSceneCount int;
DECLARE @SceneID int = NULL;
DECLARE @CanCommit bit = 0;
DECLARE @HasUntouchedDefaultPlaceholder bit = 0;
DECLARE @CommitMode nvarchar(80) = N'Blocked';
DECLARE @BlockReason nvarchar(300) = NULL;
SELECT @ActiveSceneCount = COUNT(1)
FROM dbo.Scenes
WHERE ChapterID = @ChapterID
AND IsArchived = 0;
IF @ActiveSceneCount = 0
BEGIN
SELECT
@ActiveSceneCount AS ActiveSceneCount,
CAST(1 AS bit) AS CanCommit,
CAST(0 AS bit) AS HasUntouchedDefaultPlaceholder,
CAST(NULL AS int) AS PlaceholderSceneID,
CAST(N'EmptyChapter' AS nvarchar(80)) AS CommitMode,
CAST(NULL AS nvarchar(300)) AS BlockReason;
RETURN;
END;
IF @ActiveSceneCount > 1
BEGIN
SELECT
@ActiveSceneCount AS ActiveSceneCount,
CAST(0 AS bit) AS CanCommit,
CAST(0 AS bit) AS HasUntouchedDefaultPlaceholder,
CAST(NULL AS int) AS PlaceholderSceneID,
@CommitMode AS CommitMode,
CAST(N'chapter contains existing authored scenes' AS nvarchar(300)) AS BlockReason;
RETURN;
END;
SELECT TOP (1) @SceneID = SceneID
FROM dbo.Scenes
WHERE ChapterID = @ChapterID
AND IsArchived = 0
ORDER BY SceneNumber, SceneID;
IF EXISTS
(
SELECT 1
FROM dbo.Scenes
WHERE SceneID = @SceneID
AND SceneNumber = 1
AND LTRIM(RTRIM(SceneTitle)) IN (N'Scene 1', N'Scene One', N'Untitled Scene', N'Untitled Scene 1')
AND NULLIF(LTRIM(RTRIM(ISNULL(Summary, N''))), N'') IS NULL
AND POVCharacterID IS NULL
AND PrimaryLocationID IS NULL
AND StartDateTime IS NULL
AND EndDateTime IS NULL
AND DurationAmount IS NULL
AND DurationUnitID IS NULL
AND NULLIF(LTRIM(RTRIM(ISNULL(RelativeTimeText, N''))), N'') IS NULL
AND NULLIF(LTRIM(RTRIM(ISNULL(ScenePurposeNotes, N''))), N'') IS NULL
AND NULLIF(LTRIM(RTRIM(ISNULL(SceneOutcomeNotes, N''))), N'') IS NULL
AND ISNULL(FloorPlanID, 0) = 0
AND ISNULL(InitialFloorPlanFloorID, 0) = 0
AND NULLIF(LTRIM(RTRIM(ISNULL(ImportSource, N''))), N'') IS NULL
AND ImportRunID IS NULL
AND SourceStartParagraph IS NULL
AND SourceEndParagraph IS NULL
)
BEGIN
SET @CanCommit = 1;
END
ELSE
BEGIN
SELECT TOP (1) @BlockReason =
CASE
WHEN SceneNumber <> 1 THEN N'chapter contains existing authored scenes'
WHEN LTRIM(RTRIM(SceneTitle)) NOT IN (N'Scene 1', N'Scene One', N'Untitled Scene', N'Untitled Scene 1') THEN N'chapter contains existing authored scenes'
WHEN NULLIF(LTRIM(RTRIM(ISNULL(Summary, N''))), N'') IS NOT NULL THEN N'default scene has summary'
WHEN POVCharacterID IS NOT NULL THEN N'default scene has POV character'
WHEN PrimaryLocationID IS NOT NULL THEN N'default scene has location links'
WHEN StartDateTime IS NOT NULL OR EndDateTime IS NOT NULL OR DurationAmount IS NOT NULL OR DurationUnitID IS NOT NULL OR NULLIF(LTRIM(RTRIM(ISNULL(RelativeTimeText, N''))), N'') IS NOT NULL THEN N'default scene has time data'
WHEN NULLIF(LTRIM(RTRIM(ISNULL(ScenePurposeNotes, N''))), N'') IS NOT NULL THEN N'default scene has purpose notes'
WHEN NULLIF(LTRIM(RTRIM(ISNULL(SceneOutcomeNotes, N''))), N'') IS NOT NULL THEN N'default scene has outcome notes'
WHEN ISNULL(FloorPlanID, 0) <> 0 OR ISNULL(InitialFloorPlanFloorID, 0) <> 0 THEN N'default scene has floor plan links'
WHEN NULLIF(LTRIM(RTRIM(ISNULL(ImportSource, N''))), N'') IS NOT NULL OR ImportRunID IS NOT NULL OR SourceStartParagraph IS NOT NULL OR SourceEndParagraph IS NOT NULL THEN N'default scene has import source tracking'
ELSE N'chapter contains existing authored scenes'
END
FROM dbo.Scenes
WHERE SceneID = @SceneID;
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneNotes WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has notes';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneMetricValues WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has metrics';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.ScenePurposes WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has purpose records';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneOutcomes WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has outcome records';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneCharacters WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has character links';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneAssetLocations WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has asset links';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneFloorPlanOccupancy WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has floor plan occupancy';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneDependencies WHERE IsArchived = 0 AND (SourceSceneID = @SceneID OR TargetSceneID = @SceneID))
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has dependency links';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneChecklistItems WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has checklist items';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneAttachments WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has attachments';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.ThreadEvents WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has thread events';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.RelationshipEvents WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has relationship events';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.AssetEvents WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has asset events';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.AssetCustodyEvents WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has custody events';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.CharacterKnowledge WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has knowledge records';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.CharacterAttributeEvents WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has character attribute events';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.ContinuityWarnings WHERE SceneID = @SceneID AND IsDismissed = 0)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has continuity warnings';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneCharacterSuggestions WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has character suggestions';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneAssetSuggestions WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has asset suggestions';
END;
IF @CanCommit = 1 AND EXISTS (SELECT 1 FROM dbo.SceneLocationSuggestions WHERE SceneID = @SceneID)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has location suggestions';
END;
IF @CanCommit = 1 AND EXISTS
(
SELECT 1
FROM dbo.SceneWorkflow
WHERE SceneID = @SceneID
AND
(
DraftStatus <> N'Planned'
OR EstimatedWordCount IS NOT NULL
OR ActualWordCount IS NOT NULL
OR DraftedDate IS NOT NULL
OR LastWorkedOn IS NOT NULL
OR ReadyForDraft = 1
OR ReadyForRevision = 1
OR ReadyForPolish = 1
OR IsBlocked = 1
OR NULLIF(LTRIM(RTRIM(ISNULL(BlockedReason, N''))), N'') IS NOT NULL
OR Priority IS NOT NULL
)
)
BEGIN
SET @CanCommit = 0;
SET @BlockReason = N'default scene has workflow data';
END;
IF @CanCommit = 1
BEGIN
SET @HasUntouchedDefaultPlaceholder = 1;
SET @CommitMode = N'ReplaceDefaultPlaceholder';
SET @BlockReason = NULL;
END;
SELECT
@ActiveSceneCount AS ActiveSceneCount,
@CanCommit AS CanCommit,
@HasUntouchedDefaultPlaceholder AS HasUntouchedDefaultPlaceholder,
CASE WHEN @HasUntouchedDefaultPlaceholder = 1 THEN @SceneID ELSE NULL END AS PlaceholderSceneID,
@CommitMode AS CommitMode,
@BlockReason AS BlockReason;
END;
GO