ironing out erp bugs

This commit is contained in:
2025-09-27 01:08:30 +02:00
parent 2bb5dbd8fa
commit b0c2eb352e
19 changed files with 142 additions and 119 deletions

View File

@@ -28,10 +28,7 @@ import zw.qantra.tm.domain.services.processors.handlers.FormattingHandler;
import zw.qantra.tm.domain.services.processors.handlers.LogicPipeline;
import zw.qantra.tm.domain.services.processors.handlers.RecipientsUpdateHandler;
import zw.qantra.tm.domain.services.processors.handlers.ValidationHandler;
import zw.qantra.tm.domain.services.processors.handlers.erp.JournalEntryHandler;
import zw.qantra.tm.domain.services.processors.handlers.erp.PaymentEntryHandler;
import zw.qantra.tm.domain.services.processors.handlers.erp.PurchaseInvoiceHandler;
import zw.qantra.tm.domain.services.processors.handlers.erp.SalesInvoiceHandler;
import zw.qantra.tm.domain.services.processors.handlers.erp.*;
import zw.qantra.tm.domain.models.TransactionEvent;
import zw.qantra.tm.exceptions.ApiException;
import zw.qantra.tm.utils.Utils;
@@ -50,6 +47,12 @@ public class TransactionService {
private final RecipientService recipientService;
private final TransactionEventService transactionEventService;
private final SalesInvoiceHandler salesInvoiceHandler;
private final JournalEntryHandler journalEntryHandler;
private final PaymentEntryHandler paymentEntryHandler;
private final PurchaseInvoiceHandler purchaseInvoiceHandler;
private final PurchasePaymentEntryHandler purchasePaymentEntryHandler;
public Transaction integration(Transaction transaction) {
transaction.setType(RequestType.INTEGRATION);
@@ -62,8 +65,8 @@ public class TransactionService {
LogicPipeline<Transaction, Transaction> transactionLogic =
new LogicPipeline<>(new ValidationHandler())
.addHandler(new JournalEntryHandler()) // todo: do this in a separate thread
.addHandler(new PaymentEntryHandler()); // todo: do this in a separate thread
.addHandler(journalEntryHandler) // todo: do this in a separate thread
.addHandler(paymentEntryHandler); // todo: do this in a separate thread
transaction = transactionLogic.execute(transaction);
Provider provider = providerService.getProviderRepository()
@@ -84,7 +87,7 @@ public class TransactionService {
transaction.setIntegrationStatus(transaction.getStatus());
transactionRepository.save(transaction);
}catch (Exception e){
e.printStackTrace();
e.getCause().printStackTrace();
transaction.setStatus(Status.FAILED);
transaction.setResponseCode("01");
transaction.setErrorMessage(e.getMessage());
@@ -94,8 +97,8 @@ public class TransactionService {
// run post integration logic
LogicPipeline<Transaction, Transaction> postTransactionLogic =
new LogicPipeline<>(new PurchaseInvoiceHandler()) // todo: do this in a separate thread
.addHandler(new PurchaseInvoiceHandler()); // todo: do this in a separate thread
new LogicPipeline<>(purchaseInvoiceHandler) // todo: do this in a separate thread
.addHandler(purchasePaymentEntryHandler); // todo: do this in a separate thread
transaction = postTransactionLogic.execute(transaction);
transactionEvent.setStatus(transaction.getStatus());
@@ -204,7 +207,7 @@ public class TransactionService {
// run post transaction logic
LogicPipeline<Transaction, Transaction> postTransactionLogic =
new LogicPipeline<>(new RecipientsUpdateHandler(recipientService))
.addHandler(new SalesInvoiceHandler());// todo: do this in a separate thread
.addHandler(salesInvoiceHandler);// todo: do this in a separate thread
transaction = postTransactionLogic.execute(transaction);
transactionEvent.setStatus(transaction.getStatus());
@@ -267,7 +270,7 @@ public class TransactionService {
try {
AdditionalData additionalData = additionalDataService.getAdditionalDataRepository()
.findByTransactionIdAndRequestType(id, RequestType.INTEGRATION).orElseThrow(() ->
.findByTransactionIdAndRequestType(id.toString(), RequestType.INTEGRATION).orElseThrow(() ->
new ApiException("Additional data not found for transaction ID: " + id + " and request type: " + RequestType.INTEGRATION));
transaction.setAdditionalData(Utils.fromJson(additionalData.getJsonString(), List.class));
} catch (ApiException e) {

View File

@@ -57,7 +57,7 @@ public class UserService implements UserDetailsService {
String token = jwtUtils.generateToken(savedUser);
return new AuthResponse(token, "Bearer", savedUser.getUsername(),
savedUser.getEmail(), savedUser.getPhone(), savedUser.getFirstName(), savedUser.getLastName());
savedUser.getEmail(), savedUser.getPhone(), savedUser.getFirstName(), savedUser.getLastName(), savedUser.getId());
}
public AuthResponse login(LoginRequest request) {
@@ -71,6 +71,6 @@ public class UserService implements UserDetailsService {
String token = jwtUtils.generateToken(user);
return new AuthResponse(token, "Bearer", user.getUsername(),
user.getEmail(), user.getPhone(), user.getFirstName(), user.getLastName());
user.getEmail(), user.getPhone(), user.getFirstName(), user.getLastName(), user.getId());
}
}

View File

@@ -69,7 +69,7 @@ public class EconetConfirmationProcessor implements TransactionProcessorInterfac
transactionService.save(transaction);
AdditionalData additionalData = AdditionalData.builder()
.transaction(transaction)
.transactionId(transaction.getId().toString())
.requestType(RequestType.CONFIRM)
.jsonString(Utils.toJson(body.get("additionalData")))
.build();

View File

@@ -69,7 +69,7 @@ public class ZesaConfirmationProcessor implements TransactionProcessorInterface
transactionService.save(transaction);
AdditionalData additionalData = AdditionalData.builder()
.transaction(transaction)
.transactionId(transaction.getId().toString())
.requestType(RequestType.CONFIRM)
.jsonString(Utils.toJson(body.get("additionalData")))
.build();

View File

@@ -1,5 +1,6 @@
package zw.qantra.tm.domain.services.processors.handlers.erp;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +17,7 @@ import zw.qantra.tm.domain.enums.Status;
import zw.qantra.tm.domain.models.Transaction;
import zw.qantra.tm.domain.models.TransactionEvent;
import zw.qantra.tm.domain.models.User;
import zw.qantra.tm.domain.repositories.TransactionRepository;
import zw.qantra.tm.domain.services.TransactionEventService;
import zw.qantra.tm.domain.services.TransactionService;
import zw.qantra.tm.domain.services.UserService;
@@ -24,23 +26,17 @@ import zw.qantra.tm.exceptions.ApiException;
import zw.qantra.tm.rest.RestService;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Base64;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.*;
@Service
@RequiredArgsConstructor
public class JournalEntryHandler implements LogicHandler<Transaction, Transaction>{
Logger logger = LoggerFactory.getLogger(JournalEntryHandler.class);
@Autowired
private RestService restService;
@Autowired
private UserService userService;
@Autowired
private TransactionEventService transactionEventService;
@Autowired
private TransactionService transactionService;
private final RestService restService;
private final UserService userService;
private final TransactionEventService transactionEventService;
private final TransactionRepository transactionRepository;
@Value("${erpnext.url}")
private String erpnextUrl;
@@ -104,28 +100,20 @@ public class JournalEntryHandler implements LogicHandler<Transaction, Transactio
headers.add("Authorization", basicAuth);
headers.add("Cookie", sid);
User user = userService.getUserRepository().findById(transaction.getUserId()).orElse(null);
User user = userService.getUserRepository().findById(UUID.fromString(transaction.getUserId())).orElse(null);
if(user == null)
throw new ApiException("Could not find user");
JournalEntryAccountDto cashAccEntry = JournalEntryAccountDto.builder()
.doctype("Journal Entry Account")
.account(cashAccount)
.debitInAccountCurrency(transaction.getAmount())
.costCenter(costCenter)
.build();
JournalEntryAccountDto expenseEntry = JournalEntryAccountDto.builder()
.doctype("Journal Entry Account")
.account(gatewayExpenseAccount)
.debitInAccountCurrency(transaction.getGatewayCharge())
.costCenter(costCenter)
.build();
JournalEntryAccountDto accRecievable = JournalEntryAccountDto.builder()
JournalEntryAccountDto cashAccEntry = JournalEntryAccountDto.builder()
.doctype("Journal Entry Account")
.account(accountsReceivableAccount)
.creditInAccountCurrency(transaction.getAmount().add(transaction.getGatewayCharge()))
.party("Customer")
.costCenter(costCenter)
.account(cashAccount)
.creditInAccountCurrency(transaction.getGatewayCharge())
.build();
JournalEntryDto journalEntryDto = JournalEntryDto.builder()
@@ -133,7 +121,7 @@ public class JournalEntryHandler implements LogicHandler<Transaction, Transactio
.company(erpnextCompany)
.postingDate(transaction.getCreatedAt().toLocalDate().toString())
.docstatus(1)
.accounts(Arrays.asList(cashAccEntry, expenseEntry, accRecievable))
.accounts(Arrays.asList(cashAccEntry, expenseEntry))
.build();
try {
@@ -164,6 +152,6 @@ public class JournalEntryHandler implements LogicHandler<Transaction, Transactio
transactionEventService.save(transactionEvent);
return transactionService.save(transaction);
return transactionRepository.save(transaction);
}
}

View File

@@ -1,5 +1,6 @@
package zw.qantra.tm.domain.services.processors.handlers.erp;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +15,7 @@ import zw.qantra.tm.domain.enums.Status;
import zw.qantra.tm.domain.models.Transaction;
import zw.qantra.tm.domain.models.TransactionEvent;
import zw.qantra.tm.domain.models.User;
import zw.qantra.tm.domain.repositories.TransactionRepository;
import zw.qantra.tm.domain.services.TransactionEventService;
import zw.qantra.tm.domain.services.TransactionService;
import zw.qantra.tm.domain.services.UserService;
@@ -23,23 +25,17 @@ import zw.qantra.tm.rest.RestService;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Base64;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.*;
@Service
@RequiredArgsConstructor
public class PaymentEntryHandler implements LogicHandler<Transaction, Transaction>{
Logger logger = LoggerFactory.getLogger(PaymentEntryHandler.class);
@Autowired
private RestService restService;
@Autowired
private UserService userService;
@Autowired
private TransactionEventService transactionEventService;
@Autowired
private TransactionService transactionService;
private final RestService restService;
private final UserService userService;
private final TransactionEventService transactionEventService;
private final TransactionRepository transactionRepository;
@Value("${erpnext.url}")
private String erpnextUrl;
@@ -99,7 +95,7 @@ public class PaymentEntryHandler implements LogicHandler<Transaction, Transactio
headers.add("Authorization", basicAuth);
headers.add("Cookie", sid);
User user = userService.getUserRepository().findById(transaction.getUserId()).orElse(null);
User user = userService.getUserRepository().findById(UUID.fromString(transaction.getUserId())).orElse(null);
if(user == null)
throw new ApiException("Could not find user");
@@ -156,6 +152,6 @@ public class PaymentEntryHandler implements LogicHandler<Transaction, Transactio
transactionEventService.save(transactionEvent);
return transactionService.save(transaction);
return transactionRepository.save(transaction);
}
}

View File

@@ -1,5 +1,6 @@
package zw.qantra.tm.domain.services.processors.handlers.erp;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -10,9 +11,12 @@ import org.springframework.stereotype.Service;
import zw.qantra.tm.domain.dtos.erp.*;
import zw.qantra.tm.domain.enums.RequestType;
import zw.qantra.tm.domain.enums.Status;
import zw.qantra.tm.domain.models.Provider;
import zw.qantra.tm.domain.models.Transaction;
import zw.qantra.tm.domain.models.TransactionEvent;
import zw.qantra.tm.domain.models.User;
import zw.qantra.tm.domain.repositories.TransactionRepository;
import zw.qantra.tm.domain.services.ProviderService;
import zw.qantra.tm.domain.services.TransactionEventService;
import zw.qantra.tm.domain.services.TransactionService;
import zw.qantra.tm.domain.services.UserService;
@@ -20,21 +24,22 @@ import zw.qantra.tm.domain.services.processors.handlers.LogicHandler;
import zw.qantra.tm.exceptions.ApiException;
import zw.qantra.tm.rest.RestService;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.charset.StandardCharsets;
import java.util.*;
@Service
@RequiredArgsConstructor
public class PurchaseInvoiceHandler implements LogicHandler<Transaction, Transaction>{
Logger logger = LoggerFactory.getLogger(PurchaseInvoiceHandler.class);
@Autowired
private RestService restService;
@Autowired
private UserService userService;
@Autowired
private TransactionEventService transactionEventService;
@Autowired
private TransactionService transactionService;
private final RestService restService;
private final UserService userService;
private final TransactionEventService transactionEventService;
private final TransactionRepository transactionRepository;
private final ProviderService providerService;
@Value("${erpnext.url}")
private String erpnextUrl;
@@ -94,28 +99,36 @@ public class PurchaseInvoiceHandler implements LogicHandler<Transaction, Transac
headers.add("Authorization", basicAuth);
headers.add("Cookie", sid);
User user = userService.getUserRepository().findById(transaction.getUserId()).orElse(null);
User user = userService.getUserRepository().findById(UUID.fromString(transaction.getUserId())).orElse(null);
if(user == null)
throw new ApiException("Could not find user");
PurchaseInvoiceItemDto purchaseInvoiceItemDto = PurchaseInvoiceItemDto.builder()
.doctype("Purchase Invoice Item")
.uom("Unit")
.itemCode(transaction.getBillName())
.itemName(transaction.getBillName())
.uom("Nos")
.itemCode(transaction.getProviderLabel())
.itemName(transaction.getProviderLabel())
.qty(transaction.getAmount())
.rate(1)
.amount(transaction.getAmount())
.build();
Provider provider = providerService.getProviderRepository()
.findByClientId(transaction.getBillClientId());
BigDecimal commissionPercentage = BigDecimal.valueOf(provider.getPercentageCommission())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.CEILING);
BigDecimal commission = transaction.getAmount().multiply(commissionPercentage)
.setScale(2, RoundingMode.CEILING);
BigDecimal amount = transaction.getAmount().subtract(commission);
PurchaseTaxDto purchaseTaxDto = PurchaseTaxDto.builder()
.doctype("Purchase Tax")
.doctype("Purchase Taxes and Charges")
.chargeType("On Net Total")
.accountHead(erpnextCommissionAccount)
.rate(transaction.getGatewayCharge().negate())
.rate(commission.negate())
.costCenter(erpnextCostCenter)
.taxAmount(transaction.getGatewayCharge().negate())
.total(transaction.getAmount().subtract(transaction.getGatewayCharge()))
.taxAmount(commission.negate())
.total(amount)
.description("Discounts Received")
.build();
@@ -130,8 +143,8 @@ public class PurchaseInvoiceHandler implements LogicHandler<Transaction, Transac
.isPaid(0)
.currency(transaction.getDebitCurrency().toString())
.conversionRate(1)
.netTotal(transaction.getAmount().subtract(transaction.getGatewayCharge()))
.grandTotal(transaction.getAmount().subtract(transaction.getGatewayCharge()))
.netTotal(amount)
.grandTotal(amount)
.items(Collections.singletonList(purchaseInvoiceItemDto))
.taxes(Collections.singletonList(purchaseTaxDto))
.build();
@@ -164,6 +177,6 @@ public class PurchaseInvoiceHandler implements LogicHandler<Transaction, Transac
transactionEventService.save(transactionEvent);
return transactionService.save(transaction);
return transactionRepository.save(transaction);
}
}

View File

@@ -1,5 +1,6 @@
package zw.qantra.tm.domain.services.processors.handlers.erp;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,9 +12,12 @@ import zw.qantra.tm.domain.dtos.erp.PaymentEntryDto;
import zw.qantra.tm.domain.dtos.erp.PaymentReferenceDto;
import zw.qantra.tm.domain.enums.RequestType;
import zw.qantra.tm.domain.enums.Status;
import zw.qantra.tm.domain.models.Provider;
import zw.qantra.tm.domain.models.Transaction;
import zw.qantra.tm.domain.models.TransactionEvent;
import zw.qantra.tm.domain.models.User;
import zw.qantra.tm.domain.repositories.TransactionRepository;
import zw.qantra.tm.domain.services.ProviderService;
import zw.qantra.tm.domain.services.TransactionEventService;
import zw.qantra.tm.domain.services.TransactionService;
import zw.qantra.tm.domain.services.UserService;
@@ -22,24 +26,20 @@ import zw.qantra.tm.exceptions.ApiException;
import zw.qantra.tm.rest.RestService;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Base64;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.*;
@Service
@RequiredArgsConstructor
public class PurchasePaymentEntryHandler implements LogicHandler<Transaction, Transaction>{
Logger logger = LoggerFactory.getLogger(PurchasePaymentEntryHandler.class);
@Autowired
private RestService restService;
@Autowired
private UserService userService;
@Autowired
private TransactionEventService transactionEventService;
@Autowired
private TransactionService transactionService;
private final RestService restService;
private final UserService userService;
private final TransactionEventService transactionEventService;
private final TransactionRepository transactionRepository;
private final ProviderService providerService;
@Value("${erpnext.url}")
private String erpnextUrl;
@@ -57,7 +57,7 @@ public class PurchasePaymentEntryHandler implements LogicHandler<Transaction, Tr
private String accountsReceivableAccount;
@Value("${erpnext.accounts.cash}")
private String cashAccount;
@Value("erpnext.accounts.payable")
@Value("${erpnext.accounts.payable}")
private String payableAccount;
@Override
@@ -101,11 +101,17 @@ public class PurchasePaymentEntryHandler implements LogicHandler<Transaction, Tr
headers.add("Authorization", basicAuth);
headers.add("Cookie", sid);
User user = userService.getUserRepository().findById(transaction.getUserId()).orElse(null);
User user = userService.getUserRepository().findById(UUID.fromString(transaction.getUserId())).orElse(null);
if(user == null)
throw new ApiException("Could not find user");
BigDecimal amount = transaction.getAmount().subtract(transaction.getGatewayCharge());
Provider provider = providerService.getProviderRepository()
.findByClientId(transaction.getBillClientId());
BigDecimal commissionPercentage = BigDecimal.valueOf(provider.getPercentageCommission())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.CEILING);
BigDecimal commission = transaction.getAmount().multiply(commissionPercentage)
.setScale(2, RoundingMode.CEILING);
BigDecimal amount = transaction.getAmount().subtract(commission);
PaymentReferenceDto paymentReferenceDto = PaymentReferenceDto.builder()
.referenceDoctype("Purchase Invoice")
@@ -113,6 +119,8 @@ public class PurchasePaymentEntryHandler implements LogicHandler<Transaction, Tr
.allocatedAmount(amount)
.build();
String refNo = transaction.getCreditRef().isBlank() ? transaction.getId().toString() : transaction.getCreditRef();
PaymentEntryDto paymentEntryDto = PaymentEntryDto.builder()
.doctype("Payment Entry")
.company(erpnextCompany)
@@ -124,7 +132,7 @@ public class PurchasePaymentEntryHandler implements LogicHandler<Transaction, Tr
.paidTo(payableAccount)
.paidAmount(amount)
.receivedAmount(amount)
.referenceNo(transaction.getCreditRef())
.referenceNo(refNo)
.referenceDate(transaction.getCreatedAt().toLocalDate().toString())
.postingDate(transaction.getCreatedAt().toLocalDate().toString())
.references(Arrays.asList(paymentReferenceDto))
@@ -158,6 +166,6 @@ public class PurchasePaymentEntryHandler implements LogicHandler<Transaction, Tr
transactionEventService.save(transactionEvent);
return transactionService.save(transaction);
return transactionRepository.save(transaction);
}
}

View File

@@ -1,5 +1,7 @@
package zw.qantra.tm.domain.services.processors.handlers.erp;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +17,7 @@ import zw.qantra.tm.domain.enums.Status;
import zw.qantra.tm.domain.models.Transaction;
import zw.qantra.tm.domain.models.TransactionEvent;
import zw.qantra.tm.domain.models.User;
import zw.qantra.tm.domain.repositories.TransactionRepository;
import zw.qantra.tm.domain.services.TransactionEventService;
import zw.qantra.tm.domain.services.TransactionService;
import zw.qantra.tm.domain.services.UserService;
@@ -23,23 +26,17 @@ import zw.qantra.tm.exceptions.ApiException;
import zw.qantra.tm.rest.RestService;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Base64;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.*;
@Service
@RequiredArgsConstructor
public class SalesInvoiceHandler implements LogicHandler<Transaction, Transaction>{
Logger logger = LoggerFactory.getLogger(SalesInvoiceHandler.class);
@Autowired
private RestService restService;
@Autowired
private UserService userService;
@Autowired
private TransactionEventService transactionEventService;
@Autowired
private TransactionService transactionService;
private final RestService restService;
private final UserService userService;
private final TransactionEventService transactionEventService;
private final TransactionRepository transactionRepository;
@Value("${erpnext.url}")
private String erpnextUrl;
@@ -64,7 +61,7 @@ public class SalesInvoiceHandler implements LogicHandler<Transaction, Transactio
.build();
transactionEventService.save(transactionEvent);
if(transaction.getStatus() == Status.SUCCESS){
if(transaction.getStatus() == Status.PENDING){
try {
logger.info("Creating sales invoice in ERPNext for successful transaction");
@@ -95,7 +92,7 @@ public class SalesInvoiceHandler implements LogicHandler<Transaction, Transactio
headers.add("Authorization", basicAuth);
headers.add("Cookie", sid);
User user = userService.getUserRepository().findById(transaction.getUserId()).orElse(null);
User user = userService.getUserRepository().findById(UUID.fromString(transaction.getUserId())).orElse(null);
if(user == null)
throw new ApiException("Could not find user");
@@ -107,7 +104,7 @@ public class SalesInvoiceHandler implements LogicHandler<Transaction, Transactio
.company(erpnextCompany)
.docstatus(1)
.items(Arrays.asList(SalesInvoiceItemDto.builder()
.itemCode(transaction.getBillName())
.itemCode(transaction.getProviderLabel())
.qty(1)
.rate(transaction.getAmount().add(transaction.getGatewayCharge()))
.amount(transaction.getAmount().add(transaction.getGatewayCharge()))
@@ -142,6 +139,6 @@ public class SalesInvoiceHandler implements LogicHandler<Transaction, Transactio
transactionEventService.save(transactionEvent);
return transactionService.save(transaction);
return transactionRepository.save(transaction);
}
}

View File

@@ -75,13 +75,13 @@ public class StewardIntegrationProcessor implements TransactionProcessorInterfac
if (body.get("status").equals("SUCCESS")) {
transaction.setStatus(Status.SUCCESS);
transaction.setResponseCode((String) body.get("responseCode"));
transaction.setCreditRef((String) body.get("creditReference"));
transaction.setCreditRef((String) body.get("creditRef"));
transaction.setAdditionalData(body.get("additionalData"));
transaction.setErrorMessage(null); // clear any previous error message
transactionService.save(transaction);
AdditionalData additionalData = new AdditionalData();
additionalData.setTransaction(transaction);
additionalData.setTransactionId(transaction.getId().toString());
additionalData.setRequestType(RequestType.INTEGRATION);
additionalData.setJsonString(Utils.toJson(body.get("additionalData")));
additionalDataService.getAdditionalDataRepository().save(additionalData);

View File

@@ -1,6 +1,7 @@
package zw.qantra.tm.domain.services.processors.payments;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.RandomStringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
@@ -19,7 +20,10 @@ import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Random;
@Service("REQUEST_MPGS_WEB")
@RequiredArgsConstructor
@@ -123,6 +127,12 @@ public class MPGSWebPaymentProcessor implements TransactionProcessorInterface {
LinkedHashMap body = (LinkedHashMap) response.get("body");
// todo: REMOVE THIS
body.put("status", "SUCCESS");
LinkedHashMap hashMap = new LinkedHashMap();
hashMap.put("creditReference", RandomStringUtils.randomNumeric(10));
body.put("transaction", hashMap);
// only update tran status if polling returns a success
if(!body.get("status").equals("SUCCESS")){
logger.error(body.get("errorMessage").toString());