generate pdf file for devis

This commit is contained in:
2026-03-13 01:11:18 +01:00
parent b7046b125c
commit 2838a87413
3 changed files with 25 additions and 1 deletions

View File

@@ -1,7 +1,7 @@
import json
from datetime import date, timedelta
from fastapi import APIRouter, Depends, Request, Form, HTTPException
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.responses import HTMLResponse, RedirectResponse, Response
from fastapi.templating import Jinja2Templates
from sqlalchemy.orm import Session
@@ -10,6 +10,7 @@ from models import Devis, LigneDevis, Client, StatutDevis
from numerotation import generer_numero_devis
from auth import get_current_user
from template_helper import render
from config import settings
router = APIRouter(prefix="/devis", tags=["devis"], dependencies=[Depends(get_current_user)])
templates = Jinja2Templates(directory="templates")
@@ -150,6 +151,27 @@ def changer_statut_devis(
db.commit()
return RedirectResponse(f"/devis/{devis_id}", status_code=303)
@router.get("/{devis_id}/pdf")
def telecharger_devis__pdf(devis_id: int, db: Session = Depends(get_db)):
from weasyprint import HTML
devis = db.query(Devis).get(devis_id)
if not devis:
raise HTTPException(status_code=404)
html_content = templates.get_template("pdf/devis.html").render({
"devis": devis,
"settings": settings,
})
pdf_bytes = HTML(string=html_content, base_url=".").write_pdf()
filename = f"devis-{devis.numero}.pdf"
return Response(
content=pdf_bytes,
media_type="application/pdf",
headers={"Content-Disposition": f'attachment; filename="{filename}"'}
)
@router.post("/{devis_id}/convertir")
def convertir_en_facture(devis_id: int, db: Session = Depends(get_db)):