From 6f85cd5d1c36341f7ae8b3c62fa3bc20cbd08023 Mon Sep 17 00:00:00 2001 From: Martin Hohenberg Date: Thu, 18 Jun 2026 22:17:55 +0200 Subject: [PATCH] Add priority flag to jobs - Migration 0010: priority BOOLEAN NOT NULL DEFAULT 0 on print_jobs - Priority jobs sort above normal jobs in the list - Checkbox in Add Job modal; warning icon in list; badge on detail page Co-Authored-By: Claude Sonnet 4.6 --- alembic/versions/0010_job_priority.py | 24 ++++++++++++++++++++++++ app/models/print_job.py | 3 ++- app/routers/ui.py | 4 +++- app/templates/job_detail.html | 1 + app/templates/jobs.html | 11 +++++++++++ 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 alembic/versions/0010_job_priority.py diff --git a/alembic/versions/0010_job_priority.py b/alembic/versions/0010_job_priority.py new file mode 100644 index 0000000..61bc2ea --- /dev/null +++ b/alembic/versions/0010_job_priority.py @@ -0,0 +1,24 @@ +"""add priority flag to print_jobs + +Revision ID: 0010 +Revises: 0009 +Create Date: 2026-06-18 + +""" +from typing import Sequence, Union + +import sqlalchemy as sa +from alembic import op + +revision: str = "0010" +down_revision: Union[str, None] = "0009" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.add_column("print_jobs", sa.Column("priority", sa.Boolean(), nullable=False, server_default="0")) + + +def downgrade() -> None: + op.drop_column("print_jobs", "priority") diff --git a/app/models/print_job.py b/app/models/print_job.py index cb284c9..e3c1e0f 100644 --- a/app/models/print_job.py +++ b/app/models/print_job.py @@ -3,7 +3,7 @@ import uuid as _uuid from datetime import datetime from decimal import Decimal -from sqlalchemy import DateTime, Enum, ForeignKey, Integer, Numeric, String, Text, func +from sqlalchemy import Boolean, DateTime, Enum, ForeignKey, Integer, Numeric, String, Text, func from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import Base @@ -29,6 +29,7 @@ class PrintJob(Base): file_name: Mapped[str | None] = mapped_column(String(255)) job_material: Mapped[str | None] = mapped_column(String(50)) job_color: Mapped[str | None] = mapped_column(String(100)) + priority: Mapped[bool] = mapped_column(Boolean, default=False) status: Mapped[JobStatus] = mapped_column(Enum(JobStatus), default=JobStatus.queued) queue_position: Mapped[int | None] = mapped_column(Integer) started_at: Mapped[datetime | None] = mapped_column(DateTime) diff --git a/app/routers/ui.py b/app/routers/ui.py index 44bfee7..aa1d281 100644 --- a/app/routers/ui.py +++ b/app/routers/ui.py @@ -135,7 +135,7 @@ def jobs_page(request: Request, q: str = "", db: Session = Depends(get_db)): return templates.TemplateResponse("jobs.html", { "request": request, "active": "jobs", - "jobs": query.order_by(PrintJob.created_at.desc()).all(), + "jobs": query.order_by(PrintJob.priority.desc(), PrintJob.created_at.desc()).all(), "q": q, "printers": db.query(Printer).order_by(Printer.name).all(), "filaments": db.query(Filament).order_by(Filament.material, Filament.color).all(), @@ -153,6 +153,7 @@ async def create_job( customer: str = Form(""), job_material: str = Form(""), job_color: str = Form(""), + priority: str = Form(""), bracket_id: str = Form(""), amount: int = Form(1), notes: str = Form(""), @@ -193,6 +194,7 @@ async def create_job( customer=customer_str, job_material=job_material or None, job_color=job_color or None, + priority=bool(priority), notes=notes.strip() or None, ) db.add(job) diff --git a/app/templates/job_detail.html b/app/templates/job_detail.html index 595c063..a0c0136 100644 --- a/app/templates/job_detail.html +++ b/app/templates/job_detail.html @@ -10,6 +10,7 @@
{{ job.file_name or job.name }}
{% set s = job.status.value %} + {% if job.priority %}Priority{% endif %} {% if s == 'printing' %}printing {% elif s == 'done' %}done {% elif s == 'failed' %}failed diff --git a/app/templates/jobs.html b/app/templates/jobs.html index ceb0bdc..b0ab80e 100644 --- a/app/templates/jobs.html +++ b/app/templates/jobs.html @@ -30,6 +30,7 @@ + @@ -42,6 +43,9 @@ {% for j in jobs %} + @@ -157,6 +161,13 @@ +
+ + +
+
UUID Customer File
+ {% if j.priority %}{% endif %} + {{ j.job_uuid[:8] if j.job_uuid else '—' }}