From 91910ad97daab39715c52b5e3109f5ba496b2fa3 Mon Sep 17 00:00:00 2001 From: Kawa Date: Mon, 13 Apr 2026 08:58:13 +0200 Subject: [PATCH] feat(07-01): wire dashboard data and add /packages listing page - Dashboard queries 5 most recent Printer records and 5 most recent driver-assigned ones - New /packages route lists printers with drivers, with intunewin/ninja download links - packages.html template extends base.html with Pico grid table - Dashboard printer/package items now link to detail pages - Quick action buttons wired to real routes (removed aria-disabled) --- imptune/api/pages.py | 34 +++++++++++++++++++++++++++-- imptune/templates/dashboard.html | 10 ++++----- imptune/templates/packages.html | 37 ++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 imptune/templates/packages.html diff --git a/imptune/api/pages.py b/imptune/api/pages.py index aa673f4..07764b8 100644 --- a/imptune/api/pages.py +++ b/imptune/api/pages.py @@ -15,12 +15,23 @@ templates = Jinja2Templates(directory=str(Path(__file__).parent.parent / "templa @router.get("/", response_class=HTMLResponse) def dashboard(request: Request): + from imptune.db.models import Printer + + recent_printers = list( + Printer.select().order_by(Printer.created_at.desc()).limit(5) + ) + recent_packages = list( + Printer.select() + .where(Printer.driver.is_null(False)) + .order_by(Printer.created_at.desc()) + .limit(5) + ) return templates.TemplateResponse( request=request, name="dashboard.html", context={ - "recent_printers": [], - "recent_packages": [], + "recent_printers": recent_printers, + "recent_packages": recent_packages, }, ) @@ -126,3 +137,22 @@ def clients_page(request: Request): name="clients.html", context={"clients": clients}, ) + + +@router.get("/packages", response_class=HTMLResponse) +def packages_page(request: Request): + from imptune.db.models import Client, Driver, Printer + + printers = list( + Printer.select(Printer, Client, Driver) + .join(Client, JOIN.LEFT_OUTER) + .switch(Printer) + .join(Driver, JOIN.LEFT_OUTER) + .where(Printer.driver.is_null(False)) + .order_by(Printer.name) + ) + return templates.TemplateResponse( + request=request, + name="packages.html", + context={"printers": printers}, + ) diff --git a/imptune/templates/dashboard.html b/imptune/templates/dashboard.html index 3423602..e67624e 100644 --- a/imptune/templates/dashboard.html +++ b/imptune/templates/dashboard.html @@ -4,9 +4,9 @@

Dashboard

- New Printer - Upload Driver - Export Package + New Printer + Upload Driver + Export Package
@@ -17,7 +17,7 @@ {% if recent_printers %} {% else %} @@ -30,7 +30,7 @@ {% if recent_packages %} {% else %} diff --git a/imptune/templates/packages.html b/imptune/templates/packages.html new file mode 100644 index 0000000..dc9e66c --- /dev/null +++ b/imptune/templates/packages.html @@ -0,0 +1,37 @@ +{% extends "base.html" %} + +{% block content %} +

Packages

+

Printers with drivers assigned — ready for deployment package export.

+ +{% if printers %} +
+ + + + + + + + + + + {% for printer in printers %} + + + + + + + {% endfor %} + +
PrinterClientDriverDownloads
{{ printer.name }}{% if printer.client_id %}{{ printer.client.name }}{% else %}—{% endif %}{{ printer.driver.original_filename }} + .intunewin +  |  + NinjaRMM ZIP +
+
+{% else %} +

No package-ready printers yet. Assign a driver to a printer to enable package export.

+{% endif %} +{% endblock %}