feat(dokumente,identity): DOC-003 Versionierung + QR-Code-Etiketten
Dokument-Versionierung: vorgaenger_id verkettet Versionen (Migration 0027),
POST /dokumente/{id}/ersetzen legt neue Version an statt zu überschreiben,
alte Fassung bleibt als Historie erhalten. GET /dokumente/{id}/versionen
liefert die Kette (neueste zuerst), respektiert DOC-005-Zugriffsrechte.
Liste zeigt nur die jeweils aktuelle Version. Löschen der aktuellen Version
gibt automatisch den Vorgänger als neue "aktuelle" frei. Frontend:
"Ersetzen"-Button + aufklappbare Versionshistorie im DokumentePanel.
QR-Code-Etiketten: bisher nur Code128-Barcode möglich. generiere_qr_label_pdf
(reportlab-eigenes QR-Widget, keine neue Abhängigkeit) als Alternative,
?format=qr|code128 an /objekte/{id}/label.pdf und /objektpositionen/{id}/
label.pdf. AktePage bekommt "Etikett (Barcode)"/"Etikett (QR)"-Buttons
(vorher gab es dafür noch gar keinen UI-Zugang im Web-Frontend).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -309,6 +309,13 @@ async def test_objekt_label_pdf(client, db_session, objekttyp_factory, standort_
|
||||
assert response.headers["content-type"] == "application/pdf"
|
||||
assert response.content.startswith(b"%PDF")
|
||||
|
||||
qr_response = await client.get(
|
||||
f"/api/v1/objekte/{objekt_id}/label.pdf?format=qr", headers=auth_header(token)
|
||||
)
|
||||
assert qr_response.status_code == 200
|
||||
assert qr_response.headers["content-type"] == "application/pdf"
|
||||
assert qr_response.content.startswith(b"%PDF")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_objektposition_label_pdf_ohne_code_ist_404(
|
||||
|
||||
Reference in New Issue
Block a user