145 lines
5.9 KiB
Transact-SQL
145 lines
5.9 KiB
Transact-SQL
SET ANSI_NULLS ON;
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
DELETE rs
|
|
FROM dbo.RevisionStatuses rs
|
|
WHERE rs.StatusName IN (N'Ready To Draft', N'Drafting', N'Revising', N'Polishing', N'Complete', N'On Hold')
|
|
AND NOT EXISTS (SELECT 1 FROM dbo.Scenes s WHERE s.RevisionStatusID = rs.RevisionStatusID)
|
|
AND NOT EXISTS (SELECT 1 FROM dbo.Chapters c WHERE c.RevisionStatusID = rs.RevisionStatusID);
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.ChapterWorkflow_Summary
|
|
@ChapterID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
SELECT s.SceneID, s.SceneNumber, s.SceneTitle,
|
|
s.RevisionStatusID,
|
|
rs.StatusName AS RevisionStatusName,
|
|
COALESCE(sw.DraftStatus, rs.StatusName, N'Planned') AS DraftStatus,
|
|
sw.Priority,
|
|
COALESCE(sw.ReadyForDraft, 0) AS ReadyForDraft,
|
|
COALESCE(sw.ReadyForRevision, 0) AS ReadyForRevision,
|
|
COALESCE(sw.ReadyForPolish, 0) AS ReadyForPolish,
|
|
COALESCE(sw.IsBlocked, 0) AS IsBlocked,
|
|
sw.BlockedReason,
|
|
ISNULL(warnings.WarningCount, 0) AS WarningCount,
|
|
ISNULL(checklist.RemainingChecklistCount, 0) AS RemainingChecklistCount,
|
|
ISNULL(notes.UnresolvedNoteCount, 0) AS UnresolvedNoteCount
|
|
FROM dbo.Scenes s
|
|
INNER JOIN dbo.RevisionStatuses rs ON rs.RevisionStatusID = s.RevisionStatusID
|
|
LEFT JOIN dbo.SceneWorkflow sw ON sw.SceneID = s.SceneID
|
|
OUTER APPLY
|
|
(
|
|
SELECT COUNT(*) AS WarningCount
|
|
FROM dbo.ContinuityWarnings cw
|
|
WHERE cw.SceneID = s.SceneID AND cw.IsDismissed = 0
|
|
) warnings
|
|
OUTER APPLY
|
|
(
|
|
SELECT COUNT(*) AS RemainingChecklistCount
|
|
FROM dbo.SceneChecklistItems sci
|
|
WHERE sci.SceneID = s.SceneID AND sci.IsCompleted = 0
|
|
) checklist
|
|
OUTER APPLY
|
|
(
|
|
SELECT COUNT(*) AS UnresolvedNoteCount
|
|
FROM dbo.SceneNotes sn
|
|
WHERE sn.SceneID = s.SceneID AND sn.IsResolved = 0
|
|
) notes
|
|
WHERE s.ChapterID = @ChapterID AND s.IsArchived = 0
|
|
ORDER BY s.SortOrder, s.SceneID;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.WriterDashboard_Scenes
|
|
@ProjectID int = NULL,
|
|
@Queue nvarchar(50)
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
WITH SceneBase AS
|
|
(
|
|
SELECT p.ProjectID, p.ProjectName, b.BookID, b.BookTitle, c.ChapterID, c.ChapterNumber, c.ChapterTitle,
|
|
s.SceneID, s.SceneNumber, s.SceneTitle, s.Summary,
|
|
s.RevisionStatusID,
|
|
rs.StatusName AS RevisionStatusName,
|
|
COALESCE(sw.DraftStatus, rs.StatusName, N'Planned') AS DraftStatus,
|
|
sw.Priority,
|
|
COALESCE(sw.IsBlocked, 0) AS IsBlocked,
|
|
sw.BlockedReason,
|
|
COALESCE(sw.ReadyForDraft, 0) AS ReadyForDraft,
|
|
COALESCE(sw.ReadyForRevision, 0) AS ReadyForRevision,
|
|
COALESCE(sw.ReadyForPolish, 0) AS ReadyForPolish,
|
|
b.SortOrder AS BookSortOrder,
|
|
c.SortOrder AS ChapterSortOrder,
|
|
s.SortOrder AS SceneSortOrder
|
|
FROM dbo.Projects p
|
|
INNER JOIN dbo.Books b ON b.ProjectID = p.ProjectID AND b.IsArchived = 0
|
|
INNER JOIN dbo.Chapters c ON c.BookID = b.BookID AND c.IsArchived = 0
|
|
INNER JOIN dbo.Scenes s ON s.ChapterID = c.ChapterID AND s.IsArchived = 0
|
|
INNER JOIN dbo.RevisionStatuses rs ON rs.RevisionStatusID = s.RevisionStatusID
|
|
LEFT JOIN dbo.SceneWorkflow sw ON sw.SceneID = s.SceneID
|
|
WHERE p.IsArchived = 0 AND (@ProjectID IS NULL OR p.ProjectID = @ProjectID)
|
|
)
|
|
SELECT TOP (40) sb.ProjectID, sb.ProjectName, sb.BookID, sb.BookTitle, sb.ChapterID, sb.ChapterNumber, sb.ChapterTitle,
|
|
sb.SceneID, sb.SceneNumber, sb.SceneTitle, sb.Summary, sb.RevisionStatusID, sb.RevisionStatusName,
|
|
sb.DraftStatus, sb.Priority, sb.IsBlocked, sb.BlockedReason,
|
|
ISNULL(warnings.WarningCount, 0) AS WarningCount,
|
|
ISNULL(checklist.RemainingChecklistCount, 0) AS RemainingChecklistCount,
|
|
ISNULL(notes.UnresolvedNoteCount, 0) AS UnresolvedNoteCount,
|
|
threads.ImportantThreads,
|
|
pinned.PinnedNotes
|
|
FROM SceneBase sb
|
|
OUTER APPLY
|
|
(
|
|
SELECT COUNT(*) AS WarningCount
|
|
FROM dbo.ContinuityWarnings cw
|
|
WHERE cw.SceneID = sb.SceneID AND cw.IsDismissed = 0
|
|
) warnings
|
|
OUTER APPLY
|
|
(
|
|
SELECT COUNT(*) AS RemainingChecklistCount
|
|
FROM dbo.SceneChecklistItems sci
|
|
WHERE sci.SceneID = sb.SceneID AND sci.IsCompleted = 0
|
|
) checklist
|
|
OUTER APPLY
|
|
(
|
|
SELECT COUNT(*) AS UnresolvedNoteCount
|
|
FROM dbo.SceneNotes sn
|
|
INNER JOIN dbo.SceneNoteTypes snt ON snt.SceneNoteTypeID = sn.SceneNoteTypeID
|
|
WHERE sn.SceneID = sb.SceneID AND sn.IsResolved = 0
|
|
AND (@Queue <> N'NeedsAttention' OR snt.TypeName IN (N'TODO', N'Continuity Note'))
|
|
) notes
|
|
OUTER APPLY
|
|
(
|
|
SELECT STRING_AGG(CONVERT(nvarchar(max), pt.ThreadTitle), N', ') AS ImportantThreads
|
|
FROM
|
|
(
|
|
SELECT DISTINCT TOP (5) pt.ThreadTitle, pt.Importance
|
|
FROM dbo.ThreadEvents te
|
|
INNER JOIN dbo.PlotThreads pt ON pt.PlotThreadID = te.PlotThreadID
|
|
WHERE te.SceneID = sb.SceneID
|
|
ORDER BY pt.Importance DESC, pt.ThreadTitle
|
|
) pt
|
|
) threads
|
|
OUTER APPLY
|
|
(
|
|
SELECT STRING_AGG(CONVERT(nvarchar(max), COALESCE(sn.NoteTitle, sn.NoteText)), N' | ') AS PinnedNotes
|
|
FROM dbo.SceneNotes sn
|
|
WHERE sn.SceneID = sb.SceneID AND sn.IsPinned = 1 AND sn.IsResolved = 0
|
|
) pinned
|
|
WHERE
|
|
(@Queue = N'WriteNext' AND sb.RevisionStatusName = N'Outlined')
|
|
OR (@Queue = N'ContinueWriting' AND sb.RevisionStatusName = N'Drafted')
|
|
OR (@Queue = N'NeedsAttention' AND (sb.IsBlocked = 1 OR ISNULL(warnings.WarningCount, 0) > 0 OR ISNULL(notes.UnresolvedNoteCount, 0) > 0))
|
|
OR (@Queue = N'RevisionQueue' AND sb.RevisionStatusName = N'Needs Work')
|
|
OR (@Queue = N'PolishingQueue' AND sb.RevisionStatusName = N'Revised')
|
|
ORDER BY ISNULL(sb.Priority, 0) DESC, sb.BookSortOrder, sb.ChapterSortOrder, sb.SceneSortOrder, sb.SceneID;
|
|
END;
|
|
GO
|