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 %}