FINERACT-1926: Fix sale error handling
This commit is contained in:
+13
-22
@@ -78,7 +78,6 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public CommandProcessingResult saleLoanByLoanId(JsonCommand command) {
|
public CommandProcessingResult saleLoanByLoanId(JsonCommand command) {
|
||||||
final JsonElement json = fromApiJsonHelper.parse(command.json());
|
|
||||||
Long loanId = command.getLoanId();
|
Long loanId = command.getLoanId();
|
||||||
LoanIdAndExternalIdAndStatus loanIdAndExternalIdAndStatus = fetchLoanDetails(loanId);
|
LoanIdAndExternalIdAndStatus loanIdAndExternalIdAndStatus = fetchLoanDetails(loanId);
|
||||||
validateLoanStatus(loanIdAndExternalIdAndStatus);
|
validateLoanStatus(loanIdAndExternalIdAndStatus);
|
||||||
@@ -107,8 +106,19 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
|
|||||||
List<ExternalAssetOwnerTransfer> effectiveTransfers = externalAssetOwnerTransferRepository
|
List<ExternalAssetOwnerTransfer> effectiveTransfers = externalAssetOwnerTransferRepository
|
||||||
.findEffectiveTransfers(externalAssetOwnerTransfer.getLoanId(), externalAssetOwnerTransfer.getSettlementDate());
|
.findEffectiveTransfers(externalAssetOwnerTransfer.getLoanId(), externalAssetOwnerTransfer.getSettlementDate());
|
||||||
|
|
||||||
if (effectiveTransfers.size() > 0) {
|
if (effectiveTransfers.size() == 2) {
|
||||||
throw new ExternalAssetOwnerInitiateTransferException("This loan cannot be sold, there is already an in progress transfer");
|
throw new ExternalAssetOwnerInitiateTransferException("This loan cannot be sold, there is already an in progress transfer");
|
||||||
|
} else if (effectiveTransfers.size() == 1) {
|
||||||
|
if (ExternalTransferStatus.PENDING.equals(effectiveTransfers.get(0).getStatus())) {
|
||||||
|
throw new ExternalAssetOwnerInitiateTransferException(
|
||||||
|
"External asset owner transfer is already in PENDING state for this loan");
|
||||||
|
} else if (ExternalTransferStatus.ACTIVE.equals(effectiveTransfers.get(0).getStatus())) {
|
||||||
|
throw new ExternalAssetOwnerInitiateTransferException(
|
||||||
|
"This loan cannot be sold, because it is owned by an external asset owner");
|
||||||
|
} else {
|
||||||
|
throw new ExternalAssetOwnerInitiateTransferException(String.format(
|
||||||
|
"This loan cannot be sold, because it is incorrect state! (transferId = %s)", effectiveTransfers.get(0).getId()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,14 +180,11 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
|
|||||||
|
|
||||||
private void validateSale(ExternalAssetOwnerTransfer externalAssetOwnerTransfer) {
|
private void validateSale(ExternalAssetOwnerTransfer externalAssetOwnerTransfer) {
|
||||||
validateSettlementDate(externalAssetOwnerTransfer);
|
validateSettlementDate(externalAssetOwnerTransfer);
|
||||||
validateTransferStatusForSale(externalAssetOwnerTransfer);
|
|
||||||
validateEffectiveTransferForSale(externalAssetOwnerTransfer);
|
validateEffectiveTransferForSale(externalAssetOwnerTransfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateSettlementDate(ExternalAssetOwnerTransfer externalAssetOwnerTransfer) {
|
private void validateSettlementDate(ExternalAssetOwnerTransfer externalAssetOwnerTransfer) {
|
||||||
if (externalAssetOwnerTransfer.getSettlementDate().isBefore(ThreadLocalContextUtil.getBusinessDate())) {
|
validateSettlementDate(externalAssetOwnerTransfer.getSettlementDate());
|
||||||
throw new ExternalAssetOwnerInitiateTransferException("Settlement date cannot be in the past");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateSettlementDate(LocalDate settlementDate) {
|
private void validateSettlementDate(LocalDate settlementDate) {
|
||||||
@@ -192,22 +199,6 @@ public class ExternalAssetOwnersWriteServiceImpl implements ExternalAssetOwnersW
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateTransferStatusForSale(ExternalAssetOwnerTransfer externalAssetOwnerTransfer) {
|
|
||||||
Optional<ExternalAssetOwnerTransfer> latestTransferOptional = externalAssetOwnerTransferRepository
|
|
||||||
.findLatestByLoanId(externalAssetOwnerTransfer.getLoanId());
|
|
||||||
if (latestTransferOptional.isPresent()) {
|
|
||||||
ExternalAssetOwnerTransfer latestTransfer = latestTransferOptional.get();
|
|
||||||
ExternalTransferStatus latestTransferStatus = latestTransfer.getStatus();
|
|
||||||
if (latestTransferStatus.equals(ExternalTransferStatus.PENDING)) {
|
|
||||||
throw new ExternalAssetOwnerInitiateTransferException(
|
|
||||||
"External asset owner transfer is already in PENDING state for this loan");
|
|
||||||
} else if (latestTransferStatus.equals(ExternalTransferStatus.ACTIVE)) {
|
|
||||||
throw new ExternalAssetOwnerInitiateTransferException(
|
|
||||||
"This loan cannot be sold, because it is owned by an external asset owner");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private ExternalAssetOwnerTransfer createSaleTransfer(Long loanId, String apiRequestBodyAsJson, ExternalId externalLoanId) {
|
private ExternalAssetOwnerTransfer createSaleTransfer(Long loanId, String apiRequestBodyAsJson, ExternalId externalLoanId) {
|
||||||
ExternalAssetOwnerTransfer externalAssetOwnerTransfer = new ExternalAssetOwnerTransfer();
|
ExternalAssetOwnerTransfer externalAssetOwnerTransfer = new ExternalAssetOwnerTransfer();
|
||||||
LocalDate effectiveFrom = ThreadLocalContextUtil.getBusinessDate();
|
LocalDate effectiveFrom = ThreadLocalContextUtil.getBusinessDate();
|
||||||
|
|||||||
Reference in New Issue
Block a user