From f3644790beaff97cec1fe5823681256a202cb484 Mon Sep 17 00:00:00 2001 From: Kawa Date: Wed, 15 Apr 2026 14:49:12 +0200 Subject: [PATCH] feat(11-04): add GET /clients/{id} route and client_detail.html template - Add client_detail route in pages.py with 404 on unknown client_id - Build grouped dict {client.name: [printers]} for printer_list partial reuse - Pass clients + driver_data for edit modal compatibility - Create client_detail.html extending base.html, includes printer_list partial --- imptune/api/pages.py | 38 ++++++++++++++++++++++++++++ imptune/templates/client_detail.html | 11 ++++++++ 2 files changed, 49 insertions(+) create mode 100644 imptune/templates/client_detail.html diff --git a/imptune/api/pages.py b/imptune/api/pages.py index 204406d..e069db4 100644 --- a/imptune/api/pages.py +++ b/imptune/api/pages.py @@ -156,6 +156,44 @@ def clients_page(request: Request): ) +@router.get("/clients/{client_id}", response_class=HTMLResponse) +def client_detail(request: Request, client_id: int): + from imptune.db.models import Client, Driver, Printer + + client = Client.get_or_none(Client.id == client_id) + if client is None: + return HTMLResponse( + content="

404 Not Found

Client not found.

", + status_code=404, + ) + + query = ( + Printer.select(Printer, Client) + .join(Client, JOIN.LEFT_OUTER) + .where(Printer.client == client_id) + .order_by(Printer.name) + ) + grouped = {client.name: list(query)} + + clients = list(Client.select().order_by(Client.name)) + all_drivers = list(Driver.select().order_by(Driver.uploaded_at.desc())) + driver_data = [ + {"driver": d, "names": json.loads(d.driver_desc) if d.driver_desc else []} + for d in all_drivers + ] + + return templates.TemplateResponse( + request=request, + name="client_detail.html", + context={ + "client": client, + "grouped": grouped, + "clients": clients, + "driver_data": driver_data, + }, + ) + + @router.get("/packages", response_class=HTMLResponse) def packages_page(request: Request): from imptune.db.models import Client, Driver, Printer diff --git a/imptune/templates/client_detail.html b/imptune/templates/client_detail.html new file mode 100644 index 0000000..361b0f5 --- /dev/null +++ b/imptune/templates/client_detail.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block content %} +

{{ client.name }}

+

← All Clients

+ +
+

Printers

+ {% include "partials/printer_list.html" %} +
+{% endblock %}