-MOdificar Formato de PDF para informe

se saco el esatdo y porcentaje
This commit is contained in:
2025-12-03 01:21:11 -03:00
parent 50909e4499
commit 58bf1bfc69
2 changed files with 38 additions and 10 deletions

View File

@@ -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):
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(" No hay logo de empresa configurado")
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 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"<b>{inspection.score}</b> / {inspection.max_score}", metric_value),
Paragraph(f"<b>{percentage:.1f}%</b>", metric_value),
Paragraph(f"<b>{score_label}</b>", ParagraphStyle('status_value', parent=metric_value, textColor=score_color)),
Paragraph(f"<b>{inspection.flagged_items_count}</b>", 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),

View File

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