You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ar...@apache.org on 2022/05/31 19:49:44 UTC
[fineract] branch develop updated: remove unused jobs
This is an automated email from the ASF dual-hosted git repository.
arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new e7b2d6dff remove unused jobs
e7b2d6dff is described below
commit e7b2d6dff5d6781203b056555e948cf2dd90fca2
Author: taskain7 <ta...@gmail.com>
AuthorDate: Tue May 31 09:58:49 2022 +0200
remove unused jobs
---
.../infrastructure/jobs/service/JobName.java | 6 +-
.../service/SavingsSchedularServiceImpl.java | 48 +++-----
.../service/ScheduledJobRunnerService.java | 4 -
.../service/ScheduledJobRunnerServiceImpl.java | 121 ---------------------
.../db/changelog/tenant/changelog-tenant.xml | 1 +
.../tenant/parts/0014_remove_unused_jobs.xml | 31 ++++++
.../integrationtests/SchedulerJobsTest.java | 10 +-
.../integrationtests/SchedulerJobsTestResults.java | 113 -------------------
8 files changed, 56 insertions(+), 278 deletions(-)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobName.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobName.java
index 2bbc911cd..23baa55cd 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobName.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobName.java
@@ -20,9 +20,9 @@ package org.apache.fineract.infrastructure.jobs.service;
public enum JobName {
- UPDATE_LOAN_SUMMARY("Update loan Summary"), UPDATE_LOAN_ARREARS_AGEING("Update Loan Arrears Ageing"), UPDATE_LOAN_PAID_IN_ADVANCE(
- "Update Loan Paid In Advance"), APPLY_ANNUAL_FEE_FOR_SAVINGS("Apply Annual Fee For Savings"), APPLY_HOLIDAYS_TO_LOANS(
- "Apply Holidays To Loans"), POST_INTEREST_FOR_SAVINGS("Post Interest For Savings"), TRANSFER_FEE_CHARGE_FOR_LOANS(
+ UPDATE_LOAN_ARREARS_AGEING("Update Loan Arrears Ageing"), APPLY_ANNUAL_FEE_FOR_SAVINGS(
+ "Apply Annual Fee For Savings"), APPLY_HOLIDAYS_TO_LOANS("Apply Holidays To Loans"), POST_INTEREST_FOR_SAVINGS(
+ "Post Interest For Savings"), TRANSFER_FEE_CHARGE_FOR_LOANS(
"Transfer Fee For Loans From Savings"), ACCOUNTING_RUNNING_BALANCE_UPDATE(
"Update Accounting Running Balances"), PAY_DUE_SAVINGS_CHARGES(
"Pay Due Savings Charges"), APPLY_CHARGE_TO_OVERDUE_LOAN_INSTALLMENT(
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularServiceImpl.java
index 915369fb2..4fd88edac 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularServiceImpl.java
@@ -32,6 +32,8 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
@@ -43,19 +45,16 @@ import org.apache.fineract.infrastructure.jobs.service.JobName;
import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler;
import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepositoryWrapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
@Service
+@Slf4j
+@RequiredArgsConstructor
public class SavingsSchedularServiceImpl implements SavingsSchedularService {
- private static final Logger LOG = LoggerFactory.getLogger(SavingsSchedularServiceImpl.class);
-
private final SavingsAccountAssembler savingAccountAssembler;
private final SavingsAccountWritePlatformService savingsAccountWritePlatformService;
private final SavingsAccountReadPlatformService savingAccountReadPlatformService;
@@ -67,23 +66,6 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
private Queue<List<SavingsAccountData>> queue = new ArrayDeque<>();
private int queueSize = 1;
- @Autowired
- public SavingsSchedularServiceImpl(final SavingsAccountAssembler savingAccountAssembler,
- final SavingsAccountWritePlatformService savingsAccountWritePlatformService,
- final SavingsAccountReadPlatformService savingAccountReadPlatformService,
- final SavingsAccountRepositoryWrapper savingsAccountRepository, final ApplicationContext applicationContext,
- final ConfigurationDomainService configurationDomainService, final JdbcTemplate jdbcTemplate,
- final TransactionTemplate transactionTemplate) {
- this.savingAccountAssembler = savingAccountAssembler;
- this.savingsAccountWritePlatformService = savingsAccountWritePlatformService;
- this.savingAccountReadPlatformService = savingAccountReadPlatformService;
- this.savingsAccountRepository = savingsAccountRepository;
- this.applicationContext = applicationContext;
- this.configurationDomainService = configurationDomainService;
- this.jdbcTemplate = jdbcTemplate;
- this.transactionTemplate = transactionTemplate;
- }
-
@Override
@CronTarget(jobName = JobName.POST_INTEREST_FOR_SAVINGS)
public void postInterestForAccounts(Map<String, String> jobParameters) throws JobExecutionException {
@@ -98,14 +80,14 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
long start = System.currentTimeMillis();
- LOG.info("Reading Savings Account Data!");
+ log.info("Reading Savings Account Data!");
List<SavingsAccountData> savingsAccounts = this.savingAccountReadPlatformService
.retrieveAllSavingsDataForInterestPosting(backdatedTxnsAllowedTill, pageSize, ACTIVE.getValue(), maxSavingsIdInList);
if (savingsAccounts != null && savingsAccounts.size() > 0) {
savingsAccounts = Collections.synchronizedList(savingsAccounts);
long finish = System.currentTimeMillis();
- LOG.info("Done fetching Data within {} milliseconds", finish - start);
+ log.info("Done fetching Data within {} milliseconds", finish - start);
if (savingsAccounts != null) {
queue.add(savingsAccounts);
}
@@ -113,7 +95,7 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
if (!CollectionUtils.isEmpty(queue)) {
do {
int totalFilteredRecords = savingsAccounts.size();
- LOG.info("Starting Interest posting - total records - {}", totalFilteredRecords);
+ log.info("Starting Interest posting - total records - {}", totalFilteredRecords);
List<SavingsAccountData> queueElement = queue.element();
maxSavingsIdInList = queueElement.get(queueElement.size() - 1).getId();
postInterest(queue.remove(), threadPoolSize, batchSize, executorService, backdatedTxnsAllowedTill, pageSize,
@@ -156,7 +138,7 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
}
while (queue.size() <= queueSize) {
- LOG.info("Fetching while threads are running!");
+ log.info("Fetching while threads are running!");
List<SavingsAccountData> savingsAccountDataList = Collections.synchronizedList(this.savingAccountReadPlatformService
.retrieveAllSavingsDataForInterestPosting(backdatedTxnsAllowedTill, pageSize, ACTIVE.getValue(), maxId));
if (savingsAccountDataList == null || savingsAccountDataList.isEmpty()) {
@@ -207,21 +189,21 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
}
while (queue.size() <= queueSize) {
- LOG.info("Fetching while threads are running!..:: this is not supposed to run........");
+ log.info("Fetching while threads are running!..:: this is not supposed to run........");
savingsAccounts = Collections.synchronizedList(this.savingAccountReadPlatformService
.retrieveAllSavingsDataForInterestPosting(backdatedTxnsAllowedTill, pageSize, ACTIVE.getValue(), maxId));
if (savingsAccounts == null || savingsAccounts.isEmpty()) {
break;
}
maxId = savingsAccounts.get(savingsAccounts.size() - 1).getId();
- LOG.info("Add to the Queue");
+ log.info("Add to the Queue");
queue.add(savingsAccounts);
}
checkCompletion(responses);
- LOG.info("Queue size {}", queue.size());
+ log.info("Queue size {}", queue.size());
} catch (InterruptedException e1) {
- LOG.error("Interrupted while postInterest", e1);
+ log.error("Interrupted while postInterest", e1);
}
}
@@ -253,12 +235,12 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
}
allThreadsExecuted = noOfThreadsExecuted == responses.size();
if (!allThreadsExecuted) {
- LOG.error("All threads could not execute.");
+ log.error("All threads could not execute.");
}
} catch (InterruptedException e1) {
- LOG.error("Interrupted while interest posting entries", e1);
+ log.error("Interrupted while interest posting entries", e1);
} catch (ExecutionException e2) {
- LOG.error("Execution exception while interest posting entries", e2);
+ log.error("Execution exception while interest posting entries", e2);
}
}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/scheduledjobs/service/ScheduledJobRunnerService.java b/fineract-provider/src/main/java/org/apache/fineract/scheduledjobs/service/ScheduledJobRunnerService.java
index e0f0cc560..b5239bf3c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/scheduledjobs/service/ScheduledJobRunnerService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/scheduledjobs/service/ScheduledJobRunnerService.java
@@ -22,10 +22,6 @@ import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException;
public interface ScheduledJobRunnerService {
- void updateLoanSummaryDetails();
-
- void updateLoanPaidInAdvance();
-
void applyAnnualFeeForSavings();
void applyDueChargesForSavings() throws JobExecutionException;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/scheduledjobs/service/ScheduledJobRunnerServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/scheduledjobs/service/ScheduledJobRunnerServiceImpl.java
index bb03e7296..862dc0d71 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/scheduledjobs/service/ScheduledJobRunnerServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/scheduledjobs/service/ScheduledJobRunnerServiceImpl.java
@@ -113,127 +113,6 @@ public class ScheduledJobRunnerServiceImpl implements ScheduledJobRunnerService
this.databaseTypeResolver = databaseTypeResolver;
}
- @Transactional
- @Override
- @CronTarget(jobName = JobName.UPDATE_LOAN_SUMMARY)
- public void updateLoanSummaryDetails() {
-
- final JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSourceServiceFactory.determineDataSourceService().retrieveDataSource());
-
- boolean isMySQL = databaseTypeResolver.isMySQL();
-
- String alias = isMySQL ? "l." : "";
- final String selectPart = new StringBuilder().append(" (SELECT ml.id AS loan_id, ")
- .append("SUM(mr.principal_amount) as principal_disbursed_derived, ")
- .append("SUM(COALESCE(mr.principal_completed_derived,0)) as principal_repaid_derived, ")
- .append("SUM(COALESCE(mr.principal_writtenoff_derived,0)) as principal_writtenoff_derived, ")
- .append("SUM(COALESCE(mr.interest_amount,0)) as interest_charged_derived, ")
- .append("SUM(COALESCE(mr.interest_completed_derived,0)) as interest_repaid_derived, ")
- .append("SUM(COALESCE(mr.interest_waived_derived,0)) as interest_waived_derived, ")
- .append("SUM(COALESCE(mr.interest_writtenoff_derived,0)) as interest_writtenoff_derived, ")
- .append("SUM(COALESCE(mr.fee_charges_amount,0)) + ")
- .append("COALESCE((select SUM(lc.amount) from m_loan_charge lc where lc.loan_id = ml.id and lc.is_active = true")
- .append(" and lc.charge_time_enum=1),0) as fee_charges_charged_derived, ")
- .append("SUM(COALESCE(mr.fee_charges_completed_derived,0)) + ")
- .append("COALESCE((select SUM(lc.amount_paid_derived) from m_loan_charge lc where lc.loan_id = ml.id and lc.is_active = true")
- .append(" and lc.charge_time_enum = 1), 0) as fee_charges_repaid_derived, ")
- .append("SUM(COALESCE(mr.fee_charges_waived_derived,0)) as fee_charges_waived_derived, ")
- .append("SUM(COALESCE(mr.fee_charges_writtenoff_derived,0)) as fee_charges_writtenoff_derived, ")
- .append("SUM(COALESCE(mr.penalty_charges_amount,0)) as penalty_charges_charged_derived, ")
- .append("SUM(COALESCE(mr.penalty_charges_completed_derived,0)) as penalty_charges_repaid_derived, ")
- .append("SUM(COALESCE(mr.penalty_charges_waived_derived,0)) as penalty_charges_waived_derived, ")
- .append("SUM(COALESCE(mr.penalty_charges_writtenoff_derived,0)) as penalty_charges_writtenoff_derived ")
- .append("FROM m_loan ml ").append("INNER JOIN m_loan_repayment_schedule mr on mr.loan_id = ml.id ")
- .append("WHERE ml.disbursedon_date is not null ").append("GROUP BY ml.id").append(") x").toString();
-
- final String setPart = new StringBuilder().append(" SET ").append(alias)
- .append("principal_disbursed_derived = x.principal_disbursed_derived, ").append(alias)
- .append("principal_repaid_derived = x.principal_repaid_derived, ").append(alias)
- .append("principal_writtenoff_derived = x.principal_writtenoff_derived, ").append(alias)
- .append("principal_outstanding_derived = (x.principal_disbursed_derived - (x.principal_repaid_derived + x.principal_writtenoff_derived)), ")
- .append(alias).append("interest_charged_derived = x.interest_charged_derived, ").append(alias)
- .append("interest_repaid_derived = x.interest_repaid_derived, ").append(alias)
- .append("interest_waived_derived = x.interest_waived_derived, ").append(alias)
- .append("interest_writtenoff_derived = x.interest_writtenoff_derived, ").append(alias)
- .append("interest_outstanding_derived = (x.interest_charged_derived - (x.interest_repaid_derived + x.interest_waived_derived + x.interest_writtenoff_derived)), ")
- .append(alias).append("fee_charges_charged_derived = x.fee_charges_charged_derived, ").append(alias)
- .append("fee_charges_repaid_derived = x.fee_charges_repaid_derived, ").append(alias)
- .append("fee_charges_waived_derived = x.fee_charges_waived_derived, ").append(alias)
- .append("fee_charges_writtenoff_derived = x.fee_charges_writtenoff_derived, ").append(alias)
- .append("fee_charges_outstanding_derived = (x.fee_charges_charged_derived - (x.fee_charges_repaid_derived + x.fee_charges_waived_derived + x.fee_charges_writtenoff_derived)), ")
- .append(alias).append("penalty_charges_charged_derived = x.penalty_charges_charged_derived, ").append(alias)
- .append("penalty_charges_repaid_derived = x.penalty_charges_repaid_derived, ").append(alias)
- .append("penalty_charges_waived_derived = x.penalty_charges_waived_derived, ").append(alias)
- .append("penalty_charges_writtenoff_derived = x.penalty_charges_writtenoff_derived, ").append(alias)
- .append("penalty_charges_outstanding_derived = (x.penalty_charges_charged_derived - (x.penalty_charges_repaid_derived + x.penalty_charges_waived_derived + x.penalty_charges_writtenoff_derived)), ")
- .append(alias)
- .append("total_expected_repayment_derived = (x.principal_disbursed_derived + x.interest_charged_derived + x.fee_charges_charged_derived + x.penalty_charges_charged_derived), ")
- .append(alias)
- .append("total_repayment_derived = (x.principal_repaid_derived + x.interest_repaid_derived + x.fee_charges_repaid_derived + x.penalty_charges_repaid_derived), ")
- .append(alias)
- .append("total_expected_costofloan_derived = (x.interest_charged_derived + x.fee_charges_charged_derived + x.penalty_charges_charged_derived), ")
- .append(alias)
- .append("total_costofloan_derived = (x.interest_repaid_derived + x.fee_charges_repaid_derived + x.penalty_charges_repaid_derived), ")
- .append(alias)
- .append("total_waived_derived = (x.interest_waived_derived + x.fee_charges_waived_derived + x.penalty_charges_waived_derived), ")
- .append(alias)
- .append("total_writtenoff_derived = (x.interest_writtenoff_derived + x.fee_charges_writtenoff_derived + x.penalty_charges_writtenoff_derived), ")
- .append(alias)
- .append("total_outstanding_derived = (x.principal_disbursed_derived - (x.principal_repaid_derived + x.principal_writtenoff_derived)) + ")
- .append("(x.interest_charged_derived - (x.interest_repaid_derived + x.interest_waived_derived + x.interest_writtenoff_derived)) + ")
- .append("(x.fee_charges_charged_derived - (x.fee_charges_repaid_derived + x.fee_charges_waived_derived + x.fee_charges_writtenoff_derived)) + ")
- .append("(x.penalty_charges_charged_derived - (x.penalty_charges_repaid_derived + x.penalty_charges_waived_derived + x.penalty_charges_writtenoff_derived))")
- .toString();
-
- String wherePart = " x.loan_id = l.id";
-
- final StringBuilder updateSqlBuilder = new StringBuilder();
- updateSqlBuilder.append("UPDATE m_loan l");
- if (isMySQL) {
- updateSqlBuilder.append(" JOIN").append(selectPart).append(" ON").append(wherePart).append(' ').append(setPart);
- } else {
- updateSqlBuilder.append(setPart).append(" FROM").append(selectPart).append(" WHERE").append(wherePart);
- }
- final int result = jdbcTemplate.update(updateSqlBuilder.toString());
-
- LOG.info("{}: Records affected by updateLoanSummaryDetails: {}", ThreadLocalContextUtil.getTenant().getName(), result);
- }
-
- @Transactional
- @Override
- @CronTarget(jobName = JobName.UPDATE_LOAN_PAID_IN_ADVANCE)
- public void updateLoanPaidInAdvance() {
-
- final JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSourceServiceFactory.determineDataSourceService().retrieveDataSource());
-
- jdbcTemplate.execute("truncate table m_loan_paid_in_advance");
-
- final StringBuilder updateSqlBuilder = new StringBuilder(900);
-
- updateSqlBuilder.append(
- "INSERT INTO m_loan_paid_in_advance(loan_id, principal_in_advance_derived, interest_in_advance_derived, fee_charges_in_advance_derived, penalty_charges_in_advance_derived, total_in_advance_derived)");
- updateSqlBuilder.append(" select ml.id as loanId,");
- updateSqlBuilder.append(" SUM(coalesce(mr.principal_completed_derived, 0)) as principal_in_advance_derived,");
- updateSqlBuilder.append(" SUM(coalesce(mr.interest_completed_derived, 0)) as interest_in_advance_derived,");
- updateSqlBuilder.append(" SUM(coalesce(mr.fee_charges_completed_derived, 0)) as fee_charges_in_advance_derived,");
- updateSqlBuilder.append(" SUM(coalesce(mr.penalty_charges_completed_derived, 0)) as penalty_charges_in_advance_derived,");
- updateSqlBuilder.append(
- " (SUM(coalesce(mr.principal_completed_derived, 0)) + SUM(coalesce(mr.interest_completed_derived, 0)) + SUM(coalesce(mr.fee_charges_completed_derived, 0)) + SUM(coalesce(mr.penalty_charges_completed_derived, 0))) as total_in_advance_derived");
- updateSqlBuilder.append(" FROM m_loan ml ");
- updateSqlBuilder.append(" INNER JOIN m_loan_repayment_schedule mr on mr.loan_id = ml.id ");
- updateSqlBuilder.append(" WHERE ml.loan_status_id = 300 ");
- updateSqlBuilder.append(" and mr.duedate >= " + sqlGenerator.currentDate() + " ");
- updateSqlBuilder.append(" GROUP BY ml.id");
- updateSqlBuilder
- .append(" HAVING (SUM(coalesce(mr.principal_completed_derived, 0)) + SUM(coalesce(mr.interest_completed_derived, 0)) +");
- updateSqlBuilder.append(
- " SUM(coalesce(mr.fee_charges_completed_derived, 0)) + SUM(coalesce(mr.penalty_charges_completed_derived, 0))) > 0.0");
-
- final int result = jdbcTemplate.update(updateSqlBuilder.toString());
-
- LOG.info("{}: Records affected by updateLoanPaidInAdvance: {}", ThreadLocalContextUtil.getTenant().getName(), result);
- }
-
@Override
@CronTarget(jobName = JobName.APPLY_ANNUAL_FEE_FOR_SAVINGS)
public void applyAnnualFeeForSavings() {
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
index 079c5e474..9d28ead57 100644
--- a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
@@ -33,4 +33,5 @@
<include file="parts/0011_add_credit_balance_refund_permission.xml" relativeToChangelogFile="true"/>
<include file="parts/0012_add_merchantissuedrefund_payoutrefund_goodwillcredit_permissions.xml" relativeToChangelogFile="true"/>
<include file="parts/0013_remove_topics.xml" relativeToChangelogFile="true"/>
+ <include file="parts/0014_remove_unused_jobs.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0014_remove_unused_jobs.xml b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0014_remove_unused_jobs.xml
new file mode 100644
index 000000000..30027f08d
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0014_remove_unused_jobs.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+ <changeSet author="fineract" id="1">
+ <delete tableName="job">
+ <where>name='Update loan Summary'</where>
+ </delete>
+ <delete tableName="job">
+ <where>name='Update Loan Paid In Advance'</where>
+ </delete>
+ </changeSet>
+</databaseChangeLog>
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java
index 5f093d72d..c36a2db90 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java
@@ -28,6 +28,7 @@ import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import org.apache.fineract.infrastructure.jobs.service.JobName;
import org.apache.fineract.integrationtests.common.SchedulerJobHelper;
import org.apache.fineract.integrationtests.common.Utils;
@@ -63,7 +64,7 @@ public class SchedulerJobsTest {
@AfterEach
public void tearDown() {
schedulerJobHelper.updateSchedulerStatus(originalSchedulerStatus);
- for (int jobId = 1; jobId < JobName.values().length; jobId++) {
+ for (Integer jobId : schedulerJobHelper.getAllSchedulerJobIds()) {
schedulerJobHelper.updateSchedulerJob(jobId, originalJobStatus.get(jobId));
}
}
@@ -74,9 +75,10 @@ public class SchedulerJobsTest {
// is a
// java.util.Date)
schedulerJobHelper.updateSchedulerStatus(true);
- schedulerJobHelper.updateSchedulerJob(1, true);
- String nextRunTimeText = await().until(() -> (String) schedulerJobHelper.getSchedulerJobById(1).get("nextRunTime"),
- nextRunTime -> nextRunTime != null);
+ int minJobId = schedulerJobHelper.getAllSchedulerJobIds().stream().mapToInt(number -> number).min().orElse(Integer.MAX_VALUE);
+ schedulerJobHelper.updateSchedulerJob(minJobId, true);
+ String nextRunTimeText = await().until(() -> (String) schedulerJobHelper.getSchedulerJobById(minJobId).get("nextRunTime"),
+ Objects::nonNull);
DateTimeFormatter.ISO_INSTANT.parse(nextRunTimeText);
}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java
index 27211eb63..e3cf9eada 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java
@@ -67,7 +67,6 @@ import org.apache.fineract.portfolio.account.domain.AccountTransferType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.MethodOrderer.MethodName;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
@@ -454,118 +453,6 @@ public class SchedulerJobsTestResults {
"Verifying Arrears Aging after Running Update Loan Arrears Aging Scheduler Job");
}
- @Test
- public void testUpdateLoanPaidInAdvanceJobOutcome() throws InterruptedException {
- this.schedulerJobHelper = new SchedulerJobHelper(requestSpec);
- this.loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
-
- DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US);
-
- Calendar todayDate = Calendar.getInstance();
-
- todayDate.add(Calendar.MONTH, -1);
- final String LOAN_DISBURSEMENT_DATE = dateFormat.format(todayDate.getTime());
-
- todayDate = Calendar.getInstance();
- todayDate.add(Calendar.DATE, -5);
- final String LOAN_FIRST_REPAYMENT_DATE = dateFormat.format(todayDate.getTime());
-
- final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
- Assertions.assertNotNull(clientID);
-
- final Integer loanProductID = createLoanProduct(null);
- Assertions.assertNotNull(loanProductID);
-
- final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null);
- Assertions.assertNotNull(loanID);
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- loanStatusHashMap = this.loanTransactionHelper.approveLoan(AccountTransferTest.LOAN_APPROVAL_DATE, loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
-
- String loanDetails = this.loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
- loanStatusHashMap = this.loanTransactionHelper.disburseLoan(LOAN_DISBURSEMENT_DATE, loanID,
- JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- ArrayList<HashMap> loanScheduleBefore = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID);
-
- Float totalDueForCurrentPeriod = (Float) loanScheduleBefore.get(1).get("totalDueForPeriod");
-
- this.loanTransactionHelper.makeRepayment(LOAN_FIRST_REPAYMENT_DATE, totalDueForCurrentPeriod, loanID);
-
- String JobName = "Update Loan Paid In Advance";
- this.schedulerJobHelper.executeAndAwaitJob(JobName);
- // Retrieving Loan Repayment Schedule after the successful
- // completion of
- // Update Loan Paid in Advance Scheduler Job
- ArrayList<HashMap> loanScheduleAfter = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID);
-
- Float totalPaidInAdvance = (Float) loanScheduleAfter.get(1).get("totalPaidInAdvanceForPeriod");
-
- Assertions.assertEquals(totalDueForCurrentPeriod, totalPaidInAdvance,
- "Verifying Loan Repayment in Advance after Running Update Loan Paid in Advance Scheduler Job");
- }
-
- // Invalid test case as it won't affect summary (Loan summary is properly
- // updated before running this job)
- @Disabled
- @Test
- public void testUpdateLoanSummaryJobOutcome() throws InterruptedException {
- this.schedulerJobHelper = new SchedulerJobHelper(requestSpec);
- this.loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec);
-
- DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US);
-
- Calendar todaysDate = Calendar.getInstance();
-
- todaysDate.add(Calendar.MONTH, -1);
- final String LOAN_DISBURSEMENT_DATE = dateFormat.format(todaysDate.getTime());
-
- todaysDate = Calendar.getInstance();
- todaysDate.add(Calendar.DATE, -5);
-
- final Integer clientID = ClientHelper.createClient(requestSpec, responseSpec);
- Assertions.assertNotNull(clientID);
-
- final Integer loanProductID = createLoanProduct(null);
- Assertions.assertNotNull(loanProductID);
-
- final Integer loanID = applyForLoanApplication(clientID.toString(), loanProductID.toString(), null);
- Assertions.assertNotNull(loanID);
-
- Integer disburseChargeId = ChargesHelper.createCharges(requestSpec, responseSpec, ChargesHelper.getLoanDisbursementJSON());
- Assertions.assertNotNull(disburseChargeId);
-
- this.loanTransactionHelper.addChargesForLoan(loanID,
- LoanTransactionHelper.getDisbursementChargesForLoanAsJSON(disburseChargeId.toString()));
- ArrayList<HashMap> chargesPendingState = this.loanTransactionHelper.getLoanCharges(loanID);
- Assertions.assertEquals(1, chargesPendingState.size());
-
- HashMap loanStatusHashMap = LoanStatusChecker.getStatusOfLoan(requestSpec, responseSpec, loanID);
- LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap);
-
- loanStatusHashMap = this.loanTransactionHelper.approveLoan(AccountTransferTest.LOAN_APPROVAL_DATE, loanID);
- LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap);
-
- String loanDetails = this.loanTransactionHelper.getLoanDetails(requestSpec, responseSpec, loanID);
- loanStatusHashMap = this.loanTransactionHelper.disburseLoan(LOAN_DISBURSEMENT_DATE, loanID,
- JsonPath.from(loanDetails).get("netDisbursalAmount").toString());
- LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap);
-
- HashMap loanSummaryBefore = this.loanTransactionHelper.getLoanSummary(requestSpec, responseSpec, loanID);
-
- String JobName = "Update loan Summary";
- this.schedulerJobHelper.executeAndAwaitJob(JobName);
- Float expectedSummaryAfterJob = (Float) loanSummaryBefore.get("totalExpectedRepayment")
- /* - (Float) loanSummaryBefore.get("feeChargesPaid") */;
- HashMap loanSummaryAfter = this.loanTransactionHelper.getLoanSummary(requestSpec, responseSpec, loanID);
- Assertions.assertEquals(expectedSummaryAfterJob, (Float) loanSummaryAfter.get("totalExpectedRepayment"),
- "Verifying Loan Summary after Running Update Loan Summary Scheduler Job");
- }
-
@Test
public void testExecuteStandingInstructionsJobOutcome() throws InterruptedException {
this.schedulerJobHelper = new SchedulerJobHelper(requestSpec);