feat: badges imprimé (✅ copies) dans galeries admin+public; fix: timestamp_to_date dans print.html
This commit is contained in:
@@ -111,18 +111,44 @@ class PrinterService:
|
||||
return await self.get_queue("pending")
|
||||
|
||||
async def get_pending_by_photo_id(self) -> dict[str, list]:
|
||||
"""Retourne un dict {photo_id: [entries]} pour toutes les demandes actives.
|
||||
"""Retourne {photo_id: [entries actives]}. Conservé pour compatibilité."""
|
||||
stats = await self.get_print_stats_by_photo_id()
|
||||
return {pid: info["requests"] for pid, info in stats.items() if info["requests"]}
|
||||
|
||||
Utilise le champ photo_id (UUID photobooth-app) s'il est renseigné,
|
||||
sinon fall-back sur le stem du filename.
|
||||
async def get_print_stats_by_photo_id(self) -> dict[str, dict]:
|
||||
"""Stats complètes d'impression par photo_id.
|
||||
|
||||
Retourne {photo_id: {requests, pending, printing, done, copies_done}}.
|
||||
'requests' contient uniquement les entrées pending/printing (pour la lightbox).
|
||||
'done' et 'copies_done' comptent les impressions réussies.
|
||||
"""
|
||||
rows = await self.get_queue("pending")
|
||||
rows += await self.get_queue("printing")
|
||||
async with self._db.execute(
|
||||
"SELECT id, photo_id, filename, status, copies, requested_at, thumb_url "
|
||||
"FROM print_queue WHERE status IN ('pending','printing','done') "
|
||||
"ORDER BY requested_at"
|
||||
) as cur:
|
||||
rows = await cur.fetchall()
|
||||
|
||||
result: dict[str, list] = {}
|
||||
result: dict[str, dict] = {}
|
||||
for r in rows:
|
||||
key = r.get("photo_id") or Path(r["filename"]).stem
|
||||
result.setdefault(key, []).append(r)
|
||||
key = r["photo_id"] or Path(r["filename"]).stem
|
||||
if key not in result:
|
||||
result[key] = {
|
||||
"requests": [],
|
||||
"pending": 0,
|
||||
"printing": 0,
|
||||
"done": 0,
|
||||
"copies_done": 0,
|
||||
}
|
||||
if r["status"] in ("pending", "printing"):
|
||||
result[key]["requests"].append(dict(r))
|
||||
if r["status"] == "pending":
|
||||
result[key]["pending"] += 1
|
||||
elif r["status"] == "printing":
|
||||
result[key]["printing"] += 1
|
||||
elif r["status"] == "done":
|
||||
result[key]["done"] += 1
|
||||
result[key]["copies_done"] += r["copies"] or 1
|
||||
return result
|
||||
|
||||
async def cancel_by_photo_id(self, photo_id: str) -> int:
|
||||
|
||||
Reference in New Issue
Block a user