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
This commit is contained in:
@@ -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="<h1>404 Not Found</h1><p>Client not found.</p>",
|
||||||
|
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)
|
@router.get("/packages", response_class=HTMLResponse)
|
||||||
def packages_page(request: Request):
|
def packages_page(request: Request):
|
||||||
from imptune.db.models import Client, Driver, Printer
|
from imptune.db.models import Client, Driver, Printer
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>{{ client.name }}</h1>
|
||||||
|
<p><a href="/clients">← All Clients</a></p>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Printers</h2>
|
||||||
|
{% include "partials/printer_list.html" %}
|
||||||
|
</section>
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user