Files
truenas-stacks/home/doris-schoolhouse/app/templates/assignment_upload.html
Fizzlepoof 7a67a2febc fix(schoolhouse): handle Paperless upload failures gracefully
- catch Paperless handoff exceptions during assignment intake
- preserve local submission records when archive handoff fails
- redirect HTML uploads back to the form with readable status details
- show archive-pending messaging instead of a raw 500 page
2026-06-06 02:37:20 +00:00

46 lines
2.8 KiB
HTML

{% extends 'base.html' %}
{% block content %}
{% if request.query_params.get('submitted') %}
{% set paperless_status = request.query_params.get('paperless_status', 'uploaded-local') %}
<section class="card form-card notice-card {{ 'success-card' if paperless_status == 'paperless-queued' else '' }} evidence-board">
<div class="case-legend"><span class="section-label">Submission packet</span><span class="pill">{{ 'Filed' if paperless_status == 'paperless-queued' else 'Saved locally' }}</span></div>
<h2>{{ 'Submission Created' if paperless_status == 'paperless-queued' else 'Submission Saved, Archive Pending' }}</h2>
<p>Submission {{ request.query_params.get('submitted') }} was created successfully.</p>
<p class="muted">Artifact: {{ request.query_params.get('artifact_kind', 'document') }} · Files: {{ request.query_params.get('file_count', '1') }}</p>
<p class="muted">Paperless status: {{ paperless_status }}</p>
{% if paperless_status != 'paperless-queued' %}
<p class="muted">Schoolhouse kept the submission locally, but the archive handoff failed this time.</p>
{% if request.query_params.get('paperless_error') %}
<p class="muted">Error: {{ request.query_params.get('paperless_error') }}</p>
{% endif %}
{% endif %}
</section>
{% endif %}
<section class="card form-card evidence-board">
<div class="case-legend chain-of-custody"><span class="section-label">Submission packet</span><span class="pill">chain-of-custody</span></div>
<h2>Assignment Upload</h2>
<p class="muted">Package coursework like a proper intake docket so the archive, Paperless, and later review all stay in sync.</p>
<form class="stack intake-docket" method="post" enctype="multipart/form-data" action="/api/assignments/intake" id="assignment-upload-form">
<label>Class
<select name="class_id" id="class-select" required>
<option value="">Loading classes…</option>
</select>
<input type="hidden" name="class_name" id="class-name-input">
</label>
<label>Assignment
<select name="assignment_name" id="assignment-select" required>
<option value="">Pick a class first</option>
</select>
</label>
<label>Version <input name="version" value="v1"></label>
<p class="muted">Programming-class uploads are bundled into one zip artifact for archival. The source files stay grouped together as one submission.</p>
<label>Notes <textarea name="notes" rows="4" placeholder="Anything useful about this turn-in."></textarea></label>
<label>Files
<input type="file" name="files" multiple required>
<small class="muted">Pick one or many files for the same assignment version. Schoolhouse will build one source bundle.</small>
</label>
<button type="submit">Build submission bundle</button>
</form>
</section>
{% endblock %}