2026-06-12 20:43:19 +01:00

102 lines
6.0 KiB
Plaintext

@model ChapterWorkflowViewModel
@{
ViewData["Title"] = $"Chapter Workflow - {Model.Chapter.ChapterTitle}";
var blockedCount = Model.Scenes.Count(x => x.IsBlocked);
var writeNextCount = Model.Scenes.Count(x => x.RevisionStatusName == "Outlined");
var continueWritingCount = Model.Scenes.Count(x => x.RevisionStatusName == "Drafted");
var revisionCount = Model.Scenes.Count(x => x.RevisionStatusName == "Needs Work");
var polishCount = Model.Scenes.Count(x => x.RevisionStatusName == "Revised");
}
<nav class="breadcrumb-trail" aria-label="Breadcrumb">
<a asp-controller="Projects" asp-action="Index">Projects</a>
<a asp-controller="Projects" asp-action="Details" asp-route-id="@Model.Project.ProjectID">@Model.Project.ProjectName</a>
<a asp-controller="Books" asp-action="Details" asp-route-id="@Model.Book.BookID">@Model.Book.BookTitle</a>
<a asp-controller="Chapters" asp-action="Details" asp-route-id="@Model.Chapter.ChapterID">Chapter @Model.Chapter.ChapterNumber</a>
<span>Workflow</span>
</nav>
<div class="page-heading">
<div>
<p class="eyebrow">Chapter workflow</p>
<h1>Chapter @Model.Chapter.ChapterNumber: @Model.Chapter.ChapterTitle <help-icon key="workspace.chapterWorkflow" /></h1>
<p class="lead-text">Chapter intent, readiness, blockers, notes, and checklist progress.</p>
</div>
<div class="button-row">
<a class="btn btn-outline-primary" asp-controller="Timeline" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID" asp-route-bookId="@Model.Book.BookID">Open timeline</a>
<a class="btn btn-outline-primary" asp-controller="Exports" asp-action="ChapterBrief" asp-route-id="@Model.Chapter.ChapterID">Export brief</a>
<a class="btn btn-outline-secondary" asp-controller="Exports" asp-action="ChapterBrief" asp-route-id="@Model.Chapter.ChapterID" asp-route-format="markdown">Markdown</a>
<a class="btn btn-outline-secondary" asp-controller="Warnings" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID" asp-route-bookId="@Model.Book.BookID">Warnings</a>
</div>
</div>
<section class="story-bible-section">
<div class="story-bible-grid story-bible-grid-compact">
<article class="story-bible-card"><h3>Write next</h3><strong class="writer-kpi">@writeNextCount</strong></article>
<article class="story-bible-card"><h3>Continue writing</h3><strong class="writer-kpi">@continueWritingCount</strong></article>
<article class="story-bible-card"><h3>Revision</h3><strong class="writer-kpi">@revisionCount</strong></article>
<article class="story-bible-card"><h3>Polish</h3><strong class="writer-kpi">@polishCount</strong></article>
<article class="story-bible-card"><h3>Blocked</h3><strong class="writer-kpi">@blockedCount</strong></article>
</div>
</section>
<section class="story-bible-section">
<div class="story-bible-section-heading">
<div>
<p class="eyebrow">Intent</p>
<h2>Chapter Goals <help-icon key="workspace.chapterGoals" /></h2>
</div>
</div>
<form asp-action="SaveChapterGoal" method="post" class="story-bible-card chapter-goal-form">
<input type="hidden" name="ChapterGoalID" value="@Model.Goal.ChapterGoalID" />
<input type="hidden" name="ChapterID" value="@Model.Chapter.ChapterID" />
<label class="form-label">Goal summary</label>
<textarea class="form-control" name="GoalSummary" rows="3">@Model.Goal.GoalSummary</textarea>
<label class="form-label">Emotional goal</label>
<input class="form-control" name="EmotionalGoal" value="@Model.Goal.EmotionalGoal" />
<label class="form-label">Reader takeaway</label>
<textarea class="form-control" name="ReaderTakeaway" rows="2">@Model.Goal.ReaderTakeaway</textarea>
<label class="form-label">Must include</label>
<textarea class="form-control" name="MustInclude" rows="3">@Model.Goal.MustInclude</textarea>
<label class="form-label">Risks or concerns</label>
<textarea class="form-control" name="RisksOrConcerns" rows="3">@Model.Goal.RisksOrConcerns</textarea>
<button class="btn btn-primary mt-2" type="submit">Save chapter goals</button>
</form>
</section>
<section class="story-bible-section">
<div class="story-bible-section-heading">
<div>
<p class="eyebrow">Scenes</p>
<h2>Workflow Summary <help-icon key="workspace.workflowSummary" /></h2>
</div>
</div>
<div class="writer-queue-list">
@foreach (var scene in Model.Scenes)
{
<article class="writer-queue-card">
<div class="writer-queue-title">
<h3>Scene @scene.SceneNumber: @scene.SceneTitle</h3>
<span class="status-pill">@scene.RevisionStatusName</span>
</div>
<div class="story-bible-meta">
@if (scene.Priority.HasValue) { <span>Priority @scene.Priority</span> }
<span>@scene.WarningCount warnings</span>
<span>@scene.RemainingChecklistCount checklist remaining</span>
<span>@scene.UnresolvedNoteCount open notes</span>
@if (scene.IsBlocked) { <span>Blocked</span> }
</div>
@if (!string.IsNullOrWhiteSpace(scene.BlockedReason))
{
<p class="muted">@scene.BlockedReason</p>
}
<div class="story-bible-actions">
<a asp-controller="Scenes" asp-action="Edit" asp-route-id="@scene.SceneID">Open scene</a>
<a asp-controller="Timeline" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID" asp-route-bookId="@Model.Book.BookID" asp-route-selectedSceneId="@scene.SceneID">Timeline</a>
<a asp-controller="Warnings" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID" asp-route-bookId="@Model.Book.BookID" asp-route-sceneId="@scene.SceneID">Warnings</a>
</div>
</article>
}
</div>
</section>