Release v1.7.1 - Mejoras en SLA, Auditoria y Multi-tenant

 Características Nuevas:
- Cálculo automático de SLA en tickets basado en categoría
- Auto-asignación de tickets según configuración de categoría
- Auditoría completa en operaciones de categorías (create/update/delete)
- Visualización de estado SLA en listado y detalle de tickets

🐛 Correcciones:
- Fix actualización de status en tenants (manejo correcto de enum TenantStatus)
- Corrección de campos contact_phone y contact_email en tenants
- Corrección de modelo TicketResponse (agregar campos SLA y usar ConfigDict)
- Eliminación de archivo changelog duplicado

🔧 Mejoras de Infraestructura:
- Agregar montaje de backend en workers y beat para imports correctos
- Mejorar path handling en sla_tasks.py para Docker
- Scripts de testing integrados (test_frontend_integration, test_manual, test_tenant_update)
- Agregar database.py en workers/app/core para sesiones async

📝 Frontend:
- Actualizar UI de tenants con nuevos campos (email, teléfono, status enum)
- Agregar columna de SLA en listado de tickets
- Mostrar información detallada de SLA en vista de ticket individual
- Indicadores visuales de estado de SLA (vencido, cumplido, en plazo)
This commit is contained in:
2026-02-17 10:26:56 -07:00
parent 75726d915f
commit cc1e964c3a
13 changed files with 730 additions and 152 deletions

View File

@@ -16,6 +16,7 @@ class TenantBase(BaseModel):
slug: str
domain: Optional[str] = None
contact_email: Optional[EmailStr] = None
contact_phone: Optional[str] = None
class TenantCreate(TenantBase):
pass
@@ -25,6 +26,7 @@ class TenantUpdate(BaseModel):
slug: Optional[str] = None
domain: Optional[str] = None
contact_email: Optional[EmailStr] = None
contact_phone: Optional[str] = None
status: Optional[TenantStatus] = None
class TenantResponse(TenantBase):
@@ -86,12 +88,16 @@ async def update_tenant(
update_data = tenant_in.model_dump(exclude_unset=True)
if "status" in update_data:
tenant.is_active = update_data.pop("status") == TenantStatus.active
# Convertir string a enum TenantStatus
status_value = update_data.pop("status")
if isinstance(status_value, str):
tenant.status = TenantStatus(status_value)
else:
tenant.status = status_value
for field, value in update_data.items():
setattr(tenant, field, value)
db.add(tenant)
await db.commit()
await db.refresh(tenant)
return tenant