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):