generate pdf file for devis
This commit is contained in:
@@ -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)):
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<h1>Devis {{ devis.numero }}</h1>
|
||||
<div class="btn-group">
|
||||
<a href="/devis/" class="btn">← Retour</a>
|
||||
<a href="/devis/{{ devis.id }}/pdf" class="btn btn-primary">⬇ Télécharger PDF</a>
|
||||
{% if devis.statut.value == 'brouillon' %}
|
||||
<a href="/devis/{{ devis.id }}/modifier" class="btn">Modifier</a>
|
||||
{% endif %}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
<td><span class="badge badge-{{ d.statut.value }}">{{ d.statut.value }}</span></td>
|
||||
<td>
|
||||
<a href="/devis/{{ d.id }}" class="btn btn-sm">Voir</a>
|
||||
<a href="/devis/{{ d.id }}/pdf" class="btn btn-sm btn-primary">PDF</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
Reference in New Issue
Block a user