FINERACT-2081: Enable inline COB execution for locked loans
This commit is contained in:
committed by
Adam Saghy
parent
2e89c40e6e
commit
240a6dffc8
+2
@@ -36,6 +36,8 @@ public interface LoanAccountLockRepository
|
||||
|
||||
boolean existsByLoanIdAndLockOwner(Long loanId, LockOwner lockOwner);
|
||||
|
||||
boolean existsByLoanIdAndLockOwnerAndErrorIsNotNull(Long loanId, LockOwner lockOwner);
|
||||
|
||||
@Query("""
|
||||
delete from LoanAccountLock lck where lck.lockPlacedOnCobBusinessDate is not null and lck.error is not null and
|
||||
lck.lockOwner in (org.apache.fineract.cob.domain.LockOwner.LOAN_COB_CHUNK_PROCESSING,org.apache.fineract.cob.domain.LockOwner.LOAN_INLINE_COB_PROCESSING)
|
||||
|
||||
+2
@@ -27,5 +27,7 @@ public interface LoanAccountLockService {
|
||||
|
||||
boolean isLoanHardLocked(Long loanId);
|
||||
|
||||
boolean isLockOverrulable(Long loanId);
|
||||
|
||||
void updateCobAndRemoveLocks();
|
||||
}
|
||||
|
||||
+6
@@ -49,6 +49,12 @@ public class LoanAccountLockServiceImpl implements LoanAccountLockService {
|
||||
|| loanAccountLockRepository.existsByLoanIdAndLockOwner(loanId, LockOwner.LOAN_INLINE_COB_PROCESSING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLockOverrulable(Long loanId) {
|
||||
return loanAccountLockRepository.existsByLoanIdAndLockOwnerAndErrorIsNotNull(loanId, LockOwner.LOAN_COB_CHUNK_PROCESSING) //
|
||||
|| loanAccountLockRepository.existsByLoanIdAndLockOwnerAndErrorIsNotNull(loanId, LockOwner.LOAN_INLINE_COB_PROCESSING);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public void updateCobAndRemoveLocks() {
|
||||
|
||||
+10
-2
@@ -186,6 +186,14 @@ public class LoanCOBFilterHelper implements InitializingBean {
|
||||
return loanIds.stream().anyMatch(loanAccountLockService::isLoanHardLocked);
|
||||
}
|
||||
|
||||
private boolean isLockOverrulable(Long... loanIds) {
|
||||
return isLockOverrulable(Arrays.asList(loanIds));
|
||||
}
|
||||
|
||||
private boolean isLockOverrulable(List<Long> loanIds) {
|
||||
return loanIds.stream().anyMatch(loanAccountLockService::isLockOverrulable);
|
||||
}
|
||||
|
||||
public boolean isLoanBehind(List<Long> loanIds) {
|
||||
List<LoanIdAndLastClosedBusinessDate> loanIdAndLastClosedBusinessDates = new ArrayList<>();
|
||||
List<List<Long>> partitions = Lists.partition(loanIds, fineractProperties.getQuery().getInClauseParameterSizeLimit());
|
||||
@@ -217,7 +225,7 @@ public class LoanCOBFilterHelper implements InitializingBean {
|
||||
// check the body for Loan ID
|
||||
Long loanId = getTopLevelLoanIdFromBatchRequest(batchRequest);
|
||||
if (loanId != null) {
|
||||
if (isLoanHardLocked(loanId)) {
|
||||
if (isLoanHardLocked(loanId) && !isLockOverrulable(loanId)) {
|
||||
throw new LoanIdsHardLockedException(loanId);
|
||||
} else {
|
||||
loanIds.add(loanId);
|
||||
@@ -240,7 +248,7 @@ public class LoanCOBFilterHelper implements InitializingBean {
|
||||
|
||||
private List<Long> getLoanIdsFromApi(String pathInfo) {
|
||||
List<Long> loanIds = getLoanIdList(pathInfo);
|
||||
if (isLoanHardLocked(loanIds)) {
|
||||
if (isLoanHardLocked(loanIds) && !isLockOverrulable(loanIds)) {
|
||||
throw new LoanIdsHardLockedException(loanIds.get(0));
|
||||
} else {
|
||||
return loanIds;
|
||||
|
||||
Reference in New Issue
Block a user