-MOdificar Formato de PDF para informe
se saco el esatdo y porcentaje
This commit is contained in:
@@ -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"<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),
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user