Gestionar turnos y sesiones
Esta guía explica cómo gestionar los turnos operativos y las sesiones utilizando ShiftRepository y SessionRepository. Estas operaciones permiten segmentar los periodos de transacciones y liquidar los lotes con el host.
Abrir un turno
Los turnos son periodos operativos locales que permiten agrupar transacciones (p. ej., por empleado o momento del día). Para iniciar un nuevo turno, utiliza openShift.
Repositorio: ShiftRepository
Función: openShift
Parámetros:
number: Un entero que representa el número de turno.date: El objetoDateque indica cuándo se abre el turno.
Ejemplo:
suspend fun startShift(shiftNumber: Int) {
val result = shiftRepository.openShift(
number = shiftNumber,
date = Date() // Current time
)
when (result) {
is RepositoryResult.Success -> {
val isSuccess = result.data
if (isSuccess) {
println("✅ Shift $shiftNumber opened successfully")
} else {
println("❌ Failed to open shift")
}
}
is RepositoryResult.ConnectionError -> println("❌ Connection Error")
is RepositoryResult.ProtocolError -> println("❌ Error: ${result.type}")
else -> {}
}
}Cierre de sesión
Cerrar una sesión (a menudo llamado “Fin de Día” o “Cierre de Lote”) finaliza el periodo actual y liquida las transacciones con el host de Getnet. Esta es una operación crítica: asegura que los pagos se procesen y los fondos se depositen correctamente.
Repositorio: SessionRepository
Función: closeSession
Parámetros:
wantBrandDetails(Opcional, por defectotrue): Si estrue, el resultado incluirá un desglose de los totales por marca de tarjeta (Visa, Mastercard, etc.).
Interpretar CloseSessionResult
La operación devuelve una interfaz sellada CloseSessionResult:
- Exitoso (
CloseSessionResult.Successful): La sesión se cerró correctamente. La propiedaddatacontiene unTotalsCommonModelcon el resumen de la sesión cerrada (importes, recuento de transacciones, etc.). - Rechazado (
CloseSessionResult.Rejected): El host rechazó la solicitud de cierre.
Ejemplo:
suspend fun closeDailySession() {
val result = sessionRepository.closeSession(wantBrandDetails = true)
when (result) {
is RepositoryResult.Success -> {
when (val sessionOutcome = result.data) {
is CloseSessionResult.Successful -> {
val totals = sessionOutcome.data
println("✅ Session Closed. Total: ${totals.totalAmount}")
}
is CloseSessionResult.Rejected -> {
println("❌ Session Close Rejected by Host")
}
}
}
is RepositoryResult.ConnectionError -> println("❌ Connection Error")
is RepositoryResult.ProtocolError -> println("❌ Error: ${result.type}")
else -> {}
}
}Próximos pasos
- Ver Totales e Informes: Consulta de totales acumulados para sesiones o turnos específicos.