diff --git a/fineract-provider/dependencies.gradle b/fineract-provider/dependencies.gradle index 4018682db..04a9d2c52 100644 --- a/fineract-provider/dependencies.gradle +++ b/fineract-provider/dependencies.gradle @@ -45,7 +45,6 @@ dependencies { 'com.sun.jersey.contribs:jersey-spring', 'com.sun.jersey.contribs:jersey-multipart', - 'joda-time:joda-time', 'com.google.guava:guava', 'com.google.code.gson:gson', 'com.sun.jersey:jersey-core', diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/AccountNumberPreferencesTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/AccountNumberPreferencesTest.java index 31abd7cda..ef02c3715 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/AccountNumberPreferencesTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/AccountNumberPreferencesTest.java @@ -62,7 +62,7 @@ public class AccountNumberPreferencesTest { private final String loanPrincipalAmount = "100000.00"; private final String numberOfRepayments = "12"; private final String interestRatePerPeriod = "18"; - private final String dateString = "4 September 2014"; + private final String dateString = "04 September 2014"; private final String minBalanceForInterestCalculation = null; private final String minRequiredBalance = null; private final String enforceMinRequiredBalance = "false"; diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/AccountingScenarioIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/AccountingScenarioIntegrationTest.java index 48fb8549e..1039f5a9e 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/AccountingScenarioIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/AccountingScenarioIntegrationTest.java @@ -30,6 +30,9 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; @@ -58,8 +61,6 @@ import org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDep import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; -import org.joda.time.Days; -import org.joda.time.LocalDate; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -81,7 +82,7 @@ public class AccountingScenarioIntegrationTest { private static final String LP_REPAYMENT_PERIOD = "2"; private static final String LP_INTEREST_RATE = "1"; private static final String EXPECTED_DISBURSAL_DATE = "04 March 2011"; - private static final String LOAN_APPLICATION_SUBMISSION_DATE = "3 March 2011"; + private static final String LOAN_APPLICATION_SUBMISSION_DATE = "03 March 2011"; private static final String TRANSACTION_DATE = "01 March 2013"; private static final String LOAN_TERM_FREQUENCY = "10"; private static final String INDIVIDUAL_LOAN = "individual"; @@ -786,18 +787,18 @@ public class AccountingScenarioIntegrationTest { final ArrayList loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID); // MAKE 1 List fromDateList = (List) loanSchedule.get(1).get("fromDate"); - LocalDate fromDateLocal = LocalDate.now(); + LocalDate fromDateLocal = LocalDate.now(ZoneId.systemDefault()); fromDateLocal = fromDateLocal.withYear((int) fromDateList.get(0)); - fromDateLocal = fromDateLocal.withMonthOfYear((int) fromDateList.get(1)); + fromDateLocal = fromDateLocal.withMonth((int) fromDateList.get(1)); fromDateLocal = fromDateLocal.withDayOfMonth((int) fromDateList.get(2)); List dueDateList = (List) loanSchedule.get(1).get("dueDate"); - LocalDate dueDateLocal = LocalDate.now(); + LocalDate dueDateLocal = LocalDate.now(ZoneId.systemDefault()); dueDateLocal = dueDateLocal.withYear((int) dueDateList.get(0)); - dueDateLocal = dueDateLocal.withMonthOfYear((int) dueDateList.get(1)); + dueDateLocal = dueDateLocal.withMonth((int) dueDateList.get(1)); dueDateLocal = dueDateLocal.withDayOfMonth((int) dueDateList.get(2)); - int totalDaysInPeriod = Days.daysBetween(fromDateLocal, dueDateLocal).getDays(); + int totalDaysInPeriod = Math.toIntExact(ChronoUnit.DAYS.between(fromDateLocal, dueDateLocal)); float totalInterest = (float) loanSchedule.get(1).get("interestOriginalDue"); DecimalFormat numberFormat = new DecimalFormat("#.00", new DecimalFormatSymbols(Locale.US)); @@ -890,18 +891,18 @@ public class AccountingScenarioIntegrationTest { final ArrayList loanSchedule = this.loanTransactionHelper.getLoanRepaymentSchedule(requestSpec, responseSpec, loanID); // MAKE 1 List fromDateList = (List) loanSchedule.get(1).get("fromDate"); - LocalDate fromDateLocal = LocalDate.now(); + LocalDate fromDateLocal = LocalDate.now(ZoneId.systemDefault()); fromDateLocal = fromDateLocal.withYear((int) fromDateList.get(0)); - fromDateLocal = fromDateLocal.withMonthOfYear((int) fromDateList.get(1)); + fromDateLocal = fromDateLocal.withMonth((int) fromDateList.get(1)); fromDateLocal = fromDateLocal.withDayOfMonth((int) fromDateList.get(2)); List dueDateList = (List) loanSchedule.get(1).get("dueDate"); - LocalDate dueDateLocal = LocalDate.now(); + LocalDate dueDateLocal = LocalDate.now(ZoneId.systemDefault()); dueDateLocal = dueDateLocal.withYear((int) dueDateList.get(0)); - dueDateLocal = dueDateLocal.withMonthOfYear((int) dueDateList.get(1)); + dueDateLocal = dueDateLocal.withMonth((int) dueDateList.get(1)); dueDateLocal = dueDateLocal.withDayOfMonth((int) dueDateList.get(2)); - int totalDaysInPeriod = Days.daysBetween(fromDateLocal, dueDateLocal).getDays(); + int totalDaysInPeriod = Math.toIntExact(ChronoUnit.DAYS.between(fromDateLocal, dueDateLocal)); float totalInterest = (float) loanSchedule.get(1).get("interestOriginalDue"); DecimalFormat numberFormat = new DecimalFormat("#.00", new DecimalFormatSymbols(Locale.US)); @@ -1041,7 +1042,7 @@ public class AccountingScenarioIntegrationTest { private LocalDate getDateAsLocalDate(String dateAsString) throws ParseException { DateFormat df = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - LocalDate date = new LocalDate(df.parse(dateAsString)); + LocalDate date = LocalDate.ofInstant(df.parse(dateAsString).toInstant(), ZoneId.systemDefault()); return date; } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java index ae8dce17b..a9777c3e8 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java @@ -31,9 +31,12 @@ import java.math.BigDecimal; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -54,7 +57,6 @@ import org.apache.fineract.integrationtests.common.savings.AccountTransferHelper import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; -import org.joda.time.LocalDate; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -755,7 +757,7 @@ public class ClientLoanIntegrationTest { final Integer loanProductID = createLoanProduct(true, NONE); List tranches = new ArrayList<>(); - tranches.add(createTrancheDetail("1 March 2014", "25000")); + tranches.add(createTrancheDetail("01 March 2014", "25000")); tranches.add(createTrancheDetail("23 April 2014", "20000")); final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, null, null, "45,000.00", tranches); @@ -765,12 +767,12 @@ public class ClientLoanIntegrationTest { LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoan("1 March 2014", loanID); + loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 March 2014", loanID); LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); // DISBURSE first Tranche - loanStatusHashMap = this.loanTransactionHelper.disburseLoan("1 March 2014", loanID); + loanStatusHashMap = this.loanTransactionHelper.disburseLoan("01 March 2014", loanID); LOG.info("DISBURSE {}", loanStatusHashMap); LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); @@ -798,7 +800,7 @@ public class ClientLoanIntegrationTest { MINIMUM_OPENING_BALANCE); List tranches = new ArrayList<>(); - tranches.add(createTrancheDetail("1 March 2014", "25000")); + tranches.add(createTrancheDetail("01 March 2014", "25000")); tranches.add(createTrancheDetail("23 April 2014", "20000")); final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, null, savingsId.toString(), "45,000.00", @@ -809,7 +811,7 @@ public class ClientLoanIntegrationTest { LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); LOG.info("-----------------------------------APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoan("1 March 2014", loanID); + loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 March 2014", loanID); LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); @@ -818,7 +820,7 @@ public class ClientLoanIntegrationTest { assertEquals(balance, summary.get("accountBalance"), "Verifying opening Balance"); // DISBURSE first Tranche - loanStatusHashMap = this.loanTransactionHelper.disburseLoanToSavings("1 March 2014", loanID); + loanStatusHashMap = this.loanTransactionHelper.disburseLoanToSavings("01 March 2014", loanID); LOG.info("DISBURSE {}", loanStatusHashMap.toString()); LoanStatusChecker.verifyLoanIsActive(loanStatusHashMap); @@ -949,8 +951,8 @@ public class ClientLoanIntegrationTest { .withAmortizationTypeAsEqualPrincipalPayments() // .withInterestTypeAsDecliningBalance() // .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // - .withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("2 June 2014") // - .withSubmittedOnDate("2 June 2014") // + .withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("02 June 2014") // + .withSubmittedOnDate("02 June 2014") // .build(clientID.toString(), loanProductID.toString(), null); return this.loanTransactionHelper.getLoanId(loanApplicationJSON); } @@ -989,9 +991,9 @@ public class ClientLoanIntegrationTest { .withAmortizationTypeAsEqualInstallments() // .withInterestTypeAsDecliningBalance() // .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // - .withExpectedDisbursementDate("1 March 2014") // + .withExpectedDisbursementDate("01 March 2014") // .withTranches(tranches) // - .withSubmittedOnDate("1 March 2014") // + .withSubmittedOnDate("01 March 2014") // .withCharges(charges).build(clientID.toString(), loanProductID.toString(), savingsId); return this.loanTransactionHelper.getLoanId(loanApplicationJSON); @@ -3089,7 +3091,7 @@ public class ClientLoanIntegrationTest { final HashMap repayment = loanSchedule.get(i); final ArrayList dueDateAsArray = (ArrayList) repayment.get("dueDate"); - final LocalDate transactionDate = new LocalDate(dueDateAsArray.get(0), dueDateAsArray.get(1), dueDateAsArray.get(2)); + final LocalDate transactionDate = LocalDate.of(dueDateAsArray.get(0), dueDateAsArray.get(1), dueDateAsArray.get(2)); final Float interestPortion = BigDecimal.valueOf(Double.valueOf(repayment.get("interestDue").toString())) .subtract(BigDecimal.valueOf(Double.valueOf(repayment.get("interestWaived").toString()))) @@ -4487,7 +4489,7 @@ public class ClientLoanIntegrationTest { // FINERACT-885: As loan may not have started exactly four months ago, // make final payment today and not four months from start (as that may be in the future) - fourMonthsfromNowCalendar.setTime(Utils.getLocalDateOfTenant().toDate()); + fourMonthsfromNowCalendar.setTime(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); final String now = Utils.convertDateToURLFormat(fourMonthsfromNowCalendar); this.loanTransactionHelper.makeRefundByCash(now, Float.valueOf("20"), loanID); @@ -4656,7 +4658,7 @@ public class ClientLoanIntegrationTest { // FINERACT-885: As loan may not have started exactly four months ago, // make final payment today and not four months from start (as that may be in the future) - fourMonthsfromNowCalendar.setTime(Utils.getLocalDateOfTenant().toDate()); + fourMonthsfromNowCalendar.setTime(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); final String now = Utils.convertDateToURLFormat(fourMonthsfromNowCalendar); this.loanTransactionHelper.makeRefundByCash(now, Float.valueOf("20"), loanID); @@ -4847,7 +4849,7 @@ public class ClientLoanIntegrationTest { // FINERACT-885: As loan may not have started exactly four months ago, // make final payment today and not four months from start (as that may be in the future) - fourMonthsfromNowCalendar.setTime(Utils.getLocalDateOfTenant().toDate()); + fourMonthsfromNowCalendar.setTime(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); final String now = Utils.convertDateToURLFormat(fourMonthsfromNowCalendar); final String FROM_LOAN_ACCOUNT_TYPE = "1"; @@ -5056,8 +5058,8 @@ public class ClientLoanIntegrationTest { .withRepaymentFrequencyTypeAsMonths() // .withInterestRatePerPeriod("2") // .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // - .withExpectedDisbursementDate("1 March 2014") // - .withSubmittedOnDate("1 March 2014") // + .withExpectedDisbursementDate("01 March 2014") // + .withSubmittedOnDate("01 March 2014") // .build(clientID.toString(), loanProductID.toString(), null); return this.loanTransactionHelper.getLoanId(loanApplicationJSON); } @@ -5080,8 +5082,8 @@ public class ClientLoanIntegrationTest { .withRepaymentFrequencyTypeAsMonths() // .withInterestRatePerPeriod("2") // .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // - .withExpectedDisbursementDate("1 March 2014") // - .withSubmittedOnDate("1 March 2014") // + .withExpectedDisbursementDate("01 March 2014") // + .withSubmittedOnDate("01 March 2014") // .build(clientID.toString(), loanProductID.toString(), null); return this.loanTransactionHelper.getLoanId(loanApplicationJSON); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java index 60d8dd508..0ccf4b994 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java @@ -30,6 +30,9 @@ import java.text.DateFormat; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -48,9 +51,6 @@ import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -649,8 +649,8 @@ public class ClientSavingsIntegrationTest { HashMap paidCharge = this.savingsAccountHelper.getSavingsCharge(savingsId, (Integer) savingsChargeForPay.get("id")); assertEquals(savingsChargeForPay.get("amount"), paidCharge.get("amountPaid")); List nextDueDates = (List) paidCharge.get("dueDate"); - LocalDate nextDueDate = new LocalDate((Integer) nextDueDates.get(0), (Integer) nextDueDates.get(1), (Integer) nextDueDates.get(2)); - LocalDate expectedNextDueDate = new LocalDate((Integer) dates.get(0), (Integer) dates.get(1), (Integer) dates.get(2)) + LocalDate nextDueDate = LocalDate.of((Integer) nextDueDates.get(0), (Integer) nextDueDates.get(1), (Integer) nextDueDates.get(2)); + LocalDate expectedNextDueDate = LocalDate.of((Integer) dates.get(0), (Integer) dates.get(1), (Integer) dates.get(2)) .plusWeeks((Integer) paidCharge.get("feeInterval")); assertEquals(expectedNextDueDate, nextDueDate); } @@ -1787,10 +1787,10 @@ public class ClientSavingsIntegrationTest { savingsList.add(savingsId); - final DateTimeFormatter formatter = DateTimeFormat.forPattern("dd MMMM yyyy"); - LocalDate transactionDate = new LocalDate(); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM yyyy"); + LocalDate transactionDate = LocalDate.now(ZoneId.systemDefault()); for (int i = 0; i < 4; i++) { - String transactionDateValue = formatter.print(transactionDate); + String transactionDateValue = formatter.format(transactionDate); Integer depositTransactionId = (Integer) this.savingsAccountHelper.depositToSavingsAccount(savingsList.get(i), DEPOSIT_AMOUNT, transactionDateValue, CommonConstants.RESPONSE_RESOURCE_ID); transactionDate = transactionDate.minusDays(30); @@ -1821,7 +1821,7 @@ public class ClientSavingsIntegrationTest { balance -= chargeAmt; assertEquals(balance, summary.get("accountBalance"), "Verifying account Balance"); - String transactionDateValue = formatter.print(new LocalDate()); + String transactionDateValue = formatter.format(LocalDate.now(ZoneId.systemDefault())); Integer depositTransactionId = (Integer) this.savingsAccountHelper.depositToSavingsAccount(savingsList.get(1), DEPOSIT_AMOUNT, transactionDateValue, CommonConstants.RESPONSE_RESOURCE_ID); savingsStatusHashMap = SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, savingsList.get(1)); @@ -1840,7 +1840,7 @@ public class ClientSavingsIntegrationTest { balance -= chargeAmt; assertEquals(balance, summary.get("accountBalance"), "Verifying account Balance"); - transactionDateValue = formatter.print(new LocalDate()); + transactionDateValue = formatter.format(LocalDate.now(ZoneId.systemDefault())); depositTransactionId = (Integer) this.savingsAccountHelper.depositToSavingsAccount(savingsList.get(2), DEPOSIT_AMOUNT, transactionDateValue, CommonConstants.RESPONSE_RESOURCE_ID); savingsStatusHashMap = SavingsStatusChecker.getStatusOfSavings(this.requestSpec, this.responseSpec, savingsList.get(2)); @@ -2030,7 +2030,7 @@ public class ClientSavingsIntegrationTest { error.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); Integer releaseTransactionId = this.savingsAccountHelper.releaseAmount(savingsId, holdTransactionId); - Date today = Utils.getLocalDateOfTenant().toDate(); + Date today = Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()); String todayDate = today.toString(); SimpleDateFormat dt1 = new SimpleDateFormat("dd MMM yyyy"); todayDate = dt1.format(today).toString(); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java index 024c710a2..e6f628adb 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java @@ -27,6 +27,7 @@ import io.restassured.specification.RequestSpecification; import io.restassured.specification.ResponseSpecification; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -123,7 +124,7 @@ public class ClientUndoRejectAndWithdrawalIntegrationTest { ClientStatusChecker.verifyClientPending(status); DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - Date todaysDate = Utils.getLocalDateOfTenant().toDate(); + Date todaysDate = Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()); final String undoRejectDate = dateFormat.format(todaysDate); ArrayList> clientErrorData = validationErrorHelper.undoRejectedclient(clientId, @@ -155,7 +156,7 @@ public class ClientUndoRejectAndWithdrawalIntegrationTest { status = this.clientHelper.rejectClient(clientId); ClientStatusChecker.verifyClientRejected(status); DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - Date tomorrowsDate = Utils.getLocalDateOfTenant().plusDays(1).toDate(); + Date tomorrowsDate = Date.from(Utils.getLocalDateOfTenant().plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant()); final String undoRejectDate = dateFormat.format(tomorrowsDate); ArrayList> clientErrorData = validationErrorHelper.undoWithdrawclient(clientId, CommonConstants.RESPONSE_ERROR, undoRejectDate); @@ -231,7 +232,7 @@ public class ClientUndoRejectAndWithdrawalIntegrationTest { HashMap status = ClientHelper.getClientStatus(requestSpec, responseSpec, String.valueOf(clientId)); DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - Date todaysDate = Utils.getLocalDateOfTenant().toDate(); + Date todaysDate = Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()); final String undoWithdrawDate = dateFormat.format(todaysDate); ArrayList> clientErrorData = validationErrorHelper.undoWithdrawclient(clientId, @@ -263,7 +264,7 @@ public class ClientUndoRejectAndWithdrawalIntegrationTest { status = this.clientHelper.withdrawClient(clientId); ClientStatusChecker.verifyClientWithdrawn(status); DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - Date tomorrowsDate = Utils.getLocalDateOfTenant().plusDays(1).toDate(); + Date tomorrowsDate = Date.from(Utils.getLocalDateOfTenant().plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant()); final String undoWithdrawDate = dateFormat.format(tomorrowsDate); ArrayList> clientErrorData = validationErrorHelper.undoWithdrawclient(clientId, CommonConstants.RESPONSE_ERROR, undoWithdrawDate); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FixedDepositTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FixedDepositTest.java index 503246ccb..129d3eb16 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FixedDepositTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FixedDepositTest.java @@ -29,6 +29,9 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -54,8 +57,6 @@ import org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProd import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; -import org.joda.time.DateTime; -import org.joda.time.Months; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -1565,12 +1566,12 @@ public class FixedDepositTest { Calendar activationDate = Calendar.getInstance(); activationDate.add(Calendar.MONTH, -1); activationDate.add(Calendar.DAY_OF_MONTH, -1); - DateTime startDate = new DateTime(activationDate.getTime()); + ZonedDateTime startDate = ZonedDateTime.ofInstant(activationDate.getTime().toInstant(), ZoneId.systemDefault()); Calendar prematureClosureDate = Calendar.getInstance(); - DateTime endDate = new DateTime(prematureClosureDate.getTime()); + ZonedDateTime endDate = ZonedDateTime.ofInstant(prematureClosureDate.getTime().toInstant(), ZoneId.systemDefault()); - Integer depositedPeriod = Months.monthsBetween(startDate, endDate).getMonths(); + Integer depositedPeriod = Math.toIntExact(ChronoUnit.MONTHS.between(startDate.toLocalDate(), endDate.toLocalDate())); Float interestRate = FixedDepositAccountHelper.getInterestRate(interestRateChartData, depositedPeriod); interestRate -= preClosurePenalInterestRate; @@ -1679,12 +1680,12 @@ public class FixedDepositTest { Calendar activationDate = Calendar.getInstance(); activationDate.add(Calendar.MONTH, -1); activationDate.add(Calendar.DAY_OF_MONTH, -1); - DateTime startDate = new DateTime(activationDate.getTime()); + ZonedDateTime startDate = ZonedDateTime.ofInstant(activationDate.getTime().toInstant(), ZoneId.systemDefault()); Calendar prematureClosureDate = Calendar.getInstance(); - DateTime endDate = new DateTime(prematureClosureDate.getTime()); + ZonedDateTime endDate = ZonedDateTime.ofInstant(prematureClosureDate.getTime().toInstant(), ZoneId.systemDefault()); - Integer depositedPeriod = Months.monthsBetween(startDate, endDate).getMonths(); + Integer depositedPeriod = Math.toIntExact(ChronoUnit.MONTHS.between(startDate.toLocalDate(), endDate.toLocalDate())); Float interestRate = FixedDepositAccountHelper.getInterestRate(interestRateChartData, depositedPeriod); interestRate -= preClosurePenalInterestRate; diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java index 8655b24f4..4c504d156 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java @@ -28,8 +28,11 @@ import io.restassured.specification.ResponseSpecification; import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Calendar; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -43,7 +46,6 @@ import org.apache.fineract.integrationtests.common.charges.ChargesHelper; import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; -import org.joda.time.LocalDate; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -754,13 +756,13 @@ public class GroupSavingsIntegrationTest { paidCharge = this.savingsAccountHelper.getSavingsCharge(savingsId, (Integer) savingsChargeForPay.get("id")); assertEquals(savingsChargeForPay.get("amount"), paidCharge.get("amountPaid")); List nextDueDates = (List) paidCharge.get("dueDate"); - LocalDate nextDueDate = new LocalDate((Integer) nextDueDates.get(0), (Integer) nextDueDates.get(1), (Integer) nextDueDates.get(2)); - LocalDate expectedNextDueDate = new LocalDate((Integer) dates.get(0), (Integer) dates.get(1), (Integer) dates.get(2)) + LocalDate nextDueDate = LocalDate.of((Integer) nextDueDates.get(0), (Integer) nextDueDates.get(1), (Integer) nextDueDates.get(2)); + LocalDate expectedNextDueDate = LocalDate.of((Integer) dates.get(0), (Integer) dates.get(1), (Integer) dates.get(2)) .plusWeeks((Integer) paidCharge.get("feeInterval")); assertEquals(expectedNextDueDate, nextDueDate); this.savingsAccountHelper.closeSavingsAccountAndGetBackRequiredField(savingsId, "true", null, - sdf.format(Utils.getLocalDateOfTenant().toDate())); + sdf.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()))); } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java index 8cb924c27..1ddd1199c 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java @@ -126,7 +126,7 @@ public class LoanApplicationApprovalTest { public void loanApplicationApprovalAndValidationForMultiDisburseLoans() { List createTranches = new ArrayList<>(); - createTranches.add(createTrancheDetail("1 March 2014", "1000")); + createTranches.add(createTrancheDetail("01 March 2014", "1000")); createTranches.add(createTrancheDetail("23 March 2014", "4000")); final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2014"); @@ -146,11 +146,11 @@ public class LoanApplicationApprovalTest { private void trancheLoansApprovedAmountLesserThanProposedAmount(Integer clientID, Integer loanProductID, List createTranches) { final String proposedAmount = "5000"; final String approvalAmount = "2000"; - final String approveDate = "1 March 2014"; - final String expectedDisbursementDate = "1 March 2014"; + final String approveDate = "01 March 2014"; + final String expectedDisbursementDate = "01 March 2014"; List approveTranches = new ArrayList<>(); - approveTranches.add(createTrancheDetail("1 March 2014", "1000")); + approveTranches.add(createTrancheDetail("01 March 2014", "1000")); approveTranches.add(createTrancheDetail("23 March 2014", "1000")); final Integer loanID = applyForLoanApplicationWithTranches(clientID, loanProductID, proposedAmount, createTranches); @@ -175,26 +175,26 @@ public class LoanApplicationApprovalTest { final String approvalAmount3 = "400"; final String approvalAmount4 = "200"; - final String approveDate = "1 March 2014"; - final String expectedDisbursementDate = "1 March 2014"; + final String approveDate = "01 March 2014"; + final String expectedDisbursementDate = "01 March 2014"; List approveTranche1 = new ArrayList<>(); - approveTranche1.add(createTrancheDetail("1 March 2014", "5000")); + approveTranche1.add(createTrancheDetail("01 March 2014", "5000")); approveTranche1.add(createTrancheDetail("23 March 2014", "5000")); List approveTranche2 = new ArrayList<>(); - approveTranche2.add(createTrancheDetail("1 March 2014", "1000")); + approveTranche2.add(createTrancheDetail("01 March 2014", "1000")); approveTranche2.add(createTrancheDetail("23 March 2014", "1000")); approveTranche2.add(createTrancheDetail("23 March 2014", "1000")); List approveTranche3 = new ArrayList<>(); - approveTranche3.add(createTrancheDetail("1 March 2014", "100")); + approveTranche3.add(createTrancheDetail("01 March 2014", "100")); approveTranche3.add(createTrancheDetail("23 March 2014", "100")); approveTranche3.add(createTrancheDetail("24 March 2014", "100")); approveTranche3.add(createTrancheDetail("25 March 2014", "100")); List approveTranche4 = new ArrayList<>(); - approveTranche4.add(createTrancheDetail("1 March 2014", "100")); + approveTranche4.add(createTrancheDetail("01 March 2014", "100")); approveTranche4.add(createTrancheDetail("23 March 2014", "100")); approveTranche4.add(createTrancheDetail("24 March 2014", "100")); @@ -263,10 +263,10 @@ public class LoanApplicationApprovalTest { // .withNumberOfRepayments("5").withRepaymentEveryAfter("1").withRepaymentFrequencyTypeAsMonths() // .withInterestRatePerPeriod("2") // - .withExpectedDisbursementDate("1 March 2014") // + .withExpectedDisbursementDate("01 March 2014") // .withTranches(tranches) // .withInterestTypeAsDecliningBalance() // - .withSubmittedOnDate("1 March 2014") // + .withSubmittedOnDate("01 March 2014") // .build(clientID.toString(), loanProductID.toString(), null); return this.loanTransactionHelper.getLoanId(loanApplicationJSON); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java index 9f3b62b0e..017ac44d3 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java @@ -62,9 +62,9 @@ public class LoanApplicationUndoLastTrancheTest { final String proposedAmount = "5000"; final String approvalAmount = "2000"; - final String approveDate = "1 March 2014"; - final String expectedDisbursementDate = "1 March 2014"; - final String disbursalDate = "1 March 2014"; + final String approveDate = "01 March 2014"; + final String expectedDisbursementDate = "01 March 2014"; + final String disbursalDate = "01 March 2014"; // CREATE CLIENT final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec, "01 January 2014"); @@ -79,12 +79,12 @@ public class LoanApplicationUndoLastTrancheTest { // CREATE TRANCHES List createTranches = new ArrayList<>(); - createTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("1 March 2014", "1000")); + createTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("01 March 2014", "1000")); createTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("23 June 2014", "4000")); // APPROVE TRANCHES List approveTranches = new ArrayList<>(); - approveTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("1 March 2014", "1000")); + approveTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("01 March 2014", "1000")); approveTranches.add(this.loanApplicationApprovalTest.createTrancheDetail("23 June 2014", "1000")); // APPLY FOR LOAN WITH TRANCHES @@ -141,10 +141,10 @@ public class LoanApplicationUndoLastTrancheTest { // .withNumberOfRepayments("5").withRepaymentEveryAfter("1").withRepaymentFrequencyTypeAsMonths() // .withInterestRatePerPeriod("2") // - .withExpectedDisbursementDate("1 March 2014") // + .withExpectedDisbursementDate("01 March 2014") // .withTranches(tranches) // .withInterestTypeAsDecliningBalance() // - .withSubmittedOnDate("1 March 2014") // + .withSubmittedOnDate("01 March 2014") // .build(clientID.toString(), loanProductID.toString(), null); return this.loanTransactionHelper.getLoanId(loanApplicationJSON); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursalDateValidationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursalDateValidationTest.java index 4a2bdff6a..322844808 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursalDateValidationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursalDateValidationTest.java @@ -61,7 +61,7 @@ public class LoanDisbursalDateValidationTest { public void loanApplicationValidateDisbursalDate() { final String proposedAmount = "5000"; - final String approveDate = "1 March 2014"; + final String approveDate = "01 March 2014"; final String disbursalDate = "02 March 2014"; // CREATE CLIENT @@ -102,7 +102,7 @@ public class LoanDisbursalDateValidationTest { private Integer applyForLoanApplication(final Integer clientID, final Integer loanProductID, final String proposedAmount) { final String loanApplication = new LoanApplicationTestBuilder().withPrincipal(proposedAmount).withLoanTermFrequency("5") .withLoanTermFrequencyAsMonths().withNumberOfRepayments("5").withRepaymentEveryAfter("1") - .withRepaymentFrequencyTypeAsMonths().withInterestRatePerPeriod("2").withExpectedDisbursementDate("1 March 2014") + .withRepaymentFrequencyTypeAsMonths().withInterestRatePerPeriod("2").withExpectedDisbursementDate("01 March 2014") .withSubmittedOnDate("26 February 2014").build(clientID.toString(), loanProductID.toString(), null); return this.loanTransactionHelper.getLoanId(loanApplication); } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java index 0a8381594..520a71e8f 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java @@ -382,8 +382,8 @@ public class LoanDisbursementDetailsIntegrationTest { String id = null; addTranches.add(this.loanTransactionHelper.createTrancheDetail(disbursementDetails.get(0).get("id").toString(), date, disbursementDetails.get(0).get("principal").toString())); - addTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "3 March 2014", "2000")); - addTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "4 March 2014", "500")); + addTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "03 March 2014", "2000")); + addTranches.add(this.loanTransactionHelper.createTrancheDetail(id, "04 March 2014", "500")); /* Add disbursement detail */ this.loanTransactionHelper.addAndDeleteDisbursementDetail(this.loanID, this.approvalAmount, this.expectedDisbursementDate, diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java index de62d0dc9..988654ad9 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java @@ -58,7 +58,7 @@ public class LoanRescheduleRequestTest { private final String loanPrincipalAmount = "100000.00"; private final String numberOfRepayments = "12"; private final String interestRatePerPeriod = "18"; - private final String dateString = "4 September 2014"; + private final String dateString = "04 September 2014"; @BeforeEach public void initialize() { diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanWithWaiveInterestAndWriteOffIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanWithWaiveInterestAndWriteOffIntegrationTest.java index 13af25b96..0fcbc5c7d 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanWithWaiveInterestAndWriteOffIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanWithWaiveInterestAndWriteOffIntegrationTest.java @@ -95,7 +95,7 @@ public class LoanWithWaiveInterestAndWriteOffIntegrationTest { LoanStatusChecker.verifyLoanIsPending(loanStatusHashMap); LOG.info("-----------------------------------RE-APPROVE LOAN-----------------------------------------"); - loanStatusHashMap = this.loanTransactionHelper.approveLoan("1 October 2010", loanID); + loanStatusHashMap = this.loanTransactionHelper.approveLoan("01 October 2010", loanID); LoanStatusChecker.verifyLoanIsApproved(loanStatusHashMap); LoanStatusChecker.verifyLoanIsWaitingForDisbursal(loanStatusHashMap); @@ -106,7 +106,7 @@ public class LoanWithWaiveInterestAndWriteOffIntegrationTest { // PERFORM REPAYMENTS AND CHECK LOAN STATUS this.loanTransactionHelper.verifyRepaymentScheduleEntryFor(1, 4000.0F, loanID); - this.loanTransactionHelper.makeRepayment("1 January 2011", 540.0f, loanID); + this.loanTransactionHelper.makeRepayment("01 January 2011", 540.0f, loanID); // UNDO DISBURSE LOAN loanStatusHashMap = this.loanTransactionHelper.undoDisbursal(loanID); @@ -122,20 +122,20 @@ public class LoanWithWaiveInterestAndWriteOffIntegrationTest { final float repayment_without_interest = 500.0f; this.loanTransactionHelper.verifyRepaymentScheduleEntryFor(1, 4000.0F, loanID); - this.loanTransactionHelper.makeRepayment("1 January 2011", repayment_with_interest, loanID); - this.loanTransactionHelper.makeRepayment("1 March 2011", repayment_with_interest, loanID); - this.loanTransactionHelper.waiveInterest("1 May 2011", INTEREST_VALUE_AMOUNT, loanID); - this.loanTransactionHelper.makeRepayment("1 May 2011", repayment_without_interest, loanID); - this.loanTransactionHelper.makeRepayment("1 July 2011", repayment_with_interest, loanID); - this.loanTransactionHelper.waiveInterest("1 September 2011", INTEREST_VALUE_AMOUNT, loanID); - this.loanTransactionHelper.makeRepayment("1 September 2011", repayment_without_interest, loanID); - this.loanTransactionHelper.makeRepayment("1 November 2011", repayment_with_interest, loanID); - this.loanTransactionHelper.waiveInterest("1 January 2012", INTEREST_VALUE_AMOUNT, loanID); - this.loanTransactionHelper.makeRepayment("1 January 2012", repayment_without_interest, loanID); + this.loanTransactionHelper.makeRepayment("01 January 2011", repayment_with_interest, loanID); + this.loanTransactionHelper.makeRepayment("01 March 2011", repayment_with_interest, loanID); + this.loanTransactionHelper.waiveInterest("01 May 2011", INTEREST_VALUE_AMOUNT, loanID); + this.loanTransactionHelper.makeRepayment("01 May 2011", repayment_without_interest, loanID); + this.loanTransactionHelper.makeRepayment("01 July 2011", repayment_with_interest, loanID); + this.loanTransactionHelper.waiveInterest("01 September 2011", INTEREST_VALUE_AMOUNT, loanID); + this.loanTransactionHelper.makeRepayment("01 September 2011", repayment_without_interest, loanID); + this.loanTransactionHelper.makeRepayment("01 November 2011", repayment_with_interest, loanID); + this.loanTransactionHelper.waiveInterest("01 January 2012", INTEREST_VALUE_AMOUNT, loanID); + this.loanTransactionHelper.makeRepayment("01 January 2012", repayment_without_interest, loanID); this.loanTransactionHelper.verifyRepaymentScheduleEntryFor(7, 1000.0f, loanID); // WRITE OFF LOAN AND CHECK ACCOUNT IS CLOSED - LoanStatusChecker.verifyLoanAccountIsClosed(this.loanTransactionHelper.writeOffLoan("1 March 2012", loanID)); + LoanStatusChecker.verifyLoanAccountIsClosed(this.loanTransactionHelper.writeOffLoan("01 March 2012", loanID)); } @@ -167,7 +167,7 @@ public class LoanWithWaiveInterestAndWriteOffIntegrationTest { final float repayment_with_interest = 680.0f; this.loanTransactionHelper.verifyRepaymentScheduleEntryFor(1, 4000.0F, loanID); - this.loanTransactionHelper.makeRepayment("1 January 2011", repayment_with_interest, loanID); + this.loanTransactionHelper.makeRepayment("01 January 2011", repayment_with_interest, loanID); HashMap toLoanSummaryAfter = this.loanTransactionHelper.getLoanSummary(requestSpec, responseSpec, loanID); Assertions.assertTrue(Float.valueOf("500.0").compareTo(Float.valueOf(String.valueOf(toLoanSummaryAfter.get("principalPaid")))) == 0, @@ -179,7 +179,7 @@ public class LoanWithWaiveInterestAndWriteOffIntegrationTest { "Checking for total paid "); // WRITE OFF LOAN AND CHECK ACCOUNT IS CLOSED - LoanStatusChecker.verifyLoanAccountIsClosed(this.loanTransactionHelper.writeOffLoan("1 January 2011", loanID)); + LoanStatusChecker.verifyLoanAccountIsClosed(this.loanTransactionHelper.writeOffLoan("01 January 2011", loanID)); toLoanSummaryAfter = this.loanTransactionHelper.getLoanSummary(requestSpec, responseSpec, loanID); Assertions.assertTrue( Float.valueOf("4000.0").compareTo(Float.valueOf(String.valueOf(toLoanSummaryAfter.get("principalWrittenOff")))) == 0, diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/MinimumDaysBetweenDisbursalAndFirstRepaymentTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/MinimumDaysBetweenDisbursalAndFirstRepaymentTest.java index 7acd7cfc0..944fea261 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/MinimumDaysBetweenDisbursalAndFirstRepaymentTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/MinimumDaysBetweenDisbursalAndFirstRepaymentTest.java @@ -58,7 +58,7 @@ public class MinimumDaysBetweenDisbursalAndFirstRepaymentTest { private final String loanPrincipalAmount = "100000.00"; private final String numberOfRepayments = "12"; private final String interestRatePerPeriod = "18"; - private final String groupActivationDate = "1 August 2014"; + private final String groupActivationDate = "01 August 2014"; @BeforeEach public void setup() { @@ -80,7 +80,7 @@ public class MinimumDaysBetweenDisbursalAndFirstRepaymentTest { // create all required entities this.createRequiredEntities(); - final String disbursalDate = "4 September 2014"; + final String disbursalDate = "04 September 2014"; final String firstRepaymentDate = "11 September 2014"; final String loanApplicationJSON = new LoanApplicationTestBuilder().withPrincipal(loanPrincipalAmount) @@ -130,8 +130,8 @@ public class MinimumDaysBetweenDisbursalAndFirstRepaymentTest { // server this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpecForStatusCode403); - final String disbursalDate = "4 September 2014"; - final String firstRepaymentDate = "5 September 2014"; + final String disbursalDate = "04 September 2014"; + final String firstRepaymentDate = "05 September 2014"; final String loanApplicationJSON = new LoanApplicationTestBuilder().withPrincipal(loanPrincipalAmount) .withLoanTermFrequency(numberOfRepayments).withLoanTermFrequencyAsWeeks().withNumberOfRepayments(numberOfRepayments) diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/RecurringDepositTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/RecurringDepositTest.java index f5238c110..feade00bc 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/RecurringDepositTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/RecurringDepositTest.java @@ -27,6 +27,9 @@ import io.restassured.specification.RequestSpecification; import io.restassured.specification.ResponseSpecification; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -53,8 +56,6 @@ import org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDep import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; -import org.joda.time.DateTime; -import org.joda.time.Months; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -1917,12 +1918,12 @@ public class RecurringDepositTest { Calendar activationDate = Calendar.getInstance(); activationDate.add(Calendar.MONTH, -1); activationDate.add(Calendar.DAY_OF_MONTH, -1); - DateTime start = new DateTime(activationDate.getTime()); + ZonedDateTime start = ZonedDateTime.ofInstant(activationDate.getTime().toInstant(), ZoneId.systemDefault()); Calendar prematureClosureDate = Calendar.getInstance(); - DateTime end = new DateTime(prematureClosureDate.getTime()); + ZonedDateTime end = ZonedDateTime.ofInstant(prematureClosureDate.getTime().toInstant(), ZoneId.systemDefault()); - Integer depositedPeriod = Months.monthsBetween(start, end).getMonths(); + Integer depositedPeriod = Math.toIntExact(ChronoUnit.MONTHS.between(start.toLocalDate(), end.toLocalDate())); Integer depositTransactionId = this.recurringDepositAccountHelper.depositToRecurringDepositAccount(recurringDepositAccountId, DEPOSIT_AMOUNT, expectedFirstDepositOnDate); @@ -2058,12 +2059,12 @@ public class RecurringDepositTest { Calendar activationDate = Calendar.getInstance(); activationDate.add(Calendar.MONTH, -1); activationDate.add(Calendar.DAY_OF_MONTH, -1); - DateTime start = new DateTime(activationDate.getTime()); + ZonedDateTime start = ZonedDateTime.ofInstant(activationDate.getTime().toInstant(), ZoneId.systemDefault()); Calendar prematureClosureDate = Calendar.getInstance(); - DateTime end = new DateTime(prematureClosureDate.getTime()); + ZonedDateTime end = ZonedDateTime.ofInstant(prematureClosureDate.getTime().toInstant(), ZoneId.systemDefault()); - Integer depositedPeriod = Months.monthsBetween(start, end).getMonths(); + Integer depositedPeriod = Math.toIntExact(ChronoUnit.MONTHS.between(start.toLocalDate(), end.toLocalDate())); Integer transactionIdForDeposit = this.recurringDepositAccountHelper.depositToRecurringDepositAccount(recurringDepositAccountId, DEPOSIT_AMOUNT, expectedFirstDepositOnDate); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CenterDomain.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CenterDomain.java index 3c1d9c1cc..6dfdf8a93 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CenterDomain.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CenterDomain.java @@ -19,7 +19,9 @@ package org.apache.fineract.integrationtests.common; import com.google.gson.Gson; +import java.time.ZoneId; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -153,7 +155,7 @@ public class CenterDomain implements Comparable { } else { map.put("active", "false"); if (submittedDate == null) { - map.put("submittedOnDate", Utils.getLocalDateOfTenant().toDate()); + map.put("submittedOnDate", Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); } else { map.put("submittedOnDate", submittedDate); } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java index db2610823..ea037e084 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java @@ -27,6 +27,7 @@ import io.restassured.specification.ResponseSpecification; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -235,7 +236,8 @@ public class ProvisioningIntegrationTest { DateFormat formatter = new SimpleDateFormat("MMM dd, yyyy"); Date date1 = formatter.parse(date); DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); - String formattedString = simple.format(Utils.getLocalDateOfTenant().toDate()); + String formattedString = simple + .format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); Date currentDate = simple.parse(formattedString); if (date1.getTime() == currentDate.getTime()) { provisioningetryAlreadyCreated = true; diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/Utils.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/Utils.java index f968cdefc..eb21f26fb 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/Utils.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/Utils.java @@ -33,14 +33,14 @@ import java.io.File; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Calendar; import java.util.Locale; import java.util.Random; import java.util.TimeZone; import org.apache.commons.lang3.StringUtils; import org.apache.http.conn.HttpHostConnectException; -import org.joda.time.DateTimeZone; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -231,10 +231,10 @@ public final class Utils { } public static LocalDate getLocalDateOfTenant() { - LocalDate today = new LocalDate(); - final DateTimeZone zone = DateTimeZone.forID(TENANT_TIME_ZONE); + LocalDate today = LocalDate.now(ZoneId.systemDefault()); + final ZoneId zone = ZoneId.of(TENANT_TIME_ZONE); if (zone != null) { - today = new LocalDate(zone); + today = LocalDate.now(zone); } return today; } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java index 168c0d85f..ceb38c3cd 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java @@ -28,6 +28,7 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -38,7 +39,6 @@ import org.apache.fineract.integrationtests.common.CommonConstants; import org.apache.fineract.integrationtests.common.Utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -647,7 +647,7 @@ public class LoanTransactionHelper { if (isAccrualTransaction) { ArrayList accrualEntryDateAsArray = (ArrayList) transactions.get(i).get("date"); - LocalDate accrualEntryDate = new LocalDate(accrualEntryDateAsArray.get(0), accrualEntryDateAsArray.get(1), + LocalDate accrualEntryDate = LocalDate.of(accrualEntryDateAsArray.get(0), accrualEntryDateAsArray.get(1), accrualEntryDateAsArray.get(2)); if (transactionDate.equals(accrualEntryDate)) { diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java index 056c6a592..d6b6a2c72 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java @@ -25,11 +25,13 @@ import com.google.gson.Gson; import io.restassured.path.json.JsonPath; import io.restassured.specification.RequestSpecification; import io.restassured.specification.ResponseSpecification; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import org.apache.fineract.integrationtests.common.Utils; import org.apache.fineract.integrationtests.common.report.ReportData; -import org.joda.time.LocalDateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; @@ -86,7 +88,7 @@ public class CampaignsHelper { LOG.info("------------------------------PERFORM ACTION ON CAMPAIGN DETAILS------------------------------------\n"); final String SMS_CAMPAIGNS_ACTION_URL = SMS_CAMPAIGNS_URL + "/" + generatedCampaignId + "?command=" + command + "&" + Utils.TENANT_IDENTIFIER; - String actionDate = Utils.getLocalDateOfTenant().toString(DATE_FORMAT); + String actionDate = Utils.getLocalDateOfTenant().format(DateTimeFormatter.ofPattern(DATE_FORMAT)); return Utils.performServerPost(requestSpec, responseSpec, SMS_CAMPAIGNS_ACTION_URL, getJSONForCampaignAction(command, actionDate), "resourceId"); } @@ -107,7 +109,7 @@ public class CampaignsHelper { map.put("providerId", 1); map.put("triggerType", triggerType); if (2 == triggerType) { - map.put("recurrenceStartDate", LocalDateTime.now().toString(DATE_TIME_FORMAT)); + map.put("recurrenceStartDate", LocalDateTime.now(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT))); map.put("frequency", 1); map.put("interval", "1"); } @@ -134,7 +136,7 @@ public class CampaignsHelper { map.put("providerId", 1); map.put("triggerType", triggerType); if (2 == triggerType) { - map.put("recurrenceStartDate", LocalDateTime.now().toString(DATE_TIME_FORMAT)); + map.put("recurrenceStartDate", LocalDateTime.now(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT))); } map.put("campaignName", Utils.randomNameGenerator("Campaign_Name_", 5)); map.put("campaignType", 1); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/CampaignsTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/CampaignsTest.java index 135c537fe..714d93edc 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/CampaignsTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/CampaignsTest.java @@ -27,6 +27,7 @@ import io.restassured.builder.ResponseSpecBuilder; import io.restassured.http.ContentType; import io.restassured.specification.RequestSpecification; import io.restassured.specification.ResponseSpecification; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import org.apache.fineract.integrationtests.common.CommonConstants; @@ -206,7 +207,8 @@ public class CampaignsTest { // activating campaign with failure ArrayList> campaignDateValidationData = (ArrayList>) campaignsHelperWithError .performActionsOnCampaignWithFailure(campaignId, ACTIVATE_COMMAND, - Utils.getLocalDateOfTenant().plusDays(1).toString(DATE_FORMAT), CommonConstants.RESPONSE_ERROR); + Utils.getLocalDateOfTenant().plusDays(1).format(DateTimeFormatter.ofPattern(DATE_FORMAT)), + CommonConstants.RESPONSE_ERROR); assertEquals("error.msg.campaign.activationDate.in.the.future", campaignDateValidationData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); @@ -218,7 +220,7 @@ public class CampaignsTest { // activating campaign with failure ArrayList> campaignErrorData = (ArrayList>) campaignsHelperWithError .performActionsOnCampaignWithFailure(activatedCampaignId, ACTIVATE_COMMAND, - Utils.getLocalDateOfTenant().toString(DATE_FORMAT), CommonConstants.RESPONSE_ERROR); + Utils.getLocalDateOfTenant().format(DateTimeFormatter.ofPattern(DATE_FORMAT)), CommonConstants.RESPONSE_ERROR); assertEquals("error.msg.campaign.already.active", campaignErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); // closing campaign again for deletion diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java index f7c82fad9..98d369d4c 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java @@ -459,8 +459,8 @@ public class EntityDatatableChecksIntegrationTest { .withAmortizationTypeAsEqualPrincipalPayments() // .withInterestTypeAsDecliningBalance() // .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // - .withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("2 June 2014") // - .withSubmittedOnDate("2 June 2014") // + .withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("02 June 2014") // + .withSubmittedOnDate("02 June 2014") // .withDatatables(getTestDatatableAsJson(registeredTableName)) // .build(clientID.toString(), loanProductID.toString(), null); return this.loanTransactionHelper.getLoanId(loanApplicationJSON); @@ -480,8 +480,8 @@ public class EntityDatatableChecksIntegrationTest { .withAmortizationTypeAsEqualPrincipalPayments() // .withInterestTypeAsDecliningBalance() // .withInterestCalculationPeriodTypeSameAsRepaymentPeriod() // - .withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("2 June 2014") // - .withSubmittedOnDate("2 June 2014") // + .withPrincipalGrace(graceOnPrincipalPayment).withExpectedDisbursementDate("02 June 2014") // + .withSubmittedOnDate("02 June 2014") // .build(clientID.toString(), loanProductID.toString(), null); return this.validationErrorHelper.getLoanError(loanApplicationJSON, responseAttribute); } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningHelper.java index 6e2747f17..009fa1930 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningHelper.java @@ -21,7 +21,9 @@ package org.apache.fineract.integrationtests.common.provisioning; import com.google.gson.Gson; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.ZoneId; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Random; @@ -40,7 +42,7 @@ public final class ProvisioningHelper { map.put("loanProducts", addLoanProducts(loanProducts)); map.put("definitions", addProvisioningCategories(categories, liability, expense)); DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); - String formattedString = simple.format(Utils.getLocalDateOfTenant().toDate()); + String formattedString = simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); Random rand = new Random(); String criteriaName = "General Provisioning Criteria" + formattedString + rand.nextLong(); map.put("criteriaName", criteriaName); @@ -54,7 +56,7 @@ public final class ProvisioningHelper { map.put("locale", "en"); map.put("dateFormat", "dd MMMM yyyy"); DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); - map.put("date", simple.format(Utils.getLocalDateOfTenant().toDate())); + map.put("date", simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()))); String provisioningEntryCreateJson = new Gson().toJson(map); return provisioningEntryCreateJson; } @@ -65,7 +67,7 @@ public final class ProvisioningHelper { map.put("locale", "en"); map.put("dateFormat", "dd MMMM yyyy"); DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); - map.put("date", simple.format(Utils.getLocalDateOfTenant().toDate())); + map.put("date", simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()))); String provisioningEntryCreateJson = new Gson().toJson(map); return provisioningEntryCreateJson; } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java index 187a87119..b9ae03ae2 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java @@ -26,6 +26,7 @@ import io.restassured.specification.RequestSpecification; import io.restassured.specification.ResponseSpecification; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -200,7 +201,9 @@ public class ShareAccountIntegrationTests { } else if (transactionType.equals("charge.payment")) { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("0", String.valueOf(transaction.get("amountPaid"))); - Assertions.assertEquals(simple.format(Utils.getLocalDateOfTenant().toDate()), simple.format(date)); + Assertions.assertEquals( + simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())), + simple.format(date)); } } @@ -249,7 +252,8 @@ public class ShareAccountIntegrationTests { Calendar cal = Calendar.getInstance(); cal.set(dateList.get(0), dateList.get(1) - 1, dateList.get(2)); Date rejectedDate = cal.getTime(); - Assertions.assertEquals(simple.format(Utils.getLocalDateOfTenant().toDate()), simple.format(rejectedDate)); + Assertions.assertEquals(simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())), + simple.format(rejectedDate)); List> transactions = (List>) shareAccountData.get("purchasedShares"); Assertions.assertNotNull(transactions); @@ -272,7 +276,7 @@ public class ShareAccountIntegrationTests { } else if (transactionType.equals("charge.payment")) { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("0", String.valueOf(transaction.get("amountPaid"))); - Date transactionDate = Utils.getLocalDateOfTenant().toDate(); + Date transactionDate = Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()); Assertions.assertEquals(simple.format(transactionDate), simple.format(date)); } } @@ -358,7 +362,9 @@ public class ShareAccountIntegrationTests { } else if (transactionType.equals("charge.payment")) { Assertions.assertEquals("2.0", String.valueOf(transaction.get("amount"))); Assertions.assertEquals("0", String.valueOf(transaction.get("amountPaid"))); - Assertions.assertEquals(simple.format(Utils.getLocalDateOfTenant().toDate()), simple.format(date)); + Assertions.assertEquals( + simple.format(Date.from(Utils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())), + simple.format(date)); } } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareProductHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareProductHelper.java index 6c75392b8..659fb6a05 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareProductHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareProductHelper.java @@ -21,13 +21,13 @@ package org.apache.fineract.integrationtests.common.shares; import com.google.gson.Gson; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.integrationtests.common.Utils; -import org.joda.time.LocalDate; import org.junit.jupiter.api.Assertions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/serialization/AccrualAccountingDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/serialization/AccrualAccountingDataValidator.java index c4ee398b1..37ba52a4e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/serialization/AccrualAccountingDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/serialization/AccrualAccountingDataValidator.java @@ -24,6 +24,7 @@ import static org.apache.fineract.accounting.accrual.api.AccrualAccountingConsta import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -40,7 +41,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromApiJsonDeserial import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.loanaccount.guarantor.command.GuarantorCommand; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/service/AccrualAccountingWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/service/AccrualAccountingWritePlatformServiceImpl.java index f20bcf028..521c809bf 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/service/AccrualAccountingWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/service/AccrualAccountingWritePlatformServiceImpl.java @@ -22,6 +22,7 @@ import static org.apache.fineract.accounting.accrual.api.AccrualAccountingConsta import static org.apache.fineract.accounting.accrual.api.AccrualAccountingConstants.PERIODIC_ACCRUAL_ACCOUNTING_RESOURCE_NAME; import static org.apache.fineract.accounting.accrual.api.AccrualAccountingConstants.accrueTillParamName; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.accounting.accrual.serialization.AccrualAccountingDataValidator; @@ -32,7 +33,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.MultiException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.portfolio.loanaccount.service.LoanAccrualPlatformService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResourceSwagger.java index 1464c33ad..8faa5050f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResourceSwagger.java @@ -19,7 +19,7 @@ package org.apache.fineract.accounting.closure.api; import io.swagger.v3.oas.annotations.media.Schema; -import org.joda.time.LocalDate; +import java.time.LocalDate; final class GLClosuresApiResourceSwagger { diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/command/GLClosureCommand.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/command/GLClosureCommand.java index e59d75dab..3b0b82682 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/command/GLClosureCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/command/GLClosureCommand.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.accounting.closure.command; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.accounting.closure.api.GLClosureJsonInputParams; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.joda.time.LocalDate; /** * Immutable command for adding an accounting closure diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/data/GLClosureData.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/data/GLClosureData.java index e346b2d18..69845144f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/data/GLClosureData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/data/GLClosureData.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.accounting.closure.data; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import org.apache.fineract.organisation.office.data.OfficeData; -import org.joda.time.LocalDate; /** * Immutable object representing a General Ledger Account diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/exception/GLClosureDuplicateException.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/exception/GLClosureDuplicateException.java index 41ea6ef15..35a4efa35 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/exception/GLClosureDuplicateException.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/exception/GLClosureDuplicateException.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.accounting.closure.exception; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.exception.AbstractPlatformDomainRuleException; -import org.joda.time.LocalDate; /** * A {@link RuntimeException} thrown when a GL Closure for a given date and Office combination is already present diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/serialization/GLClosureCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/serialization/GLClosureCommandFromApiJsonDeserializer.java index a0e9a4251..ef4f31a01 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/serialization/GLClosureCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/serialization/GLClosureCommandFromApiJsonDeserializer.java @@ -21,6 +21,7 @@ package org.apache.fineract.accounting.closure.serialization; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.Map; import java.util.Set; import org.apache.commons.lang3.StringUtils; @@ -31,7 +32,6 @@ import org.apache.fineract.infrastructure.core.serialization.AbstractFromApiJson import org.apache.fineract.infrastructure.core.serialization.FromApiJsonDeserializer; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.loanaccount.guarantor.command.GuarantorCommand; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureReadPlatformServiceImpl.java index a875f2e0b..c1e0225e0 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureReadPlatformServiceImpl.java @@ -20,13 +20,13 @@ package org.apache.fineract.accounting.closure.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Arrays; import java.util.List; import org.apache.fineract.accounting.closure.data.GLClosureData; import org.apache.fineract.accounting.closure.exception.GLClosureNotFoundException; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureWritePlatformServiceJpaRepositoryImpl.java index d2960ac06..fb97b8efd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/service/GLClosureWritePlatformServiceJpaRepositoryImpl.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.accounting.closure.service; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.Map; import org.apache.fineract.accounting.closure.api.GLClosureJsonInputParams; @@ -36,7 +38,6 @@ import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuild import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -149,7 +150,8 @@ public class GLClosureWritePlatformServiceJpaRepositoryImpl implements GLClosure private void handleGLClosureIntegrityIssues(final JsonCommand command, final Throwable realCause, NonTransientDataAccessException dve) { if (realCause.getMessage().contains("office_id_closing_date")) { throw new GLClosureDuplicateException(command.longValueOfParameterNamed(GLClosureJsonInputParams.OFFICE_ID.getValue()), - new LocalDate(command.dateValueOfParameterNamed(GLClosureJsonInputParams.CLOSING_DATE.getValue()))); + LocalDate.ofInstant(command.dateValueOfParameterNamed(GLClosureJsonInputParams.CLOSING_DATE.getValue()).toInstant(), + ZoneId.systemDefault())); } LOG.error("Error occured.", dve); diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/DateParam.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/DateParam.java index 40081c952..e9c8373cd 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/DateParam.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/DateParam.java @@ -18,11 +18,12 @@ */ package org.apache.fineract.accounting.journalentry.api; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.Locale; import javax.ws.rs.WebApplicationException; import org.apache.fineract.infrastructure.core.serialization.JsonParserHelper; -import org.joda.time.LocalDate; /** * Class for parsing dates sent as query parameters @@ -40,6 +41,6 @@ public class DateParam { public Date getDate(final String parameterName, final String dateFormat, final String localeAsString) { final Locale locale = JsonParserHelper.localeFromString(localeAsString); final LocalDate localDate = JsonParserHelper.convertFrom(this.dateAsString, parameterName, dateFormat, locale); - return localDate.toDate(); + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/command/JournalEntryCommand.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/command/JournalEntryCommand.java index ef16c3b6e..9cc556c9f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/command/JournalEntryCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/command/JournalEntryCommand.java @@ -19,13 +19,13 @@ package org.apache.fineract.accounting.journalentry.command; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.accounting.journalentry.api.JournalEntryJsonInputParams; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.joda.time.LocalDate; /** * Immutable command for adding an accounting closure diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/JournalEntryData.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/JournalEntryData.java index fd4b5e67f..3c00ab31c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/JournalEntryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/JournalEntryData.java @@ -19,11 +19,11 @@ package org.apache.fineract.accounting.journalentry.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.accounting.glaccount.data.GLAccountData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; -import org.joda.time.LocalDate; /** * Immutable object representing a General Ledger Account diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/OfficeOpeningBalancesData.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/OfficeOpeningBalancesData.java index 627dc8f1f..7ea43a87b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/OfficeOpeningBalancesData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/OfficeOpeningBalancesData.java @@ -18,9 +18,9 @@ */ package org.apache.fineract.accounting.journalentry.data; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.accounting.glaccount.data.GLAccountData; -import org.joda.time.LocalDate; public final class OfficeOpeningBalancesData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/serialization/JournalEntryCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/serialization/JournalEntryCommandFromApiJsonDeserializer.java index 2741eda53..d9ced0ef8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/serialization/JournalEntryCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/serialization/JournalEntryCommandFromApiJsonDeserializer.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.HashSet; import java.util.Locale; import java.util.Map; @@ -36,7 +37,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.serialization.AbstractFromApiJsonDeserializer; import org.apache.fineract.infrastructure.core.serialization.FromApiJsonDeserializer; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java index 5d98dcd98..cda9f5273 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java @@ -19,6 +19,8 @@ package org.apache.fineract.accounting.journalentry.service; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; @@ -72,7 +74,6 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionEnumD import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionRepository; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountTransactionEnumData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -131,7 +132,7 @@ public class AccountingProcessorHelper { for (final Map map : newTransactionsMap) { final Long transactionOfficeId = (Long) map.get("officeId"); final String transactionId = ((Long) map.get("id")).toString(); - final Date transactionDate = ((LocalDate) map.get("date")).toDate(); + final Date transactionDate = Date.from(((LocalDate) map.get("date")).atStartOfDay(ZoneId.systemDefault()).toInstant()); final LoanTransactionEnumData transactionType = (LoanTransactionEnumData) map.get("type"); final BigDecimal amount = (BigDecimal) map.get("amount"); final BigDecimal principal = (BigDecimal) map.get("principalPortion"); @@ -198,7 +199,7 @@ public class AccountingProcessorHelper { for (final Map map : newTransactionsMap) { final Long transactionOfficeId = (Long) map.get("officeId"); final String transactionId = ((Long) map.get("id")).toString(); - final Date transactionDate = ((LocalDate) map.get("date")).toDate(); + final Date transactionDate = Date.from(((LocalDate) map.get("date")).atStartOfDay(ZoneId.systemDefault()).toInstant()); final SavingsAccountTransactionEnumData transactionType = (SavingsAccountTransactionEnumData) map.get("type"); final BigDecimal amount = (BigDecimal) map.get("amount"); final boolean reversed = (Boolean) map.get("reversed"); @@ -267,7 +268,7 @@ public class AccountingProcessorHelper { for (final Map map : newTransactionsMap) { final Long transactionOfficeId = (Long) map.get("officeId"); final String transactionId = ((Long) map.get("id")).toString(); - final Date transactionDate = ((LocalDate) map.get("date")).toDate(); + final Date transactionDate = Date.from(((LocalDate) map.get("date")).atStartOfDay(ZoneId.systemDefault()).toInstant()); final ShareAccountTransactionEnumData transactionType = (ShareAccountTransactionEnumData) map.get("type"); final ShareAccountTransactionEnumData transactionStatus = (ShareAccountTransactionEnumData) map.get("status"); final BigDecimal amount = (BigDecimal) map.get("amount"); @@ -303,7 +304,8 @@ public class AccountingProcessorHelper { final Long transactionOfficeId = (Long) accountingBridgeData.get("officeId"); final Long clientId = (Long) accountingBridgeData.get("clientId"); final Long transactionId = (Long) accountingBridgeData.get("id"); - final Date transactionDate = ((LocalDate) accountingBridgeData.get("date")).toDate(); + final Date transactionDate = Date + .from(((LocalDate) accountingBridgeData.get("date")).atStartOfDay(ZoneId.systemDefault()).toInstant()); final EnumOptionData transactionType = (EnumOptionData) accountingBridgeData.get("type"); final BigDecimal amount = (BigDecimal) accountingBridgeData.get("amount"); final boolean reversed = (Boolean) accountingBridgeData.get("reversed"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java index abdcd2f08..18bb96e4b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java @@ -23,6 +23,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -60,7 +61,6 @@ import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionEnumData; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java index 3518f51b7..d91e94b11 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java @@ -19,6 +19,8 @@ package org.apache.fineract.accounting.journalentry.service; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -76,7 +78,6 @@ import org.apache.fineract.portfolio.client.domain.ClientTransaction; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -592,7 +593,7 @@ public class JournalEntryWritePlatformServiceJpaRepositoryImpl implements Journa private void validateBusinessRulesForJournalEntries(final JournalEntryCommand command) { /** check if date of Journal entry is valid ***/ final LocalDate entryLocalDate = command.getTransactionDate(); - final Date transactionDate = entryLocalDate.toDateTimeAtStartOfDay().toDate(); + final Date transactionDate = Date.from(entryLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); // shouldn't be in the future final Date todaysDate = new Date(); if (transactionDate.after(todaysDate)) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/serialization/ProvisioningEntriesDefinitionJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/serialization/ProvisioningEntriesDefinitionJsonDeserializer.java index e6b4d66c5..206664d3e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/serialization/ProvisioningEntriesDefinitionJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/serialization/ProvisioningEntriesDefinitionJsonDeserializer.java @@ -21,6 +21,7 @@ package org.apache.fineract.accounting.provisioning.serialization; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -36,7 +37,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.provisioning.exception.ProvisioningCriteriaCannotBeCreatedException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java index b5c5ce002..2307d4b72 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java @@ -19,6 +19,8 @@ package org.apache.fineract.accounting.provisioning.service; import com.google.gson.JsonObject; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -58,7 +60,6 @@ import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteri import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -150,13 +151,13 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements private Date parseDate(JsonCommand command) { LocalDate localDate = this.fromApiJsonHelper.extractLocalDateNamed("date", command.parsedJson()); - return localDate.toDate(); + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } @Override @CronTarget(jobName = JobName.GENERATE_LOANLOSS_PROVISIONING) public void generateLoanLossProvisioningAmount() { - Date currentDate = DateUtils.getLocalDateOfTenant().toDate(); + Date currentDate = Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()); boolean addJournalEntries = true; try { Collection criteriaCollection = this.provisioningCriteriaReadPlatformService diff --git a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java index 67129ee19..6707dc0b5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/data/AdHocData.java @@ -18,12 +18,12 @@ */ package org.apache.fineract.adhocquery.data; +import java.time.ZonedDateTime; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import org.apache.fineract.adhocquery.domain.ReportRunFrequency; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.DateTime; /** * Immutable data object represent note or case information AdHocData @@ -46,13 +46,13 @@ public class AdHocData { @SuppressWarnings("unused") private final boolean isActive; @SuppressWarnings("unused") - private final DateTime createdOn; + private final ZonedDateTime createdOn; @SuppressWarnings("unused") private final Long createdById; @SuppressWarnings("unused") private final Long updatedById; @SuppressWarnings("unused") - private final DateTime updatedOn; + private final ZonedDateTime updatedOn; @SuppressWarnings("unused") private final String createdBy; @@ -62,12 +62,12 @@ public class AdHocData { private final Long reportRunEvery; - private final DateTime lastRun; + private final ZonedDateTime lastRun; public AdHocData(final Long id, final String name, final String query, final String tableName, final String tableFields, - final boolean isActive, final DateTime createdOn, final Long createdById, final Long updatedById, final DateTime updatedOn, - final String createdBy, final String email, final List reportRunFrequencies, final Long reportRunFrequency, - final Long reportRunEvery, final DateTime lastRun) { + final boolean isActive, final ZonedDateTime createdOn, final Long createdById, final Long updatedById, + final ZonedDateTime updatedOn, final String createdBy, final String email, final List reportRunFrequencies, + final Long reportRunFrequency, final Long reportRunEvery, final ZonedDateTime lastRun) { this.id = id; this.name = name; this.query = query; @@ -123,7 +123,7 @@ public class AdHocData { return this.isActive; } - public DateTime getCreatedOn() { + public ZonedDateTime getCreatedOn() { return this.createdOn; } @@ -135,7 +135,7 @@ public class AdHocData { return this.updatedById; } - public DateTime getUpdatedOn() { + public ZonedDateTime getUpdatedOn() { return this.updatedOn; } @@ -155,7 +155,7 @@ public class AdHocData { return this.reportRunEvery; } - public DateTime getLastRun() { + public ZonedDateTime getLastRun() { return this.lastRun; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java index 4204934d0..bdd29b39c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocReadPlatformServiceImpl.java @@ -20,12 +20,12 @@ package org.apache.fineract.adhocquery.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.ZonedDateTime; import java.util.Collection; import org.apache.fineract.adhocquery.data.AdHocData; import org.apache.fineract.adhocquery.exception.AdHocNotFoundException; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -81,15 +81,15 @@ public class AdHocReadPlatformServiceImpl implements AdHocReadPlatformService { final String tableName = rs.getString("tableName"); final String tableFields = rs.getString("tableField"); final Boolean isActive = rs.getBoolean("isActive"); - final DateTime createdDate = JdbcSupport.getDateTime(rs, "createdDate"); + final ZonedDateTime createdDate = JdbcSupport.getDateTime(rs, "createdDate"); final Long createdById = JdbcSupport.getLong(rs, "createdById"); final Long updatedById = JdbcSupport.getLong(rs, "updatedById"); - final DateTime updatedOn = JdbcSupport.getDateTime(rs, "updatedOn"); + final ZonedDateTime updatedOn = JdbcSupport.getDateTime(rs, "updatedOn"); final String createdByUsername = rs.getString("createdBy"); final String email = rs.getString("email"); final Long reportRunFrequency = JdbcSupport.getLong(rs, "report_run_frequency_code"); final Long reportRunEvery = JdbcSupport.getLong(rs, "report_run_every"); - final DateTime lastRun = JdbcSupport.getDateTime(rs, "last_run"); + final ZonedDateTime lastRun = JdbcSupport.getDateTime(rs, "last_run"); return new AdHocData(id, name, query, tableName, tableFields, isActive, createdDate, createdById, updatedById, updatedOn, createdByUsername, email, AdHocData.template().getReportRunFrequencies(), reportRunFrequency, reportRunEvery, lastRun); diff --git a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocScheduledJobRunnerServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocScheduledJobRunnerServiceImpl.java index 8ddecf686..8fda2d336 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocScheduledJobRunnerServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/service/AdHocScheduledJobRunnerServiceImpl.java @@ -18,6 +18,10 @@ */ package org.apache.fineract.adhocquery.service; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; import java.util.Collection; import java.util.Date; import org.apache.fineract.adhocquery.data.AdHocData; @@ -26,11 +30,6 @@ import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; import org.apache.fineract.infrastructure.jobs.annotation.CronTarget; import org.apache.fineract.infrastructure.jobs.service.JobName; -import org.joda.time.DateTime; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.Months; -import org.joda.time.Years; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -65,27 +64,27 @@ public class AdHocScheduledJobRunnerServiceImpl implements AdHocScheduledJobRunn if (adhoc.getReportRunFrequency() != null) { if (adhoc.getLastRun() != null) { LocalDate start = adhoc.getLastRun().toLocalDate(); - LocalDate end = new DateTime().toLocalDate(); + LocalDate end = ZonedDateTime.now(ZoneId.systemDefault()).toLocalDate(); switch (ReportRunFrequency.fromId(adhoc.getReportRunFrequency())) { case DAILY: next = start.plusDays(1); - run = Days.daysBetween(start, end).getDays() >= 1; + run = Math.toIntExact(ChronoUnit.DAYS.between(start, end)) >= 1; break; case WEEKLY: next = start.plusDays(7); - run = Days.daysBetween(start, end).getDays() >= 7; + run = Math.toIntExact(ChronoUnit.DAYS.between(start, end)) >= 7; break; case MONTHLY: next = start.plusMonths(1); - run = Months.monthsBetween(start, end).getMonths() >= 1; + run = Math.toIntExact(ChronoUnit.MONTHS.between(start, end)) >= 1; break; case YEARLY: next = start.plusYears(1); - run = Years.yearsBetween(start, end).getYears() >= 1; + run = Math.toIntExact(ChronoUnit.YEARS.between(start, end)) >= 1; break; case CUSTOM: next = start.plusDays((int) (long) adhoc.getReportRunEvery()); - run = Days.daysBetween(start, end).getDays() >= adhoc.getReportRunEvery(); + run = Math.toIntExact(ChronoUnit.DAYS.between(start, end)) >= adhoc.getReportRunEvery(); break; default: throw new IllegalStateException(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/api/MakercheckersApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/commands/api/MakercheckersApiResourceSwagger.java index c5e30f746..eed05fb55 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/api/MakercheckersApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/api/MakercheckersApiResourceSwagger.java @@ -19,11 +19,11 @@ package org.apache.fineract.commands.api; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.ZonedDateTime; import java.util.Collection; import java.util.List; import org.apache.fineract.commands.data.ProcessingResultLookup; import org.apache.fineract.useradministration.data.AppUserData; -import org.joda.time.DateTime; /** * Created by sanyam on 27/7/17. @@ -47,9 +47,9 @@ final class MakercheckersApiResourceSwagger { public Long resourceId; public Long subresourceId; public String maker; - public DateTime madeOnDate; + public ZonedDateTime madeOnDate; public String checker; - public DateTime checkedOnDate; + public ZonedDateTime checkedOnDate; public String processingResult; public String commandAsJson; public String officeName; diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditData.java b/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditData.java index 5f7b44af9..676405c30 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditData.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.commands.data; -import org.joda.time.DateTime; +import java.time.ZonedDateTime; /** * Immutable data object representing client data. @@ -37,11 +37,11 @@ public final class AuditData { @SuppressWarnings("unused") private final String maker; @SuppressWarnings("unused") - private final DateTime madeOnDate; + private final ZonedDateTime madeOnDate; @SuppressWarnings("unused") private final String checker; @SuppressWarnings("unused") - private final DateTime checkedOnDate; + private final ZonedDateTime checkedOnDate; @SuppressWarnings("unused") private final String processingResult; private String commandAsJson; @@ -65,7 +65,7 @@ public final class AuditData { private final String url; public AuditData(final Long id, final String actionName, final String entityName, final Long resourceId, final Long subresourceId, - final String maker, final DateTime madeOnDate, final String checker, final DateTime checkedOnDate, + final String maker, final ZonedDateTime madeOnDate, final String checker, final ZonedDateTime checkedOnDate, final String processingResult, final String commandAsJson, final String officeName, final String groupLevelName, final String groupName, final String clientName, final String loanAccountNo, final String savingsAccountNo, final Long clientId, final Long loanId, final String url) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java b/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java index fd990b1f6..e2c6b91df 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.commands.domain; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -30,7 +32,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; @Entity @Table(name = "m_portfolio_command_source") @@ -102,7 +103,7 @@ public class CommandSource extends AbstractPersistableCustom { public static CommandSource fullEntryFrom(final CommandWrapper wrapper, final JsonCommand command, final AppUser maker) { return new CommandSource(wrapper.actionName(), wrapper.entityName(), wrapper.getHref(), command.entityId(), command.subentityId(), - command.json(), maker, DateTime.now()); + command.json(), maker, ZonedDateTime.now(ZoneId.systemDefault())); } protected CommandSource() { @@ -110,7 +111,7 @@ public class CommandSource extends AbstractPersistableCustom { } private CommandSource(final String actionName, final String entityName, final String href, final Long resourceId, - final Long subresourceId, final String commandSerializedAsJson, final AppUser maker, final DateTime madeOnDateTime) { + final Long subresourceId, final String commandSerializedAsJson, final AppUser maker, final ZonedDateTime madeOnDateTime) { this.actionName = actionName; this.entityName = entityName; this.resourceGetUrl = href; @@ -118,7 +119,7 @@ public class CommandSource extends AbstractPersistableCustom { this.subresourceId = subresourceId; this.commandAsJson = commandSerializedAsJson; this.maker = maker; - this.madeOnDate = madeOnDateTime.toDate(); + this.madeOnDate = Date.from(madeOnDateTime.toInstant()); this.processingResult = CommandProcessingResultType.PROCESSED.getValue(); } @@ -138,15 +139,15 @@ public class CommandSource extends AbstractPersistableCustom { this.organisationCreditBureauId = organisationCreditBureauId; } - public void markAsChecked(final AppUser checker, final DateTime checkedOnDate) { + public void markAsChecked(final AppUser checker, final ZonedDateTime checkedOnDate) { this.checker = checker; - this.checkedOnDate = checkedOnDate.toDate(); + this.checkedOnDate = Date.from(checkedOnDate.toInstant()); this.processingResult = CommandProcessingResultType.PROCESSED.getValue(); } - public void markAsRejected(final AppUser checker, final DateTime checkedOnDate) { + public void markAsRejected(final AppUser checker, final ZonedDateTime checkedOnDate) { this.checker = checker; - this.checkedOnDate = checkedOnDate.toDate(); + this.checkedOnDate = Date.from(checkedOnDate.toInstant()); this.processingResult = CommandProcessingResultType.REJECTED.getValue(); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java index 48572d3d4..bdd80b2ae 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import java.lang.reflect.Type; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.ZonedDateTime; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; @@ -63,7 +64,6 @@ import org.apache.fineract.portfolio.savings.service.SavingsProductReadPlatformS import org.apache.fineract.useradministration.data.AppUserData; import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.service.AppUserReadPlatformService; -import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -157,9 +157,9 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { final Long loanId = JdbcSupport.getLong(rs, "loanId"); final Long subresourceId = JdbcSupport.getLong(rs, "subresourceId"); final String maker = rs.getString("maker"); - final DateTime madeOnDate = JdbcSupport.getDateTime(rs, "madeOnDate"); + final ZonedDateTime madeOnDate = JdbcSupport.getDateTime(rs, "madeOnDate"); final String checker = rs.getString("checker"); - final DateTime checkedOnDate = JdbcSupport.getDateTime(rs, "checkedOnDate"); + final ZonedDateTime checkedOnDate = JdbcSupport.getDateTime(rs, "checkedOnDate"); final String processingResult = rs.getString("processingResult"); final String resourceGetUrl = rs.getString("resourceGetUrl"); String commandAsJson; diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/service/PortfolioCommandSourceWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/commands/service/PortfolioCommandSourceWritePlatformServiceImpl.java index 3beab9e73..cb73d18ef 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/service/PortfolioCommandSourceWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/service/PortfolioCommandSourceWritePlatformServiceImpl.java @@ -19,6 +19,8 @@ package org.apache.fineract.commands.service; import com.google.gson.JsonElement; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Random; import org.apache.fineract.commands.domain.CommandSource; import org.apache.fineract.commands.domain.CommandSourceRepository; @@ -33,7 +35,6 @@ import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; import org.apache.fineract.infrastructure.jobs.service.SchedulerJobRunnerReadService; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -186,7 +187,7 @@ public class PortfolioCommandSourceWritePlatformServiceImpl implements Portfolio final CommandSource commandSourceInput = validateMakerCheckerTransaction(makerCheckerId); validateIsUpdateAllowed(); final AppUser maker = this.context.authenticatedUser(); - commandSourceInput.markAsRejected(maker, DateTime.now()); + commandSourceInput.markAsRejected(maker, ZonedDateTime.now(ZoneId.systemDefault())); this.commandSourceRepository.save(commandSourceInput); return makerCheckerId; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/service/SynchronousCommandProcessingService.java b/fineract-provider/src/main/java/org/apache/fineract/commands/service/SynchronousCommandProcessingService.java index d519ae7ad..17646ff69 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/service/SynchronousCommandProcessingService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/service/SynchronousCommandProcessingService.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.commands.service; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Map; import org.apache.fineract.commands.domain.CommandSource; import org.apache.fineract.commands.domain.CommandSourceRepository; @@ -36,7 +38,6 @@ import org.apache.fineract.infrastructure.hooks.event.HookEvent; import org.apache.fineract.infrastructure.hooks.event.HookEventSource; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; @@ -86,7 +87,7 @@ public class SynchronousCommandProcessingService implements CommandProcessingSer CommandSource commandSourceResult = null; if (command.commandId() != null) { commandSourceResult = this.commandSourceRepository.findById(command.commandId()).orElse(null); - commandSourceResult.markAsChecked(maker, DateTime.now()); + commandSourceResult.markAsChecked(maker, ZonedDateTime.now(ZoneId.systemDefault())); } else { commandSourceResult = CommandSource.fullEntryFrom(wrapper, command, maker); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/data/ImportData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/data/ImportData.java index 5f6dae463..445f3667f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/data/ImportData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/data/ImportData.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.infrastructure.bulkimport.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; public final class ImportData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/domain/ImportDocument.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/domain/ImportDocument.java index 2ca54457d..11ffa502d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/domain/ImportDocument.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/domain/ImportDocument.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.infrastructure.bulkimport.domain; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -30,7 +32,6 @@ import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.documentmanagement.domain.Document; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDateTime; @Entity @Table(name = "m_import_document") @@ -77,7 +78,7 @@ public class ImportDocument extends AbstractPersistableCustom { final Boolean completed = Boolean.FALSE; final Integer successCount = 0; final Integer failureCount = 0; - final LocalDateTime endTime = LocalDateTime.now(); + final LocalDateTime endTime = LocalDateTime.now(ZoneId.systemDefault()); return new ImportDocument(document, importTime, endTime, completed, entityType, createdBy, totalRecords, successCount, failureCount); @@ -87,8 +88,8 @@ public class ImportDocument extends AbstractPersistableCustom { final Integer entityType, final AppUser createdBy, final Integer totalRecords, final Integer successCount, final Integer failureCount) { this.document = document; - this.importTime = importTime.toDate(); - this.endTime = endTime.toDate(); + this.importTime = Date.from(importTime.atZone(ZoneId.systemDefault()).toInstant()); + this.endTime = Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()); this.completed = completed; this.entityType = entityType; this.createdBy = createdBy; @@ -99,7 +100,7 @@ public class ImportDocument extends AbstractPersistableCustom { } public void update(final LocalDateTime endTime, final Integer successCount, final Integer errorCount) { - this.endTime = endTime.toDate(); + this.endTime = Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()); this.completed = Boolean.TRUE; this.successCount = successCount; this.failureCount = errorCount; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/ImportHandlerUtils.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/ImportHandlerUtils.java index a8914dd2a..556cdae4c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/ImportHandlerUtils.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/ImportHandlerUtils.java @@ -20,6 +20,8 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.List; import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.infrastructure.core.data.ApiParameterError; @@ -37,7 +39,6 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.SheetVisibility; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellReference; -import org.joda.time.LocalDate; public final class ImportHandlerUtils { @@ -144,7 +145,7 @@ public final class ImportHandlerUtils { return null; } - LocalDate localDate = new LocalDate(c.getDateCellValue()); + LocalDate localDate = LocalDate.ofInstant(c.getDateCellValue().toInstant(), ZoneId.systemDefault()); return localDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/center/CenterImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/center/CenterImportHandler.java index 4cf645aee..034381f5a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/center/CenterImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/center/CenterImportHandler.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.center; import com.google.common.reflect.TypeToken; import com.google.gson.GsonBuilder; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -45,7 +46,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientEntityImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientEntityImportHandler.java index 724dc9091..9b6926bfa 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientEntityImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientEntityImportHandler.java @@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.client; import com.google.common.base.Splitter; import com.google.gson.GsonBuilder; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -42,7 +43,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientPersonImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientPersonImportHandler.java index c92a9702e..42d06f41d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientPersonImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientPersonImportHandler.java @@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.client; import com.google.common.base.Splitter; import com.google.gson.GsonBuilder; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -40,7 +41,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositImportHandler.java index 0b713535a..a207a9cd6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositImportHandler.java @@ -23,6 +23,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -47,7 +48,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositTransactionImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositTransactionImportHandler.java index f50b5f9e6..2086a7e98 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositTransactionImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/fixeddeposits/FixedDepositTransactionImportHandler.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.fixeddeposit import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -41,7 +42,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/group/GroupImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/group/GroupImportHandler.java index 2c1de0f0e..0f321fbf6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/group/GroupImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/group/GroupImportHandler.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.group; import com.google.common.reflect.TypeToken; import com.google.gson.GsonBuilder; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -45,7 +46,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/guarantor/GuarantorImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/guarantor/GuarantorImportHandler.java index c98afb42b..498f70269 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/guarantor/GuarantorImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/guarantor/GuarantorImportHandler.java @@ -22,6 +22,7 @@ import com.google.common.base.Splitter; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -40,7 +41,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/helper/DateSerializer.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/helper/DateSerializer.java index d21642e97..4fc46c707 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/helper/DateSerializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/helper/DateSerializer.java @@ -23,7 +23,8 @@ import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import java.lang.reflect.Type; -import org.joda.time.LocalDate; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; public class DateSerializer implements JsonSerializer { @@ -35,6 +36,6 @@ public class DateSerializer implements JsonSerializer { @Override public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) { - return new JsonPrimitive(src.toString(dateFormat)); + return new JsonPrimitive(src.format(DateTimeFormatter.ofPattern(dateFormat))); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/journalentry/JournalEntriesImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/journalentry/JournalEntriesImportHandler.java index 410bf228c..f03fea2af 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/journalentry/JournalEntriesImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/journalentry/JournalEntriesImportHandler.java @@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.journalentry import com.google.gson.GsonBuilder; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.accounting.journalentry.data.CreditDebit; @@ -41,7 +42,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/loan/LoanImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/loan/LoanImportHandler.java index 98a87eea2..2525331d7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/loan/LoanImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/loan/LoanImportHandler.java @@ -23,6 +23,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -48,7 +49,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/loanrepayment/LoanRepaymentImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/loanrepayment/LoanRepaymentImportHandler.java index 9f0b6b9fd..42dd1be3f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/loanrepayment/LoanRepaymentImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/loanrepayment/LoanRepaymentImportHandler.java @@ -22,6 +22,7 @@ import com.google.common.base.Splitter; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -40,7 +41,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/office/OfficeImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/office/OfficeImportHandler.java index 5a3f99b9c..99c8d3e6c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/office/OfficeImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/office/OfficeImportHandler.java @@ -19,6 +19,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.office; import com.google.gson.GsonBuilder; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -37,7 +38,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositImportHandler.java index 2407ec2ef..a80b80ad8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositImportHandler.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.recurringdep import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -44,7 +45,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositTransactionImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositTransactionImportHandler.java index 20c681386..d8693635a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositTransactionImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/recurringdeposit/RecurringDepositTransactionImportHandler.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.recurringdep import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -42,7 +43,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/savings/SavingsImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/savings/SavingsImportHandler.java index 030f8bf1e..1c7f46f3f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/savings/SavingsImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/savings/SavingsImportHandler.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.savings; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -45,7 +46,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/savings/SavingsTransactionImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/savings/SavingsTransactionImportHandler.java index dcc95fa46..f581e44c3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/savings/SavingsTransactionImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/savings/SavingsTransactionImportHandler.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.savings; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -41,7 +42,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/sharedaccount/SharedAccountImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/sharedaccount/SharedAccountImportHandler.java index 6711d071a..701ece723 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/sharedaccount/SharedAccountImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/sharedaccount/SharedAccountImportHandler.java @@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.sharedaccoun import com.google.gson.GsonBuilder; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -39,7 +40,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/staff/StaffImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/staff/StaffImportHandler.java index 641747b6b..f0ce9d3b3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/staff/StaffImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/staff/StaffImportHandler.java @@ -19,6 +19,7 @@ package org.apache.fineract.infrastructure.bulkimport.importhandler.staff; import com.google.gson.GsonBuilder; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.commands.domain.CommandWrapper; @@ -37,7 +38,6 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/AbstractWorkbookPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/AbstractWorkbookPopulator.java index 3a17a6148..aae7752d0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/AbstractWorkbookPopulator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/AbstractWorkbookPopulator.java @@ -104,10 +104,8 @@ public abstract class AbstractWorkbookPopulator implements WorkbookPopulator { for (OfficeData office : offices) { Row row = sheet.createRow(++rowIndex); writeString(officeNameCol, row, office.name().trim().replaceAll("[ )(]", "_")); - writeDate( - activationDateCol, row, "" + office.getOpeningDate().getDayOfMonth() + "/" - + office.getOpeningDate().getMonthOfYear() + "/" + office.getOpeningDate().getYear(), - dateCellStyle, dateFormat); + writeDate(activationDateCol, row, "" + office.getOpeningDate().getDayOfMonth() + "/" + + office.getOpeningDate().getMonthValue() + "/" + office.getOpeningDate().getYear(), dateCellStyle, dateFormat); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositTransactionWorkbookPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositTransactionWorkbookPopulator.java index 45c547866..bf277a35f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositTransactionWorkbookPopulator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/fixeddeposits/FixedDepositTransactionWorkbookPopulator.java @@ -211,7 +211,7 @@ public class FixedDepositTransactionWorkbookPopulator extends AbstractWorkbookPo } writeDate(TransactionConstants.LOOKUP_SAVINGS_ACTIVATION_DATE_COL, row, "" + savingsAccount.getTimeline().getActivatedOnDate().getDayOfMonth() + "/" - + savingsAccount.getTimeline().getActivatedOnDate().getMonthOfYear() + "/" + + savingsAccount.getTimeline().getActivatedOnDate().getMonthValue() + "/" + savingsAccount.getTimeline().getActivatedOnDate().getYear(), dateCellStyle, dateFormat); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/recurringdeposit/RecurringDepositTransactionWorkbookPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/recurringdeposit/RecurringDepositTransactionWorkbookPopulator.java index ea246d2c3..a1d35e480 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/recurringdeposit/RecurringDepositTransactionWorkbookPopulator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/recurringdeposit/RecurringDepositTransactionWorkbookPopulator.java @@ -212,7 +212,7 @@ public class RecurringDepositTransactionWorkbookPopulator extends AbstractWorkbo } writeDate(TransactionConstants.LOOKUP_SAVINGS_ACTIVATION_DATE_COL, row, "" + savingsAccount.getTimeline().getActivatedOnDate().getDayOfMonth() + "/" - + savingsAccount.getTimeline().getActivatedOnDate().getMonthOfYear() + "/" + + savingsAccount.getTimeline().getActivatedOnDate().getMonthValue() + "/" + savingsAccount.getTimeline().getActivatedOnDate().getYear(), dateCellStyle, dateFormat); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/savings/SavingsTransactionsWorkbookPopulator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/savings/SavingsTransactionsWorkbookPopulator.java index fdf143eef..f2ae4c513 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/savings/SavingsTransactionsWorkbookPopulator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/savings/SavingsTransactionsWorkbookPopulator.java @@ -211,7 +211,7 @@ public class SavingsTransactionsWorkbookPopulator extends AbstractWorkbookPopula } writeDate(TransactionConstants.LOOKUP_SAVINGS_ACTIVATION_DATE_COL, row, "" + savingsAccount.getTimeline().getActivatedOnDate().getDayOfMonth() + "/" - + savingsAccount.getTimeline().getActivatedOnDate().getMonthOfYear() + "/" + + savingsAccount.getTimeline().getActivatedOnDate().getMonthValue() + "/" + savingsAccount.getTimeline().getActivatedOnDate().getYear(), dateCellStyle, dateFormat); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/service/BulkImportWorkbookServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/service/BulkImportWorkbookServiceImpl.java index c6de1668f..425529478 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/service/BulkImportWorkbookServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/service/BulkImportWorkbookServiceImpl.java @@ -27,6 +27,7 @@ import java.io.InputStream; import java.net.URLConnection; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Collection; import javax.ws.rs.core.Response; import org.apache.fineract.infrastructure.bulkimport.data.BulkImportEvent; @@ -51,7 +52,6 @@ import org.apache.poi.ss.usermodel.Workbook; import org.apache.tika.Tika; import org.apache.tika.io.IOUtils; import org.apache.tika.io.TikaInputStream; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignData.java index a6488054a..097b0e666 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignData.java @@ -18,9 +18,9 @@ */ package org.apache.fineract.infrastructure.campaigns.email.data; +import java.time.LocalDate; +import java.time.ZonedDateTime; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; public final class EmailCampaignData { @@ -47,22 +47,22 @@ public final class EmailCampaignData { @SuppressWarnings("unused") private final String stretchyReportParamMap; @SuppressWarnings("unused") - private final DateTime nextTriggerDate; + private final ZonedDateTime nextTriggerDate; @SuppressWarnings("unused") private final LocalDate lastTriggerDate; @SuppressWarnings("unused") private final EmailCampaignTimeLine emailCampaignTimeLine; @SuppressWarnings("unused") - private final DateTime recurrenceStartDate; + private final ZonedDateTime recurrenceStartDate; private final String recurrence; private EmailCampaignData(final Long id, final String campaignName, final Integer campaignType, final Long businessRuleId, final String paramValue, final EnumOptionData campaignStatus, final String emailSubject, final String message, final String emailAttachmentFileFormat, final Long stretchyReportId, final String stretchyReportParamMap, - final DateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine, - final DateTime recurrenceStartDate, final String recurrence) { + final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine, + final ZonedDateTime recurrenceStartDate, final String recurrence) { this.id = id; this.campaignName = campaignName; this.campaignType = campaignType; @@ -92,8 +92,8 @@ public final class EmailCampaignData { public static EmailCampaignData instance(final Long id, final String campaignName, final Integer campaignType, final Long runReportId, final String paramValue, final EnumOptionData campaignStatus, final String emailSubject, final String message, final String emailAttachmentFileFormat, final Long stretchyReportId, final String stretchyReportParamMap, - final DateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine, - final DateTime recurrenceStartDate, final String recurrence) { + final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate, final EmailCampaignTimeLine emailCampaignTimeLine, + final ZonedDateTime recurrenceStartDate, final String recurrence) { return new EmailCampaignData(id, campaignName, campaignType, runReportId, paramValue, campaignStatus, emailSubject, message, emailAttachmentFileFormat, stretchyReportId, stretchyReportParamMap, nextTriggerDate, lastTriggerDate, emailCampaignTimeLine, recurrenceStartDate, recurrence); @@ -131,7 +131,7 @@ public final class EmailCampaignData { return this.emailMessage; } - public DateTime getNextTriggerDate() { + public ZonedDateTime getNextTriggerDate() { return this.nextTriggerDate; } @@ -143,7 +143,7 @@ public final class EmailCampaignData { return this.recurrence; } - public DateTime getRecurrenceStartDate() { + public ZonedDateTime getRecurrenceStartDate() { return this.recurrenceStartDate; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignTimeLine.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignTimeLine.java index 30e856b70..80da3399a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignTimeLine.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignTimeLine.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.infrastructure.campaigns.email.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; public class EmailCampaignTimeLine { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignValidator.java index 986a4078a..acbcca261 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailCampaignValidator.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.campaigns.email.data; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -34,7 +35,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailData.java index 2a7b7c56b..9f12955a1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailData.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.infrastructure.campaigns.email.data; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.dataqueries.data.ReportData; -import org.joda.time.LocalDate; /** * Immutable data object representing a SMS message. diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailDataValidator.java index fc01b011b..7b8a31661 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/data/EmailDataValidator.java @@ -22,6 +22,8 @@ import com.google.common.base.Splitter; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -41,9 +43,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -127,7 +126,7 @@ public final class EmailDataValidator { if (StringUtils.isNotEmpty(dateFormat)) { try { - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(dateFormat).withLocale(jsonCommand.extractLocale()); + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateFormat).withLocale(jsonCommand.extractLocale()); // try to parse the date time string LocalDateTime.parse(startDateTime, dateTimeFormatter); @@ -224,7 +223,7 @@ public final class EmailDataValidator { if (StringUtils.isNotEmpty(dateFormat)) { try { - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(dateFormat) + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateFormat) .withLocale(jsonCommand.extractLocale()); // try to parse the date time string diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java index 4e51bca57..3952cd33b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java @@ -18,6 +18,11 @@ */ package org.apache.fineract.infrastructure.campaigns.email.domain; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; @@ -43,10 +48,6 @@ import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.dataqueries.domain.Report; import org.apache.fineract.portfolio.client.api.ClientApiConstants; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; @Entity @Table(name = "scheduled_email_campaign") @@ -152,15 +153,15 @@ public class EmailCampaign extends AbstractPersistableCustom { this.emailAttachmentFileFormat = emailAttachmentFileFormat.getValue(); this.stretchyReport = stretchyReport; this.stretchyReportParamMap = stretchyReportParamMap; - this.submittedOnDate = submittedOnDate.toDate(); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = submittedBy; this.recurrence = recurrence; - LocalDateTime recurrenceStartDate = new LocalDateTime(); + LocalDateTime recurrenceStartDate = LocalDateTime.now(ZoneId.systemDefault()); this.isVisible = true; if (localDateTime != null) { - this.recurrenceStartDate = localDateTime.toDate(); + this.recurrenceStartDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); } else { - this.recurrenceStartDate = recurrenceStartDate.toDate(); + this.recurrenceStartDate = Date.from(recurrenceStartDate.atZone(ZoneId.systemDefault()).toInstant()); } } @@ -184,16 +185,16 @@ public class EmailCampaign extends AbstractPersistableCustom { } else { emailAttachmentFileFormat = ScheduledEmailAttachmentFileFormat.instance(2); } - LocalDate submittedOnDate = new LocalDate(); + LocalDate submittedOnDate = LocalDate.now(ZoneId.systemDefault()); if (command.hasParameter(EmailCampaignValidator.submittedOnDateParamName)) { submittedOnDate = command.localDateValueOfParameterNamed(EmailCampaignValidator.submittedOnDateParamName); } final String recurrence = command.stringValueOfParameterNamed(EmailCampaignValidator.recurrenceParamName); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); - LocalDateTime recurrenceStartDate = new LocalDateTime(); + LocalDateTime recurrenceStartDate = LocalDateTime.now(ZoneId.systemDefault()); if (EmailCampaignType.fromInt(campaignType.intValue()).isSchedule()) { if (command.hasParameter(EmailCampaignValidator.recurrenceStartDate)) { recurrenceStartDate = LocalDateTime.parse(command.stringValueOfParameterNamed(EmailCampaignValidator.recurrenceStartDate), @@ -245,7 +246,7 @@ public class EmailCampaign extends AbstractPersistableCustom { final String dateFormatAsInput = command.dateFormat(); final String localeAsInput = command.locale(); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); if (command.isChangeInLocalDateParameterNamed(EmailCampaignValidator.recurrenceStartDate, getRecurrenceStartDate())) { final String valueAsInput = command.stringValueOfParameterNamed(EmailCampaignValidator.recurrenceStartDate); @@ -255,7 +256,7 @@ public class EmailCampaign extends AbstractPersistableCustom { final LocalDateTime newValue = LocalDateTime.parse(valueAsInput, fmt); - this.recurrenceStartDate = newValue.toDate(); + this.recurrenceStartDate = Date.from(newValue.atZone(ZoneId.systemDefault()).toInstant()); } return actualChanges; @@ -267,14 +268,14 @@ public class EmailCampaign extends AbstractPersistableCustom { // handle errors if already activated final String defaultUserMessage = "Cannot activate campaign. Campaign is already active."; final ApiParameterError error = ApiParameterError.parameterError("error.msg.campaign.already.active", defaultUserMessage, - EmailCampaignValidator.activationDateParamName, activationLocalDate.toString(formatter)); + EmailCampaignValidator.activationDateParamName, activationLocalDate.format(formatter)); final List dataValidationErrors = new ArrayList(); dataValidationErrors.add(error); throw new PlatformApiDataValidationException(dataValidationErrors); } - this.approvedOnDate = activationLocalDate.toDate(); + this.approvedOnDate = Date.from(activationLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.approvedBy = currentUser; this.status = EmailCampaignStatus.ACTIVE.getValue(); @@ -298,7 +299,7 @@ public class EmailCampaign extends AbstractPersistableCustom { this.lastTriggerDate = null; } this.closedBy = currentUser; - this.closureDate = closureLocalDate.toDate(); + this.closureDate = Date.from(closureLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.status = EmailCampaignStatus.CLOSED.getValue(); validateClosureDate(); } @@ -317,7 +318,7 @@ public class EmailCampaign extends AbstractPersistableCustom { throw new PlatformApiDataValidationException(dataValidationErrors); } - this.approvedOnDate = reactivateLocalDate.toDate(); + this.approvedOnDate = Date.from(reactivateLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.status = EmailCampaignStatus.ACTIVE.getValue(); this.approvedBy = currentUser; this.closureDate = null; @@ -456,18 +457,18 @@ public class EmailCampaign extends AbstractPersistableCustom { } public LocalDate getSubmittedOnDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.submittedOnDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getClosureDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.closureDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.closureDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getActivationLocalDate() { LocalDate activationLocalDate = null; if (this.approvedOnDate != null) { - activationLocalDate = LocalDate.fromDateFields(this.approvedOnDate); + activationLocalDate = LocalDate.ofInstant(this.approvedOnDate.toInstant(), ZoneId.systemDefault()); } return activationLocalDate; } @@ -501,11 +502,12 @@ public class EmailCampaign extends AbstractPersistableCustom { } public LocalDate getRecurrenceStartDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.recurrenceStartDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.recurrenceStartDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDateTime getRecurrenceStartDateTime() { - return ObjectUtils.defaultIfNull(new LocalDateTime(this.recurrenceStartDate), null); + return ObjectUtils.defaultIfNull( + ZonedDateTime.ofInstant(this.recurrenceStartDate.toInstant(), ZoneId.systemDefault()).toLocalDateTime(), null); } public void setLastTriggerDate(Date lastTriggerDate) { @@ -517,7 +519,8 @@ public class EmailCampaign extends AbstractPersistableCustom { } public LocalDateTime getNextTriggerDate() { - return ObjectUtils.defaultIfNull(new LocalDateTime(this.nextTriggerDate), null); + return ObjectUtils + .defaultIfNull(ZonedDateTime.ofInstant(this.nextTriggerDate.toInstant(), ZoneId.systemDefault()).toLocalDateTime(), null); } @@ -526,7 +529,7 @@ public class EmailCampaign extends AbstractPersistableCustom { } public LocalDate getLastTriggerDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.lastTriggerDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.lastTriggerDate.toInstant(), ZoneId.systemDefault()), null); } public void updateIsVisible(boolean isVisible) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailMessage.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailMessage.java index d15aed560..b53324867 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailMessage.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailMessage.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.infrastructure.campaigns.email.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -35,7 +37,6 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.group.domain.Group; -import org.joda.time.LocalDate; @Entity @Table(name = "scheduled_email_messages_outbound") @@ -107,7 +108,7 @@ public class EmailMessage extends AbstractPersistableCustom { this.emailSubject = emailSubject; this.message = message; this.campaignName = campaignName; - this.submittedOnDate = LocalDate.now().toDate(); + this.submittedOnDate = Date.from(LocalDate.now(ZoneId.systemDefault()).atStartOfDay(ZoneId.systemDefault()).toInstant()); } public Map update(final JsonCommand command) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignReadPlatformServiceImpl.java index ff0a8727d..bca659fce 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignReadPlatformServiceImpl.java @@ -20,6 +20,8 @@ package org.apache.fineract.infrastructure.campaigns.email.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -37,8 +39,6 @@ import org.apache.fineract.infrastructure.campaigns.email.exception.EmailCampaig import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; @@ -138,7 +138,7 @@ public class EmailCampaignReadPlatformServiceImpl implements EmailCampaignReadPl final Integer statusId = JdbcSupport.getInteger(rs, "statusEnum"); final EnumOptionData status = EmailCampaignStatusEnumerations.status(statusId); - final DateTime nextTriggerDate = JdbcSupport.getDateTime(rs, "nextTriggerDate"); + final ZonedDateTime nextTriggerDate = JdbcSupport.getDateTime(rs, "nextTriggerDate"); final LocalDate lastTriggerDate = JdbcSupport.getLocalDate(rs, "lastTriggerDate"); final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate"); @@ -150,7 +150,7 @@ public class EmailCampaignReadPlatformServiceImpl implements EmailCampaignReadPl final LocalDate activatedOnDate = JdbcSupport.getLocalDate(rs, "activatedOnDate"); final String activatedByUsername = rs.getString("activatedByUsername"); final String recurrence = rs.getString("recurrence"); - final DateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate"); + final ZonedDateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate"); final EmailCampaignTimeLine emailCampaignTimeLine = new EmailCampaignTimeLine(submittedOnDate, submittedByUsername, activatedOnDate, activatedByUsername, closedOnDate, closedByUsername); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignWritePlatformCommandHandlerImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignWritePlatformCommandHandlerImpl.java index ef3183e76..ab5b430dd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignWritePlatformCommandHandlerImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignWritePlatformCommandHandlerImpl.java @@ -28,9 +28,15 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -85,11 +91,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepository; import org.apache.fineract.useradministration.domain.AppUser; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; -import org.joda.time.DateTimeZone; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -313,7 +314,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai final EmailCampaign emailCampaign = this.emailCampaignRepository.findById(campaignId) .orElseThrow(() -> new EmailCampaignNotFound(campaignId)); LocalDateTime nextTriggerDate = emailCampaign.getNextTriggerDate(); - emailCampaign.setLastTriggerDate(nextTriggerDate.toDate()); + emailCampaign.setLastTriggerDate(Date.from(nextTriggerDate.atZone(ZoneId.systemDefault()).toInstant())); // calculate new trigger date and insert into next trigger date /** @@ -335,12 +336,11 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai emailCampaign.getNextTriggerDate().toLocalDate(), DateUtils.getLocalDateOfTenant()); } final LocalDateTime getTime = emailCampaign.getRecurrenceStartDateTime(); - final String dateString = nextRuntime.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":" - + getTime.getSecondOfMinute(); - final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + final String dateString = nextRuntime.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":" + getTime.getSecond(); + final DateTimeFormatter simpleDateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); final LocalDateTime newTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat); - emailCampaign.setNextTriggerDate(newTriggerDateWithTime.toDate()); + emailCampaign.setNextTriggerDate(Date.from(newTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant())); this.emailCampaignRepository.saveAndFlush(emailCampaign); } @@ -355,7 +355,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai .orElseThrow(() -> new EmailCampaignNotFound(campaignId)); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate activationDate = command.localDateValueOfParameterNamed("activationDate"); emailCampaign.activate(currentUser, fmt, activationDate); @@ -382,12 +382,13 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai // to get time of tenant final LocalDateTime getTime = emailCampaign.getRecurrenceStartDateTime(); - final String dateString = nextTriggerDate.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":" - + getTime.getSecondOfMinute(); - final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":" + + getTime.getSecond(); + final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient() + .appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter(); final LocalDateTime nextTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat); - emailCampaign.setNextTriggerDate(nextTriggerDateWithTime.toDate()); + emailCampaign.setNextTriggerDate(Date.from(nextTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant())); this.emailCampaignRepository.saveAndFlush(emailCampaign); } } @@ -413,7 +414,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai .orElseThrow(() -> new EmailCampaignNotFound(campaignId)); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closureDate = command.localDateValueOfParameterNamed("closureDate"); emailCampaign.close(currentUser, fmt, closureDate); @@ -513,7 +514,7 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai .orElseThrow(() -> new EmailCampaignNotFound(campaignId)); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate reactivationDate = command.localDateValueOfParameterNamed("activationDate"); emailCampaign.reactivate(currentUser, fmt, reactivationDate); if (emailCampaign.isSchedule()) { @@ -532,12 +533,13 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai // to get time of tenant final LocalDateTime getTime = emailCampaign.getRecurrenceStartDateTime(); - final String dateString = nextTriggerDate.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":" - + getTime.getSecondOfMinute(); - final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":" + + getTime.getSecond(); + final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient() + .appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter(); final LocalDateTime nextTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat); - emailCampaign.setNextTriggerDate(nextTriggerDateWithTime.toDate()); + emailCampaign.setNextTriggerDate(Date.from(nextTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant())); this.emailCampaignRepository.saveAndFlush(emailCampaign); } @@ -555,13 +557,13 @@ public class EmailCampaignWritePlatformCommandHandlerImpl implements EmailCampai } private LocalDateTime tenantDateTime() { - LocalDateTime today = new LocalDateTime(); + LocalDateTime today = LocalDateTime.now(ZoneId.systemDefault()); final FineractPlatformTenant tenant = ThreadLocalContextUtil.getTenant(); if (tenant != null) { - final DateTimeZone zone = DateTimeZone.forID(tenant.getTimezoneId()); + final ZoneId zone = ZoneId.of(tenant.getTimezoneId()); if (zone != null) { - today = new LocalDateTime(zone); + today = LocalDateTime.now(zone); } } return today; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailReadPlatformServiceImpl.java index bbed73949..7465a48e2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailReadPlatformServiceImpl.java @@ -22,6 +22,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import java.util.List; @@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/SmsCampaignData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/SmsCampaignData.java index 6d6e31b09..813dc1291 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/SmsCampaignData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/SmsCampaignData.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.infrastructure.campaigns.sms.data; +import java.time.LocalDate; +import java.time.ZonedDateTime; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; @SuppressWarnings("unused") public final class SmsCampaignData { @@ -35,10 +35,10 @@ public final class SmsCampaignData { private final EnumOptionData campaignStatus; private final EnumOptionData triggerType; private final String campaignMessage; - private final DateTime nextTriggerDate; + private final ZonedDateTime nextTriggerDate; private final LocalDate lastTriggerDate; private final SmsCampaignTimeLine smsCampaignTimeLine; - private final DateTime recurrenceStartDate; + private final ZonedDateTime recurrenceStartDate; private final String recurrence; private final Long providerId; private final boolean isNotification; @@ -61,8 +61,8 @@ public final class SmsCampaignData { private SmsCampaignData(final Long id, final String campaignName, final EnumOptionData campaignType, final EnumOptionData triggerType, final Long runReportId, final String reportName, final String paramValue, final EnumOptionData campaignStatus, - final String message, final DateTime nextTriggerDate, final LocalDate lastTriggerDate, - final SmsCampaignTimeLine smsCampaignTimeLine, final DateTime recurrenceStartDate, final String recurrence, + final String message, final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate, + final SmsCampaignTimeLine smsCampaignTimeLine, final ZonedDateTime recurrenceStartDate, final String recurrence, final Long providerId, final Collection businessRulesOptions, final Collection smsProviderOptions, final Collection campaignTypeOptions, final Collection triggerTypeOptions, final Collection months, @@ -104,8 +104,8 @@ public final class SmsCampaignData { public static SmsCampaignData instance(final Long id, final String campaignName, final EnumOptionData campaignType, final EnumOptionData triggerType, final Long runReportId, final String reportName, final String paramValue, - final EnumOptionData campaignStatus, final String message, final DateTime nextTriggerDate, final LocalDate lastTriggerDate, - final SmsCampaignTimeLine smsCampaignTimeLine, final DateTime recurrenceStartDate, final String recurrence, + final EnumOptionData campaignStatus, final String message, final ZonedDateTime nextTriggerDate, final LocalDate lastTriggerDate, + final SmsCampaignTimeLine smsCampaignTimeLine, final ZonedDateTime recurrenceStartDate, final String recurrence, final Long providerId, final boolean isNotification) { final Collection businessRulesOptions = null; final Collection smsProviderOptions = null; @@ -134,10 +134,10 @@ public final class SmsCampaignData { final String paramValue = null; final EnumOptionData campaignStatus = null; final String message = null; - final DateTime nextTriggerDate = null; + final ZonedDateTime nextTriggerDate = null; final LocalDate lastTriggerDate = null; final SmsCampaignTimeLine smsCampaignTimeLine = null; - final DateTime recurrenceStartDate = null; + final ZonedDateTime recurrenceStartDate = null; final String recurrence = null; final EnumOptionData triggerType = null; final String reportName = null; @@ -177,7 +177,7 @@ public final class SmsCampaignData { return this.campaignMessage; } - public DateTime getNextTriggerDate() { + public ZonedDateTime getNextTriggerDate() { return this.nextTriggerDate; } @@ -189,7 +189,7 @@ public final class SmsCampaignData { return this.recurrence; } - public DateTime getRecurrenceStartDate() { + public ZonedDateTime getRecurrenceStartDate() { return this.recurrenceStartDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/SmsCampaignTimeLine.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/SmsCampaignTimeLine.java index faf60735e..9c9433d50 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/SmsCampaignTimeLine.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/data/SmsCampaignTimeLine.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.infrastructure.campaigns.sms.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; @SuppressWarnings("unused") public class SmsCampaignTimeLine { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java index 83d454791..6b82267f1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java @@ -18,6 +18,11 @@ */ package org.apache.fineract.infrastructure.campaigns.sms.domain; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; @@ -47,10 +52,6 @@ import org.apache.fineract.infrastructure.dataqueries.domain.Report; import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType; import org.apache.fineract.portfolio.calendar.domain.CalendarWeekDaysType; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; @Entity @Table(name = "sms_campaign", uniqueConstraints = { @UniqueConstraint(columnNames = { "campaign_name" }, name = "campaign_name_UNIQUE") }) @@ -139,15 +140,15 @@ public class SmsCampaign extends AbstractPersistableCustom { this.paramValue = paramValue; this.status = SmsCampaignStatus.PENDING.getValue(); this.message = message; - this.submittedOnDate = submittedOnDate.toDate(); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = submittedBy; this.recurrence = recurrence; - LocalDateTime recurrenceStartDate = new LocalDateTime(); + LocalDateTime recurrenceStartDate = LocalDateTime.now(ZoneId.systemDefault()); this.isVisible = true; if (localDateTime != null) { - this.recurrenceStartDate = localDateTime.toDate(); + this.recurrenceStartDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); } else { - this.recurrenceStartDate = recurrenceStartDate.toDate(); + this.recurrenceStartDate = Date.from(recurrenceStartDate.atZone(ZoneId.systemDefault()).toInstant()); } this.isNotification = isNotification; } @@ -169,19 +170,19 @@ public class SmsCampaign extends AbstractPersistableCustom { final String paramValue = command.jsonFragment(SmsCampaignValidator.paramValue); final String message = command.stringValueOfParameterNamed(SmsCampaignValidator.message); - LocalDate submittedOnDate = new LocalDate(); + LocalDate submittedOnDate = LocalDate.now(ZoneId.systemDefault()); if (command.hasParameter(SmsCampaignValidator.submittedOnDateParamName)) { submittedOnDate = command.localDateValueOfParameterNamed(SmsCampaignValidator.submittedOnDateParamName); } String recurrence = null; - LocalDateTime recurrenceStartDate = new LocalDateTime(); + LocalDateTime recurrenceStartDate = LocalDateTime.now(ZoneId.systemDefault()); if (SmsCampaignTriggerType.fromInt(triggerType.intValue()).isSchedule()) { final Locale locale = command.extractLocale(); String dateTimeFormat = null; if (command.hasParameter(SmsCampaignValidator.dateTimeFormat)) { dateTimeFormat = command.stringValueOfParameterNamed(SmsCampaignValidator.dateTimeFormat); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(dateTimeFormat).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(dateTimeFormat).withLocale(locale); if (command.hasParameter(SmsCampaignValidator.recurrenceStartDate)) { recurrenceStartDate = LocalDateTime.parse(command.stringValueOfParameterNamed(SmsCampaignValidator.recurrenceStartDate), fmt); @@ -252,7 +253,7 @@ public class SmsCampaign extends AbstractPersistableCustom { final String dateTimeFormatAsInput = command.stringValueOfParameterNamed(SmsCampaignValidator.dateTimeFormat); final String localeAsInput = command.locale(); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(dateTimeFormatAsInput).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(dateTimeFormatAsInput).withLocale(locale); final String valueAsInput = command.stringValueOfParameterNamed(SmsCampaignValidator.recurrenceStartDate); actualChanges.put(SmsCampaignValidator.recurrenceStartDate, valueAsInput); actualChanges.put(SmsCampaignValidator.dateFormatParamName, dateFormatAsInput); @@ -261,7 +262,7 @@ public class SmsCampaign extends AbstractPersistableCustom { final LocalDateTime newValue = LocalDateTime.parse(valueAsInput, fmt); - this.recurrenceStartDate = newValue.toDate(); + this.recurrenceStartDate = Date.from(newValue.atZone(ZoneId.systemDefault()).toInstant()); } return actualChanges; @@ -273,14 +274,14 @@ public class SmsCampaign extends AbstractPersistableCustom { // handle errors if already activated final String defaultUserMessage = "Cannot activate campaign. Campaign is already active."; final ApiParameterError error = ApiParameterError.parameterError("error.msg.campaign.already.active", defaultUserMessage, - SmsCampaignValidator.activationDateParamName, activationLocalDate.toString(formatter)); + SmsCampaignValidator.activationDateParamName, activationLocalDate.format(formatter)); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); throw new PlatformApiDataValidationException(dataValidationErrors); } - this.approvedOnDate = activationLocalDate.toDate(); + this.approvedOnDate = Date.from(activationLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.approvedBy = currentUser; this.status = SmsCampaignStatus.ACTIVE.getValue(); @@ -304,7 +305,7 @@ public class SmsCampaign extends AbstractPersistableCustom { this.lastTriggerDate = null; } this.closedBy = currentUser; - this.closureDate = closureLocalDate.toDate(); + this.closureDate = Date.from(closureLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.status = SmsCampaignStatus.CLOSED.getValue(); validateClosureDate(); } @@ -323,7 +324,7 @@ public class SmsCampaign extends AbstractPersistableCustom { throw new PlatformApiDataValidationException(dataValidationErrors); } - this.approvedOnDate = reactivateLocalDate.toDate(); + this.approvedOnDate = Date.from(reactivateLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.status = SmsCampaignStatus.ACTIVE.getValue(); this.approvedBy = currentUser; this.closureDate = null; @@ -466,18 +467,18 @@ public class SmsCampaign extends AbstractPersistableCustom { } public LocalDate getSubmittedOnDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.submittedOnDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getClosureDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.closureDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.closureDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getActivationLocalDate() { LocalDate activationLocalDate = null; if (this.approvedOnDate != null) { - activationLocalDate = LocalDate.fromDateFields(this.approvedOnDate); + activationLocalDate = LocalDate.ofInstant(this.approvedOnDate.toInstant(), ZoneId.systemDefault()); } return activationLocalDate; } @@ -507,11 +508,12 @@ public class SmsCampaign extends AbstractPersistableCustom { } public LocalDate getRecurrenceStartDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.recurrenceStartDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.recurrenceStartDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDateTime getRecurrenceStartDateTime() { - return ObjectUtils.defaultIfNull(new LocalDateTime(this.recurrenceStartDate), null); + return ObjectUtils.defaultIfNull( + ZonedDateTime.ofInstant(this.recurrenceStartDate.toInstant(), ZoneId.systemDefault()).toLocalDateTime(), null); } public void setLastTriggerDate(Date lastTriggerDate) { @@ -523,7 +525,8 @@ public class SmsCampaign extends AbstractPersistableCustom { } public LocalDateTime getNextTriggerDate() { - return ObjectUtils.defaultIfNull(new LocalDateTime(this.nextTriggerDate), null); + return ObjectUtils + .defaultIfNull(ZonedDateTime.ofInstant(this.nextTriggerDate.toInstant(), ZoneId.systemDefault()).toLocalDateTime(), null); } @@ -532,7 +535,7 @@ public class SmsCampaign extends AbstractPersistableCustom { } public LocalDate getLastTriggerDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.lastTriggerDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.lastTriggerDate.toInstant(), ZoneId.systemDefault()), null); } public void updateIsVisible(boolean isVisible) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/serialization/SmsCampaignValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/serialization/SmsCampaignValidator.java index a8b443297..0861a68fe 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/serialization/SmsCampaignValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/serialization/SmsCampaignValidator.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.campaigns.sms.serialization; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -39,7 +40,6 @@ import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistration; import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationRepositoryWrapper; import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType; import org.apache.fineract.portfolio.client.domain.Client; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java index 713ffa422..eaa623c08 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.campaigns.sms.service; import java.io.IOException; import java.security.InvalidParameterException; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -54,8 +55,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -312,8 +311,8 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { throw new InvalidParameterException(""); } - DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm"); - DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("MMM:d:yyyy"); + DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm"); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMM:d:yyyy"); smsParams.put("id", loanTransaction.getLoan().getClientId()); smsParams.put("firstname", client.getFirstname()); @@ -334,8 +333,8 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { } smsParams.put("repaymentAmount", loanTransaction.getAmount(loan.getCurrency())); - smsParams.put("RepaymentDate", loanTransaction.getCreatedDateTime().toLocalDate().toString(dateFormatter)); - smsParams.put("RepaymentTime", loanTransaction.getCreatedDateTime().toLocalTime().toString(timeFormatter)); + smsParams.put("RepaymentDate", loanTransaction.getCreatedDateTime().toLocalDate().format(dateFormatter)); + smsParams.put("RepaymentTime", loanTransaction.getCreatedDateTime().toLocalTime().format(timeFormatter)); if (loanTransaction.getPaymentDetail() != null) { smsParams.put("receiptNumber", loanTransaction.getPaymentDetail().getReceiptNumber()); @@ -355,7 +354,7 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { // transactionDate HashMap smsParams = new HashMap(); SavingsAccount savingsAccount = savingsAccountTransaction.getSavingsAccount(); - DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("MMM:d:yyyy"); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMM:d:yyyy"); smsParams.put("clientId", client.getId()); smsParams.put("firstname", client.getFirstname()); smsParams.put("middlename", client.getMiddlename()); @@ -368,7 +367,7 @@ public class SmsCampaignDomainServiceImpl implements SmsCampaignDomainService { smsParams.put("depositAmount", savingsAccountTransaction.getAmount(savingsAccount.getCurrency())); smsParams.put("balance", savingsAccount.getWithdrawableBalance()); smsParams.put("officeId", client.getOffice().getId()); - smsParams.put("transactionDate", savingsAccountTransaction.getTransactionLocalDate().toString(dateFormatter)); + smsParams.put("transactionDate", savingsAccountTransaction.getTransactionLocalDate().format(dateFormatter)); smsParams.put("savingsTransactionId", savingsAccountTransaction.getId()); if (client.getStaff() != null) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignReadPlatformServiceImpl.java index 1b7342998..ad3640707 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignReadPlatformServiceImpl.java @@ -20,6 +20,8 @@ package org.apache.fineract.infrastructure.campaigns.sms.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -41,8 +43,6 @@ import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.portfolio.calendar.service.CalendarDropdownReadPlatformService; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; @@ -250,7 +250,7 @@ public class SmsCampaignReadPlatformServiceImpl implements SmsCampaignReadPlatfo final Integer triggerType = JdbcSupport.getInteger(rs, "triggerType"); final EnumOptionData triggerTypeEnum = SmsCampaignTriggerType.triggerType(triggerType); - final DateTime nextTriggerDate = JdbcSupport.getDateTime(rs, "nextTriggerDate"); + final ZonedDateTime nextTriggerDate = JdbcSupport.getDateTime(rs, "nextTriggerDate"); final LocalDate lastTriggerDate = JdbcSupport.getLocalDate(rs, "lastTriggerDate"); final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate"); @@ -262,7 +262,7 @@ public class SmsCampaignReadPlatformServiceImpl implements SmsCampaignReadPlatfo final LocalDate activatedOnDate = JdbcSupport.getLocalDate(rs, "activatedOnDate"); final String activatedByUsername = rs.getString("activatedByUsername"); final String recurrence = rs.getString("recurrence"); - final DateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate"); + final ZonedDateTime recurrenceStartDate = JdbcSupport.getDateTime(rs, "recurrenceStartDate"); final SmsCampaignTimeLine smsCampaignTimeLine = new SmsCampaignTimeLine(submittedOnDate, submittedByUsername, activatedOnDate, activatedByUsername, closedOnDate, closedByUsername); final String reportName = rs.getString("reportName"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java index c83760ef0..8b2bef058 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java @@ -25,8 +25,14 @@ import com.google.gson.JsonElement; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -80,11 +86,6 @@ import org.apache.fineract.useradministration.domain.AppUser; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; -import org.joda.time.DateTimeZone; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -408,7 +409,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP final SmsCampaign smsCampaign = this.smsCampaignRepository.findById(campaignId) .orElseThrow(() -> new SmsCampaignNotFound(campaignId)); LocalDateTime nextTriggerDate = smsCampaign.getNextTriggerDate(); - smsCampaign.setLastTriggerDate(nextTriggerDate.toDate()); + smsCampaign.setLastTriggerDate(Date.from(nextTriggerDate.atZone(ZoneId.systemDefault()).toInstant())); // calculate new trigger date and insert into next trigger date /** @@ -430,12 +431,12 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP DateUtils.getLocalDateOfTenant()); } final LocalDateTime getTime = smsCampaign.getRecurrenceStartDateTime(); - final String dateString = nextRuntime.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":" - + getTime.getSecondOfMinute(); - final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + final String dateString = nextRuntime.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":" + getTime.getSecond(); + final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient() + .appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter(); final LocalDateTime newTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat); - smsCampaign.setNextTriggerDate(newTriggerDateWithTime.toDate()); + smsCampaign.setNextTriggerDate(Date.from(newTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant())); this.smsCampaignRepository.saveAndFlush(smsCampaign); } @@ -450,7 +451,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP .orElseThrow(() -> new SmsCampaignNotFound(campaignId)); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate activationDate = command.localDateValueOfParameterNamed("activationDate"); smsCampaign.activate(currentUser, fmt, activationDate); @@ -475,12 +476,13 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP // to get time of tenant final LocalDateTime getTime = smsCampaign.getRecurrenceStartDateTime(); - final String dateString = nextTriggerDate.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":" - + getTime.getSecondOfMinute(); - final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":" + + getTime.getSecond(); + final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient() + .appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter(); final LocalDateTime nextTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat); - smsCampaign.setNextTriggerDate(nextTriggerDateWithTime.toDate()); + smsCampaign.setNextTriggerDate(Date.from(nextTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant())); this.smsCampaignRepository.saveAndFlush(smsCampaign); } @@ -505,7 +507,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP .orElseThrow(() -> new SmsCampaignNotFound(campaignId)); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closureDate = command.localDateValueOfParameterNamed("closureDate"); smsCampaign.close(currentUser, fmt, closureDate); @@ -616,7 +618,7 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP .orElseThrow(() -> new SmsCampaignNotFound(campaignId)); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate reactivationDate = command.localDateValueOfParameterNamed("activationDate"); smsCampaign.reactivate(currentUser, fmt, reactivationDate); if (smsCampaign.isDirect()) { @@ -637,12 +639,13 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP // to get time of tenant final LocalDateTime getTime = smsCampaign.getRecurrenceStartDateTime(); - final String dateString = nextTriggerDate.toString() + " " + getTime.getHourOfDay() + ":" + getTime.getMinuteOfHour() + ":" - + getTime.getSecondOfMinute(); - final DateTimeFormatter simpleDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + final String dateString = nextTriggerDate.toString() + " " + getTime.getHour() + ":" + getTime.getMinute() + ":" + + getTime.getSecond(); + final DateTimeFormatter simpleDateFormat = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient() + .appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter(); final LocalDateTime nextTriggerDateWithTime = LocalDateTime.parse(dateString, simpleDateFormat); - smsCampaign.setNextTriggerDate(nextTriggerDateWithTime.toDate()); + smsCampaign.setNextTriggerDate(Date.from(nextTriggerDateWithTime.atZone(ZoneId.systemDefault()).toInstant())); } this.smsCampaignRepository.saveAndFlush(smsCampaign); @@ -679,13 +682,13 @@ public class SmsCampaignWritePlatformServiceJpaImpl implements SmsCampaignWriteP } private LocalDateTime tenantDateTime() { - LocalDateTime today = new LocalDateTime(); + LocalDateTime today = LocalDateTime.now(ZoneId.systemDefault()); final FineractPlatformTenant tenant = ThreadLocalContextUtil.getTenant(); if (tenant != null) { - final DateTimeZone zone = DateTimeZone.forID(tenant.getTimezoneId()); + final ZoneId zone = ZoneId.of(tenant.getTimezoneId()); if (zone != null) { - today = new LocalDateTime(zone); + today = LocalDateTime.now(zone); } } return today; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/data/GlobalConfigurationDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/data/GlobalConfigurationDataValidator.java index 65ce3265b..40676ed2e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/data/GlobalConfigurationDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/data/GlobalConfigurationDataValidator.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.configuration.data; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaDateTimeAdapter.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaDateTimeAdapter.java index 128c2e19d..22c07d3a6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaDateTimeAdapter.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaDateTimeAdapter.java @@ -23,19 +23,20 @@ import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import java.lang.reflect.Type; -import org.joda.time.DateTime; +import java.time.ZonedDateTime; /** - * Serializer for Joda Time {@link DateTime} that returns the date as long to match previous (Jackson) functionality. + * Serializer for Joda Time {@link ZonedDateTime} that returns the date as long to match previous (Jackson) + * functionality. */ -public class JodaDateTimeAdapter implements JsonSerializer { +public class JodaDateTimeAdapter implements JsonSerializer { @Override @SuppressWarnings("unused") - public JsonElement serialize(final DateTime src, final Type typeOfSrc, final JsonSerializationContext context) { + public JsonElement serialize(final ZonedDateTime src, final Type typeOfSrc, final JsonSerializationContext context) { JsonElement element = null; if (src != null) { - element = new JsonPrimitive(src.getMillis()); + element = new JsonPrimitive(src.toInstant().toEpochMilli()); } return element; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaLocalDateAdapter.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaLocalDateAdapter.java index 6004e6315..2fced22a0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaLocalDateAdapter.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaLocalDateAdapter.java @@ -24,7 +24,8 @@ import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import java.lang.reflect.Type; -import org.joda.time.LocalDate; +import java.time.LocalDate; +import java.time.temporal.ChronoField; /** * Serializer for Joda Time {@link LocalDate} that returns the date in array format to match previous Jackson @@ -38,8 +39,8 @@ public class JodaLocalDateAdapter implements JsonSerializer { JsonArray array = null; if (src != null) { array = new JsonArray(); - array.add(new JsonPrimitive(src.getYearOfEra())); - array.add(new JsonPrimitive(src.getMonthOfYear())); + array.add(new JsonPrimitive(src.get(ChronoField.YEAR_OF_ERA))); + array.add(new JsonPrimitive(src.getMonthValue())); array.add(new JsonPrimitive(src.getDayOfMonth())); } return array; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaMonthDayAdapter.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaMonthDayAdapter.java index 659c70e2f..aeb4a5bfa 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaMonthDayAdapter.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JodaMonthDayAdapter.java @@ -18,13 +18,15 @@ */ package org.apache.fineract.infrastructure.core.api; +import static java.time.temporal.ChronoField.MONTH_OF_YEAR; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import java.lang.reflect.Type; -import org.joda.time.MonthDay; +import java.time.MonthDay; /** * Serializer for Joda Time {@link MonthDay} that returns the date in array format to match previous Jackson @@ -38,7 +40,7 @@ public class JodaMonthDayAdapter implements JsonSerializer { JsonArray array = null; if (src != null) { array = new JsonArray(); - array.add(new JsonPrimitive(src.getMonthOfYear())); + array.add(new JsonPrimitive(src.get(MONTH_OF_YEAR))); array.add(new JsonPrimitive(src.getDayOfMonth())); } return array; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java index 72616401a..226419b9c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonCommand.java @@ -23,6 +23,11 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.MonthDay; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.Date; import java.util.Locale; @@ -34,11 +39,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.security.domain.BasicPasswordEncodablePlatformUser; import org.apache.fineract.infrastructure.security.domain.PlatformUser; import org.apache.fineract.infrastructure.security.service.PlatformPasswordEncoder; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.MonthDay; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; /** * Immutable representation of a command. @@ -368,7 +368,7 @@ public final class JsonCommand { public boolean isChangeInDateParameterNamed(final String parameterName, final Date existingValue) { LocalDate localDate = null; if (existingValue != null) { - localDate = LocalDate.fromDateFields(existingValue); + localDate = LocalDate.ofInstant(existingValue.toInstant(), ZoneId.systemDefault()); } return isChangeInLocalDateParameterNamed(parameterName, localDate); } @@ -376,7 +376,7 @@ public final class JsonCommand { public boolean isChangeInTimeParameterNamed(final String parameterName, final Date existingValue, final String timeFormat) { LocalDateTime time = null; if (existingValue != null) { - DateTimeFormatter timeFormtter = DateTimeFormat.forPattern(timeFormat); + DateTimeFormatter timeFormtter = DateTimeFormatter.ofPattern(timeFormat); time = LocalDateTime.parse(existingValue.toString(), timeFormtter); } return isChangeInLocalTimeParameterNamed(parameterName, time); @@ -417,7 +417,7 @@ public final class JsonCommand { if (localDate == null) { return null; } - return localDate.toDateTimeAtStartOfDay().toDate(); + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public boolean isChangeInStringParameterNamed(final String parameterName, final String existingValue) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonQuery.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonQuery.java index 9a5af6279..e3ac1344f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonQuery.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/api/JsonQuery.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Arrays; import java.util.Map; import org.apache.commons.lang3.ObjectUtils; @@ -30,7 +31,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.security.domain.BasicPasswordEncodablePlatformUser; import org.apache.fineract.infrastructure.security.domain.PlatformUser; import org.apache.fineract.infrastructure.security.service.PlatformPasswordEncoder; -import org.joda.time.LocalDate; /** * Immutable representation of a query. diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java index 0cb77586f..5401508dd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java @@ -22,6 +22,7 @@ import com.google.common.base.Splitter; import com.google.gson.JsonArray; import java.math.BigDecimal; import java.text.ParseException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -32,7 +33,6 @@ import net.fortuna.ical4j.model.property.RRule; import net.fortuna.ical4j.validate.ValidationException; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.joda.time.LocalDate; import org.quartz.CronExpression; import org.springframework.util.ObjectUtils; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java index 6621d18e1..189ec0d25 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/JdbcSupport.java @@ -24,10 +24,11 @@ import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Date; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; import org.springframework.jdbc.support.JdbcUtils; /** @@ -40,38 +41,38 @@ public final class JdbcSupport { } - public static DateTime getDateTime(final ResultSet rs, final String columnName) throws SQLException { - DateTime dateTime = null; + public static ZonedDateTime getDateTime(final ResultSet rs, final String columnName) throws SQLException { + ZonedDateTime dateTime = null; final Timestamp dateValue = rs.getTimestamp(columnName); if (dateValue != null) { - dateTime = new DateTime(dateValue.getTime()); + dateTime = ZonedDateTime.ofInstant(new Date(dateValue.getTime()).toInstant(), ZoneId.systemDefault()); } return dateTime; } - public static DateTime getLocalDateTime(final ResultSet rs, final String columnName) throws SQLException { - DateTime dateTime = null; + public static ZonedDateTime getLocalDateTime(final ResultSet rs, final String columnName) throws SQLException { + ZonedDateTime dateTime = null; final Timestamp dateValue = rs.getTimestamp(columnName); if (dateValue != null) { - dateTime = new DateTime(dateValue.getTime()).withZone(getDateTimeZoneOfTenant()); + dateTime = ZonedDateTime.ofInstant(new Date(dateValue.getTime()).toInstant(), getDateTimeZoneOfTenant()); } return dateTime; } public static LocalDate getLocalDate(final ResultSet rs, final String columnName) throws SQLException { LocalDate localDate = null; - final Date dateValue = rs.getDate(columnName); + final Date dateValue = rs.getTimestamp(columnName); if (dateValue != null) { - localDate = new LocalDate(dateValue); + localDate = LocalDate.ofInstant(dateValue.toInstant(), ZoneId.systemDefault()); } return localDate; } public static LocalTime getLocalTime(final ResultSet rs, final String columnName) throws SQLException { LocalTime localTime = null; - final Date timeValue = rs.getTime(columnName); + final Date timeValue = rs.getTimestamp(columnName); if (timeValue != null) { - localTime = new LocalTime(timeValue); + localTime = LocalTime.ofInstant(timeValue.toInstant(), ZoneId.systemDefault()); } return localTime; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/LocalDateInterval.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/LocalDateInterval.java index a867a6322..5ad239f23 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/LocalDateInterval.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/LocalDateInterval.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.infrastructure.core.domain; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; -import org.joda.time.Days; -import org.joda.time.LocalDate; public class LocalDateInterval { @@ -50,7 +50,7 @@ public class LocalDateInterval { } private Integer daysBetween() { - return Days.daysBetween(this.startDate, this.endDate).getDays(); + return Math.toIntExact(ChronoUnit.DAYS.between(this.startDate, this.endDate)); } public boolean containsPortionOf(final LocalDateInterval interval) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java index 86a9c1f4c..7af14591e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/FromJsonHelper.java @@ -26,6 +26,9 @@ import com.google.gson.JsonParser; import java.lang.reflect.Type; import java.math.BigDecimal; import java.security.InvalidParameterException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.MonthDay; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -36,9 +39,6 @@ import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.UnsupportedParameterException; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.MonthDay; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/GoogleGsonSerializerHelper.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/GoogleGsonSerializerHelper.java index 86833d596..b91456968 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/GoogleGsonSerializerHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/GoogleGsonSerializerHelper.java @@ -21,6 +21,9 @@ package org.apache.fineract.infrastructure.core.serialization; import com.google.gson.ExclusionStrategy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import java.time.LocalDate; +import java.time.MonthDay; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; @@ -31,9 +34,6 @@ import org.apache.fineract.infrastructure.core.api.JodaMonthDayAdapter; import org.apache.fineract.infrastructure.core.api.ParameterListExclusionStrategy; import org.apache.fineract.infrastructure.core.api.ParameterListInclusionStrategy; import org.apache.fineract.infrastructure.core.exception.UnsupportedParameterException; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.stereotype.Service; /** @@ -102,7 +102,7 @@ public final class GoogleGsonSerializerHelper { public static void registerTypeAdapters(final GsonBuilder builder) { builder.registerTypeAdapter(java.util.Date.class, new DateAdapter()); builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter()); - builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter()); + builder.registerTypeAdapter(ZonedDateTime.class, new JodaDateTimeAdapter()); builder.registerTypeAdapter(MonthDay.class, new JodaMonthDayAdapter()); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java index 83a35f15e..4ef551017 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/serialization/JsonParserHelper.java @@ -18,6 +18,10 @@ */ package org.apache.fineract.infrastructure.core.serialization; +import static java.time.temporal.ChronoField.DAY_OF_MONTH; +import static java.time.temporal.ChronoField.MONTH_OF_YEAR; +import static java.time.temporal.ChronoField.YEAR_OF_ERA; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -27,6 +31,13 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.text.ParseException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.MonthDay; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeFormatterBuilder; +import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -35,11 +46,6 @@ import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.MonthDay; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.format.number.NumberStyleFormatter; /** @@ -303,7 +309,7 @@ public class JsonParserHelper { final Integer month = dateArray.get(1).getAsInt(); final Integer day = dateArray.get(2).getAsInt(); - value = new LocalDate().withYearOfEra(year).withMonthOfYear(month).withDayOfMonth(day); + value = LocalDate.now(ZoneId.systemDefault()).with(YEAR_OF_ERA, year).with(MONTH_OF_YEAR, month).with(DAY_OF_MONTH, day); } } @@ -336,8 +342,9 @@ public class JsonParserHelper { final String valueAsString = primitive.getAsString(); if (StringUtils.isNotBlank(valueAsString)) { try { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(dateFormat).withLocale(clientApplicationLocale); - value = MonthDay.parse(valueAsString.toLowerCase(clientApplicationLocale), formatter); + final DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient() + .appendPattern(dateFormat).toFormatter(clientApplicationLocale); + value = MonthDay.parse(valueAsString, formatter); } catch (final IllegalArgumentException e) { final List dataValidationErrors = new ArrayList<>(); final ApiParameterError error = ApiParameterError.parameterError("validation.msg.invalid.month.day", @@ -406,7 +413,7 @@ public class JsonParserHelper { parametersPassedInCommand.add(parameterName); try { - DateTimeFormatter timeFormtter = DateTimeFormat.forPattern(timeFormat); + DateTimeFormatter timeFormtter = DateTimeFormatter.ofPattern(timeFormat); final JsonPrimitive primitive = object.get(parameterName).getAsJsonPrimitive(); timeValueAsString = primitive.getAsString(); if (StringUtils.isNotBlank(timeValueAsString)) { @@ -462,8 +469,11 @@ public class JsonParserHelper { LocalDateTime eventLocalDateTime = null; if (StringUtils.isNotBlank(dateTimeAsString)) { try { - eventLocalDateTime = DateTimeFormat.forPattern(dateTimeFormat).withLocale(clientApplicationLocale) - .parseLocalDateTime(dateTimeAsString.toLowerCase(clientApplicationLocale)); + DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive().parseLenient() + .appendPattern(dateTimeFormat).optionalStart().appendPattern(" HH:mm:ss").optionalEnd() + .parseDefaulting(ChronoField.HOUR_OF_DAY, 0).parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0) + .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0).toFormatter(clientApplicationLocale); + eventLocalDateTime = LocalDateTime.parse(dateTimeAsString, formatter); } catch (final IllegalArgumentException e) { final List dataValidationErrors = new ArrayList<>(); final ApiParameterError error = ApiParameterError diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java index 03f49ac47..41f29b1c5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java @@ -20,6 +20,11 @@ package org.apache.fineract.infrastructure.core.service; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -27,12 +32,6 @@ import java.util.TimeZone; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; public final class DateUtils { @@ -40,11 +39,11 @@ public final class DateUtils { } - public static DateTimeZone getDateTimeZoneOfTenant() { + public static ZoneId getDateTimeZoneOfTenant() { final FineractPlatformTenant tenant = ThreadLocalContextUtil.getTenant(); - DateTimeZone zone = null; + ZoneId zone = null; if (tenant != null) { - zone = DateTimeZone.forID(tenant.getTimezoneId()); + zone = ZoneId.of(tenant.getTimezoneId()); } return zone; } @@ -59,16 +58,16 @@ public final class DateUtils { } public static Date getDateOfTenant() { - return getLocalDateOfTenant().toDateTimeAtStartOfDay().toDate(); + return Date.from(getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()); } public static LocalDate getLocalDateOfTenant() { - LocalDate today = new LocalDate(); + LocalDate today = LocalDate.now(ZoneId.systemDefault()); - final DateTimeZone zone = getDateTimeZoneOfTenant(); + final ZoneId zone = getDateTimeZoneOfTenant(); if (zone != null) { - today = new LocalDate(zone); + today = LocalDate.now(zone); } return today; @@ -76,11 +75,11 @@ public final class DateUtils { public static LocalDateTime getLocalDateTimeOfTenant() { - LocalDateTime today = new LocalDateTime(); + LocalDateTime today = LocalDateTime.now(ZoneId.systemDefault()); - final DateTimeZone zone = getDateTimeZoneOfTenant(); + final ZoneId zone = getDateTimeZoneOfTenant(); if (zone != null) { - today = new LocalDateTime(zone); + today = LocalDateTime.now(zone); } return today; @@ -89,9 +88,8 @@ public final class DateUtils { public static LocalDate parseLocalDate(final String stringDate, final String pattern) { try { - final DateTimeFormatter dateStringFormat = DateTimeFormat.forPattern(pattern); - dateStringFormat.withZone(getDateTimeZoneOfTenant()); - final DateTime dateTime = dateStringFormat.parseDateTime(stringDate); + final DateTimeFormatter dateStringFormat = DateTimeFormatter.ofPattern(pattern).withZone(getDateTimeZoneOfTenant()); + final ZonedDateTime dateTime = ZonedDateTime.parse(stringDate, dateStringFormat); return dateTime.toLocalDate(); } catch (final IllegalArgumentException e) { final List dataValidationErrors = new ArrayList<>(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/GenericDataServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/GenericDataServiceImpl.java index f2acc5153..8c11f880e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/GenericDataServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/GenericDataServiceImpl.java @@ -18,6 +18,9 @@ */ package org.apache.fineract.infrastructure.dataqueries.service; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; @@ -28,8 +31,6 @@ import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnHeader import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnValueData; import org.apache.fineract.infrastructure.dataqueries.data.ResultsetRowData; import org.apache.fineract.infrastructure.dataqueries.exception.DatatableNotFoundException; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -161,15 +162,14 @@ public class GenericDataServiceImpl implements GenericDataService { writer.append(currVal); } else { if (currColType.equals("DATE")) { - final LocalDate localDate = new LocalDate(currVal); + final LocalDate localDate = LocalDate.parse(currVal); writer.append( - "[" + localDate.getYear() + ", " + localDate.getMonthOfYear() + ", " + localDate.getDayOfMonth() + "]"); + "[" + localDate.getYear() + ", " + localDate.getMonthValue() + ", " + localDate.getDayOfMonth() + "]"); } else if (currColType.equals("DATETIME")) { - final LocalDateTime localDateTime = new LocalDateTime(currVal); - writer.append("[" + localDateTime.getYear() + ", " + localDateTime.getMonthOfYear() + ", " - + localDateTime.getDayOfMonth() + " " + localDateTime.getHourOfDay() + ", " - + localDateTime.getMinuteOfHour() + ", " + localDateTime.getSecondOfMinute() + ", " - + localDateTime.getMillisOfSecond() + "]"); + final LocalDateTime localDateTime = LocalDateTime.parse(currVal); + writer.append("[" + localDateTime.getYear() + ", " + localDateTime.getMonthValue() + ", " + + localDateTime.getDayOfMonth() + " " + localDateTime.getHour() + ", " + localDateTime.getMinute() + + ", " + localDateTime.getSecond() + ", " + localDateTime.get(ChronoField.MILLI_OF_SECOND) + "]"); } else { writer.append(doubleQuote + replace(currVal, doubleQuote, slashDoubleQuote) + doubleQuote); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java index 39fff013f..1e3032719 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java @@ -26,6 +26,8 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -67,8 +69,6 @@ import org.apache.fineract.infrastructure.security.service.PlatformSecurityConte import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.infrastructure.security.utils.SQLInjectionValidator; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/data/FineractEntityDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/data/FineractEntityDataValidator.java index 90f0d31ae..f1638a23e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/data/FineractEntityDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/data/FineractEntityDataValidator.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.entityaccess.data; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -42,7 +43,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsProductRepository; import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException; import org.apache.fineract.useradministration.domain.RoleRepository; import org.apache.fineract.useradministration.exception.RoleNotFoundException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/DeviceRegistration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/DeviceRegistration.java index 1eb9e5130..1b336e791 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/DeviceRegistration.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/DeviceRegistration.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.infrastructure.gcm.domain; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -50,7 +51,7 @@ public final class DeviceRegistration extends AbstractPersistableCustom { private DeviceRegistration(final Client client, final String registrationId) { this.client = client; this.registrationId = registrationId; - this.updatedOnDate = DateUtils.getLocalDateTimeOfTenant().toDate(); + this.updatedOnDate = Date.from(DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()).toInstant()); } public static DeviceRegistration instance(final Client client, final String registrationId) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationReadPlatformServiceImpl.java index 1cf8aa11a..ee1e370a2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationReadPlatformServiceImpl.java @@ -20,14 +20,16 @@ package org.apache.fineract.infrastructure.gcm.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Collection; +import java.util.Date; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationData; import org.apache.fineract.infrastructure.gcm.exception.DeviceRegistrationNotFoundException; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.client.data.ClientData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -72,7 +74,8 @@ public class DeviceRegistrationReadPlatformServiceImpl implements DeviceRegistra final Long clientId = rs.getLong("clientId"); final String clientName = rs.getString("clientName"); ClientData clientData = ClientData.instance(clientId, clientName); - return DeviceRegistrationData.instance(id, clientData, registrationId, updatedOnDate.toDate()); + return DeviceRegistrationData.instance(id, clientData, registrationId, + Date.from(updatedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationWritePlatformServiceImpl.java index 57c61be33..6a3288994 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationWritePlatformServiceImpl.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.infrastructure.gcm.service; +import java.time.ZoneId; +import java.util.Date; import javax.persistence.PersistenceException; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; @@ -93,7 +95,7 @@ public class DeviceRegistrationWritePlatformServiceImpl implements DeviceRegistr Client client = this.clientRepositoryWrapper.findOneWithNotFoundDetection(clientId); deviceRegistration.setClient(client); deviceRegistration.setRegistrationId(registrationId); - deviceRegistration.setUpdatedOnDate(DateUtils.getLocalDateTimeOfTenant().toDate()); + deviceRegistration.setUpdatedOnDate(Date.from(DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()).toInstant())); return deviceRegistration; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/NotificationSenderService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/NotificationSenderService.java index 8a40cac38..3de6c6382 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/NotificationSenderService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/NotificationSenderService.java @@ -19,8 +19,10 @@ package org.apache.fineract.infrastructure.gcm.service; import java.io.IOException; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -107,7 +109,8 @@ public class NotificationSenderService { res = s.send(msg, registrationId, 3); if (res.getSuccess() != null && res.getSuccess() > 0) { smsMessage.setStatusType(SmsMessageStatusType.SENT.getValue()); - smsMessage.setDeliveredOnDate(DateUtils.getLocalDateOfTenant().toDate()); + smsMessage.setDeliveredOnDate( + Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); } else if (res.getFailure() != null && res.getFailure() > 0) { smsMessage.setStatusType(SmsMessageStatusType.FAILED.getValue()); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResourceSwagger.java index 383cd9ee1..99f37e2d4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResourceSwagger.java @@ -19,12 +19,12 @@ package org.apache.fineract.infrastructure.hooks.api; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.infrastructure.hooks.data.Event; import org.apache.fineract.infrastructure.hooks.data.Field; import org.apache.fineract.infrastructure.hooks.data.Grouping; import org.apache.fineract.infrastructure.hooks.data.HookTemplateData; -import org.joda.time.LocalDate; /** * Created by sanyam on 11/8/17. diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/data/HookData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/data/HookData.java index e06e14ea1..8f3d892df 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/data/HookData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/data/HookData.java @@ -19,8 +19,8 @@ package org.apache.fineract.infrastructure.hooks.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.List; -import org.joda.time.LocalDate; public final class HookData implements Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/service/HookReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/service/HookReadPlatformServiceImpl.java index 34f73662e..1ab259f12 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/service/HookReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/service/HookReadPlatformServiceImpl.java @@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.hooks.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -34,7 +35,6 @@ import org.apache.fineract.infrastructure.hooks.domain.Hook; import org.apache.fineract.infrastructure.hooks.domain.HookRepository; import org.apache.fineract.infrastructure.hooks.exception.HookNotFoundException; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.dao.EmptyResultDataAccessException; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResourceSwagger.java index 93349bf48..0e7a44577 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResourceSwagger.java @@ -19,11 +19,11 @@ package org.apache.fineract.infrastructure.reportmailingjob.api; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.ZonedDateTime; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.dataqueries.data.ReportData; import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobTimelineData; -import org.joda.time.DateTime; /** * Created by sanyam on 13/8/17. @@ -61,7 +61,7 @@ final class ReportMailingJobApiResourceSwagger { @Schema(example = "Client Numbers Report") public String description; @Schema(example = "1469627093000") - public DateTime startDateTime; + public ZonedDateTime startDateTime; @Schema(example = "") public String recurrence; public ReportMailingJobTimelineData timeline; @@ -78,7 +78,7 @@ final class ReportMailingJobApiResourceSwagger { @Schema(example = "{\"startDate\":\"2016-07-01\",\"endDate\":\"2016-08-02\",\"selectOffice\":\"1\",\"environementUrl\":\"environementUrl\"}") public String stretchyReportParamMap; @Schema(example = "1469627093000") - public DateTime nextRunDateTime; + public ZonedDateTime nextRunDateTime; @Schema(example = "0") public Integer numberOfRuns; @Schema(example = "true") @@ -103,7 +103,7 @@ final class ReportMailingJobApiResourceSwagger { @Schema(example = "Client Numbers Report") public String description; @Schema(example = "1469627093000") - public DateTime startDateTime; + public ZonedDateTime startDateTime; @Schema(example = "120") public Long stretchyReportId; @Schema(example = "info@musonisystem.com") @@ -144,7 +144,7 @@ final class ReportMailingJobApiResourceSwagger { @Schema(example = "dd-MM-yyyy HH:mm:ss") public String dateFormat; @Schema(example = "10-08-2016 23:30:00") - public DateTime startDateTime; + public ZonedDateTime startDateTime; } @Schema(description = "PutReportMailingJobsResponse") @@ -159,7 +159,7 @@ final class ReportMailingJobApiResourceSwagger { private PutReportMailingJobsResponseChanges() {} @Schema(example = "10-08-2016 23:30:00") - public DateTime startDateTime; + public ZonedDateTime startDateTime; } @Schema(example = "1") diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobRunHistoryApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobRunHistoryApiResourceSwagger.java index c864787de..6d09414f4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobRunHistoryApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobRunHistoryApiResourceSwagger.java @@ -19,7 +19,7 @@ package org.apache.fineract.infrastructure.reportmailingjob.api; import io.swagger.v3.oas.annotations.media.Schema; -import org.joda.time.DateTime; +import java.time.ZonedDateTime; /** * Created by sanyam on 13/8/17. @@ -42,9 +42,9 @@ final class ReportMailingJobRunHistoryApiResourceSwagger { @Schema(example = "1") public Long reportMailingJobId; @Schema(example = "1469627093050") - public DateTime startDateTime; + public ZonedDateTime startDateTime; @Schema(example = "1469627093050") - public DateTime endDateTime; + public ZonedDateTime endDateTime; @Schema(example = "success") public String status; @Schema(example = "") diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobData.java index 40b58b9d2..44cbc5b0b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobData.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.infrastructure.reportmailingjob.data; +import java.time.ZonedDateTime; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.dataqueries.data.ReportData; -import org.joda.time.DateTime; /** * Immutable data object representing report mailing job data. @@ -31,7 +31,7 @@ public final class ReportMailingJobData { private final Long id; private final String name; private final String description; - private final DateTime startDateTime; + private final ZonedDateTime startDateTime; private final String recurrence; private final ReportMailingJobTimelineData timeline; private final String emailRecipients; @@ -40,8 +40,8 @@ public final class ReportMailingJobData { private final EnumOptionData emailAttachmentFileFormat; private final ReportData stretchyReport; private final String stretchyReportParamMap; - private final DateTime previousRunDateTime; - private final DateTime nextRunDateTime; + private final ZonedDateTime previousRunDateTime; + private final ZonedDateTime nextRunDateTime; private final String previousRunStatus; private final String previousRunErrorLog; private final String previousRunErrorMessage; @@ -51,10 +51,10 @@ public final class ReportMailingJobData { private final List stretchyReportParamDateOptions; private final Long runAsUserId; - private ReportMailingJobData(final Long id, final String name, final String description, final DateTime startDateTime, + private ReportMailingJobData(final Long id, final String name, final String description, final ZonedDateTime startDateTime, final String recurrence, final ReportMailingJobTimelineData timeline, final String emailRecipients, final String emailSubject, final String emailMessage, final EnumOptionData emailAttachmentFileFormat, final ReportData stretchyReport, - final String stretchyReportParamMap, final DateTime previousRunDateTime, final DateTime nextRunDateTime, + final String stretchyReportParamMap, final ZonedDateTime previousRunDateTime, final ZonedDateTime nextRunDateTime, final String previousRunStatus, final String previousRunErrorLog, final String previousRunErrorMessage, final Integer numberOfRuns, final boolean isActive, final List emailAttachmentFileFormatOptions, final List stretchyReportParamDateOptions, final Long runAsUserId) { @@ -85,12 +85,13 @@ public final class ReportMailingJobData { /** * @return an instance of the ReportMailingJobData class **/ - public static ReportMailingJobData newInstance(final Long id, final String name, final String description, final DateTime startDateTime, - final String recurrence, final ReportMailingJobTimelineData timeline, final String emailRecipients, final String emailSubject, - final String emailMessage, final EnumOptionData emailAttachmentFileFormat, final ReportData stretchyReport, - final String stretchyReportParamMap, final DateTime previousRunDateTime, final DateTime nextRunDateTime, - final String previousRunStatus, final String previousRunErrorLog, final String previousRunErrorMessage, - final Integer numberOfRuns, final boolean isActive, final Long runAsUserId) { + public static ReportMailingJobData newInstance(final Long id, final String name, final String description, + final ZonedDateTime startDateTime, final String recurrence, final ReportMailingJobTimelineData timeline, + final String emailRecipients, final String emailSubject, final String emailMessage, + final EnumOptionData emailAttachmentFileFormat, final ReportData stretchyReport, final String stretchyReportParamMap, + final ZonedDateTime previousRunDateTime, final ZonedDateTime nextRunDateTime, final String previousRunStatus, + final String previousRunErrorLog, final String previousRunErrorMessage, final Integer numberOfRuns, final boolean isActive, + final Long runAsUserId) { return new ReportMailingJobData(id, name, description, startDateTime, recurrence, timeline, emailRecipients, emailSubject, emailMessage, emailAttachmentFileFormat, stretchyReport, stretchyReportParamMap, previousRunDateTime, nextRunDateTime, previousRunStatus, previousRunErrorLog, previousRunErrorMessage, numberOfRuns, isActive, null, null, runAsUserId); @@ -145,7 +146,7 @@ public final class ReportMailingJobData { /** * @return the startDateTime */ - public DateTime getStartDateTime() { + public ZonedDateTime getStartDateTime() { return startDateTime; } @@ -208,14 +209,14 @@ public final class ReportMailingJobData { /** * @return the previousRunDateTime */ - public DateTime getPreviousRunDateTime() { + public ZonedDateTime getPreviousRunDateTime() { return previousRunDateTime; } /** * @return the nextRunDateTime */ - public DateTime getNextRunDateTime() { + public ZonedDateTime getNextRunDateTime() { return nextRunDateTime; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobRunHistoryData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobRunHistoryData.java index d86159945..48d4d14f3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobRunHistoryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobRunHistoryData.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.infrastructure.reportmailingjob.data; -import org.joda.time.DateTime; +import java.time.ZonedDateTime; /** * Immutable data object representing report mailing job run history data. @@ -27,8 +27,8 @@ public final class ReportMailingJobRunHistoryData { private final Long id; private final Long reportMailingJobId; - private final DateTime startDateTime; - private final DateTime endDateTime; + private final ZonedDateTime startDateTime; + private final ZonedDateTime endDateTime; private final String status; private final String errorMessage; private final String errorLog; @@ -36,8 +36,8 @@ public final class ReportMailingJobRunHistoryData { /** * ReportMailingJobRunHistoryData private constructor **/ - private ReportMailingJobRunHistoryData(Long id, Long reportMailingJobId, DateTime startDateTime, DateTime endDateTime, String status, - String errorMessage, String errorLog) { + private ReportMailingJobRunHistoryData(Long id, Long reportMailingJobId, ZonedDateTime startDateTime, ZonedDateTime endDateTime, + String status, String errorMessage, String errorLog) { this.id = id; this.reportMailingJobId = reportMailingJobId; this.startDateTime = startDateTime; @@ -52,8 +52,8 @@ public final class ReportMailingJobRunHistoryData { * * @return ReportMailingJobRunHistoryData object **/ - public static ReportMailingJobRunHistoryData newInstance(Long id, Long reportMailingJobId, DateTime startDateTime, DateTime endDateTime, - String status, String errorMessage, String errorLog) { + public static ReportMailingJobRunHistoryData newInstance(Long id, Long reportMailingJobId, ZonedDateTime startDateTime, + ZonedDateTime endDateTime, String status, String errorMessage, String errorLog) { return new ReportMailingJobRunHistoryData(id, reportMailingJobId, startDateTime, endDateTime, status, errorMessage, errorLog); } @@ -74,14 +74,14 @@ public final class ReportMailingJobRunHistoryData { /** * @return the startDateTime */ - public DateTime getStartDateTime() { + public ZonedDateTime getStartDateTime() { return startDateTime; } /** * @return the endDateTime */ - public DateTime getEndDateTime() { + public ZonedDateTime getEndDateTime() { return endDateTime; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobTimelineData.java index 4abc53ab4..c760ebbf3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobTimelineData.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.infrastructure.reportmailingjob.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable data object represent the timeline events of a report mailing job (creation) diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJob.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJob.java index ad5501c46..db368d184 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJob.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJob.java @@ -18,6 +18,10 @@ */ package org.apache.fineract.infrastructure.reportmailingjob.domain; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -37,10 +41,6 @@ import org.apache.fineract.infrastructure.reportmailingjob.ReportMailingJobConst import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobEmailAttachmentFileFormat; import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobPreviousRunStatus; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; @Entity @Table(name = "m_report_mailing_job", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unique_name") }) @@ -129,7 +129,7 @@ public class ReportMailingJob extends AbstractAuditableCustom { this.startDateTime = null; if (startDateTime != null) { - this.startDateTime = startDateTime.toDate(); + this.startDateTime = Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()); } this.recurrence = recurrence; @@ -142,13 +142,13 @@ public class ReportMailingJob extends AbstractAuditableCustom { this.previousRunDateTime = null; if (previousRunDateTime != null) { - this.previousRunDateTime = previousRunDateTime.toDate(); + this.previousRunDateTime = Date.from(previousRunDateTime.atZone(ZoneId.systemDefault()).toInstant()); } this.nextRunDateTime = null; if (nextRunDateTime != null) { - this.nextRunDateTime = nextRunDateTime.toDate(); + this.nextRunDateTime = Date.from(nextRunDateTime.atZone(ZoneId.systemDefault()).toInstant()); } this.previousRunStatus = null; @@ -201,14 +201,14 @@ public class ReportMailingJob extends AbstractAuditableCustom { .integerValueOfParameterNamed(ReportMailingJobConstants.EMAIL_ATTACHMENT_FILE_FORMAT_ID_PARAM_NAME); final ReportMailingJobEmailAttachmentFileFormat emailAttachmentFileFormat = ReportMailingJobEmailAttachmentFileFormat .newInstance(emailAttachmentFileFormatId); - LocalDateTime startDateTime = new LocalDateTime(); + LocalDateTime startDateTime = LocalDateTime.now(ZoneId.systemDefault()); if (jsonCommand.hasParameter(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME)) { final String startDateTimeString = jsonCommand .stringValueOfParameterNamed(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME); if (startDateTimeString != null) { - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(jsonCommand.dateFormat()) + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(jsonCommand.dateFormat()) .withLocale(jsonCommand.extractLocale()); startDateTime = LocalDateTime.parse(startDateTimeString, dateTimeFormatter); } @@ -304,15 +304,17 @@ public class ReportMailingJob extends AbstractAuditableCustom { final String newStartDateTimeString = jsonCommand.stringValueOfParameterNamed(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME); if (!StringUtils.isEmpty(newStartDateTimeString)) { - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(jsonCommand.dateFormat()) + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(jsonCommand.dateFormat()) .withLocale(jsonCommand.extractLocale()); final LocalDateTime newStartDateTime = LocalDateTime.parse(newStartDateTimeString, dateTimeFormatter); - final LocalDateTime oldStartDateTime = (this.startDateTime != null) ? new LocalDateTime(this.startDateTime) : null; + final LocalDateTime oldStartDateTime = (this.startDateTime != null) + ? ZonedDateTime.ofInstant(this.startDateTime.toInstant(), ZoneId.systemDefault()).toLocalDateTime() + : null; if ((oldStartDateTime != null) && !newStartDateTime.equals(oldStartDateTime)) { actualChanges.put(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME, newStartDateTimeString); - this.startDateTime = newStartDateTime.toDate(); + this.startDateTime = Date.from(newStartDateTime.atZone(ZoneId.systemDefault()).toInstant()); } } @@ -372,8 +374,8 @@ public class ReportMailingJob extends AbstractAuditableCustom { /** * @return the value of the startDateTime property **/ - public DateTime getStartDateTime() { - return (this.startDateTime != null) ? new DateTime(this.startDateTime) : null; + public ZonedDateTime getStartDateTime() { + return (this.startDateTime != null) ? ZonedDateTime.ofInstant(this.startDateTime.toInstant(), ZoneId.systemDefault()) : null; } /** @@ -456,15 +458,16 @@ public class ReportMailingJob extends AbstractAuditableCustom { /** * @return the previousRunDateTime */ - public DateTime getPreviousRunDateTime() { - return (this.previousRunDateTime != null) ? new DateTime(this.previousRunDateTime) : null; + public ZonedDateTime getPreviousRunDateTime() { + return (this.previousRunDateTime != null) ? ZonedDateTime.ofInstant(this.previousRunDateTime.toInstant(), ZoneId.systemDefault()) + : null; } /** * @return the nextRunDateTime */ - public DateTime getNextRunDateTime() { - return (this.nextRunDateTime != null) ? new DateTime(this.nextRunDateTime) : null; + public ZonedDateTime getNextRunDateTime() { + return (this.nextRunDateTime != null) ? ZonedDateTime.ofInstant(this.nextRunDateTime.toInstant(), ZoneId.systemDefault()) : null; } /** @@ -531,9 +534,9 @@ public class ReportMailingJob extends AbstractAuditableCustom { * -- previous run date * **/ - public void updatePreviousRunDateTime(final DateTime previousRunDateTime) { + public void updatePreviousRunDateTime(final ZonedDateTime previousRunDateTime) { if (previousRunDateTime != null) { - this.previousRunDateTime = previousRunDateTime.toDate(); + this.previousRunDateTime = Date.from(previousRunDateTime.toInstant()); } } @@ -544,9 +547,9 @@ public class ReportMailingJob extends AbstractAuditableCustom { * -- the next run DateTime * **/ - public void updateNextRunDateTime(final DateTime nextRunDateTime) { + public void updateNextRunDateTime(final ZonedDateTime nextRunDateTime) { if (nextRunDateTime != null) { - this.nextRunDateTime = nextRunDateTime.toDate(); + this.nextRunDateTime = Date.from(nextRunDateTime.toInstant()); } else { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobRunHistory.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobRunHistory.java index 2fd5efbc7..33c07b201 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobRunHistory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobRunHistory.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.infrastructure.reportmailingjob.domain; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -27,7 +29,6 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; -import org.joda.time.DateTime; @Entity @Table(name = "m_report_mailing_job_run_history") @@ -64,19 +65,19 @@ public class ReportMailingJobRunHistory extends AbstractPersistableCustom { /** * ReportMailingJobRunHistory private constructor **/ - private ReportMailingJobRunHistory(final ReportMailingJob reportMailingJob, final DateTime startDateTime, final DateTime endDateTime, - final String status, final String errorMessage, final String errorLog) { + private ReportMailingJobRunHistory(final ReportMailingJob reportMailingJob, final ZonedDateTime startDateTime, + final ZonedDateTime endDateTime, final String status, final String errorMessage, final String errorLog) { this.reportMailingJob = reportMailingJob; this.startDateTime = null; if (startDateTime != null) { - this.startDateTime = startDateTime.toDate(); + this.startDateTime = Date.from(startDateTime.toInstant()); } this.endDateTime = null; if (endDateTime != null) { - this.endDateTime = endDateTime.toDate(); + this.endDateTime = Date.from(endDateTime.toInstant()); } this.status = status; @@ -89,8 +90,8 @@ public class ReportMailingJobRunHistory extends AbstractPersistableCustom { * * @return ReportMailingJobRunHistory object **/ - public static ReportMailingJobRunHistory newInstance(final ReportMailingJob reportMailingJob, final DateTime startDateTime, - final DateTime endDateTime, final String status, final String errorMessage, final String errorLog) { + public static ReportMailingJobRunHistory newInstance(final ReportMailingJob reportMailingJob, final ZonedDateTime startDateTime, + final ZonedDateTime endDateTime, final String status, final String errorMessage, final String errorLog) { return new ReportMailingJobRunHistory(reportMailingJob, startDateTime, endDateTime, status, errorMessage, errorLog); } @@ -104,15 +105,15 @@ public class ReportMailingJobRunHistory extends AbstractPersistableCustom { /** * @return the startDateTime */ - public DateTime getStartDateTime() { - return (this.startDateTime != null) ? new DateTime(this.startDateTime) : null; + public ZonedDateTime getStartDateTime() { + return (this.startDateTime != null) ? ZonedDateTime.ofInstant(this.startDateTime.toInstant(), ZoneId.systemDefault()) : null; } /** * @return the endDateTime */ - public DateTime getEndDateTime() { - return (this.endDateTime != null) ? new DateTime(this.endDateTime) : null; + public ZonedDateTime getEndDateTime() { + return (this.endDateTime != null) ? ZonedDateTime.ofInstant(this.endDateTime.toInstant(), ZoneId.systemDefault()) : null; } /** diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java index 26c0714bc..4807fac69 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobReadPlatformServiceImpl.java @@ -20,6 +20,8 @@ package org.apache.fineract.infrastructure.reportmailingjob.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -36,8 +38,6 @@ import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJob import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobTimelineData; import org.apache.fineract.infrastructure.reportmailingjob.exception.ReportMailingJobNotFoundException; import org.apache.fineract.infrastructure.security.utils.ColumnValidator; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -146,7 +146,7 @@ public class ReportMailingJobReadPlatformServiceImpl implements ReportMailingJob final Long id = rs.getLong("id"); final String name = rs.getString("name"); final String description = rs.getString("description"); - final DateTime startDateTime = JdbcSupport.getDateTime(rs, "startDateTime"); + final ZonedDateTime startDateTime = JdbcSupport.getDateTime(rs, "startDateTime"); final String recurrence = rs.getString("recurrence"); final LocalDate createdOnDate = JdbcSupport.getLocalDate(rs, "createdOnDate"); final LocalDate updatedOnDate = JdbcSupport.getLocalDate(rs, "updatedOnDate"); @@ -164,8 +164,8 @@ public class ReportMailingJobReadPlatformServiceImpl implements ReportMailingJob } final String stretchyReportParamMap = rs.getString("stretchyReportParamMap"); - final DateTime previousRunDateTime = JdbcSupport.getDateTime(rs, "previousRunDateTime"); - final DateTime nextRunDateTime = JdbcSupport.getDateTime(rs, "nextRunDateTime"); + final ZonedDateTime previousRunDateTime = JdbcSupport.getDateTime(rs, "previousRunDateTime"); + final ZonedDateTime nextRunDateTime = JdbcSupport.getDateTime(rs, "nextRunDateTime"); final String previousRunStatus = rs.getString("previousRunStatus"); final String previousRunErrorLog = rs.getString("previousRunErrorLog"); final String previousRunErrorMessage = rs.getString("previousRunErrorMessage"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java index 02b25bf6d..5c83cafae 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobRunHistoryReadPlatformServiceImpl.java @@ -20,6 +20,7 @@ package org.apache.fineract.infrastructure.reportmailingjob.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -29,7 +30,6 @@ import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobRunHistoryData; import org.apache.fineract.infrastructure.security.utils.ColumnValidator; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; @@ -97,8 +97,8 @@ public class ReportMailingJobRunHistoryReadPlatformServiceImpl implements Report public ReportMailingJobRunHistoryData mapRow(ResultSet rs, int rowNum) throws SQLException { final Long id = JdbcSupport.getLong(rs, "id"); final Long reportMailingJobId = JdbcSupport.getLong(rs, "reportMailingJobId"); - final DateTime startDateTime = JdbcSupport.getDateTime(rs, "startDateTime"); - final DateTime endDateTime = JdbcSupport.getDateTime(rs, "endDateTime"); + final ZonedDateTime startDateTime = JdbcSupport.getDateTime(rs, "startDateTime"); + final ZonedDateTime endDateTime = JdbcSupport.getDateTime(rs, "endDateTime"); final String status = rs.getString("status"); final String errorMessage = rs.getString("errorMessage"); final String errorLog = rs.getString("errorLog"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobWritePlatformServiceImpl.java index 081fe7802..0827a16fc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobWritePlatformServiceImpl.java @@ -23,6 +23,11 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.time.Duration; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.Iterator; import java.util.Map; @@ -59,11 +64,6 @@ import org.apache.fineract.infrastructure.reportmailingjob.validation.ReportMail import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; -import org.joda.time.Duration; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -153,8 +153,8 @@ public class ReportMailingJobWritePlatformServiceImpl implements ReportMailingJo // get the recurrence rule string final String recurrence = reportMailingJob.getRecurrence(); - // get the next run DateTime from the ReportMailingJob entity - DateTime nextRunDateTime = reportMailingJob.getNextRunDateTime(); + // get the next run ZonedDateTime from the ReportMailingJob entity + ZonedDateTime nextRunDateTime = reportMailingJob.getNextRunDateTime(); // check if the stretchy report id was updated if (changes.containsKey(ReportMailingJobConstants.STRETCHY_REPORT_ID_PARAM_NAME)) { @@ -170,10 +170,10 @@ public class ReportMailingJobWritePlatformServiceImpl implements ReportMailingJo // go ahead if the recurrence is not null if (StringUtils.isNotBlank(recurrence)) { - // set the start DateTime to the current tenant date time - DateTime startDateTime = DateUtils.getLocalDateTimeOfTenant().toDateTime(); + // set the start ZonedDateTime to the current tenant date time + ZonedDateTime startDateTime = DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()); - // check if the start DateTime was updated + // check if the start ZonedDateTime was updated if (changes.containsKey(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME)) { // get the updated start DateTime startDateTime = reportMailingJob.getStartDateTime(); @@ -182,25 +182,25 @@ public class ReportMailingJobWritePlatformServiceImpl implements ReportMailingJo startDateTime = reportMailingJob.getStartDateTime(); // get the next recurring DateTime - final DateTime nextRecurringDateTime = this.createNextRecurringDateTime(recurrence, startDateTime); + final ZonedDateTime nextRecurringDateTime = this.createNextRecurringDateTime(recurrence, startDateTime); // update the next run time property reportMailingJob.updateNextRunDateTime(nextRecurringDateTime); - // check if the next run DateTime is not empty and the + // check if the next run ZonedDateTime is not empty and the // recurrence is empty } else if (StringUtils.isBlank(recurrence) && (nextRunDateTime != null)) { - // the next run DateTime should be set to null + // the next run ZonedDateTime should be set to null reportMailingJob.updateNextRunDateTime(null); } } if (changes.containsKey(ReportMailingJobConstants.START_DATE_TIME_PARAM_NAME)) { - final DateTime startDateTime = reportMailingJob.getStartDateTime(); + final ZonedDateTime startDateTime = reportMailingJob.getStartDateTime(); // initially set the next recurring date time to the new start // date time - DateTime nextRecurringDateTime = startDateTime; + ZonedDateTime nextRecurringDateTime = startDateTime; // ensure that the recurrence pattern string is not empty if (StringUtils.isNotBlank(recurrence)) { @@ -252,9 +252,9 @@ public class ReportMailingJobWritePlatformServiceImpl implements ReportMailingJo .findByIsActiveTrueAndIsDeletedFalse(); for (ReportMailingJob reportMailingJob : reportMailingJobCollection) { - // get the tenant's date as a DateTime object - final DateTime localDateTimeOftenant = DateUtils.getLocalDateTimeOfTenant().toDateTime(); - final DateTime nextRunDateTime = reportMailingJob.getNextRunDateTime(); + // get the tenant's date as a ZonedDateTime object + final ZonedDateTime localDateTimeOftenant = DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()); + final ZonedDateTime nextRunDateTime = reportMailingJob.getNextRunDateTime(); if (nextRunDateTime != null && nextRunDateTime.isBefore(localDateTimeOftenant)) { // get the emailAttachmentFileFormat enum object @@ -311,13 +311,13 @@ public class ReportMailingJobWritePlatformServiceImpl implements ReportMailingJo * @param errorLog * -- StringBuilder object containing the error log if any * @param jobStartDateTime - * -- the start DateTime of the job + * -- the start ZonedDateTime of the job * **/ private void updateReportMailingJobAfterJobExecution(final ReportMailingJob reportMailingJob, final StringBuilder errorLog, - final DateTime jobStartDateTime) { + final ZonedDateTime jobStartDateTime) { final String recurrence = reportMailingJob.getRecurrence(); - final DateTime nextRunDateTime = reportMailingJob.getNextRunDateTime(); + final ZonedDateTime nextRunDateTime = reportMailingJob.getNextRunDateTime(); ReportMailingJobPreviousRunStatus reportMailingJobPreviousRunStatus = ReportMailingJobPreviousRunStatus.SUCCESS; reportMailingJob.updatePreviousRunErrorLog(null); @@ -340,7 +340,7 @@ public class ReportMailingJobWritePlatformServiceImpl implements ReportMailingJo // job will only run once, no next run time reportMailingJob.updateNextRunDateTime(null); } else if (nextRunDateTime != null) { - final DateTime nextRecurringDateTime = this.createNextRecurringDateTime(recurrence, nextRunDateTime); + final ZonedDateTime nextRecurringDateTime = this.createNextRecurringDateTime(recurrence, nextRunDateTime); // finally update the next run date time property reportMailingJob.updateNextRunDateTime(nextRecurringDateTime); @@ -355,25 +355,25 @@ public class ReportMailingJobWritePlatformServiceImpl implements ReportMailingJo } /** - * create the next recurring DateTime from recurrence pattern, start DateTime and current DateTime + * create the next recurring ZonedDateTime from recurrence pattern, start ZonedDateTime and current DateTime * * @param recurrencePattern * @param startDateTime - * @return DateTime object + * @return ZonedDateTime object */ - private DateTime createNextRecurringDateTime(final String recurrencePattern, final DateTime startDateTime) { - DateTime nextRecurringDateTime = null; + private ZonedDateTime createNextRecurringDateTime(final String recurrencePattern, final ZonedDateTime startDateTime) { + ZonedDateTime nextRecurringDateTime = null; // the recurrence pattern/rule cannot be empty if (StringUtils.isNotBlank(recurrencePattern) && startDateTime != null) { - final LocalDate nextDayLocalDate = startDateTime.plus(Duration.standardDays(1)).toLocalDate(); + final LocalDate nextDayLocalDate = startDateTime.plus(Duration.ofDays(1)).toLocalDate(); final LocalDate nextRecurringLocalDate = CalendarUtils.getNextRecurringDate(recurrencePattern, startDateTime.toLocalDate(), nextDayLocalDate); - final String nextDateTimeString = nextRecurringLocalDate + " " + startDateTime.getHourOfDay() + ":" - + startDateTime.getMinuteOfHour() + ":" + startDateTime.getSecondOfMinute(); - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(DATETIME_FORMAT); + final String nextDateTimeString = nextRecurringLocalDate + " " + startDateTime.getHour() + ":" + startDateTime.getMinute() + ":" + + startDateTime.getSecond(); + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATETIME_FORMAT); - nextRecurringDateTime = DateTime.parse(nextDateTimeString, dateTimeFormatter); + nextRecurringDateTime = ZonedDateTime.parse(nextDateTimeString, dateTimeFormatter); } return nextRecurringDateTime; @@ -387,14 +387,14 @@ public class ReportMailingJobWritePlatformServiceImpl implements ReportMailingJo * @param errorLog * -- StringBuilder object containing the error log if any * @param jobStartDateTime - * -- the start DateTime of the job + * -- the start ZonedDateTime of the job * @param jobRunStatus * -- the status of the job (success/error) * **/ private void createReportMailingJobRunHistroryAfterJobExecution(final ReportMailingJob reportMailingJob, final StringBuilder errorLog, - final DateTime jobStartDateTime, final String jobRunStatus) { - final DateTime jobEndDateTime = DateUtils.getLocalDateTimeOfTenant().toDateTime(); + final ZonedDateTime jobStartDateTime, final String jobRunStatus) { + final ZonedDateTime jobEndDateTime = DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()); final String errorLogToString = (errorLog != null) ? errorLog.toString() : null; final ReportMailingJobRunHistory reportMailingJobRunHistory = ReportMailingJobRunHistory.newInstance(reportMailingJob, jobStartDateTime, jobEndDateTime, jobRunStatus, null, errorLogToString); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/validation/ReportMailingJobValidator.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/validation/ReportMailingJobValidator.java index c65be8906..5cd89019b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/validation/ReportMailingJobValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/validation/ReportMailingJobValidator.java @@ -22,6 +22,8 @@ import com.google.common.base.Splitter; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -41,9 +43,6 @@ import org.apache.fineract.infrastructure.reportmailingjob.ReportMailingJobConst import org.apache.fineract.infrastructure.reportmailingjob.data.ReportMailingJobEmailAttachmentFileFormat; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -125,7 +124,7 @@ public class ReportMailingJobValidator { if (StringUtils.isNotEmpty(dateFormat)) { try { - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(dateFormat).withLocale(jsonCommand.extractLocale()); + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateFormat).withLocale(jsonCommand.extractLocale()); // try to parse the date time string LocalDateTime.parse(startDateTime, dateTimeFormatter); @@ -222,7 +221,7 @@ public class ReportMailingJobValidator { if (StringUtils.isNotEmpty(dateFormat)) { try { - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(dateFormat) + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateFormat) .withLocale(jsonCommand.extractLocale()); // try to parse the date time string diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/AccessTokenData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/AccessTokenData.java index ebd27f7d1..cf9896776 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/AccessTokenData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/AccessTokenData.java @@ -18,16 +18,16 @@ */ package org.apache.fineract.infrastructure.security.data; -import org.joda.time.DateTime; +import java.time.ZonedDateTime; public class AccessTokenData { private final String token; - private final DateTime validFrom; - private final DateTime validTo; + private final ZonedDateTime validFrom; + private final ZonedDateTime validTo; - public AccessTokenData(String token, DateTime validFrom, DateTime validTo) { + public AccessTokenData(String token, ZonedDateTime validFrom, ZonedDateTime validTo) { this.token = token; this.validFrom = validFrom; this.validTo = validTo; @@ -37,11 +37,11 @@ public class AccessTokenData { return token; } - public DateTime getValidFrom() { + public ZonedDateTime getValidFrom() { return validFrom; } - public DateTime getValidTo() { + public ZonedDateTime getValidTo() { return validTo; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/OTPMetadata.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/OTPMetadata.java index 253826c9a..d7cb7c46d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/OTPMetadata.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/OTPMetadata.java @@ -18,23 +18,23 @@ */ package org.apache.fineract.infrastructure.security.data; -import org.joda.time.DateTime; +import java.time.ZonedDateTime; public class OTPMetadata { - private final DateTime requestTime; + private final ZonedDateTime requestTime; private final int tokenLiveTimeInSec; private final boolean extendedAccessToken; private final OTPDeliveryMethod deliveryMethod; - public OTPMetadata(DateTime requestTime, int tokenLiveTimeInSec, boolean extendedAccessToken, OTPDeliveryMethod deliveryMethod) { + public OTPMetadata(ZonedDateTime requestTime, int tokenLiveTimeInSec, boolean extendedAccessToken, OTPDeliveryMethod deliveryMethod) { this.requestTime = requestTime; this.tokenLiveTimeInSec = tokenLiveTimeInSec; this.extendedAccessToken = extendedAccessToken; this.deliveryMethod = deliveryMethod; } - public DateTime getRequestTime() { + public ZonedDateTime getRequestTime() { return requestTime; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/OTPRequest.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/OTPRequest.java index f0c623f66..a472a695e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/OTPRequest.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/data/OTPRequest.java @@ -18,8 +18,9 @@ */ package org.apache.fineract.infrastructure.security.data; +import java.time.ZoneId; +import java.time.ZonedDateTime; import org.apache.fineract.infrastructure.core.service.DateUtils; -import org.joda.time.DateTime; public class OTPRequest { @@ -32,8 +33,8 @@ public class OTPRequest { } public static OTPRequest create(String token, int tokenLiveTimeInSec, boolean extendedAccessToken, OTPDeliveryMethod deliveryMethod) { - final OTPMetadata metadata = new OTPMetadata(DateUtils.getLocalDateTimeOfTenant().toDateTime(), tokenLiveTimeInSec, - extendedAccessToken, deliveryMethod); + final OTPMetadata metadata = new OTPMetadata(DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()), + tokenLiveTimeInSec, extendedAccessToken, deliveryMethod); return new OTPRequest(token, metadata); } @@ -46,7 +47,7 @@ public class OTPRequest { } public boolean isValid() { - DateTime expireTime = metadata.getRequestTime().plusSeconds(metadata.getTokenLiveTimeInSec()); - return DateTime.now().isBefore(expireTime); + ZonedDateTime expireTime = metadata.getRequestTime().plusSeconds(metadata.getTokenLiveTimeInSec()); + return ZonedDateTime.now(ZoneId.systemDefault()).isBefore(expireTime); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TFAccessToken.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TFAccessToken.java index 72fdbca36..24c9d5910 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TFAccessToken.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TFAccessToken.java @@ -18,6 +18,9 @@ */ package org.apache.fineract.infrastructure.security.domain; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -31,8 +34,6 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.security.data.AccessTokenData; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; -import org.joda.time.LocalDateTime; @Entity @Table(name = "twofactor_access_token", uniqueConstraints = { @@ -60,10 +61,10 @@ public class TFAccessToken extends AbstractPersistableCustom { public TFAccessToken() {} public static TFAccessToken create(String token, AppUser user, int tokenLiveTimeInSec) { - DateTime validFrom = DateUtils.getLocalDateTimeOfTenant().toDateTime(); - DateTime validTo = validFrom.plusSeconds(tokenLiveTimeInSec); + ZonedDateTime validFrom = DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()); + ZonedDateTime validTo = validFrom.plusSeconds(tokenLiveTimeInSec); - return new TFAccessToken(token, user, validFrom.toDate(), validTo.toDate(), true); + return new TFAccessToken(token, user, Date.from(validFrom.toInstant()), Date.from(validTo.toInstant()), true); } public TFAccessToken(String token, AppUser user, Date validFrom, Date validTo, boolean enabled) { @@ -79,7 +80,8 @@ public class TFAccessToken extends AbstractPersistableCustom { } public AccessTokenData toTokenData() { - return new AccessTokenData(this.token, getValidFromDate().toDateTime(), getValidToDate().toDateTime()); + return new AccessTokenData(this.token, getValidFromDate().atZone(ZoneId.systemDefault()), + getValidToDate().atZone(ZoneId.systemDefault())); } public String getToken() { @@ -95,11 +97,11 @@ public class TFAccessToken extends AbstractPersistableCustom { } public LocalDateTime getValidFromDate() { - return new LocalDateTime(validFrom); + return ZonedDateTime.ofInstant(validFrom.toInstant(), ZoneId.systemDefault()).toLocalDateTime(); } public LocalDateTime getValidToDate() { - return new LocalDateTime(validTo); + return ZonedDateTime.ofInstant(validTo.toInstant(), ZoneId.systemDefault()).toLocalDateTime(); } public void setToken(String token) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/TwoFactorConfigurationServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/TwoFactorConfigurationServiceImpl.java index 3e88a1ea8..31babfc79 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/TwoFactorConfigurationServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/TwoFactorConfigurationServiceImpl.java @@ -23,6 +23,8 @@ import com.github.mustachejava.Mustache; import com.github.mustachejava.MustacheFactory; import java.io.StringReader; import java.io.StringWriter; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,9 +35,6 @@ import org.apache.fineract.infrastructure.security.data.OTPRequest; import org.apache.fineract.infrastructure.security.domain.TwoFactorConfiguration; import org.apache.fineract.infrastructure.security.domain.TwoFactorConfigurationRepository; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -261,17 +260,17 @@ public class TwoFactorConfigurationServiceImpl implements TwoFactorConfiguration templateData.put("token", request.getToken()); templateData.put("tokenlivetime", request.getMetadata().getTokenLiveTimeInSec()); - DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); - DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("dd.MM.yyyy"); + DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); final LocalDateTime requestTime = request.getMetadata().getRequestTime().toLocalDateTime(); final LocalDateTime expireTime = requestTime.plusSeconds(request.getMetadata().getTokenLiveTimeInSec()); - templateData.put("requestdate", requestTime.toLocalDate().toString(dateFormatter)); - templateData.put("requesttime", requestTime.toLocalTime().toString(timeFormatter)); + templateData.put("requestdate", requestTime.toLocalDate().format(dateFormatter)); + templateData.put("requesttime", requestTime.toLocalTime().format(timeFormatter)); - templateData.put("expiredate", expireTime.toLocalDate().toString(dateFormatter)); - templateData.put("expiretime", expireTime.toLocalTime().toString(timeFormatter)); + templateData.put("expiredate", expireTime.toLocalDate().format(dateFormatter)); + templateData.put("expiretime", expireTime.toLocalTime().format(timeFormatter)); return templateData; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java index b4c7e0154..89bde095c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.infrastructure.sms.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -36,7 +38,6 @@ import org.apache.fineract.infrastructure.sms.SmsApiConstants; import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.group.domain.Group; -import org.joda.time.LocalDate; @Entity @Table(name = "sms_messages_outbound") @@ -120,7 +121,7 @@ public class SmsMessage extends AbstractPersistableCustom { this.mobileNo = mobileNo; this.message = message; this.smsCampaign = smsCampaign; - this.submittedOnDate = LocalDate.now().toDate(); + this.submittedOnDate = Date.from(LocalDate.now(ZoneId.systemDefault()).atStartOfDay(ZoneId.systemDefault()).toInstant()); this.isNotification = isNotification; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResourceSwagger.java index ac88f0f71..8f26777ff 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResourceSwagger.java @@ -19,9 +19,9 @@ package org.apache.fineract.infrastructure.survey.api; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.ZonedDateTime; import java.util.List; import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnHeaderData; -import org.joda.time.DateTime; /** * Created by sanyam on 13/8/17. @@ -86,9 +86,9 @@ final class SurveyApiResourceSwagger { @Schema(example = "201") public Long ppi_fryingpans_cd_q10_fryingpans; @Schema(example = "2014-12-02 20:30:00") - public DateTime Date; + public ZonedDateTime Date; @Schema(example = "Y-m-d H:i:s") - public DateTime dateFormat; + public ZonedDateTime dateFormat; @Schema(example = "en_GB") public String locale; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/data/ClientScoresOverview.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/data/ClientScoresOverview.java index 62e83d119..1ed44f146 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/data/ClientScoresOverview.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/data/ClientScoresOverview.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.infrastructure.survey.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Created by Cieyou on 3/18/14. diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/service/ReadSurveyServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/service/ReadSurveyServiceImpl.java index fc6d515a9..bd146c2e9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/service/ReadSurveyServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/service/ReadSurveyServiceImpl.java @@ -18,7 +18,10 @@ */ package org.apache.fineract.infrastructure.survey.service; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.sql.DataSource; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; @@ -33,7 +36,6 @@ import org.apache.fineract.infrastructure.security.utils.SQLInjectionValidator; import org.apache.fineract.infrastructure.survey.data.ClientScoresOverview; import org.apache.fineract.infrastructure.survey.data.LikelihoodStatus; import org.apache.fineract.infrastructure.survey.data.SurveyDataTableData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.rowset.SqlRowSet; @@ -137,8 +139,10 @@ public class ReadSurveyServiceImpl implements ReadSurveyService { List scoresOverviews = new ArrayList<>(); while (rs.next()) { - scoresOverviews.add(new ClientScoresOverview(rs.getString("code"), rs.getString("name"), rs.getLong("score"), - rs.getDouble("poverty_line"), new LocalDate(rs.getTimestamp("date").getTime()), rs.getLong("id"), surveyName)); + scoresOverviews.add( + new ClientScoresOverview(rs.getString("code"), rs.getString("name"), rs.getLong("score"), rs.getDouble("poverty_line"), + LocalDate.ofInstant(new Date(rs.getTimestamp("date").getTime()).toInstant(), ZoneId.systemDefault()), + rs.getLong("id"), surveyName)); } return scoresOverviews; @@ -167,8 +171,9 @@ public class ReadSurveyServiceImpl implements ReadSurveyService { while (rs.next()) { scoresOverviews.add(new ClientScoresOverview(rs.getString("code"), rs.getString("name"), rs.getLong("score"), - rs.getDouble("poverty_line"), new LocalDate(rs.getTimestamp("date").getTime()), rs.getLong("id"), - rs.getString("surveyName"))); + rs.getDouble("poverty_line"), + LocalDate.ofInstant(new Date(rs.getTimestamp("date").getTime()).toInstant(), ZoneId.systemDefault()), + rs.getLong("id"), rs.getString("surveyName"))); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropAccountData.java index 80e854291..4ed00ec14 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropAccountData.java @@ -20,6 +20,7 @@ package org.apache.fineract.interoperation.data; import jakarta.validation.constraints.NotNull; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -31,7 +32,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountStatusType; import org.apache.fineract.portfolio.savings.domain.SavingsAccountSubStatusEnum; import org.apache.fineract.portfolio.savings.domain.SavingsProduct; -import org.joda.time.LocalDate; public class InteropAccountData extends CommandProcessingResult { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropQuoteRequestData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropQuoteRequestData.java index 55a7fb5d7..0594dfcf9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropQuoteRequestData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropQuoteRequestData.java @@ -36,6 +36,7 @@ import static org.apache.fineract.interoperation.util.InteropUtil.PARAM_TRANSACT import com.google.gson.JsonObject; import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; @@ -43,7 +44,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.interoperation.domain.InteropAmountType; import org.apache.fineract.interoperation.domain.InteropTransactionRole; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; -import org.joda.time.LocalDateTime; public class InteropQuoteRequestData extends InteropRequestData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropQuoteResponseData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropQuoteResponseData.java index 74f2a7a3d..0fca4e146 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropQuoteResponseData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropQuoteResponseData.java @@ -19,10 +19,10 @@ package org.apache.fineract.interoperation.data; import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import org.apache.fineract.interoperation.domain.InteropActionState; -import org.joda.time.LocalDateTime; public final class InteropQuoteResponseData extends InteropResponseData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropRequestData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropRequestData.java index 8f87f93fa..8caf395ae 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropRequestData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropRequestData.java @@ -36,6 +36,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import jakarta.validation.constraints.NotNull; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; @@ -44,8 +46,6 @@ import org.apache.fineract.interoperation.domain.InteropTransactionRole; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.codehaus.jackson.map.annotate.JsonDeserialize; import org.codehaus.jackson.map.ext.JodaDeserializers; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; public class InteropRequestData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropResponseData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropResponseData.java index db824a09d..0b28b676d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropResponseData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropResponseData.java @@ -20,20 +20,21 @@ package org.apache.fineract.interoperation.data; import jakarta.validation.constraints.NotNull; import java.beans.Transient; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.interoperation.domain.InteropActionState; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; public class InteropResponseData extends CommandProcessingResult { public static final String ISO_DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ"; // public static final SimpleDateFormat ISO_DATE_TIME_FORMATTER = new // SimpleDateFormat(ISO_DATE_TIME_PATTERN); // TODO: not synchronized - public static final DateTimeFormatter ISO_DATE_TIME_FORMATTER = DateTimeFormat.forPattern(ISO_DATE_TIME_PATTERN); + public static final DateTimeFormatter ISO_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(ISO_DATE_TIME_PATTERN); @NotNull private final String transactionCode; @@ -99,6 +100,6 @@ public class InteropResponseData extends CommandProcessingResult { } protected static String format(LocalDateTime date) { - return date == null ? null : date.toString(ISO_DATE_TIME_FORMATTER); + return date == null ? null : ZonedDateTime.of(date, ZoneId.systemDefault()).format(ISO_DATE_TIME_FORMATTER); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionData.java index a65b43ff5..ab21774d0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionData.java @@ -20,6 +20,7 @@ package org.apache.fineract.interoperation.data; import jakarta.validation.constraints.NotNull; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.interoperation.util.MathUtil; import org.apache.fineract.portfolio.note.domain.Note; @@ -28,7 +29,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountChargePaidBy; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; -import org.joda.time.LocalDate; public class InteropTransactionData extends CommandProcessingResult { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionRequestData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionRequestData.java index 9516f7a53..23e1fed11 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionRequestData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionRequestData.java @@ -33,12 +33,12 @@ import static org.apache.fineract.interoperation.util.InteropUtil.PARAM_TRANSACT import com.google.gson.JsonObject; import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.interoperation.domain.InteropTransactionRole; -import org.joda.time.LocalDateTime; public class InteropTransactionRequestData extends InteropRequestData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionRequestResponseData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionRequestResponseData.java index 58e3d30d7..09683ab78 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionRequestResponseData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransactionRequestResponseData.java @@ -19,10 +19,10 @@ package org.apache.fineract.interoperation.data; import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import org.apache.fineract.interoperation.domain.InteropActionState; -import org.joda.time.LocalDateTime; public final class InteropTransactionRequestResponseData extends InteropResponseData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransferRequestData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransferRequestData.java index 237ca378c..5fdab7220 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransferRequestData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransferRequestData.java @@ -34,13 +34,13 @@ import static org.apache.fineract.interoperation.util.InteropUtil.PARAM_TRANSFER import com.google.gson.JsonObject; import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.interoperation.domain.InteropTransactionRole; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; -import org.joda.time.LocalDateTime; public class InteropTransferRequestData extends InteropRequestData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransferResponseData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransferResponseData.java index 86ca3eb47..6317a93f0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransferResponseData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropTransferResponseData.java @@ -21,10 +21,10 @@ package org.apache.fineract.interoperation.data; import jakarta.validation.constraints.NotNull; import java.beans.Transient; import java.text.ParseException; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import org.apache.fineract.interoperation.domain.InteropActionState; -import org.joda.time.LocalDateTime; public final class InteropTransferResponseData extends InteropResponseData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/service/InteropServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/service/InteropServiceImpl.java index 4fb0fff9c..9da5d45de 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/service/InteropServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/service/InteropServiceImpl.java @@ -30,7 +30,10 @@ import jakarta.validation.constraints.NotNull; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.Locale; @@ -90,10 +93,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionSum import org.apache.fineract.portfolio.savings.domain.SavingsHelper; import org.apache.fineract.portfolio.savings.exception.SavingsAccountNotFoundException; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -224,8 +223,7 @@ public class InteropServiceImpl implements InteropService { return true; } - java.time.LocalDateTime transactionDate = t.getTransactionLocalDate().toDateTimeAtStartOfDay().toDate().toInstant() - .atZone(zoneId).toLocalDateTime(); + java.time.LocalDateTime transactionDate = t.getTransactionLocalDate().atStartOfDay(ZoneId.systemDefault()).toLocalDateTime(); return (transactionsTo == null || transactionsTo.compareTo(transactionDate) > 0) && (transactionsFrom == null || transactionsFrom.compareTo(transactionDate.withHour(23).withMinute(59).withSecond(59)) <= 0); }; @@ -581,7 +579,7 @@ public class InteropServiceImpl implements InteropService { dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"; } - return DateTimeFormat.forPattern(dateFormat).withLocale(locale); + return DateTimeFormatter.ofPattern(dateFormat).withLocale(locale); } PaymentType findPaymentType() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/notification/data/TopicSubscriberData.java b/fineract-provider/src/main/java/org/apache/fineract/notification/data/TopicSubscriberData.java index 0cce5da4d..83b6e1557 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/notification/data/TopicSubscriberData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/notification/data/TopicSubscriberData.java @@ -18,7 +18,8 @@ */ package org.apache.fineract.notification.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; +import java.time.ZoneId; public class TopicSubscriberData { @@ -38,7 +39,7 @@ public class TopicSubscriberData { this.id = id; this.topicId = topicId; this.userId = userId; - this.subscriptionDate = new LocalDate(); + this.subscriptionDate = LocalDate.now(ZoneId.systemDefault()); } public Long getId() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/notification/service/TopicSubscriberReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/notification/service/TopicSubscriberReadPlatformServiceImpl.java index d399ec247..252d5d472 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/notification/service/TopicSubscriberReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/notification/service/TopicSubscriberReadPlatformServiceImpl.java @@ -20,11 +20,11 @@ package org.apache.fineract.notification.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.notification.data.TopicSubscriberData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResourceSwagger.java index b690cb439..ca59385e6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResourceSwagger.java @@ -19,9 +19,9 @@ package org.apache.fineract.organisation.holiday.api; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.LocalDate; /** * Created by sanyam on 14/8/17. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/data/HolidayData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/data/HolidayData.java index 12c2d0a71..bfa4586e4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/data/HolidayData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/data/HolidayData.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.organisation.holiday.data; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.LocalDate; public class HolidayData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/data/HolidayDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/data/HolidayDataValidator.java index d74c5475c..90f43ae5f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/data/HolidayDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/data/HolidayDataValidator.java @@ -23,6 +23,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -38,7 +39,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.organisation.holiday.api.HolidayApiConstants; import org.apache.fineract.organisation.holiday.domain.RescheduleType; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/domain/Holiday.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/domain/Holiday.java index db048ff62..93723da7d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/domain/Holiday.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/domain/Holiday.java @@ -28,6 +28,8 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.dateForm import static org.apache.fineract.portfolio.savings.SavingsApiConstants.localeParamName; import com.google.gson.JsonArray; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -53,7 +55,6 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.organisation.holiday.api.HolidayApiConstants; import org.apache.fineract.organisation.office.domain.Office; -import org.joda.time.LocalDate; @Entity @Table(name = "m_holiday", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "holiday_name") }) @@ -149,7 +150,7 @@ public class Holiday extends AbstractPersistableCustom { actualChanges.put(dateFormatParamName, dateFormatAsInput); actualChanges.put(localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(fromDateParamName); - this.fromDate = newValue.toDate(); + this.fromDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInLocalDateParameterNamed(toDateParamName, getToDateLocalDate())) { @@ -159,7 +160,7 @@ public class Holiday extends AbstractPersistableCustom { actualChanges.put(localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(toDateParamName); - this.toDate = newValue.toDate(); + this.toDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInLocalDateParameterNamed(repaymentsRescheduledToParamName, getRepaymentsRescheduledToLocalDate())) { @@ -169,7 +170,7 @@ public class Holiday extends AbstractPersistableCustom { actualChanges.put(localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(repaymentsRescheduledToParamName); - this.repaymentsRescheduledTo = newValue.toDate(); + this.repaymentsRescheduledTo = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.hasParameter(officesParamName)) { @@ -232,15 +233,15 @@ public class Holiday extends AbstractPersistableCustom { } if (fromDate != null) { - this.fromDate = fromDate.toDate(); + this.fromDate = Date.from(fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (toDate != null) { - this.toDate = toDate.toDate(); + this.toDate = Date.from(toDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (repaymentsRescheduledTo != null) { - this.repaymentsRescheduledTo = repaymentsRescheduledTo.toDate(); + this.repaymentsRescheduledTo = Date.from(repaymentsRescheduledTo.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.status = status; @@ -263,7 +264,7 @@ public class Holiday extends AbstractPersistableCustom { public LocalDate getRepaymentsRescheduledToLocalDate() { LocalDate repaymentsRescheduledTo = null; if (this.repaymentsRescheduledTo != null) { - repaymentsRescheduledTo = new LocalDate(this.repaymentsRescheduledTo); + repaymentsRescheduledTo = LocalDate.ofInstant(this.repaymentsRescheduledTo.toInstant(), ZoneId.systemDefault()); } return repaymentsRescheduledTo; } @@ -279,7 +280,7 @@ public class Holiday extends AbstractPersistableCustom { public LocalDate getFromDateLocalDate() { LocalDate fromDate = null; if (this.fromDate != null) { - fromDate = new LocalDate(this.fromDate); + fromDate = LocalDate.ofInstant(this.fromDate.toInstant(), ZoneId.systemDefault()); } return fromDate; } @@ -287,7 +288,7 @@ public class Holiday extends AbstractPersistableCustom { public LocalDate getToDateLocalDate() { LocalDate toDate = null; if (this.toDate != null) { - toDate = new LocalDate(this.toDate); + toDate = LocalDate.ofInstant(this.toDate.toInstant(), ZoneId.systemDefault()); } return toDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/domain/HolidayRepositoryWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/domain/HolidayRepositoryWrapper.java index 47fe79b0f..0a9e00d69 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/domain/HolidayRepositoryWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/domain/HolidayRepositoryWrapper.java @@ -18,11 +18,12 @@ */ package org.apache.fineract.organisation.holiday.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.List; import org.apache.fineract.organisation.holiday.exception.HolidayNotFoundException; import org.apache.fineract.organisation.holiday.service.HolidayUtil; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -70,7 +71,8 @@ public class HolidayRepositoryWrapper { } public boolean isHoliday(Long officeId, LocalDate transactionDate) { - final List holidays = findByOfficeIdAndGreaterThanDate(officeId, transactionDate.toDate()); + final List holidays = findByOfficeIdAndGreaterThanDate(officeId, + Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); return HolidayUtil.isHoliday(transactionDate, holidays); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayReadPlatformServiceImpl.java index 05213deeb..1ee945c55 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayReadPlatformServiceImpl.java @@ -22,6 +22,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.Arrays; import java.util.Collection; import java.util.Date; @@ -33,7 +34,6 @@ import org.apache.fineract.infrastructure.security.service.PlatformSecurityConte import org.apache.fineract.organisation.holiday.data.HolidayData; import org.apache.fineract.organisation.holiday.domain.RescheduleType; import org.apache.fineract.organisation.holiday.exception.HolidayNotFoundException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayUtil.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayUtil.java index ef45a4c65..17af1e19b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayUtil.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayUtil.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.organisation.holiday.service; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.holiday.domain.Holiday; import org.apache.fineract.organisation.workingdays.data.AdjustedDateDetailsDTO; -import org.joda.time.LocalDate; public final class HolidayUtil { diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayWritePlatformServiceJpaRepositoryImpl.java index ebe274d78..68ec37166 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/service/HolidayWritePlatformServiceJpaRepositoryImpl.java @@ -22,6 +22,7 @@ import static org.apache.fineract.organisation.holiday.api.HolidayApiConstants.o import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import java.time.LocalDate; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -43,7 +44,6 @@ import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper; import org.apache.fineract.organisation.workingdays.domain.WorkingDays; import org.apache.fineract.organisation.workingdays.domain.WorkingDaysRepositoryWrapper; import org.apache.fineract.organisation.workingdays.service.WorkingDaysUtil; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResourceSwagger.java index 05274d18f..2f51d54bb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResourceSwagger.java @@ -19,8 +19,8 @@ package org.apache.fineract.organisation.office.api; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; import java.util.Collection; -import org.joda.time.LocalDate; /** * Created by sanyam on 14/8/17. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/data/OfficeData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/data/OfficeData.java index 65f09a1db..223fc9755 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/data/OfficeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/data/OfficeData.java @@ -19,9 +19,9 @@ package org.apache.fineract.organisation.office.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.Collection; import java.util.List; -import org.joda.time.LocalDate; /** * Immutable data object for office data. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/data/OfficeTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/data/OfficeTransactionData.java index 3625a6fac..54ab353b6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/data/OfficeTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/data/OfficeTransactionData.java @@ -19,9 +19,9 @@ package org.apache.fineract.organisation.office.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.organisation.monetary.data.CurrencyData; -import org.joda.time.LocalDate; /** * Immutable data object for office transactions. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/Office.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/Office.java index 4216da75a..dafa366a8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/Office.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/Office.java @@ -19,6 +19,8 @@ package org.apache.fineract.organisation.office.domain; import java.io.Serializable; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; @@ -39,7 +41,6 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.office.exception.CannotUpdateOfficeWithParentOfficeSameAsSelf; import org.apache.fineract.organisation.office.exception.RootOfficeParentCannotBeUpdated; -import org.joda.time.LocalDate; @Entity @Table(name = "m_office", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name_org"), @@ -88,7 +89,7 @@ public class Office extends AbstractPersistableCustom implements Serializable { private Office(final Office parent, final String name, final LocalDate openingDate, final String externalId) { this.parent = parent; - this.openingDate = openingDate.toDateTimeAtStartOfDay().toDate(); + this.openingDate = Date.from(openingDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (parent != null) { this.parent.addChild(this); } @@ -135,7 +136,7 @@ public class Office extends AbstractPersistableCustom implements Serializable { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(openingDateParamName); - this.openingDate = newValue.toDate(); + this.openingDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String nameParamName = "name"; @@ -166,7 +167,7 @@ public class Office extends AbstractPersistableCustom implements Serializable { public LocalDate getOpeningLocalDate() { LocalDate openingLocalDate = null; if (this.openingDate != null) { - openingLocalDate = LocalDate.fromDateFields(this.openingDate); + openingLocalDate = LocalDate.ofInstant(this.openingDate.toInstant(), ZoneId.systemDefault()); } return openingLocalDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/OfficeTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/OfficeTransaction.java index 246469b8d..bf0ade674 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/OfficeTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/OfficeTransaction.java @@ -19,6 +19,8 @@ package org.apache.fineract.organisation.office.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Embedded; @@ -33,7 +35,6 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; -import org.joda.time.LocalDate; @Entity @Table(name = "m_office_transaction") @@ -78,7 +79,7 @@ public class OfficeTransaction extends AbstractPersistableCustom { this.from = fromOffice; this.to = toOffice; if (transactionLocalDate != null) { - this.transactionDate = transactionLocalDate.toDate(); + this.transactionDate = Date.from(transactionLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.currency = amount.getCurrency(); this.transactionAmount = amount.getAmount(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/serialization/OfficeCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/serialization/OfficeCommandFromApiJsonDeserializer.java index 84e8b8b74..d012d93dd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/serialization/OfficeCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/serialization/OfficeCommandFromApiJsonDeserializer.java @@ -21,6 +21,7 @@ package org.apache.fineract.organisation.office.serialization; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -33,7 +34,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/serialization/OfficeTransactionCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/serialization/OfficeTransactionCommandFromApiJsonDeserializer.java index ba59e7711..8e4d2cf32 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/serialization/OfficeTransactionCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/serialization/OfficeTransactionCommandFromApiJsonDeserializer.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -34,7 +35,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java index 8cc7932ff..9f062eb59 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeReadPlatformServiceImpl.java @@ -21,6 +21,8 @@ package org.apache.fineract.organisation.office.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -34,7 +36,6 @@ import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.organisation.office.data.OfficeTransactionData; import org.apache.fineract.organisation.office.exception.OfficeNotFoundException; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.dao.EmptyResultDataAccessException; @@ -209,7 +210,7 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService this.context.authenticatedUser(); - return OfficeData.template(null, new LocalDate()); + return OfficeData.template(null, LocalDate.now(ZoneId.systemDefault())); } @Override @@ -257,7 +258,7 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService final Collection parentLookups = retrieveAllOfficesForDropdown(); final Collection currencyOptions = this.currencyReadPlatformService.retrieveAllowedCurrencies(); - return OfficeTransactionData.template(new LocalDate(), parentLookups, currencyOptions); + return OfficeTransactionData.template(LocalDate.now(ZoneId.systemDefault()), parentLookups, currencyOptions); } public PlatformSecurityContext getContext() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java index 0f0e63c5f..9a3ee2689 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java @@ -19,6 +19,7 @@ package org.apache.fineract.organisation.provisioning.domain; import java.time.Instant; +import java.time.ZonedDateTime; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -38,7 +39,6 @@ import org.apache.fineract.organisation.provisioning.constants.ProvisioningCrite import org.apache.fineract.organisation.provisioning.data.ProvisioningCriteriaDefinitionData; import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; @Entity @Table(name = "m_provisioning_criteria", uniqueConstraints = { @@ -66,13 +66,13 @@ public class ProvisioningCriteria extends AbstractAuditableCustom { } - public ProvisioningCriteria(String criteriaName, AppUser createdBy, DateTime createdDate, AppUser lastModifiedBy, - DateTime lastModifiedDate) { + public ProvisioningCriteria(String criteriaName, AppUser createdBy, ZonedDateTime createdDate, AppUser lastModifiedBy, + ZonedDateTime lastModifiedDate) { this.criteriaName = criteriaName; setCreatedBy(createdBy); - setCreatedDate(Instant.ofEpochMilli(createdDate.getMillis())); + setCreatedDate(Instant.ofEpochMilli(createdDate.toInstant().toEpochMilli())); setLastModifiedBy(lastModifiedBy); - setLastModifiedDate(Instant.ofEpochMilli(lastModifiedDate.getMillis())); + setLastModifiedDate(Instant.ofEpochMilli(lastModifiedDate.toInstant().toEpochMilli())); } public void setProvisioningCriteriaDefinitions(Set provisioningCriteriaDefinition) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaAssembler.java index e290e8870..5cd7576c8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaAssembler.java @@ -22,6 +22,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -40,7 +42,6 @@ import org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteria import org.apache.fineract.organisation.provisioning.exception.ProvisioningCriteriaOverlappingDefinitionException; import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -120,8 +121,9 @@ public class ProvisioningCriteriaAssembler { final String criteriaName = this.fromApiJsonHelper.extractStringNamed(ProvisioningCriteriaConstants.JSON_CRITERIANAME_PARAM, jsonElement); - ProvisioningCriteria criteria = new ProvisioningCriteria(criteriaName, platformSecurityContext.authenticatedUser(), new DateTime(), - platformSecurityContext.authenticatedUser(), new DateTime()); + ProvisioningCriteria criteria = new ProvisioningCriteria(criteriaName, platformSecurityContext.authenticatedUser(), + ZonedDateTime.now(ZoneId.systemDefault()), platformSecurityContext.authenticatedUser(), + ZonedDateTime.now(ZoneId.systemDefault())); return criteria; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResourceSwagger.java index bfa5a810b..289a96864 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResourceSwagger.java @@ -19,7 +19,7 @@ package org.apache.fineract.organisation.staff.api; import io.swagger.v3.oas.annotations.media.Schema; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Created by sanyam on 19/8/17. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/BulkTransferLoanOfficerData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/BulkTransferLoanOfficerData.java index 3f065ffd8..df600e69d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/BulkTransferLoanOfficerData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/BulkTransferLoanOfficerData.java @@ -18,9 +18,9 @@ */ package org.apache.fineract.organisation.staff.data; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.organisation.office.data.OfficeData; -import org.joda.time.LocalDate; /** * Immutable data object returned for loan-officer bulk transfer screens. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/StaffData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/StaffData.java index defdb6121..1a3ce1251 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/StaffData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/StaffData.java @@ -19,9 +19,9 @@ package org.apache.fineract.organisation.staff.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.organisation.office.data.OfficeData; -import org.joda.time.LocalDate; /** * Immutable data object representing staff data. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java index 6ddeccfa5..f4b0d75de 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.organisation.staff.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -36,7 +38,6 @@ import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.documentmanagement.domain.Image; import org.apache.fineract.organisation.office.domain.Office; -import org.joda.time.LocalDate; @Entity @Table(name = "m_staff", uniqueConstraints = { @UniqueConstraint(columnNames = { "display_name" }, name = "display_name"), @@ -132,7 +133,7 @@ public class Staff extends AbstractPersistableCustom { this.active = isActive == null ? true : isActive; deriveDisplayName(firstname); if (joiningDate != null) { - this.joiningDate = joiningDate.toDateTimeAtStartOfDay().toDate(); + this.joiningDate = Date.from(joiningDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -213,7 +214,7 @@ public class Staff extends AbstractPersistableCustom { final String valueAsInput = command.stringValueOfParameterNamed(joiningDateParamName); actualChanges.put(joiningDateParamName, valueAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(joiningDateParamName); - this.joiningDate = newValue.toDate(); + this.joiningDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } return actualChanges; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/serialization/StaffCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/serialization/StaffCommandFromApiJsonDeserializer.java index 63290f781..564fc7b81 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/serialization/StaffCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/serialization/StaffCommandFromApiJsonDeserializer.java @@ -21,6 +21,7 @@ package org.apache.fineract.organisation.staff.serialization; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.organisation.staff.service.StaffReadPlatformService; import org.apache.fineract.portfolio.client.api.ClientApiConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffReadPlatformServiceImpl.java index 7cc6347ff..72db8d4b5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffReadPlatformServiceImpl.java @@ -20,6 +20,7 @@ package org.apache.fineract.organisation.staff.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -35,7 +36,6 @@ import org.apache.fineract.organisation.staff.exception.StaffNotFoundException; import org.apache.fineract.portfolio.client.domain.ClientStatus; import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; import org.apache.fineract.portfolio.savings.domain.SavingsAccountStatusType; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/CashierApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/CashierApiResource.java index ac8fddd6e..0b0e8d76d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/CashierApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/CashierApiResource.java @@ -19,6 +19,8 @@ package org.apache.fineract.organisation.teller.api; import io.swagger.v3.oas.annotations.tags.Tag; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.Date; import javax.ws.rs.Consumes; @@ -30,8 +32,6 @@ import javax.ws.rs.core.MediaType; import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer; import org.apache.fineract.organisation.teller.data.CashierData; import org.apache.fineract.organisation.teller.service.TellerManagementReadPlatformService; -import org.joda.time.format.DateTimeFormatter; -import org.joda.time.format.ISODateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -58,9 +58,9 @@ public class CashierApiResource { @Produces(MediaType.APPLICATION_JSON) public String getCashierData(@QueryParam("officeId") final Long officeId, @QueryParam("tellerId") final Long tellerId, @QueryParam("staffId") final Long staffId, @QueryParam("date") final String date) { - final DateTimeFormatter dateFormatter = ISODateTimeFormat.basicDate(); + final DateTimeFormatter dateFormatter = DateTimeFormatter.BASIC_ISO_DATE; - final Date dateRestriction = (date != null ? dateFormatter.parseDateTime(date).toDate() : new Date()); + final Date dateRestriction = (date != null ? Date.from(ZonedDateTime.parse(date, dateFormatter).toInstant()) : new Date()); final Collection allCashiers = this.readPlatformService.getCashierData(officeId, tellerId, staffId, dateRestriction); diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java index 6edc86167..eac2faa1a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java @@ -27,6 +27,8 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.Date; import javax.ws.rs.Consumes; @@ -55,8 +57,6 @@ import org.apache.fineract.organisation.teller.data.TellerJournalData; import org.apache.fineract.organisation.teller.data.TellerTransactionData; import org.apache.fineract.organisation.teller.service.TellerManagementReadPlatformService; import org.apache.fineract.organisation.teller.util.DateRange; -import org.joda.time.format.DateTimeFormatter; -import org.joda.time.format.ISODateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -164,10 +164,10 @@ public class TellerApiResource { public String getCashierData(@PathParam("tellerId") @Parameter(description = "tellerId") final Long tellerId, @QueryParam("fromdate") @Parameter(description = "fromdate") final String fromDateStr, @QueryParam("todate") @Parameter(description = "todate") final String toDateStr) { - final DateTimeFormatter dateFormatter = ISODateTimeFormat.basicDate(); + final DateTimeFormatter dateFormatter = DateTimeFormatter.BASIC_ISO_DATE; - final Date fromDate = fromDateStr != null ? dateFormatter.parseDateTime(fromDateStr).toDate() : new Date(); - final Date toDate = toDateStr != null ? dateFormatter.parseDateTime(toDateStr).toDate() : new Date(); + final Date fromDate = fromDateStr != null ? Date.from(ZonedDateTime.parse(fromDateStr, dateFormatter).toInstant()) : new Date(); + final Date toDate = toDateStr != null ? Date.from(ZonedDateTime.parse(toDateStr, dateFormatter).toInstant()) : new Date(); final TellerData teller = this.readPlatformService.findTeller(tellerId); final Collection cashiers = this.readPlatformService.getCashiersForTeller(tellerId, fromDate, toDate); diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResourceSwagger.java index 7b0eeee24..85c73df43 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResourceSwagger.java @@ -20,6 +20,7 @@ package org.apache.fineract.organisation.teller.api; import io.swagger.v3.oas.annotations.media.Schema; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import org.apache.fineract.infrastructure.core.service.Page; @@ -29,7 +30,6 @@ import org.apache.fineract.organisation.teller.data.CashierData; import org.apache.fineract.organisation.teller.data.CashierTransactionData; import org.apache.fineract.organisation.teller.domain.CashierTxnType; import org.apache.fineract.organisation.teller.domain.TellerStatus; -import org.joda.time.LocalDate; /** * Created by sanyam on 20/8/17. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionDataValidator.java index 3417a489f..27884e330 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierTransactionDataValidator.java @@ -19,6 +19,10 @@ package org.apache.fineract.organisation.teller.data; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Date; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.service.DateUtils; @@ -31,8 +35,6 @@ import org.apache.fineract.organisation.teller.exception.CashierDateRangeOutOfTe import org.apache.fineract.organisation.teller.exception.CashierInsufficientAmountException; import org.apache.fineract.organisation.teller.service.TellerManagementReadPlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -78,8 +80,8 @@ public class CashierTransactionDataValidator { public void validateCashierAllowedDateAndTime(final Cashier cashier, final Teller teller) { Long staffId = cashier.getStaff().getId(); - final LocalDate fromDate = new LocalDate(cashier.getStartDate()); - final LocalDate endDate = new LocalDate(cashier.getEndDate()); + final LocalDate fromDate = LocalDate.ofInstant(cashier.getStartDate().toInstant(), ZoneId.systemDefault()); + final LocalDate endDate = LocalDate.ofInstant(cashier.getEndDate().toInstant(), ZoneId.systemDefault()); final LocalDate tellerFromDate = teller.getStartLocalDate(); final LocalDate tellerEndDate = teller.getEndLocalDate(); /** @@ -113,7 +115,8 @@ public class CashierTransactionDataValidator { if (user.getStaff() != null) { String sql = "select c.id from m_cashiers c where c.staff_id = " + user.getStaff().getId() + " AND " + " (case when c.full_day then '" + localDateTime.toLocalDate() + "' BETWEEN c.start_date AND c.end_date " + " else ('" - + localDateTime.toLocalDate() + "' BETWEEN c.start_date AND c.end_date and " + " TIME('" + localDateTime.toDateTime() + + localDateTime.toLocalDate() + "' BETWEEN c.start_date AND c.end_date and " + " TIME('" + + ZonedDateTime.of(localDateTime, ZoneId.systemDefault()) + "') BETWEEN TIME(c.start_time) AND TIME(c.end_time) ) end)"; try { Long cashierId = this.jdbcTemplate.queryForObject(sql, Long.class); diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerData.java index 3654f9ce6..790f3183b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/TellerData.java @@ -19,11 +19,11 @@ package org.apache.fineract.organisation.teller.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.organisation.staff.data.StaffData; import org.apache.fineract.organisation.teller.domain.TellerStatus; -import org.joda.time.LocalDate; /** * {@code TellerData} represents an immutable data object for teller data. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java index 09f6c0d8b..4c36446df 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java @@ -19,6 +19,8 @@ package org.apache.fineract.organisation.teller.domain; import com.google.common.base.Splitter; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; @@ -37,7 +39,6 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.staff.domain.Staff; -import org.joda.time.LocalDate; /** * Provides the base model for a cashier. Represents a row in the "m_cashiers" database table, with each @@ -113,8 +114,8 @@ public class Cashier extends AbstractPersistableCustom { this.teller = teller; this.staff = staff; this.description = description; - this.startDate = startDate.toDate(); - this.endDate = endDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.isFullDay = isFullDay; this.startTime = startTime; this.endTime = endTime; @@ -142,7 +143,7 @@ public class Cashier extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(startDateParamName); - this.startDate = newValue.toDate(); + this.startDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String endDateParamName = "endDate"; @@ -153,7 +154,7 @@ public class Cashier extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(endDateParamName); - this.endDate = newValue.toDate(); + this.endDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final Boolean isFullDay = command.booleanObjectValueOfParameterNamed("isFullDay"); @@ -346,7 +347,7 @@ public class Cashier extends AbstractPersistableCustom { public LocalDate getStartLocalDate() { LocalDate startLocalDate = null; if (this.startDate != null) { - startLocalDate = LocalDate.fromDateFields(this.startDate); + startLocalDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } return startLocalDate; } @@ -381,7 +382,7 @@ public class Cashier extends AbstractPersistableCustom { public LocalDate getEndLocalDate() { LocalDate endLocalDate = null; if (this.endDate != null) { - endLocalDate = LocalDate.fromDateFields(this.endDate); + endLocalDate = LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()); } return endLocalDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java index 1574d56b8..19c78b7fc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java @@ -19,6 +19,8 @@ package org.apache.fineract.organisation.teller.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -34,7 +36,6 @@ import javax.persistence.Transient; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.office.domain.Office; -import org.joda.time.LocalDate; @Entity @Table(name = "m_cashier_transactions") @@ -102,7 +103,7 @@ public class CashierTransaction extends AbstractPersistableCustom { this.cashier = cashier; this.txnType = txnType; if (txnDate != null) { - this.txnDate = txnDate.toDate(); + this.txnDate = Date.from(txnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.txnAmount = txnAmount; this.entityType = entityType; @@ -134,7 +135,7 @@ public class CashierTransaction extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(txnDateParamName); - this.txnDate = newValue.toDate(); + this.txnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String txnAmountParamName = "txnAmount"; @@ -234,7 +235,7 @@ public class CashierTransaction extends AbstractPersistableCustom { public LocalDate getTxnLocalDate() { LocalDate txnLocalDate = null; if (this.txnDate != null) { - txnLocalDate = LocalDate.fromDateFields(this.txnDate); + txnLocalDate = LocalDate.ofInstant(this.txnDate.toInstant(), ZoneId.systemDefault()); } return txnLocalDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java index 989f0b32f..238689110 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.organisation.teller.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -37,7 +39,6 @@ import org.apache.fineract.accounting.glaccount.domain.GLAccount; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.office.domain.Office; -import org.joda.time.LocalDate; @Entity @Table(name = "m_tellers", uniqueConstraints = { @UniqueConstraint(name = "ux_tellers_name", columnNames = { "name" }) }) @@ -85,10 +86,10 @@ public class Teller extends AbstractPersistableCustom { this.name = StringUtils.defaultIfEmpty(name, null); this.description = StringUtils.defaultIfEmpty(description, null); if (startDate != null) { - this.startDate = startDate.toDateTimeAtStartOfDay().toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (endDate != null) { - this.endDate = endDate.toDateTimeAtStartOfDay().toDate(); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (status != null) { this.status = status.getValue(); @@ -151,7 +152,7 @@ public class Teller extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(startDateParamName); - this.startDate = newValue.toDate(); + this.startDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String endDateParamName = "endDate"; @@ -162,7 +163,7 @@ public class Teller extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(endDateParamName); - this.endDate = newValue.toDate(); + this.endDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String statusParamName = "status"; @@ -226,7 +227,7 @@ public class Teller extends AbstractPersistableCustom { public LocalDate getStartLocalDate() { LocalDate startLocalDate = null; if (this.startDate != null) { - startLocalDate = LocalDate.fromDateFields(this.startDate); + startLocalDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } return startLocalDate; } @@ -242,7 +243,7 @@ public class Teller extends AbstractPersistableCustom { public LocalDate getEndLocalDate() { LocalDate endLocalDate = null; if (this.endDate != null) { - endLocalDate = LocalDate.fromDateFields(this.endDate); + endLocalDate = LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()); } return endLocalDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/serialization/TellerCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/serialization/TellerCommandFromApiJsonDeserializer.java index 793b06574..a470e6fc2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/serialization/TellerCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/serialization/TellerCommandFromApiJsonDeserializer.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.organisation.teller.exception.InvalidDateInputException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java index 47d48c263..2241cc78e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java @@ -21,6 +21,8 @@ package org.apache.fineract.organisation.teller.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Collection; import java.util.Date; import java.util.Iterator; @@ -50,7 +52,6 @@ import org.apache.fineract.organisation.teller.data.TellerTransactionData; import org.apache.fineract.organisation.teller.domain.CashierTxnType; import org.apache.fineract.organisation.teller.domain.TellerStatus; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.dao.EmptyResultDataAccessException; @@ -597,8 +598,9 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement final String startTime = rs.getString("start_time"); final String endTime = rs.getString("end_time"); - return CashierData.instance(id, null, null, staffId, staffName, tellerId, tellerName, description, startDate.toDate(), - endDate.toDate(), fullDay, startTime, endTime); + return CashierData.instance(id, null, null, staffId, staffName, tellerId, tellerName, description, + Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), fullDay, startTime, endTime); } } @@ -748,11 +750,11 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement Date txnDate = null; if (txnLocalDate != null) { - txnDate = txnLocalDate.toDate(); + txnDate = Date.from(txnLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } Date createdDate = null; if (createdLocalDate != null) { - createdDate = createdLocalDate.toDate(); + createdDate = Date.from(createdLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final Long officeId = rs.getLong("office_id"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/data/AdjustedDateDetailsDTO.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/data/AdjustedDateDetailsDTO.java index f1230fd7e..31833e7da 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/data/AdjustedDateDetailsDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/data/AdjustedDateDetailsDTO.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.organisation.workingdays.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; public class AdjustedDateDetailsDTO { diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDaysRepositoryWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDaysRepositoryWrapper.java index b9af97f82..9d79d5f82 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDaysRepositoryWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDaysRepositoryWrapper.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.organisation.workingdays.domain; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.workingdays.exception.WorkingDaysNotFoundException; import org.apache.fineract.organisation.workingdays.service.WorkingDaysUtil; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/service/WorkingDaysUtil.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/service/WorkingDaysUtil.java index 3a1614e4c..68735cacf 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/service/WorkingDaysUtil.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/service/WorkingDaysUtil.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.organisation.workingdays.service; +import java.time.LocalDate; import org.apache.fineract.organisation.workingdays.data.AdjustedDateDetailsDTO; import org.apache.fineract.organisation.workingdays.domain.RepaymentRescheduleType; import org.apache.fineract.organisation.workingdays.domain.WorkingDays; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; -import org.joda.time.LocalDate; public final class WorkingDaysUtil { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferDTO.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferDTO.java index a627e27ca..c121cdb20 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferDTO.java @@ -19,14 +19,14 @@ package org.apache.fineract.portfolio.account.data; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Locale; import org.apache.fineract.portfolio.account.PortfolioAccountType; import org.apache.fineract.portfolio.account.domain.AccountTransferDetails; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; public class AccountTransferDTO { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferData.java index ec8b6e39c..cb2c64a2c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferData.java @@ -20,12 +20,12 @@ package org.apache.fineract.portfolio.account.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.portfolio.client.data.ClientData; -import org.joda.time.LocalDate; /** * Immutable data object representing a savings account. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransfersDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransfersDataValidator.java index a7c6dc70e..61ab78ad4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransfersDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransfersDataValidator.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -37,7 +38,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.account.AccountDetailConstants; import org.apache.fineract.portfolio.account.api.AccountTransfersApiConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionData.java index d48d687d0..9a9a5cc94 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionData.java @@ -19,6 +19,9 @@ package org.apache.fineract.portfolio.account.data; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; +import java.time.temporal.ChronoField; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.service.Page; @@ -30,9 +33,6 @@ import org.apache.fineract.portfolio.account.domain.StandingInstructionType; import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType; -import org.joda.time.DateTimeFieldType; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; /** * Immutable data object representing a savings account. @@ -324,7 +324,7 @@ public final class StandingInstructionData { public Integer recurrenceOnDay() { Integer recurrenceOnDay = 0; if (this.recurrenceOnMonthDay != null) { - recurrenceOnDay = this.recurrenceOnMonthDay.get(DateTimeFieldType.dayOfMonth()); + recurrenceOnDay = this.recurrenceOnMonthDay.get(ChronoField.DAY_OF_MONTH); } return recurrenceOnDay; } @@ -332,7 +332,7 @@ public final class StandingInstructionData { public Integer recurrenceOnMonth() { Integer recurrenceOnMonth = 0; if (this.recurrenceOnMonthDay != null) { - recurrenceOnMonth = this.recurrenceOnMonthDay.get(DateTimeFieldType.monthOfYear()); + recurrenceOnMonth = this.recurrenceOnMonthDay.get(ChronoField.MONTH_OF_YEAR); } return recurrenceOnMonth; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionDataValidator.java index 856590049..552c2fc59 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionDataValidator.java @@ -26,6 +26,8 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -47,8 +49,6 @@ import org.apache.fineract.portfolio.account.domain.AccountTransferRecurrenceTyp import org.apache.fineract.portfolio.account.domain.AccountTransferType; import org.apache.fineract.portfolio.account.domain.StandingInstructionType; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionDuesData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionDuesData.java index ba1e1770a..55d8c35d8 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionDuesData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionDuesData.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.account.data; import java.math.BigDecimal; -import org.joda.time.LocalDate; +import java.time.LocalDate; public class StandingInstructionDuesData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionHistoryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionHistoryData.java index db3d5ef44..ee9cd966e 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionHistoryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/StandingInstructionHistoryData.java @@ -19,10 +19,10 @@ package org.apache.fineract.portfolio.account.data; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.portfolio.client.data.ClientData; -import org.joda.time.LocalDate; @SuppressWarnings("unused") public class StandingInstructionHistoryData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferAssembler.java index 1f936b40a..48445373e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferAssembler.java @@ -23,6 +23,7 @@ import static org.apache.fineract.portfolio.account.api.AccountTransfersApiConst import static org.apache.fineract.portfolio.account.api.AccountTransfersApiConstants.transferDescriptionParamName; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.account.data.AccountTransferDTO; @@ -30,7 +31,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java index 66d4b0717..856d13627 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java @@ -32,6 +32,9 @@ import static org.apache.fineract.portfolio.account.api.StandingInstructionApiCo import static org.apache.fineract.portfolio.account.api.StandingInstructionApiConstants.validTillParamName; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -51,8 +54,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; @Entity @Table(name = "m_account_transfer_standing_instructions", uniqueConstraints = { @@ -117,7 +118,7 @@ public class AccountTransferStandingInstruction extends AbstractPersistableCusto Integer recurrenceOnMonth = null; if (recurrenceOnMonthDay != null) { recurrenceOnDay = recurrenceOnMonthDay.getDayOfMonth(); - recurrenceOnMonth = recurrenceOnMonthDay.getMonthOfYear(); + recurrenceOnMonth = recurrenceOnMonthDay.getMonthValue(); } return new AccountTransferStandingInstruction(accountTransferDetails, name, priority, instructionType, status, amount, validFrom, validTill, recurrenceType, recurrenceFrequency, recurrenceInterval, recurrenceOnDay, recurrenceOnMonth); @@ -134,12 +135,12 @@ public class AccountTransferStandingInstruction extends AbstractPersistableCusto this.status = status; this.amount = amount; if (validFrom != null) { - this.validFrom = validFrom.toDate(); + this.validFrom = Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (validTill == null) { this.validTill = null; } else { - this.validTill = validTill.toDate(); + this.validTill = Date.from(validTill.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.recurrenceType = recurrenceType; this.recurrenceFrequency = recurrenceFrequency; @@ -170,13 +171,13 @@ public class AccountTransferStandingInstruction extends AbstractPersistableCusto if (command.isChangeInDateParameterNamed(validFromParamName, this.validFrom)) { final LocalDate newValue = command.localDateValueOfParameterNamed(validFromParamName); actualChanges.put(validFromParamName, newValue); - this.validFrom = newValue.toDate(); + this.validFrom = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInDateParameterNamed(validTillParamName, this.validTill)) { final LocalDate newValue = command.localDateValueOfParameterNamed(validTillParamName); actualChanges.put(validTillParamName, newValue); - this.validTill = newValue.toDate(); + this.validTill = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInBigDecimalParameterNamed(amountParamName, this.amount)) { @@ -224,7 +225,7 @@ public class AccountTransferStandingInstruction extends AbstractPersistableCusto this.recurrenceOnDay = dayOfMonthValue; } - final Integer monthOfYear = monthDay.getMonthOfYear(); + final Integer monthOfYear = monthDay.getMonthValue(); if (!this.recurrenceOnMonth.equals(monthOfYear)) { actualChanges.put(recurrenceOnMonthDayParamName, actualValueEntered); this.recurrenceOnMonth = monthOfYear; @@ -246,8 +247,9 @@ public class AccountTransferStandingInstruction extends AbstractPersistableCusto private void validateDependencies(final DataValidatorBuilder baseDataValidator) { if (this.validTill != null && this.validFrom != null) { - baseDataValidator.reset().parameter(validTillParamName).value(LocalDate.fromDateFields(this.validTill)) - .validateDateAfter(LocalDate.fromDateFields(this.validFrom)); + baseDataValidator.reset().parameter(validTillParamName) + .value(LocalDate.ofInstant(this.validTill.toInstant(), ZoneId.systemDefault())) + .validateDateAfter(LocalDate.ofInstant(this.validFrom.toInstant(), ZoneId.systemDefault())); } if (AccountTransferRecurrenceType.fromInt(recurrenceType).isPeriodicRecurrence()) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java index 6a254f65b..a4c34bfbd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.account.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Embedded; @@ -33,7 +35,6 @@ import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; -import org.joda.time.LocalDate; @Entity @Table(name = "m_account_transfer_transaction") @@ -110,7 +111,7 @@ public class AccountTransferTransaction extends AbstractPersistableCustom { this.fromSavingsTransaction = withdrawal; this.toSavingsTransaction = deposit; this.toLoanTransaction = loanRepaymentTransaction; - this.date = transactionDate.toDate(); + this.date = Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.currency = transactionAmount.getCurrency(); this.amount = transactionAmount.getAmountDefaultedToNullIfZero(); this.description = description; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/StandingInstructionAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/StandingInstructionAssembler.java index 7fcd01aa1..079bda738 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/StandingInstructionAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/StandingInstructionAssembler.java @@ -31,10 +31,10 @@ import static org.apache.fineract.portfolio.account.api.StandingInstructionApiCo import static org.apache.fineract.portfolio.account.api.StandingInstructionApiConstants.validTillParamName; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.organisation.monetary.domain.Money; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformService.java index c1e68ee57..30c37f884 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformService.java @@ -19,12 +19,12 @@ package org.apache.fineract.portfolio.account.service; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.portfolio.account.PortfolioAccountType; import org.apache.fineract.portfolio.account.data.AccountTransferData; -import org.joda.time.LocalDate; public interface AccountTransfersReadPlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java index 56dfe35c8..242d292a1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersReadPlatformServiceImpl.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.account.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -44,9 +46,6 @@ import org.apache.fineract.portfolio.account.domain.AccountTransferType; import org.apache.fineract.portfolio.account.exception.AccountTransferNotFoundException; import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.client.service.ClientReadPlatformService; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -68,7 +67,7 @@ public class AccountTransfersReadPlatformServiceImpl implements AccountTransfers // pagination private final PaginationHelper paginationHelper = new PaginationHelper<>(); - private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @Autowired public AccountTransfersReadPlatformServiceImpl(final RoutingDataSource dataSource, @@ -552,7 +551,7 @@ public class AccountTransfersReadPlatformServiceImpl implements AccountTransfers sqlBuilder.append(" and IF(1=?, det.from_loan_account_id = ?, det.from_savings_account_id = ?) "); return this.jdbcTemplate.queryForObject(sqlBuilder.toString(), - new Object[] { this.formatter.print(transactionDate), accountType, accountId, accountId }, BigDecimal.class); + new Object[] { this.formatter.format(transactionDate), accountType, accountId, accountId }, BigDecimal.class); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersWritePlatformServiceImpl.java index 44aa8d2e1..de6d27229 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/AccountTransfersWritePlatformServiceImpl.java @@ -26,6 +26,8 @@ import static org.apache.fineract.portfolio.account.api.AccountTransfersApiConst import static org.apache.fineract.portfolio.account.api.AccountTransfersApiConstants.transferDateParamName; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.List; import java.util.Locale; @@ -59,9 +61,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler; import org.apache.fineract.portfolio.savings.domain.SavingsAccountDomainService; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -113,7 +112,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer final BigDecimal transactionAmount = command.bigDecimalValueOfParameterNamed(transferAmountParamName); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final Integer fromAccountTypeId = command.integerValueSansLocaleOfParameterNamed(fromAccountTypeParamName); final PortfolioAccountType fromAccountType = PortfolioAccountType.fromInt(fromAccountTypeId); @@ -499,7 +498,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer final BigDecimal transactionAmount = command.bigDecimalValueOfParameterNamed(transferAmountParamName); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final PaymentDetail paymentDetail = null; Long transferTransactionId = null; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java index 2cd078b49..ecaa85f68 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionHistoryReadPlatformServiceImpl.java @@ -25,6 +25,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; @@ -40,7 +41,6 @@ import org.apache.fineract.portfolio.account.data.PortfolioAccountData; import org.apache.fineract.portfolio.account.data.StandingInstructionDTO; import org.apache.fineract.portfolio.account.data.StandingInstructionHistoryData; import org.apache.fineract.portfolio.client.data.ClientData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java index c62ababe3..36cf610bf 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionReadPlatformServiceImpl.java @@ -28,6 +28,9 @@ import static org.apache.fineract.portfolio.account.service.AccountTransferEnume import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.MonthDay; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -58,8 +61,6 @@ import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.client.service.ClientReadPlatformService; import org.apache.fineract.portfolio.common.service.CommonEnumerations; import org.apache.fineract.portfolio.common.service.DropdownReadPlatformService; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -436,7 +437,7 @@ public class StandingInstructionReadPlatformServiceImpl implements StandingInstr final Integer recurrenceOnDay = JdbcSupport.getInteger(rs, "recurrenceOnDay"); final Integer recurrenceOnMonth = JdbcSupport.getInteger(rs, "recurrenceOnMonth"); if (recurrenceOnDay != null) { - recurrenceOnMonthDay = new MonthDay(recurrenceOnMonth, recurrenceOnDay); + recurrenceOnMonthDay = MonthDay.now(ZoneId.systemDefault()).withMonth(recurrenceOnMonth).withDayOfMonth(recurrenceOnDay); } final Integer transferType = rs.getInt("transferType"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionWritePlatformServiceImpl.java index e815aec78..03b616e63 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionWritePlatformServiceImpl.java @@ -24,8 +24,11 @@ import static org.apache.fineract.portfolio.account.AccountDetailConstants.toAcc import static org.apache.fineract.portfolio.account.api.StandingInstructionApiConstants.statusParamName; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -59,7 +62,6 @@ import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.DefaultSche import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.ScheduledDateGenerator; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.exception.InsufficientAccountBalanceException; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -197,7 +199,7 @@ public class StandingInstructionWritePlatformServiceImpl implements StandingInst boolean isDueForTransfer = false; AccountTransferRecurrenceType recurrenceType = data.recurrenceType(); StandingInstructionType instructionType = data.instructionType(); - LocalDate transactionDate = new LocalDate(); + LocalDate transactionDate = LocalDate.now(ZoneId.systemDefault()); if (recurrenceType.isPeriodicRecurrence()) { final ScheduledDateGenerator scheduledDateGenerator = new DefaultScheduledDateGenerator(); PeriodFrequencyType frequencyType = data.recurrenceFrequency(); @@ -208,7 +210,7 @@ public class StandingInstructionWritePlatformServiceImpl implements StandingInst startDate = startDate.plusMonths(1); } } else if (frequencyType.isYearly()) { - startDate = startDate.withDayOfMonth(data.recurrenceOnDay()).withMonthOfYear(data.recurrenceOnMonth()); + startDate = startDate.withDayOfMonth(data.recurrenceOnDay()).withMonth(data.recurrenceOnMonth()); if (startDate.isBefore(data.validFrom())) { startDate = startDate.plusYears(1); } @@ -226,7 +228,7 @@ public class StandingInstructionWritePlatformServiceImpl implements StandingInst transactionAmount = standingInstructionDuesData.totalDueAmount(); } if (recurrenceType.isDuesRecurrence()) { - isDueForTransfer = new LocalDate().equals(standingInstructionDuesData.dueDate()); + isDueForTransfer = LocalDate.now(ZoneId.systemDefault()).equals(standingInstructionDuesData.dueDate()); } } @@ -243,7 +245,8 @@ public class StandingInstructionWritePlatformServiceImpl implements StandingInst if (transferCompleted) { final String updateQuery = "UPDATE m_account_transfer_standing_instructions SET last_run_date = ? where id = ?"; - this.jdbcTemplate.update(updateQuery, transactionDate.toDate(), data.getId()); + this.jdbcTemplate.update(updateQuery, Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + data.getId()); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/SavingsAccountSummaryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/SavingsAccountSummaryData.java index c3a2faf23..3cc739b87 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/SavingsAccountSummaryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/SavingsAccountSummaryData.java @@ -19,12 +19,12 @@ package org.apache.fineract.portfolio.accountdetails.data; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.savings.data.SavingsAccountApplicationTimelineData; import org.apache.fineract.portfolio.savings.data.SavingsAccountStatusEnumData; import org.apache.fineract.portfolio.savings.data.SavingsAccountSubStatusEnumData; -import org.joda.time.LocalDate; /** * Immutable data object for savings accounts. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/SavingsSummaryCustom.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/SavingsSummaryCustom.java index 4f114111c..2d19c86c0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/SavingsSummaryCustom.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/SavingsSummaryCustom.java @@ -20,12 +20,12 @@ package org.apache.fineract.portfolio.accountdetails.data; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.savings.data.SavingsAccountApplicationTimelineData; import org.apache.fineract.portfolio.savings.data.SavingsAccountStatusEnumData; import org.apache.fineract.portfolio.savings.data.SavingsAccountSubStatusEnumData; -import org.joda.time.LocalDate; @SuppressWarnings("unused") public class SavingsSummaryCustom { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java index 892a6fbcb..57d5199b4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/service/AccountDetailsReadPlatformServiceJpaRepositoryImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.accountdetails.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; @@ -45,7 +46,6 @@ import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountApplicationTimelineData; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountStatusEnumData; import org.apache.fineract.portfolio.shareaccounts.service.SharesEnumerations; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java index e2e27aee4..7d8f4347b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java @@ -20,6 +20,9 @@ package org.apache.fineract.portfolio.address.domain; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Locale; import java.util.Set; @@ -34,9 +37,6 @@ import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.client.domain.ClientAddress; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; @Entity @Table(name = "m_address") @@ -122,12 +122,12 @@ public class Address extends AbstractPersistableCustom { // this.updatedOn = updatedOn; if (createdOn != null) { - this.createdOn = createdOn.toDate(); + this.createdOn = Date.from(createdOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (updatedOn != null) { - this.updatedOn = updatedOn.toDate(); + this.updatedOn = Date.from(updatedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -229,7 +229,7 @@ public class Address extends AbstractPersistableCustom { } if (jsonObject.has("createdOn")) { String createdOn = jsonObject.get("createdOn").getAsString(); - DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); createdOnDate = LocalDate.parse(createdOn, formatter); } @@ -238,7 +238,7 @@ public class Address extends AbstractPersistableCustom { } if (jsonObject.has("updatedOn")) { String updatedOn = jsonObject.get("updatedOn").getAsString(); - DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); updatedOnDate = LocalDate.parse(updatedOn, formatter); } @@ -363,7 +363,7 @@ public class Address extends AbstractPersistableCustom { } public void setCreatedOn(LocalDate createdOn) { - this.createdOn = createdOn.toDate(); + this.createdOn = Date.from(createdOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public String getUpdatedBy() { @@ -379,7 +379,7 @@ public class Address extends AbstractPersistableCustom { } public void setUpdatedOn(LocalDate updatedOn) { - this.updatedOn = updatedOn.toDate(); + this.updatedOn = Date.from(updatedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/AddressWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/AddressWritePlatformServiceImpl.java index 153c60f94..e43e12027 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/AddressWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/AddressWritePlatformServiceImpl.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.address.service; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.codes.domain.CodeValueRepository; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -36,7 +38,6 @@ import org.apache.fineract.portfolio.client.domain.ClientAddress; import org.apache.fineract.portfolio.client.domain.ClientAddressRepository; import org.apache.fineract.portfolio.client.domain.ClientAddressRepositoryWrapper; import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -89,8 +90,8 @@ public class AddressWritePlatformServiceImpl implements AddressWritePlatformServ final CodeValue addressTypeIdObj = this.codeValueRepository.getOne(addressTypeId); final Address add = Address.fromJson(command, stateIdobj, countryIdObj); - add.setCreatedOn(LocalDate.now()); - add.setUpdatedOn(LocalDate.now()); + add.setCreatedOn(LocalDate.now(ZoneId.systemDefault())); + add.setUpdatedOn(LocalDate.now(ZoneId.systemDefault())); this.addressRepository.save(add); final Long addressid = add.getId(); final Address addobj = this.addressRepository.getOne(addressid); @@ -137,8 +138,8 @@ public class AddressWritePlatformServiceImpl implements AddressWritePlatformServ final CodeValue addressTypeIdObj = this.codeValueRepository.getOne(addressTypeId); final Address add = Address.fromJsonObject(jsonObject, stateIdobj, countryIdObj); - add.setCreatedOn(LocalDate.now()); - add.setUpdatedOn(LocalDate.now()); + add.setCreatedOn(LocalDate.now(ZoneId.systemDefault())); + add.setUpdatedOn(LocalDate.now(ZoneId.systemDefault())); this.addressRepository.save(add); final Long addressid = add.getId(); final Address addobj = this.addressRepository.getOne(addressid); @@ -267,7 +268,7 @@ public class AddressWritePlatformServiceImpl implements AddressWritePlatformServ } if (is_address_update) { - addobj.setUpdatedOn(LocalDate.now()); + addobj.setUpdatedOn(LocalDate.now(ZoneId.systemDefault())); this.addressRepository.save(addobj); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/api/CalendarsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/api/CalendarsApiResource.java index adf6cbefb..df34f1524 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/api/CalendarsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/api/CalendarsApiResource.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.calendar.api; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -54,7 +55,6 @@ import org.apache.fineract.portfolio.calendar.exception.CalendarEntityTypeNotSup import org.apache.fineract.portfolio.calendar.service.CalendarDropdownReadPlatformService; import org.apache.fineract.portfolio.calendar.service.CalendarReadPlatformService; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/command/CalendarCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/command/CalendarCommand.java index 1d77b6168..005ed9b7d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/command/CalendarCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/command/CalendarCommand.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.calendar.command; -import org.joda.time.LocalDate; +import java.time.LocalDate; public class CalendarCommand { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java index 3037ce0b8..dccec200b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.calendar.data; import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalTime; import java.util.Collection; import java.util.List; import java.util.Objects; @@ -31,8 +33,6 @@ import org.apache.fineract.portfolio.calendar.domain.CalendarWeekDaysType; import org.apache.fineract.portfolio.calendar.service.CalendarEnumerations; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.portfolio.common.domain.NthDayType; -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; /** * Immutable data object representing a Calendar. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarHistoryDataWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarHistoryDataWrapper.java index 05ee726a3..c0568c845 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarHistoryDataWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarHistoryDataWrapper.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.portfolio.calendar.data; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Set; import org.apache.fineract.portfolio.calendar.domain.CalendarHistory; -import org.joda.time.LocalDate; public class CalendarHistoryDataWrapper { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java index 55be219ff..189aa6f30 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java @@ -20,6 +20,10 @@ package org.apache.fineract.portfolio.calendar.domain; import static org.apache.fineract.portfolio.calendar.CalendarConstants.CALENDAR_RESOURCE_NAME; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -47,8 +51,6 @@ import org.apache.fineract.portfolio.calendar.exception.CalendarDateException; import org.apache.fineract.portfolio.calendar.exception.CalendarParameterUpdateNotSupportedException; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.portfolio.common.domain.NthDayType; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; @Entity @Table(name = "m_calendar") @@ -125,13 +127,13 @@ public class Calendar extends AbstractAuditableCustom { this.location = StringUtils.defaultIfEmpty(location, null); if (null != startDate) { - this.startDate = startDate.toDateTimeAtStartOfDay().toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.startDate = null; } if (null != endDate) { - this.endDate = endDate.toDateTimeAtStartOfDay().toDate(); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.endDate = null; } @@ -188,7 +190,7 @@ public class Calendar extends AbstractAuditableCustom { .integerValueSansLocaleOfParameterNamed(CalendarSupportedParameters.SECOND_REMINDER.getValue()); final LocalDateTime time = command.localTimeValueOfParameterNamed(CalendarSupportedParameters.MEETING_TIME.getValue()); if (time != null) { - meetingtime = time.toDate(); + meetingtime = Date.from(time.atZone(ZoneId.systemDefault()).toInstant()); } final String recurrence = Calendar.constructRecurrence(command, null); @@ -215,7 +217,7 @@ public class Calendar extends AbstractAuditableCustom { } else { actualChanges.put(CalendarSupportedParameters.START_DATE.getValue(), newMeetingStartDate.toString()); - this.startDate = newMeetingStartDate.toDate(); + this.startDate = Date.from(newMeetingStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); /* * If meeting start date is changed then there is possibilities of recurring day may change, so derive the @@ -232,7 +234,7 @@ public class Calendar extends AbstractAuditableCustom { */ if (calendarFrequencyType.isWeekly()) { - repeatsOnDay = newMeetingStartDate.getDayOfWeek(); + repeatsOnDay = newMeetingStartDate.get(ChronoField.DAY_OF_WEEK); } else if (calendarFrequencyType.isMonthly()) { repeatsOnDay = newMeetingStartDate.getDayOfMonth(); } @@ -291,7 +293,7 @@ public class Calendar extends AbstractAuditableCustom { actualChanges.put(startDateParamName, valueAsInput); actualChanges.put("dateFormat", dateFormatAsInput); actualChanges.put("locale", localeAsInput); - this.startDate = newValue.toDate(); + this.startDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -303,7 +305,7 @@ public class Calendar extends AbstractAuditableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(endDateParamName); - this.endDate = newValue.toDate(); + this.endDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String durationParamName = CalendarSupportedParameters.DURATION.getValue(); @@ -408,7 +410,7 @@ public class Calendar extends AbstractAuditableCustom { actualChanges.put(CalendarSupportedParameters.MEETING_TIME.getValue(), newValue); LocalDateTime timeInLocalDateTimeFormat = command.localTimeValueOfParameterNamed(time); if (timeInLocalDateTimeFormat != null) { - this.meetingtime = timeInLocalDateTimeFormat.toDate(); + this.meetingtime = Date.from(timeInLocalDateTimeFormat.atZone(ZoneId.systemDefault()).toInstant()); } } @@ -424,7 +426,7 @@ public class Calendar extends AbstractAuditableCustom { if (calendarStartDate != null && this.startDate != null) { if (!calendarStartDate.equals(this.getStartDateLocalDate())) { actualChanges.put("startDate", calendarStartDate); - this.startDate = calendarStartDate.toDate(); + this.startDate = Date.from(calendarStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -491,7 +493,7 @@ public class Calendar extends AbstractAuditableCustom { public LocalDate getStartDateLocalDate() { LocalDate startDateLocalDate = null; if (this.startDate != null) { - startDateLocalDate = LocalDate.fromDateFields(this.startDate); + startDateLocalDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } return startDateLocalDate; } @@ -499,7 +501,7 @@ public class Calendar extends AbstractAuditableCustom { public LocalDate getEndDateLocalDate() { LocalDate endDateLocalDate = null; if (this.endDate != null) { - endDateLocalDate = LocalDate.fromDateFields(this.endDate); + endDateLocalDate = LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()); } return endDateLocalDate; } @@ -659,11 +661,11 @@ public class Calendar extends AbstractAuditableCustom { final CalendarFrequencyType frequencyType = CalendarUtils.getFrequency(this.recurrence); final Integer interval = Integer.valueOf(CalendarUtils.getInterval(this.recurrence)); - final String newRecurrence = Calendar.constructRecurrence(frequencyType, interval, startDate.getDayOfWeek(), null); + final String newRecurrence = Calendar.constructRecurrence(frequencyType, interval, startDate.get(ChronoField.DAY_OF_WEEK), null); this.recurrence = newRecurrence; - this.startDate = startDate.toDate(); - this.endDate = endDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public Set getCalendarHistory() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java index 5636520c9..7bbbb00e6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.calendar.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -27,7 +29,6 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; -import org.joda.time.LocalDate; @Entity @Table(name = "m_calendar_history") @@ -103,7 +104,7 @@ public class CalendarHistory extends AbstractPersistableCustom { public LocalDate getStartDateLocalDate() { LocalDate startDateLocalDate = null; if (this.startDate != null) { - startDateLocalDate = LocalDate.fromDateFields(this.startDate); + startDateLocalDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } return startDateLocalDate; } @@ -111,7 +112,7 @@ public class CalendarHistory extends AbstractPersistableCustom { public LocalDate getEndDateLocalDate() { LocalDate endDateLocalDate = null; if (this.endDate != null) { - endDateLocalDate = LocalDate.fromDateFields(this.endDate); + endDateLocalDate = LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()); } return endDateLocalDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java index 79b870425..d3a2554ba 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/serialization/CalendarCommandFromApiJsonDeserializer.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.calendar.serialization; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -39,8 +41,6 @@ import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType; import org.apache.fineract.portfolio.calendar.domain.CalendarRemindBy; import org.apache.fineract.portfolio.calendar.domain.CalendarWeekDaysType; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformService.java index 637ee9ea5..a98b49362 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformService.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.calendar.service; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.fineract.portfolio.calendar.data.CalendarData; import org.apache.fineract.portfolio.meeting.data.MeetingData; -import org.joda.time.LocalDate; public interface CalendarReadPlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java index d83cd237a..a0cd047e2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java @@ -20,8 +20,12 @@ package org.apache.fineract.portfolio.calendar.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.List; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; import org.apache.fineract.infrastructure.core.data.EnumOptionData; @@ -33,8 +37,6 @@ import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; import org.apache.fineract.portfolio.calendar.domain.CalendarType; import org.apache.fineract.portfolio.calendar.exception.CalendarNotFoundException; import org.apache.fineract.portfolio.meeting.data.MeetingData; -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -432,7 +434,8 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ final String sql = rm.schema() + " where c.calendar_id = ? and date(?) between c.start_date and c.end_date limit 1"; - return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { calendarId, compareDate.toDate() }); + return this.jdbcTemplate.queryForObject(sql, rm, + new Object[] { calendarId, Date.from(compareDate.atStartOfDay(ZoneId.systemDefault()).toInstant()) }); } catch (final EmptyResultDataAccessException e) { return null; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java index 41452274b..f5865e8fb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java @@ -22,6 +22,10 @@ import com.google.gson.JsonElement; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -48,9 +52,6 @@ import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType; import org.apache.fineract.portfolio.calendar.domain.CalendarWeekDaysType; import org.apache.fineract.portfolio.common.domain.NthDayType; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -79,10 +80,10 @@ public final class CalendarUtils { public static LocalDate adjustDate(final LocalDate date, final LocalDate seedDate, final PeriodFrequencyType frequencyType) { LocalDate adjustedVal = date; if (frequencyType.isMonthly() && seedDate.getDayOfMonth() > 28 && date.getDayOfMonth() > 28) { - switch (date.getMonthOfYear()) { + switch (date.getMonthValue()) { case 2: - if (date.year().isLeap()) { - adjustedVal = date.dayOfMonth().setCopy(29); + if (date.isLeapYear()) { + adjustedVal = date.withDayOfMonth(29); } break; case 4: @@ -90,9 +91,9 @@ public final class CalendarUtils { case 9: case 11: if (seedDate.getDayOfMonth() > 30) { - adjustedVal = date.dayOfMonth().setCopy(30); + adjustedVal = date.withDayOfMonth(30); } else { - adjustedVal = date.dayOfMonth().setCopy(seedDate.getDayOfMonth()); + adjustedVal = date.withDayOfMonth(seedDate.getDayOfMonth()); } break; case 1: @@ -102,7 +103,7 @@ public final class CalendarUtils { case 8: case 10: case 12: - adjustedVal = date.dayOfMonth().setCopy(seedDate.getDayOfMonth()); + adjustedVal = date.withDayOfMonth(seedDate.getDayOfMonth()); break; } } @@ -110,17 +111,17 @@ public final class CalendarUtils { } private static LocalDate getNextRecurringDate(final Recur recur, final LocalDate seedDate, final LocalDate startDate) { - final DateTime periodStart = new DateTime(startDate.toDate()); + final DateTime periodStart = new DateTime(java.util.Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); final Date seed = convertToiCal4JCompatibleDate(seedDate); final Date nextRecDate = recur.getNextDate(seed, periodStart); - return nextRecDate == null ? null : new LocalDate(nextRecDate); + return nextRecDate == null ? null : ZonedDateTime.ofInstant(nextRecDate.toInstant(), ZoneId.systemDefault()).toLocalDate(); } private static Date convertToiCal4JCompatibleDate(final LocalDate inputDate) { // Date format in iCal4J is hard coded Date formattedDate = null; final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - final String seedDateStr = df.format(inputDate.toDateTimeAtStartOfDay().toDate()); + final String seedDateStr = df.format(java.util.Date.from(inputDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); try { formattedDate = new Date(seedDateStr, "yyyy-MM-dd"); } catch (final ParseException e) { @@ -167,8 +168,8 @@ public final class CalendarUtils { return null; } final Date seed = convertToiCal4JCompatibleDate(seedDate); - final DateTime periodStart = new DateTime(periodStartDate.toDate()); - final DateTime periodEnd = new DateTime(periodEndDate.toDate()); + final DateTime periodStart = new DateTime(java.util.Date.from(periodStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); + final DateTime periodEnd = new DateTime(java.util.Date.from(periodEndDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); final Value value = new Value(Value.DATE.getValue()); final DateList recurringDates = recur.getDates(seed, periodStart, periodEnd, value, maxCount); @@ -184,7 +185,7 @@ public final class CalendarUtils { for (@SuppressWarnings("rawtypes") final Iterator iterator = dates.iterator(); iterator.hasNext();) { final Date date = (Date) iterator.next(); - recurringDates.add(adjustDate(new LocalDate(date), seedDate, frequencyType)); + recurringDates.add(adjustDate(LocalDate.ofInstant(date.toInstant(), ZoneId.systemDefault()), seedDate, frequencyType)); } if (isSkippMeetingOnFirstDay) { @@ -328,9 +329,10 @@ public final class CalendarUtils { } } else if (recur.getFrequency().equals(Recur.Frequency.YEARLY)) { if (recur.getInterval() == 1) { - humanReadable = "Annually on " + startDate.toString("MMM") + " " + startDate.getDayOfMonth(); + humanReadable = "Annually on " + startDate.format(DateTimeFormatter.ofPattern("MMM")) + " " + startDate.getDayOfMonth(); } else { - humanReadable = "Every " + recur.getInterval() + " years on " + startDate.toString("MMM") + " " + startDate.getDayOfMonth(); + humanReadable = "Every " + recur.getInterval() + " years on " + startDate.format(DateTimeFormatter.ofPattern("MMM")) + " " + + startDate.getDayOfMonth(); } } @@ -342,10 +344,10 @@ public final class CalendarUtils { } final Date endDate = recur.getUntil(); - final LocalDate date = new LocalDate(endDate); - final DateTimeFormatter fmt = DateTimeFormat.forPattern("dd MMMM YY"); - final String formattedDate = date.toString(fmt); if (endDate != null) { + final LocalDate date = LocalDate.ofInstant(endDate.toInstant(), ZoneId.systemDefault()); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd MMMM yy"); + final String formattedDate = date.format(fmt); humanReadable += ", until " + formattedDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java index 072d965c1..2a8052f1b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarWritePlatformServiceJpaRepositoryImpl.java @@ -18,6 +18,9 @@ */ package org.apache.fineract.portfolio.calendar.service; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -51,9 +54,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper; import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; import org.apache.fineract.portfolio.loanaccount.service.LoanWritePlatformService; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -119,10 +119,10 @@ public class CalendarWritePlatformServiceJpaRepositoryImpl implements CalendarWr final List dataValidationErrors = new ArrayList<>(); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("calendar"); if (entityActivationDate == null || newCalendar.getStartDateLocalDate().isBefore(entityActivationDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat()).withLocale(command.extractLocale()); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(command.extractLocale()); String dateAsString = ""; if (entityActivationDate != null) { - dateAsString = formatter.print(entityActivationDate); + dateAsString = formatter.format(entityActivationDate); } final String errorMessage = "cannot.be.before." + entityType.name().toLowerCase() + ".activation.date"; @@ -281,7 +281,7 @@ public class CalendarWritePlatformServiceJpaRepositoryImpl implements CalendarWr presentMeetingDate = command.localDateValueOfParameterNamed(CalendarSupportedParameters.START_DATE.getValue()); } if (null != newMeetingDate) { - final Date endDate = presentMeetingDate.minusDays(1).toDate(); + final Date endDate = Date.from(presentMeetingDate.minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant()); calendarHistory.updateEndDate(endDate); } this.calendarHistoryRepository.save(calendarHistory); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java index 1025c72d6..dd77d5ff6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java @@ -20,6 +20,8 @@ package org.apache.fineract.portfolio.charge.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.Collection; import java.util.List; import java.util.Map; @@ -31,8 +33,6 @@ import org.apache.fineract.portfolio.loanaccount.data.LoanChargeData; import org.apache.fineract.portfolio.savings.data.SavingsAccountChargeData; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountChargeData; import org.apache.fineract.portfolio.tax.data.TaxGroupData; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; /** * Immutable data object for charge data. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java index 1dea54dd1..a77502b79 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.charge.domain; import java.math.BigDecimal; +import java.time.MonthDay; +import java.time.ZoneId; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -48,7 +50,6 @@ import org.apache.fineract.portfolio.charge.exception.ChargeParameterUpdateNotSu import org.apache.fineract.portfolio.charge.service.ChargeEnumerations; import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.apache.fineract.portfolio.tax.domain.TaxGroup; -import org.joda.time.MonthDay; @Entity @Table(name = "m_charge", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name") }) @@ -157,7 +158,7 @@ public class Charge extends AbstractPersistableCustom { final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("charges"); if (isMonthlyFee() || isAnnualFee()) { - this.feeOnMonth = feeOnMonthDay.getMonthOfYear(); + this.feeOnMonth = feeOnMonthDay.getMonthValue(); this.feeOnDay = feeOnMonthDay.getDayOfMonth(); } this.feeInterval = feeInterval; @@ -416,7 +417,7 @@ public class Charge extends AbstractPersistableCustom { this.feeOnDay = dayOfMonthValue; } - final Integer monthOfYear = monthDay.getMonthOfYear(); + final Integer monthOfYear = monthDay.getMonthValue(); if (!this.feeOnMonth.equals(monthOfYear)) { actualChanges.put("feeOnMonthDay", actualValueEntered); actualChanges.put("locale", localeAsInput); @@ -557,7 +558,7 @@ public class Charge extends AbstractPersistableCustom { public MonthDay getFeeOnMonthDay() { MonthDay feeOnMonthDay = null; if (this.feeOnDay != null && this.feeOnMonth != null) { - feeOnMonthDay = new MonthDay(this.feeOnMonth, this.feeOnDay); + feeOnMonthDay = MonthDay.now(ZoneId.systemDefault()).withMonth(this.feeOnMonth).withDayOfMonth(this.feeOnDay); } return feeOnMonthDay; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/serialization/ChargeDefinitionCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/serialization/ChargeDefinitionCommandFromApiJsonDeserializer.java index 7ada96bf0..1fa940a80 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/serialization/ChargeDefinitionCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/serialization/ChargeDefinitionCommandFromApiJsonDeserializer.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.MonthDay; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -41,7 +42,6 @@ import org.apache.fineract.portfolio.charge.domain.ChargeAppliesTo; import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType; import org.apache.fineract.portfolio.charge.domain.ChargePaymentMode; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java index 5469da3ec..c9377bc74 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.charge.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.MonthDay; +import java.time.ZoneId; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -42,7 +44,6 @@ import org.apache.fineract.portfolio.common.service.CommonEnumerations; import org.apache.fineract.portfolio.common.service.DropdownReadPlatformService; import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.apache.fineract.portfolio.tax.service.TaxReadPlatformService; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.dao.EmptyResultDataAccessException; @@ -342,7 +343,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService final Integer feeOnMonth = JdbcSupport.getInteger(rs, "feeOnMonth"); final Integer feeOnDay = JdbcSupport.getInteger(rs, "feeOnDay"); if (feeOnDay != null && feeOnMonth != null) { - feeOnMonthDay = new MonthDay(feeOnMonth, feeOnDay); + feeOnMonthDay = MonthDay.now(ZoneId.systemDefault()).withDayOfMonth(feeOnDay).withMonth(feeOnMonth); } final BigDecimal minCap = rs.getBigDecimal("minCap"); final BigDecimal maxCap = rs.getBigDecimal("maxCap"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java index 986ca242d..b419a2edd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java @@ -29,6 +29,8 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import java.io.InputStream; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Arrays; import java.util.Collection; import java.util.Date; @@ -71,7 +73,6 @@ import org.apache.fineract.portfolio.loanaccount.guarantor.data.ObligeeData; import org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorReadPlatformService; import org.apache.fineract.portfolio.savings.data.SavingsAccountData; import org.apache.fineract.portfolio.savings.service.SavingsAccountReadPlatformService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -461,6 +462,7 @@ public class ClientsApiResource { this.context.authenticatedUser().validateHasReadPermission(ClientApiConstants.CLIENT_RESOURCE_NAME); final Date transferDate = this.clientReadPlatformService.retrieveClientTransferProposalDate(clientId); - return this.toApiJsonSerializer.serialize((transferDate != null ? new LocalDate(transferDate) : null)); + return this.toApiJsonSerializer + .serialize((transferDate != null ? LocalDate.ofInstant(transferDate.toInstant(), ZoneId.systemDefault()) : null)); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientChargeData.java index 280d965bb..db0764860 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientChargeData.java @@ -19,11 +19,11 @@ package org.apache.fineract.portfolio.client.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.charge.data.ChargeData; -import org.joda.time.LocalDate; @SuppressWarnings("unused") public final class ClientChargeData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientChargeDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientChargeDataValidator.java index 7f92a2c7a..8f3ebb320 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientChargeDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientChargeDataValidator.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -32,7 +33,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.client.api.ClientApiConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java index 55ce6b933..6add75c8c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.client.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -34,7 +35,6 @@ import org.apache.fineract.portfolio.address.data.AddressData; import org.apache.fineract.portfolio.group.data.GroupGeneralData; import org.apache.fineract.portfolio.savings.data.SavingsAccountData; import org.apache.fineract.portfolio.savings.data.SavingsProductData; -import org.joda.time.LocalDate; /** * Immutable data object representing client data. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java index 63c581c9f..a1ce47b6a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java @@ -22,6 +22,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -39,7 +40,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.client.api.ClientApiConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMembersData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMembersData.java index eab20ae43..e53bb578d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMembersData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMembersData.java @@ -20,9 +20,9 @@ package org.apache.fineract.portfolio.client.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.codes.data.CodeValueData; -import org.joda.time.LocalDate; public final class ClientFamilyMembersData implements Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientNonPersonData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientNonPersonData.java index 6481f008d..6a67be10c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientNonPersonData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientNonPersonData.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.client.data; import java.io.Serializable; +import java.time.LocalDate; import org.apache.fineract.infrastructure.codes.data.CodeValueData; -import org.joda.time.LocalDate; /** * Immutable data object representing the ClientNonPerson diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTimelineData.java index 52f6f982f..9191bb65d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTimelineData.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.client.data; import java.io.Serializable; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable data object represent the important time-line events of a loan application and loan. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTransactionData.java index 9a5b7d29c..3107f48a9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTransactionData.java @@ -19,12 +19,12 @@ package org.apache.fineract.portfolio.client.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; -import org.joda.time.LocalDate; @SuppressWarnings("unused") public final class ClientTransactionData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java index 097a537f0..fd3eeca96 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java @@ -18,6 +18,9 @@ */ package org.apache.fineract.portfolio.client.domain; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -54,8 +57,6 @@ import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.portfolio.client.api.ClientApiConstants; import org.apache.fineract.portfolio.group.domain.Group; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; @Entity @Table(name = "m_client", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_no" }, name = "account_no_UNIQUE"), // @@ -266,7 +267,7 @@ public final class Client extends AbstractPersistableCustom { officeJoiningDate = activationDate; } - LocalDate submittedOnDate = new LocalDate(); + LocalDate submittedOnDate = LocalDate.now(ZoneId.systemDefault()); if (active && submittedOnDate.isAfter(activationDate)) { submittedOnDate = activationDate; } @@ -297,7 +298,7 @@ public final class Client extends AbstractPersistableCustom { this.accountNumber = accountNo; } - this.submittedOnDate = submittedOnDate.toDate(); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = currentUser; this.status = status.getValue(); @@ -321,11 +322,11 @@ public final class Client extends AbstractPersistableCustom { } if (activationDate != null) { - this.activationDate = activationDate.toDateTimeAtStartOfDay().toDate(); + this.activationDate = Date.from(activationDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.activatedBy = currentUser; } if (officeJoiningDate != null) { - this.officeJoiningDate = officeJoiningDate.toDateTimeAtStartOfDay().toDate(); + this.officeJoiningDate = Date.from(officeJoiningDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (StringUtils.isNotBlank(firstname)) { this.firstname = firstname.trim(); @@ -364,7 +365,7 @@ public final class Client extends AbstractPersistableCustom { this.gender = gender; } if (dateOfBirth != null) { - this.dateOfBirth = dateOfBirth.toDateTimeAtStartOfDay().toDate(); + this.dateOfBirth = Date.from(dateOfBirth.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.clientType = clientType; this.clientClassification = clientClassification; @@ -425,7 +426,7 @@ public final class Client extends AbstractPersistableCustom { if (isActive()) { final String defaultUserMessage = "Cannot activate client. Client is already active."; final ApiParameterError error = ApiParameterError.parameterError("error.msg.clients.already.active", defaultUserMessage, - ClientApiConstants.activationDateParamName, activationLocalDate.toString(formatter)); + ClientApiConstants.activationDateParamName, activationLocalDate.format(formatter)); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -433,7 +434,7 @@ public final class Client extends AbstractPersistableCustom { throw new PlatformApiDataValidationException(dataValidationErrors); } - this.activationDate = activationLocalDate.toDate(); + this.activationDate = Date.from(activationLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.activatedBy = currentUser; this.officeJoiningDate = this.activationDate; this.status = ClientStatus.ACTIVE.getValue(); @@ -612,7 +613,7 @@ public final class Client extends AbstractPersistableCustom { actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.activationDateParamName); - this.activationDate = newValue.toDate(); + this.activationDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.officeJoiningDate = this.activationDate; } @@ -623,7 +624,7 @@ public final class Client extends AbstractPersistableCustom { actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.dateOfBirthParamName); - this.dateOfBirth = newValue.toDate(); + this.dateOfBirth = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInLocalDateParameterNamed(ClientApiConstants.submittedOnDateParamName, getSubmittedOnDate())) { @@ -633,7 +634,7 @@ public final class Client extends AbstractPersistableCustom { actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.submittedOnDateParamName); - this.submittedOnDate = newValue.toDate(); + this.submittedOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } validateUpdate(); @@ -746,13 +747,13 @@ public final class Client extends AbstractPersistableCustom { } public LocalDate getSubmittedOnDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.submittedOnDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getActivationLocalDate() { LocalDate activationLocalDate = null; if (this.activationDate != null) { - activationLocalDate = LocalDate.fromDateFields(this.activationDate); + activationLocalDate = LocalDate.ofInstant(this.activationDate.toInstant(), ZoneId.systemDefault()); } return activationLocalDate; } @@ -760,7 +761,7 @@ public final class Client extends AbstractPersistableCustom { public LocalDate getOfficeJoiningLocalDate() { LocalDate officeJoiningLocalDate = null; if (this.officeJoiningDate != null) { - officeJoiningLocalDate = LocalDate.fromDateFields(this.officeJoiningDate); + officeJoiningLocalDate = LocalDate.ofInstant(this.officeJoiningDate.toInstant(), ZoneId.systemDefault()); } return officeJoiningLocalDate; } @@ -952,19 +953,19 @@ public final class Client extends AbstractPersistableCustom { } public LocalDate getClosureDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.closureDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.closureDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getRejectedDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.rejectionDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.rejectionDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getWithdrawalDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.withdrawalDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.withdrawalDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getReopenedDate() { - return this.reopenedDate == null ? null : new LocalDate(this.reopenedDate); + return this.reopenedDate == null ? null : LocalDate.ofInstant(this.reopenedDate.toInstant(), ZoneId.systemDefault()); } public CodeValue gender() { @@ -998,7 +999,7 @@ public final class Client extends AbstractPersistableCustom { public LocalDate dateOfBirthLocalDate() { LocalDate dateOfBirth = null; if (this.dateOfBirth != null) { - dateOfBirth = LocalDate.fromDateFields(this.dateOfBirth); + dateOfBirth = LocalDate.ofInstant(this.dateOfBirth.toInstant(), ZoneId.systemDefault()); } return dateOfBirth; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java index 5d8f6a9d7..b5647da04 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.client.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -37,7 +39,6 @@ import org.apache.fineract.portfolio.charge.domain.Charge; import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.apache.fineract.portfolio.client.api.ClientApiConstants; -import org.joda.time.LocalDate; @Entity @Table(name = "m_client_charge") @@ -114,7 +115,7 @@ public class ClientCharge extends AbstractPersistableCustom { this.charge = charge; this.penaltyCharge = charge.isPenalty(); this.chargeTime = charge.getChargeTimeType(); - this.dueDate = (dueDate == null) ? null : dueDate.toDate(); + this.dueDate = (dueDate == null) ? null : Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.chargeCalculation = charge.getChargeCalculation(); BigDecimal chargeAmount = charge.getAmount(); @@ -220,7 +221,7 @@ public class ClientCharge extends AbstractPersistableCustom { public LocalDate getDueLocalDate() { LocalDate dueDate = null; if (this.dueDate != null) { - dueDate = new LocalDate(this.dueDate); + dueDate = LocalDate.ofInstant(this.dueDate.toInstant(), ZoneId.systemDefault()); } return dueDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientNonPerson.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientNonPerson.java index c944cfb2e..340987020 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientNonPerson.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientNonPerson.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.client.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; @@ -39,7 +41,6 @@ import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.portfolio.client.api.ClientApiConstants; -import org.joda.time.LocalDate; @Entity @Table(name = "m_client_non_person") @@ -97,7 +98,7 @@ public class ClientNonPerson extends AbstractPersistableCustom { } if (incorpValidityTill != null) { - this.incorpValidityTill = incorpValidityTill.toDateTimeAtStartOfDay().toDate(); + this.incorpValidityTill = Date.from(incorpValidityTill.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (StringUtils.isNotBlank(remarks)) { @@ -139,7 +140,7 @@ public class ClientNonPerson extends AbstractPersistableCustom { public LocalDate getIncorpValidityTillLocalDate() { LocalDate incorpValidityTillLocalDate = null; if (this.incorpValidityTill != null) { - incorpValidityTillLocalDate = LocalDate.fromDateFields(this.incorpValidityTill); + incorpValidityTillLocalDate = LocalDate.ofInstant(this.incorpValidityTill.toInstant(), ZoneId.systemDefault()); } return incorpValidityTillLocalDate; } @@ -194,7 +195,7 @@ public class ClientNonPerson extends AbstractPersistableCustom { actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.incorpValidityTillParamName); - this.incorpValidityTill = newValue.toDate(); + this.incorpValidityTill = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInLongParameterNamed(ClientApiConstants.constitutionIdParamName, constitutionId())) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java index 590cbd88f..ba1d4723a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.client.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -48,7 +50,6 @@ import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.OrganisationCurrency; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; @Entity @Table(name = "m_client_transaction", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id") }) @@ -125,7 +126,7 @@ public class ClientTransaction extends AbstractPersistableCustom { this.office = office; this.paymentDetail = paymentDetail; this.typeOf = typeOf; - this.dateOf = transactionLocalDate.toDate(); + this.dateOf = Date.from(transactionLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.amount = amount.getAmount(); this.reversed = reversed; this.externalId = externalId; @@ -227,7 +228,7 @@ public class ClientTransaction extends AbstractPersistableCustom { } public LocalDate getTransactionDate() { - return new LocalDate(this.dateOf); + return LocalDate.ofInstant(this.dateOf.toInstant(), ZoneId.systemDefault()); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/serialization/ClientFamilyMemberCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/serialization/ClientFamilyMemberCommandFromApiJsonDeserializer.java index 16004b579..7b111155c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/serialization/ClientFamilyMemberCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/serialization/ClientFamilyMemberCommandFromApiJsonDeserializer.java @@ -23,6 +23,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -35,8 +38,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.service.DateUtils; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -229,7 +230,7 @@ public final class ClientFamilyMemberCommandFromApiJsonDeserializer { } if (this.fromApiJsonHelper.extractLocalDateNamed("dateOfBirth", element) != null) { - LocalDateTime currentDate = LocalDateTime.now(); + LocalDateTime currentDate = LocalDateTime.now(ZoneId.systemDefault()); final LocalDate dateOfBirth = this.fromApiJsonHelper.extractLocalDateNamed("dateOfBirth", element); baseDataValidator.reset().parameter("dateOfBirth").value(dateOfBirth).validateDateBefore(currentDate.toLocalDate()); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeReadPlatformServiceImpl.java index d92139c9e..10148d384 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.client.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -35,7 +36,6 @@ import org.apache.fineract.portfolio.charge.service.ChargeEnumerations; import org.apache.fineract.portfolio.client.api.ClientApiConstants; import org.apache.fineract.portfolio.client.data.ClientChargeData; import org.apache.fineract.portfolio.client.exception.ClientChargeNotFoundException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformServiceJpaRepositoryImpl.java index 7cfdc1f5d..bd54ef01d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeWritePlatformServiceJpaRepositoryImpl.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.client.service; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -53,9 +55,6 @@ import org.apache.fineract.portfolio.client.domain.ClientTransactionRepository; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -119,14 +118,14 @@ public class ClientChargeWritePlatformServiceJpaRepositoryImpl implements Client } final ClientCharge clientCharge = ClientCharge.createNew(client, charge, command); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()); final List dataValidationErrors = new ArrayList<>(); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) .resource(ClientApiConstants.CLIENT_CHARGES_RESOURCE_NAME); LocalDate activationDate = client.getActivationLocalDate(); LocalDate dueDate = clientCharge.getDueLocalDate(); if (dueDate.isBefore(activationDate)) { - baseDataValidator.reset().parameter(ClientApiConstants.dueAsOfDateParamName).value(dueDate.toString(fmt)) + baseDataValidator.reset().parameter(ClientApiConstants.dueAsOfDateParamName).value(dueDate.format(fmt)) .failWithCodeNoParameterAddedToErrorCode("dueDate.before.activationDate"); if (!dataValidationErrors.isEmpty()) { @@ -159,7 +158,7 @@ public class ClientChargeWritePlatformServiceJpaRepositoryImpl implements Client final ClientCharge clientCharge = this.clientChargeRepository.findOneWithNotFoundDetection(clientChargeId); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate transactionDate = command.localDateValueOfParameterNamed(ClientApiConstants.transactionDateParamName); final BigDecimal amountPaid = command.bigDecimalValueOfParameterNamed(ClientApiConstants.amountParamName); final Money chargePaid = Money.of(clientCharge.getCurrency(), amountPaid); @@ -297,13 +296,13 @@ public class ClientChargeWritePlatformServiceJpaRepositoryImpl implements Client validateTransactionDateOnWorkingDay(transactionDate, clientCharge, fmt); if (client.getActivationLocalDate() != null && transactionDate.isBefore(client.getActivationLocalDate())) { - baseDataValidator.reset().parameter(ClientApiConstants.transactionDateParamName).value(transactionDate.toString(fmt)) + baseDataValidator.reset().parameter(ClientApiConstants.transactionDateParamName).value(transactionDate.format(fmt)) .failWithCodeNoParameterAddedToErrorCode("transaction.before.activationDate"); throw new PlatformApiDataValidationException(dataValidationErrors); } if (DateUtils.isDateInTheFuture(transactionDate)) { - baseDataValidator.reset().parameter(ClientApiConstants.transactionDateParamName).value(transactionDate.toString(fmt)) + baseDataValidator.reset().parameter(ClientApiConstants.transactionDateParamName).value(transactionDate.format(fmt)) .failWithCodeNoParameterAddedToErrorCode("transaction.is.futureDate"); throw new PlatformApiDataValidationException(dataValidationErrors); } @@ -419,7 +418,7 @@ public class ClientChargeWritePlatformServiceJpaRepositoryImpl implements Client if (date != null) { // transaction date should not be on a holiday or non working day if (!this.configurationDomainService.allowTransactionsOnHolidayEnabled() && this.holidayRepository.isHoliday(officeId, date)) { - baseDataValidator.reset().parameter(jsonPropertyName).value(date.toString(fmt)) + baseDataValidator.reset().parameter(jsonPropertyName).value(date.format(fmt)) .failWithCodeNoParameterAddedToErrorCode(errorMessageFragmentForActivityOnHoliday); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -428,7 +427,7 @@ public class ClientChargeWritePlatformServiceJpaRepositoryImpl implements Client if (!this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled() && !this.workingDaysRepository.isWorkingDay(date)) { - baseDataValidator.reset().parameter(jsonPropertyName).value(date.toString(fmt)) + baseDataValidator.reset().parameter(jsonPropertyName).value(date.format(fmt)) .failWithCodeNoParameterAddedToErrorCode(errorMessageFragmentForActivityOnNonWorkingDay); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformServiceImpl.java index 0c8b8a354..0b9f24ef6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformServiceImpl.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.client.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -29,7 +30,6 @@ import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.client.data.ClientFamilyMembersData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java index 024461d73..60091e0b9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java @@ -20,6 +20,8 @@ package org.apache.fineract.portfolio.client.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -63,7 +65,6 @@ import org.apache.fineract.portfolio.group.data.GroupGeneralData; import org.apache.fineract.portfolio.savings.data.SavingsProductData; import org.apache.fineract.portfolio.savings.service.SavingsProductReadPlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -168,10 +169,10 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService final List datatableTemplates = this.entityDatatableChecksReadService .retrieveTemplates(StatusEnum.CREATE.getCode().longValue(), EntityTables.CLIENT.getName(), null); - return ClientData.template(defaultOfficeId, new LocalDate(), offices, staffOptions, null, genderOptions, savingsProductDatas, - clientTypeOptions, clientClassificationOptions, clientNonPersonConstitutionOptions, clientNonPersonMainBusinessLineOptions, - clientLegalFormOptions, familyMemberOptions, new ArrayList(Arrays.asList(address)), isAddressEnabled, - datatableTemplates); + return ClientData.template(defaultOfficeId, LocalDate.now(ZoneId.systemDefault()), offices, staffOptions, null, genderOptions, + savingsProductDatas, clientTypeOptions, clientClassificationOptions, clientNonPersonConstitutionOptions, + clientNonPersonMainBusinessLineOptions, clientLegalFormOptions, familyMemberOptions, + new ArrayList(Arrays.asList(address)), isAddressEnabled, datatableTemplates); } @Override diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientTransactionReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientTransactionReadPlatformServiceImpl.java index a377f691a..658d69334 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientTransactionReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientTransactionReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.client.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -35,7 +36,6 @@ import org.apache.fineract.portfolio.client.domain.ClientTransactionType; import org.apache.fineract.portfolio.client.exception.ClientTransactionNotFoundException; import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java index d24b40853..00c22551d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java @@ -19,6 +19,10 @@ package org.apache.fineract.portfolio.client.service; import com.google.gson.JsonElement; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -83,9 +87,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsProductRepository; import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException; import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -314,7 +315,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); CommandProcessingResult result = openSavingsAccount(newClient, fmt); if (result.getSavingsId() != null) { this.clientRepository.save(newClient); @@ -585,7 +586,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP final Client client = this.clientRepository.findOneWithNotFoundDetection(clientId, true); validateParentGroupRulesBeforeClientActivation(client); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate activationDate = command.localDateValueOfParameterNamed("activationDate"); runEntityDatatableCheck(clientId); @@ -734,7 +735,8 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP if (loanStatus.isOpen() || loanStatus.isPendingApproval() || loanStatus.isAwaitingDisbursal()) { final String errorMessage = "Client cannot be closed because of non-closed loans."; throw new InvalidClientStateTransitionException("close", "loan.non-closed", errorMessage); - } else if (loanStatus.isClosed() && loan.getClosedOnDate().after(closureDate.toDate())) { + } else if (loanStatus.isClosed() + && loan.getClosedOnDate().after(Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant()))) { final String errorMessage = "The client closureDate cannot be before the loan closedOnDate."; throw new InvalidClientStateTransitionException("close", "date.cannot.before.loan.closed.date", errorMessage, closureDate, loan.getClosedOnDate()); @@ -752,7 +754,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP } } - client.close(currentUser, closureReason, closureDate.toDate()); + client.close(currentUser, closureReason, Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -846,7 +848,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP throw new InvalidClientStateTransitionException("rejection", "date.cannot.before.client.submitted.date", errorMessage, rejectionDate, client.getSubmittedOnDate()); } - client.reject(currentUser, rejectionReason, rejectionDate.toDate()); + client.reject(currentUser, rejectionReason, Date.from(rejectionDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); this.businessEventNotifierService.notifyBusinessEventWasExecuted(BusinessEvents.CLIENTS_REJECT, constructEntityMap(BusinessEntity.CLIENT, client)); @@ -878,7 +880,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP throw new InvalidClientStateTransitionException("withdrawal", "date.cannot.before.client.submitted.date", errorMessage, withdrawalDate, client.getSubmittedOnDate()); } - client.withdraw(currentUser, withdrawalReason, withdrawalDate.toDate()); + client.withdraw(currentUser, withdrawalReason, Date.from(withdrawalDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -903,7 +905,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP throw new InvalidClientStateTransitionException("reactivation", "date.cannot.before.client.closed.date", errorMessage, reactivateDate, client.getClosureDate()); } - client.reActivate(currentUser, reactivateDate.toDate()); + client.reActivate(currentUser, Date.from(reactivateDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -929,7 +931,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP undoRejectDate, client.getRejectedDate()); } - client.reOpened(currentUser, undoRejectDate.toDate()); + client.reOpened(currentUser, Date.from(undoRejectDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // @@ -955,7 +957,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP throw new InvalidClientStateTransitionException("reopened", "date.cannot.before.client.withdrawal.date", errorMessage, undoWithdrawalDate, client.getWithdrawalDate()); } - client.reOpened(currentUser, undoWithdrawalDate.toDate()); + client.reOpened(currentUser, Date.from(undoWithdrawalDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/CollectionSheetBulkDisbursalCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/CollectionSheetBulkDisbursalCommand.java index 61a4af75a..b45ae1d73 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/CollectionSheetBulkDisbursalCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/CollectionSheetBulkDisbursalCommand.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.collectionsheet.command; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable command for loan bulk disburse. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/CollectionSheetBulkRepaymentCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/CollectionSheetBulkRepaymentCommand.java index 230afc248..9a73f5b30 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/CollectionSheetBulkRepaymentCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/CollectionSheetBulkRepaymentCommand.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.collectionsheet.command; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable command for loan bulk repayment. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/SingleDisbursalCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/SingleDisbursalCommand.java index a9f8a4906..d2dddbbf2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/SingleDisbursalCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/SingleDisbursalCommand.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.collectionsheet.command; import java.math.BigDecimal; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable command for Single loan repayment. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/SingleRepaymentCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/SingleRepaymentCommand.java index f5c4a91e7..7ee5dbb55 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/SingleRepaymentCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/command/SingleRepaymentCommand.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.collectionsheet.command; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; -import org.joda.time.LocalDate; /** * Immutable command for Single loan repayment. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/CollectionSheetTransactionDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/CollectionSheetTransactionDataValidator.java index 7de1a2074..7a95f72f6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/CollectionSheetTransactionDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/CollectionSheetTransactionDataValidator.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -41,7 +42,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.collectionsheet.CollectionSheetConstants; import org.apache.fineract.portfolio.paymentdetail.PaymentDetailConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/IndividualCollectionSheetData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/IndividualCollectionSheetData.java index 63f1bc5dd..ebbce5066 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/IndividualCollectionSheetData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/IndividualCollectionSheetData.java @@ -18,9 +18,9 @@ */ package org.apache.fineract.portfolio.collectionsheet.data; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; -import org.joda.time.LocalDate; /** * Immutable data object for collection sheet. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/JLGCollectionSheetData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/JLGCollectionSheetData.java index 7698c4572..5e91612ec 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/JLGCollectionSheetData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/data/JLGCollectionSheetData.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.portfolio.collectionsheet.data; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.loanproduct.data.LoanProductData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.savings.data.SavingsProductData; -import org.joda.time.LocalDate; /** * Immutable data object for join liability group's collection sheet. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetBulkDisbursalCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetBulkDisbursalCommandFromApiJsonDeserializer.java index 72e146797..a591bf6ff 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetBulkDisbursalCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetBulkDisbursalCommandFromApiJsonDeserializer.java @@ -22,6 +22,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Locale; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; @@ -30,7 +31,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromApiJsonDeserial import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.collectionsheet.command.CollectionSheetBulkDisbursalCommand; import org.apache.fineract.portfolio.collectionsheet.command.SingleDisbursalCommand; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetBulkRepaymentCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetBulkRepaymentCommandFromApiJsonDeserializer.java index 1bf8e2f55..d282ca396 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetBulkRepaymentCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetBulkRepaymentCommandFromApiJsonDeserializer.java @@ -22,6 +22,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Locale; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; @@ -32,7 +33,6 @@ import org.apache.fineract.portfolio.collectionsheet.command.CollectionSheetBulk import org.apache.fineract.portfolio.collectionsheet.command.SingleRepaymentCommand; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetailAssembler; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetGenerateCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetGenerateCommandFromApiJsonDeserializer.java index 12bb50f05..8bcac6477 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetGenerateCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/serialization/CollectionSheetGenerateCommandFromApiJsonDeserializer.java @@ -28,6 +28,7 @@ import static org.apache.fineract.portfolio.collectionsheet.CollectionSheetConst import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -40,7 +41,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java index c83062729..50bef402b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java @@ -28,8 +28,11 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -68,7 +71,6 @@ import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.paymenttype.service.PaymentTypeReadPlatformService; import org.apache.fineract.portfolio.savings.data.SavingsProductData; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ResultSetExtractor; @@ -317,7 +319,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe final Long calendarId = query.longValueOfParameterNamed(calendarIdParamName); final LocalDate transactionDate = query.localDateValueOfParameterNamed(transactionDateParamName); final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - final String transactionDateStr = df.format(transactionDate.toDate()); + final String transactionDateStr = df.format(Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); final Calendar calendar = this.calendarRepositoryWrapper.findOneWithNotFoundDetection(calendarId); // check if transaction against calendar effective from date @@ -453,7 +455,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe final LocalDate transactionDate = query.localDateValueOfParameterNamed(transactionDateParamName); final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - final String dueDateStr = df.format(transactionDate.toDate()); + final String dueDateStr = df.format(Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); final JLGCollectionSheetFaltDataMapper mapper = new JLGCollectionSheetFaltDataMapper(); @@ -666,7 +668,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe final LocalDate transactionDate = query.localDateValueOfParameterNamed(transactionDateParamName); final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - final String transactionDateStr = df.format(transactionDate.toDate()); + final String transactionDateStr = df.format(Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); final AppUser currentUser = this.context.authenticatedUser(); final String hierarchy = currentUser.getOffice().getHierarchy(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DayOfWeekType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DayOfWeekType.java index 779855360..360e318a6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DayOfWeekType.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/common/domain/DayOfWeekType.java @@ -18,14 +18,15 @@ */ package org.apache.fineract.portfolio.common.domain; -import org.joda.time.DateTimeConstants; +import java.time.DayOfWeek; public enum DayOfWeekType { - MONDAY(DateTimeConstants.MONDAY, "weekDayType.monday"), TUESDAY(DateTimeConstants.TUESDAY, "weekDayType.tuesday"), WEDNESDAY( - DateTimeConstants.WEDNESDAY, "weekDayType.wednesday"), THURSDAY(DateTimeConstants.THURSDAY, "weekDayType.thursday"), FRIDAY( - DateTimeConstants.FRIDAY, "weekDayType.friday"), SATURDAY(DateTimeConstants.SATURDAY, "weekDayType.saturday"), SUNDAY( - DateTimeConstants.SUNDAY, "weekDayType.sunday"), INVALID(0, "weekDayType.invalid"); + MONDAY(DayOfWeek.MONDAY.getValue(), "weekDayType.monday"), TUESDAY(DayOfWeek.TUESDAY.getValue(), "weekDayType.tuesday"), WEDNESDAY( + DayOfWeek.WEDNESDAY.getValue(), + "weekDayType.wednesday"), THURSDAY(DayOfWeek.THURSDAY.getValue(), "weekDayType.thursday"), FRIDAY(DayOfWeek.FRIDAY.getValue(), + "weekDayType.friday"), SATURDAY(DayOfWeek.SATURDAY.getValue(), "weekDayType.saturday"), SUNDAY( + DayOfWeek.SUNDAY.getValue(), "weekDayType.sunday"), INVALID(0, "weekDayType.invalid"); private final Integer value; private final String code; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java index e62ef0d5d..31ded2d52 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateDTO.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.floatingrates.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; -import org.joda.time.LocalDate; public class FloatingRateDTO { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java index 9c1b0105d..5d88d25f7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java @@ -19,12 +19,12 @@ package org.apache.fineract.portfolio.floatingrates.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.List; import org.apache.commons.lang3.builder.CompareToBuilder; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.LocalDate; public class FloatingRateData implements Comparable, Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java index 0885b2bd6..5a10b4670 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java @@ -20,10 +20,10 @@ package org.apache.fineract.portfolio.floatingrates.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.commons.lang3.builder.CompareToBuilder; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; -import org.joda.time.LocalDate; public class FloatingRatePeriodData implements Comparable, Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java index 9f72ef459..34803cc18 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java @@ -22,6 +22,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -46,7 +48,6 @@ import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.floatingrates.data.FloatingRateDTO; import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; @Entity @Table(name = "m_floating_rates", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name") }) @@ -110,8 +111,9 @@ public class FloatingRate extends AbstractPersistableCustom { final List floatingRatePeriods = getRatePeriods(currentUser, command); final LocalDate currentDate = DateUtils.getLocalDateOfTenant(); - return new FloatingRate(name, isBaseLendingRate, isActive, floatingRatePeriods, currentUser, currentUser, currentDate.toDate(), - currentDate.toDate()); + return new FloatingRate(name, isBaseLendingRate, isActive, floatingRatePeriods, currentUser, currentUser, + Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } private static List getRatePeriods(final AppUser currentUser, final JsonCommand command) { @@ -123,7 +125,8 @@ public class FloatingRate extends AbstractPersistableCustom { for (final JsonElement ratePeriod : arrayOfParameterNamed) { final JsonObject ratePeriodObject = ratePeriod.getAsJsonObject(); final JsonParserHelper helper = new JsonParserHelper(); - final Date fromDate = helper.extractLocalDateNamed("fromDate", ratePeriod, new HashSet()).toDate(); + final Date fromDate = Date.from(helper.extractLocalDateNamed("fromDate", ratePeriod, new HashSet()) + .atStartOfDay(ZoneId.systemDefault()).toInstant()); final BigDecimal interestRate = ratePeriodObject.get("interestRate").getAsBigDecimal(); final boolean isDifferentialToBaseLendingRate = helper.parameterExists("isDifferentialToBaseLendingRate", ratePeriod) ? ratePeriodObject.get("isDifferentialToBaseLendingRate").getAsBoolean() @@ -204,11 +207,11 @@ public class FloatingRate extends AbstractPersistableCustom { final LocalDate today = DateUtils.getLocalDateOfTenant(); if (this.floatingRatePeriods != null) { for (FloatingRatePeriod ratePeriod : this.floatingRatePeriods) { - LocalDate fromDate = LocalDate.fromDateFields(ratePeriod.getFromDate()); + LocalDate fromDate = LocalDate.ofInstant(ratePeriod.getFromDate().toInstant(), ZoneId.systemDefault()); if (fromDate.isAfter(today)) { ratePeriod.setActive(false); ratePeriod.setModifiedBy(appUser); - ratePeriod.setModifiedOn(today.toDate()); + ratePeriod.setModifiedOn(Date.from(today.atStartOfDay(ZoneId.systemDefault()).toInstant())); } } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java index f1cc0b25c..fa95c9b9c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java @@ -19,6 +19,9 @@ package org.apache.fineract.portfolio.floatingrates.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -30,8 +33,6 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.floatingrates.data.FloatingRateDTO; import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; @Entity @Table(name = "m_floating_rates_periods") @@ -136,7 +137,7 @@ public class FloatingRatePeriod extends AbstractPersistableCustom { } public LocalDate fetchFromDate() { - return new LocalDate(this.fromDate); + return LocalDate.ofInstant(this.fromDate.toInstant(), ZoneId.systemDefault()); } public FloatingRatePeriodData toData(final FloatingRateDTO floatingRateDTO) { @@ -146,9 +147,9 @@ public class FloatingRatePeriod extends AbstractPersistableCustom { interest = interest.add(floatingRateDTO.fetchBaseRate(fetchFromDate())); } - final LocalDate fromDate = new LocalDateTime(getFromDate()).toLocalDate(); - final LocalDate createdOn = new LocalDateTime(getCreatedOn()).toLocalDate(); - final LocalDate modidiedOn = new LocalDateTime(getModifiedOn()).toLocalDate(); + final LocalDate fromDate = ZonedDateTime.ofInstant(getFromDate().toInstant(), ZoneId.systemDefault()).toLocalDate(); + final LocalDate createdOn = ZonedDateTime.ofInstant(getCreatedOn().toInstant(), ZoneId.systemDefault()).toLocalDate(); + final LocalDate modidiedOn = ZonedDateTime.ofInstant(getModifiedOn().toInstant(), ZoneId.systemDefault()).toLocalDate(); return new FloatingRatePeriodData(getId(), fromDate, interest, isDifferentialToBaseLendingRate(), isActive(), getCreatedBy().getUsername(), createdOn, getModifiedBy().getUsername(), modidiedOn); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java index 78d5d52da..5ed2ecf8b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java @@ -23,6 +23,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -37,7 +38,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.floatingrates.domain.FloatingRate; import org.apache.fineract.portfolio.floatingrates.domain.FloatingRateRepository; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java index aa9d2e3a6..9786af35f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.floatingrates.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Date; import java.util.List; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -29,7 +30,6 @@ import org.apache.fineract.portfolio.floatingrates.data.FloatingRateData; import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData; import org.apache.fineract.portfolio.floatingrates.data.InterestRatePeriodData; import org.apache.fineract.portfolio.floatingrates.exception.FloatingRateNotFoundException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java index 31d4924af..0cbec5f1b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java @@ -30,6 +30,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import java.io.InputStream; +import java.time.LocalDate; import java.util.Arrays; import java.util.Collection; import java.util.Date; @@ -87,7 +88,6 @@ import org.apache.fineract.portfolio.group.data.StaffCenterData; import org.apache.fineract.portfolio.group.service.CenterReadPlatformService; import org.apache.fineract.portfolio.meeting.data.MeetingData; import org.apache.fineract.portfolio.meeting.service.MeetingReadPlatformService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/GroupsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/GroupsApiResource.java index e86c07496..1f4b0e8f9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/GroupsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/GroupsApiResource.java @@ -30,6 +30,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import java.io.InputStream; +import java.time.LocalDate; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -94,7 +95,6 @@ import org.apache.fineract.portfolio.meeting.data.MeetingData; import org.apache.fineract.portfolio.meeting.service.MeetingReadPlatformService; import org.apache.fineract.portfolio.savings.data.GSIMContainer; import org.apache.fineract.portfolio.savings.service.GSIMReadPlatformService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/CenterData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/CenterData.java index 1da1f59ce..72a83d037 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/CenterData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/CenterData.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.group.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import java.util.Objects; @@ -30,7 +31,6 @@ import org.apache.fineract.infrastructure.dataqueries.data.DatatableData; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.organisation.staff.data.StaffData; import org.apache.fineract.portfolio.calendar.data.CalendarData; -import org.joda.time.LocalDate; /** * Immutable data object representing groups. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupGeneralData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupGeneralData.java index cfc3f69a7..17cca883d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupGeneralData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupGeneralData.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.group.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import java.util.Objects; @@ -30,7 +31,6 @@ import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.organisation.staff.data.StaffData; import org.apache.fineract.portfolio.calendar.data.CalendarData; import org.apache.fineract.portfolio.client.data.ClientData; -import org.joda.time.LocalDate; /** * Immutable data object representing a general group (so may or may not have a parent). diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupTimelineData.java index 3db962b63..e6f65fea6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupTimelineData.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.group.data; import java.io.Serializable; +import java.time.LocalDate; import java.util.Objects; -import org.joda.time.LocalDate; /** * Immutable data object represent the important time-line events of a group/center. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/Group.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/Group.java index e318d4cea..4c3f95fa8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/Group.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/Group.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.group.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -59,7 +61,6 @@ import org.apache.fineract.portfolio.group.exception.GroupNotExistsInCenterExcep import org.apache.fineract.portfolio.group.exception.InvalidGroupStateTransitionException; import org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; @Entity @Table(name = "m_group") @@ -208,7 +209,7 @@ public final class Group extends AbstractPersistableCustom { this.groupMembers.addAll(groupMembers); } - this.submittedOnDate = submittedOnDate.toDate(); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = currentUser; this.staffHistory = null; @@ -240,7 +241,8 @@ public final class Group extends AbstractPersistableCustom { validateStatusNotEqualToActiveAndLogError(dataValidationErrors); if (dataValidationErrors.isEmpty()) { this.status = GroupingTypeStatus.ACTIVE.getValue(); - setActivationDate(activationLocalDate.toDate(), currentUser, dataValidationErrors); + setActivationDate(Date.from(activationLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), currentUser, + dataValidationErrors); } } @@ -334,7 +336,7 @@ public final class Group extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.activationDateParamName); if (newValue != null) { - this.activationDate = newValue.toDate(); + this.activationDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -352,7 +354,7 @@ public final class Group extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.submittedOnDateParamName); if (newValue != null) { - this.submittedOnDate = newValue.toDate(); + this.submittedOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -360,13 +362,13 @@ public final class Group extends AbstractPersistableCustom { } public LocalDate getSubmittedOnDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.submittedOnDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getActivationLocalDate() { LocalDate activationLocalDate = null; if (this.activationDate != null) { - activationLocalDate = new LocalDate(this.activationDate); + activationLocalDate = LocalDate.ofInstant(this.activationDate.toInstant(), ZoneId.systemDefault()); } return activationLocalDate; } @@ -538,7 +540,7 @@ public final class Group extends AbstractPersistableCustom { } this.closureReason = closureReason; - this.closureDate = closureDate.toDate(); + this.closureDate = Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.status = GroupingTypeStatus.CLOSED.getValue(); this.closedBy = currentUser; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRepositoryWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRepositoryWrapper.java index a06fa308e..2fc55a188 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRepositoryWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRepositoryWrapper.java @@ -18,10 +18,11 @@ */ package org.apache.fineract.portfolio.group.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.portfolio.group.exception.GroupNotFoundException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -71,7 +72,7 @@ public class GroupRepositoryWrapper { public LocalDate retrieveSubmittedOndate(final Long groupId) { Date submittedOnDate = this.repository.retrieveGroupTypeSubmitteOndDate(groupId); if (submittedOnDate != null) { - return new LocalDate(submittedOnDate); + return LocalDate.ofInstant(submittedOnDate.toInstant(), ZoneId.systemDefault()); } return null; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/StaffAssignmentHistory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/StaffAssignmentHistory.java index ecdd4bd49..1a6fca749 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/StaffAssignmentHistory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/StaffAssignmentHistory.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.group.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -28,7 +30,6 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.organisation.staff.domain.Staff; -import org.joda.time.LocalDate; @Entity @Table(name = "m_staff_assignment_history") @@ -51,7 +52,7 @@ public class StaffAssignmentHistory extends AbstractAuditableCustom { private Date endDate; public static StaffAssignmentHistory createNew(final Group center, final Staff staff, final LocalDate startDate) { - return new StaffAssignmentHistory(center, staff, startDate.toDate(), null); + return new StaffAssignmentHistory(center, staff, Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), null); } protected StaffAssignmentHistory() { @@ -70,11 +71,11 @@ public class StaffAssignmentHistory extends AbstractAuditableCustom { } public void updateStartDate(final LocalDate startDate) { - this.startDate = startDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateEndDate(final LocalDate endDate) { - this.endDate = endDate.toDate(); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public boolean matchesStartDateOf(final LocalDate matchingDate) { @@ -82,7 +83,7 @@ public class StaffAssignmentHistory extends AbstractAuditableCustom { } public LocalDate getStartDate() { - return new LocalDate(this.startDate); + return LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } public boolean isCurrentRecord() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/serialization/GroupingTypesDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/serialization/GroupingTypesDataValidator.java index 79737351d..ea6f0fcad 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/serialization/GroupingTypesDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/serialization/GroupingTypesDataValidator.java @@ -22,6 +22,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -38,7 +39,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.client.api.ClientApiConstants; import org.apache.fineract.portfolio.group.api.GroupingTypesApiConstants; import org.apache.fineract.portfolio.group.domain.GroupRepositoryWrapper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/AllGroupTypesDataMapper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/AllGroupTypesDataMapper.java index 4cbac8377..3a0ede7ac 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/AllGroupTypesDataMapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/AllGroupTypesDataMapper.java @@ -20,12 +20,12 @@ package org.apache.fineract.portfolio.group.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.portfolio.client.domain.ClientEnumerations; import org.apache.fineract.portfolio.group.data.GroupGeneralData; import org.apache.fineract.portfolio.group.data.GroupTimelineData; -import org.joda.time.LocalDate; import org.springframework.jdbc.core.RowMapper; /** diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java index bbbfeb105..e3881fa15 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java @@ -21,6 +21,10 @@ package org.apache.fineract.portfolio.group.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -65,10 +69,6 @@ import org.apache.fineract.portfolio.group.domain.GroupTypes; import org.apache.fineract.portfolio.group.domain.GroupingTypeEnumerations; import org.apache.fineract.portfolio.group.exception.CenterNotFoundException; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -87,7 +87,7 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService private final CodeValueReadPlatformService codeValueReadPlatformService; private final ConfigurationDomainService configurationDomainService; private final CalendarReadPlatformService calendarReadPlatformService; - private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private final ColumnValidator columnValidator; // data mappers @@ -437,8 +437,8 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService // final boolean clientPendingApprovalAllowed = // this.configurationDomainService.isClientPendingApprovalAllowedEnabled(); - return CenterData.template(officeIdDefaulted, accountNo, new LocalDate(), officeOptions, staffOptions, groupMembersOptions, - totalCollected, totalOverdue, totaldue, installmentDue); + return CenterData.template(officeIdDefaulted, accountNo, LocalDate.now(ZoneId.systemDefault()), officeOptions, staffOptions, + groupMembersOptions, totalCollected, totalOverdue, totaldue, installmentDue); } private Long defaultToUsersOfficeIfNull(final Long officeId) { @@ -514,9 +514,9 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService @Override public Collection retriveAllCentersByMeetingDate(final Long officeId, final Date meetingDate, final Long staffId) { validateForGenerateCollectionSheet(staffId); - LocalDate localDate = new LocalDate(meetingDate); + LocalDate localDate = LocalDate.ofInstant(meetingDate.toInstant(), ZoneId.systemDefault()); final CenterCalendarDataMapper centerCalendarMapper = new CenterCalendarDataMapper(); - String passeddate = formatter.print(localDate); + String passeddate = formatter.format(localDate); String sql = centerCalendarMapper.schema(); Collection centerDataArray = null; if (staffId != null) { @@ -538,8 +538,9 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService numberOfDays = this.configurationDomainService.retreivePeroidInNumberOfDaysForSkipMeetingDate().intValue(); } for (CenterData centerData : centerDataArray) { - if (centerData.getCollectionMeetingCalendar().isValidRecurringDate(new LocalDate(meetingDate), - isSkipRepaymentOnFirstMonthEnabled, numberOfDays)) { + if (centerData.getCollectionMeetingCalendar().isValidRecurringDate( + LocalDate.ofInstant(meetingDate.toInstant(), ZoneId.systemDefault()), isSkipRepaymentOnFirstMonthEnabled, + numberOfDays)) { if (staffCenterDataArray.size() <= 0) { Collection meetingFallCenter = new ArrayList<>(); meetingFallCenter.add(centerData); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java index f98cbe7d8..abdd2ff9b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java @@ -18,7 +18,10 @@ */ package org.apache.fineract.portfolio.group.service; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -83,7 +86,6 @@ import org.apache.fineract.portfolio.note.domain.NoteRepository; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepositoryWrapper; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -185,7 +187,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group final Set groupMembers = assembleSetOfChildGroups(officeId, command); final boolean active = command.booleanPrimitiveValueOfParameterNamed(GroupingTypesApiConstants.activeParamName); - LocalDate submittedOnDate = new LocalDate(); + LocalDate submittedOnDate = LocalDate.now(ZoneId.systemDefault()); if (active && submittedOnDate.isAfter(activationDate)) { submittedOnDate = activationDate; } @@ -542,7 +544,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group groupForUpdate.updateStaff(staff); if (inheritStaffForClientAccounts) { - LocalDate loanOfficerReassignmentDate = LocalDate.now(); + LocalDate loanOfficerReassignmentDate = LocalDate.now(ZoneId.systemDefault()); /* * update loan officer for client and update loan officer for clients loans and savings */ @@ -651,7 +653,8 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group final String errorMessage = groupOrCenter.getGroupLevel().getLevelName() + " cannot be closed because of non-closed loans."; throw new InvalidGroupStateTransitionException(groupOrCenter.getGroupLevel().getLevelName(), "close", "loan.not.closed", errorMessage); - } else if (loanStatus.isClosed() && loan.getClosedOnDate().after(closureDate.toDate())) { + } else if (loanStatus.isClosed() + && loan.getClosedOnDate().after(Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant()))) { final String errorMessage = groupOrCenter.getGroupLevel().getLevelName() + "closureDate cannot be before the loan closedOnDate."; throw new InvalidGroupStateTransitionException(groupOrCenter.getGroupLevel().getLevelName(), "close", diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/data/InterestRateChartData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/data/InterestRateChartData.java index 03631669b..f18083d29 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/data/InterestRateChartData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/data/InterestRateChartData.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.interestratechart.data; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.LocalDate; /** * Immutable data object representing a InterestRateChart. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/data/InterestRateChartDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/data/InterestRateChartDataValidator.java index 8a2c2864b..5c8e222ef 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/data/InterestRateChartDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/data/InterestRateChartDataValidator.java @@ -33,6 +33,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -47,7 +48,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.interestratechart.InterestRateChartApiConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChart.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChart.java index 3166d66d9..4af208160 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChart.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChart.java @@ -32,6 +32,7 @@ import static org.apache.fineract.portfolio.interestratechart.InterestRateChartS import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -54,7 +55,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.portfolio.interestratechart.InterestRateChartApiConstants; import org.apache.fineract.portfolio.interestratechart.InterestRateChartSlabApiConstants; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; -import org.joda.time.LocalDate; @Entity @Table(name = "m_interest_rate_chart") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartFields.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartFields.java index 32aed212a..4066c12c1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartFields.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartFields.java @@ -26,6 +26,8 @@ import static org.apache.fineract.portfolio.interestratechart.InterestRateChartA import static org.apache.fineract.portfolio.interestratechart.InterestRateChartApiConstants.localeParamName; import static org.apache.fineract.portfolio.interestratechart.InterestRateChartApiConstants.nameParamName; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.Map; import javax.persistence.Column; @@ -36,7 +38,6 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.infrastructure.core.service.DateUtils; -import org.joda.time.LocalDate; @Embeddable public class InterestRateChartFields { @@ -71,8 +72,8 @@ public class InterestRateChartFields { boolean isPrimaryGroupingByAmount) { this.name = name; this.description = description; - this.fromDate = fromDate.toDate(); - this.endDate = (toDate == null) ? null : toDate.toDate(); + this.fromDate = Date.from(fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.endDate = (toDate == null) ? null : Date.from(toDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.isPrimaryGroupingByAmount = isPrimaryGroupingByAmount; } @@ -99,7 +100,7 @@ public class InterestRateChartFields { actualChanges.put(fromDateParamName, newValueAsString); actualChanges.put(localeParamName, localeAsInput); actualChanges.put(dateFormatParamName, dateFormat); - this.fromDate = newValue.toDate(); + this.fromDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInLocalDateParameterNamed(endDateParamName, getEndDateAsLocalDate())) { @@ -108,7 +109,7 @@ public class InterestRateChartFields { actualChanges.put(endDateParamName, newValueAsString); actualChanges.put(localeParamName, localeAsInput); actualChanges.put(dateFormatParamName, dateFormat); - this.endDate = newValue.toDate(); + this.endDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInBooleanParameterNamed(isPrimaryGroupingByAmountParamName, this.isPrimaryGroupingByAmount)) { @@ -137,7 +138,7 @@ public class InterestRateChartFields { public LocalDate getFromDateAsLocalDate() { LocalDate fromDate = null; if (this.fromDate != null) { - fromDate = new LocalDate(this.fromDate); + fromDate = LocalDate.ofInstant(this.fromDate.toInstant(), ZoneId.systemDefault()); } return fromDate; } @@ -145,7 +146,7 @@ public class InterestRateChartFields { public LocalDate getEndDateAsLocalDate() { LocalDate endDate = null; if (this.endDate != null) { - endDate = new LocalDate(this.endDate); + endDate = LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()); } return endDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartSlabFields.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartSlabFields.java index bd1aa9b55..731d30807 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartSlabFields.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartSlabFields.java @@ -27,6 +27,8 @@ import static org.apache.fineract.portfolio.interestratechart.InterestRateChartS import static org.apache.fineract.portfolio.interestratechart.InterestRateChartSlabApiConstants.toPeriodParamName; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.Comparator; import java.util.Locale; import java.util.Map; @@ -36,11 +38,6 @@ import javax.persistence.Embeddable; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.Months; -import org.joda.time.Weeks; -import org.joda.time.Years; @Embeddable public class InterestRateChartSlabFields { @@ -341,16 +338,16 @@ public class InterestRateChartSlabFields { final SavingsPeriodFrequencyType periodFrequencyType = SavingsPeriodFrequencyType.fromInt(periodType()); switch (periodFrequencyType) { case DAYS: - actualDepositPeriod = Days.daysBetween(periodStartDate, periodEndDate).getDays(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.DAYS.between(periodStartDate, periodEndDate)); break; case WEEKS: - actualDepositPeriod = Weeks.weeksBetween(periodStartDate, periodEndDate).getWeeks(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.WEEKS.between(periodStartDate, periodEndDate)); break; case MONTHS: - actualDepositPeriod = Months.monthsBetween(periodStartDate, periodEndDate).getMonths(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.MONTHS.between(periodStartDate, periodEndDate)); break; case YEARS: - actualDepositPeriod = Years.yearsBetween(periodStartDate, periodEndDate).getYears(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.YEARS.between(periodStartDate, periodEndDate)); break; case INVALID: actualDepositPeriod = 0;// default value diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/incentive/ClientAttributeIncentiveCalculation.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/incentive/ClientAttributeIncentiveCalculation.java index d2023e4a5..4022387c2 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/incentive/ClientAttributeIncentiveCalculation.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/incentive/ClientAttributeIncentiveCalculation.java @@ -19,10 +19,11 @@ package org.apache.fineract.portfolio.interestratechart.incentive; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.interestratechart.domain.InterestIncentivesFields; -import org.joda.time.LocalDate; -import org.joda.time.Years; public class ClientAttributeIncentiveCalculation extends AttributeIncentiveCalculation { @@ -41,8 +42,8 @@ public class ClientAttributeIncentiveCalculation extends AttributeIncentiveCalcu break; case AGE: if (client.dateOfBirth() != null) { - final LocalDate dobLacalDate = LocalDate.fromDateFields(client.dateOfBirth()); - final int age = Years.yearsBetween(dobLacalDate, LocalDate.now()).getYears(); + final LocalDate dobLacalDate = LocalDate.ofInstant(client.dateOfBirth().toInstant(), ZoneId.systemDefault()); + final int age = Math.toIntExact(ChronoUnit.YEARS.between(dobLacalDate, LocalDate.now(ZoneId.systemDefault()))); applyIncentive = applyIncentive(incentivesFields.conditionType(), Long.valueOf(incentivesFields.attributeValue()), Long.valueOf(age)); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartAssembler.java index d060b8d59..2d55e8c09 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartAssembler.java @@ -27,6 +27,7 @@ import static org.apache.fineract.portfolio.interestratechart.InterestRateChartA import static org.apache.fineract.portfolio.interestratechart.InterestRateChartSlabApiConstants.currencyCodeParamName; import com.google.gson.JsonElement; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -39,7 +40,6 @@ import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChart; import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartFields; import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartRepositoryWrapper; import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlab; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartReadPlatformServiceImpl.java index 0e01bbf76..53101e46b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.interestratechart.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -39,7 +40,6 @@ import org.apache.fineract.portfolio.interestratechart.data.InterestRateChartSla import org.apache.fineract.portfolio.interestratechart.exception.InterestRateChartNotFoundException; import org.apache.fineract.portfolio.interestratechart.incentive.InterestIncentiveAttributeName; import org.apache.fineract.portfolio.savings.data.DepositProductData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/BulkLoansApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/BulkLoansApiResource.java index ac4d923fb..ae23db78d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/BulkLoansApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/BulkLoansApiResource.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.api; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; @@ -46,7 +48,6 @@ import org.apache.fineract.organisation.staff.data.StaffAccountSummaryCollection import org.apache.fineract.organisation.staff.data.StaffData; import org.apache.fineract.organisation.staff.service.StaffReadPlatformService; import org.apache.fineract.portfolio.loanaccount.service.BulkLoansReadPlatformService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -107,7 +108,7 @@ public class BulkLoansApiResource { } final BulkTransferLoanOfficerData loanReassignmentData = BulkTransferLoanOfficerData.templateForBulk(officeId, loanOfficerId, - new LocalDate(), offices, loanOfficers, staffAccountSummaryCollectionData); + LocalDate.now(ZoneId.systemDefault()), offices, loanOfficers, staffAccountSummaryCollectionData); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); return this.toApiJsonSerializer.serialize(settings, loanReassignmentData, this.responseDataParameters); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResource.java index e763dbd79..5a377f4fe 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResource.java @@ -26,6 +26,8 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; @@ -57,7 +59,6 @@ import org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadPla import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.paymenttype.service.PaymentTypeReadPlatformService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -140,7 +141,8 @@ public class LoanTransactionsApiResource { if (transactionDateParam == null) { transactionDate = DateUtils.getLocalDateOfTenant(); } else { - transactionDate = LocalDate.fromDateFields(transactionDateParam.getDate("transactionDate", dateFormat, locale)); + transactionDate = LocalDate.ofInstant(transactionDateParam.getDate("transactionDate", dateFormat, locale).toInstant(), + ZoneId.systemDefault()); } transactionData = this.loanReadPlatformService.retrieveLoanPrePaymentTemplate(loanId, transactionDate); } else if (is(commandParam, "refundbycash")) { @@ -152,7 +154,8 @@ public class LoanTransactionsApiResource { if (transactionDateParam == null) { transactionDate = DateUtils.getLocalDateOfTenant(); } else { - transactionDate = LocalDate.fromDateFields(transactionDateParam.getDate("transactionDate", dateFormat, locale)); + transactionDate = LocalDate.ofInstant(transactionDateParam.getDate("transactionDate", dateFormat, locale).toInstant(), + ZoneId.systemDefault()); } transactionData = this.loanReadPlatformService.retrieveLoanForeclosureTemplate(loanId, transactionDate); } else { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/LoanChargeCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/LoanChargeCommand.java index 87e7b2a4e..4b906bd0c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/LoanChargeCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/LoanChargeCommand.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.command; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; -import org.joda.time.LocalDate; /** * Java object representation of {@link LoanCharge} API JSON. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/LoanUpdateCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/LoanUpdateCommand.java index 9ec3fee2c..2328fe6ab 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/LoanUpdateCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/LoanUpdateCommand.java @@ -18,12 +18,12 @@ */ package org.apache.fineract.portfolio.loanaccount.command; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.joda.time.LocalDate; /** * Immutable command for loan transactions. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/UpdateLoanOfficerCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/UpdateLoanOfficerCommand.java index 816ffc04d..21d3165fc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/UpdateLoanOfficerCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/command/UpdateLoanOfficerCommand.java @@ -18,12 +18,12 @@ */ package org.apache.fineract.portfolio.loanaccount.command; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.joda.time.LocalDate; /** * Immutable data object for updating relationship between loan officer and a loan. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/DisbursementData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/DisbursementData.java index 32876dadf..322d02fd1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/DisbursementData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/DisbursementData.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable data object representing disbursement information. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanAccountData.java index 900e12d11..462aa9f5a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanAccountData.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; @@ -51,7 +52,6 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableA import org.apache.fineract.portfolio.loanproduct.domain.LoanProductValueConditionType; import org.apache.fineract.portfolio.note.data.NoteData; import org.apache.fineract.portfolio.rate.data.RateData; -import org.joda.time.LocalDate; import org.springframework.util.CollectionUtils; /** diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanApplicationTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanApplicationTimelineData.java index 18d8df487..e10a329d5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanApplicationTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanApplicationTimelineData.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.organisation.monetary.data.CurrencyData; -import org.joda.time.LocalDate; /** * Immutable data object represent the important time-line events of a loan application and loan. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanApprovalData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanApprovalData.java index f8f167d6f..a20af3b63 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanApprovalData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanApprovalData.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable data object representing a loan transaction. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanChargeData.java index 9e1b00c94..55663c73b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanChargeData.java @@ -19,13 +19,13 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.charge.domain.ChargePaymentMode; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; -import org.joda.time.LocalDate; /** * Immutable data object for loan charge data. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanInstallmentChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanInstallmentChargeData.java index 54b62180c..20ac50f24 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanInstallmentChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanInstallmentChargeData.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; -import org.joda.time.LocalDate; +import java.time.LocalDate; public class LoanInstallmentChargeData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanScheduleAccrualData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanScheduleAccrualData.java index 0e4b4a7ca..75fb07a3d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanScheduleAccrualData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanScheduleAccrualData.java @@ -19,11 +19,12 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.Map; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; -import org.joda.time.LocalDate; public class LoanScheduleAccrualData { @@ -88,7 +89,7 @@ public class LoanScheduleAccrualData { } public Date getDueDate() { - return this.dueDate.toDate(); + return Date.from(this.dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public LocalDate getDueDateAsLocaldate() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanSummaryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanSummaryData.java index f4dc4312f..d3b4e913e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanSummaryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanSummaryData.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.organisation.monetary.data.CurrencyData; -import org.joda.time.LocalDate; /** * Immutable data object representing loan summary information. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java index ab1bf3973..23319bcea 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsData.java @@ -19,9 +19,9 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariationType; -import org.joda.time.LocalDate; public class LoanTermVariationsData implements Comparable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsDataWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsDataWrapper.java index 779f77403..727912c29 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsDataWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTermVariationsDataWrapper.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.loanaccount.data; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.ListIterator; -import org.joda.time.LocalDate; public class LoanTermVariationsDataWrapper { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java index 04c74630b..1b76ef618 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java @@ -19,13 +19,13 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.account.data.AccountTransferData; import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; -import org.joda.time.LocalDate; /** * Immutable data object representing a loan transaction. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/RepaymentScheduleRelatedLoanData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/RepaymentScheduleRelatedLoanData.java index bbd1b8c7f..53ccc536b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/RepaymentScheduleRelatedLoanData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/RepaymentScheduleRelatedLoanData.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.data; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.organisation.monetary.data.CurrencyData; -import org.joda.time.LocalDate; /** * Immutable data object representing repayment schedule related information. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java index c14403f6b..4d609bfcf 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/ScheduleGeneratorDTO.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.portfolio.loanaccount.data; +import java.time.LocalDate; import org.apache.fineract.organisation.monetary.domain.ApplicationCurrency; import org.apache.fineract.portfolio.calendar.data.CalendarHistoryDataWrapper; import org.apache.fineract.portfolio.calendar.domain.Calendar; import org.apache.fineract.portfolio.calendar.domain.CalendarInstance; import org.apache.fineract.portfolio.floatingrates.data.FloatingRateDTO; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleGeneratorFactory; -import org.joda.time.LocalDate; public class ScheduleGeneratorDTO { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index 6b1cf04b2..577ee86dd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java @@ -26,6 +26,11 @@ import com.google.gson.JsonPrimitive; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -137,11 +142,6 @@ import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.rate.domain.Rate; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -1034,7 +1034,7 @@ public class Loan extends AbstractPersistableCustom { waiveLoanChargeTransaction.getLoanChargesPaid().add(loanChargePaidBy); addLoanTransaction(waiveLoanChargeTransaction); if (this.repaymentScheduleDetail().isInterestRecalculationEnabled() - && (loanCharge.getDueLocalDate() == null || LocalDate.now().isAfter(loanCharge.getDueLocalDate()))) { + && (loanCharge.getDueLocalDate() == null || LocalDate.now(ZoneId.systemDefault()).isAfter(loanCharge.getDueLocalDate()))) { regenerateRepaymentScheduleWithInterestRecalculation(scheduleGeneratorDTO, currentUser); } // Waive of charges whose due date falls after latest 'repayment' @@ -1299,8 +1299,8 @@ public class Loan extends AbstractPersistableCustom { } public void updateLoanScheduleDependentDerivedFields() { - this.expectedMaturityDate = determineExpectedMaturityDate().toDate(); - this.actualMaturityDate = determineExpectedMaturityDate().toDate(); + this.expectedMaturityDate = Date.from(determineExpectedMaturityDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.actualMaturityDate = Date.from(determineExpectedMaturityDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); } private void updateLoanSummaryDerivedFields() { @@ -1449,7 +1449,7 @@ public class Loan extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(submittedOnDateParamName); - this.submittedOnDate = newValue.toDate(); + this.submittedOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String expectedDisbursementDateParamName = "expectedDisbursementDate"; @@ -1461,7 +1461,7 @@ public class Loan extends AbstractPersistableCustom { actualChanges.put("recalculateLoanSchedule", true); final LocalDate newValue = command.localDateValueOfParameterNamed(expectedDisbursementDateParamName); - this.expectedDisbursementDate = newValue.toDate(); + this.expectedDisbursementDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); removeFirstDisbursementTransaction(); } @@ -1475,7 +1475,7 @@ public class Loan extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(repaymentsStartingFromDateParamName); if (newValue != null) { - this.expectedFirstRepaymentOnDate = newValue.toDate(); + this.expectedFirstRepaymentOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.expectedFirstRepaymentOnDate = null; } @@ -1498,7 +1498,7 @@ public class Loan extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(interestChargedFromDateParamName); if (newValue != null) { - this.interestChargedFromDate = newValue.toDate(); + this.interestChargedFromDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.interestChargedFromDate = null; } @@ -1730,7 +1730,8 @@ public class Loan extends AbstractPersistableCustom { LocalDate date = JsonParserHelper.convertFrom(valueAsString, LoanApiConstants.disbursementDateParameterName, dateFormat, locale); if (date != null) { - returnObject.put(LoanApiConstants.disbursementDateParameterName, date.toDate()); + returnObject.put(LoanApiConstants.disbursementDateParameterName, + Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant())); } } } @@ -1861,7 +1862,7 @@ public class Loan extends AbstractPersistableCustom { for (LoanTrancheCharge trancheCharge : trancheCharges) { Charge chargeDefinition = trancheCharge.getCharge(); final LoanCharge loanCharge = LoanCharge.createNewWithoutLoan(chargeDefinition, principal, null, null, null, - new LocalDate(expectedDisbursementDate), null, null); + LocalDate.ofInstant(expectedDisbursementDate.toInstant(), ZoneId.systemDefault()), null, null); loanCharge.update(this); LoanTrancheDisbursementCharge loanTrancheDisbursementCharge = new LoanTrancheDisbursementCharge(loanCharge, disbursementDetails); @@ -1974,9 +1975,10 @@ public class Loan extends AbstractPersistableCustom { this.externalId = externalId; this.termFrequency = loanApplicationTerms.getLoanTermFrequency(); this.termPeriodFrequencyType = loanApplicationTerms.getLoanTermPeriodFrequencyType().getValue(); - this.submittedOnDate = submittedOn.toDate(); + this.submittedOnDate = Date.from(submittedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = currentUser; - this.expectedDisbursementDate = loanApplicationTerms.getExpectedDisbursementDate().toDate(); + this.expectedDisbursementDate = Date + .from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); this.expectedFirstRepaymentOnDate = loanApplicationTerms.getRepaymentStartFromDate(); this.interestChargedFromDate = loanApplicationTerms.getInterestChargedFromDate(); @@ -2061,17 +2063,17 @@ public class Loan extends AbstractPersistableCustom { final LocalDate rejectedOn = command.localDateValueOfParameterNamed("rejectedOnDate"); final Locale locale = new Locale(command.locale()); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); - this.rejectedOnDate = rejectedOn.toDate(); + this.rejectedOnDate = Date.from(rejectedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.rejectedBy = currentUser; - this.closedOnDate = rejectedOn.toDate(); + this.closedOnDate = Date.from(rejectedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; actualChanges.put("locale", command.locale()); actualChanges.put("dateFormat", command.dateFormat()); - actualChanges.put("rejectedOnDate", rejectedOn.toString(fmt)); - actualChanges.put("closedOnDate", rejectedOn.toString(fmt)); + actualChanges.put("rejectedOnDate", rejectedOn.format(fmt)); + actualChanges.put("closedOnDate", rejectedOn.format(fmt)); if (rejectedOn.isBefore(getSubmittedOnDate())) { final String errorMessage = "The date on which a loan is rejected cannot be before its submittal date: " @@ -2110,17 +2112,17 @@ public class Loan extends AbstractPersistableCustom { } final Locale locale = new Locale(command.locale()); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); - this.withdrawnOnDate = withdrawnOn.toDate(); + this.withdrawnOnDate = Date.from(withdrawnOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.withdrawnBy = currentUser; - this.closedOnDate = withdrawnOn.toDate(); + this.closedOnDate = Date.from(withdrawnOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; actualChanges.put("locale", command.locale()); actualChanges.put("dateFormat", command.dateFormat()); - actualChanges.put("withdrawnOnDate", withdrawnOn.toString(fmt)); - actualChanges.put("closedOnDate", withdrawnOn.toString(fmt)); + actualChanges.put("withdrawnOnDate", withdrawnOn.format(fmt)); + actualChanges.put("closedOnDate", withdrawnOn.format(fmt)); if (withdrawnOn.isBefore(getSubmittedOnDate())) { final String errorMessage = "The date on which a loan is withdrawn cannot be before its submittal date: " @@ -2224,13 +2226,13 @@ public class Loan extends AbstractPersistableCustom { loanProduct.maxTrancheCount(), disbursementDetails.size()); } } - this.approvedOnDate = approvedOn.toDate(); + this.approvedOnDate = Date.from(approvedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.approvedBy = currentUser; actualChanges.put("locale", command.locale()); actualChanges.put("dateFormat", command.dateFormat()); actualChanges.put("approvedOnDate", approvedOnDateChange); - final LocalDate submittalDate = new LocalDate(this.submittedOnDate); + final LocalDate submittalDate = LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()); if (approvedOn.isBefore(submittalDate)) { final String errorMessage = "The date on which a loan is approved cannot be before its submittal date: " + submittalDate.toString(); @@ -2239,7 +2241,7 @@ public class Loan extends AbstractPersistableCustom { } if (expecteddisbursementDate != null) { - this.expectedDisbursementDate = expecteddisbursementDate.toDate(); + this.expectedDisbursementDate = Date.from(expecteddisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); actualChanges.put("expectedDisbursementDate", expectedDisbursementDate); if (expecteddisbursementDate.isBefore(approvedOn)) { @@ -2346,7 +2348,8 @@ public class Loan extends AbstractPersistableCustom { validateDisbursementDateIsOnHoliday(holidayDetailDTO.isAllowTransactionsOnHoliday(), holidayDetailDTO.getHolidays()); if (this.repaymentScheduleDetail().isInterestRecalculationEnabled() - && (fetchRepaymentScheduleInstallment(1).getDueDate().isBefore(LocalDate.now()) || isDisbursementMissed())) { + && (fetchRepaymentScheduleInstallment(1).getDueDate().isBefore(LocalDate.now(ZoneId.systemDefault())) + || isDisbursementMissed())) { regenerateRepaymentScheduleWithInterestRecalculation(scheduleGeneratorDTO, currentUser); } @@ -2396,9 +2399,9 @@ public class Loan extends AbstractPersistableCustom { final boolean isSpecificToInstallment = false; final Boolean isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled = scheduleGeneratorDTO .isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled(); - Date effectiveDateFrom = actualDisbursementDate.toDate(); + Date effectiveDateFrom = Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (!isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled && actualDisbursementDate.equals(nextPossibleRepaymentDate)) { - effectiveDateFrom = nextPossibleRepaymentDate.plusDays(1).toDate(); + effectiveDateFrom = Date.from(nextPossibleRepaymentDate.plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant()); } LoanTermVariations loanVariationTerms = new LoanTermVariations(LoanTermVariationType.EMI_AMOUNT.getValue(), effectiveDateFrom, emiAmount, dateValue, isSpecificToInstallment, this, LoanStatus.ACTIVE.getValue()); @@ -2411,8 +2414,8 @@ public class Loan extends AbstractPersistableCustom { if (rescheduledRepaymentDate != null && this.loanProduct.isMultiDisburseLoan()) { final boolean isSpecificToInstallment = false; LoanTermVariations loanVariationTerms = new LoanTermVariations(LoanTermVariationType.DUE_DATE.getValue(), - nextPossibleRepaymentDate.toDate(), emiAmount, rescheduledRepaymentDate, isSpecificToInstallment, this, - LoanStatus.ACTIVE.getValue()); + Date.from(nextPossibleRepaymentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), emiAmount, + rescheduledRepaymentDate, isSpecificToInstallment, this, LoanStatus.ACTIVE.getValue()); this.loanTermVariations.add(loanVariationTerms); } @@ -2438,10 +2441,10 @@ public class Loan extends AbstractPersistableCustom { if (details != null) { lastDusburseDate = details.actualDisbursementDate(); } - if (actualDisbursementDate.toDate().before(lastDusburseDate)) { + if (Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()).before(lastDusburseDate)) { final String errorMsg = "Loan can't be disbursed before " + lastDusburseDate; throw new LoanDisbursalException(errorMsg, "actualdisbursementdate.before.lastdusbursedate", lastDusburseDate, - actualDisbursementDate.toDate()); + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } isMultiTrancheDisburse = true; } @@ -2452,7 +2455,7 @@ public class Loan extends AbstractPersistableCustom { Money disburseAmount = this.loanRepaymentScheduleDetail.getPrincipal().zero(); BigDecimal principalDisbursed = command.bigDecimalValueOfParameterNamed(LoanApiConstants.principalDisbursedParameterName); if (this.actualDisbursementDate == null) { - this.actualDisbursementDate = actualDisbursementDate.toDate(); + this.actualDisbursementDate = Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } BigDecimal diff = BigDecimal.ZERO; Collection details = fetchUndisbursedDetail(); @@ -2461,7 +2464,8 @@ public class Loan extends AbstractPersistableCustom { if (!details.isEmpty()) { disburseAmount = disburseAmount.zero(); for (LoanDisbursementDetails disbursementDetails : details) { - disbursementDetails.updateActualDisbursementDate(actualDisbursementDate.toDate()); + disbursementDetails.updateActualDisbursementDate( + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); disburseAmount = disburseAmount.plus(disbursementDetails.principal()); } } @@ -2476,7 +2480,8 @@ public class Loan extends AbstractPersistableCustom { diff = this.loanRepaymentScheduleDetail.getPrincipal().minus(principalDisbursed).getAmount(); } else { for (LoanDisbursementDetails disbursementDetails : details) { - disbursementDetails.updateActualDisbursementDate(actualDisbursementDate.toDate()); + disbursementDetails.updateActualDisbursementDate( + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); disbursementDetails.updatePrincipal(principalDisbursed); } } @@ -2567,7 +2572,7 @@ public class Loan extends AbstractPersistableCustom { boolean isDisbursementMissed = false; for (LoanDisbursementDetails disbursementDetail : this.disbursementDetails) { if (disbursementDetail.actualDisbursementDate() == null - && LocalDate.now().isAfter(disbursementDetail.expectedDisbursementDateAsLocalDate())) { + && LocalDate.now(ZoneId.systemDefault()).isAfter(disbursementDetail.expectedDisbursementDateAsLocalDate())) { isDisbursementMissed = true; break; } @@ -2715,11 +2720,11 @@ public class Loan extends AbstractPersistableCustom { for (final LoanCharge charge : charges()) { Date actualDisbursementDate = getActualDisbursementDate(charge); if ((charge.getCharge().getChargeTimeType().equals(ChargeTimeType.DISBURSEMENT.getValue()) - && disbursedOn.equals(new LocalDate(actualDisbursementDate)) && (actualDisbursementDate != null) && !charge.isWaived() - && !charge.isFullyPaid()) + && disbursedOn.equals(LocalDate.ofInstant(actualDisbursementDate.toInstant(), ZoneId.systemDefault())) + && (actualDisbursementDate != null) && !charge.isWaived() && !charge.isFullyPaid()) || (charge.getCharge().getChargeTimeType().equals(ChargeTimeType.TRANCHE_DISBURSEMENT.getValue()) - && disbursedOn.equals(new LocalDate(actualDisbursementDate)) && (actualDisbursementDate != null) - && !charge.isWaived() && !charge.isFullyPaid())) { + && disbursedOn.equals(LocalDate.ofInstant(actualDisbursementDate.toInstant(), ZoneId.systemDefault())) + && (actualDisbursementDate != null) && !charge.isWaived() && !charge.isFullyPaid())) { if (totalFeeChargesDueAtDisbursement.isGreaterThanZero() && !charge.getChargePaymentMode().isPaymentModeAccountTransfer()) { charge.markAsFullyPaid(); // Add "Loan Charge Paid By" details to this transaction @@ -2728,7 +2733,7 @@ public class Loan extends AbstractPersistableCustom { chargesPayment.getLoanChargesPaid().add(loanChargePaidBy); disbursentMoney = disbursentMoney.plus(charge.amount()); } - } else if (disbursedOn.equals(new LocalDate(this.actualDisbursementDate))) { + } else if (disbursedOn.equals(LocalDate.ofInstant(this.actualDisbursementDate.toInstant(), ZoneId.systemDefault()))) { /** * create a Charge applied transaction if Up front Accrual, None or Cash based accounting is enabled **/ @@ -2756,7 +2761,9 @@ public class Loan extends AbstractPersistableCustom { if (getExpectedFirstRepaymentOnDate() != null && (disbursedOn.isAfter(this.fetchRepaymentScheduleInstallment(1).getDueDate()) || disbursedOn.isAfter(getExpectedFirstRepaymentOnDate())) - && disbursedOn.toDate().compareTo(this.actualDisbursementDate) == 0 ? Boolean.TRUE : Boolean.FALSE) { + && Date.from(disbursedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()).compareTo(this.actualDisbursementDate) == 0 + ? Boolean.TRUE + : Boolean.FALSE) { final String errorMessage = "submittedOnDate cannot be after the loans expectedFirstRepaymentOnDate: " + getExpectedFirstRepaymentOnDate().toString(); throw new InvalidLoanStateTransitionException("disbursal", "cannot.be.after.expected.first.repayment.date", errorMessage, @@ -3255,8 +3262,8 @@ public class Loan extends AbstractPersistableCustom { LoanStatus.fromInt(this.loanStatus)); this.loanStatus = statusEnum.getValue(); - this.closedOnDate = transactionDate.toDate(); - this.actualMaturityDate = transactionDate.toDate(); + this.closedOnDate = Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.actualMaturityDate = Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else if (LoanStatus.fromInt(this.loanStatus).isOverpaid()) { final LoanStatus statusEnum = loanLifecycleStateMachine.transition(LoanEvent.LOAN_REPAYMENT_OR_WAIVER, LoanStatus.fromInt(this.loanStatus)); @@ -3269,7 +3276,7 @@ public class Loan extends AbstractPersistableCustom { if (this.loanInterestRecalculationDetails != null && this.loanInterestRecalculationDetails.isCompoundingToBePostedAsTransaction() && this.status().isClosedObligationsMet()) { Date closedDate = this.getClosedOnDate(); - LocalDate closedLocalDate = new LocalDate(closedDate); + LocalDate closedLocalDate = LocalDate.ofInstant(closedDate.toInstant(), ZoneId.systemDefault()); reverseTransactionsOnOrAfter(retreiveListOfIncomePostingTransactions(), closedDate); reverseTransactionsOnOrAfter(retreiveListOfAccrualTransactions(), closedDate); HashMap cumulativeIncomeFromInstallments = new HashMap<>(); @@ -3395,7 +3402,7 @@ public class Loan extends AbstractPersistableCustom { } public LocalDate possibleNextRepaymentDate() { - LocalDate earliestUnpaidInstallmentDate = new LocalDate(); + LocalDate earliestUnpaidInstallmentDate = LocalDate.now(ZoneId.systemDefault()); List installments = getRepaymentScheduleInstallments(); for (final LoanRepaymentScheduleInstallment installment : installments) { if (installment.isNotFullyPaidOff()) { @@ -3436,7 +3443,7 @@ public class Loan extends AbstractPersistableCustom { final Money totalInterestOutstanding = getTotalInterestOutstandingOnLoan(); Money possibleInterestToWaive = totalInterestOutstanding.copy(); - LocalDate transactionDate = new LocalDate(); + LocalDate transactionDate = LocalDate.now(ZoneId.systemDefault()); if (totalInterestOutstanding.isGreaterThanZero()) { // find earliest known instance of overdue interest and default to @@ -3445,7 +3452,7 @@ public class Loan extends AbstractPersistableCustom { for (final LoanRepaymentScheduleInstallment scheduledRepayment : installments) { final Money outstandingForPeriod = scheduledRepayment.getInterestOutstanding(loanCurrency()); - if (scheduledRepayment.isOverdueOn(new LocalDate()) && scheduledRepayment.isNotFullyPaidOff() + if (scheduledRepayment.isOverdueOn(LocalDate.now(ZoneId.systemDefault())) && scheduledRepayment.isNotFullyPaidOff() && outstandingForPeriod.isGreaterThanZero()) { transactionDate = scheduledRepayment.getDueDate(); possibleInterestToWaive = outstandingForPeriod; @@ -3607,8 +3614,8 @@ public class Loan extends AbstractPersistableCustom { final LocalDate writtenOffOnLocalDate = command.localDateValueOfParameterNamed("transactionDate"); final String txnExternalId = command.stringValueOfParameterNamedAllowingNull("externalId"); - this.closedOnDate = writtenOffOnLocalDate.toDate(); - this.writtenOffOnDate = writtenOffOnLocalDate.toDate(); + this.closedOnDate = Date.from(writtenOffOnLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.writtenOffOnDate = Date.from(writtenOffOnLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; changes.put("closedOnDate", command.stringValueOfParameterNamed("transactionDate")); changes.put("writtenOffOnDate", command.stringValueOfParameterNamed("transactionDate")); @@ -3695,7 +3702,7 @@ public class Loan extends AbstractPersistableCustom { final LocalDate closureDate = command.localDateValueOfParameterNamed("transactionDate"); final String txnExternalId = command.stringValueOfParameterNamedAllowingNull("externalId"); - this.closedOnDate = closureDate.toDate(); + this.closedOnDate = Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); changes.put("closedOnDate", command.stringValueOfParameterNamed("transactionDate")); validateActivityNotBeforeClientOrGroupTransferDate(LoanEvent.REPAID_IN_FULL, closureDate); @@ -3726,7 +3733,7 @@ public class Loan extends AbstractPersistableCustom { this.loanStatus = statusEnum.getValue(); changes.put("status", LoanEnumerations.status(this.loanStatus)); } - this.closedOnDate = closureDate.toDate(); + this.closedOnDate = Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); loanTransaction = LoanTransaction.writeoff(this, getOffice(), closureDate, txnExternalId, DateUtils.getLocalDateTimeOfTenant(), currentUser); final boolean isLastTransaction = isChronologicallyLatestTransaction(loanTransaction, getLoanTransactions()); @@ -3760,7 +3767,7 @@ public class Loan extends AbstractPersistableCustom { this.loanStatus = statusEnum.getValue(); changes.put("status", LoanEnumerations.status(this.loanStatus)); } - this.closedOnDate = closureDate.toDate(); + this.closedOnDate = Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else if (totalLoanOverpayment.isGreaterThanZero()) { final String errorMessage = "The loan is marked as 'Overpaid' and cannot be moved to 'Closed (obligations met)."; throw new InvalidLoanStateTransitionException("close", "loan.is.overpaid", errorMessage, totalLoanOverpayment.toString()); @@ -3789,12 +3796,12 @@ public class Loan extends AbstractPersistableCustom { changes.put("status", LoanEnumerations.status(this.loanStatus)); } - this.closedOnDate = rescheduledOn.toDate(); - this.rescheduledOnDate = rescheduledOn.toDate(); + this.closedOnDate = Date.from(rescheduledOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.rescheduledOnDate = Date.from(rescheduledOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); changes.put("closedOnDate", command.stringValueOfParameterNamed("transactionDate")); changes.put("rescheduledOnDate", command.stringValueOfParameterNamed("transactionDate")); - final LocalDate rescheduledOnLocalDate = new LocalDate(this.rescheduledOnDate); + final LocalDate rescheduledOnLocalDate = LocalDate.ofInstant(this.rescheduledOnDate.toInstant(), ZoneId.systemDefault()); if (rescheduledOnLocalDate.isBefore(getDisbursementDate())) { final String errorMessage = "The date on which a loan is rescheduled cannot be before the loan disbursement date: " + getDisbursementDate().toString(); @@ -3893,17 +3900,18 @@ public class Loan extends AbstractPersistableCustom { } public boolean isSubmittedOnDateAfter(final LocalDate compareDate) { - return this.submittedOnDate == null ? false : new LocalDate(this.submittedOnDate).isAfter(compareDate); + return this.submittedOnDate == null ? false + : LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()).isAfter(compareDate); } public LocalDate getSubmittedOnDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.submittedOnDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()), null); } public LocalDate getApprovedOnDate() { LocalDate date = null; if (this.approvedOnDate != null) { - date = new LocalDate(this.approvedOnDate); + date = LocalDate.ofInstant(this.approvedOnDate.toInstant(), ZoneId.systemDefault()); } return date; } @@ -3911,7 +3919,7 @@ public class Loan extends AbstractPersistableCustom { public LocalDate getExpectedDisbursedOnLocalDate() { LocalDate expectedDisbursementDate = null; if (this.expectedDisbursementDate != null) { - expectedDisbursementDate = new LocalDate(this.expectedDisbursementDate); + expectedDisbursementDate = LocalDate.ofInstant(this.expectedDisbursementDate.toInstant(), ZoneId.systemDefault()); } return expectedDisbursementDate; } @@ -3919,7 +3927,7 @@ public class Loan extends AbstractPersistableCustom { public LocalDate getDisbursementDate() { LocalDate disbursementDate = getExpectedDisbursedOnLocalDate(); if (this.actualDisbursementDate != null) { - disbursementDate = new LocalDate(this.actualDisbursementDate); + disbursementDate = LocalDate.ofInstant(this.actualDisbursementDate.toInstant(), ZoneId.systemDefault()); } return disbursementDate; } @@ -3931,7 +3939,7 @@ public class Loan extends AbstractPersistableCustom { public LocalDate getWrittenOffDate() { LocalDate writtenOffDate = null; if (this.writtenOffOnDate != null) { - writtenOffDate = new LocalDate(this.writtenOffOnDate); + writtenOffDate = LocalDate.ofInstant(this.writtenOffOnDate.toInstant(), ZoneId.systemDefault()); } return writtenOffDate; } @@ -3940,13 +3948,14 @@ public class Loan extends AbstractPersistableCustom { LocalDate expectedDisbursementDate = null; if (this.expectedDisbursementDate != null) { - expectedDisbursementDate = new LocalDate(this.expectedDisbursementDate); + expectedDisbursementDate = LocalDate.ofInstant(this.expectedDisbursementDate.toInstant(), ZoneId.systemDefault()); } Collection details = fetchUndisbursedDetail(); if (!details.isEmpty()) { for (LoanDisbursementDetails disbursementDetails : details) { - expectedDisbursementDate = new LocalDate(disbursementDetails.expectedDisbursementDate()); + expectedDisbursementDate = LocalDate.ofInstant(disbursementDetails.expectedDisbursementDate().toInstant(), + ZoneId.systemDefault()); } } return expectedDisbursementDate; @@ -3971,7 +3980,7 @@ public class Loan extends AbstractPersistableCustom { public LocalDate getExpectedFirstRepaymentOnDate() { LocalDate firstRepaymentDate = null; if (this.expectedFirstRepaymentOnDate != null) { - firstRepaymentDate = new LocalDate(this.expectedFirstRepaymentOnDate); + firstRepaymentDate = LocalDate.ofInstant(this.expectedFirstRepaymentOnDate.toInstant(), ZoneId.systemDefault()); } return firstRepaymentDate; } @@ -3985,7 +3994,8 @@ public class Loan extends AbstractPersistableCustom { isRegenerationRequired = true; } } - return !new LocalDate(this.expectedDisbursementDate).isEqual(actualDisbursedOnDate) || isRegenerationRequired; + return !LocalDate.ofInstant(this.expectedDisbursementDate.toInstant(), ZoneId.systemDefault()).isEqual(actualDisbursedOnDate) + || isRegenerationRequired; } private boolean isRepaymentScheduleRegenerationRequiredForDisbursement(final LocalDate actualDisbursementDate) { @@ -4033,7 +4043,7 @@ public class Loan extends AbstractPersistableCustom { for (final LoanRepaymentScheduleInstallment scheduledRepayment : installments) { final Money interestOutstandingForPeriod = scheduledRepayment.getInterestOutstanding(loanCurrency()); - if (scheduledRepayment.isOverdueOn(new LocalDate())) { + if (scheduledRepayment.isOverdueOn(LocalDate.now(ZoneId.systemDefault()))) { cumulativeInterestOverdue = cumulativeInterestOverdue.plus(interestOutstandingForPeriod); } } @@ -4064,7 +4074,7 @@ public class Loan extends AbstractPersistableCustom { public LocalDate getInterestChargedFromDate() { LocalDate interestChargedFrom = null; if (this.interestChargedFromDate != null) { - interestChargedFrom = new LocalDate(this.interestChargedFromDate); + interestChargedFrom = LocalDate.ofInstant(this.interestChargedFromDate.toInstant(), ZoneId.systemDefault()); } return interestChargedFrom; } @@ -4411,7 +4421,7 @@ public class Loan extends AbstractPersistableCustom { } } if (latestRepaymentDate != null) { - this.expectedMaturityDate = latestRepaymentDate.toDate(); + this.expectedMaturityDate = Date.from(latestRepaymentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -4465,7 +4475,7 @@ public class Loan extends AbstractPersistableCustom { } } if (latestRepaymentDate != null) { - this.expectedMaturityDate = latestRepaymentDate.toDate(); + this.expectedMaturityDate = Date.from(latestRepaymentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -5010,7 +5020,8 @@ public class Loan extends AbstractPersistableCustom { locale); final LocalDate expectedDisbursementDate = command .localDateValueOfParameterNamed(LoanApiConstants.updatedDisbursementDateParameterName); - disbursementDetails.updateExpectedDisbursementDateAndAmount(expectedDisbursementDate.toDate(), principal); + disbursementDetails.updateExpectedDisbursementDateAndAmount( + Date.from(expectedDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), principal); actualChanges.put(LoanApiConstants.disbursementDateParameterName, command.stringValueOfParameterNamed(LoanApiConstants.disbursementDateParameterName)); actualChanges.put(LoanApiConstants.disbursementIdParameterName, @@ -5049,7 +5060,7 @@ public class Loan extends AbstractPersistableCustom { public BigDecimal retriveLastEmiAmount() { BigDecimal emiAmount = this.fixedEmiAmount; - Date startDate = this.getDisbursementDate().toDate(); + Date startDate = Date.from(this.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); for (LoanTermVariations loanTermVariations : this.loanTermVariations) { if (loanTermVariations.getTermType().isEMIAmountVariation() && !startDate.after(loanTermVariations.getTermApplicableFrom())) { startDate = loanTermVariations.getTermApplicableFrom(); @@ -5100,7 +5111,7 @@ public class Loan extends AbstractPersistableCustom { public LocalDate getExpectedMaturityDate() { LocalDate expectedMaturityDate = null; if (this.expectedMaturityDate != null) { - expectedMaturityDate = new LocalDate(this.expectedMaturityDate); + expectedMaturityDate = LocalDate.ofInstant(this.expectedMaturityDate.toInstant(), ZoneId.systemDefault()); } return expectedMaturityDate; } @@ -5108,7 +5119,7 @@ public class Loan extends AbstractPersistableCustom { public LocalDate getMaturityDate() { LocalDate maturityDate = getExpectedMaturityDate(); if (this.actualMaturityDate != null) { - maturityDate = new LocalDate(this.actualMaturityDate); + maturityDate = LocalDate.ofInstant(this.actualMaturityDate.toInstant(), ZoneId.systemDefault()); } return maturityDate; } @@ -5241,7 +5252,7 @@ public class Loan extends AbstractPersistableCustom { } private void reverseTransactionsOnOrAfter(List transactions, Date date) { - LocalDate refDate = new LocalDate(date); + LocalDate refDate = LocalDate.ofInstant(date.toInstant(), ZoneId.systemDefault()); for (LoanTransaction loanTransaction : transactions) { if (!loanTransaction.getTransactionDate().isBefore(refDate)) { loanTransaction.reverse(); @@ -5275,12 +5286,14 @@ public class Loan extends AbstractPersistableCustom { if (existingIncomeTransaction == null) { LoanTransaction transaction = LoanTransaction.incomePosting(this, this.getOffice(), - compoundingDetail.getEffectiveDate().toDate(), compoundingDetail.getAmount(), interest, fee, penalties, currentUser); + Date.from(compoundingDetail.getEffectiveDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + compoundingDetail.getAmount(), interest, fee, penalties, currentUser); addLoanTransaction(transaction); } else if (existingIncomeTransaction.getAmount(getCurrency()).getAmount().compareTo(compoundingDetail.getAmount()) != 0) { existingIncomeTransaction.reverse(); LoanTransaction transaction = LoanTransaction.incomePosting(this, this.getOffice(), - compoundingDetail.getEffectiveDate().toDate(), compoundingDetail.getAmount(), interest, fee, penalties, currentUser); + Date.from(compoundingDetail.getEffectiveDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + compoundingDetail.getAmount(), interest, fee, penalties, currentUser); addLoanTransaction(transaction); } @@ -5521,14 +5534,15 @@ public class Loan extends AbstractPersistableCustom { feeCharges = feeCharges.plus(scheduledRepayment.getFeeChargesOutstanding(loanCurrency())); penaltyCharges = penaltyCharges.plus(scheduledRepayment.getPenaltyChargesOutstanding(loanCurrency())); } - return new LoanRepaymentScheduleInstallment(null, 0, LocalDate.now(), LocalDate.now(), totalPrincipal.getAmount(), - totalInterest.getAmount(), feeCharges.getAmount(), penaltyCharges.getAmount(), false, compoundingDetails); + return new LoanRepaymentScheduleInstallment(null, 0, LocalDate.now(ZoneId.systemDefault()), LocalDate.now(ZoneId.systemDefault()), + totalPrincipal.getAmount(), totalInterest.getAmount(), feeCharges.getAmount(), penaltyCharges.getAmount(), false, + compoundingDetails); } public LocalDate getAccruedTill() { LocalDate accruedTill = null; if (this.accruedTill != null) { - accruedTill = new LocalDate(this.accruedTill); + accruedTill = LocalDate.ofInstant(this.accruedTill.toInstant(), ZoneId.systemDefault()); } return accruedTill; } @@ -5538,7 +5552,7 @@ public class Loan extends AbstractPersistableCustom { if (this.interestRecalculatedOn == null) { interestRecalculatedOn = getDisbursementDate(); } else { - interestRecalculatedOn = new LocalDate(this.interestRecalculatedOn); + interestRecalculatedOn = LocalDate.ofInstant(this.interestRecalculatedOn.toInstant(), ZoneId.systemDefault()); } return interestRecalculatedOn; } @@ -5645,11 +5659,13 @@ public class Loan extends AbstractPersistableCustom { LocalDate actualDisbursementDate = null; if (loanDisbursementDetails.expectedDisbursementDate() != null) { - expectedDisbursementDate = new LocalDate(loanDisbursementDetails.expectedDisbursementDate()); + expectedDisbursementDate = LocalDate.ofInstant(loanDisbursementDetails.expectedDisbursementDate().toInstant(), + ZoneId.systemDefault()); } if (loanDisbursementDetails.actualDisbursementDate() != null) { - actualDisbursementDate = new LocalDate(loanDisbursementDetails.actualDisbursementDate()); + actualDisbursementDate = LocalDate.ofInstant(loanDisbursementDetails.actualDisbursementDate().toInstant(), + ZoneId.systemDefault()); } BigDecimal waivedChargeAmount = null; disbursementData.add(new DisbursementData(loanDisbursementDetails.getId(), expectedDisbursementDate, actualDisbursementDate, @@ -5797,7 +5813,7 @@ public class Loan extends AbstractPersistableCustom { public void updateRescheduledOnDate(LocalDate rescheduledOnDate) { if (rescheduledOnDate != null) { - this.rescheduledOnDate = rescheduledOnDate.toDate(); + this.rescheduledOnDate = Date.from(rescheduledOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -5966,7 +5982,7 @@ public class Loan extends AbstractPersistableCustom { public LocalDate possibleNextRefundDate() { - final LocalDate now = new LocalDate(); + final LocalDate now = LocalDate.now(ZoneId.systemDefault()); LocalDate lastTransactionDate = null; for (final LoanTransaction transaction : this.loanTransactions) { @@ -6029,10 +6045,12 @@ public class Loan extends AbstractPersistableCustom { LoanTermVariations loanTermVariations = iterator.next(); if ((loanTermVariations.getTermType().isDueDateVariation() && loanTermVariations.fetchDateValue().isAfter(actualDisbursementDate)) - || (loanTermVariations.getTermType().isEMIAmountVariation() - && loanTermVariations.getTermApplicableFrom().compareTo(actualDisbursementDate.toDate()) == 0 ? Boolean.TRUE + || (loanTermVariations.getTermType().isEMIAmountVariation() && loanTermVariations.getTermApplicableFrom() + .compareTo(Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())) == 0 + ? Boolean.TRUE : Boolean.FALSE) - || loanTermVariations.getTermApplicableFrom().after(actualDisbursementDate.toDate())) { + || loanTermVariations.getTermApplicableFrom() + .after(Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()))) { iterator.remove(); } } @@ -6070,13 +6088,14 @@ public class Loan extends AbstractPersistableCustom { for (final LoanCharge charge : charges()) { if (charge.isOverdueInstallmentCharge()) { charge.setActive(false); - } else if (charge.isTrancheDisbursementCharge() && actualDisbursementDate - .equals(new LocalDate(charge.getTrancheDisbursementCharge().getloanDisbursementDetails().actualDisbursementDate()))) { + } else if (charge.isTrancheDisbursementCharge() && actualDisbursementDate.equals(LocalDate.ofInstant( + charge.getTrancheDisbursementCharge().getloanDisbursementDetails().actualDisbursementDate().toInstant(), + ZoneId.systemDefault()))) { charge.resetToOriginal(loanCurrency()); } } for (final LoanDisbursementDetails details : this.disbursementDetails) { - if (actualDisbursementDate.equals(new LocalDate(details.actualDisbursementDate()))) { + if (actualDisbursementDate.equals(LocalDate.ofInstant(details.actualDisbursementDate().toInstant(), ZoneId.systemDefault()))) { this.loanRepaymentScheduleDetail.setPrincipal(getDisbursedAmount().subtract(details.principal())); details.updateActualDisbursementDate(null); } @@ -6139,7 +6158,7 @@ public class Loan extends AbstractPersistableCustom { */ public LocalDate getNextPossibleRepaymentDateForRescheduling() { List loanDisbursementDetails = this.disbursementDetails; - LocalDate nextRepaymentDate = new LocalDate(); + LocalDate nextRepaymentDate = LocalDate.now(ZoneId.systemDefault()); for (LoanDisbursementDetails loanDisbursementDetail : loanDisbursementDetails) { if (loanDisbursementDetail.actualDisbursementDate() == null) { List installments = getRepaymentScheduleInstallments(); @@ -6254,8 +6273,8 @@ public class Loan extends AbstractPersistableCustom { Money feeAccountedForCurrentPeriod = Money.zero(getCurrency()); Money interestForCurrentPeriod = Money.zero(getCurrency()); Money interestAccountedForCurrentPeriod = Money.zero(getCurrency()); - int totalPeriodDays = Days.daysBetween(installment.getFromDate(), installment.getDueDate()).getDays(); - int tillDays = Days.daysBetween(installment.getFromDate(), paymentDate).getDays(); + int totalPeriodDays = Math.toIntExact(ChronoUnit.DAYS.between(installment.getFromDate(), installment.getDueDate())); + int tillDays = Math.toIntExact(ChronoUnit.DAYS.between(installment.getFromDate(), paymentDate)); interestForCurrentPeriod = Money.of(getCurrency(), BigDecimal .valueOf(calculateInterestForDays(totalPeriodDays, installment.getInterestCharged(getCurrency()).getAmount(), tillDays))); interestAccountedForCurrentPeriod = installment.getInterestWaived(getCurrency()).plus(installment.getInterestPaid(getCurrency())); @@ -6386,8 +6405,8 @@ public class Loan extends AbstractPersistableCustom { totalAmountAccrued = totalAmountAccrued.plus(installment.getInterestAccrued(getCurrency())); if (tillDate.isAfter(installment.getFromDate()) && tillDate.isBefore(installment.getDueDate())) { - int daysInPeriod = Days.daysBetween(installment.getFromDate(), installment.getDueDate()).getDays(); - int tillDays = Days.daysBetween(installment.getFromDate(), tillDate).getDays(); + int daysInPeriod = Math.toIntExact(ChronoUnit.DAYS.between(installment.getFromDate(), installment.getDueDate())); + int tillDays = Math.toIntExact(ChronoUnit.DAYS.between(installment.getFromDate(), tillDate)); double interest = calculateInterestForDays(daysInPeriod, installment.getInterestCharged(getCurrency()).getAmount(), tillDays); actualAmountTobeAccrued = actualAmountTobeAccrued.plus(interest); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java index 50540390f..98eec6117 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java @@ -19,11 +19,11 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Map; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; import org.apache.fineract.portfolio.loanaccount.data.HolidayDetailDTO; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; -import org.joda.time.LocalDate; public interface LoanAccountDomainService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java index 9767c7683..8df0dde92 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java @@ -19,6 +19,9 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -72,8 +75,6 @@ import org.apache.fineract.portfolio.note.domain.Note; import org.apache.fineract.portfolio.note.domain.NoteRepository; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; @@ -319,7 +320,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { } else { final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), - transactionDate.toDate(), HolidayStatusType.ACTIVE.getValue()); + Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); @@ -398,8 +399,8 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { final LoanTransaction newRefundTransaction = LoanTransaction.refund(loan.getOffice(), refundAmount, paymentDetail, transactionDate, txnExternalId, DateUtils.getLocalDateTimeOfTenant(), currentUser); final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); - final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), transactionDate.toDate(), - HolidayStatusType.ACTIVE.getValue()); + final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), + Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); @@ -506,7 +507,8 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { if (installment.getDueDate().isAfter(loan.getMaturityDate())) { accruedTill = DateUtils.getLocalDateOfTenant(); } - if (!isOrganisationDateEnabled || new LocalDate(organisationStartDate).isBefore(installment.getDueDate())) { + if (!isOrganisationDateEnabled + || LocalDate.ofInstant(organisationStartDate.toInstant(), ZoneId.systemDefault()).isBefore(installment.getDueDate())) { generateLoanScheduleAccrualData(accruedTill, loanScheduleAccrualDatas, loanId, officeId, accrualStartDate, repaymentFrequency, repayEvery, interestCalculatedFrom, loanProductId, currency, currencyData, loanCharges, installment); @@ -590,8 +592,8 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { final LoanTransaction newRefundTransaction = LoanTransaction.refundForActiveLoan(loan.getOffice(), refundAmount, paymentDetail, transactionDate, txnExternalId, DateUtils.getLocalDateTimeOfTenant(), currentUser); final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); - final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), transactionDate.toDate(), - HolidayStatusType.ACTIVE.getValue()); + final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), + Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); @@ -679,7 +681,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { payment = LoanTransaction.repayment(loan.getOffice(), payPrincipal.plus(interestPayable).plus(feePayable).plus(penaltyPayable), paymentDetail, foreClosureDate, externalId, currentDateTime, appUser); createdDate = createdDate.plusSeconds(1); - payment.updateCreatedDate(createdDate.toDate()); + payment.updateCreatedDate(Date.from(createdDate.atZone(ZoneId.systemDefault()).toInstant())); payment.updateLoan(loan); newTransactions.add(payment); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java index b9e306558..8246e6967 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java @@ -20,6 +20,8 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -52,7 +54,6 @@ import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.apache.fineract.portfolio.charge.exception.LoanChargeWithoutMandatoryFieldException; import org.apache.fineract.portfolio.loanaccount.command.LoanChargeCommand; import org.apache.fineract.portfolio.loanaccount.data.LoanChargePaidDetail; -import org.joda.time.LocalDate; @Entity @Table(name = "m_loan_charge") @@ -192,7 +193,8 @@ public class LoanCharge extends AbstractPersistableCustom { if (chargeDefinition.getChargeTimeType().equals(ChargeTimeType.SPECIFIED_DUE_DATE.getValue()) && loan.isMultiDisburmentLoan()) { amountPercentageAppliedTo = BigDecimal.ZERO; for (final LoanDisbursementDetails loanDisbursementDetails : loan.getDisbursementDetails()) { - if (!loanDisbursementDetails.expectedDisbursementDate().after(dueDate.toDate())) { + if (!loanDisbursementDetails.expectedDisbursementDate() + .after(Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()))) { amountPercentageAppliedTo = amountPercentageAppliedTo.add(loanDisbursementDetails.principal()); } } @@ -239,7 +241,7 @@ public class LoanCharge extends AbstractPersistableCustom { chargeDefinition.getName()); } - this.dueDate = dueDate.toDate(); + this.dueDate = Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.dueDate = null; } @@ -382,7 +384,7 @@ public class LoanCharge extends AbstractPersistableCustom { public void update(final BigDecimal amount, final LocalDate dueDate, final BigDecimal loanPrincipal, Integer numberOfRepayments, BigDecimal loanCharge) { if (dueDate != null) { - this.dueDate = dueDate.toDate(); + this.dueDate = Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (amount != null) { @@ -470,7 +472,7 @@ public class LoanCharge extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(dueDateParamName); - this.dueDate = newValue.toDate(); + this.dueDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String amountParamName = "amount"; @@ -578,7 +580,7 @@ public class LoanCharge extends AbstractPersistableCustom { public LocalDate getDueLocalDate() { LocalDate dueDate = null; if (this.dueDate != null) { - dueDate = new LocalDate(this.dueDate); + dueDate = LocalDate.ofInstant(this.dueDate.toInstant(), ZoneId.systemDefault()); } return dueDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java index d9036b954..15b77cbc3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.Objects; import javax.persistence.Column; @@ -30,7 +32,6 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.loanaccount.data.DisbursementData; -import org.joda.time.LocalDate; @Entity @Table(name = "m_loan_disbursement_detail") @@ -97,7 +98,7 @@ public class LoanDisbursementDetails extends AbstractPersistableCustom { public LocalDate expectedDisbursementDateAsLocalDate() { LocalDate expectedDisburseDate = null; if (this.expectedDisbursementDate != null) { - expectedDisburseDate = new LocalDate(this.expectedDisbursementDate); + expectedDisburseDate = LocalDate.ofInstant(this.expectedDisbursementDate.toInstant(), ZoneId.systemDefault()); } return expectedDisburseDate; } @@ -126,7 +127,7 @@ public class LoanDisbursementDetails extends AbstractPersistableCustom { LocalDate expectedDisburseDate = expectedDisbursementDateAsLocalDate(); LocalDate actualDisburseDate = null; if (this.actualDisbursementDate != null) { - actualDisburseDate = new LocalDate(this.actualDisbursementDate); + actualDisburseDate = LocalDate.ofInstant(this.actualDisbursementDate.toInstant(), ZoneId.systemDefault()); } BigDecimal waivedChargeAmount = null; return new DisbursementData(getId(), expectedDisburseDate, actualDisburseDate, this.principal, null, null, waivedChargeAmount); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalcualtionAdditionalDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalcualtionAdditionalDetails.java index 25d67e11c..14a3e63b3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalcualtionAdditionalDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalcualtionAdditionalDetails.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -26,7 +28,6 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; -import org.joda.time.LocalDate; @Entity @Table(name = "m_loan_interest_recalculation_additional_details") @@ -45,13 +46,13 @@ public class LoanInterestRecalcualtionAdditionalDetails extends AbstractPersista public LoanInterestRecalcualtionAdditionalDetails(final LocalDate effectiveDate, final BigDecimal amount) { if (effectiveDate != null) { - this.effectiveDate = effectiveDate.toDate(); + this.effectiveDate = Date.from(effectiveDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.amount = amount; } public LocalDate getEffectiveDate() { - return new LocalDate(this.effectiveDate); + return LocalDate.ofInstant(this.effectiveDate.toInstant(), ZoneId.systemDefault()); } public BigDecimal getAmount() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanOfficerAssignmentHistory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanOfficerAssignmentHistory.java index dbb7ad86b..af4fd1719 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanOfficerAssignmentHistory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanOfficerAssignmentHistory.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -29,7 +31,6 @@ import javax.persistence.TemporalType; import org.apache.commons.lang3.ObjectUtils; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.organisation.staff.domain.Staff; -import org.joda.time.LocalDate; @Entity @Table(name = "m_loan_officer_assignment_history") @@ -52,7 +53,8 @@ public class LoanOfficerAssignmentHistory extends AbstractAuditableCustom { private Date endDate; public static LoanOfficerAssignmentHistory createNew(final Loan loan, final Staff loanOfficer, final LocalDate startDate) { - return new LoanOfficerAssignmentHistory(loan, loanOfficer, startDate.toDate(), null); + return new LoanOfficerAssignmentHistory(loan, loanOfficer, Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + null); } protected LoanOfficerAssignmentHistory() { @@ -71,11 +73,11 @@ public class LoanOfficerAssignmentHistory extends AbstractAuditableCustom { } public void updateStartDate(final LocalDate startDate) { - this.startDate = startDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateEndDate(final LocalDate endDate) { - this.endDate = endDate.toDate(); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public boolean matchesStartDateOf(final LocalDate matchingDate) { @@ -83,7 +85,7 @@ public class LoanOfficerAssignmentHistory extends AbstractAuditableCustom { } public LocalDate getStartDate() { - return new LocalDate(this.startDate); + return LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } public boolean hasStartDateBefore(final LocalDate matchingDate) { @@ -101,11 +103,11 @@ public class LoanOfficerAssignmentHistory extends AbstractAuditableCustom { * @return */ public boolean isEndDateAfter(final LocalDate compareDate) { - return this.endDate == null ? false : new LocalDate(this.endDate).isAfter(compareDate); + return this.endDate == null ? false : LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()).isAfter(compareDate); } public LocalDate getEndDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.endDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()), null); } public boolean isSameLoanOfficer(final Staff staff) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleInstallment.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleInstallment.java index 5c6f1b369..4c08ec6aa 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleInstallment.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleInstallment.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Comparator; import java.util.Date; import java.util.HashSet; @@ -36,7 +38,6 @@ import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; -import org.joda.time.LocalDate; @Entity @Table(name = "m_loan_repayment_schedule") @@ -148,8 +149,8 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus final Set compoundingDetails, final BigDecimal rescheduleInterestPortion) { this.loan = loan; this.installmentNumber = installmentNumber; - this.fromDate = fromDate.toDateTimeAtStartOfDay().toDate(); - this.dueDate = dueDate.toDateTimeAtStartOfDay().toDate(); + this.fromDate = Date.from(fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.dueDate = Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.principal = defaultToNullIfZero(principal); this.interestCharged = defaultToNullIfZero(interest); this.feeChargesCharged = defaultToNullIfZero(feeCharges); @@ -166,8 +167,8 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus final Set compoundingDetails) { this.loan = loan; this.installmentNumber = installmentNumber; - this.fromDate = fromDate.toDateTimeAtStartOfDay().toDate(); - this.dueDate = dueDate.toDateTimeAtStartOfDay().toDate(); + this.fromDate = Date.from(fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.dueDate = Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.principal = defaultToNullIfZero(principal); this.interestCharged = defaultToNullIfZero(interest); this.feeChargesCharged = defaultToNullIfZero(feeCharges); @@ -204,14 +205,14 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus public LocalDate getFromDate() { LocalDate fromLocalDate = null; if (this.fromDate != null) { - fromLocalDate = new LocalDate(this.fromDate); + fromLocalDate = LocalDate.ofInstant(this.fromDate.toInstant(), ZoneId.systemDefault()); } return fromLocalDate; } public LocalDate getDueDate() { - return new LocalDate(this.dueDate); + return LocalDate.ofInstant(this.dueDate.toInstant(), ZoneId.systemDefault()); } public Money getPrincipal(final MonetaryCurrency currency) { @@ -587,7 +588,7 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus public void updateDerivedFields(final MonetaryCurrency currency, final LocalDate actualDisbursementDate) { if (!this.obligationsMet && getTotalOutstanding(currency).isZero()) { this.obligationsMet = true; - this.obligationsMetOnDate = actualDisbursementDate.toDate(); + this.obligationsMetOnDate = Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -615,7 +616,7 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus private void checkIfRepaymentPeriodObligationsAreMet(final LocalDate transactionDate, final MonetaryCurrency currency) { this.obligationsMet = getTotalOutstanding(currency).isZero(); if (this.obligationsMet) { - this.obligationsMetOnDate = transactionDate.toDate(); + this.obligationsMetOnDate = Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.obligationsMetOnDate = null; } @@ -623,13 +624,13 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus public void updateDueDate(final LocalDate newDueDate) { if (newDueDate != null) { - this.dueDate = newDueDate.toDate(); + this.dueDate = Date.from(newDueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } public void updateFromDate(final LocalDate newFromDate) { if (newFromDate != null) { - this.fromDate = newFromDate.toDate(); + this.fromDate = Date.from(newFromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -664,7 +665,9 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus } public void updateObligationMetOnDate(final LocalDate obligationsMetOnDate) { - this.obligationsMetOnDate = (obligationsMetOnDate != null) ? obligationsMetOnDate.toDate() : null; + this.obligationsMetOnDate = (obligationsMetOnDate != null) + ? Date.from(obligationsMetOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()) + : null; } public void updateInterestWrittenOff(final BigDecimal interestWrittenOff) { @@ -696,7 +699,7 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus LocalDate obligationsMetOnDate = null; if (this.obligationsMetOnDate != null) { - obligationsMetOnDate = new LocalDate(this.obligationsMetOnDate); + obligationsMetOnDate = LocalDate.ofInstant(this.obligationsMetOnDate.toInstant(), ZoneId.systemDefault()); } return obligationsMetOnDate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java index 39bc909d9..775052446 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleProcessingWrapper.java @@ -19,11 +19,11 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; -import org.joda.time.LocalDate; /** * A wrapper around loan schedule related data exposing needed behaviour by loan. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanSummaryWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanSummaryWrapper.java index 90ed8c82d..0c8b82fb1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanSummaryWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanSummaryWrapper.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.loanaccount.domain; +import java.time.LocalDate; import java.util.List; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; -import org.joda.time.LocalDate; import org.springframework.stereotype.Component; /** diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java index 430e2d636..e78a4e14c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -33,7 +35,6 @@ import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData; import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; -import org.joda.time.LocalDate; @Entity @Table(name = "m_loan_term_variations") @@ -119,10 +120,10 @@ public class LoanTermVariations extends AbstractPersistableCustom { } public LoanTermVariationsData toData() { - LocalDate termStartDate = new LocalDate(this.termApplicableFrom); + LocalDate termStartDate = LocalDate.ofInstant(this.termApplicableFrom.toInstant(), ZoneId.systemDefault()); LocalDate dateValue = null; if (this.dateValue != null) { - dateValue = new LocalDate(this.dateValue); + dateValue = LocalDate.ofInstant(this.dateValue.toInstant(), ZoneId.systemDefault()); } EnumOptionData type = LoanEnumerations.loanvariationType(this.termType); return new LoanTermVariationsData(getId(), type, termStartDate, this.decimalValue, dateValue, this.isSpecificToInstallment); @@ -133,7 +134,7 @@ public class LoanTermVariations extends AbstractPersistableCustom { } public LocalDate fetchTermApplicaDate() { - return new LocalDate(this.termApplicableFrom); + return LocalDate.ofInstant(this.termApplicableFrom.toInstant(), ZoneId.systemDefault()); } public BigDecimal getTermValue() { @@ -145,7 +146,7 @@ public class LoanTermVariations extends AbstractPersistableCustom { } public LocalDate fetchDateValue() { - return this.dateValue == null ? null : new LocalDate(this.dateValue); + return this.dateValue == null ? null : LocalDate.ofInstant(this.dateValue.toInstant(), ZoneId.systemDefault()); } public void setTermApplicableFrom(Date termApplicableFrom) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java index 1104c5c1a..d25c65c9f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java @@ -19,6 +19,9 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -51,8 +54,6 @@ import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; /** * All monetary transactions against a loan are modelled through this entity. Disbursements, Repayments, Waivers, @@ -203,9 +204,10 @@ public class LoanTransaction extends AbstractPersistableCustom { boolean reversed = false; PaymentDetail paymentDetail = null; String externalId = null; - return new LoanTransaction(loan, office, LoanTransactionType.ACCRUAL.getValue(), interestAppliedDate.toDate(), interestPortion, - principalPortion, interestPortion, feesPortion, penaltiesPortion, overPaymentPortion, reversed, paymentDetail, externalId, - createdDate, appUser); + return new LoanTransaction(loan, office, LoanTransactionType.ACCRUAL.getValue(), + Date.from(interestAppliedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), interestPortion, principalPortion, + interestPortion, feesPortion, penaltiesPortion, overPaymentPortion, reversed, paymentDetail, externalId, createdDate, + appUser); } public static LoanTransaction accrual(final Loan loan, final Office office, final Money amount, final Money interest, @@ -224,15 +226,15 @@ public class LoanTransaction extends AbstractPersistableCustom { PaymentDetail paymentDetail = null; String externalId = null; LocalDateTime createdDate = DateUtils.getLocalDateTimeOfTenant(); - return new LoanTransaction(loan, office, LoanTransactionType.ACCRUAL.getValue(), dateOf.toDate(), amount, principalPortion, - interestPortion, feeChargesPortion, penaltyChargesPortion, overPaymentPortion, reversed, paymentDetail, externalId, - createdDate, appUser); + return new LoanTransaction(loan, office, LoanTransactionType.ACCRUAL.getValue(), + Date.from(dateOf.atStartOfDay(ZoneId.systemDefault()).toInstant()), amount, principalPortion, interestPortion, + feeChargesPortion, penaltyChargesPortion, overPaymentPortion, reversed, paymentDetail, externalId, createdDate, appUser); } public static LoanTransaction initiateTransfer(final Office office, final Loan loan, final LocalDate transferDate, final LocalDateTime createdDate, final AppUser appUser) { return new LoanTransaction(loan, office, LoanTransactionType.INITIATE_TRANSFER.getValue(), - transferDate.toDateTimeAtStartOfDay().toDate(), loan.getSummary().getTotalOutstanding(), + Date.from(transferDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), loan.getSummary().getTotalOutstanding(), loan.getSummary().getTotalPrincipalOutstanding(), loan.getSummary().getTotalInterestOutstanding(), loan.getSummary().getTotalFeeChargesOutstanding(), loan.getSummary().getTotalPenaltyChargesOutstanding(), null, false, null, null, createdDate, appUser); @@ -241,7 +243,7 @@ public class LoanTransaction extends AbstractPersistableCustom { public static LoanTransaction approveTransfer(final Office office, final Loan loan, final LocalDate transferDate, final LocalDateTime createdDate, final AppUser appUser) { return new LoanTransaction(loan, office, LoanTransactionType.APPROVE_TRANSFER.getValue(), - transferDate.toDateTimeAtStartOfDay().toDate(), loan.getSummary().getTotalOutstanding(), + Date.from(transferDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), loan.getSummary().getTotalOutstanding(), loan.getSummary().getTotalPrincipalOutstanding(), loan.getSummary().getTotalInterestOutstanding(), loan.getSummary().getTotalFeeChargesOutstanding(), loan.getSummary().getTotalPenaltyChargesOutstanding(), null, false, null, null, createdDate, appUser); @@ -250,7 +252,7 @@ public class LoanTransaction extends AbstractPersistableCustom { public static LoanTransaction withdrawTransfer(final Office office, final Loan loan, final LocalDate transferDate, final LocalDateTime createdDate, final AppUser appUser) { return new LoanTransaction(loan, office, LoanTransactionType.WITHDRAW_TRANSFER.getValue(), - transferDate.toDateTimeAtStartOfDay().toDate(), loan.getSummary().getTotalOutstanding(), + Date.from(transferDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), loan.getSummary().getTotalOutstanding(), loan.getSummary().getTotalPrincipalOutstanding(), loan.getSummary().getTotalInterestOutstanding(), loan.getSummary().getTotalFeeChargesOutstanding(), loan.getSummary().getTotalPenaltyChargesOutstanding(), null, false, null, null, createdDate, appUser); @@ -267,7 +269,9 @@ public class LoanTransaction extends AbstractPersistableCustom { loanTransaction.amount, loanTransaction.principalPortion, loanTransaction.interestPortion, loanTransaction.feeChargesPortion, loanTransaction.penaltyChargesPortion, loanTransaction.overPaymentPortion, loanTransaction.reversed, loanTransaction.paymentDetail, loanTransaction.externalId, - new LocalDateTime(loanTransaction.createdDate), loanTransaction.appUser); + (loanTransaction.createdDate == null) ? LocalDateTime.now(ZoneId.systemDefault()) + : LocalDateTime.ofInstant(loanTransaction.createdDate.toInstant(), ZoneId.systemDefault()), + loanTransaction.appUser); } public static LoanTransaction accrueLoanCharge(final Loan loan, final Office office, final Money amount, final LocalDate applyDate, @@ -317,7 +321,7 @@ public class LoanTransaction extends AbstractPersistableCustom { this.office = office; this.externalId = externalId; this.submittedOnDate = DateUtils.getDateOfTenant(); - this.createdDate = createdDate.toDate(); + this.createdDate = Date.from(createdDate.atZone(ZoneId.systemDefault()).toInstant()); this.appUser = appUser; } @@ -341,11 +345,11 @@ public class LoanTransaction extends AbstractPersistableCustom { this.loan = loan; this.typeOf = type.getValue(); this.amount = amount; - this.dateOf = date.toDateTimeAtStartOfDay().toDate(); + this.dateOf = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.externalId = externalId; this.office = office; this.submittedOnDate = DateUtils.getDateOfTenant(); - this.createdDate = createdDate.toDate(); + this.createdDate = Date.from(createdDate.atZone(ZoneId.systemDefault()).toInstant()); this.appUser = appUser; } @@ -356,11 +360,11 @@ public class LoanTransaction extends AbstractPersistableCustom { this.typeOf = type.getValue(); this.paymentDetail = paymentDetail; this.amount = amount; - this.dateOf = date.toDateTimeAtStartOfDay().toDate(); + this.dateOf = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.externalId = externalId; this.office = office; this.submittedOnDate = DateUtils.getDateOfTenant(); - this.createdDate = createdDate.toDate(); + this.createdDate = Date.from(createdDate.atZone(ZoneId.systemDefault()).toInstant()); this.appUser = appUser; } @@ -472,7 +476,7 @@ public class LoanTransaction extends AbstractPersistableCustom { } public LocalDate getTransactionDate() { - return new LocalDate(this.dateOf); + return LocalDate.ofInstant(this.dateOf.toInstant(), ZoneId.systemDefault()); } public Date getDateOf() { @@ -714,11 +718,13 @@ public class LoanTransaction extends AbstractPersistableCustom { } private LocalDate getCreatedDate() { - return new LocalDate(this.createdDate); + return (this.createdDate == null) ? LocalDate.now(ZoneId.systemDefault()) + : LocalDate.ofInstant(this.createdDate.toInstant(), ZoneId.systemDefault()); } public LocalDateTime getCreatedDateTime() { - return new LocalDateTime(this.createdDate); + return (this.createdDate == null) ? LocalDateTime.now(ZoneId.systemDefault()) + : LocalDateTime.ofInstant(this.createdDate.toInstant(), ZoneId.systemDefault()); } public boolean isLastTransaction(final LoanTransaction loanTransaction) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java index ea1bad8ae..8c95c2b2a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/AbstractLoanRepaymentScheduleTransactionProcessor.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -40,7 +41,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.CreocoreLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.HeavensFamilyLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.InterestPrincipalPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; /** * Abstract implementation of {@link LoanRepaymentScheduleTransactionProcessor} which is more convenient for concrete diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/LoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/LoanRepaymentScheduleTransactionProcessor.java index 36bff0f13..c262897df 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/LoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/LoanRepaymentScheduleTransactionProcessor.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor; +import java.time.LocalDate; import java.util.List; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; @@ -26,7 +27,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.ChangedTransactionDetail import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; -import org.joda.time.LocalDate; public interface LoanRepaymentScheduleTransactionProcessor { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/CreocoreLoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/CreocoreLoanRepaymentScheduleTransactionProcessor.java index 11eb456e8..40e66a947 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/CreocoreLoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/CreocoreLoanRepaymentScheduleTransactionProcessor.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -26,7 +27,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.AbstractLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; /** * Creocore style {@link LoanRepaymentScheduleTransactionProcessor}. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/EarlyPaymentLoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/EarlyPaymentLoanRepaymentScheduleTransactionProcessor.java index b5f728676..10db11b2c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/EarlyPaymentLoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/EarlyPaymentLoanRepaymentScheduleTransactionProcessor.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -26,7 +27,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.AbstractLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; /** * This {@link LoanRepaymentScheduleTransactionProcessor} defaults to having the payment order of Interest first, then diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/FineractStyleLoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/FineractStyleLoanRepaymentScheduleTransactionProcessor.java index 9ef2dac55..c73e06e8b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/FineractStyleLoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/FineractStyleLoanRepaymentScheduleTransactionProcessor.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -26,7 +27,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.AbstractLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; /** * Old style {@link LoanRepaymentScheduleTransactionProcessor}. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/HeavensFamilyLoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/HeavensFamilyLoanRepaymentScheduleTransactionProcessor.java index 2711dbd61..acbed3504 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/HeavensFamilyLoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/HeavensFamilyLoanRepaymentScheduleTransactionProcessor.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -26,7 +27,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.AbstractLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; /** * Heavensfamily style {@link LoanRepaymentScheduleTransactionProcessor}. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/InterestPrincipalPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/InterestPrincipalPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor.java index 87bb81f3d..dd25afc3d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/InterestPrincipalPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/InterestPrincipalPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -26,7 +27,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.AbstractLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; /** * This {@link LoanRepaymentScheduleTransactionProcessor} defaults to having the payment order of Interest first, then diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/PrincipalInterestPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/PrincipalInterestPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor.java index 6906084ab..128d0e560 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/PrincipalInterestPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/PrincipalInterestPenaltyFeesOrderLoanRepaymentScheduleTransactionProcessor.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -26,7 +27,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.AbstractLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; /** * This {@link LoanRepaymentScheduleTransactionProcessor} defaults to having the payment order of principal first, then diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/RBILoanRepaymentScheduleTransactionProcessor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/RBILoanRepaymentScheduleTransactionProcessor.java index 0078ef71d..3623329b0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/RBILoanRepaymentScheduleTransactionProcessor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/RBILoanRepaymentScheduleTransactionProcessor.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -26,7 +27,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.AbstractLoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; /** * Adhikar/RBI style {@link LoanRepaymentScheduleTransactionProcessor}. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/DateMismatchException.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/DateMismatchException.java index 6c489a605..e04025484 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/DateMismatchException.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/DateMismatchException.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.exception; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.exception.AbstractPlatformDomainRuleException; -import org.joda.time.LocalDate; /** * {@link AbstractPlatformDomainRuleException} thrown when actual disbursement date does not match with expected diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/LoanOfficerAssignmentException.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/LoanOfficerAssignmentException.java index 4c8acad11..d97fa8eda 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/LoanOfficerAssignmentException.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/LoanOfficerAssignmentException.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.exception; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.exception.AbstractPlatformDomainRuleException; -import org.joda.time.LocalDate; public class LoanOfficerAssignmentException extends AbstractPlatformDomainRuleException { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/MinDaysBetweenDisbursalAndFirstRepaymentViolationException.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/MinDaysBetweenDisbursalAndFirstRepaymentViolationException.java index b9a183e52..4650808e0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/MinDaysBetweenDisbursalAndFirstRepaymentViolationException.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/exception/MinDaysBetweenDisbursalAndFirstRepaymentViolationException.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.exception; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.exception.AbstractPlatformDomainRuleException; -import org.joda.time.LocalDate; /** * {@link AbstractPlatformDomainRuleException} thrown when a number of days between disbursal date and firstRepayment is diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/command/GuarantorCommand.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/command/GuarantorCommand.java index eed36b404..1ef242061 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/command/GuarantorCommand.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/command/GuarantorCommand.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.guarantor.command; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -27,7 +29,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants.GuarantorJSONinputParams; import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorType; -import org.joda.time.LocalDate; /** * Immutable command for creating or updating details of a Guarantor. @@ -90,7 +91,7 @@ public class GuarantorCommand { } public Date getDobAsDate() { - return this.dob.toDateTimeAtStartOfDay().toDate(); + return Date.from(this.dob.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void validateForCreate() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/data/GuarantorData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/data/GuarantorData.java index 6b125e64a..ca86e7d4b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/data/GuarantorData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/data/GuarantorData.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.guarantor.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.codes.data.CodeValueData; @@ -28,7 +29,6 @@ import org.apache.fineract.portfolio.account.data.PortfolioAccountData; import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorType; import org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorEnumerations; -import org.joda.time.LocalDate; public class GuarantorData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/serialization/GuarantorCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/serialization/GuarantorCommandFromApiJsonDeserializer.java index cd0bbff06..f14da9741 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/serialization/GuarantorCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/serialization/GuarantorCommandFromApiJsonDeserializer.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -32,7 +33,6 @@ import org.apache.fineract.infrastructure.core.serialization.FromApiJsonDeserial import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants.GuarantorJSONinputParams; import org.apache.fineract.portfolio.loanaccount.guarantor.command.GuarantorCommand; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainService.java index 82b3cd6a4..b3bc00818 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainService.java @@ -18,9 +18,9 @@ */ package org.apache.fineract.portfolio.loanaccount.guarantor.service; +import java.time.LocalDate; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingDetails; -import org.joda.time.LocalDate; public interface GuarantorDomainService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java index 1445888ca..c08f2f1f4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorDomainServiceImpl.java @@ -19,6 +19,9 @@ package org.apache.fineract.portfolio.loanaccount.guarantor.service; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -57,8 +60,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; import org.apache.fineract.portfolio.savings.exception.InsufficientAccountBalanceException; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -222,7 +223,7 @@ public class GuarantorDomainServiceImpl implements GuarantorDomainService { final List existGuarantorList = this.guarantorRepository.findByLoan(loan); final boolean isRegularTransaction = true; final boolean isExceptionForBalanceCheck = true; - LocalDate transactionDate = LocalDate.now(); + LocalDate transactionDate = LocalDate.now(ZoneId.systemDefault()); PortfolioAccountType fromAccountType = PortfolioAccountType.SAVINGS; PortfolioAccountType toAccountType = PortfolioAccountType.LOAN; final Long toAccountId = loan.getId(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorReadPlatformServiceImpl.java index 78971fc73..492fe12d1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.loanaccount.guarantor.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -41,7 +42,6 @@ import org.apache.fineract.portfolio.loanaccount.guarantor.data.GuarantorTransac import org.apache.fineract.portfolio.loanaccount.guarantor.data.ObligeeData; import org.apache.fineract.portfolio.savings.data.DepositAccountOnHoldTransactionData; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorWritePlatformServiceJpaRepositoryIImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorWritePlatformServiceJpaRepositoryIImpl.java index f0cbdb9ec..48dcb9805 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorWritePlatformServiceJpaRepositoryIImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorWritePlatformServiceJpaRepositoryIImpl.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.guarantor.service; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -53,7 +55,6 @@ import org.apache.fineract.portfolio.loanaccount.guarantor.exception.InvalidGuar import org.apache.fineract.portfolio.loanaccount.guarantor.serialization.GuarantorCommandFromApiJsonDeserializer; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -122,7 +123,7 @@ public class GuarantorWritePlatformServiceJpaRepositoryIImpl implements Guaranto guarantorFundingDetails.add(fundingDetails); if (loan.isDisbursed() || (loan.isApproved() && (loan.getGuaranteeAmount() != null || loan.loanProduct().isHoldGuaranteeFundsEnabled()))) { - this.guarantorDomainService.assignGuarantor(fundingDetails, LocalDate.now()); + this.guarantorDomainService.assignGuarantor(fundingDetails, LocalDate.now(ZoneId.systemDefault())); loan.updateGuaranteeAmount(fundingDetails.getAmount()); } } @@ -309,7 +310,7 @@ public class GuarantorWritePlatformServiceJpaRepositoryIImpl implements Guaranto GuarantorFundStatusType fundStatusType = GuarantorFundStatusType.DELETED; if (guarantorForDelete.getLoan().isDisbursed() || guarantorForDelete.getLoan().isApproved()) { fundStatusType = GuarantorFundStatusType.WITHDRAWN; - this.guarantorDomainService.releaseGuarantor(guarantorFundingDetails, LocalDate.now()); + this.guarantorDomainService.releaseGuarantor(guarantorFundingDetails, LocalDate.now(ZoneId.systemDefault())); } guarantorForDelete.updateStatus(guarantorFundingDetails, fundStatusType); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/LoanScheduleParams.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/LoanScheduleParams.java index 92c37550d..c5c0bec83 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/LoanScheduleParams.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/LoanScheduleParams.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.loanschedule.data; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -29,7 +30,6 @@ import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.RecalculationDetail; -import org.joda.time.LocalDate; public final class LoanScheduleParams { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/LoanSchedulePeriodData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/LoanSchedulePeriodData.java index a8ba9b348..91bdb26c3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/LoanSchedulePeriodData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/data/LoanSchedulePeriodData.java @@ -19,8 +19,9 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.data; import java.math.BigDecimal; -import org.joda.time.Days; -import org.joda.time.LocalDate; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; /** * Immutable data object that represents a period of a loan schedule. @@ -144,7 +145,7 @@ public final class LoanSchedulePeriodData { this.obligationsMetOnDate = null; this.complete = null; if (fromDate != null) { - this.daysInPeriod = Days.daysBetween(this.fromDate, this.dueDate).getDays(); + this.daysInPeriod = Math.toIntExact(ChronoUnit.DAYS.between(this.fromDate, this.dueDate)); } else { this.daysInPeriod = null; } @@ -192,7 +193,7 @@ public final class LoanSchedulePeriodData { this.totalOutstandingForPeriod = this.feeChargesOutstanding; this.totalActualCostOfLoanForPeriod = this.feeChargesDue; this.totalInstallmentAmountForPeriod = null; - if (dueDate.isBefore(new LocalDate())) { + if (dueDate.isBefore(LocalDate.now(ZoneId.systemDefault()))) { this.totalOverdue = this.totalOutstandingForPeriod; } else { this.totalOverdue = null; @@ -212,7 +213,7 @@ public final class LoanSchedulePeriodData { this.obligationsMetOnDate = null; this.complete = null; if (fromDate != null) { - this.daysInPeriod = Days.daysBetween(this.fromDate, this.dueDate).getDays(); + this.daysInPeriod = Math.toIntExact(ChronoUnit.DAYS.between(this.fromDate, this.dueDate)); } else { this.daysInPeriod = null; } @@ -254,7 +255,7 @@ public final class LoanSchedulePeriodData { this.totalActualCostOfLoanForPeriod = interestDueOnPrincipalOutstanding.add(feeChargesDueForPeriod); this.totalInstallmentAmountForPeriod = totalInstallmentAmountForPeriod; - if (dueDate.isBefore(new LocalDate())) { + if (dueDate.isBefore(LocalDate.now(ZoneId.systemDefault()))) { this.totalOverdue = this.totalOutstandingForPeriod; } else { this.totalOverdue = null; @@ -283,7 +284,7 @@ public final class LoanSchedulePeriodData { this.obligationsMetOnDate = obligationsMetOnDate; this.complete = complete; if (fromDate != null) { - this.daysInPeriod = Days.daysBetween(this.fromDate, this.dueDate).getDays(); + this.daysInPeriod = Math.toIntExact(ChronoUnit.DAYS.between(this.fromDate, this.dueDate)); } else { this.daysInPeriod = null; } @@ -325,7 +326,7 @@ public final class LoanSchedulePeriodData { this.totalActualCostOfLoanForPeriod = totalActualCostOfLoanForPeriod; this.totalInstallmentAmountForPeriod = totalInstallmentAmountForPeriod; - if (dueDate.isBefore(new LocalDate())) { + if (dueDate.isBefore(LocalDate.now(ZoneId.systemDefault()))) { this.totalOverdue = this.totalOutstandingForPeriod; } else { this.totalOverdue = null; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java index c0e4b5e32..ae107e387 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractLoanScheduleGenerator.java @@ -20,6 +20,8 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -52,8 +54,6 @@ import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleP import org.apache.fineract.portfolio.loanaccount.loanschedule.exception.MultiDisbursementEmiAmountException; import org.apache.fineract.portfolio.loanaccount.loanschedule.exception.MultiDisbursementOutstandingAmoutException; import org.apache.fineract.portfolio.loanaccount.loanschedule.exception.ScheduleDateException; -import org.joda.time.Days; -import org.joda.time.LocalDate; public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGenerator { @@ -208,7 +208,8 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener } // Updates total days in term - scheduleParams.addLoanTermInDays(Days.daysBetween(scheduleParams.getPeriodStartDate(), scheduledDueDate).getDays()); + scheduleParams + .addLoanTermInDays(Math.toIntExact(ChronoUnit.DAYS.between(scheduleParams.getPeriodStartDate(), scheduledDueDate))); if (termVariationParams.isSkipPeriod()) { continue; } @@ -757,7 +758,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener if (!transactionDate.isEqual(scheduleParams.getPeriodStartDate()) || scheduleParams.getInstalmentNumber() == 1) { - int periodDays = Days.daysBetween(scheduleParams.getPeriodStartDate(), transactionDate).getDays(); + int periodDays = Math.toIntExact(ChronoUnit.DAYS.between(scheduleParams.getPeriodStartDate(), transactionDate)); // calculates period start date for interest // calculation as per the configuration periodStartDateApplicableForInterest = calculateInterestStartDateForPeriod(loanApplicationTerms, @@ -765,7 +766,8 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener loanApplicationTerms.isInterestChargedFromDateSameAsDisbursalDateEnabled(), loanApplicationTerms.getExpectedDisbursementDate()); - int daysInPeriodApplicable = Days.daysBetween(periodStartDateApplicableForInterest, transactionDate).getDays(); + int daysInPeriodApplicable = Math + .toIntExact(ChronoUnit.DAYS.between(periodStartDateApplicableForInterest, transactionDate)); Money interestForThisinstallment = Money.zero(currency); if (daysInPeriodApplicable > 0) { // 5 determine interest till the transaction @@ -2292,7 +2294,7 @@ public abstract class AbstractLoanScheduleGenerator implements LoanScheduleGener totalFeeChargesCharged = totalFeeChargesCharged.plus(installment.getFeeChargesCharged(currency)); totalPenaltyChargesCharged = totalPenaltyChargesCharged.plus(installment.getPenaltyChargesCharged(currency)); instalmentNumber++; - loanTermInDays = Days.daysBetween(installment.getFromDate(), installment.getDueDate()).getDays(); + loanTermInDays = Math.toIntExact(ChronoUnit.DAYS.between(installment.getFromDate(), installment.getDueDate())); if (loanApplicationTerms.isInterestRecalculationEnabled()) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DecliningBalanceInterestLoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DecliningBalanceInterestLoanScheduleGenerator.java index defae9228..a120fa88b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DecliningBalanceInterestLoanScheduleGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DecliningBalanceInterestLoanScheduleGenerator.java @@ -20,6 +20,8 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -27,8 +29,6 @@ import java.util.TreeMap; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData; import org.apache.fineract.portfolio.loanproduct.domain.AmortizationMethod; -import org.joda.time.Days; -import org.joda.time.LocalDate; /** *

@@ -90,7 +90,7 @@ public class DecliningBalanceInterestLoanScheduleGenerator extends AbstractLoanS for (Map.Entry principal : principalVariation.entrySet()) { if (!principal.getKey().isAfter(periodEndDate)) { - int interestForDays = Days.daysBetween(interestStartDate, principal.getKey()).getDays(); + int interestForDays = Math.toIntExact(ChronoUnit.DAYS.between(interestStartDate, principal.getKey())); if (interestForDays > 0) { final PrincipalInterest result = loanApplicationTerms.calculateTotalInterestForPeriod(calculator, interestCalculationGraceOnRepaymentPeriodFraction, periodNumber, mc, cumulatingInterestDueToGrace, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultPaymentPeriodsInOneYearCalculator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultPaymentPeriodsInOneYearCalculator.java index 99a7211c1..a1f7fe4c5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultPaymentPeriodsInOneYearCalculator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultPaymentPeriodsInOneYearCalculator.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; -import org.joda.time.Days; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,8 +69,8 @@ public class DefaultPaymentPeriodsInOneYearCalculator implements PaymentPeriodsI periodFraction = Double.valueOf("1.0"); } else if (interestChargedFromLocalDate != null && repaymentPeriod.contains(interestChargedFromLocalDate)) { - final int numberOfDaysInterestCalculationGraceInPeriod = Days - .daysBetween(repaymentPeriodStartDate, interestChargedFromLocalDate).getDays(); + final int numberOfDaysInterestCalculationGraceInPeriod = Math + .toIntExact(ChronoUnit.DAYS.between(repaymentPeriodStartDate, interestChargedFromLocalDate)); periodFraction = calculateRepaymentPeriodFraction(repaymentPeriodFrequencyType, repaidEvery, numberOfDaysInterestCalculationGraceInPeriod); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGenerator.java index 0ca5e9b83..d2853d410 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGenerator.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import org.apache.fineract.organisation.holiday.domain.Holiday; import org.apache.fineract.organisation.holiday.service.HolidayUtil; import org.apache.fineract.organisation.workingdays.data.AdjustedDateDetailsDTO; @@ -28,11 +30,6 @@ import org.apache.fineract.portfolio.calendar.domain.CalendarHistory; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; import org.apache.fineract.portfolio.loanaccount.data.HolidayDetailDTO; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.Months; -import org.joda.time.Weeks; -import org.joda.time.Years; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -243,11 +240,11 @@ public class DefaultScheduledDateGenerator implements ScheduledDateGenerator { boolean isScheduledDate = false; switch (frequency) { case DAYS: - int diff = Days.daysBetween(startDate, date).getDays(); + int diff = Math.toIntExact(ChronoUnit.DAYS.between(startDate, date)); isScheduledDate = (diff % repaidEvery) == 0; break; case WEEKS: - int weekDiff = Weeks.weeksBetween(startDate, date).getWeeks(); + int weekDiff = Math.toIntExact(ChronoUnit.WEEKS.between(startDate, date)); isScheduledDate = (weekDiff % repaidEvery) == 0; if (isScheduledDate) { LocalDate modifiedDate = startDate.plusWeeks(weekDiff); @@ -255,7 +252,7 @@ public class DefaultScheduledDateGenerator implements ScheduledDateGenerator { } break; case MONTHS: - int monthDiff = Months.monthsBetween(startDate, date).getMonths(); + int monthDiff = Math.toIntExact(ChronoUnit.MONTHS.between(startDate, date)); isScheduledDate = (monthDiff % repaidEvery) == 0; if (isScheduledDate) { LocalDate modifiedDate = startDate.plusMonths(monthDiff); @@ -263,7 +260,7 @@ public class DefaultScheduledDateGenerator implements ScheduledDateGenerator { } break; case YEARS: - int yearDiff = Years.yearsBetween(startDate, date).getYears(); + int yearDiff = Math.toIntExact(ChronoUnit.YEARS.between(startDate, date)); isScheduledDate = (yearDiff % repaidEvery) == 0; if (isScheduledDate) { LocalDate modifiedDate = startDate.plusYears(yearDiff); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java index 98b8c7e5b..78f2ebcad 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/FlatInterestLoanScheduleGenerator.java @@ -19,12 +19,12 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; import java.math.MathContext; +import java.time.LocalDate; import java.util.Collection; import java.util.Map; import java.util.TreeMap; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData; -import org.joda.time.LocalDate; public class FlatInterestLoanScheduleGenerator extends AbstractLoanScheduleGenerator { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java index 5f5ba829a..3843964f2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java @@ -20,6 +20,9 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.Date; import java.util.HashSet; import java.util.List; @@ -50,13 +53,6 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanPreClosureInterestCa import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail; import org.apache.fineract.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod; import org.apache.fineract.portfolio.loanproduct.domain.RecalculationFrequencyType; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.Months; -import org.joda.time.Period; -import org.joda.time.PeriodType; -import org.joda.time.Weeks; -import org.joda.time.Years; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -791,7 +787,7 @@ public final class LoanApplicationTerms { loanStartDate = getInterestChargedFromLocalDate(); } - final int periodsInLoanTermInteger = Days.daysBetween(loanStartDate, this.loanEndDate).getDays(); + final int periodsInLoanTermInteger = Math.toIntExact(ChronoUnit.DAYS.between(loanStartDate, this.loanEndDate)); periodsInLoanTerm = BigDecimal.valueOf(periodsInLoanTermInteger); break; case INVALID: @@ -814,17 +810,17 @@ public final class LoanApplicationTerms { BigDecimal numberOfPeriods = BigDecimal.ZERO; switch (this.repaymentPeriodFrequencyType) { case DAYS: - int numOfDays = Days.daysBetween(startDate, endDate).getDays(); + int numOfDays = Math.toIntExact(ChronoUnit.DAYS.between(startDate, endDate)); numberOfPeriods = BigDecimal.valueOf((double) numOfDays); break; case WEEKS: - int numberOfWeeks = Weeks.weeksBetween(startDate, endDate).getWeeks(); - int daysLeftAfterWeeks = Days.daysBetween(startDate.plusWeeks(numberOfWeeks), endDate).getDays(); + int numberOfWeeks = Math.toIntExact(ChronoUnit.WEEKS.between(startDate, endDate)); + int daysLeftAfterWeeks = Math.toIntExact(ChronoUnit.DAYS.between(startDate.plusWeeks(numberOfWeeks), endDate)); numberOfPeriods = numberOfPeriods.add(BigDecimal.valueOf(numberOfWeeks)) .add(BigDecimal.valueOf((double) daysLeftAfterWeeks / 7)); break; case MONTHS: - int numberOfMonths = Months.monthsBetween(startDate, endDate).getMonths(); + int numberOfMonths = Math.toIntExact(ChronoUnit.MONTHS.between(startDate, endDate)); LocalDate startDateAfterConsideringMonths = null; LocalDate endDateAfterConsideringMonths = null; int diffDays = 0; @@ -845,7 +841,7 @@ public final class LoanApplicationTerms { this.holidayDetailDTO.getWorkingDays(), isSkipRepaymentOnFirstDayOfMonth, numberOfDays); } if (!expectedStartDate.isEqual(startDate)) { - diffDays = Days.daysBetween(startDate, expectedStartDate).getDays(); + diffDays = Math.toIntExact(ChronoUnit.DAYS.between(startDate, expectedStartDate)); } if (numberOfMonths == 0) { startDateAfterConsideringMonths = expectedStartDate; @@ -860,17 +856,19 @@ public final class LoanApplicationTerms { CalendarUtils.getMeetingFrequencyFromPeriodFrequencyType(getLoanTermPeriodFrequencyType()), this.holidayDetailDTO.getWorkingDays(), isSkipRepaymentOnFirstDayOfMonth, numberOfDays); } - int daysLeftAfterMonths = Days.daysBetween(startDateAfterConsideringMonths, endDate).getDays() + diffDays; - int daysInPeriodAfterMonths = Days.daysBetween(startDateAfterConsideringMonths, endDateAfterConsideringMonths).getDays(); + int daysLeftAfterMonths = Math.toIntExact(ChronoUnit.DAYS.between(startDateAfterConsideringMonths, endDate)) + diffDays; + int daysInPeriodAfterMonths = Math + .toIntExact(ChronoUnit.DAYS.between(startDateAfterConsideringMonths, endDateAfterConsideringMonths)); numberOfPeriods = numberOfPeriods.add(BigDecimal.valueOf(numberOfMonths)) .add(BigDecimal.valueOf((double) daysLeftAfterMonths / daysInPeriodAfterMonths)); break; case YEARS: - int numberOfYears = Years.yearsBetween(startDate, endDate).getYears(); + int numberOfYears = Math.toIntExact(ChronoUnit.YEARS.between(startDate, endDate)); LocalDate startDateAfterConsideringYears = startDate.plusYears(numberOfYears); LocalDate endDateAfterConsideringYears = startDate.plusYears(numberOfYears + 1); - int daysLeftAfterYears = Days.daysBetween(startDateAfterConsideringYears, endDate).getDays(); - int daysInPeriodAfterYears = Days.daysBetween(startDateAfterConsideringYears, endDateAfterConsideringYears).getDays(); + int daysLeftAfterYears = Math.toIntExact(ChronoUnit.DAYS.between(startDateAfterConsideringYears, endDate)); + int daysInPeriodAfterYears = Math + .toIntExact(ChronoUnit.DAYS.between(startDateAfterConsideringYears, endDateAfterConsideringYears)); numberOfPeriods = numberOfPeriods.add(BigDecimal.valueOf(numberOfYears)) .add(BigDecimal.valueOf((double) daysLeftAfterYears / daysInPeriodAfterYears)); break; @@ -1021,7 +1019,8 @@ public final class LoanApplicationTerms { break; case DAILY: // For daily work out number of days in the period - BigDecimal numberOfDaysInPeriod = BigDecimal.valueOf(Days.daysBetween(periodStartDate, periodEndDate).getDays()); + BigDecimal numberOfDaysInPeriod = BigDecimal + .valueOf(Math.toIntExact(ChronoUnit.DAYS.between(periodStartDate, periodEndDate))); final BigDecimal oneDayOfYearInterestRate = this.annualNominalInterestRate.divide(loanTermPeriodsInYearBigDecimal, mc) .divide(divisor, mc); @@ -1083,7 +1082,7 @@ public final class LoanApplicationTerms { final Money outstandingBalance, final LocalDate fromDate, final LocalDate toDate) { long loanTermPeriodsInOneYear = calculator.calculate(PeriodFrequencyType.DAYS).longValue(); - int repaymentEvery = Days.daysBetween(fromDate, toDate).getDays(); + int repaymentEvery = Math.toIntExact(ChronoUnit.DAYS.between(fromDate, toDate)); if (isFallingInRepaymentPeriod(fromDate, toDate)) { loanTermPeriodsInOneYear = calculatePeriodsInOneYear(calculator); repaymentEvery = getPeriodsBetween(fromDate, toDate); @@ -1370,7 +1369,7 @@ public final class LoanApplicationTerms { public Date getRepaymentStartFromDate() { Date dateValue = null; if (this.repaymentsStartingFromDate != null) { - dateValue = this.repaymentsStartingFromDate.toDate(); + dateValue = Date.from(this.repaymentsStartingFromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } return dateValue; } @@ -1378,7 +1377,7 @@ public final class LoanApplicationTerms { public Date getInterestChargedFromDate() { Date dateValue = null; if (this.interestChargedFromDate != null) { - dateValue = this.interestChargedFromDate.toDate(); + dateValue = Date.from(this.interestChargedFromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } return dateValue; } @@ -1488,7 +1487,7 @@ public final class LoanApplicationTerms { if (this.interestCalculationPeriodMethod.getValue().equals(InterestCalculationPeriodMethod.SAME_AS_REPAYMENT_PERIOD.getValue())) { switch (this.repaymentPeriodFrequencyType) { case WEEKS: - int days = Days.daysBetween(fromDate, toDate).getDays(); + int days = Math.toIntExact(ChronoUnit.DAYS.between(fromDate, toDate)); isSameAsRepaymentPeriod = (days % 7) == 0; break; case MONTHS: @@ -1520,22 +1519,18 @@ public final class LoanApplicationTerms { private Integer getPeriodsBetween(LocalDate fromDate, LocalDate toDate) { Integer numberOfPeriods = 0; - PeriodType periodType = PeriodType.yearMonthDay(); - Period difference = new Period(fromDate, toDate, periodType); switch (this.repaymentPeriodFrequencyType) { case DAYS: - numberOfPeriods = difference.getDays(); + numberOfPeriods = Math.toIntExact(ChronoUnit.DAYS.between(fromDate, toDate)); break; case WEEKS: - periodType = PeriodType.weeks(); - difference = new Period(fromDate, toDate, periodType); - numberOfPeriods = difference.getWeeks(); + numberOfPeriods = Math.toIntExact(ChronoUnit.WEEKS.between(fromDate, toDate)); break; case MONTHS: - numberOfPeriods = difference.getMonths(); + numberOfPeriods = Math.toIntExact(ChronoUnit.MONTHS.between(fromDate, toDate)); break; case YEARS: - numberOfPeriods = difference.getYears(); + numberOfPeriods = Math.toIntExact(ChronoUnit.YEARS.between(fromDate, toDate)); break; default: break; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleGenerator.java index c29439cb4..def9a53b4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleGenerator.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; import java.math.MathContext; +import java.time.LocalDate; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.portfolio.loanaccount.data.HolidayDetailDTO; @@ -27,7 +28,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleDTO; -import org.joda.time.LocalDate; public interface LoanScheduleGenerator { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelDisbursementPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelDisbursementPeriod.java index 8023200a6..87e928b2b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelDisbursementPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelDisbursementPeriod.java @@ -19,11 +19,11 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; -import org.joda.time.LocalDate; /** * Domain representation of a Loan Schedule Disbursement Period (not used for persistence) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelPeriod.java index 2b71bd6b3..c7bc680a8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelPeriod.java @@ -19,11 +19,11 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; -import org.joda.time.LocalDate; public interface LoanScheduleModelPeriod { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelRepaymentPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelRepaymentPeriod.java index 41b652f8a..42441457e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelRepaymentPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanScheduleModelRepaymentPeriod.java @@ -19,12 +19,12 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.HashSet; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; -import org.joda.time.LocalDate; /** * Domain representation of a Loan Schedule Repayment Period (not used for persistence) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/PaymentPeriodsInOneYearCalculator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/PaymentPeriodsInOneYearCalculator.java index bb9058658..30b08725f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/PaymentPeriodsInOneYearCalculator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/PaymentPeriodsInOneYearCalculator.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; +import java.time.LocalDate; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; -import org.joda.time.LocalDate; public interface PaymentPeriodsInOneYearCalculator { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/RecalculationDetail.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/RecalculationDetail.java index 40a5336f2..a766d5748 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/RecalculationDetail.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/RecalculationDetail.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; +import java.time.LocalDate; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; -import org.joda.time.LocalDate; public class RecalculationDetail { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/ScheduledDateGenerator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/ScheduledDateGenerator.java index 85591f7d0..969db0ed9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/ScheduledDateGenerator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/ScheduledDateGenerator.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.loanaccount.loanschedule.domain; +import java.time.LocalDate; import org.apache.fineract.organisation.workingdays.data.AdjustedDateDetailsDTO; import org.apache.fineract.portfolio.calendar.domain.Calendar; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; import org.apache.fineract.portfolio.loanaccount.data.HolidayDetailDTO; -import org.joda.time.LocalDate; public interface ScheduledDateGenerator { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java index ebfd5048a..f4756fe4f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java @@ -24,6 +24,10 @@ import com.google.gson.JsonObject; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoField; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -113,8 +117,6 @@ import org.apache.fineract.portfolio.loanproduct.domain.RecalculationFrequencyTy import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException; import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.Days; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -432,8 +434,8 @@ public class LoanScheduleAssembler { officeId = group.getOffice().getId(); } final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); - final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, expectedDisbursementDate.toDate(), - HolidayStatusType.ACTIVE.getValue()); + final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, + Date.from(expectedDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); HolidayDetailDTO detailDTO = new HolidayDetailDTO(isHolidayEnabled, holidays, workingDays); @@ -454,7 +456,7 @@ public class LoanScheduleAssembler { private CalendarInstance createCalendarForSameAsRepayment(final Integer repaymentEvery, final PeriodFrequencyType repaymentPeriodFrequencyType, final LocalDate expectedDisbursementDate) { final Integer recalculationFrequencyNthDay = null; - final Integer repeatsOnDay = expectedDisbursementDate.getDayOfWeek(); + final Integer repeatsOnDay = expectedDisbursementDate.get(ChronoField.DAY_OF_WEEK); CalendarInstance restCalendarInstance = createInterestRecalculationCalendarInstance(expectedDisbursementDate, repaymentEvery, CalendarFrequencyType.from(repaymentPeriodFrequencyType), recalculationFrequencyNthDay, repeatsOnDay); return restCalendarInstance; @@ -599,8 +601,8 @@ public class LoanScheduleAssembler { } final LocalDate expectedDisbursementDate = this.fromApiJsonHelper.extractLocalDateNamed("expectedDisbursementDate", element); - final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, expectedDisbursementDate.toDate(), - HolidayStatusType.ACTIVE.getValue()); + final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, + Date.from(expectedDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); validateDisbursementDateIsOnNonWorkingDay(loanApplicationTerms.getExpectedDisbursementDate(), workingDays); @@ -648,7 +650,8 @@ public class LoanScheduleAssembler { final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, - loanApplicationTerms.getExpectedDisbursementDate().toDate(), HolidayStatusType.ACTIVE.getValue()); + Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final LoanScheduleGenerator loanScheduleGenerator = this.loanScheduleFactory.create(loanApplicationTerms.getInterestMethod()); @@ -666,7 +669,8 @@ public class LoanScheduleAssembler { final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, - loanApplicationTerms.getExpectedDisbursementDate().toDate(), HolidayStatusType.ACTIVE.getValue()); + Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); HolidayDetailDTO holidayDetailDTO = new HolidayDetailDTO(isHolidayEnabled, holidays, workingDays); @@ -832,7 +836,7 @@ public class LoanScheduleAssembler { LocalDate previousDate = loan.getDisbursementDate(); for (LocalDate duedate : dueDates) { - int gap = Days.daysBetween(previousDate, duedate).getDays(); + int gap = Math.toIntExact(ChronoUnit.DAYS.between(previousDate, duedate)); previousDate = duedate; if (gap < minGap || (maxGap != null && gap > maxGap)) { baseDataValidator.reset().value(duedate).failWithCodeNoParameterAddedToErrorCode( @@ -847,7 +851,8 @@ public class LoanScheduleAssembler { throw new PlatformApiDataValidationException(dataValidationErrors); } if (loan.getExpectedFirstRepaymentOnDate() == null) { - loan.setExpectedFirstRepaymentOnDate(loan.fetchRepaymentScheduleInstallment(1).getDueDate().toDate()); + loan.setExpectedFirstRepaymentOnDate( + Date.from(loan.fetchRepaymentScheduleInstallment(1).getDueDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); } final LocalDate recalculateFrom = null; ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); @@ -984,13 +989,13 @@ public class LoanScheduleAssembler { LocalDate duedateLocalDate = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.dueDateParamName, arrayElement, dateFormat, locale); - Date dueDate = duedateLocalDate.toDate(); + Date dueDate = Date.from(duedateLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); LocalDate modifiedDuedateLocalDate = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.modifiedDueDateParamName, arrayElement, dateFormat, locale); Date modifiedDuedate = null; if (modifiedDuedateLocalDate != null) { - modifiedDuedate = modifiedDuedateLocalDate.toDate(); + modifiedDuedate = Date.from(modifiedDuedateLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } boolean isSpecificToInstallment = true; if (isInsertInstallment) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java index bf2d04fda..85ade2880 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.service; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -54,7 +55,6 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository; import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException; import org.apache.fineract.portfolio.loanproduct.serialization.LoanProductDataValidator; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryReadPlatformServiceImpl.java index c17c1e03c..3aaa9a63a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryReadPlatformServiceImpl.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; import org.apache.commons.lang3.ObjectUtils; @@ -35,8 +37,6 @@ import org.apache.fineract.portfolio.loanaccount.data.RepaymentScheduleRelatedLo import org.apache.fineract.portfolio.loanaccount.exception.LoanNotFoundException; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleData; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; -import org.joda.time.Days; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; @@ -169,7 +169,7 @@ public class LoanScheduleHistoryReadPlatformServiceImpl implements LoanScheduleH Integer daysInPeriod = Integer.valueOf(0); if (fromDate != null) { - daysInPeriod = Days.daysBetween(fromDate, dueDate).getDays(); + daysInPeriod = Math.toIntExact(ChronoUnit.DAYS.between(fromDate, dueDate)); loanTermInDays = Integer.valueOf(loanTermInDays.intValue() + daysInPeriod.intValue()); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java index 354c18f3e..e36cddd92 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.loanschedule.service; import java.math.BigDecimal; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -59,11 +60,11 @@ public class LoanScheduleHistoryWritePlatformServiceImpl implements LoanSchedule Date dueDate = null; if (repaymentScheduleInstallment.getFromDate() != null) { - fromDate = repaymentScheduleInstallment.getFromDate().toDate(); + fromDate = Date.from(repaymentScheduleInstallment.getFromDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (repaymentScheduleInstallment.getDueDate() != null) { - dueDate = repaymentScheduleInstallment.getDueDate().toDate(); + dueDate = Date.from(repaymentScheduleInstallment.getDueDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); } final BigDecimal principal = repaymentScheduleInstallment.getPrincipal(currency).getAmount(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleWritePlatformServiceImpl.java index 5b1c3ba75..2ce48db1e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleWritePlatformServiceImpl.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.loanschedule.service; +import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -34,7 +35,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations; import org.apache.fineract.portfolio.loanaccount.service.LoanAssembler; import org.apache.fineract.portfolio.loanaccount.service.LoanUtilService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestData.java index 18f86807a..017abc198 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestData.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.data; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData; -import org.joda.time.LocalDate; /** * Immutable data object representing loan reschedule request data. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java index 48de022f0..bf8d82eb3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestDataValidator.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -41,7 +42,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.rescheduleloan.RescheduleLoansApiConstants; import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestTimelineData.java index 7f392a8c2..8715f0164 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/data/LoanRescheduleRequestTimelineData.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable data object represent the timeline events of a loan reschedule request diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleModalPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleModalPeriod.java index 5f73b7df4..472ecc7da 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleModalPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleModalPeriod.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; -import org.joda.time.LocalDate; public interface LoanRescheduleModalPeriod { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleModelRepaymentPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleModelRepaymentPeriod.java index 45543f531..7f7327288 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleModelRepaymentPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleModelRepaymentPeriod.java @@ -19,9 +19,9 @@ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; -import org.joda.time.LocalDate; public final class LoanRescheduleModelRepaymentPeriod implements LoanRescheduleModalPeriod { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java index 7f91e7a89..3617f2484 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.HashSet; import java.util.List; @@ -39,7 +41,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToT import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; import org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; @Entity @Table(name = "m_loan_reschedule_request") @@ -166,7 +167,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom { LocalDate localDate = null; if (this.rescheduleFromDate != null) { - localDate = new LocalDate(this.rescheduleFromDate); + localDate = LocalDate.ofInstant(this.rescheduleFromDate.toInstant(), ZoneId.systemDefault()); } return localDate; @@ -193,7 +194,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom { LocalDate localDate = null; if (this.submittedOnDate != null) { - localDate = new LocalDate(this.submittedOnDate); + localDate = LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()); } return localDate; @@ -213,7 +214,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom { LocalDate localDate = null; if (this.approvedOnDate != null) { - localDate = new LocalDate(this.approvedOnDate); + localDate = LocalDate.ofInstant(this.approvedOnDate.toInstant(), ZoneId.systemDefault()); } return localDate; @@ -233,7 +234,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom { LocalDate localDate = null; if (this.rejectedOnDate != null) { - localDate = new LocalDate(this.rejectedOnDate); + localDate = LocalDate.ofInstant(this.rejectedOnDate.toInstant(), ZoneId.systemDefault()); } return localDate; @@ -273,7 +274,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom { if (approvedOnDate != null) { this.approvedByUser = approvedByUser; - this.approvedOnDate = approvedOnDate.toDate(); + this.approvedOnDate = Date.from(approvedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.statusEnum = LoanStatus.APPROVED.getValue(); } } @@ -292,7 +293,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom { if (approvedOnDate != null) { this.rejectedByUser = approvedByUser; - this.rejectedOnDate = approvedOnDate.toDate(); + this.rejectedOnDate = Date.from(approvedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.statusEnum = LoanStatus.REJECTED.getValue(); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java index 51a425812..924ab0ae7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanReschedulePreviewPlatformServiceImpl.java @@ -20,7 +20,10 @@ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.service; import java.math.MathContext; import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; @@ -43,7 +46,6 @@ import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanResch import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequestRepositoryWrapper; import org.apache.fineract.portfolio.loanaccount.rescheduleloan.exception.LoanRescheduleRequestNotFoundException; import org.apache.fineract.portfolio.loanaccount.service.LoanUtilService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -107,7 +109,8 @@ public class LoanReschedulePreviewPlatformServiceImpl implements LoanRescheduleP if (loanRescheduleRequestToTermVariationMapping.getLoanTermVariations().getTermType().isDueDateVariation() && rescheduleFromDate != null) { adjustedApplicableDate = loanRescheduleRequestToTermVariationMapping.getLoanTermVariations().fetchDateValue(); - loanRescheduleRequestToTermVariationMapping.getLoanTermVariations().setTermApplicableFrom(rescheduleFromDate.toDate()); + loanRescheduleRequestToTermVariationMapping.getLoanTermVariations() + .setTermApplicableFrom(Date.from(rescheduleFromDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } loanTermVariationsData.add(loanRescheduleRequestToTermVariationMapping.getLoanTermVariations().toData()); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestReadPlatformServiceImpl.java index 8718d91ab..a585aa47f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestReadPlatformServiceImpl.java @@ -22,6 +22,7 @@ import com.amazonaws.util.StringUtils; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -37,7 +38,6 @@ import org.apache.fineract.portfolio.loanaccount.rescheduleloan.data.LoanResched import org.apache.fineract.portfolio.loanaccount.rescheduleloan.data.LoanRescheduleRequestStatusEnumData; import org.apache.fineract.portfolio.loanaccount.rescheduleloan.data.LoanRescheduleRequestTimelineData; import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java index 6399310f4..1b21bf932 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java @@ -21,6 +21,9 @@ package org.apache.fineract.portfolio.loanaccount.rescheduleloan.service; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -79,9 +82,6 @@ import org.apache.fineract.portfolio.loanaccount.rescheduleloan.exception.LoanRe import org.apache.fineract.portfolio.loanaccount.service.LoanAssembler; import org.apache.fineract.portfolio.loanaccount.service.LoanUtilService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -226,7 +226,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche if (localDate != null) { // update the value of the "submittedOnDate" variable - submittedOnDate = localDate.toDate(); + submittedOnDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -251,7 +251,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche rescheduleFromInstallment = installment.getInstallmentNumber(); // update the value of the "rescheduleFromDate" variable - rescheduleFromDate = localDate.toDate(); + rescheduleFromDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -262,7 +262,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche if (localDate != null) { // update the value of the "adjustedDueDate"variable - adjustedDueDate = localDate.toDate(); + adjustedDueDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -308,14 +308,16 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche if (rescheduleFromDate != null && endDate != null && emi != null) { LoanTermVariations parent = null; - LocalDate rescheduleFromLocDate = new LocalDate(rescheduleFromDate); - LocalDate endDateLocDate = new LocalDate(endDate); + LocalDate rescheduleFromLocDate = LocalDate.ofInstant(rescheduleFromDate.toInstant(), ZoneId.systemDefault()); + LocalDate endDateLocDate = LocalDate.ofInstant(endDate.toInstant(), ZoneId.systemDefault()); final Integer termType = LoanTermVariationType.EMI_AMOUNT.getValue(); List installments = loan.getRepaymentScheduleInstallments(); for (LoanRepaymentScheduleInstallment installment : installments) { if (installment.getDueDate().isEqual(rescheduleFromLocDate) || installment.getDueDate().isEqual(endDateLocDate) || (installment.getDueDate().isAfter(rescheduleFromLocDate) && installment.getDueDate().isBefore(endDateLocDate))) { - createLoanTermVariations(termType, loan, installment.getDueDate().toDate(), installment.getDueDate().toDate(), + createLoanTermVariations(termType, loan, + Date.from(installment.getDueDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + Date.from(installment.getDueDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), loanRescheduleRequestToTermVariationMappings, isActive, true, emi, parent); } if (installment.getDueDate().isAfter(endDateLocDate)) { @@ -393,12 +395,12 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche final Map changes = new LinkedHashMap<>(); LocalDate approvedOnDate = jsonCommand.localDateValueOfParameterNamed("approvedOnDate"); - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(jsonCommand.dateFormat()) + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(jsonCommand.dateFormat()) .withLocale(jsonCommand.extractLocale()); changes.put("locale", jsonCommand.locale()); changes.put("dateFormat", jsonCommand.dateFormat()); - changes.put("approvedOnDate", approvedOnDate.toString(dateTimeFormatter)); + changes.put("approvedOnDate", approvedOnDate.format(dateTimeFormatter)); changes.put("approvedByUserId", appUser.getId()); Loan loan = loanRescheduleRequest.getLoan(); @@ -427,7 +429,8 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche && activeLoanTermVariation.fetchDateValue().equals(dueDateVariationInCurrentRequest.fetchTermApplicaDate())) { activeLoanTermVariation.markAsInactive(); rescheduleFromDate = activeLoanTermVariation.fetchTermApplicaDate(); - dueDateVariationInCurrentRequest.setTermApplicableFrom(rescheduleFromDate.toDate()); + dueDateVariationInCurrentRequest + .setTermApplicableFrom(Date.from(rescheduleFromDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } else if (!activeLoanTermVariation.fetchTermApplicaDate().isBefore(fromScheduleDate)) { while (currentScheduleDate.isBefore(activeLoanTermVariation.fetchTermApplicaDate())) { currentScheduleDate = this.scheduledDateGenerator.generateNextRepaymentDate(currentScheduleDate, @@ -437,8 +440,8 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche changeMap.put(currentScheduleDate, modifiedScheduleDate); } if (changeMap.containsKey(activeLoanTermVariation.fetchTermApplicaDate())) { - activeLoanTermVariation - .setTermApplicableFrom(changeMap.get(activeLoanTermVariation.fetchTermApplicaDate()).toDate()); + activeLoanTermVariation.setTermApplicableFrom(Date.from(changeMap + .get(activeLoanTermVariation.fetchTermApplicaDate()).atStartOfDay(ZoneId.systemDefault()).toInstant())); } } } @@ -486,7 +489,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche } loan.updateRescheduledByUser(appUser); - loan.updateRescheduledOnDate(new LocalDate()); + loan.updateRescheduledOnDate(LocalDate.now(ZoneId.systemDefault())); // update the status of the request loanRescheduleRequest.approve(appUser, approvedOnDate); @@ -571,12 +574,12 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche final Map changes = new LinkedHashMap<>(); LocalDate rejectedOnDate = jsonCommand.localDateValueOfParameterNamed("rejectedOnDate"); - final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(jsonCommand.dateFormat()) + final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(jsonCommand.dateFormat()) .withLocale(jsonCommand.extractLocale()); changes.put("locale", jsonCommand.locale()); changes.put("dateFormat", jsonCommand.dateFormat()); - changes.put("rejectedOnDate", rejectedOnDate.toString(dateTimeFormatter)); + changes.put("rejectedOnDate", rejectedOnDate.format(dateTimeFormatter)); changes.put("rejectedByUserId", appUser.getId()); if (!changes.isEmpty()) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/CalculateLoanScheduleQueryFromApiJsonHelper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/CalculateLoanScheduleQueryFromApiJsonHelper.java index fc58f6a8a..1498a80a1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/CalculateLoanScheduleQueryFromApiJsonHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/CalculateLoanScheduleQueryFromApiJsonHelper.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.loanaccount.serialization; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -34,7 +35,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java index e30df95b4..eabb2eff0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -49,7 +50,6 @@ import org.apache.fineract.portfolio.loanproduct.domain.InterestMethod; import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.portfolio.loanproduct.exception.EqualAmortizationUnsupportedFeatureException; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationTransitionApiJsonValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationTransitionApiJsonValidator.java index be778be38..cf3ad6cf3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationTransitionApiJsonValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationTransitionApiJsonValidator.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanEventApiJsonValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanEventApiJsonValidator.java index b0470eeb7..64b20d702 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanEventApiJsonValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanEventApiJsonValidator.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -41,7 +42,6 @@ import org.apache.fineract.portfolio.calendar.exception.NotValidRecurringDateExc import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants; import org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanUpdateCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanUpdateCommandFromApiJsonDeserializer.java index fb4c616da..debecd9e3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanUpdateCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanUpdateCommandFromApiJsonDeserializer.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.loanaccount.serialization; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.Arrays; import java.util.HashSet; import java.util.Map; @@ -30,7 +31,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.serialization.AbstractFromApiJsonDeserializer; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.loanaccount.command.LoanUpdateCommand; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/VariableLoanScheduleFromApiJsonValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/VariableLoanScheduleFromApiJsonValidator.java index 2fa5f5b91..6cd841246 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/VariableLoanScheduleFromApiJsonValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/VariableLoanScheduleFromApiJsonValidator.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -40,7 +41,6 @@ import org.apache.fineract.infrastructure.core.exception.UnsupportedParameterExc import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants; import org.apache.fineract.portfolio.loanaccount.domain.Loan; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformService.java index 143d2453e..d38d31a90 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformService.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.loanaccount.service; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.exception.MultiException; import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException; import org.apache.fineract.portfolio.loanaccount.data.LoanScheduleAccrualData; -import org.joda.time.LocalDate; public interface LoanAccrualPlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformServiceImpl.java index e78c77cc5..74c3fd0a3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualPlatformServiceImpl.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.loanaccount.service; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -28,7 +30,6 @@ import org.apache.fineract.infrastructure.jobs.annotation.CronTarget; import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException; import org.apache.fineract.infrastructure.jobs.service.JobName; import org.apache.fineract.portfolio.loanaccount.data.LoanScheduleAccrualData; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -82,7 +83,7 @@ public class LoanAccrualPlatformServiceImpl implements LoanAccrualPlatformServic @CronTarget(jobName = JobName.ADD_PERIODIC_ACCRUAL_ENTRIES) public void addPeriodicAccruals() throws JobExecutionException { try { - addPeriodicAccruals(LocalDate.now()); + addPeriodicAccruals(LocalDate.now(ZoneId.systemDefault())); } catch (MultiException e) { throw new JobExecutionException(e); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformService.java index 57aa0e325..817d1a7ab 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformService.java @@ -18,9 +18,9 @@ */ package org.apache.fineract.portfolio.loanaccount.service; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.portfolio.loanaccount.data.LoanScheduleAccrualData; -import org.joda.time.LocalDate; public interface LoanAccrualWritePlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java index 9103c023e..2db468a26 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java @@ -19,8 +19,12 @@ package org.apache.fineract.portfolio.loanaccount.service; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -46,8 +50,6 @@ import org.apache.fineract.portfolio.loanaccount.exception.LoanNotFoundException import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; import org.apache.fineract.useradministration.domain.AppUserRepositoryWrapper; -import org.joda.time.Days; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -145,7 +147,7 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat } } - int totalNumberOfDays = Days.daysBetween(interestStartDate, accrualData.getDueDateAsLocaldate()).getDays(); + int totalNumberOfDays = Math.toIntExact(ChronoUnit.DAYS.between(interestStartDate, accrualData.getDueDateAsLocaldate())); LocalDate startDate = accrualData.getFromDateAsLocaldate(); if (accrualData.getInterestCalculatedFrom() != null && startDate.isBefore(accrualData.getInterestCalculatedFrom())) { if (accrualData.getInterestCalculatedFrom().isBefore(tilldate)) { @@ -154,7 +156,7 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat startDate = tilldate; } } - int daysToBeAccrued = Days.daysBetween(startDate, tilldate).getDays(); + int daysToBeAccrued = Math.toIntExact(ChronoUnit.DAYS.between(startDate, tilldate)); double interestPerDay = accrualData.getAccruableIncome().doubleValue() / totalNumberOfDays; BigDecimal amount = BigDecimal.ZERO; BigDecimal interestportion = null; @@ -269,8 +271,8 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat String transactionSql = "INSERT INTO m_loan_transaction (loan_id,office_id,is_reversed,transaction_type_enum,transaction_date,amount,interest_portion_derived," + "fee_charges_portion_derived,penalty_charges_portion_derived, submitted_on_date) VALUES (?, ?, 0, ?, ?, ?, ?, ?, ?, ?)"; this.jdbcTemplate.update(transactionSql, scheduleAccrualData.getLoanId(), scheduleAccrualData.getOfficeId(), - LoanTransactionType.ACCRUAL.getValue(), accruedTill.toDate(), amount, interestportion, feeportion, penaltyportion, - DateUtils.getDateOfTenant()); + LoanTransactionType.ACCRUAL.getValue(), Date.from(accruedTill.atStartOfDay(ZoneId.systemDefault()).toInstant()), amount, + interestportion, feeportion, penaltyportion, DateUtils.getDateOfTenant()); @SuppressWarnings("deprecation") final Long transactonId = this.jdbcTemplate.queryForObject("SELECT LAST_INSERT_ID()", Long.class); @@ -291,7 +293,8 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat scheduleAccrualData.getRepaymentScheduleId()); String updateLoan = "UPDATE m_loan SET accrued_till=? WHERE id=?"; - this.jdbcTemplate.update(updateLoan, accruedTill.toDate(), scheduleAccrualData.getLoanId()); + this.jdbcTemplate.update(updateLoan, Date.from(accruedTill.atStartOfDay(ZoneId.systemDefault()).toInstant()), + scheduleAccrualData.getLoanId()); final Map accountingBridgeData = deriveAccountingBridgeData(scheduleAccrualData, transactionMap); this.journalEntryWritePlatformService.createJournalEntriesForLoan(accountingBridgeData); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java index c903459cc..8ea0600d1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java @@ -22,6 +22,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -137,7 +139,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler; import org.apache.fineract.portfolio.savings.service.GSIMReadPlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -723,7 +724,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa calendarFrequencyType = CalendarFrequencyType.from(loan.repaymentScheduleDetail().getRepaymentPeriodFrequencyType()); calendarStartDate = loan.getExpectedDisbursedOnLocalDate(); if (updatedRepeatsOnDay == null) { - updatedRepeatsOnDay = calendarStartDate.getDayOfWeek(); + updatedRepeatsOnDay = calendarStartDate.get(ChronoField.DAY_OF_WEEK); } break; case WEEKLY: diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java index e02786898..892bea25e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java @@ -21,6 +21,9 @@ package org.apache.fineract.portfolio.loanaccount.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -41,9 +44,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleIns import org.apache.fineract.portfolio.loanaccount.domain.LoanSummary; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -58,7 +58,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus private static final Logger LOG = LoggerFactory.getLogger(LoanArrearsAgingServiceImpl.class); private final BusinessEventNotifierService businessEventNotifierService; - private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private final JdbcTemplate jdbcTemplate; @Autowired @@ -170,9 +170,9 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus BigDecimal interestOverdue = BigDecimal.ZERO; BigDecimal feeOverdue = BigDecimal.ZERO; BigDecimal penaltyOverdue = BigDecimal.ZERO; - LocalDate overDueSince = LocalDate.now(); + LocalDate overDueSince = LocalDate.now(ZoneId.systemDefault()); for (LoanRepaymentScheduleInstallment installment : installments) { - if (installment.getDueDate().isBefore(LocalDate.now())) { + if (installment.getDueDate().isBefore(LocalDate.now(ZoneId.systemDefault()))) { principalOverdue = principalOverdue.add(installment.getPrincipalOutstanding(loan.getCurrency()).getAmount()); interestOverdue = interestOverdue.add(installment.getInterestOutstanding(loan.getCurrency()).getAmount()); feeOverdue = feeOverdue.add(installment.getFeeChargesOutstanding(loan.getCurrency()).getAmount()); @@ -265,7 +265,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus BigDecimal interestOverdue = BigDecimal.ZERO; BigDecimal feeOverdue = BigDecimal.ZERO; BigDecimal penaltyOverdue = BigDecimal.ZERO; - LocalDate overDueSince = LocalDate.now(); + LocalDate overDueSince = LocalDate.now(ZoneId.systemDefault()); for (LoanSchedulePeriodData loanSchedulePeriodData : entry.getValue()) { if (!loanSchedulePeriodData.getComplete()) { @@ -309,7 +309,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus insertStatementBuilder.append(penaltyOverdue).append(","); BigDecimal totalOverDue = principalOverdue.add(interestOverdue).add(feeOverdue).add(penaltyOverdue); insertStatementBuilder.append(totalOverDue).append(",'"); - insertStatementBuilder.append(this.formatter.print(overDueSince)).append("')"); + insertStatementBuilder.append(this.formatter.format(overDueSince)).append("')"); return insertStatementBuilder.toString(); } @@ -323,7 +323,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus insertStatementBuilder.append(penaltyOverdue).append(", mla.total_overdue_derived="); BigDecimal totalOverDue = principalOverdue.add(interestOverdue).add(feeOverdue).add(penaltyOverdue); insertStatementBuilder.append(totalOverDue).append(",mla.overdue_since_date_derived= '"); - insertStatementBuilder.append(this.formatter.print(overDueSince)).append("' "); + insertStatementBuilder.append(this.formatter.format(overDueSince)).append("' "); insertStatementBuilder.append("WHERE mla.loan_id=").append(loanId); return insertStatementBuilder.toString(); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java index 8cdb60be3..3451052be 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java @@ -20,8 +20,11 @@ package org.apache.fineract.portfolio.loanaccount.service; import com.google.gson.JsonElement; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Set; @@ -81,7 +84,6 @@ import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundEx import org.apache.fineract.portfolio.rate.domain.Rate; import org.apache.fineract.portfolio.rate.service.RateAssembler; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -300,7 +302,8 @@ public class LoanAssembler { final LoanApplicationTerms loanApplicationTerms = this.loanScheduleAssembler.assembleLoanTerms(element); final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loanApplication.getOfficeId(), - loanApplicationTerms.getExpectedDisbursementDate().toDate(), HolidayStatusType.ACTIVE.getValue()); + Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); @@ -357,7 +360,8 @@ public class LoanAssembler { final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loanApplication.getOfficeId(), - loanApplication.getExpectedDisbursedOnLocalDate().toDate(), HolidayStatusType.ACTIVE.getValue()); + Date.from(loanApplication.getExpectedDisbursedOnLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java index a9d33ae73..b6567d626 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java @@ -23,6 +23,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -43,7 +44,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementC import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository; import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java index ce06559fb..d16c3448e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.loanaccount.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -41,7 +42,6 @@ import org.apache.fineract.portfolio.loanaccount.data.LoanChargePaidByData; import org.apache.fineract.portfolio.loanaccount.data.LoanInstallmentChargeData; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType; import org.apache.fineract.portfolio.tax.data.TaxGroupData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java index 7403077c0..8ad6f37f9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.service; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import java.util.Date; import java.util.List; @@ -38,7 +39,6 @@ import org.apache.fineract.portfolio.loanaccount.data.RepaymentScheduleRelatedLo import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleData; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.OverdueLoanScheduleData; -import org.joda.time.LocalDate; public interface LoanReadPlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 3db7d5dd8..81c2669f2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -23,6 +23,10 @@ import static org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -115,10 +119,6 @@ import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.paymenttype.service.PaymentTypeReadPlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; @@ -148,7 +148,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { private final PaginationHelper paginationHelper = new PaginationHelper<>(); private final LoanMapper loaanLoanMapper = new LoanMapper(); private final NamedParameterJdbcTemplate namedParameterJdbcTemplate; - private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private final PaymentTypeReadPlatformService paymentTypeReadPlatformService; private final LoanRepaymentScheduleTransactionProcessorFactory loanRepaymentScheduleTransactionProcessorFactory; private final FloatingRatesReadPlatformService floatingRatesReadPlatformService; @@ -451,7 +451,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final CurrencyData currencyData = applicationCurrency.toData(); - final LocalDate earliestUnpaidInstallmentDate = LocalDate.now(); + final LocalDate earliestUnpaidInstallmentDate = LocalDate.now(ZoneId.systemDefault()); final LocalDate recalculateFrom = null; final ScheduleGeneratorDTO scheduleGeneratorDTO = loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); final LoanRepaymentScheduleInstallment loanRepaymentScheduleInstallment = loan.fetchPrepaymentDetail(scheduleGeneratorDTO, onDate); @@ -1132,7 +1132,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { } } else if (data.isDueForDisbursement(fromDate, dueDate)) { if (!excludePastUndisbursed || (excludePastUndisbursed - && (data.isDisbursed() || !data.disbursementDate().isBefore(LocalDate.now())))) { + && (data.isDisbursed() || !data.disbursementDate().isBefore(LocalDate.now(ZoneId.systemDefault()))))) { principal = principal.add(data.amount()); LoanSchedulePeriodData periodData = null; if (data.getChargeAmount() == null) { @@ -1154,7 +1154,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { Integer daysInPeriod = Integer.valueOf(0); if (fromDate != null) { - daysInPeriod = Days.daysBetween(fromDate, dueDate).getDays(); + daysInPeriod = Math.toIntExact(ChronoUnit.DAYS.between(fromDate, dueDate)); loanTermInDays = Integer.valueOf(loanTermInDays.intValue() + daysInPeriod.intValue()); } @@ -1614,7 +1614,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { Map paramMap = new HashMap<>(3); paramMap.put("active", LoanStatus.ACTIVE.getValue()); paramMap.put("type", AccountingRuleType.ACCRUAL_PERIODIC.getValue()); - paramMap.put("organisationstartdate", formatter.print(new LocalDate(organisationStartDate))); + paramMap.put("organisationstartdate", (organisationStartDate == null) ? formatter.format(LocalDate.now(ZoneId.systemDefault())) + : formatter.format(LocalDate.ofInstant(organisationStartDate.toInstant(), ZoneId.systemDefault()))); return this.namedParameterJdbcTemplate.query(sqlBuilder.toString(), paramMap, mapper); } @@ -1639,8 +1640,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { Map paramMap = new HashMap<>(4); paramMap.put("active", LoanStatus.ACTIVE.getValue()); paramMap.put("type", AccountingRuleType.ACCRUAL_PERIODIC.getValue()); - paramMap.put("tilldate", formatter.print(tillDate)); - paramMap.put("organisationstartdate", formatter.print(new LocalDate(organisationStartDate))); + paramMap.put("tilldate", formatter.format(tillDate)); + paramMap.put("organisationstartdate", (organisationStartDate == null) ? formatter.format(LocalDate.now(ZoneId.systemDefault())) + : formatter.format(LocalDate.ofInstant(organisationStartDate.toInstant(), ZoneId.systemDefault()))); return this.namedParameterJdbcTemplate.query(sqlBuilder.toString(), paramMap, mapper); } @@ -1823,9 +1825,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { sqlBuilder.append(" ))"); sqlBuilder.append(" group by ml.id"); try { - String currentdate = formatter.print(DateUtils.getLocalDateOfTenant()); + String currentdate = formatter.format(DateUtils.getLocalDateOfTenant()); // will look only for yesterday modified rates - String yesterday = formatter.print(DateUtils.getLocalDateOfTenant().minusDays(1)); + String yesterday = formatter.format(DateUtils.getLocalDateOfTenant().minusDays(1)); return this.jdbcTemplate.queryForList(sqlBuilder.toString(), Long.class, new Object[] { yesterday, LoanStatus.ACTIVE.getValue(), currentdate, currentdate, currentdate, yesterday }); } catch (final EmptyResultDataAccessException e) { @@ -1869,9 +1871,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { sqlBuilder.append(" group by ml.id "); sqlBuilder.append(" limit ? "); try { - String currentdate = formatter.print(DateUtils.getLocalDateOfTenant()); + String currentdate = formatter.format(DateUtils.getLocalDateOfTenant()); // will look only for yesterday modified rates - String yesterday = formatter.print(DateUtils.getLocalDateOfTenant().minusDays(1)); + String yesterday = formatter.format(DateUtils.getLocalDateOfTenant().minusDays(1)); return Collections.synchronizedList(this.jdbcTemplate.queryForList(sqlBuilder.toString(), Long.class, new Object[] { yesterday, LoanStatus.ACTIVE.getValue(), currentdate, currentdate, currentdate, yesterday, maxLoanIdInList, officeHierarchy, pageSize })); @@ -2057,7 +2059,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final CurrencyData currencyData = applicationCurrency.toData(); - final LocalDate earliestUnpaidInstallmentDate = new LocalDate(); + final LocalDate earliestUnpaidInstallmentDate = LocalDate.now(ZoneId.systemDefault()); final LoanTransactionEnumData transactionType = LoanEnumerations.transactionType(LoanTransactionType.REFUND_FOR_ACTIVE_LOAN); final Collection paymentOptions = this.paymentTypeReadPlatformService.retrieveAllPaymentTypes(); @@ -2075,10 +2077,13 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final Collection intRates = this.floatingRatesReadPlatformService .retrieveInterestRatePeriods(loanData.loanProductId()); for (final InterestRatePeriodData rate : intRates) { - if (rate.getFromDate().compareTo(loanData.getDisbursementDate().toDate()) > 0 && loanData.isFloatingInterestRate()) { + if (rate.getFromDate() + .compareTo(Date.from(loanData.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant())) > 0 + && loanData.isFloatingInterestRate()) { updateInterestRatePeriodData(rate, loanData); intRatePeriodData.add(rate); - } else if (rate.getFromDate().compareTo(loanData.getDisbursementDate().toDate()) <= 0) { + } else if (rate.getFromDate() + .compareTo(Date.from(loanData.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant())) <= 0) { updateInterestRatePeriodData(rate, loanData); intRatePeriodData.add(rate); break; @@ -2104,8 +2109,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { } rate.setEffectiveInterestRate(effectiveInterestRate); - if (rate.getFromDate().compareTo(loan.getDisbursementDate().toDate()) < 0) { - rate.setFromDate(loan.getDisbursementDate().toDate()); + if (rate.getFromDate().compareTo(Date.from(loan.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant())) < 0) { + rate.setFromDate(Date.from(loan.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); } } @@ -2120,7 +2125,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { .append(" and adddet.effective_date is not null ").append(" and trans.transaction_date is null ") .append(" and adddet.effective_date < ? "); try { - String currentdate = formatter.print(DateUtils.getLocalDateOfTenant()); + String currentdate = formatter.format(DateUtils.getLocalDateOfTenant()); return this.jdbcTemplate.queryForList(sqlBuilder.toString(), Long.class, new Object[] { currentdate }); } catch (final EmptyResultDataAccessException e) { return null; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java index 1c4302191..82a640014 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanUtilService.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.loanaccount.service; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -57,7 +59,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleGeneratorFactory; import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -189,7 +190,8 @@ public class LoanUtilService { private HolidayDetailDTO constructHolidayDTO(final Loan loan) { final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), - loan.getDisbursementDate().toDate(), HolidayStatusType.ACTIVE.getValue()); + Date.from(loan.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); @@ -321,7 +323,7 @@ public class LoanUtilService { LocalDate date = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName, jsonObject, dateFormat, locale); if (date != null) { - expectedDisbursementDate = date.toDate(); + expectedDisbursementDate = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } if (jsonObject.has(LoanApiConstants.disbursementPrincipalParameterName) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformService.java index f5c262180..4370ea27b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformService.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.loanaccount.service; +import java.time.LocalDate; import java.util.Collection; import java.util.Map; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -32,7 +33,6 @@ import org.apache.fineract.portfolio.collectionsheet.command.CollectionSheetBulk import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.OverdueLoanScheduleData; -import org.joda.time.LocalDate; public interface LoanWritePlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index ada821e75..7a26f9be8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -22,6 +22,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -183,9 +186,6 @@ import org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePla import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.transfer.api.TransferApiConstants; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -366,7 +366,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf LocalDate recalculateFrom = null; if (!loan.isMultiDisburmentLoan()) { - loan.setActualDisbursementDate(actualDisbursementDate.toDate()); + loan.setActualDisbursementDate(Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); @@ -491,7 +491,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); for (final Map.Entry entrySet : disBuLoanCharges.entrySet()) { final PortfolioAccountData savingAccountData = this.accountAssociationsReadPlatformService.retriveLoanLinkedAssociation(loanId); final SavingsAccount fromSavingsAccount = null; @@ -555,7 +555,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final Integer instructionType = StandingInstructionType.DUES.getValue(); final Integer status = StandingInstructionStatus.ACTIVE.getValue(); final Integer recurrenceType = AccountTransferRecurrenceType.AS_PER_DUES.getValue(); - final LocalDate validFrom = new LocalDate(); + final LocalDate validFrom = LocalDate.now(ZoneId.systemDefault()); AccountTransferDetails accountTransferDetails = AccountTransferDetails.savingsToLoanTransfer(fromOffice, fromClient, linkedSavingsAccount, toOffice, toClient, loan, transferType); @@ -738,7 +738,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); for (final Map.Entry entrySet : disBuLoanCharges.entrySet()) { final PortfolioAccountData savingAccountData = this.accountAssociationsReadPlatformService .retriveLoanLinkedAssociation(loan.getId()); @@ -922,7 +922,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf if (singleLoanRepaymentCommand != null) { Loan loan = this.loanRepositoryWrapper.findOneWithNotFoundDetection(singleLoanRepaymentCommand.getLoanId()); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), - singleLoanRepaymentCommand.getTransactionDate().toDate()); + Date.from(singleLoanRepaymentCommand.getTransactionDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); boolean isHolidayEnabled = false; @@ -1742,7 +1742,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final LocalDate transactionDate = command.localDateValueOfParameterNamed("transactionDate"); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); Integer loanInstallmentNumber = null; BigDecimal amount = loanCharge.amountOutstanding(); if (loanCharge.isInstalmentFee()) { @@ -1796,7 +1796,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final String txnExternalId = command.stringValueOfParameterNamedAllowingNull("externalId"); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final AccountTransferDTO accountTransferDTO = new AccountTransferDTO(transactionDate, amount, PortfolioAccountType.LOAN, PortfolioAccountType.LOAN, loan.getId(), loan.getTopupLoanDetails().getLoanIdToClose(), "Loan Topup", locale, fmt, LoanTransactionType.DISBURSEMENT.getValue(), LoanTransactionType.REPAYMENT.getValue(), txnExternalId, loan, null); @@ -1811,7 +1811,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final String txnExternalId = command.stringValueOfParameterNamedAllowingNull("externalId"); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final PortfolioAccountData portfolioAccountData = this.accountAssociationsReadPlatformService .retriveLoanLinkedAssociation(loan.getId()); if (portfolioAccountData == null) { @@ -1851,7 +1851,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } final SavingsAccount fromSavingsAccount = null; final boolean isExceptionForBalanceCheck = false; - final AccountTransferDTO accountTransferDTO = new AccountTransferDTO(new LocalDate(), + final AccountTransferDTO accountTransferDTO = new AccountTransferDTO(LocalDate.now(ZoneId.systemDefault()), installmentChargeData.getAmountOutstanding(), PortfolioAccountType.SAVINGS, PortfolioAccountType.LOAN, portfolioAccountData.accountId(), chargeData.getLoanId(), "Loan Charge Payment", null, null, null, null, LoanTransactionType.CHARGE_PAYMENT.getValue(), chargeData.getId(), @@ -1865,9 +1865,9 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf .retriveLoanLinkedAssociation(chargeData.getLoanId()); final SavingsAccount fromSavingsAccount = null; final boolean isExceptionForBalanceCheck = false; - final AccountTransferDTO accountTransferDTO = new AccountTransferDTO(new LocalDate(), chargeData.getAmountOutstanding(), - PortfolioAccountType.SAVINGS, PortfolioAccountType.LOAN, portfolioAccountData.accountId(), - chargeData.getLoanId(), "Loan Charge Payment", null, null, null, null, + final AccountTransferDTO accountTransferDTO = new AccountTransferDTO(LocalDate.now(ZoneId.systemDefault()), + chargeData.getAmountOutstanding(), PortfolioAccountType.SAVINGS, PortfolioAccountType.LOAN, + portfolioAccountData.accountId(), chargeData.getLoanId(), "Loan Charge Payment", null, null, null, null, LoanTransactionType.CHARGE_PAYMENT.getValue(), chargeData.getId(), null, AccountTransferType.CHARGE_PAYMENT.getValue(), null, null, null, null, null, fromSavingsAccount, isRegularTransaction, isExceptionForBalanceCheck); @@ -2174,7 +2174,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } } - holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), loan.getDisbursementDate().toDate()); + holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), + Date.from(loan.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); if (loan.repaymentScheduleDetail().isInterestRecalculationEnabled()) { ScheduleGeneratorDTO scheduleGeneratorDTO = loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); loan.setHelpers(null, this.loanSummaryWrapper, this.transactionProcessingStrategy); @@ -2227,14 +2228,15 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf private void updateLoanCounters(final Loan loan, final LocalDate actualDisbursementDate) { if (loan.isGroupLoan()) { - final List loansToUpdateForLoanCounter = this.loanRepositoryWrapper - .getGroupLoansDisbursedAfter(actualDisbursementDate.toDate(), loan.getGroupId(), AccountType.GROUP.getValue()); + final List loansToUpdateForLoanCounter = this.loanRepositoryWrapper.getGroupLoansDisbursedAfter( + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), loan.getGroupId(), + AccountType.GROUP.getValue()); final Integer newLoanCounter = getNewGroupLoanCounter(loan); final Integer newLoanProductCounter = getNewGroupLoanProductCounter(loan); updateLoanCounter(loan, loansToUpdateForLoanCounter, newLoanCounter, newLoanProductCounter); } else { - final List loansToUpdateForLoanCounter = this.loanRepositoryWrapper - .getClientOrJLGLoansDisbursedAfter(actualDisbursementDate.toDate(), loan.getClientId()); + final List loansToUpdateForLoanCounter = this.loanRepositoryWrapper.getClientOrJLGLoansDisbursedAfter( + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), loan.getClientId()); final Integer newLoanCounter = getNewClientOrJLGLoanCounter(loan); final Integer newLoanProductCounter = getNewClientOrJLGLoanProductCounter(loan); updateLoanCounter(loan, loansToUpdateForLoanCounter, newLoanCounter, newLoanProductCounter); @@ -2792,7 +2794,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf final LocalDate transactionDate = command.localDateValueOfParameterNamed("transactionDate"); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); Integer loanInstallmentNumber = null; BigDecimal amount = loanCharge.amountOutstanding(); if (loanCharge.isInstalmentFee()) { @@ -3090,7 +3092,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf for (LoanTransaction transaction : loan.getLoanTransactions()) { if ((transaction.getTransactionDate().isEqual(transferDate) - && transaction.getCreatedDateTime().isEqual(transferDate.toDateTimeAtStartOfDay().toLocalDateTime())) + && transaction.getCreatedDateTime().isEqual(transferDate.atStartOfDay(ZoneId.systemDefault()).toLocalDateTime())) || transaction.getTransactionDate().isAfter(transferDate)) { throw new GeneralPlatformDomainRuleException(TransferApiConstants.transferClientLoanException, TransferApiConstants.transferClientLoanExceptionMessage, transaction.getCreatedDateTime().toLocalDate(), diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanOverdueDTO.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanOverdueDTO.java index 9fc96e0e8..177c3285b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanOverdueDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanOverdueDTO.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.portfolio.loanproduct.data; +import java.time.LocalDate; import org.apache.fineract.portfolio.loanaccount.domain.Loan; -import org.joda.time.LocalDate; public class LoanOverdueDTO { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java index 2291709e9..82b5b5006 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.loanproduct.data; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -48,7 +49,6 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableA import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.rate.data.RateData; -import org.joda.time.LocalDate; import org.springframework.util.CollectionUtils; /** diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java index 3fb922359..cfd921746 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.loanproduct.domain; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -62,7 +64,6 @@ import org.apache.fineract.portfolio.fund.domain.Fund; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.AprCalculator; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; import org.apache.fineract.portfolio.rate.domain.Rate; -import org.joda.time.LocalDate; /** * Loan products allow for categorisation of an organisations loans into something meaningful to them. @@ -641,11 +642,11 @@ public class LoanProduct extends AbstractPersistableCustom { this.useBorrowerCycle = useBorrowerCycle; if (startDate != null) { - this.startDate = startDate.toDateTimeAtStartOfDay().toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (closeDate != null) { - this.closeDate = closeDate.toDateTimeAtStartOfDay().toDate(); + this.closeDate = Date.from(closeDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.externalId = externalId; @@ -877,7 +878,7 @@ public class LoanProduct extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(startDateParamName); if (newValue != null) { - this.startDate = newValue.toDate(); + this.startDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.startDate = null; } @@ -892,7 +893,7 @@ public class LoanProduct extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(closeDateParamName); if (newValue != null) { - this.closeDate = newValue.toDate(); + this.closeDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.closeDate = null; } @@ -1183,7 +1184,7 @@ public class LoanProduct extends AbstractPersistableCustom { public LocalDate getStartDate() { LocalDate startLocalDate = null; if (this.startDate != null) { - startLocalDate = LocalDate.fromDateFields(this.startDate); + startLocalDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } return startLocalDate; } @@ -1191,7 +1192,7 @@ public class LoanProduct extends AbstractPersistableCustom { public LocalDate getCloseDate() { LocalDate closeLocalDate = null; if (this.closeDate != null) { - closeLocalDate = LocalDate.fromDateFields(this.closeDate); + closeLocalDate = LocalDate.ofInstant(this.closeDate.toInstant(), ZoneId.systemDefault()); } return closeLocalDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java index 93ab1af8f..0f20d4869 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.loanproduct.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import org.apache.fineract.accounting.common.AccountingEnumerations; @@ -44,7 +45,6 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProductParamType; import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException; import org.apache.fineract.portfolio.rate.data.RateData; import org.apache.fineract.portfolio.rate.service.RateReadService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java index f90969840..5a414fc61 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductWritePlatformServiceJpaRepositoryImpl.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.loanproduct.service; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -60,7 +61,6 @@ import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundEx import org.apache.fineract.portfolio.loanproduct.serialization.LoanProductDataValidator; import org.apache.fineract.portfolio.rate.domain.Rate; import org.apache.fineract.portfolio.rate.domain.RateRepositoryWrapper; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/api/MeetingsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/api/MeetingsApiResource.java index f108b80fc..2cf90d39a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/api/MeetingsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/api/MeetingsApiResource.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.meeting.api; import static org.apache.fineract.portfolio.meeting.MeetingApiConstants.MEETING_RESOURCE_NAME; +import java.time.LocalDate; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; @@ -60,7 +61,6 @@ import org.apache.fineract.portfolio.meeting.attendance.service.ClientAttendance import org.apache.fineract.portfolio.meeting.data.MeetingData; import org.apache.fineract.portfolio.meeting.exception.MeetingNotSupportedResourceException; import org.apache.fineract.portfolio.meeting.service.MeetingReadPlatformService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/data/MeetingData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/data/MeetingData.java index 7606f4d36..cf2925e6c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/data/MeetingData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/data/MeetingData.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.portfolio.meeting.data; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.calendar.data.CalendarData; import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.meeting.attendance.data.ClientAttendanceData; -import org.joda.time.LocalDate; /** * Immutable data object representing a Meeting. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/data/MeetingDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/data/MeetingDataValidator.java index 91a39b9e2..7ab3793fa 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/data/MeetingDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/data/MeetingDataValidator.java @@ -30,6 +30,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -44,7 +45,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.meeting.MeetingApiConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java index 60c97b590..2febb16e1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java @@ -23,6 +23,8 @@ import static org.apache.fineract.portfolio.meeting.MeetingApiConstants.clientId import static org.apache.fineract.portfolio.meeting.MeetingApiConstants.clientsAttendanceParamName; import static org.apache.fineract.portfolio.meeting.MeetingApiConstants.meetingDateParamName; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Collection; import java.util.Date; import java.util.HashSet; @@ -49,7 +51,6 @@ import org.apache.fineract.portfolio.calendar.domain.CalendarInstance; import org.apache.fineract.portfolio.calendar.exception.NotValidRecurringDateException; import org.apache.fineract.portfolio.meeting.attendance.domain.ClientAttendance; import org.apache.fineract.portfolio.meeting.exception.MeetingDateException; -import org.joda.time.LocalDate; @Entity @Table(name = "m_meeting", uniqueConstraints = { @@ -106,7 +107,7 @@ public class Meeting extends AbstractPersistableCustom { actualChanges.put(meetingDateParamName, valueAsInput); actualChanges.put("dateFormat", dateFormatAsInput); actualChanges.put("locale", localeAsInput); - this.meetingDate = newValue.toDate(); + this.meetingDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (!isValidMeetingDate(this.calendarInstance, this.meetingDate, isSkipRepaymentOnFirstMonth, numberOfDays)) { throw new NotValidRecurringDateException("meeting", "Not a valid meeting date", this.meetingDate); @@ -167,7 +168,7 @@ public class Meeting extends AbstractPersistableCustom { public LocalDate getMeetingDateLocalDate() { LocalDate meetingDateLocalDate = null; if (this.meetingDate != null) { - meetingDateLocalDate = LocalDate.fromDateFields(this.meetingDate); + meetingDateLocalDate = LocalDate.ofInstant(this.meetingDate.toInstant(), ZoneId.systemDefault()); } return meetingDateLocalDate; } @@ -185,7 +186,7 @@ public class Meeting extends AbstractPersistableCustom { final Calendar calendar = calendarInstance.getCalendar(); LocalDate meetingDateLocalDate = null; if (meetingDate != null) { - meetingDateLocalDate = LocalDate.fromDateFields(meetingDate); + meetingDateLocalDate = LocalDate.ofInstant(meetingDate.toInstant(), ZoneId.systemDefault()); } if (meetingDateLocalDate == null diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/service/MeetingReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/service/MeetingReadPlatformServiceImpl.java index abd257cd5..55a762c22 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/service/MeetingReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/service/MeetingReadPlatformServiceImpl.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.meeting.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -27,7 +28,6 @@ import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.portfolio.meeting.data.MeetingData; import org.apache.fineract.portfolio.meeting.exception.MeetingNotFoundException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/service/MeetingWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/service/MeetingWritePlatformServiceJpaRepositoryImpl.java index 731ade3fb..d9ceb6cac 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/service/MeetingWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/service/MeetingWritePlatformServiceJpaRepositoryImpl.java @@ -29,6 +29,8 @@ import static org.apache.fineract.portfolio.meeting.MeetingApiConstants.meetingD import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -56,7 +58,6 @@ import org.apache.fineract.portfolio.meeting.data.MeetingDataValidator; import org.apache.fineract.portfolio.meeting.domain.Meeting; import org.apache.fineract.portfolio.meeting.domain.MeetingRepository; import org.apache.fineract.portfolio.meeting.domain.MeetingRepositoryWrapper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; @@ -299,7 +300,7 @@ public class MeetingWritePlatformServiceJpaRepositoryImpl implements MeetingWrit private void handleMeetingDataIntegrityIssues(final Date meetingDate, final Throwable realCause, final Exception dve) { if (realCause.getMessage().contains("unique_calendar_instance_id_meeting_date")) { - final LocalDate meetingDateLocal = LocalDate.fromDateFields(meetingDate); + final LocalDate meetingDateLocal = LocalDate.ofInstant(meetingDate.toInstant(), ZoneId.systemDefault()); throw new PlatformDataIntegrityException("error.msg.meeting.duplicate", "A meeting with date '" + meetingDateLocal + "' already exists", meetingDateParamName, meetingDateLocal); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/api/NotesApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/api/NotesApiResourceSwagger.java index 402a92a27..a0524d59d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/api/NotesApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/api/NotesApiResourceSwagger.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.note.api; import io.swagger.v3.oas.annotations.media.Schema; -import org.joda.time.DateTime; +import java.time.ZonedDateTime; /** * Created by Chirag Gupta on 12/29/17. @@ -57,13 +57,13 @@ final class NotesApiResourceSwagger { @Schema(example = "mifos") public String createdByUsername; @Schema(example = "1342498505000") - public DateTime createdOn; + public ZonedDateTime createdOn; @Schema(example = "1") public Integer updatedById; @Schema(example = "mifos") public String updatedByUsername; @Schema(example = "1342498517000") - public DateTime updatedOn; + public ZonedDateTime updatedOn; } @Schema(description = "GetResourceTypeResourceIdNotesNoteIdResponse") @@ -83,13 +83,13 @@ final class NotesApiResourceSwagger { @Schema(example = "mifos") public String createdByUsername; @Schema(example = "1359463135000") - public DateTime createdOn; + public ZonedDateTime createdOn; @Schema(example = "1") public Integer updatedById; @Schema(example = "mifos") public String updatedByUsername; @Schema(example = "1359463135000") - public DateTime updatedOn; + public ZonedDateTime updatedOn; } @Schema(description = "PostResourceTypeResourceIdNotesRequest") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/data/NoteData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/data/NoteData.java index a2247487a..a973835ad 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/data/NoteData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/data/NoteData.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.portfolio.note.data; +import java.time.ZonedDateTime; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.DateTime; /** * Immutable data object represent note or case information about a client, loan or loan transaction. @@ -49,17 +49,17 @@ public class NoteData { @SuppressWarnings("unused") private final String createdByUsername; @SuppressWarnings("unused") - private final DateTime createdOn; + private final ZonedDateTime createdOn; @SuppressWarnings("unused") private final Long updatedById; @SuppressWarnings("unused") private final String updatedByUsername; @SuppressWarnings("unused") - private final DateTime updatedOn; + private final ZonedDateTime updatedOn; public NoteData(final Long id, final Long clientId, final Long groupId, final Long loanId, final Long transactionId, final Long depositAccountId, final Long savingAccountId, final EnumOptionData noteType, final String note, - final DateTime createdDate, final Long createdById, final String createdByUsername, final DateTime lastModifiedDate, + final ZonedDateTime createdDate, final Long createdById, final String createdByUsername, final ZonedDateTime lastModifiedDate, final Long lastModifiedById, final String updatedByUsername) { this.id = id; this.clientId = clientId; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteReadPlatformServiceImpl.java index 3fc382ca5..fcedec45c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteReadPlatformServiceImpl.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.note.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -31,7 +32,6 @@ import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.portfolio.note.data.NoteData; import org.apache.fineract.portfolio.note.domain.NoteType; import org.apache.fineract.portfolio.note.exception.NoteNotFoundException; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -72,9 +72,9 @@ public class NoteReadPlatformServiceImpl implements NoteReadPlatformService { final Integer noteTypeId = JdbcSupport.getInteger(rs, "noteTypeEnum"); final EnumOptionData noteType = NoteEnumerations.noteType(noteTypeId); final String note = rs.getString("note"); - final DateTime createdDate = JdbcSupport.getDateTime(rs, "createdDate"); + final ZonedDateTime createdDate = JdbcSupport.getDateTime(rs, "createdDate"); final Long createdById = JdbcSupport.getLong(rs, "createdById"); - final DateTime lastModifiedDate = JdbcSupport.getDateTime(rs, "lastModifiedDate"); + final ZonedDateTime lastModifiedDate = JdbcSupport.getDateTime(rs, "lastModifiedDate"); final Long lastModifiedById = JdbcSupport.getLong(rs, "lastModifiedById"); final String createdByUsername = rs.getString("createdBy"); final String updatedByUsername = rs.getString("modifiedBy"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/DepositAccountUtils.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/DepositAccountUtils.java index d3c3a8634..5559caade 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/DepositAccountUtils.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/DepositAccountUtils.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.portfolio.savings; +import java.time.LocalDate; import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/ClosingOfSavingsAccounts.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/ClosingOfSavingsAccounts.java index 8a60f6915..4bee61b9c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/ClosingOfSavingsAccounts.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/ClosingOfSavingsAccounts.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.savings.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; public final class ClosingOfSavingsAccounts { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java index 87d0cb7cb..5603a1526 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java @@ -69,6 +69,8 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -89,8 +91,6 @@ import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java index 468af49ac..0b3bae566 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountInterestRateChartData.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.portfolio.savings.data; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.interestratechart.data.InterestRateChartData; import org.apache.fineract.portfolio.interestratechart.data.InterestRateChartSlabData; -import org.joda.time.LocalDate; /** * Immutable data object representing a deposit account interest rate chart. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountOnHoldTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountOnHoldTransactionData.java index d401bb94b..c9fc72972 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountOnHoldTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountOnHoldTransactionData.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.savings.data; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.LocalDate; public final class DepositAccountOnHoldTransactionData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountTransactionDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountTransactionDataValidator.java index 3139292aa..c983f7516 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountTransactionDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountTransactionDataValidator.java @@ -35,6 +35,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -52,7 +53,6 @@ import org.apache.fineract.portfolio.savings.DepositAccountOnClosureType; import org.apache.fineract.portfolio.savings.DepositAccountType; import org.apache.fineract.portfolio.savings.DepositsApiConstants; import org.apache.fineract.portfolio.savings.SavingsApiConstants; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java index 59d35c1dd..9bc79d03e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java @@ -66,6 +66,7 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.MonthDay; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -85,7 +86,6 @@ import org.apache.fineract.portfolio.savings.SavingsInterestCalculationDaysInYea import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java index 95915170e..b06272ef1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.savings.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -31,7 +32,6 @@ import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.savings.DepositAccountType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; import org.apache.fineract.portfolio.tax.data.TaxGroupData; -import org.joda.time.LocalDate; /** * Immutable data object representing a Fixed Deposit account. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java index c53ef243a..389643bdb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.savings.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -30,7 +31,6 @@ import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.savings.DepositAccountType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; import org.apache.fineract.portfolio.tax.data.TaxGroupData; -import org.joda.time.LocalDate; /** * Immutable data object representing a Recurring Deposit account. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountAnnualFeeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountAnnualFeeData.java index 33b88364e..a272b1664 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountAnnualFeeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountAnnualFeeData.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.savings.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; public final class SavingsAccountAnnualFeeData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountApplicationTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountApplicationTimelineData.java index b3481d837..01b825526 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountApplicationTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountApplicationTimelineData.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.savings.data; import java.io.Serializable; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable data object represent the important time-line events of a savings account application. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java index 723ba2dd4..c46c41df1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java @@ -20,13 +20,13 @@ package org.apache.fineract.portfolio.savings.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; /** * Immutable data object for Savings Account charge data. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeDataValidator.java index bd9593c57..aa3f3b4ba 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeDataValidator.java @@ -29,6 +29,8 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -39,8 +41,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java index b2c28069b..6bba6e7cb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.savings.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import java.util.Comparator; import java.util.HashSet; @@ -33,7 +34,6 @@ import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.staff.data.StaffData; import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.tax.data.TaxGroupData; -import org.joda.time.LocalDate; /** * Immutable data object representing a savings account. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountDataDTO.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountDataDTO.java index f663f36c2..d83b26ddb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountDataDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountDataDTO.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.savings.data; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.group.domain.Group; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; public class SavingsAccountDataDTO { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountDataValidator.java index 1f81359f8..a1bf9bf49 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountDataValidator.java @@ -51,6 +51,8 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -69,8 +71,6 @@ import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodTyp import org.apache.fineract.portfolio.savings.SavingsInterestCalculationDaysInYearType; import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSummaryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSummaryData.java index ea4741b29..79bea0b9a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSummaryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSummaryData.java @@ -20,8 +20,8 @@ package org.apache.fineract.portfolio.savings.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.organisation.monetary.data.CurrencyData; -import org.joda.time.LocalDate; /** * Immutable data object representing Savings Account summary information. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDTO.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDTO.java index 6512bdc14..14e0b7142 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDTO.java @@ -19,11 +19,11 @@ package org.apache.fineract.portfolio.savings.data; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Date; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; public class SavingsAccountTransactionDTO { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java index da1ffd86f..6fb9cc0b1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.savings.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.service.DateUtils; @@ -29,7 +30,6 @@ import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.savings.SavingsAccountTransactionType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; -import org.joda.time.LocalDate; /** * Immutable data object representing a savings account transaction. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDataValidator.java index 98a0c5a4e..e17ff5232 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionDataValidator.java @@ -35,6 +35,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -56,7 +57,6 @@ import org.apache.fineract.portfolio.savings.SavingsApiConstants; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsActivation.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsActivation.java index fdfe56765..00bc1b972 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsActivation.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsActivation.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.savings.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; public final class SavingsActivation { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsApproval.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsApproval.java index e94952651..1c3fd82ad 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsApproval.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsApproval.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.savings.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; public final class SavingsApproval { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductDataValidator.java index 0dfd0b91c..3c5072901 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductDataValidator.java @@ -54,6 +54,7 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.MonthDay; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -75,7 +76,6 @@ import org.apache.fineract.portfolio.savings.SavingsInterestCalculationDaysInYea import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; import org.apache.fineract.portfolio.savings.domain.SavingsProduct; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/TransactionDateData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/TransactionDateData.java index 5ef3e1d82..a8a2f1667 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/TransactionDateData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/TransactionDateData.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.savings.data; -import org.joda.time.LocalDate; +import java.time.LocalDate; /** * Immutable data object representing date diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountAssembler.java index 4c53f3c45..d0517be53 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountAssembler.java @@ -57,6 +57,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -98,9 +100,6 @@ import org.apache.fineract.portfolio.savings.exception.FixedDepositProductNotFou import org.apache.fineract.portfolio.savings.exception.RecurringDepositProductNotFoundException; import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -457,7 +456,7 @@ public class DepositAccountAssembler { final String dateFormat = this.fromApiJsonHelper.extractDateFormatParameter(element.getAsJsonObject()); final JsonObject topLevelJsonElement = element.getAsJsonObject(); final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(topLevelJsonElement); - final DateTimeFormatter formatter = DateTimeFormat.forPattern(dateFormat).withLocale(locale); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat).withLocale(locale); if (element.isJsonObject()) { if (topLevelJsonElement.has(bulkSavingsDueTransactionsParamName) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainService.java index 4c2599f42..34fe6d04f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainService.java @@ -19,12 +19,12 @@ package org.apache.fineract.portfolio.savings.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Map; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; import org.springframework.transaction.annotation.Transactional; public interface DepositAccountDomainService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java index cbf643256..4a23738b6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountDomainServiceJpa.java @@ -24,6 +24,10 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.transfe import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Locale; @@ -61,9 +65,6 @@ import org.apache.fineract.portfolio.savings.DepositsApiConstants; import org.apache.fineract.portfolio.savings.SavingsApiConstants; import org.apache.fineract.portfolio.savings.SavingsTransactionBooleanValues; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -219,7 +220,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi */ final MathContext mc = MathContext.DECIMAL64; final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); Long savingsTransactionId = null; account.postMaturityInterest(isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth); @@ -308,7 +309,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi account.updateOnAccountClosureStatus(onClosureType); } changes.put("reinvestedDepositId", reinvestedDeposit.getId()); - reinvestedDeposit.approveAndActivateApplication(closedDate.toDate(), user); + reinvestedDeposit.approveAndActivateApplication(Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), user); this.savingsAccountRepository.save(reinvestedDeposit); } else if (onClosureType.isTransferToSavings()) { @@ -360,7 +361,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi final MathContext mc = MathContext.DECIMAL64; final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); Long savingsTransactionId = null; account.postMaturityInterest(isSavingsInterestPostingAtCurrentPeriodEnd, financialYearBeginningMonth, closedDate); @@ -475,7 +476,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); Long savingsTransactionId = null; // post interest @@ -532,7 +533,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); Long savingsTransactionId = null; // post interest account.postPreMaturityInterest(closedDate, isPreMatureClosure, isSavingsInterestPostingAtCurrentPeriodEnd, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java index 317b16aa9..be7c3f667 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.savings.domain; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; @@ -37,7 +38,6 @@ import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartS import org.apache.fineract.portfolio.interestratechart.incentive.AttributeIncentiveCalculation; import org.apache.fineract.portfolio.interestratechart.incentive.AttributeIncentiveCalculationFactory; import org.apache.fineract.portfolio.interestratechart.incentive.IncentiveDTO; -import org.joda.time.LocalDate; @Entity @Table(name = "m_savings_account_interest_rate_chart") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java index 53439b1b6..20be4db66 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.savings.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Column; @@ -34,7 +36,6 @@ import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingTransaction; import org.apache.fineract.portfolio.savings.DepositAccountOnHoldTransactionType; -import org.joda.time.LocalDate; @Entity @Table(name = "m_deposit_account_on_hold_transaction") @@ -71,7 +72,7 @@ public class DepositAccountOnHoldTransaction extends AbstractPersistableCustom { this.savingsAccount = savingsAccount; this.amount = amount; this.transactionType = transactionType.getValue(); - this.transactionDate = transactionDate.toDate(); + this.transactionDate = Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.createdDate = new Date(); this.reversed = reversed; } @@ -114,7 +115,7 @@ public class DepositAccountOnHoldTransaction extends AbstractPersistableCustom { public LocalDate getTransactionDate() { LocalDate transactionDate = null; if (this.transactionDate != null) { - transactionDate = LocalDate.fromDateFields(this.transactionDate); + transactionDate = LocalDate.ofInstant(this.transactionDate.toInstant(), ZoneId.systemDefault()); } return transactionDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java index 3e5806aa3..8506eb083 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java @@ -22,6 +22,7 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.mandato import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -39,7 +40,6 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.savings.DepositsApiConstants; -import org.joda.time.LocalDate; @Entity @Table(name = "m_deposit_account_recurring_detail") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java index 52ba3ab8d..d0ae5715e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java @@ -29,6 +29,9 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.transfe import static org.apache.fineract.portfolio.savings.DepositsApiConstants.transferToSavingsIdParamName; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -46,11 +49,6 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.savings.DepositAccountOnClosureType; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.Months; -import org.joda.time.Weeks; -import org.joda.time.Years; @Entity @Table(name = "m_deposit_account_term_and_preclosure") @@ -115,13 +113,14 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { final DepositAccountOnClosureType accountOnClosureType, Boolean transferInterest, Long transferToSavingsId) { this.depositAmount = depositAmount; this.maturityAmount = maturityAmount; - this.maturityDate = (maturityDate == null) ? null : maturityDate.toDate(); + this.maturityDate = (maturityDate == null) ? null : Date.from(maturityDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.depositPeriod = depositPeriod; this.depositPeriodFrequency = (depositPeriodFrequency == null) ? null : depositPeriodFrequency.getValue(); this.preClosureDetail = preClosureDetail; this.depositTermDetail = depositTermDetail; this.account = account; - this.expectedFirstDepositOnDate = expectedFirstDepositOnDate == null ? null : expectedFirstDepositOnDate.toDate(); + this.expectedFirstDepositOnDate = expectedFirstDepositOnDate == null ? null + : Date.from(expectedFirstDepositOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.onAccountClosureType = (accountOnClosureType == null) ? null : accountOnClosureType.getValue(); this.transferInterestToLinkedAccount = transferInterest; this.transferToSavingsAccountId = transferToSavingsId; @@ -156,7 +155,7 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { actualChanges.put(expectedFirstDepositOnDateParamName, newValueAsString); actualChanges.put(localeParamName, localeAsInput); actualChanges.put(dateFormatParamName, dateFormat); - this.expectedFirstDepositOnDate = newValue.toDate(); + this.expectedFirstDepositOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInBooleanParameterNamed(transferInterestToSavingsParamName, this.transferInterestToLinkedAccount)) { @@ -219,13 +218,13 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { public void updateMaturityDetails(final BigDecimal maturityAmount, final LocalDate maturityDate) { this.maturityAmount = maturityAmount; - this.maturityDate = maturityDate.toDate(); + this.maturityDate = Date.from(maturityDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateMaturityDetails(final BigDecimal depositAmount, final BigDecimal interestPayable, final LocalDate maturityDate) { this.depositAmount = depositAmount; this.maturityAmount = this.depositAmount.add(interestPayable); - this.maturityDate = maturityDate.toDate(); + this.maturityDate = Date.from(maturityDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateDepositAmount(final BigDecimal depositAmount) { @@ -235,7 +234,7 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { public LocalDate getMaturityLocalDate() { LocalDate maturityLocalDate = null; if (this.maturityDate != null) { - maturityLocalDate = new LocalDate(this.maturityDate); + maturityLocalDate = LocalDate.ofInstant(this.maturityDate.toInstant(), ZoneId.systemDefault()); } return maturityLocalDate; } @@ -243,7 +242,7 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { public LocalDate getExpectedFirstDepositOnDate() { LocalDate expectedFirstDepositOnLocalDate = null; if (this.expectedFirstDepositOnDate != null) { - expectedFirstDepositOnLocalDate = new LocalDate(this.expectedFirstDepositOnDate); + expectedFirstDepositOnLocalDate = LocalDate.ofInstant(this.expectedFirstDepositOnDate.toInstant(), ZoneId.systemDefault()); } return expectedFirstDepositOnLocalDate; } @@ -270,16 +269,16 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { final SavingsPeriodFrequencyType depositPeriodFrequencyType = periodFrequencyType; switch (depositPeriodFrequencyType) { case DAYS: - actualDepositPeriod = Days.daysBetween(depositFromDate, interestPostingUpToDate).getDays(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.DAYS.between(depositFromDate, interestPostingUpToDate)); break; case WEEKS: - actualDepositPeriod = Weeks.weeksBetween(depositFromDate, interestPostingUpToDate).getWeeks(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.WEEKS.between(depositFromDate, interestPostingUpToDate)); break; case MONTHS: - actualDepositPeriod = Months.monthsBetween(depositFromDate, interestPostingUpToDate).getMonths(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.MONTHS.between(depositFromDate, interestPostingUpToDate)); break; case YEARS: - actualDepositPeriod = Years.yearsBetween(depositFromDate, interestPostingUpToDate).getYears(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.YEARS.between(depositFromDate, interestPostingUpToDate)); break; case INVALID: actualDepositPeriod = this.depositPeriod;// default value @@ -324,7 +323,7 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { } public void updateExpectedFirstDepositDate(final LocalDate expectedFirstDepositOnDate) { - this.expectedFirstDepositOnDate = expectedFirstDepositOnDate.toDate(); + this.expectedFirstDepositOnDate = Date.from(expectedFirstDepositOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public boolean isTransferInterestToLinkedAccount() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositTermDetail.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositTermDetail.java index 5c874ac4e..5d9785fc2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositTermDetail.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositTermDetail.java @@ -25,6 +25,8 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.maxDepo import static org.apache.fineract.portfolio.savings.DepositsApiConstants.minDepositTermParamName; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.minDepositTermTypeIdParamName; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.LinkedHashMap; import java.util.Map; import javax.persistence.Column; @@ -33,12 +35,6 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; -import org.joda.time.DateTimeConstants; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.Months; -import org.joda.time.Weeks; -import org.joda.time.Years; /** * DepositTermDetail encapsulates all the details of a {@link FixedDepositProduct} that are also used and persisted by a @@ -214,16 +210,16 @@ public class DepositTermDetail { switch (periodFrequencyType) { case DAYS: - actualDepositPeriod = Days.daysBetween(periodStartDate, periodEndDate).getDays(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.DAYS.between(periodStartDate, periodEndDate)); break; case WEEKS: - actualDepositPeriod = Weeks.weeksBetween(periodStartDate, periodEndDate).getWeeks(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.WEEKS.between(periodStartDate, periodEndDate)); break; case MONTHS: - actualDepositPeriod = Months.monthsBetween(periodStartDate, periodEndDate).getMonths(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.MONTHS.between(periodStartDate, periodEndDate)); break; case YEARS: - actualDepositPeriod = Years.yearsBetween(periodStartDate, periodEndDate).getYears(); + actualDepositPeriod = Math.toIntExact(ChronoUnit.YEARS.between(periodStartDate, periodStartDate)); break; case INVALID: actualDepositPeriod = 0;// default value @@ -239,7 +235,7 @@ public class DepositTermDetail { toDays = period; break; case WEEKS: - toDays = period * DateTimeConstants.DAYS_PER_WEEK; + toDays = period * 7; break; case MONTHS: toDays = period * 30;// converting to stard 30 days diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java index e4dc721cf..08988cebf 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java @@ -25,6 +25,9 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.onAccou import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -63,9 +66,6 @@ import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; import org.apache.fineract.portfolio.savings.domain.interest.PostingPeriod; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; @Entity @DiscriminatorValue("200") @@ -352,7 +352,7 @@ public class FixedDepositAccount extends SavingsAccount { } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); if (closedDate.isBefore(getActivationLocalDate())) { @@ -414,13 +414,13 @@ public class FixedDepositAccount extends SavingsAccount { actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status)); actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat()); - actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.toString(fmt)); + actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.format(fmt)); this.rejectedOnDate = null; this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = closedDate.toDate(); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; this.summary.updateSummary(this.currency, this.savingsAccountTransactionSummaryWrapper, this.transactions); } @@ -446,7 +446,7 @@ public class FixedDepositAccount extends SavingsAccount { } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); if (closedDate.isBefore(getActivationLocalDate())) { @@ -502,13 +502,13 @@ public class FixedDepositAccount extends SavingsAccount { actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status)); actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat()); - actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.toString(fmt)); + actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.format(fmt)); this.rejectedOnDate = null; this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = closedDate.toDate(); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; // this.summary.updateSummary(this.currency, // this.savingsAccountTransactionSummaryWrapper, this.transactions); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java index ea4c4deb9..345a1c842 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositProduct.java @@ -26,6 +26,7 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.maxDepo import com.google.gson.JsonArray; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -60,7 +61,6 @@ import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; import org.apache.fineract.portfolio.tax.domain.TaxGroup; -import org.joda.time.LocalDate; @Entity @DiscriminatorValue("200") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java index 1839ce0ed..4a00c7799 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java @@ -25,6 +25,9 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.onAccou import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -69,9 +72,6 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionDTO; import org.apache.fineract.portfolio.savings.domain.interest.PostingPeriod; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; @Entity @DiscriminatorValue("300") @@ -388,7 +388,8 @@ public class RecurringDepositAccount extends SavingsAccount { dueDate = latestTransactionDate; } final SavingsAccountTransaction transaction = SavingsAccountTransaction.deposit(null, office(), null, dueDate, - installment.getDepositAmountOutstanding(getCurrency()), installment.dueDate().toDate(), null); + installment.getDepositAmountOutstanding(getCurrency()), + Date.from(installment.dueDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), null); allTransactions.add(transaction); } } @@ -448,7 +449,7 @@ public class RecurringDepositAccount extends SavingsAccount { } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); if (closedDate.isBefore(getActivationLocalDate())) { @@ -519,13 +520,13 @@ public class RecurringDepositAccount extends SavingsAccount { actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status)); actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat()); - actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.toString(fmt)); + actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.format(fmt)); this.rejectedOnDate = null; this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = closedDate.toDate(); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; this.summary.updateSummary(this.currency, this.savingsAccountTransactionSummaryWrapper, this.transactions); @@ -565,7 +566,7 @@ public class RecurringDepositAccount extends SavingsAccount { } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); if (closedDate.isBefore(getActivationLocalDate())) { @@ -618,13 +619,13 @@ public class RecurringDepositAccount extends SavingsAccount { actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status)); actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat()); - actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.toString(fmt)); + actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.format(fmt)); this.rejectedOnDate = null; this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = closedDate.toDate(); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; this.summary.updateSummary(this.currency, this.savingsAccountTransactionSummaryWrapper, this.transactions); } @@ -811,8 +812,8 @@ public class RecurringDepositAccount extends SavingsAccount { final List dataValidationErrors = new ArrayList<>(); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) .resource(RECURRING_DEPOSIT_ACCOUNT_RESOURCE_NAME); - final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat()).withLocale(command.extractLocale()); - final String dateAsString = formatter.print(this.accountTermAndPreClosure.getExpectedFirstDepositOnDate()); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(command.extractLocale()); + final String dateAsString = formatter.format(this.accountTermAndPreClosure.getExpectedFirstDepositOnDate()); baseDataValidator.reset().parameter(DepositsApiConstants.activatedOnDateParamName).value(dateAsString) .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.expected.first.deposit.date"); if (!dataValidationErrors.isEmpty()) { @@ -839,7 +840,7 @@ public class RecurringDepositAccount extends SavingsAccount { final String defaultUserMessage = "Transaction is not allowed. Account is matured."; final ApiParameterError error = ApiParameterError.parameterError( "error.msg.recurring.deposit.account.transaction.account.is.matured", defaultUserMessage, "transactionDate", - transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter())); + transactionDTO.getTransactionDate().format(transactionDTO.getFormatter())); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -851,7 +852,7 @@ public class RecurringDepositAccount extends SavingsAccount { final String defaultUserMessage = "Transaction is not allowed. Transaction date is on or after account maturity date."; final ApiParameterError error = ApiParameterError.parameterError( "error.msg.recurring.deposit.account.transaction.date.is.after.account.maturity.date", defaultUserMessage, - "transactionDate", transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter())); + "transactionDate", transactionDTO.getTransactionDate().format(transactionDTO.getFormatter())); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -863,7 +864,7 @@ public class RecurringDepositAccount extends SavingsAccount { final String defaultUserMessage = "Transaction is not allowed. Transaction date is on or after account activation and deposit start date."; final ApiParameterError error = ApiParameterError.parameterError( "error.msg.recurring.deposit.account.transaction.date.is.before.account.activation.or.deposit.date", defaultUserMessage, - "transactionDate", transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter())); + "transactionDate", transactionDTO.getTransactionDate().format(transactionDTO.getFormatter())); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -1156,11 +1157,11 @@ public class RecurringDepositAccount extends SavingsAccount { this.activatedBy = null; this.lockedInUntilDate = null; - this.activatedOnDate = now.toDate(); + this.activatedOnDate = Date.from(now.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void setClosedOnDate(final LocalDate closedOnDate) { - this.closedOnDate = closedOnDate.toDate(); + this.closedOnDate = Date.from(closedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } @Override @@ -1182,7 +1183,7 @@ public class RecurringDepositAccount extends SavingsAccount { final BigDecimal depositAmount = this.recurringDetail.mandatoryRecommendedDepositAmount(); while (maturityDate.isAfter(installmentDate)) { final RecurringDepositScheduleInstallment installment = RecurringDepositScheduleInstallment.installment(this, installmentNumber, - installmentDate.toDate(), depositAmount); + Date.from(installmentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), depositAmount); addDepositScheduleInstallment(installment); installmentDate = DepositAccountUtils.calculateNextDepositDate(installmentDate, frequency, recurringEvery); installmentNumber += 1; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java index cc1d18ac5..75fe26ebc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.savings.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -30,7 +32,6 @@ import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; -import org.joda.time.LocalDate; @Entity @Table(name = "m_mandatory_savings_schedule") @@ -168,7 +169,7 @@ public class RecurringDepositScheduleInstallment extends AbstractAuditableCustom } public LocalDate dueDate() { - return (this.dueDate == null) ? null : new LocalDate(this.dueDate); + return (this.dueDate == null) ? null : LocalDate.ofInstant(this.dueDate.toInstant(), ZoneId.systemDefault()); } public Money payInstallment(final LocalDate transactionDate, final Money transactionAmountRemaining) { @@ -197,7 +198,7 @@ public class RecurringDepositScheduleInstallment extends AbstractAuditableCustom private void checkIfInstallmentObligationsAreMet(final LocalDate transactionDate, final MonetaryCurrency currency) { this.obligationsMet = getTotalOutstanding(currency).isZero(); if (this.obligationsMet) { - this.obligationsMetOnDate = transactionDate.toDate(); + this.obligationsMetOnDate = Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java index aceb2c4e7..467f28f13 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java @@ -35,6 +35,9 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withdraw import com.google.gson.JsonArray; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -114,9 +117,6 @@ import org.apache.fineract.portfolio.tax.domain.TaxComponent; import org.apache.fineract.portfolio.tax.domain.TaxGroup; import org.apache.fineract.portfolio.tax.service.TaxUtils; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; @@ -400,7 +400,7 @@ public class SavingsAccount extends AbstractPersistableCustom { this.externalId = externalId; this.status = status.getValue(); this.accountType = accountType.getValue(); - this.submittedOnDate = submittedOnDate.toDate(); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = submittedBy; this.nominalAnnualInterestRate = nominalAnnualInterestRate; this.interestCompoundingPeriodType = interestCompoundingPeriodType.getValue(); @@ -724,7 +724,8 @@ public class SavingsAccount extends AbstractPersistableCustom { Money periodStartingBalance; if (this.startInterestCalculationDate != null) { - LocalDate startInterestCalculationDate = new LocalDate(this.startInterestCalculationDate); + LocalDate startInterestCalculationDate = LocalDate.ofInstant(this.startInterestCalculationDate.toInstant(), + ZoneId.systemDefault()); final SavingsAccountTransaction transaction = findLastTransaction(startInterestCalculationDate); if (transaction == null) { @@ -908,7 +909,7 @@ public class SavingsAccount extends AbstractPersistableCustom { final String defaultUserMessage = "Transaction is not allowed. Account is not active."; final ApiParameterError error = ApiParameterError.parameterError( "error.msg." + resourceTypeName + ".transaction.account.is.not.active", defaultUserMessage, "transactionDate", - transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter())); + transactionDTO.getTransactionDate().format(transactionDTO.getFormatter())); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -919,7 +920,7 @@ public class SavingsAccount extends AbstractPersistableCustom { if (isDateInTheFuture(transactionDTO.getTransactionDate())) { final String defaultUserMessage = "Transaction date cannot be in the future."; final ApiParameterError error = ApiParameterError.parameterError("error.msg." + resourceTypeName + ".transaction.in.the.future", - defaultUserMessage, "transactionDate", transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter())); + defaultUserMessage, "transactionDate", transactionDTO.getTransactionDate().format(transactionDTO.getFormatter())); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -928,8 +929,8 @@ public class SavingsAccount extends AbstractPersistableCustom { } if (transactionDTO.getTransactionDate().isBefore(getActivationLocalDate())) { - final Object[] defaultUserArgs = Arrays.asList(transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter()), - getActivationLocalDate().toString(transactionDTO.getFormatter())).toArray(); + final Object[] defaultUserArgs = Arrays.asList(transactionDTO.getTransactionDate().format(transactionDTO.getFormatter()), + getActivationLocalDate().format(transactionDTO.getFormatter())).toArray(); final String defaultUserMessage = "Transaction date cannot be before accounts activation date."; final ApiParameterError error = ApiParameterError.parameterError( "error.msg." + resourceTypeName + ".transaction.before.activation.date", defaultUserMessage, "transactionDate", @@ -961,13 +962,13 @@ public class SavingsAccount extends AbstractPersistableCustom { public LocalDate getActivationLocalDate() { LocalDate activationLocalDate = null; if (this.activatedOnDate != null) { - activationLocalDate = new LocalDate(this.activatedOnDate); + activationLocalDate = LocalDate.ofInstant(this.activatedOnDate.toInstant(), ZoneId.systemDefault()); } return activationLocalDate; } public LocalDate getWithdrawnOnDate() { - return withdrawnOnDate == null ? null : new LocalDate(withdrawnOnDate); + return withdrawnOnDate == null ? null : LocalDate.ofInstant(withdrawnOnDate.toInstant(), ZoneId.systemDefault()); } // startInterestCalculationDate is set during migration so that there is no @@ -975,7 +976,7 @@ public class SavingsAccount extends AbstractPersistableCustom { public LocalDate getStartInterestCalculationDate() { LocalDate startInterestCalculationLocalDate = null; if (this.startInterestCalculationDate != null) { - startInterestCalculationLocalDate = new LocalDate(this.startInterestCalculationDate); + startInterestCalculationLocalDate = LocalDate.ofInstant(this.startInterestCalculationDate.toInstant(), ZoneId.systemDefault()); } else { startInterestCalculationLocalDate = getActivationLocalDate(); } @@ -988,7 +989,7 @@ public class SavingsAccount extends AbstractPersistableCustom { final String defaultUserMessage = "Transaction is not allowed. Account is not active."; final ApiParameterError error = ApiParameterError.parameterError("error.msg.savingsaccount.transaction.account.is.not.active", - defaultUserMessage, "transactionDate", transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter())); + defaultUserMessage, "transactionDate", transactionDTO.getTransactionDate().format(transactionDTO.getFormatter())); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -999,7 +1000,7 @@ public class SavingsAccount extends AbstractPersistableCustom { if (isDateInTheFuture(transactionDTO.getTransactionDate())) { final String defaultUserMessage = "Transaction date cannot be in the future."; final ApiParameterError error = ApiParameterError.parameterError("error.msg.savingsaccount.transaction.in.the.future", - defaultUserMessage, "transactionDate", transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter())); + defaultUserMessage, "transactionDate", transactionDTO.getTransactionDate().format(transactionDTO.getFormatter())); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -1008,8 +1009,8 @@ public class SavingsAccount extends AbstractPersistableCustom { } if (transactionDTO.getTransactionDate().isBefore(getActivationLocalDate())) { - final Object[] defaultUserArgs = Arrays.asList(transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter()), - getActivationLocalDate().toString(transactionDTO.getFormatter())).toArray(); + final Object[] defaultUserArgs = Arrays.asList(transactionDTO.getTransactionDate().format(transactionDTO.getFormatter()), + getActivationLocalDate().format(transactionDTO.getFormatter())).toArray(); final String defaultUserMessage = "Transaction date cannot be before accounts activation date."; final ApiParameterError error = ApiParameterError.parameterError("error.msg.savingsaccount.transaction.before.activation.date", defaultUserMessage, "transactionDate", defaultUserArgs); @@ -1022,11 +1023,11 @@ public class SavingsAccount extends AbstractPersistableCustom { if (isAccountLocked(transactionDTO.getTransactionDate())) { final String defaultUserMessage = "Withdrawal is not allowed. No withdrawals are allowed until after " - + getLockedInUntilLocalDate().toString(transactionDTO.getFormatter()); + + getLockedInUntilLocalDate().format(transactionDTO.getFormatter()); final ApiParameterError error = ApiParameterError.parameterError( "error.msg.savingsaccount.transaction.withdrawals.blocked.during.lockin.period", defaultUserMessage, "transactionDate", - transactionDTO.getTransactionDate().toString(transactionDTO.getFormatter()), - getLockedInUntilLocalDate().toString(transactionDTO.getFormatter())); + transactionDTO.getTransactionDate().format(transactionDTO.getFormatter()), + getLockedInUntilLocalDate().format(transactionDTO.getFormatter())); final List dataValidationErrors = new ArrayList<>(); dataValidationErrors.add(error); @@ -1225,7 +1226,7 @@ public class SavingsAccount extends AbstractPersistableCustom { protected LocalDate getLockedInUntilLocalDate() { LocalDate lockedInUntilLocalDate = null; if (this.lockedInUntilDate != null) { - lockedInUntilLocalDate = new LocalDate(this.lockedInUntilDate); + lockedInUntilLocalDate = LocalDate.ofInstant(this.lockedInUntilDate.toInstant(), ZoneId.systemDefault()); } return lockedInUntilLocalDate; } @@ -1267,7 +1268,7 @@ public class SavingsAccount extends AbstractPersistableCustom { actualChanges.put(SavingsApiConstants.submittedOnDateParamName, newValueAsString); actualChanges.put(SavingsApiConstants.localeParamName, localeAsInput); actualChanges.put(SavingsApiConstants.dateFormatParamName, dateFormat); - this.submittedOnDate = newValue.toDate(); + this.submittedOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInStringParameterNamed(SavingsApiConstants.accountNoParamName, this.accountNumber)) { @@ -1724,19 +1725,20 @@ public class SavingsAccount extends AbstractPersistableCustom { } public boolean isSubmittedOnDateAfter(final LocalDate compareDate) { - return this.submittedOnDate == null ? false : new LocalDate(this.submittedOnDate).isAfter(compareDate); + return this.submittedOnDate == null ? false + : LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()).isAfter(compareDate); } public LocalDate getSubmittedOnDate() { - return submittedOnDate == null ? null : new LocalDate(submittedOnDate); + return submittedOnDate == null ? null : LocalDate.ofInstant(submittedOnDate.toInstant(), ZoneId.systemDefault()); } public LocalDate getApprovedOnDate() { - return approvedOnDate == null ? null : new LocalDate(approvedOnDate); + return approvedOnDate == null ? null : LocalDate.ofInstant(approvedOnDate.toInstant(), ZoneId.systemDefault()); } public LocalDate getRejectedOnDate() { - return rejectedOnDate == null ? null : new LocalDate(rejectedOnDate); + return rejectedOnDate == null ? null : LocalDate.ofInstant(rejectedOnDate.toInstant(), ZoneId.systemDefault()); } public void removeSavingsOfficer(final LocalDate unassignDate) { @@ -1824,7 +1826,7 @@ public class SavingsAccount extends AbstractPersistableCustom { protected LocalDate getSubmittedOnLocalDate() { LocalDate submittedOn = null; if (this.submittedOnDate != null) { - submittedOn = new LocalDate(this.submittedOnDate); + submittedOn = LocalDate.ofInstant(this.submittedOnDate.toInstant(), ZoneId.systemDefault()); } return submittedOn; } @@ -1832,7 +1834,7 @@ public class SavingsAccount extends AbstractPersistableCustom { private LocalDate getApprovedOnLocalDate() { LocalDate approvedOnLocalDate = null; if (this.approvedOnDate != null) { - approvedOnLocalDate = new LocalDate(this.approvedOnDate); + approvedOnLocalDate = LocalDate.ofInstant(this.approvedOnDate.toInstant(), ZoneId.systemDefault()); } return approvedOnLocalDate; } @@ -1874,7 +1876,7 @@ public class SavingsAccount extends AbstractPersistableCustom { final LocalDate approvedOn = command.localDateValueOfParameterNamed(SavingsApiConstants.approvedOnDateParamName); final String approvedOnDateChange = command.stringValueOfParameterNamed(SavingsApiConstants.approvedOnDateParamName); - this.approvedOnDate = approvedOn.toDate(); + this.approvedOnDate = Date.from(approvedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.approvedBy = currentUser; actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat()); @@ -1883,8 +1885,8 @@ public class SavingsAccount extends AbstractPersistableCustom { final LocalDate submittalDate = getSubmittedOnLocalDate(); if (approvedOn.isBefore(submittalDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat()).withLocale(command.extractLocale()); - final String submittalDateAsString = formatter.print(submittalDate); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(command.extractLocale()); + final String submittalDateAsString = formatter.format(submittalDate); baseDataValidator.reset().parameter(SavingsApiConstants.approvedOnDateParamName).value(submittalDateAsString) .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.submittal.date"); @@ -1996,12 +1998,12 @@ public class SavingsAccount extends AbstractPersistableCustom { if (transaction.isAnnualFeeAndNotReversed()) { if (lastAnnualFeeTransactionDate == null) { lastAnnualFeeTransactionDate = transaction.transactionLocalDate(); - nextDueDate = lastAnnualFeeTransactionDate.toDate(); + nextDueDate = Date.from(lastAnnualFeeTransactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (transaction.transactionLocalDate().isAfter(lastAnnualFeeTransactionDate)) { lastAnnualFeeTransactionDate = transaction.transactionLocalDate(); - nextDueDate = lastAnnualFeeTransactionDate.toDate(); + nextDueDate = Date.from(lastAnnualFeeTransactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } } @@ -2034,11 +2036,11 @@ public class SavingsAccount extends AbstractPersistableCustom { final LocalDate rejectedOn = command.localDateValueOfParameterNamed(SavingsApiConstants.rejectedOnDateParamName); final String rejectedOnAsString = command.stringValueOfParameterNamed(SavingsApiConstants.rejectedOnDateParamName); - this.rejectedOnDate = rejectedOn.toDate(); + this.rejectedOnDate = Date.from(rejectedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.rejectedBy = currentUser; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = rejectedOn.toDate(); + this.closedOnDate = Date.from(rejectedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); @@ -2050,8 +2052,8 @@ public class SavingsAccount extends AbstractPersistableCustom { if (rejectedOn.isBefore(submittalDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat()).withLocale(command.extractLocale()); - final String submittalDateAsString = formatter.print(submittalDate); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(command.extractLocale()); + final String submittalDateAsString = formatter.format(submittalDate); baseDataValidator.reset().parameter(SavingsApiConstants.rejectedOnDateParamName).value(submittalDateAsString) .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.submittal.date"); @@ -2102,9 +2104,9 @@ public class SavingsAccount extends AbstractPersistableCustom { this.rejectedOnDate = null; this.rejectedBy = null; - this.withdrawnOnDate = withdrawnOn.toDate(); + this.withdrawnOnDate = Date.from(withdrawnOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.withdrawnBy = currentUser; - this.closedOnDate = withdrawnOn.toDate(); + this.closedOnDate = Date.from(withdrawnOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); @@ -2115,8 +2117,8 @@ public class SavingsAccount extends AbstractPersistableCustom { final LocalDate submittalDate = getSubmittedOnLocalDate(); if (withdrawnOn.isBefore(submittalDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat()).withLocale(command.extractLocale()); - final String submittalDateAsString = formatter.print(submittalDate); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(command.extractLocale()); + final String submittalDateAsString = formatter.format(submittalDate); baseDataValidator.reset().parameter(SavingsApiConstants.withdrawnOnDateParamName).value(submittalDateAsString) .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.submittal.date"); @@ -2160,14 +2162,14 @@ public class SavingsAccount extends AbstractPersistableCustom { } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate activationDate = command.localDateValueOfParameterNamed(SavingsApiConstants.activatedOnDateParamName); this.status = SavingsAccountStatusType.ACTIVE.getValue(); actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status)); actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat()); - actualChanges.put(SavingsApiConstants.activatedOnDateParamName, activationDate.toString(fmt)); + actualChanges.put(SavingsApiConstants.activatedOnDateParamName, activationDate.format(fmt)); this.rejectedOnDate = null; this.rejectedBy = null; @@ -2175,7 +2177,7 @@ public class SavingsAccount extends AbstractPersistableCustom { this.withdrawnBy = null; this.closedOnDate = null; this.closedBy = null; - this.activatedOnDate = activationDate.toDate(); + this.activatedOnDate = Date.from(activationDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.activatedBy = currentUser; this.lockedInUntilDate = calculateDateAccountIsLockedUntil(getActivationLocalDate()); @@ -2183,8 +2185,8 @@ public class SavingsAccount extends AbstractPersistableCustom { * if (annualFeeSettingsSet()) { updateToNextAnnualFeeDueDateFrom(getActivationLocalDate()); } */ if (this.client != null && this.client.isActivatedAfter(activationDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat()).withLocale(command.extractLocale()); - final String dateAsString = formatter.print(this.client.getActivationLocalDate()); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(command.extractLocale()); + final String dateAsString = formatter.format(this.client.getActivationLocalDate()); baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName).value(dateAsString) .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.client.activation.date"); if (!dataValidationErrors.isEmpty()) { @@ -2193,8 +2195,8 @@ public class SavingsAccount extends AbstractPersistableCustom { } if (this.group != null && this.group.isActivatedAfter(activationDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat()).withLocale(command.extractLocale()); - final String dateAsString = formatter.print(this.client.getActivationLocalDate()); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(command.extractLocale()); + final String dateAsString = formatter.format(this.client.getActivationLocalDate()); baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName).value(dateAsString) .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.group.activation.date"); if (!dataValidationErrors.isEmpty()) { @@ -2205,8 +2207,8 @@ public class SavingsAccount extends AbstractPersistableCustom { final LocalDate approvalDate = getApprovedOnLocalDate(); if (activationDate.isBefore(approvalDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(command.dateFormat()).withLocale(command.extractLocale()); - final String dateAsString = formatter.print(approvalDate); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(command.extractLocale()); + final String dateAsString = formatter.format(approvalDate); baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName).value(dateAsString) .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.approval.date"); @@ -2305,7 +2307,7 @@ public class SavingsAccount extends AbstractPersistableCustom { } final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); if (closedDate.isBefore(getActivationLocalDate())) { @@ -2344,13 +2346,13 @@ public class SavingsAccount extends AbstractPersistableCustom { actualChanges.put(SavingsApiConstants.statusParamName, SavingsEnumerations.status(this.status)); actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat()); - actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.toString(fmt)); + actualChanges.put(SavingsApiConstants.closedOnDateParamName, closedDate.format(fmt)); this.rejectedOnDate = null; this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = closedDate.toDate(); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; return actualChanges; @@ -2379,16 +2381,20 @@ public class SavingsAccount extends AbstractPersistableCustom { case INVALID: break; case DAYS: - lockedInUntilLocalDate = activationLocalDate.plusDays(this.lockinPeriodFrequency).toDate(); + lockedInUntilLocalDate = Date + .from(activationLocalDate.plusDays(this.lockinPeriodFrequency).atStartOfDay(ZoneId.systemDefault()).toInstant()); break; case WEEKS: - lockedInUntilLocalDate = activationLocalDate.plusWeeks(this.lockinPeriodFrequency).toDate(); + lockedInUntilLocalDate = Date + .from(activationLocalDate.plusWeeks(this.lockinPeriodFrequency).atStartOfDay(ZoneId.systemDefault()).toInstant()); break; case MONTHS: - lockedInUntilLocalDate = activationLocalDate.plusMonths(this.lockinPeriodFrequency).toDate(); + lockedInUntilLocalDate = Date + .from(activationLocalDate.plusMonths(this.lockinPeriodFrequency).atStartOfDay(ZoneId.systemDefault()).toInstant()); break; case YEARS: - lockedInUntilLocalDate = activationLocalDate.plusYears(this.lockinPeriodFrequency).toDate(); + lockedInUntilLocalDate = Date + .from(activationLocalDate.plusYears(this.lockinPeriodFrequency).atStartOfDay(ZoneId.systemDefault()).toInstant()); break; case WHOLE_TERM: LOG.error("TODO Implement calculateDateAccountIsLockedUntil for WHOLE_TERM"); @@ -2413,7 +2419,7 @@ public class SavingsAccount extends AbstractPersistableCustom { } public LocalDate getClosedOnDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.closedOnDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.closedOnDate.toInstant(), ZoneId.systemDefault()), null); } public SavingsAccountSummary getSummary() { @@ -2562,11 +2568,11 @@ public class SavingsAccount extends AbstractPersistableCustom { if (savingsAccountCharge.isOnSpecifiedDueDate()) { if (getActivationLocalDate() != null && chargeDueDate.isBefore(getActivationLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(getActivationLocalDate().toString(formatter)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(getActivationLocalDate().format(formatter)) .failWithCodeNoParameterAddedToErrorCode("before.activationDate"); throw new PlatformApiDataValidationException(dataValidationErrors); } else if (getSubmittedOnLocalDate() != null && chargeDueDate.isBefore(getSubmittedOnLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(getSubmittedOnLocalDate().toString(formatter)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(getSubmittedOnLocalDate().format(formatter)) .failWithCodeNoParameterAddedToErrorCode("before.submittedOnDate"); throw new PlatformApiDataValidationException(dataValidationErrors); } @@ -2660,13 +2666,13 @@ public class SavingsAccount extends AbstractPersistableCustom { } if (getActivationLocalDate() != null && transactionDate.isBefore(getActivationLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(getActivationLocalDate().toString(formatter)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(getActivationLocalDate().format(formatter)) .failWithCodeNoParameterAddedToErrorCode("transaction.before.activationDate"); throw new PlatformApiDataValidationException(dataValidationErrors); } if (DateUtils.isDateInTheFuture(transactionDate)) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.toString(formatter)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.format(formatter)) .failWithCodeNoParameterAddedToErrorCode("transaction.is.futureDate"); throw new PlatformApiDataValidationException(dataValidationErrors); } @@ -2690,8 +2696,9 @@ public class SavingsAccount extends AbstractPersistableCustom { } Date currentAnnualFeeNextDueDate = findLatestAnnualFeeTransactionDueDate(); - if (currentAnnualFeeNextDueDate != null && new LocalDate(currentAnnualFeeNextDueDate).isEqual(transactionDate)) { - baseDataValidator.reset().parameter("dueDate").value(transactionDate.toString(formatter)) + if (currentAnnualFeeNextDueDate != null + && LocalDate.ofInstant(currentAnnualFeeNextDueDate.toInstant(), ZoneId.systemDefault()).isEqual(transactionDate)) { + baseDataValidator.reset().parameter("dueDate").value(transactionDate.format(formatter)) .failWithCodeNoParameterAddedToErrorCode("transaction.exists.on.date"); throw new PlatformApiDataValidationException(dataValidationErrors); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountAssembler.java index 6642baf32..a1bffb149 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountAssembler.java @@ -45,6 +45,7 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withdraw import com.google.gson.JsonElement; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Arrays; import java.util.Set; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -70,7 +71,6 @@ import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java index c369a6874..db2a53a7b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java @@ -29,6 +29,10 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import jakarta.validation.constraints.NotNull; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.MonthDay; +import java.time.ZoneId; +import java.time.temporal.ChronoField; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -49,8 +53,6 @@ import org.apache.fineract.portfolio.charge.domain.Charge; import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.apache.fineract.portfolio.charge.exception.SavingsAccountChargeWithoutMandatoryFieldException; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -187,7 +189,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { defaultUserMessage, chargeDefinition.getId(), chargeDefinition.getName()); } - this.feeOnMonth = feeOnMonthDay.getMonthOfYear(); + this.feeOnMonth = feeOnMonthDay.getMonthValue(); this.feeOnDay = feeOnMonthDay.getDayOfMonth(); } else if (isWeeklyFee()) { @@ -199,7 +201,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { /** * For Weekly fee feeOnDay is ISO standard day of the week. Monday=1, Tuesday=2 */ - this.feeOnDay = dueDate.getDayOfWeek(); + this.feeOnDay = dueDate.get(ChronoField.DAY_OF_WEEK); } else { this.feeOnDay = null; this.feeOnMonth = null; @@ -210,7 +212,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { this.feeInterval = (feeInterval == null) ? chargeDefinition.feeInterval() : feeInterval; } - this.dueDate = (dueDate == null) ? null : dueDate.toDate(); + this.dueDate = (dueDate == null) ? null : Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.chargeCalculation = chargeDefinition.getChargeCalculation(); if (chargeCalculation != null) { @@ -391,14 +393,14 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { public void update(final BigDecimal amount, final LocalDate dueDate, final MonthDay feeOnMonthDay, final Integer feeInterval) { final BigDecimal transactionAmount = BigDecimal.ZERO; if (dueDate != null) { - this.dueDate = dueDate.toDate(); + this.dueDate = Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (isWeeklyFee()) { - this.feeOnDay = dueDate.getDayOfWeek(); + this.feeOnDay = dueDate.get(ChronoField.DAY_OF_WEEK); } } if (feeOnMonthDay != null) { - this.feeOnMonth = feeOnMonthDay.getMonthOfYear(); + this.feeOnMonth = feeOnMonthDay.getMonthValue(); this.feeOnDay = feeOnMonthDay.getDayOfMonth(); } @@ -453,9 +455,9 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { actualChanges.put(localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(dueAsOfDateParamName); - this.dueDate = newValue.toDate(); + this.dueDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (this.isWeeklyFee()) { - this.feeOnDay = newValue.getDayOfWeek(); + this.feeOnDay = newValue.get(ChronoField.DAY_OF_WEEK); } } @@ -469,7 +471,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { this.feeOnDay = dayOfMonthValue; } - final Integer monthOfYear = monthDay.getMonthOfYear(); + final Integer monthOfYear = monthDay.getMonthValue(); if (!this.feeOnMonth.equals(monthOfYear)) { actualChanges.put(feeOnMonthDayParamName, actualValueEntered); actualChanges.put(localeParamName, localeAsInput); @@ -523,7 +525,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { public LocalDate getDueLocalDate() { LocalDate dueDate = null; if (this.dueDate != null) { - dueDate = new LocalDate(this.dueDate); + dueDate = LocalDate.ofInstant(this.dueDate.toInstant(), ZoneId.systemDefault()); } return dueDate; } @@ -758,14 +760,14 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { public void updateToNextDueDateFrom(final LocalDate startingDate) { if (isAnnualFee() || isMonthlyFee() || isWeeklyFee()) { - this.dueDate = getNextDueDateFrom(startingDate).toDate(); + this.dueDate = Date.from(getNextDueDateFrom(startingDate).atStartOfDay(ZoneId.systemDefault()).toInstant()); } } public LocalDate getNextDueDateFrom(final LocalDate startingDate) { LocalDate nextDueLocalDate = null; if (isAnnualFee() || isMonthlyFee()) { - nextDueLocalDate = startingDate.withMonthOfYear(this.feeOnMonth); + nextDueLocalDate = startingDate.withMonth(this.feeOnMonth); nextDueLocalDate = setDayOfMonth(nextDueLocalDate); while (startingDate.isAfter(nextDueLocalDate)) { nextDueLocalDate = calculateNextDueDate(nextDueLocalDate); @@ -784,7 +786,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { private LocalDate calculateNextDueDate(final LocalDate date) { LocalDate nextDueLocalDate = null; if (isAnnualFee()) { - nextDueLocalDate = date.withMonthOfYear(this.feeOnMonth).plusYears(1); + nextDueLocalDate = date.withMonth(this.feeOnMonth).plusYears(1); nextDueLocalDate = setDayOfMonth(nextDueLocalDate); } else if (isMonthlyFee()) { nextDueLocalDate = date.plusMonths(this.feeInterval); @@ -797,32 +799,32 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { } private LocalDate setDayOfMonth(LocalDate nextDueLocalDate) { - int maxDayOfMonth = nextDueLocalDate.dayOfMonth().withMaximumValue().getDayOfMonth(); + int maxDayOfMonth = nextDueLocalDate.lengthOfMonth(); int newDayOfMonth = (this.feeOnDay.intValue() < maxDayOfMonth) ? this.feeOnDay.intValue() : maxDayOfMonth; nextDueLocalDate = nextDueLocalDate.withDayOfMonth(newDayOfMonth); return nextDueLocalDate; } private LocalDate setDayOfWeek(LocalDate nextDueLocalDate) { - if (this.feeOnDay != nextDueLocalDate.getDayOfWeek()) { - nextDueLocalDate = nextDueLocalDate.withDayOfWeek(this.feeOnDay); + if (this.feeOnDay != nextDueLocalDate.get(ChronoField.DAY_OF_WEEK)) { + nextDueLocalDate = nextDueLocalDate.with(ChronoField.DAY_OF_WEEK, this.feeOnDay); } return nextDueLocalDate; } public void updateNextDueDateForRecurringFees() { if (isAnnualFee() || isMonthlyFee() || isWeeklyFee()) { - LocalDate nextDueLocalDate = new LocalDate(dueDate); + LocalDate nextDueLocalDate = LocalDate.ofInstant(dueDate.toInstant(), ZoneId.systemDefault()); nextDueLocalDate = calculateNextDueDate(nextDueLocalDate); - this.dueDate = nextDueLocalDate.toDate(); + this.dueDate = Date.from(nextDueLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } public void updateToPreviousDueDate() { if (isAnnualFee() || isMonthlyFee() || isWeeklyFee()) { - LocalDate nextDueLocalDate = new LocalDate(dueDate); + LocalDate nextDueLocalDate = LocalDate.ofInstant(dueDate.toInstant(), ZoneId.systemDefault()); if (isAnnualFee()) { - nextDueLocalDate = nextDueLocalDate.withMonthOfYear(this.feeOnMonth).minusYears(1); + nextDueLocalDate = nextDueLocalDate.withMonth(this.feeOnMonth).minusYears(1); nextDueLocalDate = setDayOfMonth(nextDueLocalDate); } else if (isMonthlyFee()) { nextDueLocalDate = nextDueLocalDate.minusMonths(this.feeInterval); @@ -832,7 +834,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { nextDueLocalDate = setDayOfWeek(nextDueLocalDate); } - this.dueDate = nextDueLocalDate.toDate(); + this.dueDate = Date.from(nextDueLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -862,7 +864,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { } public void inactiavateCharge(final LocalDate inactivationOnDate) { - this.inactivationDate = inactivationOnDate.toDate(); + this.inactivationDate = Date.from(inactivationOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.status = false; this.amountOutstanding = BigDecimal.ZERO; this.paid = true; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountChargeAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountChargeAssembler.java index 71baa744d..33203a4c3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountChargeAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountChargeAssembler.java @@ -33,6 +33,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -48,8 +50,6 @@ import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.apache.fineract.portfolio.charge.exception.ChargeCannotBeAppliedToException; import org.apache.fineract.portfolio.charge.exception.SavingsAccountChargeNotFoundException; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainService.java index 389a01165..735406f54 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainService.java @@ -19,11 +19,11 @@ package org.apache.fineract.portfolio.savings.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Set; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.savings.SavingsTransactionBooleanValues; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; public interface SavingsAccountDomainService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java index 599f5e8b5..81ead6988 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountDomainServiceJpa.java @@ -20,6 +20,8 @@ package org.apache.fineract.portfolio.savings.domain; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -42,8 +44,6 @@ import org.apache.fineract.portfolio.savings.SavingsTransactionBooleanValues; import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionDTO; import org.apache.fineract.portfolio.savings.exception.DepositAccountTransactionNotAllowedException; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountSummary.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountSummary.java index 9bc437bff..ef9f5accf 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountSummary.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountSummary.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.savings.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.List; import javax.persistence.Column; @@ -30,7 +32,6 @@ import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.savings.domain.interest.PostingPeriod; -import org.joda.time.LocalDate; /** * {@link SavingsAccountSummary} encapsulates all the summary details of a {@link SavingsAccount}. @@ -115,7 +116,7 @@ public final class SavingsAccountSummary { interestEarned = interestEarned == null ? Money.zero(currency) : interestEarned; totalEarned = totalEarned.plus(interestEarned); } - this.lastInterestCalculationDate = interestCalculationDate.toDate(); + this.lastInterestCalculationDate = Date.from(interestCalculationDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.totalInterestEarned = totalEarned.getAmount(); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransaction.java index bb7269d96..09cb92838 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransaction.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.savings.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -51,7 +53,6 @@ import org.apache.fineract.portfolio.savings.domain.interest.EndOfDayBalance; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; import org.apache.fineract.portfolio.tax.domain.TaxComponent; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.util.CollectionUtils; /** @@ -290,7 +291,7 @@ public final class SavingsAccountTransaction extends AbstractPersistableCustom { this.savingsAccount = savingsAccount; this.office = office; this.typeOf = typeOf; - this.dateOf = transactionLocalDate.toDate(); + this.dateOf = Date.from(transactionLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.amount = amount; this.reversed = isReversed; this.paymentDetail = paymentDetail; @@ -315,7 +316,7 @@ public final class SavingsAccountTransaction extends AbstractPersistableCustom { } public LocalDate transactionLocalDate() { - return new LocalDate(this.dateOf); + return LocalDate.ofInstant(this.dateOf.toInstant(), ZoneId.systemDefault()); } public void reverse() { @@ -429,9 +430,9 @@ public final class SavingsAccountTransaction extends AbstractPersistableCustom { public void updateCumulativeBalanceAndDates(final MonetaryCurrency currency, final LocalDate endOfBalanceDate) { // balance end date should not be before transaction date if (endOfBalanceDate != null && endOfBalanceDate.isBefore(this.transactionLocalDate())) { - this.balanceEndDate = this.transactionLocalDate().toDate(); + this.balanceEndDate = Date.from(this.transactionLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); } else if (endOfBalanceDate != null) { - this.balanceEndDate = endOfBalanceDate.toDate(); + this.balanceEndDate = Date.from(endOfBalanceDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.balanceEndDate = null; } @@ -440,11 +441,11 @@ public final class SavingsAccountTransaction extends AbstractPersistableCustom { } public LocalDate getTransactionLocalDate() { - return new LocalDate(this.dateOf); + return LocalDate.ofInstant(this.dateOf.toInstant(), ZoneId.systemDefault()); } public LocalDate getEndOfBalanceLocalDate() { - return balanceEndDate == null ? null : new LocalDate(balanceEndDate); + return balanceEndDate == null ? null : LocalDate.ofInstant(balanceEndDate.toInstant(), ZoneId.systemDefault()); } public boolean isAcceptableForDailyBalance(final LocalDateInterval interestPeriodInterval) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsHelper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsHelper.java index b6fb0bbfc..e5630fde7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsHelper.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.savings.domain; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -29,7 +31,6 @@ import org.apache.fineract.portfolio.account.service.AccountTransfersReadPlatfor import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; import org.apache.fineract.portfolio.savings.domain.interest.CompoundInterestHelper; import org.apache.fineract.portfolio.savings.domain.interest.PostingPeriod; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -91,26 +92,26 @@ public final class SavingsHelper { Integer financialYearBeginningMonth) { LocalDate periodEndDate = interestPostingUpToDate; - final Integer monthOfYear = periodStartDate.getMonthOfYear(); + final Integer monthOfYear = periodStartDate.getMonthValue(); financialYearBeginningMonth--; if (financialYearBeginningMonth == 0) { financialYearBeginningMonth = 12; } final ArrayList quarterlyDates = new ArrayList<>(); - quarterlyDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).dayOfMonth().withMaximumValue()); - quarterlyDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).plusMonths(3).withYear(periodStartDate.getYear()) - .dayOfMonth().withMaximumValue()); - quarterlyDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).plusMonths(6).withYear(periodStartDate.getYear()) - .dayOfMonth().withMaximumValue()); - quarterlyDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).plusMonths(9).withYear(periodStartDate.getYear()) - .dayOfMonth().withMaximumValue()); + quarterlyDates.add(periodStartDate.withMonth(financialYearBeginningMonth).with(TemporalAdjusters.lastDayOfMonth())); + quarterlyDates.add(periodStartDate.withMonth(financialYearBeginningMonth).plusMonths(3).withYear(periodStartDate.getYear()) + .with(TemporalAdjusters.lastDayOfMonth())); + quarterlyDates.add(periodStartDate.withMonth(financialYearBeginningMonth).plusMonths(6).withYear(periodStartDate.getYear()) + .with(TemporalAdjusters.lastDayOfMonth())); + quarterlyDates.add(periodStartDate.withMonth(financialYearBeginningMonth).plusMonths(9).withYear(periodStartDate.getYear()) + .with(TemporalAdjusters.lastDayOfMonth())); Collections.sort(quarterlyDates); final ArrayList biannualDates = new ArrayList<>(); - biannualDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).dayOfMonth().withMaximumValue()); - biannualDates.add(periodStartDate.withMonthOfYear(financialYearBeginningMonth).plusMonths(6).withYear(periodStartDate.getYear()) - .dayOfMonth().withMaximumValue()); + biannualDates.add(periodStartDate.withMonth(financialYearBeginningMonth).with(TemporalAdjusters.lastDayOfMonth())); + biannualDates.add(periodStartDate.withMonth(financialYearBeginningMonth).plusMonths(6).withYear(periodStartDate.getYear()) + .with(TemporalAdjusters.lastDayOfMonth())); Collections.sort(biannualDates); boolean isEndDateSet = false; @@ -119,7 +120,7 @@ public final class SavingsHelper { break; case MONTHLY: // produce period end date on last day of current month - periodEndDate = periodStartDate.dayOfMonth().withMaximumValue(); + periodEndDate = periodStartDate.with(TemporalAdjusters.lastDayOfMonth()); break; case QUATERLY: for (LocalDate quarterlyDate : quarterlyDates) { @@ -131,7 +132,7 @@ public final class SavingsHelper { } if (!isEndDateSet) { - periodEndDate = quarterlyDates.get(0).plusYears(1).dayOfMonth().withMaximumValue(); + periodEndDate = quarterlyDates.get(0).plusYears(1).with(TemporalAdjusters.lastDayOfMonth()); } break; case BIANNUAL: @@ -144,17 +145,17 @@ public final class SavingsHelper { } if (!isEndDateSet) { - periodEndDate = biannualDates.get(0).plusYears(1).dayOfMonth().withMaximumValue(); + periodEndDate = biannualDates.get(0).plusYears(1).with(TemporalAdjusters.lastDayOfMonth()); } break; case ANNUAL: if (financialYearBeginningMonth < monthOfYear) { - periodEndDate = periodStartDate.withMonthOfYear(financialYearBeginningMonth); + periodEndDate = periodStartDate.withMonth(financialYearBeginningMonth); periodEndDate = periodEndDate.plusYears(1); } else { - periodEndDate = periodStartDate.withMonthOfYear(financialYearBeginningMonth); + periodEndDate = periodStartDate.withMonth(financialYearBeginningMonth); } - periodEndDate = periodEndDate.dayOfMonth().withMaximumValue(); + periodEndDate = periodEndDate.with(TemporalAdjusters.lastDayOfMonth()); break; } // interest posting always occurs on next day after the period end date. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsOfficerAssignmentHistory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsOfficerAssignmentHistory.java index ee654ba6c..80bfe6373 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsOfficerAssignmentHistory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsOfficerAssignmentHistory.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.savings.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -29,7 +31,6 @@ import javax.persistence.TemporalType; import org.apache.commons.lang3.ObjectUtils; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.organisation.staff.domain.Staff; -import org.joda.time.LocalDate; @Entity @Table(name = "m_savings_officer_assignment_history") @@ -53,7 +54,8 @@ public class SavingsOfficerAssignmentHistory extends AbstractAuditableCustom { public static SavingsOfficerAssignmentHistory createNew(final SavingsAccount account, final Staff savingsOfficer, final LocalDate assignmentDate) { - return new SavingsOfficerAssignmentHistory(account, savingsOfficer, assignmentDate.toDate(), null); + return new SavingsOfficerAssignmentHistory(account, savingsOfficer, + Date.from(assignmentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), null); } protected SavingsOfficerAssignmentHistory() { @@ -77,11 +79,11 @@ public class SavingsOfficerAssignmentHistory extends AbstractAuditableCustom { } public void updateStartDate(final LocalDate startDate) { - this.startDate = startDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateEndDate(final LocalDate endDate) { - this.endDate = endDate.toDate(); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public boolean matchesStartDateOf(final LocalDate matchingDate) { @@ -89,7 +91,7 @@ public class SavingsOfficerAssignmentHistory extends AbstractAuditableCustom { } public LocalDate getStartDate() { - return new LocalDate(this.startDate); + return LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } public boolean hasStartDateBefore(final LocalDate matchingDate) { @@ -107,11 +109,11 @@ public class SavingsOfficerAssignmentHistory extends AbstractAuditableCustom { * @return */ public boolean isEndDateAfter(final LocalDate compareDate) { - return this.endDate == null ? false : new LocalDate(this.endDate).isAfter(compareDate); + return this.endDate == null ? false : LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()).isAfter(compareDate); } public LocalDate getEndDate() { - return ObjectUtils.defaultIfNull(new LocalDate(this.endDate), null); + return ObjectUtils.defaultIfNull(LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()), null); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProduct.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProduct.java index b736fa2eb..d0de0ed3c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProduct.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProduct.java @@ -53,6 +53,7 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withdraw import com.google.gson.JsonArray; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashMap; @@ -88,7 +89,6 @@ import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; import org.apache.fineract.portfolio.tax.domain.TaxGroup; -import org.joda.time.LocalDate; @Entity @Table(name = "m_savings_product", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "sp_unq_name"), diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProductChargeAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProductChargeAssembler.java index 7a8f5abe4..28fc5e097 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProductChargeAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProductChargeAssembler.java @@ -32,6 +32,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.HashSet; import java.util.Locale; import java.util.Set; @@ -41,8 +43,6 @@ import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType; import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.apache.fineract.portfolio.charge.exception.SavingsAccountChargeNotFoundException; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java index a3426b88b..45ce4b6e0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/AnnualCompoundingPeriod.java @@ -20,13 +20,13 @@ package org.apache.fineract.portfolio.savings.domain.interest; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType; import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; -import org.joda.time.LocalDate; public final class AnnualCompoundingPeriod implements CompoundingPeriod { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java index 09f212938..20ad55506 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/BiAnnualCompoundingPeriod.java @@ -20,13 +20,13 @@ package org.apache.fineract.portfolio.savings.domain.interest; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType; import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; -import org.joda.time.LocalDate; public final class BiAnnualCompoundingPeriod implements CompoundingPeriod { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java index 777d7b2e4..3d460fef1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/CompoundInterestHelper.java @@ -19,10 +19,10 @@ package org.apache.fineract.portfolio.savings.domain.interest; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; -import org.joda.time.LocalDate; public class CompoundInterestHelper { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java index 507d1263a..c46b5518a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/DailyCompoundingPeriod.java @@ -20,12 +20,12 @@ package org.apache.fineract.portfolio.savings.domain.interest; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType; import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; -import org.joda.time.LocalDate; public final class DailyCompoundingPeriod implements CompoundingPeriod { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/EndOfDayBalance.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/EndOfDayBalance.java index 14f313e51..58b51995f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/EndOfDayBalance.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/EndOfDayBalance.java @@ -20,10 +20,10 @@ package org.apache.fineract.portfolio.savings.domain.interest; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; -import org.joda.time.LocalDate; public class EndOfDayBalance { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java index 6475ca14b..7d406d026 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/MonthlyCompoundingPeriod.java @@ -20,13 +20,13 @@ package org.apache.fineract.portfolio.savings.domain.interest; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType; import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; -import org.joda.time.LocalDate; public final class MonthlyCompoundingPeriod implements CompoundingPeriod { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java index 257b81a64..4d5a5ff02 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/PostingPeriod.java @@ -19,6 +19,9 @@ package org.apache.fineract.portfolio.savings.domain.interest; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.temporal.ChronoField; +import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -30,8 +33,6 @@ import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType; import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; public final class PostingPeriod { @@ -393,7 +394,7 @@ public final class PostingPeriod { // break; case MONTHLY: // produce period end date on last day of current month - periodEndDate = periodStartDate.dayOfMonth().withMaximumValue(); + periodEndDate = periodStartDate.with(TemporalAdjusters.lastDayOfMonth()); break; case QUATERLY: periodsInMonth = 4; @@ -405,8 +406,8 @@ public final class PostingPeriod { break; case ANNUAL: - periodEndDate = periodStartDate.withMonthOfYear(previousMonth); - periodEndDate = periodEndDate.dayOfMonth().withMaximumValue(); + periodEndDate = periodStartDate.withMonth(previousMonth); + periodEndDate = periodEndDate.with(TemporalAdjusters.lastDayOfMonth()); if (periodEndDate.isBefore(periodStartDate)) { periodEndDate = periodEndDate.plusYears(1); } @@ -414,7 +415,7 @@ public final class PostingPeriod { // case NO_COMPOUNDING_SIMPLE_INTEREST: // periodEndDate = periodStartDate.monthOfYear().withMaximumValue(); - // periodEndDate = periodEndDate.dayOfMonth().withMaximumValue(); + // periodEndDate = periodEndDate.with(TemporalAdjusters.lastDayOfMonth()); // break; } @@ -422,16 +423,16 @@ public final class PostingPeriod { } private static LocalDate getPeriodEndDate(LocalDate periodEndDate, int previousMonth, int periodsInMonth, LocalDate periodStartDate) { - int year = periodStartDate.getYearOfEra(); - int monthofYear = periodStartDate.getMonthOfYear(); + int year = periodStartDate.get(ChronoField.YEAR_OF_ERA); + int monthofYear = periodStartDate.getMonthValue(); LocalDate date = DateUtils.getLocalDateOfTenant(); TreeSet monthSet = new TreeSet<>(); - date = date.withMonthOfYear(previousMonth); - monthSet.add(date.getMonthOfYear()); + date = date.withMonth(previousMonth); + monthSet.add(date.getMonthValue()); int count = 0; while (count < (periodsInMonth - 1)) { date = date.plusMonths((12 / periodsInMonth)); - monthSet.add(date.getMonthOfYear()); + monthSet.add(date.getMonthValue()); count++; } boolean notInRange = true; @@ -443,18 +444,14 @@ public final class PostingPeriod { for (Integer month : monthSet) { if (monthofYear <= month.intValue()) { - periodEndDate = new DateTime() - .withDate(year, month, - DateUtils.getLocalDateOfTenant().withMonthOfYear(month).dayOfMonth().withMaximumValue().getDayOfMonth()) - .toLocalDate(); + periodEndDate = LocalDate.of(year, month, DateUtils.getLocalDateOfTenant().withMonth(month).lengthOfMonth()); notInRange = false; break; } } if (notInRange) { - periodEndDate = new DateTime().withDate(year + 1, monthSet.first(), - DateUtils.getLocalDateOfTenant().withMonthOfYear(monthSet.first()).dayOfMonth().withMaximumValue().getDayOfMonth()) - .toLocalDate(); + periodEndDate = LocalDate.of(year + 1, monthSet.first(), + DateUtils.getLocalDateOfTenant().withMonth(monthSet.first()).lengthOfMonth()); } return periodEndDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java index 1c316e095..c2faa8a47 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/interest/QuarterlyCompoundingPeriod.java @@ -20,13 +20,13 @@ package org.apache.fineract.portfolio.savings.domain.interest; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.domain.LocalDateInterval; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType; import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; -import org.joda.time.LocalDate; public final class QuarterlyCompoundingPeriod implements CompoundingPeriod { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java index 23af445c5..acd81ac69 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java @@ -18,12 +18,12 @@ */ package org.apache.fineract.portfolio.savings.handler; +import java.time.LocalDate; import org.apache.fineract.commands.annotation.CommandType; import org.apache.fineract.commands.handler.NewCommandSourceHandler; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java index 03442cc8a..639c3746b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountInterestRateChartReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.savings.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -43,7 +44,6 @@ import org.apache.fineract.portfolio.savings.data.DepositAccountInterestIncentiv import org.apache.fineract.portfolio.savings.data.DepositAccountInterestRateChartData; import org.apache.fineract.portfolio.savings.data.DepositAccountInterestRateChartSlabData; import org.apache.fineract.portfolio.savings.exception.DepositAccountInterestRateChartNotFoundException; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java index 0da9ca23d..082d97bb6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountOnHoldTransactionReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.savings.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.data.EnumOptionData; @@ -31,7 +32,6 @@ import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.portfolio.savings.data.DepositAccountOnHoldTransactionData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountPreMatureCalculationPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountPreMatureCalculationPlatformServiceImpl.java index 46f971223..19e0f24da 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountPreMatureCalculationPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountPreMatureCalculationPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.savings.service; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.closedOnDateParamName; import com.google.gson.JsonElement; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; import org.apache.fineract.infrastructure.core.api.JsonQuery; @@ -39,7 +40,6 @@ import org.apache.fineract.portfolio.savings.domain.DepositAccountAssembler; import org.apache.fineract.portfolio.savings.domain.FixedDepositAccount; import org.apache.fineract.portfolio.savings.domain.RecurringDepositAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountReadPlatformServiceImpl.java index f3dae1c23..50356251d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountReadPlatformServiceImpl.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.savings.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -86,9 +88,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccountStatusType; import org.apache.fineract.portfolio.savings.exception.DepositAccountNotFoundException; import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -121,7 +120,7 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead private final RecurringAccountDepositTransactionTemplateMapper rdTransactionTemplateMapper; private final DropdownReadPlatformService dropdownReadPlatformService; private final CalendarReadPlatformService calendarReadPlatformService; - private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private final PaymentTypeReadPlatformService paymentTypeReadPlatformService; // allowed column names for sorting the query result private static final Set supportedOrderByValues = new HashSet<>(Arrays.asList("id", "accountNumbr", "officeId", "officeName")); @@ -226,7 +225,7 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead LocalDate today = DateUtils.getLocalDateOfTenant(); return this.jdbcTemplate.query(sqlBuilder.toString(), this.depositAccountForMaturityRowMapper, - new Object[] { formatter.print(today), DepositAccountType.FIXED_DEPOSIT.getValue(), + new Object[] { formatter.format(today), DepositAccountType.FIXED_DEPOSIT.getValue(), DepositAccountType.RECURRING_DEPOSIT.getValue(), SavingsAccountStatusType.ACTIVE.getValue() }); } @@ -536,7 +535,7 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead return this.jdbcTemplate.queryForList(sb.toString(), SavingsAccountStatusType.ACTIVE.getValue(), CalendarEntityType.SAVINGS.getValue(), CalendarType.COLLECTION.getValue(), - formatter.print(DateUtils.getLocalDateOfTenant())); + formatter.format(DateUtils.getLocalDateOfTenant())); } private abstract static class DepositAccountMapper implements RowMapper { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformService.java index fdd5df9bc..a043fd352 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformService.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.savings.service; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException; @@ -26,7 +27,6 @@ import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.portfolio.savings.DepositAccountType; import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionDTO; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; -import org.joda.time.LocalDate; public interface DepositAccountWritePlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java index 66c36a44c..84004eb4a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositAccountWritePlatformServiceJpaRepositoryImpl.java @@ -26,6 +26,8 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.dueAsOfD import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -111,9 +113,6 @@ import org.apache.fineract.portfolio.savings.exception.InsufficientAccountBalanc import org.apache.fineract.portfolio.savings.exception.SavingsAccountTransactionNotFoundException; import org.apache.fineract.portfolio.savings.exception.TransactionUpdateNotAllowedException; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -219,7 +218,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo Money activationChargeAmount = getActivationCharge(account); if (!changes.isEmpty()) { final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); Money amountForDeposit = account.activateWithBalance().plus(activationChargeAmount); if (amountForDeposit.isGreaterThanZero()) { final PortfolioAccountData portfolioAccountData = this.accountAssociationsReadPlatformService @@ -326,7 +325,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo if (!changes.isEmpty()) { final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); Money amountForDeposit = account.activateWithBalance(); if (amountForDeposit.isGreaterThanZero()) { final PortfolioAccountData portfolioAccountData = this.accountAssociationsReadPlatformService @@ -452,7 +451,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo checkClientOrGroupActive(account); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate transactionDate = command.localDateValueOfParameterNamed("transactionDate"); final BigDecimal transactionAmount = command.bigDecimalValueOfParameterNamed("transactionAmount"); @@ -490,7 +489,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo final BigDecimal transactionAmount = command.bigDecimalValueOfParameterNamed("transactionAmount"); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final Map changes = new LinkedHashMap<>(); final PaymentDetail paymentDetail = this.paymentDetailWritePlatformService.createAndPersistPaymentDetail(command, changes); @@ -732,7 +731,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate transactionDate = command.localDateValueOfParameterNamed(SavingsApiConstants.transactionDateParamName); final BigDecimal transactionAmount = command.bigDecimalValueOfParameterNamed(SavingsApiConstants.transactionAmountParamName); final Map changes = new LinkedHashMap<>(); @@ -1088,8 +1087,8 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo final Locale locale = command.extractLocale(); final String format = command.dateFormat(); - final DateTimeFormatter fmt = StringUtils.isNotBlank(format) ? DateTimeFormat.forPattern(format).withLocale(locale) - : DateTimeFormat.forPattern("dd MM yyyy"); + final DateTimeFormatter fmt = StringUtils.isNotBlank(format) ? DateTimeFormatter.ofPattern(format).withLocale(locale) + : DateTimeFormatter.ofPattern("dd MM yyyy"); final Long chargeDefinitionId = command.longValueOfParameterNamed(chargeIdParamName); final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeDefinitionId); @@ -1100,7 +1099,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo // transaction date should not be on a holiday or non working day if (!this.configurationDomainService.allowTransactionsOnHolidayEnabled() && this.holidayRepository.isHoliday(savingsAccount.officeId(), savingsAccountCharge.getDueLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().format(fmt)) .failWithCodeNoParameterAddedToErrorCode("charge.due.date.is.on.holiday"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1109,7 +1108,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo if (!this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled() && !this.workingDaysRepository.isWorkingDay(savingsAccountCharge.getDueLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().format(fmt)) .failWithCodeNoParameterAddedToErrorCode("charge.due.date.is.a.nonworking.day"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1154,12 +1153,12 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo if (savingsAccountCharge.getDueLocalDate() != null) { final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); // transaction date should not be on a holiday or non working day if (!this.configurationDomainService.allowTransactionsOnHolidayEnabled() && this.holidayRepository.isHoliday(savingsAccount.officeId(), savingsAccountCharge.getDueLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().format(fmt)) .failWithCodeNoParameterAddedToErrorCode("charge.due.date.is.on.holiday"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1168,7 +1167,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo if (!this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled() && !this.workingDaysRepository.isWorkingDay(savingsAccountCharge.getDueLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().format(fmt)) .failWithCodeNoParameterAddedToErrorCode("charge.due.date.is.a.nonworking.day"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1276,7 +1275,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo this.savingsAccountChargeDataValidator.validatePayCharge(command.json()); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final BigDecimal amountPaid = command.bigDecimalValueOfParameterNamed(amountParamName); final LocalDate transactionDate = command.localDateValueOfParameterNamed(dueAsOfDateParamName); @@ -1290,7 +1289,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo // transaction date should not be on a holiday or non working day if (!this.configurationDomainService.allowTransactionsOnHolidayEnabled() && this.holidayRepository.isHoliday(savingsAccountCharge.savingsAccount().officeId(), transactionDate)) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.format(fmt)) .failWithCodeNoParameterAddedToErrorCode("transaction.not.allowed.transaction.date.is.on.holiday"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1299,7 +1298,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo if (!this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled() && !this.workingDaysRepository.isWorkingDay(transactionDate)) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.format(fmt)) .failWithCodeNoParameterAddedToErrorCode("transaction.not.allowed.transaction.date.is.a.nonworking.day"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1326,7 +1325,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo final SavingsAccountCharge savingsAccountCharge = this.savingsAccountChargeRepository .findOneWithNotFoundDetection(savingsAccountChargeId, accountId); - final DateTimeFormatter fmt = DateTimeFormat.forPattern("dd MM yyyy"); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd MM yyyy"); while (transactionDate.isAfter(savingsAccountCharge.getDueLocalDate())) { payCharge(savingsAccountCharge, transactionDate, savingsAccountCharge.amoutOutstanding(), fmt); @@ -1395,7 +1394,7 @@ public class DepositAccountWritePlatformServiceJpaRepositoryImpl implements Depo // handle maturity instructions if (fdAccount.isMatured() && (fdAccount.isReinvestOnClosure() || fdAccount.isTransferToSavingsOnClosure())) { - DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd"); + DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); Map changes = new HashMap<>(); AppUser user = context.authenticatedUser(); Long toSavingsId = fdAccount.getTransferToSavingsAccountId(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java index 9bcc57aeb..844eb3248 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java @@ -24,6 +24,8 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.recurri import static org.apache.fineract.portfolio.savings.DepositsApiConstants.transferInterestToSavingsParamName; import java.math.MathContext; +import java.time.LocalDate; +import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; @@ -93,7 +95,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsProduct; import org.apache.fineract.portfolio.savings.domain.SavingsProductRepository; import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -361,7 +362,7 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl final PeriodFrequencyType periodFrequencyType = PeriodFrequencyType.fromInt(frequencyType); final Integer frequency = command.integerValueSansLocaleOfParameterNamed(recurringFrequencyParamName); - final Integer repeatsOnDay = calendarStartDate.getDayOfWeek(); + final Integer repeatsOnDay = calendarStartDate.get(ChronoField.DAY_OF_WEEK); final String title = "recurring_savings_" + account.getId(); final Calendar calendar = Calendar.createRepeatingCalendar(title, calendarStartDate, CalendarType.COLLECTION.getValue(), @@ -509,7 +510,7 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl final Integer frequencyType = command.integerValueSansLocaleOfParameterNamed(recurringFrequencyTypeParamName); final PeriodFrequencyType periodFrequencyType = PeriodFrequencyType.fromInt(frequencyType); final Integer frequency = command.integerValueSansLocaleOfParameterNamed(recurringFrequencyParamName); - final Integer repeatsOnDay = calendarStartDate.getDayOfWeek(); + final Integer repeatsOnDay = calendarStartDate.get(ChronoField.DAY_OF_WEEK); CalendarInstance calendarInstance = this.calendarInstanceRepository.findByEntityIdAndEntityTypeIdAndCalendarTypeId( accountId, CalendarEntityType.SAVINGS.getValue(), CalendarType.COLLECTION.getValue()); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/GSIMReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/GSIMReadPlatformServiceImpl.java index 3c45ed7fa..f6421d8bd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/GSIMReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/GSIMReadPlatformServiceImpl.java @@ -23,6 +23,7 @@ package org.apache.fineract.portfolio.savings.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -41,7 +42,6 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountApplicationTimel import org.apache.fineract.portfolio.savings.data.SavingsAccountStatusEnumData; import org.apache.fineract.portfolio.savings.data.SavingsAccountSubStatusEnumData; import org.apache.fineract.portfolio.savings.domain.SavingsAccountStatusType; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountApplicationTransitionApiJsonValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountApplicationTransitionApiJsonValidator.java index 41bcf1909..a474de636 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountApplicationTransitionApiJsonValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountApplicationTransitionApiJsonValidator.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.savings.service; import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -33,7 +34,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountChargeReadPlatformServiceImpl.java index 52d627d7b..297750c2a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountChargeReadPlatformServiceImpl.java @@ -21,6 +21,9 @@ package org.apache.fineract.portfolio.savings.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.MonthDay; +import java.time.ZoneId; import java.util.Collection; import java.util.List; import java.util.Map; @@ -40,8 +43,6 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountAnnualFeeData; import org.apache.fineract.portfolio.savings.data.SavingsAccountChargeData; import org.apache.fineract.portfolio.savings.domain.SavingsAccountStatusType; import org.apache.fineract.portfolio.tax.data.TaxGroupData; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -123,7 +124,7 @@ public class SavingsAccountChargeReadPlatformServiceImpl implements SavingsAccou final Integer feeOnMonth = JdbcSupport.getInteger(rs, "feeOnMonth"); final Integer feeOnDay = JdbcSupport.getInteger(rs, "feeOnDay"); if (feeOnDay != null && feeOnMonth != null) { - feeOnMonthDay = new MonthDay(feeOnMonth, feeOnDay); + feeOnMonthDay = MonthDay.now(ZoneId.systemDefault()).withMonth(feeOnMonth).withDayOfMonth(feeOnDay); } final int chargeCalculation = rs.getInt("chargeCalculation"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformService.java index 379b6d287..9bfa4faf5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformService.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.savings.service; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.core.service.Page; @@ -25,7 +26,6 @@ import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.portfolio.savings.DepositAccountType; import org.apache.fineract.portfolio.savings.data.SavingsAccountData; import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionData; -import org.joda.time.LocalDate; public interface SavingsAccountReadPlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java index bc1cad8b4..565a27830 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountReadPlatformServiceImpl.java @@ -21,6 +21,9 @@ package org.apache.fineract.portfolio.savings.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -71,10 +74,6 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccountSubStatusEnum; import org.apache.fineract.portfolio.savings.exception.SavingsAccountNotFoundException; import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; @@ -94,7 +93,7 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead private final StaffReadPlatformService staffReadPlatformService; private final SavingsDropdownReadPlatformService dropdownReadPlatformService; private final ChargeReadPlatformService chargeReadPlatformService; - private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // mappers private final SavingsAccountTransactionTemplateMapper transactionTemplateMapper; @@ -384,13 +383,16 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead LocalDate localTenantDate = DateUtils.getLocalDateOfTenant(); if (isDormancyTrackingActive && statusEnum.equals(SavingsAccountStatusType.ACTIVE.getValue())) { if (subStatusEnum < SavingsAccountSubStatusEnum.ESCHEAT.getValue()) { - daysToEscheat = Days.daysBetween(localTenantDate, lastActiveTransactionDate.plusDays(numDaysToEscheat)).getDays(); + daysToEscheat = Math + .toIntExact(ChronoUnit.DAYS.between(localTenantDate, lastActiveTransactionDate.plusDays(numDaysToEscheat))); } if (subStatusEnum < SavingsAccountSubStatusEnum.DORMANT.getValue()) { - daysToDormancy = Days.daysBetween(localTenantDate, lastActiveTransactionDate.plusDays(numDaysToDormancy)).getDays(); + daysToDormancy = Math + .toIntExact(ChronoUnit.DAYS.between(localTenantDate, lastActiveTransactionDate.plusDays(numDaysToDormancy))); } if (subStatusEnum < SavingsAccountSubStatusEnum.INACTIVE.getValue()) { - daysToInactive = Days.daysBetween(localTenantDate, lastActiveTransactionDate.plusDays(numDaysToInactive)).getDays(); + daysToInactive = Math + .toIntExact(ChronoUnit.DAYS.between(localTenantDate, lastActiveTransactionDate.plusDays(numDaysToInactive))); } } @@ -1133,7 +1135,7 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead sql.append(" and sat.savings_account_id = sa.id)) >= sp.days_to_inactive "); try { - ret = this.jdbcTemplate.queryForList(sql.toString(), Long.class, new Object[] { formatter.print(tenantLocalDate) }); + ret = this.jdbcTemplate.queryForList(sql.toString(), Long.class, new Object[] { formatter.format(tenantLocalDate) }); } catch (EmptyResultDataAccessException e) { // ignore empty result scenario } catch (DataAccessException e) { @@ -1158,7 +1160,7 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead sql.append(" and sat.savings_account_id = sa.id)) >= sp.days_to_dormancy "); try { - ret = this.jdbcTemplate.queryForList(sql.toString(), Long.class, new Object[] { formatter.print(tenantLocalDate) }); + ret = this.jdbcTemplate.queryForList(sql.toString(), Long.class, new Object[] { formatter.format(tenantLocalDate) }); } catch (EmptyResultDataAccessException e) { // ignore empty result scenario } catch (DataAccessException e) { @@ -1183,7 +1185,7 @@ public class SavingsAccountReadPlatformServiceImpl implements SavingsAccountRead sql.append(" and sat.savings_account_id = sa.id)) >= sp.days_to_escheat "); try { - ret = this.jdbcTemplate.queryForList(sql.toString(), Long.class, new Object[] { formatter.print(tenantLocalDate) }); + ret = this.jdbcTemplate.queryForList(sql.toString(), Long.class, new Object[] { formatter.format(tenantLocalDate) }); } catch (EmptyResultDataAccessException e) { // ignore empty result scenario } catch (DataAccessException e) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformService.java index 30832edf3..bbc7eb98b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformService.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.savings.service; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Set; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; @@ -25,8 +27,6 @@ import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormatter; public interface SavingsAccountWritePlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java index 72efeaf63..5e5dec2d8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java @@ -30,8 +30,12 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import java.math.BigDecimal; import java.math.MathContext; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -116,9 +120,6 @@ import org.apache.fineract.portfolio.savings.exception.TransactionUpdateNotAllow import org.apache.fineract.portfolio.transfer.api.TransferApiConstants; import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUserRepositoryWrapper; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -250,7 +251,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi if (!changes.isEmpty()) { final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); processPostActiveActions(account, fmt, existingTransactionIds, existingReversedTransactionIds); this.savingAccountRepositoryWrapper.saveAndFlush(account); @@ -337,7 +338,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi final SavingsAccount account = this.savingAccountAssembler.assembleFrom(savingsId); checkClientOrGroupActive(account); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate transactionDate = command.localDateValueOfParameterNamed("transactionDate"); final BigDecimal transactionAmount = command.bigDecimalValueOfParameterNamed("transactionAmount"); @@ -401,7 +402,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi final BigDecimal transactionAmount = command.bigDecimalValueOfParameterNamed("transactionAmount"); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final Map changes = new LinkedHashMap<>(); final PaymentDetail paymentDetail = this.paymentDetailWritePlatformService.createAndPersistPaymentDetail(command, changes); @@ -452,8 +453,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi .findOneWithNotFoundDetection(savingsAccountChargeId, accountId); final LocalDate todaysDate = DateUtils.getLocalDateOfTenant(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern("dd MM yyyy"); - fmt.withZone(DateUtils.getDateTimeZoneOfTenant()); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd MM yyyy").withZone(DateUtils.getDateTimeZoneOfTenant()); while (todaysDate.isAfter(savingsAccountCharge.getDueLocalDate())) { this.payCharge(savingsAccountCharge, savingsAccountCharge.getDueLocalDate(), savingsAccountCharge.amount(), fmt, user); @@ -515,7 +515,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi } List savingTransactions = account.getTransactions(); for (SavingsAccountTransaction savingTransaction : savingTransactions) { - if (transactionDate.toDate().before(savingTransaction.getDateOf())) { + if (Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()).before(savingTransaction.getDateOf())) { throw new PostInterestAsOnDateException(PostInterestAsOnExceptionType.LAST_TRANSACTION_DATE); } } @@ -694,7 +694,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi updateExistingTransactionsDetails(account, existingTransactionIds, existingReversedTransactionIds); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate transactionDate = command.localDateValueOfParameterNamed(SavingsApiConstants.transactionDateParamName); final BigDecimal transactionAmount = command.bigDecimalValueOfParameterNamed(SavingsApiConstants.transactionAmountParamName); final Map changes = new LinkedHashMap<>(); @@ -819,7 +819,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi final boolean isWithdrawBalance = command.booleanPrimitiveValueOfParameterNamed(withdrawBalanceParamName); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final LocalDate closedDate = command.localDateValueOfParameterNamed(SavingsApiConstants.closedOnDateParamName); final boolean isPostInterest = command.booleanPrimitiveValueOfParameterNamed(SavingsApiConstants.postInterestValidationOnClosure); // postInterest(account,closedDate,flag); @@ -1009,8 +1009,8 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi final Locale locale = command.extractLocale(); final String format = command.dateFormat(); - final DateTimeFormatter fmt = StringUtils.isNotBlank(format) ? DateTimeFormat.forPattern(format).withLocale(locale) - : DateTimeFormat.forPattern("dd MM yyyy"); + final DateTimeFormatter fmt = StringUtils.isNotBlank(format) ? DateTimeFormatter.ofPattern(format).withLocale(locale) + : DateTimeFormatter.ofPattern("dd MM yyyy"); final Long chargeDefinitionId = command.longValueOfParameterNamed(chargeIdParamName); final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeDefinitionId); @@ -1019,7 +1019,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi LocalDate dueAsOfDateParam = command.localDateValueOfParameterNamed(dueAsOfDateParamName); if ((chargeTimeType.equals(ChargeTimeType.WITHDRAWAL_FEE.getValue()) || chargeTimeType.equals(ChargeTimeType.SAVINGS_NOACTIVITY_FEE.getValue())) && dueAsOfDateParam != null) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(dueAsOfDateParam.toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(dueAsOfDateParam.format(fmt)) .failWithCodeNoParameterAddedToErrorCode( "charge.due.date.is.invalid.for." + ChargeTimeType.fromInt(chargeTimeType).getCode()); } @@ -1029,13 +1029,13 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi // transaction date should not be on a holiday or non working day if (!this.configurationDomainService.allowTransactionsOnHolidayEnabled() && this.holidayRepository.isHoliday(savingsAccount.officeId(), savingsAccountCharge.getDueLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().format(fmt)) .failWithCodeNoParameterAddedToErrorCode("charge.due.date.is.on.holiday"); } if (!this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled() && !this.workingDaysRepository.isWorkingDay(savingsAccountCharge.getDueLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().format(fmt)) .failWithCodeNoParameterAddedToErrorCode("charge.due.date.is.a.nonworking.day"); } } @@ -1079,12 +1079,12 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi if (savingsAccountCharge.getDueLocalDate() != null) { final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); // transaction date should not be on a holiday or non working day if (!this.configurationDomainService.allowTransactionsOnHolidayEnabled() && this.holidayRepository.isHoliday(savingsAccount.officeId(), savingsAccountCharge.getDueLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().format(fmt)) .failWithCodeNoParameterAddedToErrorCode("charge.due.date.is.on.holiday"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1093,7 +1093,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi if (!this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled() && !this.workingDaysRepository.isWorkingDay(savingsAccountCharge.getDueLocalDate())) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(savingsAccountCharge.getDueLocalDate().format(fmt)) .failWithCodeNoParameterAddedToErrorCode("charge.due.date.is.a.nonworking.day"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1198,7 +1198,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi this.savingsAccountChargeDataValidator.validatePayCharge(command.json()); final Locale locale = command.extractLocale(); - final DateTimeFormatter fmt = DateTimeFormat.forPattern(command.dateFormat()).withLocale(locale); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); final BigDecimal amountPaid = command.bigDecimalValueOfParameterNamed(amountParamName); final LocalDate transactionDate = command.localDateValueOfParameterNamed(dueAsOfDateParamName); @@ -1212,7 +1212,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi // transaction date should not be on a holiday or non working day if (!this.configurationDomainService.allowTransactionsOnHolidayEnabled() && this.holidayRepository.isHoliday(savingsAccountCharge.savingsAccount().officeId(), transactionDate)) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.format(fmt)) .failWithCodeNoParameterAddedToErrorCode("transaction.not.allowed.transaction.date.is.on.holiday"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1221,7 +1221,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi if (!this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled() && !this.workingDaysRepository.isWorkingDay(transactionDate)) { - baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.toString(fmt)) + baseDataValidator.reset().parameter(dueAsOfDateParamName).value(transactionDate.format(fmt)) .failWithCodeNoParameterAddedToErrorCode("transaction.not.allowed.transaction.date.is.a.nonworking.day"); if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); @@ -1249,8 +1249,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi final SavingsAccountCharge savingsAccountCharge = this.savingsAccountChargeRepository .findOneWithNotFoundDetection(savingsAccountChargeId, accountId); - final DateTimeFormatter fmt = DateTimeFormat.forPattern("dd MM yyyy"); - fmt.withZone(DateUtils.getDateTimeZoneOfTenant()); + final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd MM yyyy").withZone(DateUtils.getDateTimeZoneOfTenant()); while (transactionDate.isAfter(savingsAccountCharge.getDueLocalDate()) && savingsAccountCharge.isNotFullyPaid()) { payCharge(savingsAccountCharge, transactionDate, savingsAccountCharge.amoutOutstanding(), fmt, user); @@ -1697,7 +1696,8 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi if ((transaction.getTransactionLocalDate().isEqual(transferDate) && transaction.getTransactionLocalDate().isAfter(transferDate)) || transaction.getTransactionLocalDate().isAfter(transferDate)) { throw new GeneralPlatformDomainRuleException(TransferApiConstants.transferClientSavingsException, - TransferApiConstants.transferClientSavingsException, new LocalDate(transaction.createdDate()), transferDate); + TransferApiConstants.transferClientSavingsException, + LocalDate.ofInstant(transaction.createdDate().toInstant(), ZoneId.systemDefault()), transferDate); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java index 22760d15a..ef038da66 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java @@ -23,7 +23,9 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.SAVINGS_ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import java.math.BigDecimal; +import java.time.ZoneId; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -733,7 +735,9 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl final SavingsAccount account = this.savingAccountAssembler.assembleFrom(savingsAccountDataDTO.getClient(), savingsAccountDataDTO.getGroup(), savingsAccountDataDTO.getSavingsProduct(), savingsAccountDataDTO.getApplicationDate(), savingsAccountDataDTO.getAppliedBy()); - account.approveAndActivateApplication(savingsAccountDataDTO.getApplicationDate().toDate(), savingsAccountDataDTO.getAppliedBy()); + account.approveAndActivateApplication( + Date.from(savingsAccountDataDTO.getApplicationDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), + savingsAccountDataDTO.getAppliedBy()); Money amountForDeposit = account.activateWithBalance(); final Set existingTransactionIds = new HashSet<>(); 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 b91d5dbe6..c3464de63 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 @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.savings.service; import static org.apache.fineract.portfolio.savings.domain.SavingsAccountStatusType.ACTIVE; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.infrastructure.core.service.DateUtils; @@ -29,7 +30,6 @@ import org.apache.fineract.infrastructure.jobs.service.JobName; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler; import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepositoryWrapper; -import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResourceSwagger.java index c16978e2e..87894081a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResourceSwagger.java @@ -19,8 +19,8 @@ package org.apache.fineract.portfolio.search.api; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.LocalDate; /** * Created by Kang Breder on 13/06/19. diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocQueryDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocQueryDataValidator.java index 0273be19a..c7b418105 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocQueryDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocQueryDataValidator.java @@ -22,6 +22,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.security.utils.SQLInjectionValidator; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocQuerySearchConditions.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocQuerySearchConditions.java index 4dd418e9a..208bdebac 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocQuerySearchConditions.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocQuerySearchConditions.java @@ -19,10 +19,10 @@ package org.apache.fineract.portfolio.search.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; -import org.joda.time.LocalDate; public class AdHocQuerySearchConditions { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformServiceImpl.java index 76ca12428..f70e7f1a0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformServiceImpl.java @@ -22,7 +22,9 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.ZoneId; import java.util.Collection; +import java.util.Date; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -243,18 +245,24 @@ public class SearchReadPlatformServiceImpl implements SearchReadPlatformService if (StringUtils.isNotBlank(searchConditions.getLoanDateOption())) { if (searchConditions.getLoanDateOption().equals(SearchConstants.SearchLoanDate.APPROVAL_DATE.getValue())) { checkAndUpdateWhereClause(sql); - params.addValue("loanFromDate", searchConditions.getLoanFromDate().toDate()); - params.addValue("loanToDate", searchConditions.getLoanToDate().toDate()); + params.addValue("loanFromDate", + Date.from(searchConditions.getLoanFromDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); + params.addValue("loanToDate", + Date.from(searchConditions.getLoanToDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); sql.append(" ( ml.approvedon_date between :loanFromDate and :loanToDate ) "); } else if (searchConditions.getLoanDateOption().equals(SearchConstants.SearchLoanDate.CREATED_DATE.getValue())) { checkAndUpdateWhereClause(sql); - params.addValue("loanFromDate", searchConditions.getLoanFromDate().toDate()); - params.addValue("loanToDate", searchConditions.getLoanToDate().toDate()); + params.addValue("loanFromDate", + Date.from(searchConditions.getLoanFromDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); + params.addValue("loanToDate", + Date.from(searchConditions.getLoanToDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); sql.append(" ( ml.submittedon_date between :loanFromDate and :loanToDate ) "); } else if (searchConditions.getLoanDateOption().equals(SearchConstants.SearchLoanDate.DISBURSAL_DATE.getValue())) { checkAndUpdateWhereClause(sql); - params.addValue("loanFromDate", searchConditions.getLoanFromDate().toDate()); - params.addValue("loanToDate", searchConditions.getLoanToDate().toDate()); + params.addValue("loanFromDate", + Date.from(searchConditions.getLoanFromDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); + params.addValue("loanToDate", + Date.from(searchConditions.getLoanToDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); sql.append(" ( ml.disbursedon_date between :loanFromDate and :loanToDate ) "); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfAccountTransferApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfAccountTransferApiResource.java index b3d4e4993..abce15da4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfAccountTransferApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfAccountTransferApiResource.java @@ -27,6 +27,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import java.util.Map; import javax.ws.rs.Consumes; @@ -54,7 +55,6 @@ import org.apache.fineract.portfolio.self.account.exception.DailyTPTTransactionA import org.apache.fineract.portfolio.self.account.service.SelfAccountTransferReadService; import org.apache.fineract.portfolio.self.account.service.SelfBeneficiariesTPTReadPlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/data/SelfAccountTransferDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/data/SelfAccountTransferDataValidator.java index 47fbdaedf..c95e5791a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/data/SelfAccountTransferDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/data/SelfAccountTransferDataValidator.java @@ -33,6 +33,7 @@ import static org.apache.fineract.portfolio.account.api.AccountTransfersApiConst import com.google.gson.JsonElement; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -48,7 +49,6 @@ import org.apache.fineract.infrastructure.security.service.PlatformSecurityConte import org.apache.fineract.portfolio.self.account.service.SelfAccountTransferReadService; import org.apache.fineract.portfolio.self.account.service.SelfBeneficiariesTPTReadPlatformService; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/data/SelfServiceRegistrationData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/data/SelfServiceRegistrationData.java index 9f6250033..c7779fde3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/data/SelfServiceRegistrationData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/data/SelfServiceRegistrationData.java @@ -18,8 +18,8 @@ */ package org.apache.fineract.portfolio.self.registration.data; +import java.time.LocalDate; import org.apache.fineract.portfolio.client.domain.Client; -import org.joda.time.LocalDate; public class SelfServiceRegistrationData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountApplicationTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountApplicationTimelineData.java index 947562292..04612791d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountApplicationTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountApplicationTimelineData.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.shareaccounts.data; import java.io.Serializable; -import org.joda.time.LocalDate; +import java.time.LocalDate; @SuppressWarnings("unused") public class ShareAccountApplicationTimelineData implements Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountData.java index 8a5597cdf..be2fd079b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountData.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.shareaccounts.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.accounting.glaccount.data.GLAccountData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; @@ -29,7 +30,6 @@ import org.apache.fineract.portfolio.accounts.data.AccountData; import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.products.data.ProductData; import org.apache.fineract.portfolio.savings.data.SavingsAccountData; -import org.joda.time.LocalDate; @SuppressWarnings("unused") public class ShareAccountData implements Serializable, AccountData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionData.java index ee9319bec..db58e2c4f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionData.java @@ -20,8 +20,8 @@ package org.apache.fineract.portfolio.shareaccounts.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.LocalDate; @SuppressWarnings("unused") public class ShareAccountTransactionData implements Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/serialization/ShareAccountDataSerializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/serialization/ShareAccountDataSerializer.java index d52125bb3..4479dea1c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/serialization/ShareAccountDataSerializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/serialization/ShareAccountDataSerializer.java @@ -24,6 +24,9 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -66,9 +69,6 @@ import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountTransactio import org.apache.fineract.portfolio.shareproducts.domain.ShareProduct; import org.apache.fineract.portfolio.shareproducts.domain.ShareProductRepositoryWrapper; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -211,15 +211,17 @@ public class ShareAccountDataSerializer { String accountNo = null; Long approvedShares = null; Long pendingShares = requestedShares; - BigDecimal unitPrice = shareProduct.deriveMarketPrice(applicationDate.toDate()); - ShareAccountTransaction transaction = new ShareAccountTransaction(applicationDate.toDate(), requestedShares, unitPrice); + BigDecimal unitPrice = shareProduct.deriveMarketPrice(Date.from(applicationDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); + ShareAccountTransaction transaction = new ShareAccountTransaction( + Date.from(applicationDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), requestedShares, unitPrice); Set sharesPurchased = new HashSet<>(); sharesPurchased.add(transaction); ShareAccount account = new ShareAccount(client, shareProduct, externalId, currency, savingsAccount, accountNo, approvedShares, pendingShares, sharesPurchased, allowdividendsForInactiveClients, lockinPeriod, lockPeriodEnum, minimumActivePeriod, - minimumActivePeriodEnum, charges, submittedBy, submittedDate.toDate(), approvedBy, approvedDate, rejectedBy, rejectedDate, - activatedBy, activatedDate, closedBy, closedDate, modifiedBy, modifiedDate); + minimumActivePeriodEnum, charges, submittedBy, Date.from(submittedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + approvedBy, approvedDate, rejectedBy, rejectedDate, activatedBy, activatedDate, closedBy, closedDate, modifiedBy, + modifiedDate); for (ShareAccountTransaction pur : sharesPurchased) { pur.setShareAccount(account); @@ -237,7 +239,7 @@ public class ShareAccountDataSerializer { private void createChargeTransaction(ShareAccount account) { BigDecimal totalChargeAmount = BigDecimal.ZERO; Set charges = account.getCharges(); - Date currentDate = DateUtils.getLocalDateOfTenant().toDate(); + Date currentDate = Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()); for (ShareAccountCharge charge : charges) { if (charge.isActive() && charge.isShareAccountActivation()) { charge.deriveChargeAmount(totalChargeAmount, account.getCurrency()); @@ -284,8 +286,9 @@ public class ShareAccountDataSerializer { } if (this.fromApiJsonHelper.parameterExists(ShareAccountApiConstants.submitteddate_paramname, element)) { - final Date submittedDate = this.fromApiJsonHelper - .extractLocalDateNamed(ShareAccountApiConstants.submitteddate_paramname, element).toDate(); + final Date submittedDate = Date + .from(this.fromApiJsonHelper.extractLocalDateNamed(ShareAccountApiConstants.submitteddate_paramname, element) + .atStartOfDay(ZoneId.systemDefault()).toInstant()); baseDataValidator.reset().parameter(ShareAccountApiConstants.submitteddate_paramname).value(submittedDate).notNull(); if (account.setSubmittedDate(submittedDate)) { actualChanges.put(ShareAccountApiConstants.submitteddate_paramname, submittedDate); @@ -358,8 +361,9 @@ public class ShareAccountDataSerializer { Date applicationDate = null; purchaseTransactionsList.clear(); if (this.fromApiJsonHelper.parameterExists(ShareAccountApiConstants.applicationdate_param, element)) { - applicationDate = this.fromApiJsonHelper.extractLocalDateNamed(ShareAccountApiConstants.applicationdate_param, element) - .toDate(); + applicationDate = Date + .from(this.fromApiJsonHelper.extractLocalDateNamed(ShareAccountApiConstants.applicationdate_param, element) + .atStartOfDay(ZoneId.systemDefault()).toInstant()); baseDataValidator.reset().parameter(ShareAccountApiConstants.applicationdate_param).value(applicationDate).notNull(); } else { applicationDate = existingApplicationDate; @@ -470,10 +474,11 @@ public class ShareAccountDataSerializer { baseDataValidator.failWithCodeNoParameterAddedToErrorCode("is.not.pending.for.approval"); } LocalDate approvedDate = this.fromApiJsonHelper.extractLocalDateNamed(ShareAccountApiConstants.approveddate_paramname, element); - final LocalDate submittalDate = new LocalDate(account.getSubmittedDate()); + final LocalDate submittalDate = LocalDate.ofInstant(account.getSubmittedDate().toInstant(), ZoneId.systemDefault()); if (approvedDate != null && approvedDate.isBefore(submittalDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(jsonCommand.dateFormat()).withLocale(jsonCommand.extractLocale()); - final String submittalDateAsString = formatter.print(submittalDate); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(jsonCommand.dateFormat()) + .withLocale(jsonCommand.extractLocale()); + final String submittalDateAsString = formatter.format(submittalDate); baseDataValidator.reset().parameter(ShareAccountApiConstants.approveddate_paramname).value(submittalDateAsString) .failWithCodeNoParameterAddedToErrorCode("approved.date.cannot.be.before.submitted.date"); } @@ -490,7 +495,7 @@ public class ShareAccountDataSerializer { } AppUser approvedUser = this.platformSecurityContext.authenticatedUser(); - account.approve(approvedDate.toDate(), approvedUser); + account.approve(Date.from(approvedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), approvedUser); actualChanges.put(ShareAccountApiConstants.id_paramname, account.getId()); updateTotalChargeDerived(account); return actualChanges; @@ -610,10 +615,11 @@ public class ShareAccountDataSerializer { } LocalDate activatedDate = this.fromApiJsonHelper.extractLocalDateNamed(ShareAccountApiConstants.activatedate_paramname, element); baseDataValidator.reset().parameter(ShareAccountApiConstants.activatedate_paramname).value(activatedDate).notNull(); - final LocalDate approvedDate = new LocalDate(account.getApprovedDate()); + final LocalDate approvedDate = LocalDate.ofInstant(account.getApprovedDate().toInstant(), ZoneId.systemDefault()); if (activatedDate != null && activatedDate.isBefore(approvedDate)) { - final DateTimeFormatter formatter = DateTimeFormat.forPattern(jsonCommand.dateFormat()).withLocale(jsonCommand.extractLocale()); - final String submittalDateAsString = formatter.print(approvedDate); + final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(jsonCommand.dateFormat()) + .withLocale(jsonCommand.extractLocale()); + final String submittalDateAsString = formatter.format(approvedDate); baseDataValidator.reset().parameter(ShareAccountApiConstants.activatedate_paramname).value(submittalDateAsString) .failWithCodeNoParameterAddedToErrorCode("cannot.be.before.approved.date"); } @@ -621,9 +627,10 @@ public class ShareAccountDataSerializer { throw new PlatformApiDataValidationException(dataValidationErrors); } AppUser approvedUser = this.platformSecurityContext.authenticatedUser(); - account.activate(activatedDate.toDate(), approvedUser); + account.activate(Date.from(activatedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), approvedUser); handlechargesOnActivation(account); - actualChanges.put(ShareAccountApiConstants.charges_paramname, activatedDate.toDate()); + actualChanges.put(ShareAccountApiConstants.charges_paramname, + Date.from(activatedDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); return actualChanges; } @@ -709,7 +716,7 @@ public class ShareAccountDataSerializer { Set transactions = account.getShareAccountTransactions(); for (ShareAccountTransaction transaction : transactions) { if (!transaction.isChargeTransaction()) { - LocalDate transactionDate = new LocalDate(transaction.getPurchasedDate()); + LocalDate transactionDate = LocalDate.ofInstant(transaction.getPurchasedDate().toInstant(), ZoneId.systemDefault()); if (requestedDate.isBefore(transactionDate)) { isTransactionBeforeExistingTransactions = true; break; @@ -724,8 +731,10 @@ public class ShareAccountDataSerializer { if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } - final BigDecimal unitPrice = shareProduct.deriveMarketPrice(requestedDate.toDate()); - ShareAccountTransaction purchaseTransaction = new ShareAccountTransaction(requestedDate.toDate(), sharesRequested, unitPrice); + final BigDecimal unitPrice = shareProduct + .deriveMarketPrice(Date.from(requestedDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); + ShareAccountTransaction purchaseTransaction = new ShareAccountTransaction( + Date.from(requestedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), sharesRequested, unitPrice); account.addAdditionalPurchasedShares(purchaseTransaction); handleAdditionalSharesChargeTransactions(account, purchaseTransaction); actualChanges.put(ShareAccountApiConstants.additionalshares_paramname, purchaseTransaction); @@ -866,7 +875,7 @@ public class ShareAccountDataSerializer { Set transactions = account.getShareAccountTransactions(); for (ShareAccountTransaction transaction : transactions) { if (!transaction.isChargeTransaction() && transaction.isActive()) { - LocalDate transactionDate = new LocalDate(transaction.getPurchasedDate()); + LocalDate transactionDate = LocalDate.ofInstant(transaction.getPurchasedDate().toInstant(), ZoneId.systemDefault()); if (requestedDate.isBefore(transactionDate)) { isTransactionBeforeExistingTransactions = true; break; @@ -880,9 +889,10 @@ public class ShareAccountDataSerializer { if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } - BigDecimal unitPrice = account.getShareProduct().deriveMarketPrice(requestedDate.toDate()); - ShareAccountTransaction transaction = ShareAccountTransaction.createRedeemTransaction(requestedDate.toDate(), sharesRequested, - unitPrice); + BigDecimal unitPrice = account.getShareProduct() + .deriveMarketPrice(Date.from(requestedDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); + ShareAccountTransaction transaction = ShareAccountTransaction.createRedeemTransaction( + Date.from(requestedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), sharesRequested, unitPrice); validateRedeemRequest(account, transaction, baseDataValidator, dataValidationErrors); account.addAdditionalPurchasedShares(transaction); actualChanges.put(ShareAccountApiConstants.requestedshares_paramname, transaction); @@ -903,7 +913,7 @@ public class ShareAccountDataSerializer { throw new PlatformApiDataValidationException(dataValidationErrors); } - LocalDate redeemDate = new LocalDate(redeemTransaction.getPurchasedDate()); + LocalDate redeemDate = LocalDate.ofInstant(redeemTransaction.getPurchasedDate().toInstant(), ZoneId.systemDefault()); final Integer lockinPeriod = account.getLockinPeriodFrequency(); final PeriodFrequencyType periodType = account.getLockinPeriodFrequencyType(); if (lockinPeriod == null && periodType == null) { @@ -916,7 +926,7 @@ public class ShareAccountDataSerializer { Set transactions = account.getShareAccountTransactions(); for (ShareAccountTransaction transaction : transactions) { if (transaction.isActive() && !transaction.isChargeTransaction()) { - LocalDate purchaseDate = new LocalDate(transaction.getPurchasedDate()); + LocalDate purchaseDate = LocalDate.ofInstant(transaction.getPurchasedDate().toInstant(), ZoneId.systemDefault()); LocalDate lockinDate = deriveLockinPeriodDuration(lockinPeriod, periodType, purchaseDate); if (!lockinDate.isAfter(redeemDate)) { if (transaction.isPurchasTransaction()) { @@ -1022,7 +1032,7 @@ public class ShareAccountDataSerializer { Set transactions = account.getShareAccountTransactions(); for (ShareAccountTransaction transaction : transactions) { if (!transaction.isChargeTransaction()) { - LocalDate transactionDate = new LocalDate(transaction.getPurchasedDate()); + LocalDate transactionDate = LocalDate.ofInstant(transaction.getPurchasedDate().toInstant(), ZoneId.systemDefault()); if (closedDate.isBefore(transactionDate)) { isTransactionBeforeExistingTransactions = true; break; @@ -1040,10 +1050,10 @@ public class ShareAccountDataSerializer { AppUser approvedUser = this.platformSecurityContext.authenticatedUser(); final BigDecimal unitPrice = account.getShareProduct().deriveMarketPrice(DateUtils.getDateOfTenant()); - ShareAccountTransaction transaction = ShareAccountTransaction.createRedeemTransaction(closedDate.toDate(), - account.getTotalApprovedShares(), unitPrice); + ShareAccountTransaction transaction = ShareAccountTransaction.createRedeemTransaction( + Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), account.getTotalApprovedShares(), unitPrice); account.addAdditionalPurchasedShares(transaction); - account.close(closedDate.toDate(), approvedUser); + account.close(Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), approvedUser); handleRedeemSharesChargeTransactions(account, transaction); actualChanges.put(ShareAccountApiConstants.requestedshares_paramname, transaction); return actualChanges; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/PurchasedSharesReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/PurchasedSharesReadPlatformServiceImpl.java index fdc300f80..27301043e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/PurchasedSharesReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/PurchasedSharesReadPlatformServiceImpl.java @@ -21,12 +21,12 @@ package org.apache.fineract.portfolio.shareaccounts.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountTransactionData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; @@ -65,7 +65,7 @@ public class PurchasedSharesReadPlatformServiceImpl implements PurchasedSharesRe public ShareAccountTransactionData mapRow(ResultSet rs, int rowNum) throws SQLException { final Long id = rs.getLong("id"); final Long accountId = rs.getLong("account_id"); - final LocalDate purchasedDate = new LocalDate(rs.getDate("transaction_date")); + final LocalDate purchasedDate = rs.getDate("transaction_date").toLocalDate(); final Long numberOfShares = JdbcSupport.getLong(rs, "total_shares"); final BigDecimal purchasedPrice = rs.getBigDecimal("unit_price"); final Integer status = rs.getInt("status_enum"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformService.java index 92d11bb38..963d46508 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformService.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.shareaccounts.service; +import java.time.LocalDate; import java.util.Collection; import java.util.Set; import org.apache.fineract.portfolio.accounts.service.AccountReadPlatformService; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountData; -import org.joda.time.LocalDate; public interface ShareAccountReadPlatformService extends AccountReadPlatformService { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformServiceImpl.java index 691495ff7..622a84e53 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformServiceImpl.java @@ -21,6 +21,9 @@ package org.apache.fineract.portfolio.shareaccounts.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -59,9 +62,6 @@ import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountStatusType import org.apache.fineract.portfolio.shareproducts.data.ShareProductData; import org.apache.fineract.portfolio.shareproducts.data.ShareProductMarketPriceData; import org.apache.fineract.portfolio.shareproducts.service.ShareProductDropdownReadPlatformService; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.dao.EmptyResultDataAccessException; @@ -80,7 +80,7 @@ public class ShareAccountReadPlatformServiceImpl implements ShareAccountReadPlat private final ShareAccountChargeReadPlatformService shareAccountChargeReadPlatformService; private final PurchasedSharesReadPlatformService purchasedSharesReadPlatformService; private final JdbcTemplate jdbcTemplate; - private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private final PaginationHelper shareAccountDataPaginationHelper = new PaginationHelper<>(); @Autowired @@ -225,7 +225,7 @@ public class ShareAccountReadPlatformServiceImpl implements ShareAccountReadPlat sb.append(" and (sa.status_enum = ? or (sa.status_enum = ? "); sb.append(" and sa.closed_date > ?)) "); params.add(ShareAccountStatusType.CLOSED.getValue()); - params.add(formatter.print(startDate)); + params.add(formatter.format(startDate)); } else { sb.append(" and sa.status_enum = ? "); } @@ -456,7 +456,7 @@ public class ShareAccountReadPlatformServiceImpl implements ShareAccountReadPlat public ShareAccountTransactionData mapRow(ResultSet rs, @SuppressWarnings("unused") int rowNum) throws SQLException { final Long id = rs.getLong("purchasedId"); final Long accountId = rs.getLong("accountId"); - final LocalDate transactionDate = new LocalDate(rs.getDate("transactionDate")); + final LocalDate transactionDate = rs.getDate("transactionDate").toLocalDate(); final Long numberOfShares = JdbcSupport.getLong(rs, "purchasedShares"); final BigDecimal purchasedPrice = rs.getBigDecimal("unitPrice"); final Integer status = rs.getInt("purchaseStatus"); @@ -491,7 +491,8 @@ public class ShareAccountReadPlatformServiceImpl implements ShareAccountReadPlat @Override public ShareAccountDividendData mapRow(ResultSet rs, int rowNum) throws SQLException { final Long id = rs.getLong("id"); - final Date postedDate = JdbcSupport.getLocalDate(rs, "created_date").toDate(); + final Date postedDate = Date + .from(JdbcSupport.getLocalDate(rs, "created_date").atStartOfDay(ZoneId.systemDefault()).toInstant()); final BigDecimal postedAmount = JdbcSupport.getBigDecimalDefaultToNullIfZero(rs, "amount"); final Long savingTransactionId = rs.getLong("savings_transaction_id"); final Integer status = rs.getInt("status"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountWritePlatformServiceJpaRepositoryImpl.java index ac43843ea..4c5a9a1c4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountWritePlatformServiceJpaRepositoryImpl.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.shareaccounts.service; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -56,7 +58,6 @@ import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountTransactio import org.apache.fineract.portfolio.shareaccounts.serialization.ShareAccountDataSerializer; import org.apache.fineract.portfolio.shareproducts.domain.ShareProduct; import org.apache.fineract.portfolio.shareproducts.domain.ShareProductRepositoryWrapper; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; @@ -150,7 +151,7 @@ public class ShareAccountWritePlatformServiceJpaRepositoryImpl implements ShareA final Map transactionDto = new HashMap<>(); transactionDto.put("officeId", account.getOfficeId()); transactionDto.put("id", transaction.getId()); - transactionDto.put("date", new LocalDate(transaction.getPurchasedDate())); + transactionDto.put("date", LocalDate.ofInstant(transaction.getPurchasedDate().toInstant(), ZoneId.systemDefault())); final Integer status = transaction.getTransactionStatus(); final ShareAccountTransactionEnumData statusEnum = new ShareAccountTransactionEnumData(status.longValue(), null, null); final Integer type = transaction.getTransactionType(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/data/ShareProductDividendPayOutData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/data/ShareProductDividendPayOutData.java index 68f99b892..685fe6af8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/data/ShareProductDividendPayOutData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/data/ShareProductDividendPayOutData.java @@ -19,10 +19,10 @@ package org.apache.fineract.portfolio.shareproducts.data; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountDividendData; -import org.joda.time.LocalDate; public class ShareProductDividendPayOutData { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java index 23aa8c86b..0bdb37ea5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.shareproducts.domain; import java.math.BigDecimal; import java.time.Instant; +import java.time.ZonedDateTime; import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -46,7 +47,6 @@ import org.apache.fineract.portfolio.charge.domain.Charge; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; import org.apache.fineract.portfolio.shareproducts.data.ShareProductMarketPriceData; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; @SuppressWarnings("serial") @Entity @@ -137,8 +137,8 @@ public class ShareProduct extends AbstractAuditableCustom { final BigDecimal shareCapital, final Long minimumShares, final Long nominalShares, final Long maximumShares, Set marketPrice, Set charges, final Boolean allowDividendCalculationForInactiveClients, final Integer lockinPeriod, final PeriodFrequencyType lockPeriodType, final Integer minimumActivePeriod, - final PeriodFrequencyType minimumActivePeriodForDividendsType, AppUser createdBy, DateTime createdDate, AppUser lastModifiedBy, - DateTime lastModifiedDate, final AccountingRuleType accountingRuleType) { + final PeriodFrequencyType minimumActivePeriodForDividendsType, AppUser createdBy, ZonedDateTime createdDate, + AppUser lastModifiedBy, ZonedDateTime lastModifiedDate, final AccountingRuleType accountingRuleType) { this.name = name; this.shortName = shortName; @@ -160,9 +160,9 @@ public class ShareProduct extends AbstractAuditableCustom { this.minimumActivePeriod = minimumActivePeriod; this.minimumActivePeriodType = minimumActivePeriodForDividendsType; setCreatedBy(createdBy); - setCreatedDate(Instant.ofEpochMilli(createdDate.getMillis())); + setCreatedDate(Instant.ofEpochMilli(createdDate.toInstant().toEpochMilli())); setLastModifiedBy(lastModifiedBy); - setLastModifiedDate(Instant.ofEpochMilli(lastModifiedDate.getMillis())); + setLastModifiedDate(Instant.ofEpochMilli(lastModifiedDate.toInstant().toEpochMilli())); startDate = DateUtils.getDateOfTenant(); endDate = DateUtils.getDateOfTenant(); if (accountingRuleType != null) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java index 4940053f7..2e1027f0b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.shareproducts.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -33,7 +35,6 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountDividendDetails; -import org.joda.time.LocalDate; @Entity @Table(name = "m_share_product_dividend_pay_out") @@ -76,7 +77,7 @@ public class ShareProductDividendPayOutDetails extends AbstractAuditableCustom { public LocalDate getDividendPeriodEndDateAsLocalDate() { LocalDate dividendPeriodEndDate = null; if (this.dividendPeriodEndDate != null) { - dividendPeriodEndDate = new LocalDate(this.dividendPeriodEndDate); + dividendPeriodEndDate = LocalDate.ofInstant(this.dividendPeriodEndDate.toInstant(), ZoneId.systemDefault()); } return dividendPeriodEndDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/serialization/ShareProductDataSerializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/serialization/ShareProductDataSerializer.java index 23d5aed69..0d0b24de5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/serialization/ShareProductDataSerializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/serialization/ShareProductDataSerializer.java @@ -24,8 +24,12 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -53,8 +57,6 @@ import org.apache.fineract.portfolio.shareproducts.data.ShareProductMarketPriceD import org.apache.fineract.portfolio.shareproducts.domain.ShareProduct; import org.apache.fineract.portfolio.shareproducts.domain.ShareProductMarketPrice; import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -187,8 +189,8 @@ public class ShareProductDataSerializer { AppUser createdBy = platformSecurityContext.authenticatedUser(); AppUser modifiedBy = createdBy; - DateTime createdDate = DateUtils.getLocalDateTimeOfTenant().toDateTime(); - DateTime modifiedOn = createdDate; + ZonedDateTime createdDate = DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()); + ZonedDateTime modifiedOn = createdDate; ShareProduct product = new ShareProduct(productName, shortName, description, externalId, currency, totalNumberOfShares, sharesIssued, unitPrice, shareCapitalValue, minimumClientShares, nominalClientShares, maximumClientShares, marketPriceSet, charges, allowdividendsForInactiveClients, lockinPeriod, lockPeriodType, minimumActivePeriod, minimumActivePeriodType, @@ -220,7 +222,8 @@ public class ShareProductDataSerializer { arrayElement); final BigDecimal shareValue = this.fromApiJsonHelper .extractBigDecimalWithLocaleNamed(ShareProductApiConstants.sharevalue_paramname, arrayElement); - ShareProductMarketPriceData obj = new ShareProductMarketPriceData(id, localDate.toDate(), shareValue); + ShareProductMarketPriceData obj = new ShareProductMarketPriceData(id, + Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), shareValue); set.add(obj); } } @@ -237,7 +240,8 @@ public class ShareProductDataSerializer { arrayElement); final BigDecimal shareValue = this.fromApiJsonHelper .extractBigDecimalWithLocaleNamed(ShareProductApiConstants.sharevalue_paramname, arrayElement); - ShareProductMarketPrice obj = new ShareProductMarketPrice(localDate.toDate(), shareValue); + ShareProductMarketPrice obj = new ShareProductMarketPrice( + Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), shareValue); set.add(obj); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendAssembler.java index a033c764d..aea13bbde 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendAssembler.java @@ -19,7 +19,11 @@ package org.apache.fineract.portfolio.shareproducts.service; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.Collection; +import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; @@ -33,8 +37,6 @@ import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountReadPlatf import org.apache.fineract.portfolio.shareproducts.data.ShareProductData; import org.apache.fineract.portfolio.shareproducts.domain.ShareProductDividendPayOutDetails; import org.apache.fineract.portfolio.shareproducts.exception.ShareAccountsNotFoundException; -import org.joda.time.Days; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -76,7 +78,8 @@ public class ShareProductDividendAssembler { if (numberOfShareDays > 0) { double amountPerShareDay = amount.doubleValue() / numberOfShareDays; productDividendPayOutDetails = new ShareProductDividendPayOutDetails(productId, Money.of(currency, amount).getAmount(), - dividendPeriodStartDate.toDate(), dividendPeriodEndDate.toDate()); + Date.from(dividendPeriodStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + Date.from(dividendPeriodEndDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); for (ShareAccountData accountData : shareAccountDatas) { long numberOfShareDaysPerAccount = numberOfSharesdaysPerAccount.get(accountData.getId()); double amountForAccount = numberOfShareDaysPerAccount * amountPerShareDay; @@ -109,13 +112,14 @@ public class ShareProductDividendAssembler { if (shareStartDate.isBefore(lastDividendPostDate)) { shareStartDate = lastDividendPostDate; } - int numberOfPurchseDays = Days.daysBetween(shareStartDate, postingDate).getDays(); + int numberOfPurchseDays = Math.toIntExact(ChronoUnit.DAYS.between(shareStartDate, postingDate)); if (type.isPurchased() && numberOfPurchseDays < minimumActivePeriod) { continue; } if (lastDividendAppliedDate != null) { - numberOfShareDaysPerAccount += Days.daysBetween(lastDividendAppliedDate, shareStartDate).getDays() * numberOfShares; + numberOfShareDaysPerAccount += Math.toIntExact(ChronoUnit.DAYS.between(lastDividendAppliedDate, shareStartDate)) + * numberOfShares; } lastDividendAppliedDate = shareStartDate; if (type.isPurchased()) { @@ -127,7 +131,8 @@ public class ShareProductDividendAssembler { } } if (lastDividendAppliedDate != null) { - numberOfShareDaysPerAccount += Days.daysBetween(lastDividendAppliedDate, postingDate).getDays() * numberOfShares; + numberOfShareDaysPerAccount += Math.toIntExact(ChronoUnit.DAYS.between(lastDividendAppliedDate, postingDate)) + * numberOfShares; } numberOfShareDays += numberOfShareDaysPerAccount; numberOfSharesdaysPerAccount.put(accountData.getId(), numberOfShareDaysPerAccount); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java index 5a0b8d2a6..e0fe77601 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductDividendReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.shareproducts.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -35,7 +36,6 @@ import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountDividendData import org.apache.fineract.portfolio.shareaccounts.service.SharesEnumerations; import org.apache.fineract.portfolio.shareproducts.data.ShareProductData; import org.apache.fineract.portfolio.shareproducts.data.ShareProductDividendPayOutData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductWritePlatformServiceJpaRepositoryImpl.java index 55a33042b..f4c4d2b93 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/service/ShareProductWritePlatformServiceJpaRepositoryImpl.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.shareproducts.service; import com.google.gson.JsonElement; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.HashMap; import java.util.Map; import javax.persistence.PersistenceException; @@ -41,7 +42,6 @@ import org.apache.fineract.portfolio.shareproducts.domain.ShareProductDividentPa import org.apache.fineract.portfolio.shareproducts.domain.ShareProductRepositoryWrapper; import org.apache.fineract.portfolio.shareproducts.exception.DividentProcessingException; import org.apache.fineract.portfolio.shareproducts.serialization.ShareProductDataSerializer; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentData.java index 0fa29be81..f0cc2e77a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentData.java @@ -20,12 +20,12 @@ package org.apache.fineract.portfolio.tax.data; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.fineract.accounting.glaccount.data.GLAccountData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.joda.time.LocalDate; public final class TaxComponentData implements Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentHistoryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentHistoryData.java index 1b4f2b4a3..87000cd1c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentHistoryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentHistoryData.java @@ -20,7 +20,7 @@ package org.apache.fineract.portfolio.tax.data; import java.io.Serializable; import java.math.BigDecimal; -import org.joda.time.LocalDate; +import java.time.LocalDate; public class TaxComponentHistoryData implements Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupMappingsData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupMappingsData.java index e14502a53..b98b38f3d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupMappingsData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupMappingsData.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.tax.data; import java.io.Serializable; -import org.joda.time.LocalDate; +import java.time.LocalDate; public class TaxGroupMappingsData implements Serializable { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java index 69e04b547..304bc38d7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.tax.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -44,7 +46,6 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.tax.api.TaxApiConstants; -import org.joda.time.LocalDate; @Entity @Table(name = "m_tax_component") @@ -97,7 +98,7 @@ public class TaxComponent extends AbstractAuditableCustom { this.creditAccountType = creditAccountType.getValue(); } this.creditAcount = creditAcount; - this.startDate = startDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public static TaxComponent createTaxComponent(final String name, final BigDecimal percentage, final GLAccountType debitAccountType, @@ -118,9 +119,9 @@ public class TaxComponent extends AbstractAuditableCustom { final BigDecimal newValue = command.bigDecimalValueOfParameterNamed(TaxApiConstants.percentageParamName); changes.put(TaxApiConstants.percentageParamName, newValue); - LocalDate oldStartDate = new LocalDate(this.startDate); + LocalDate oldStartDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); updateStartDate(command, changes, true); - LocalDate newStartDate = new LocalDate(this.startDate); + LocalDate newStartDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); TaxComponentHistory history = TaxComponentHistory.createTaxComponentHistory(this.percentage, oldStartDate, newStartDate); this.taxComponentHistories.add(history); @@ -138,11 +139,11 @@ public class TaxComponent extends AbstractAuditableCustom { if (startDateFromUI != null) { startDate = startDateFromUI; } - this.startDate = startDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); changes.put(TaxApiConstants.startDateParamName, startDate); } else if (setAsCurrentDate) { changes.put(TaxApiConstants.startDateParamName, startDate); - this.startDate = startDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -154,7 +155,7 @@ public class TaxComponent extends AbstractAuditableCustom { public LocalDate startDate() { LocalDate startDate = null; if (this.startDate != null) { - startDate = new LocalDate(this.startDate); + startDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } return startDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponentHistory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponentHistory.java index b762d32af..b7c16bc77 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponentHistory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponentHistory.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.tax.domain; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -26,7 +28,6 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; -import org.joda.time.LocalDate; @Entity @Table(name = "m_tax_component_history") @@ -49,8 +50,8 @@ public class TaxComponentHistory extends AbstractAuditableCustom { private TaxComponentHistory(final BigDecimal percentage, final LocalDate startDate, final LocalDate endDate) { this.percentage = percentage; - this.startDate = startDate.toDate(); - this.endDate = endDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public static TaxComponentHistory createTaxComponentHistory(final BigDecimal percentage, final LocalDate startDate, @@ -61,7 +62,7 @@ public class TaxComponentHistory extends AbstractAuditableCustom { public LocalDate startDate() { LocalDate startDate = null; if (this.startDate != null) { - startDate = new LocalDate(this.startDate); + startDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } return startDate; } @@ -69,7 +70,7 @@ public class TaxComponentHistory extends AbstractAuditableCustom { public LocalDate endDate() { LocalDate endDate = null; if (this.endDate != null) { - endDate = new LocalDate(this.endDate); + endDate = LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()); } return endDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroupMappings.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroupMappings.java index 208a4b74b..076b5da3b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroupMappings.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroupMappings.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.tax.domain; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -31,7 +33,6 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; import org.apache.fineract.portfolio.tax.api.TaxApiConstants; -import org.joda.time.LocalDate; @Entity @Table(name = "m_tax_group_mappings") @@ -55,10 +56,10 @@ public class TaxGroupMappings extends AbstractAuditableCustom { this.taxComponent = taxComponent; if (startDate != null) { - this.startDate = startDate.toDate(); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (endDate != null) { - this.endDate = endDate.toDate(); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -104,7 +105,7 @@ public class TaxGroupMappings extends AbstractAuditableCustom { public LocalDate startDate() { LocalDate startDate = null; if (this.startDate != null) { - startDate = new LocalDate(this.startDate); + startDate = LocalDate.ofInstant(this.startDate.toInstant(), ZoneId.systemDefault()); } return startDate; } @@ -112,7 +113,7 @@ public class TaxGroupMappings extends AbstractAuditableCustom { public LocalDate endDate() { LocalDate endDate = null; if (this.endDate != null) { - endDate = new LocalDate(this.endDate); + endDate = LocalDate.ofInstant(this.endDate.toInstant(), ZoneId.systemDefault()); } return endDate; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java index 5b41ce556..631fd5307 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -45,7 +46,6 @@ import org.apache.fineract.portfolio.tax.api.TaxApiConstants; import org.apache.fineract.portfolio.tax.domain.TaxComponent; import org.apache.fineract.portfolio.tax.domain.TaxGroup; import org.apache.fineract.portfolio.tax.domain.TaxGroupMappings; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java index dc730360c..371522528 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java @@ -22,6 +22,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -41,7 +42,6 @@ import org.apache.fineract.portfolio.tax.domain.TaxComponent; import org.apache.fineract.portfolio.tax.domain.TaxComponentRepositoryWrapper; import org.apache.fineract.portfolio.tax.domain.TaxGroup; import org.apache.fineract.portfolio.tax.domain.TaxGroupMappings; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxReadPlatformServiceImpl.java index 753ba05c5..b97f4087b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxReadPlatformServiceImpl.java @@ -21,6 +21,7 @@ package org.apache.fineract.portfolio.tax.service; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import org.apache.fineract.accounting.common.AccountingDropdownReadPlatformService; @@ -33,7 +34,6 @@ import org.apache.fineract.portfolio.tax.data.TaxComponentData; import org.apache.fineract.portfolio.tax.data.TaxComponentHistoryData; import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.apache.fineract.portfolio.tax.data.TaxGroupMappingsData; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java index 52ea65ff5..7ccb0418c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.tax.service; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -26,7 +27,6 @@ import java.util.Set; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.portfolio.tax.domain.TaxComponent; import org.apache.fineract.portfolio.tax.domain.TaxGroupMappings; -import org.joda.time.LocalDate; public final class TaxUtils { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java index 834694eab..bd605db8b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java @@ -21,6 +21,8 @@ package org.apache.fineract.portfolio.transfer.service; import com.google.common.collect.Iterables; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -63,7 +65,6 @@ import org.apache.fineract.portfolio.transfer.exception.ClientNotAwaitingTransfe import org.apache.fineract.portfolio.transfer.exception.ClientNotAwaitingTransferApprovalOrOnHoldException; import org.apache.fineract.portfolio.transfer.exception.TransferNotSupportedException; import org.apache.fineract.portfolio.transfer.exception.TransferNotSupportedException.TransferNotSupportedReason; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -475,7 +476,7 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr case PROPOSAL: client.setStatus(ClientStatus.TRANSFER_IN_PROGRESS.getValue()); client.updateTransferToOffice(destinationOffice); - client.updateProposedTransferDate(transferDate.toDate()); + client.updateProposedTransferDate(Date.from(transferDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); break; case REJECTION: client.setStatus(ClientStatus.TRANSFER_ON_HOLD.getValue()); @@ -489,10 +490,11 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr } this.noteWritePlatformService.createAndPersistClientNote(client, jsonCommand); - Date proposedTransferDate = transferDate != null ? transferDate.toDate() : null; + Date proposedTransferDate = transferDate != null ? Date.from(transferDate.atStartOfDay(ZoneId.systemDefault()).toInstant()) : null; this.clientTransferDetailsRepositoryWrapper.save(ClientTransferDetails.instance(client.getId(), client.getOffice().getId(), destinationOffice.getId(), proposedTransferDate, transferEventType.getValue(), - DateUtils.getLocalDateTimeOfTenant().toDate(), this.context.authenticatedUser().getId())); + Date.from(DateUtils.getLocalDateTimeOfTenant().atZone(ZoneId.systemDefault()).toInstant()), + this.context.authenticatedUser().getId())); } private List assembleListOfClients(final JsonCommand command) { 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 36d27ba5b..108769829 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 @@ -21,6 +21,11 @@ package org.apache.fineract.scheduledjobs.service; import java.math.BigDecimal; import java.math.BigInteger; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -46,11 +51,6 @@ import org.apache.fineract.portfolio.savings.service.SavingsAccountChargeReadPla import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService; import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountDividendReadPlatformService; import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountSchedularService; -import org.joda.time.DateTime; -import org.joda.time.Days; -import org.joda.time.LocalDate; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -64,8 +64,8 @@ public class ScheduledJobRunnerServiceImpl implements ScheduledJobRunnerService private static final Logger LOG = LoggerFactory.getLogger(ScheduledJobRunnerServiceImpl.class); - private final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); - private final DateTimeFormatter formatterWithTime = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private final DateTimeFormatter formatterWithTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private final RoutingDataSourceServiceFactory dataSourceServiceFactory; private final SavingsAccountWritePlatformService savingsAccountWritePlatformService; @@ -334,7 +334,7 @@ public class ScheduledJobRunnerServiceImpl implements ScheduledJobRunnerService final Collection> scheduleDetails = this.depositAccountReadPlatformService.retriveDataForRDScheduleCreation(); String insertSql = "INSERT INTO `m_mandatory_savings_schedule` (`savings_account_id`, `duedate`, `installment`, `deposit_amount`, `completed_derived`, `created_date`, `lastmodified_date`) VALUES "; StringBuilder sb = new StringBuilder(); - String currentDate = formatterWithTime.print(DateUtils.getLocalDateTimeOfTenant()); + String currentDate = formatterWithTime.format(DateUtils.getLocalDateTimeOfTenant()); int iterations = 0; for (Map details : scheduleDetails) { Long count = (Long) details.get("futureInstallemts"); @@ -345,7 +345,7 @@ public class ScheduledJobRunnerServiceImpl implements ScheduledJobRunnerService final BigDecimal amount = (BigDecimal) details.get("amount"); final String recurrence = (String) details.get("recurrence"); Date date = (Date) details.get("dueDate"); - LocalDate lastDepositDate = new LocalDate(date); + LocalDate lastDepositDate = LocalDate.ofInstant(date.toInstant(), ZoneId.systemDefault()); Integer installmentNumber = (Integer) details.get("installment"); while (count < DepositAccountUtils.GENERATE_MINIMUM_NUMBER_OF_FUTURE_INSTALMENTS) { count++; @@ -358,7 +358,7 @@ public class ScheduledJobRunnerServiceImpl implements ScheduledJobRunnerService sb.append("("); sb.append(savingsId); sb.append(",'"); - sb.append(formatter.print(lastDepositDate)); + sb.append(formatter.format(lastDepositDate)); sb.append("',"); sb.append(installmentNumber); sb.append(","); @@ -431,8 +431,8 @@ public class ScheduledJobRunnerServiceImpl implements ScheduledJobRunnerService final List tbGaps = jdbcTemplate.queryForList(tbGapSqlBuilder.toString(), Date.class); for (Date tbGap : tbGaps) { - LocalDate convDate = new DateTime(tbGap).toLocalDate(); - int days = Days.daysBetween(convDate, DateUtils.getLocalDateOfTenant()).getDays(); + LocalDate convDate = ZonedDateTime.ofInstant(tbGap.toInstant(), ZoneId.systemDefault()).toLocalDate(); + int days = Math.toIntExact(ChronoUnit.DAYS.between(convDate, DateUtils.getLocalDateOfTenant())); if (days < 1) { continue; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/service/ScorecardReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/spm/service/ScorecardReadPlatformServiceImpl.java index a0bae9eac..70fc11ed6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/spm/service/ScorecardReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/spm/service/ScorecardReadPlatformServiceImpl.java @@ -20,14 +20,16 @@ package org.apache.fineract.spm.service; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Collection; +import java.util.Date; import java.util.List; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.spm.data.ScorecardData; import org.apache.fineract.spm.data.ScorecardValue; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; @@ -93,7 +95,8 @@ public class ScorecardReadPlatformServiceImpl implements ScorecardReadPlatformSe final LocalDate createdOn = JdbcSupport.getLocalDate(rs, "createdOn"); final Integer value = rs.getInt("value"); - return ScorecardValue.instance(questionId, responseId, value, createdOn.toDate()); + return ScorecardValue.instance(questionId, responseId, value, + Date.from(createdOn.atStartOfDay(ZoneId.systemDefault()).toInstant())); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/service/SpmService.java b/fineract-provider/src/main/java/org/apache/fineract/spm/service/SpmService.java index b883e0d54..315829b7a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/spm/service/SpmService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/spm/service/SpmService.java @@ -18,6 +18,11 @@ */ package org.apache.fineract.spm.service; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoField; +import java.time.temporal.ChronoUnit; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -30,8 +35,6 @@ import org.apache.fineract.spm.domain.SurveyRepository; import org.apache.fineract.spm.domain.SurveyValidator; import org.apache.fineract.spm.exception.SurveyNotFoundException; import org.apache.openjpa.persistence.EntityExistsException; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.orm.jpa.JpaSystemException; @@ -82,9 +85,9 @@ public class SpmService { LocalDate validFrom = DateUtils.getLocalDateOfTenant(); // set valid to for 100 years Calendar cal = Calendar.getInstance(); - cal.setTime(validFrom.toDate()); + cal.setTime(Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant())); cal.add(Calendar.YEAR, 100); - survey.setValidFrom(validFrom.toDate()); + survey.setValidFrom(Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant())); survey.setValidTo(cal.getTime()); try { this.surveyRepository.saveAndFlush(survey); @@ -120,8 +123,8 @@ public class SpmService { this.securityContext.authenticatedUser(); final Survey survey = findById(id); - final DateTime dateTime = getStartOfToday().minusMillis(1); - survey.setValidTo(dateTime.toDate()); + final ZonedDateTime dateTime = getStartOfToday().minus(1, ChronoUnit.MILLIS); + survey.setValidTo(Date.from(dateTime.toInstant())); this.surveyRepository.save(survey); } @@ -132,16 +135,16 @@ public class SpmService { final Survey survey = findById(id); LocalDate validFrom = DateUtils.getLocalDateOfTenant(); Calendar cal = Calendar.getInstance(); - cal.setTime(validFrom.toDate()); + cal.setTime(Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant())); cal.add(Calendar.YEAR, 100); - survey.setValidFrom(validFrom.toDate()); + survey.setValidFrom(Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant())); survey.setValidTo(cal.getTime()); this.surveyRepository.save(survey); } - public static DateTime getStartOfToday() { - return DateTime.now().withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).withMillisOfSecond(0); + public static ZonedDateTime getStartOfToday() { + return ZonedDateTime.now(ZoneId.systemDefault()).withHour(0).withMinute(0).withSecond(0).with(ChronoField.MILLI_OF_SECOND, 0); } private void handleDataIntegrityIssues(final Throwable realCause, final Exception dve, String key) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/util/ScorecardMapper.java b/fineract-provider/src/main/java/org/apache/fineract/spm/util/ScorecardMapper.java index 7ea4e6bf0..484a8c070 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/spm/util/ScorecardMapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/spm/util/ScorecardMapper.java @@ -18,7 +18,9 @@ */ package org.apache.fineract.spm.util; +import java.time.ZoneId; import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.client.domain.Client; @@ -50,7 +52,7 @@ public final class ScorecardMapper { ScorecardMapper.setQuestionAndResponse(scorecardValue, scorecard, survey); scorecard.setAppUser(appUser); scorecard.setClient(client); - scorecard.setCreatedOn(DateUtils.getLocalDateOfTenant().toDate()); + scorecard.setCreatedOn(Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); scorecard.setValue(scorecardValue.getValue()); } } else { diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/AdhikarLoanRepaymentScheduleTransactionProcessorTest.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/AdhikarLoanRepaymentScheduleTransactionProcessorTest.java index 9e303492f..79b1c64cb 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/AdhikarLoanRepaymentScheduleTransactionProcessorTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/AdhikarLoanRepaymentScheduleTransactionProcessorTest.java @@ -20,12 +20,12 @@ package org.apache.fineract.portfolio.loanaccount; import java.lang.reflect.Field; import java.math.RoundingMode; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.RBILoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -39,7 +39,7 @@ public class AdhikarLoanRepaymentScheduleTransactionProcessorTest { // class under test private RBILoanRepaymentScheduleTransactionProcessor processor; - private final LocalDate july2nd = new LocalDate(2012, 7, 2); + private final LocalDate july2nd = LocalDate.of(2012, 7, 2); private final MonetaryCurrency usDollars = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); private List installments; diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/HeavensFamilyLoanRepaymentScheduleTransactionProcessorTest.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/HeavensFamilyLoanRepaymentScheduleTransactionProcessorTest.java index 3a672ba53..cad9b3e8a 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/HeavensFamilyLoanRepaymentScheduleTransactionProcessorTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/HeavensFamilyLoanRepaymentScheduleTransactionProcessorTest.java @@ -20,12 +20,12 @@ package org.apache.fineract.portfolio.loanaccount; import java.lang.reflect.Field; import java.math.RoundingMode; +import java.time.LocalDate; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.HeavensFamilyLoanRepaymentScheduleTransactionProcessor; -import org.joda.time.LocalDate; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -39,7 +39,7 @@ public class HeavensFamilyLoanRepaymentScheduleTransactionProcessorTest { // class under test private HeavensFamilyLoanRepaymentScheduleTransactionProcessor processor; - private final LocalDate july2nd = new LocalDate(2012, 7, 2); + private final LocalDate july2nd = LocalDate.of(2012, 7, 2); private final MonetaryCurrency usDollars = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); private List installments; diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java index c551c0365..2cfc53f90 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java +++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java @@ -18,21 +18,22 @@ */ package org.apache.fineract.portfolio.loanaccount; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Set; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; -import org.joda.time.LocalDate; public class LoanRepaymentScheduleInstallmentBuilder { private final Loan loan = null; private Integer installmentNumber = Integer.valueOf(1); - private final LocalDate fromDate = LocalDate.now(); - private LocalDate dueDate = LocalDate.now(); - private final LocalDate latestTransactionDate = LocalDate.now(); + private final LocalDate fromDate = LocalDate.now(ZoneId.systemDefault()); + private LocalDate dueDate = LocalDate.now(ZoneId.systemDefault()); + private final LocalDate latestTransactionDate = LocalDate.now(ZoneId.systemDefault()); private MonetaryCurrency currencyDetail = new MonetaryCurrencyBuilder().build(); private Money principal = new MoneyBuilder().build(); private Money interest = new MoneyBuilder().build(); diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanScheduleTestDataHelper.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanScheduleTestDataHelper.java index fb3ccec1e..47137d77b 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanScheduleTestDataHelper.java +++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanScheduleTestDataHelper.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.portfolio.loanaccount; +import java.time.LocalDate; import java.util.Arrays; import java.util.List; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; -import org.joda.time.LocalDate; /** * Helper class for creating loan schedule data suitable for testing. diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanTransactionBuilder.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanTransactionBuilder.java index 2658dc1ef..bd2459de3 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanTransactionBuilder.java +++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanTransactionBuilder.java @@ -18,15 +18,16 @@ */ package org.apache.fineract.portfolio.loanaccount; +import java.time.LocalDate; +import java.time.ZoneId; import org.apache.fineract.organisation.monetary.domain.Money; -import org.joda.time.LocalDate; public class LoanTransactionBuilder { @SuppressWarnings("unused") private Money transactionAmount = new MoneyBuilder().build(); @SuppressWarnings("unused") - private LocalDate transactionDate = LocalDate.now(); + private LocalDate transactionDate = LocalDate.now(ZoneId.systemDefault()); @SuppressWarnings("unused") private boolean repayment = false; diff --git a/fineract-provider/src/test/java/org/apache/fineract/template/TemplateMergeServiceTest.java b/fineract-provider/src/test/java/org/apache/fineract/template/TemplateMergeServiceTest.java index fd5eb0b0c..913422937 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/template/TemplateMergeServiceTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/template/TemplateMergeServiceTest.java @@ -32,6 +32,7 @@ import java.lang.reflect.Type; import java.math.RoundingMode; import java.net.MalformedURLException; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -44,7 +45,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleIns import org.apache.fineract.template.domain.Template; import org.apache.fineract.template.domain.TemplateMapper; import org.apache.fineract.template.service.TemplateMergeService; -import org.joda.time.LocalDate; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -74,7 +74,7 @@ public class TemplateMergeServiceTest { @Test public void compileLoanSummary() throws IOException { - LocalDate july2nd = new LocalDate(2012, 7, 2); + LocalDate july2nd = LocalDate.of(2012, 7, 2); MonetaryCurrency usDollars = new MonetaryCurrencyBuilder().withCode("USD").withDigitsAfterDecimal(2).build(); List installments = LoanScheduleTestDataHelper.createSimpleLoanSchedule(july2nd, usDollars);