forked from seb_vallee/BillManager
generayion du XML a partir d'un template
This commit is contained in:
@@ -10,8 +10,8 @@ from models import Facture, LigneFacture, Client, StatutFacture
|
||||
from numerotation import generer_numero_facture
|
||||
from config import settings
|
||||
from auth import get_current_user
|
||||
from template_helper import render
|
||||
from generate_facturx_basic import Address, Party, Invoice, InvoiceLine, build_facturx
|
||||
from template_helper import render, render_xml
|
||||
from generate_facturx_jinja2 import Address, Party, Invoice, InvoiceLine, generate_facturx_xml
|
||||
|
||||
router = APIRouter(prefix="/factures", tags=["factures"], dependencies=[Depends(get_current_user)])
|
||||
templates = Jinja2Templates(directory="templates")
|
||||
@@ -156,9 +156,29 @@ def changer_statut_facture(
|
||||
db.commit()
|
||||
return RedirectResponse(f"/factures/{facture_id}", status_code=303)
|
||||
|
||||
from generate_facturx_jinja2 import Invoice, Party, Address, InvoiceLine, filter_amount, filter_datefmt
|
||||
|
||||
@router.get("/{facture_id}/pdf")
|
||||
def telecharger_pdf(facture_id: int, db: Session = Depends(get_db)):
|
||||
@router.get("/{facture_id}/facturx")
|
||||
def telecharger_facturx(request: Request, facture_id: int, db: Session = Depends(get_db)):
|
||||
facture = get_invoice_data(facture_id, db) # votre appel BDD
|
||||
|
||||
# facture = db.query(Facture).get(facture_id)
|
||||
if not facture:
|
||||
raise HTTPException(status_code=404)
|
||||
|
||||
xml_bytes = generate_facturx_xml(facture)
|
||||
|
||||
filename=f"factur-x-{facture_id}.xml"
|
||||
|
||||
return Response(
|
||||
content= xml_bytes,
|
||||
media_type="application/xml",
|
||||
headers={"Content-Disposition": f'attachment; filename="{filename}"'}
|
||||
)
|
||||
|
||||
|
||||
@router.get("/{facture_id}/pdf", response_class=HTMLResponse)
|
||||
def telecharger_pdf(request: Request, facture_id: int, db: Session = Depends(get_db)):
|
||||
from weasyprint import HTML
|
||||
facture = db.query(Facture).get(facture_id)
|
||||
if not facture:
|
||||
@@ -173,10 +193,6 @@ def telecharger_pdf(facture_id: int, db: Session = Depends(get_db)):
|
||||
|
||||
filename = f"facture-{facture.numero}.pdf"
|
||||
|
||||
tree = build_facturx(generate_xml (facture_id, db))
|
||||
output_file = "factur-x.xml"
|
||||
tree.write(output_file, xml_declaration=True, encoding="UTF-8", pretty_print=True)
|
||||
|
||||
return Response(
|
||||
content=pdf_bytes,
|
||||
media_type="application/pdf",
|
||||
@@ -194,7 +210,7 @@ def apercu_pdf(request: Request, facture_id: int, db: Session = Depends(get_db))
|
||||
"settings": settings,
|
||||
})
|
||||
|
||||
def generate_xml(facture_id: int, db: Session):
|
||||
def get_invoice_data(facture_id: int, db: Session):
|
||||
facture = db.query(Facture).get(facture_id)
|
||||
invoice = Invoice(
|
||||
number=facture.numero,
|
||||
@@ -228,11 +244,8 @@ def generate_xml(facture_id: int, db: Session):
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
|
||||
payment_means_code="30", # 30 = virement bancaire
|
||||
iban=settings.asso_iban,
|
||||
bic=settings.asso_bic,
|
||||
payment_reference=facture.devis_origine.numero,
|
||||
)
|
||||
|
||||
@@ -243,6 +256,7 @@ def generate_xml(facture_id: int, db: Session):
|
||||
quantity=l.quantite,
|
||||
unit_code="C62",
|
||||
unit_price=l.prix_unitaire_ht,
|
||||
vat_category="E",
|
||||
vat_rate=0.0,
|
||||
))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user