# Sistema de Notificaciones de Comentarios

## Descripción General

Sistema que notifica a usuarios cuando hay comentarios nuevos en sus tickets para agilizar la comunicación entre clientes y el equipo técnico.

## Características Implementadas

### 1. **Tracking de Comentarios No Leídos**

Se agregaron dos campos a la tabla `comments`:
- `read_by_requester` - Indica si el solicitante (cliente) ha leído el comentario
- `read_by_assigned` - Indica si el técnico/ingeniero/supervisor asignado ha leído el comentario

### 2. **Marcado Automático de Lectura**

Cuando un usuario abre un ticket:
- Se marcan automáticamente como leídos todos los comentarios nuevos
- Solo se marcan los comentarios que el usuario no escribió
- El estado de lectura es independiente para cada tipo de usuario

### 3. **Notificaciones en el Dashboard**

#### Alerta Principal
- **Clientes**: Ven una alerta amarilla si hay respuestas del equipo sin leer
- **Técnicos/Ingenieros/Supervisores**: Ven alerta si hay comentarios de clientes sin leer
- La alerta muestra el número total de tickets con comentarios pendientes

#### Badges en Tickets
- Los tickets con comentarios no leídos muestran un badge rojo con icono de chat
- El badge indica el número de comentarios pendientes por leer
- Aparece en:
  - Lista de "Tickets Recientes"
  - Sección "Mis Tickets Asignados"
  - Lista general de tickets (`tickets/index`)

### 4. **Lógica de Notificaciones**

#### Para Clientes (Solicitantes)
```
- Ve notificaciones cuando técnicos/ingenieros/supervisores comentan
- Los comentarios se marcan como leídos cuando el cliente abre el ticket
- Solo ve notificaciones en tickets que él creó
```

#### Para Técnicos/Ingenieros/Supervisores
```
- Ven notificaciones cuando clientes responden en tickets asignados a ellos
- Los comentarios se marcan como leídos cuando abren el ticket
- Solo ven notificaciones en tickets asignados directamente
```

#### Para Administradores
```
- No reciben notificaciones (tienen acceso a todo)
- Pueden ver todos los comentarios sin restricciones
```

## Archivos Modificados

### Base de Datos
- **Migración**: `2025_10_29_202008_add_read_status_to_comments_table.php`
  - Campos: `read_by_requester`, `read_by_assigned`

### Modelos
- **Comment.php**: Agregados campos fillable y casts
- **Ticket.php**: Nuevos métodos
  - `getUnreadCommentsForRequester()` - Cuenta comentarios no leídos para cliente
  - `getUnreadCommentsForAssigned()` - Cuenta comentarios no leídos para técnico
  - `markCommentsAsReadFor($userId)` - Marca comentarios como leídos

### Controladores
- **TicketController.php**
  - `show()`: Marca comentarios como leídos al ver ticket
  - `index()`: Agrega contador de no leídos a cada ticket
  
- **DashboardController.php**
  - Agrega variable `$ticketsConRespuestas`
  - Agrega propiedad `unreadCount` a tickets en colecciones

### Vistas
- **dashboard.blade.php**
  - Alerta amarilla con total de tickets con comentarios
  - Badges rojos en lista de tickets recientes
  - Badges rojos en "Mis Tickets Asignados"
  
- **tickets/index.blade.php**
  - Badges rojos en columna de ID de ticket

## Uso del Sistema

### Escenario 1: Cliente Recibe Respuesta
1. Técnico comenta en ticket del cliente
2. Cliente ve en dashboard:
   - ⚠️ "Tienes X ticket(s) con respuestas del equipo sin leer"
   - Badge rojo 🔴 en el ticket específico
3. Cliente hace clic en el ticket
4. Sistema marca automáticamente los comentarios como leídos
5. Notificaciones desaparecen

### Escenario 2: Técnico Recibe Comentario
1. Cliente responde en ticket asignado a técnico
2. Técnico ve en dashboard:
   - ⚠️ "Tienes X ticket(s) con comentarios del cliente sin leer"
   - Badge rojo 🔴 en el ticket específico
3. Técnico hace clic en el ticket
4. Sistema marca automáticamente los comentarios como leídos
5. Notificaciones desaparecen

## Elementos Visuales

### Badge de Comentarios No Leídos
```html
<span class="badge bg-danger">
    <i class="bi bi-chat-fill"></i> 3
</span>
```

### Alerta de Dashboard
```html
<div class="alert alert-warning">
    <i class="bi bi-chat-dots-fill"></i>
    ¡Tienes X ticket(s) con respuestas sin leer!
</div>
```

## Ventajas del Sistema

✅ **Comunicación Ágil**: Los usuarios saben inmediatamente cuando hay respuestas
✅ **No Intrusivo**: Las notificaciones se muestran en el dashboard, no interrumpen el flujo
✅ **Automático**: No requiere acciones manuales, todo se gestiona automáticamente
✅ **Bidireccional**: Funciona para clientes y para el equipo técnico
✅ **Visual**: Badges rojos llamativos facilitan identificar tickets con actividad

## Posibles Mejoras Futuras

- 📧 Notificaciones por email
- 🔔 Notificaciones push del navegador
- 📱 Integración con aplicaciones móviles
- 📊 Estadísticas de tiempo de respuesta
- 🔄 Notificaciones en tiempo real con WebSockets

## Seeder de Prueba

Para probar el sistema con datos de ejemplo:

```bash
php artisan db:seed --class=TestCommentsSeeder
```

Este seeder crea comentarios de ida y vuelta entre técnicos y clientes en varios tickets.
