0

This question might be silly but I'm not able to achieve this. I have a payment device that I'm connected via bluetooth to my app. For the device to display currency code, I need to pass a string, like this :

String codeForPaymendDevice = "978";

This "978" basically sends "EUR" currency code and displays on the screen of the payment device. (The device's library maps and handles this). In my app, when the user makes a purchase in EUR currency, it should compare with "978(EUR)" and if both matches, it should parse codeForPaymentDevice. I'm not able to do this because I cannot compare "EUR" with 978 (as my code doesn't know 978 is EUR, only the payment device knows 978 is EUR).

What I need to do is, map "978" to "EUR" code and then compare transaction.getCurrencyCode() with the mapped variable and then parse it.

private SaleRequest buildTransactionRequest(Transaction transaction) {
        final SaleRequest tr = new SaleRequest();
        BigDecimal amount = getAmountPaid();
        String codeForPaymentDevice = "978";
        String formattedAmount;
        try {
            if (!transaction.getCurrencyCode().equalsIgnoreCase(CREW_CURRENCY)) {
                formattedAmount = AirFiApplication
                        .getPriceFormatter(AirFiApplication.getCurrency(transaction.getCurrencyCode())).format(amount);

                // transaction.getCurrencyCode = EUR 

                tr.setCurrency(codeForPaymentDevice); // TODO remove hardcoding
            } 

        } catch (MPosValueException e) {
            LOG.error("Error while building transaction request due to {}", e.getLocalizedMessage());

        }
        return tr;
    }
Baabidi
  • 13
  • 2

1 Answers1

1

You can create a Map with some key (for now I have used currency code) with the value you need to pass as the value.

Map<String, String> map = new HashMap<>();
map.put("EUR", "978");
map.put("INR", "979");
map.put("USD", "980");
map.put("AED", "981");
...

In your code,

tr.setCurrency(map.get(transaction.getCurrencyCode()));
K Neeraj Lal
  • 6,768
  • 3
  • 24
  • 33