102 lines
6.0 KiB
Plaintext
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>
|