From 58672c52d712ac5f1418ccb48505dd7adc292d41 Mon Sep 17 00:00:00 2001 From: gitea Date: Thu, 27 Nov 2025 17:15:47 -0300 Subject: [PATCH] =?UTF-8?q?Backend=20actualizada=20a=201.0.77=20?= =?UTF-8?q?=F0=9F=96=BC=EF=B8=8F=20Logo=20en=20la=20portada=20del=20PDF:?= =?UTF-8?q?=20Se=20carga=20el=20logo=20desde=20checklist.logo=5Furl=20(con?= =?UTF-8?q?figurado=20en=20la=20administraci=C3=B3n)=20Ubicaci=C3=B3n:=20A?= =?UTF-8?q?rriba=20del=20t=C3=ADtulo,=20centrado=20Tama=C3=B1o:=2040mm=20x?= =?UTF-8?q?=2040mm=20(tama=C3=B1o=20est=C3=A1ndar=20para=20logos=20corpora?= =?UTF-8?q?tivos)=20Manejo=20de=20errores:=20Si=20el=20logo=20no=20carga,?= =?UTF-8?q?=20contin=C3=BAa=20generando=20el=20PDF=20sin=20bloquearse=20Si?= =?UTF-8?q?=20no=20hay=20logo=20configurado,=20simplemente=20no=20se=20mue?= =?UTF-8?q?stra=20(no=20rompe=20el=20PDF)=20=F0=9F=93=84=20Estructura=20de?= =?UTF-8?q?=20la=20portada:=20Logo=20del=20checklist=20(si=20existe)=20T?= =?UTF-8?q?=C3=ADtulo=20"=F0=9F=93=8B=20INFORME=20DE=20INSPECCI=C3=93N=20V?= =?UTF-8?q?EHICULAR"=20N=C3=BAmero=20de=20inspecci=C3=B3n=20Cuadros=20de?= =?UTF-8?q?=20informaci=C3=B3n=20del=20veh=C3=ADculo=20e=20inspecci=C3=B3n?= =?UTF-8?q?=20Resumen=20de=20evaluaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/main.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/backend/app/main.py b/backend/app/main.py index 5ccf7d1..7d25d55 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -204,7 +204,7 @@ def send_completed_inspection_to_n8n(inspection, db): # No lanzamos excepción para no interrumpir el flujo normal -BACKEND_VERSION = "1.0.76" +BACKEND_VERSION = "1.0.77" app = FastAPI(title="Checklist Inteligente API", version=BACKEND_VERSION) # S3/MinIO configuration @@ -1374,7 +1374,23 @@ def generate_inspection_pdf(inspection_id: int, db: Session) -> str: checklist = db.query(models.Checklist).filter(models.Checklist.id == inspection.checklist_id).first() # ===== PORTADA ===== - elements.append(Spacer(1, 15*mm)) + elements.append(Spacer(1, 10*mm)) + + # Logo del checklist (si existe) + if checklist.logo_url: + try: + logo_resp = requests.get(checklist.logo_url, timeout=10) + if logo_resp.status_code == 200: + logo_bytes = BytesIO(logo_resp.content) + logo_img = RLImage(logo_bytes, width=40*mm, height=40*mm) + logo_table = Table([[logo_img]], colWidths=[40*mm]) + logo_table.setStyle(TableStyle([ + ('ALIGN', (0, 0), (-1, -1), 'CENTER'), + ])) + elements.append(logo_table) + elements.append(Spacer(1, 5*mm)) + except Exception as e: + print(f"⚠️ Error cargando logo del checklist: {e}") # Título con diseño moderno elements.append(Paragraph("📋 INFORME DE INSPECCIÓN VEHICULAR", title_style))