diff --git a/backend/app/main.py b/backend/app/main.py index cd07129..9db0ced 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -380,6 +380,8 @@ async def upload_logo( if current_user.role != "admin": raise HTTPException(status_code=403, detail="Solo administradores pueden cambiar el logo") + print(f"\n📝 SUBIENDO LOGO DE EMPRESA...") + # Subir imagen a MinIO file_extension = file.filename.split(".")[-1] now = datetime.now() @@ -388,24 +390,44 @@ async def upload_logo( s3_key = f"{folder}/{file_name}" s3_client.upload_fileobj(file.file, S3_IMAGE_BUCKET, s3_key, ExtraArgs={"ContentType": file.content_type}) logo_url = f"{S3_ENDPOINT}/{S3_IMAGE_BUCKET}/{s3_key}" + print(f"✅ Logo subido a S3: {logo_url}") - # Guardar en configuración (puedes tener una tabla Config o usar AIConfiguration) + # Guardar en configuración (crear si no existe) config = db.query(models.AIConfiguration).filter(models.AIConfiguration.is_active == True).first() if config: + print(f"🔄 Actualizando logo en configuración existente (ID: {config.id})") config.logo_url = logo_url db.commit() db.refresh(config) - # Si no hay config, solo retorna la url + else: + # Crear configuración básica solo para guardar el logo + print("⚠️ No hay configuración de IA activa, creando una básica para guardar el logo") + new_config = models.AIConfiguration( + provider="openai", + api_key="pending", # Placeholder, se actualizará luego + model_name="gpt-4o", + logo_url=logo_url, + is_active=True + ) + db.add(new_config) + db.commit() + db.refresh(new_config) + print(f"✅ Configuración creada con ID: {new_config.id}") + + print(f"✅ Logo guardado correctamente: {logo_url}\n") return {"logo_url": logo_url} @app.get("/api/config/logo", response_model=dict) def get_logo_url( db: Session = Depends(get_db) ): + print(f"\n🔍 OBTENIENDO LOGO DE EMPRESA...") config = db.query(models.AIConfiguration).filter(models.AIConfiguration.is_active == True).first() if config and getattr(config, "logo_url", None): + print(f"✅ Logo encontrado: {config.logo_url}\n") return {"logo_url": config.logo_url} # Default logo (puedes poner una url por defecto) + print(f"⚠️ No hay logo configurado, retornando default\n") return {"logo_url": f"{S3_ENDPOINT}/{S3_IMAGE_BUCKET}/logo/default_logo.png"} @@ -1548,11 +1570,17 @@ def generate_inspection_pdf(inspection_id: int, db: Session) -> str: # Obtener logo principal de configuración (empresa) config = db.query(models.AIConfiguration).filter(models.AIConfiguration.is_active == True).first() company_logo_url = None - if config and getattr(config, "logo_url", None): - company_logo_url = config.logo_url - print(f"📸 Logo de la empresa: {company_logo_url}") + if config: + print(f"🔍 Configuración de IA encontrada (ID: {config.id})") + if getattr(config, "logo_url", None): + company_logo_url = config.logo_url + print(f"📸 Logo de la empresa: {company_logo_url}") + else: + print("⚠️ Configuración de IA existe pero no tiene logo_url configurado") + print(" 💡 Ve a Settings y sube el logo de la empresa") else: - print("ℹ️ No hay logo de empresa configurado") + print("⚠️ No hay configuración de IA activa en la base de datos") + print(" 💡 Ve a Settings, configura la IA y sube el logo de la empresa") # Obtener logo del checklist (NO usar fallback) checklist_logo_url = None @@ -1783,16 +1811,14 @@ def generate_inspection_pdf(inspection_id: int, db: Session) -> str: metric_value = ParagraphStyle('metric_value', parent=info_style, fontSize=16, fontName='Helvetica-Bold', alignment=TA_CENTER) metrics_data = [ - [Paragraph("Puntuación", metric_label), Paragraph("Porcentaje", metric_label), Paragraph("Estado", metric_label), Paragraph("Ítems Críticos", metric_label)], + [Paragraph("Puntuación", metric_label), Paragraph("Ítems Críticos", metric_label)], [ Paragraph(f"{inspection.score} / {inspection.max_score}", metric_value), - Paragraph(f"{percentage:.1f}%", metric_value), - Paragraph(f"{score_label}", ParagraphStyle('status_value', parent=metric_value, textColor=score_color)), Paragraph(f"{inspection.flagged_items_count}", metric_value) ] ] - score_table = Table(metrics_data, colWidths=[45*mm, 45*mm, 45*mm, 45*mm]) + score_table = Table(metrics_data, colWidths=[90*mm, 90*mm]) score_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#f8fafc')), ('BACKGROUND', (0, 1), (-1, -1), colors.white), diff --git a/backend/app/schemas.py b/backend/app/schemas.py index 6b1bdce..dbd2279 100644 --- a/backend/app/schemas.py +++ b/backend/app/schemas.py @@ -271,6 +271,7 @@ class AIConfigurationBase(BaseModel): provider: str # openai, gemini api_key: str model_name: Optional[str] = None + logo_url: Optional[str] = None class AIConfigurationCreate(AIConfigurationBase): pass @@ -279,6 +280,7 @@ class AIConfigurationUpdate(BaseModel): provider: Optional[str] = None api_key: Optional[str] = None model_name: Optional[str] = None + logo_url: Optional[str] = None is_active: Optional[bool] = None class AIConfiguration(AIConfigurationBase):