All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cl.transbank.pos.responses.DetailResponse Maven / Gradle / Ivy

package cl.transbank.pos.responses;

import cl.transbank.pos.exceptions.TransbankParseException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static cl.transbank.pos.helper.StringUtils.parseInt;
import static cl.transbank.pos.helper.StringUtils.parseLocalDate;
import static cl.transbank.pos.helper.StringUtils.parseLocalDateTime;
import static cl.transbank.pos.helper.StringUtils.parseLong;

public class DetailResponse {

    private static final Logger logger = LogManager.getLogger(DetailResponse.class);

    public static final Map map;

    static {
        //los valores deben ser INTs. Si no, se caera en el inicializador estatico.
        // _NO_ usar un 0 antes del numero porque en java eso significa un numero octal
        Object[][] codePosition = {
                {"functionCode", 0},
                {"responseCode", 1},
                {"commerceCode", 2},
                {"terminalId", 3},
                {"ticket", 4},
                {"authorizationCode", 5},
                {"amount", 6},
                {"last4Digits", 7},
                {"operationNumber", 8},
                {"cardType", 9},
                {"accountingDate", 10},
                {"accountNumber", 11},
                {"cardBrand", 12},
                {"realDate", 13},
                {"realTime", 14},
                {"employeeId", 15},
                {"tip", 16},
                {"feeAmount", 17},
                {"feeNumber", 18}
        };
        Map values = Stream.of(codePosition).collect(Collectors.toMap(data -> (String) data[0], data -> (Integer) data[1]));
        map = Collections.unmodifiableMap(values);
    }

    private final int functionCode;
    private final int responseCode;
    private final long commerceCode;
    private final String terminalId;
    private final String ticket;
    private final String authorizationCode;
    private final int amount;
    private final int last4Digits;
    private final int operationNumber;
    private final String cardType;
    private final LocalDate accountingDate;
    private final long accountNumber;
    private final String cardBrand;
    private final LocalDateTime realDate;
    private final int employeeId;
    private final int tip;
    private final int feeAmount;
    private final int feeNumber;

    public DetailResponse(String saleData) throws TransbankParseException {
        if (saleData == null || saleData.indexOf('|') < 0) {
            logger.debug("linea invalida: " + saleData);
            throw new TransbankParseException("Could not parse into a DetailResponse the line " + saleData);
        }
        try {
            logger.debug("DetailsResponse: string: " + saleData);
            saleData = saleData.trim(); //the first character is a space

            String[] fields = saleData.split("\\|");
            for (int index = 0; index < fields.length; index++) {
                logger.debug("fields[ " + index + " ] = " + fields[index]);
            }
            functionCode = parseInt(fields[map.get("functionCode")]);
            responseCode = parseInt(fields[map.get("responseCode")]);
            commerceCode = parseInt(fields[map.get("commerceCode")]);
            terminalId = fields[map.get("terminalId")];
            ticket = fields[map.get("ticket")];
            authorizationCode = fields[map.get("authorizationCode")];
            amount = parseInt(fields[map.get("amount")]);
            last4Digits = parseInt(fields[map.get("last4Digits")]);
            operationNumber = parseInt(fields[map.get("operationNumber")]);
            cardType = fields[map.get("cardType")];
            accountingDate = parseLocalDate(fields[map.get("accountingDate")]);
            accountNumber = parseLong(fields[map.get("accountNumber")]);
            cardBrand = fields[map.get("cardBrand")];
            realDate = parseLocalDateTime(fields[map.get("realDate")], fields[map.get("realTime")]);
            employeeId = parseInt(fields[map.get("employeeId")]);
            tip = parseInt(fields[map.get("tip")]);
            feeAmount = parseInt(fields[map.get("feeAmount")]);
            feeNumber = parseInt(fields[map.get("feeNumber")]);
        } catch (Exception e) {
            logger.debug("Error al parsear: " + saleData);
            throw new TransbankParseException("Error when parsing into a DetailResponse the line " + saleData, e);
        }
    }

    public boolean isSuccessful() {
        return responseCode == 0;
    }

    @Override
    public String toString() {
        return "DetailResponse{" +
                "functionCode=" + functionCode +
                ", responseCode=" + responseCode +
                ", commerceCode=" + commerceCode +
                ", terminalId=" + terminalId +
                ", ticket=" + ticket +
                ", authorizationCode=" + authorizationCode +
                ", amount=" + amount +
                ", last4Digits=" + last4Digits +
                ", operationNumber=" + operationNumber +
                ", cardType=" + cardType +
                ", accountingDate=" + accountingDate +
                ", accountNumber=" + accountNumber +
                ", cardBrand=" + cardBrand +
                ", realDate=" + realDate +
                ", employeeId=" + employeeId +
                ", tip=" + tip +
                ", feeAmount=" + feeAmount +
                ", feeNumber=" + feeNumber +
                " }\n";
    }

    public String getResponseMessage() {
        return ResponseCodes.getMessage(this.getResponseCode());
    }

    public int getFunctionCode() {
        return functionCode;
    }

    public int getResponseCode() {
        return responseCode;
    }

    public long getCommerceCode() {
        return commerceCode;
    }

    public String getTerminalId() {
        return terminalId;
    }

    public String getTicket() {
        return ticket;
    }

    public String getAuthorizationCode() {
        return authorizationCode;
    }

    public int getAmount() {
        return amount;
    }

    public int getLast4Digits() {
        return last4Digits;
    }

    public int getOperationNumber() {
        return operationNumber;
    }

    public String getCardType() {
        return cardType;
    }

    public LocalDate getAccountingDate() {
        return accountingDate;
    }

    public long getAccountNumber() {
        return accountNumber;
    }

    public String getCardBrand() {
        return cardBrand;
    }

    public LocalDateTime getRealDate() {
        return realDate;
    }

    public int getEmployeeId() {
        return employeeId;
    }

    public int getTip() {
        return tip;
    }

    public int getFeeAmount() {
        return feeAmount;
    }

    public int getFeeNumber() {
        return feeNumber;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy