Historial de transacciones
Esta guía explica cómo buscar transacciones pasadas utilizando el TransactionRepository. Esta funcionalidad te permite recuperar listas detalladas de operaciones basadas en rangos de fechas y criterios específicos como marca de tarjeta, importe o estado del resultado.
Antes de buscar, asegúrate de que el TPV esté inicializado.
Búsqueda básica por fecha
Para recuperar transacciones, utiliza el método getTransactions. Debes proporcionar una fecha de inicio y una fecha de fin.
El rango entre initDate y endDate no puede exceder los 15 días.
suspend fun searchTransactions(start: Date, end: Date) {
val result = transactionRepository.getTransactions(
initDate = start,
endDate = end
)
handleTransactionResult(result)
}Filtrado avanzado
Puedes refinar tu búsqueda utilizando el objeto TransactionFilter. Todas las propiedades en este filtro son opcionales, solo necesitas establecer los criterios que quieres aplicar.
Propiedades del filtro
operationNumber: Busca un ID de transacción específico (Int).type: Una lista de OperationType (por ejemplo, PAYMENT, REFUND).result: El estado de OperationResult (por ejemplo, AUTHORIZED, DENIED).lastCardDigits: Los últimos 4 dígitos de la tarjeta (Int).rangeAmountMinMax: Un Pair de objetos Money que define el importe mínimo y máximo.cardBrand: La CardBrand (por ejemplo, VISA, MASTERCARD).
Ejemplo: Filtrado por marca de tarjeta e importe
suspend fun searchVisaHighValue(start: Date, end: Date) {
// Define the filter
val myFilter = TransactionFilter(
cardBrand = CardBrand.VISA,
rangeAmountMinMax = Pair(
Money(BigDecimal("50.00"), Currency.getInstance("EUR")),
Money(BigDecimal("500.00"), Currency.getInstance("EUR"))
),
result = OperationResult.AUTHORIZED
)
// Execute search
val result = transactionRepository.getTransactions(
initDate = start,
endDate = end,
filter = myFilter
)
handleTransactionResult(result)
}Paginación y límites
Para gestionar grandes conjuntos de datos, utiliza el TransactionResultsFilter.
maxOperations: Limita el número de transacciones devueltas.offset: Omite el número especificado de transacciones (útil para la paginación).
val pagingFilter = TransactionResultsFilter(
maxOperations = 20,
offset = 0
)
val result = transactionRepository.getTransactions(
initDate = start,
endDate = end,
resultsFilter = pagingFilter
)Interpretando el resultado
El repositorio devuelve un RepositoryResult<GetTransactionsResult>.
La data class GetTransactionsResult contiene:
transactionList: UnaList<Transaction>que contiene las operaciones encontradas.hasMoreTransactions: UnBooleanque indica si hay más transacciones disponibles que coincidan con tus criterios (útil para la paginación).
Ejemplo de lógica de gestión
fun handleTransactionResult(result: RepositoryResult<GetTransactionsResult>) {
when (result) {
is RepositoryResult.Success -> {
val searchData = result.data
val transactions = searchData.transactionList
if (transactions.isEmpty()) {
println("No transactions found.")
} else {
println("Found ${transactions.size} transactions.")
transactions.forEach { txn ->
println("ID: ${txn.operationInfo.number} - Amount: ${txn.amount}")
}
}
if (searchData.hasMoreTransactions) {
println("⚠️ There are more transactions available. Load next page.")
}
}
is RepositoryResult.ConnectionError -> println("❌ Connection Error")
is RepositoryResult.ProtocolError -> println("❌ Error: ${result.type}")
else -> {}
}
}Próximos pasos
- Emitir Recibos Digitales: Aprende cómo recuperar copias digitales de los recibos de estas transacciones.
- Controlar la Impresora del Dispositivo: Controla la impresora para reimprimir tickets.