Eliminar turno de empleado
Elimina de forma definitiva un turno de empleado ya creado en el calendario de la ubicación, usando el evento `calendar_events.kind='staff_shift'` y el permiso `staff-shifts:manage`.
En este artículo
Este flujo sirve para responsables de personal que necesitan retirar un turno de asistencia desde el calendario o desde la tabla de correcciones/asistencias, sin modificar la ficha del empleado.
En el demo ES, la guía debe documentarse con Grupo Marea Demo, Marea Gran Via y un turno de Marta Ruiz cuando exista o se cree temporalmente para capturas.
Antes de empezar
- Tener sesión iniciada en Grupo Marea Demo y la ubicación Marea Gran Via.
- Disponer del permiso de ubicación `staff-shifts:manage`; `staff-shifts:view` no permite eliminar.
- Contar con un evento existente de tipo `staff_shift` en `calendar_events` para la ubicación actual.
- Para capturas, descubrir un `STAFF_SHIFT_EVENT_ID` por API o crear un turno temporal, porque `maestro-env.json` no expone un id estable.
Instrucciones
- 1.
Abrir el turno editable
Desde el calendario de Marea Gran Via, abre el turno de asistencia del empleado. También puede abrirse con la ruta `/:orgId/:locationId/calendars/edit/:eventId?kind=staff_shift`.
- 2.
Comprobar empleado y horario
Revisa que el formulario está en modo edición, que el evento pertenece a Marta Ruiz o al empleado esperado, y que el botón `Eliminar` aparece en el footer.
- 3.
Iniciar la eliminación
Pulsa `Eliminar`. La app abre el modal `Eliminar evento` con el aviso `Se eliminará Asistencia definitivamente.` antes de ejecutar la acción.
- 4.
Confirmar el borrado
Confirma de nuevo con `Eliminar`. La app llama a `DELETE /api/app/{orgId}/{locationId}/calendar-events/{eventId}` sin enviar body.
- 5.
Verificar el resultado
Tras el éxito, la app muestra `Evento eliminado correctamente.`, refresca los eventos del calendario y vuelve a la ruta de retorno configurada.
- 6.
Usar la variante desde correcciones
En `/:orgId/:locationId/attendance/corrections?pending_only=false`, una fila `staff_shift` sin corrección pendiente puede usar la misma confirmación de eliminación y refresca correcciones y turnos activos.
Validaciones y límites
- Deben existir `selectedOrgId`, `selectedLocationId` y `editEventId` antes de operar.
- El detalle cargado debe existir y tener `kind === 'staff_shift'`.
- `staff-shifts:manage` es obligatorio en UI y backend; `staff-shifts:view` solo permite ver o bloquea la gestión.
- La ruta operativa documentada es `DELETE /api/app/{orgId}/{locationId}/calendar-events/{eventId}`; no usar `/staff/{staffId}/shifts/{shiftId}` porque no está implementada para este caso.
- El backend verifica que el evento pertenece a la ubicación actual y devuelve `204 No Content` si el borrado termina sin error.
- La eliminación es definitiva sobre `calendar_events`; no archiva el turno y no modifica el registro de `staff`.
- En correcciones, la acción `Eliminar` está deshabilitada cuando la fila tiene `hasPendingCorrection=true`.
- Si la llamada falla, la pantalla muestra `No se pudo eliminar el evento.` y no navega atrás.
Resultado esperado
El turno se retira de `calendar_events`, las listas y rangos de calendario se refrescan, y el empleado permanece intacto en la ficha de personal.