From b8c6efa25bc6d30bd278aa2a9335447d8eae0644 Mon Sep 17 00:00:00 2001 From: Manoj <56669674+fynmanoj@users.noreply.github.com> Date: Tue, 7 Sep 2021 19:10:11 +0530 Subject: [PATCH] Tenant & Server - Different Timezone fix T-1 (FINERACT-1394) (#1857) --- .../journalentry/api/DateParam.java | 4 +- .../service/AccountingProcessorHelper.java | 13 +-- ...WritePlatformServiceJpaRepositoryImpl.java | 4 +- ...WritePlatformServiceJpaRepositoryImpl.java | 5 +- .../campaigns/email/domain/EmailCampaign.java | 9 +- .../campaigns/email/domain/EmailMessage.java | 3 +- .../campaigns/sms/domain/SmsCampaign.java | 9 +- .../infrastructure/core/api/JsonCommand.java | 3 +- ...ceRegistrationReadPlatformServiceImpl.java | 4 +- .../service/NotificationSenderService.java | 3 +- .../infrastructure/sms/domain/SmsMessage.java | 3 +- .../service/InteropServiceImpl.java | 3 +- .../organisation/holiday/domain/Holiday.java | 13 +-- .../domain/HolidayRepositoryWrapper.java | 4 +- .../organisation/office/domain/Office.java | 5 +- .../office/domain/OfficeTransaction.java | 4 +- .../organisation/staff/domain/Staff.java | 6 +- .../organisation/teller/domain/Cashier.java | 9 +- .../teller/domain/CashierTransaction.java | 5 +- .../organisation/teller/domain/Teller.java | 9 +- ...llerManagementReadPlatformServiceImpl.java | 10 +- .../AccountTransferStandingInstruction.java | 9 +- .../domain/AccountTransferTransaction.java | 4 +- ...ngInstructionWritePlatformServiceImpl.java | 5 +- .../portfolio/address/domain/Address.java | 10 +- .../portfolio/calendar/domain/Calendar.java | 17 ++-- .../CalendarReadPlatformServiceImpl.java | 3 +- .../calendar/service/CalendarUtils.java | 12 +-- ...WritePlatformServiceJpaRepositoryImpl.java | 5 +- .../portfolio/client/domain/Client.java | 17 ++-- .../portfolio/client/domain/ClientCharge.java | 3 +- .../client/domain/ClientNonPerson.java | 5 +- .../client/domain/ClientTransaction.java | 3 +- ...WritePlatformServiceJpaRepositoryImpl.java | 19 ++-- ...ollectionSheetReadPlatformServiceImpl.java | 10 +- .../floatingrates/domain/FloatingRate.java | 9 +- .../portfolio/group/domain/Group.java | 11 ++- .../group/domain/StaffAssignmentHistory.java | 8 +- ...WritePlatformServiceJpaRepositoryImpl.java | 3 +- .../domain/InterestRateChartFields.java | 9 +- .../data/LoanScheduleAccrualData.java | 4 +- .../portfolio/loanaccount/domain/Loan.java | 91 +++++++++---------- .../domain/LoanAccountDomainServiceJpa.java | 10 +- .../loanaccount/domain/LoanCharge.java | 9 +- ...nterestRecalcualtionAdditionalDetails.java | 3 +- .../domain/LoanOfficerAssignmentHistory.java | 9 +- .../LoanRepaymentScheduleInstallment.java | 19 ++-- .../loanaccount/domain/LoanTransaction.java | 37 ++++---- .../guarantor/command/GuarantorCommand.java | 4 +- .../domain/LoanApplicationTerms.java | 6 +- .../service/LoanScheduleAssembler.java | 19 ++-- ...heduleHistoryWritePlatformServiceImpl.java | 8 +- .../domain/LoanRescheduleRequest.java | 5 +- ...nReschedulePreviewPlatformServiceImpl.java | 6 +- ...heduleRequestWritePlatformServiceImpl.java | 20 ++-- .../LoanAccrualWritePlatformServiceImpl.java | 8 +- .../loanaccount/service/LoanAssembler.java | 6 +- .../service/LoanReadPlatformServiceImpl.java | 14 +-- .../loanaccount/service/LoanUtilService.java | 6 +- ...WritePlatformServiceJpaRepositoryImpl.java | 17 ++-- .../loanproduct/domain/LoanProduct.java | 9 +- .../portfolio/meeting/domain/Meeting.java | 3 +- .../DepositAccountDomainServiceJpa.java | 4 +- .../DepositAccountOnHoldTransaction.java | 3 +- .../DepositAccountTermAndPreClosure.java | 15 ++- .../savings/domain/FixedDepositAccount.java | 5 +- .../domain/RecurringDepositAccount.java | 13 +-- .../RecurringDepositScheduleInstallment.java | 3 +- .../savings/domain/SavingsAccount.java | 39 ++++---- .../savings/domain/SavingsAccountCharge.java | 15 +-- .../savings/domain/SavingsAccountSummary.java | 3 +- .../domain/SavingsAccountTransaction.java | 7 +- .../SavingsOfficerAssignmentHistory.java | 7 +- ...WritePlatformServiceJpaRepositoryImpl.java | 4 +- ...WritePlatformServiceJpaRepositoryImpl.java | 3 +- .../SearchReadPlatformServiceImpl.java | 14 +-- .../ShareAccountDataSerializer.java | 37 ++++---- .../ShareAccountReadPlatformServiceImpl.java | 3 +- .../ShareProductDataSerializer.java | 5 +- .../ShareProductDividendAssembler.java | 6 +- .../portfolio/tax/domain/TaxComponent.java | 7 +- .../tax/domain/TaxComponentHistory.java | 5 +- .../tax/domain/TaxGroupMappings.java | 5 +- ...WritePlatformServiceJpaRepositoryImpl.java | 7 +- .../ScorecardReadPlatformServiceImpl.java | 4 +- .../fineract/spm/service/SpmService.java | 9 +- .../fineract/spm/util/ScorecardMapper.java | 4 +- 87 files changed, 430 insertions(+), 400 deletions(-) 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 8c0f1fb91..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 @@ -19,11 +19,11 @@ 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.apache.fineract.infrastructure.core.service.DateUtils; /** * Class for parsing dates sent as query parameters @@ -41,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 Date.from(localDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } 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 e51ba81fb..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 @@ -20,6 +20,7 @@ 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; @@ -58,7 +59,6 @@ import org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGL import org.apache.fineract.accounting.producttoaccountmapping.exception.ProductToGLAccountMappingNotFoundException; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper; @@ -132,8 +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 = Date - .from(((LocalDate) map.get("date")).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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"); @@ -200,8 +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 = Date - .from(((LocalDate) map.get("date")).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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"); @@ -270,8 +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 = Date - .from(((LocalDate) map.get("date")).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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"); @@ -308,7 +305,7 @@ public class AccountingProcessorHelper { final Long clientId = (Long) accountingBridgeData.get("clientId"); final Long transactionId = (Long) accountingBridgeData.get("id"); final Date transactionDate = Date - .from(((LocalDate) accountingBridgeData.get("date")).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + .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/JournalEntryWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java index 0f69a407e..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 @@ -20,6 +20,7 @@ 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; @@ -69,7 +70,6 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper; @@ -593,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 = Date.from(entryLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java index d1679c443..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 @@ -20,6 +20,7 @@ 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; @@ -150,13 +151,13 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements private Date parseDate(JsonCommand command) { LocalDate localDate = this.fromApiJsonHelper.extractLocalDateNamed("date", command.parsedJson()); - return Date.from(localDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } @Override @CronTarget(jobName = JobName.GENERATE_LOANLOSS_PROVISIONING) public void generateLoanLossProvisioningAmount() { - Date currentDate = Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/infrastructure/campaigns/email/domain/EmailCampaign.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java index b57d81bed..272f2190c 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 @@ -20,6 +20,7 @@ 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; @@ -152,7 +153,7 @@ public class EmailCampaign extends AbstractPersistableCustom { this.emailAttachmentFileFormat = emailAttachmentFileFormat.getValue(); this.stretchyReport = stretchyReport; this.stretchyReportParamMap = stretchyReportParamMap; - this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = submittedBy; this.recurrence = recurrence; LocalDateTime recurrenceStartDate = LocalDateTime.now(DateUtils.getDateTimeZoneOfTenant()); @@ -274,7 +275,7 @@ public class EmailCampaign extends AbstractPersistableCustom { throw new PlatformApiDataValidationException(dataValidationErrors); } - this.approvedOnDate = Date.from(activationLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(closureLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(reactivateLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.approvedOnDate = Date.from(reactivateLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.status = EmailCampaignStatus.ACTIVE.getValue(); this.approvedBy = currentUser; this.closureDate = null; 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 d71dc5dd7..da0652114 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 @@ -19,6 +19,7 @@ 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; @@ -109,7 +110,7 @@ public class EmailMessage extends AbstractPersistableCustom { this.message = message; this.campaignName = campaignName; this.submittedOnDate = Date - .from(LocalDate.now(DateUtils.getDateTimeZoneOfTenant()).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + .from(LocalDate.now(DateUtils.getDateTimeZoneOfTenant()).atStartOfDay(ZoneId.systemDefault()).toInstant()); } public Map update(final JsonCommand command) { 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 ace77e5e6..b997b536f 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 @@ -20,6 +20,7 @@ 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; @@ -139,7 +140,7 @@ public class SmsCampaign extends AbstractPersistableCustom { this.paramValue = paramValue; this.status = SmsCampaignStatus.PENDING.getValue(); this.message = message; - this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = submittedBy; this.recurrence = recurrence; LocalDateTime recurrenceStartDate = LocalDateTime.now(DateUtils.getDateTimeZoneOfTenant()); @@ -280,7 +281,7 @@ public class SmsCampaign extends AbstractPersistableCustom { throw new PlatformApiDataValidationException(dataValidationErrors); } - this.approvedOnDate = Date.from(activationLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(closureLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(reactivateLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.approvedOnDate = Date.from(reactivateLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.status = SmsCampaignStatus.ACTIVE.getValue(); this.approvedBy = currentUser; this.closureDate = null; 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 c22ec9b0a..9d9f265dd 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 @@ -26,6 +26,7 @@ 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; @@ -417,7 +418,7 @@ public final class JsonCommand { if (localDate == null) { return null; } - return Date.from(localDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/gcm/service/DeviceRegistrationReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/DeviceRegistrationReadPlatformServiceImpl.java index c3d9ab559..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 @@ -21,10 +21,10 @@ 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.DateUtils; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationData; import org.apache.fineract.infrastructure.gcm.exception.DeviceRegistrationNotFoundException; @@ -75,7 +75,7 @@ public class DeviceRegistrationReadPlatformServiceImpl implements DeviceRegistra final String clientName = rs.getString("clientName"); ClientData clientData = ClientData.instance(clientId, clientName); return DeviceRegistrationData.instance(id, clientData, registrationId, - Date.from(updatedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(updatedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } } 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 dc1d2da17..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,6 +19,7 @@ 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; @@ -109,7 +110,7 @@ public class NotificationSenderService { if (res.getSuccess() != null && res.getSuccess() > 0) { smsMessage.setStatusType(SmsMessageStatusType.SENT.getValue()); smsMessage.setDeliveredOnDate( - Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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/sms/domain/SmsMessage.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java index 17f89349f..3b7e09fa6 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 @@ -19,6 +19,7 @@ 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; @@ -122,7 +123,7 @@ public class SmsMessage extends AbstractPersistableCustom { this.message = message; this.smsCampaign = smsCampaign; this.submittedOnDate = Date - .from(LocalDate.now(DateUtils.getDateTimeZoneOfTenant()).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + .from(LocalDate.now(DateUtils.getDateTimeZoneOfTenant()).atStartOfDay(ZoneId.systemDefault()).toInstant()); this.isNotification = isNotification; } 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 89eccabc7..67a06403b 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 @@ -225,8 +225,7 @@ public class InteropServiceImpl implements InteropService { return true; } - java.time.LocalDateTime transactionDate = t.getTransactionLocalDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()) - .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); }; 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 db441a5f3..5495ba9b3 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 @@ -29,6 +29,7 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.localePa 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; @@ -150,7 +151,7 @@ public class Holiday extends AbstractPersistableCustom { actualChanges.put(dateFormatParamName, dateFormatAsInput); actualChanges.put(localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(fromDateParamName); - this.fromDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.fromDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInLocalDateParameterNamed(toDateParamName, getToDateLocalDate())) { @@ -160,7 +161,7 @@ public class Holiday extends AbstractPersistableCustom { actualChanges.put(localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(toDateParamName); - this.toDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.toDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInLocalDateParameterNamed(repaymentsRescheduledToParamName, getRepaymentsRescheduledToLocalDate())) { @@ -170,7 +171,7 @@ public class Holiday extends AbstractPersistableCustom { actualChanges.put(localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(repaymentsRescheduledToParamName); - this.repaymentsRescheduledTo = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.repaymentsRescheduledTo = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.hasParameter(officesParamName)) { @@ -233,15 +234,15 @@ public class Holiday extends AbstractPersistableCustom { } if (fromDate != null) { - this.fromDate = Date.from(fromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.fromDate = Date.from(fromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (toDate != null) { - this.toDate = Date.from(toDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.toDate = Date.from(toDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (repaymentsRescheduledTo != null) { - this.repaymentsRescheduledTo = Date.from(repaymentsRescheduledTo.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.repaymentsRescheduledTo = Date.from(repaymentsRescheduledTo.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.status = status; 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 9e1d6450a..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 @@ -19,9 +19,9 @@ 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.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.holiday.exception.HolidayNotFoundException; import org.apache.fineract.organisation.holiday.service.HolidayUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -72,7 +72,7 @@ public class HolidayRepositoryWrapper { public boolean isHoliday(Long officeId, LocalDate transactionDate) { final List holidays = findByOfficeIdAndGreaterThanDate(officeId, - Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); return HolidayUtil.isHoliday(transactionDate, holidays); } } 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 897e72290..33de8eb5b 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 @@ -20,6 +20,7 @@ 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; @@ -89,7 +90,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 = Date.from(openingDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.openingDate = Date.from(openingDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (parent != null) { this.parent.addChild(this); } @@ -136,7 +137,7 @@ public class Office extends AbstractPersistableCustom implements Serializable { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(openingDateParamName); - this.openingDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.openingDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String nameParamName = "name"; 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 d6a8b35d9..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 @@ -20,6 +20,7 @@ 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; @@ -32,7 +33,6 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -79,7 +79,7 @@ public class OfficeTransaction extends AbstractPersistableCustom { this.from = fromOffice; this.to = toOffice; if (transactionLocalDate != null) { - this.transactionDate = Date.from(transactionLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/staff/domain/Staff.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java index a85e3f621..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 @@ -19,6 +19,7 @@ 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; @@ -35,7 +36,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.documentmanagement.domain.Image; import org.apache.fineract.organisation.office.domain.Office; @@ -133,7 +133,7 @@ public class Staff extends AbstractPersistableCustom { this.active = isActive == null ? true : isActive; deriveDisplayName(firstname); if (joiningDate != null) { - this.joiningDate = Date.from(joiningDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.joiningDate = Date.from(joiningDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -214,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 = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.joiningDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } return actualChanges; 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 032271335..a1a51a133 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 @@ -20,6 +20,7 @@ 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; @@ -114,8 +115,8 @@ public class Cashier extends AbstractPersistableCustom { this.teller = teller; this.staff = staff; this.description = description; - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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; @@ -143,7 +144,7 @@ public class Cashier extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(startDateParamName); - this.startDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String endDateParamName = "endDate"; @@ -154,7 +155,7 @@ public class Cashier extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(endDateParamName); - this.endDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final Boolean isFullDay = command.booleanObjectValueOfParameterNamed("isFullDay"); 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 935079186..c63047458 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 @@ -20,6 +20,7 @@ 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; @@ -103,7 +104,7 @@ public class CashierTransaction extends AbstractPersistableCustom { this.cashier = cashier; this.txnType = txnType; if (txnDate != null) { - this.txnDate = Date.from(txnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.txnDate = Date.from(txnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.txnAmount = txnAmount; this.entityType = entityType; @@ -135,7 +136,7 @@ public class CashierTransaction extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(txnDateParamName); - this.txnDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.txnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String txnAmountParamName = "txnAmount"; 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 bc4d0f205..e1baf666b 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 @@ -19,6 +19,7 @@ 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; @@ -86,10 +87,10 @@ public class Teller extends AbstractPersistableCustom { this.name = StringUtils.defaultIfEmpty(name, null); this.description = StringUtils.defaultIfEmpty(description, null); if (startDate != null) { - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (endDate != null) { - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (status != null) { this.status = status.getValue(); @@ -152,7 +153,7 @@ public class Teller extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(startDateParamName); - this.startDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String endDateParamName = "endDate"; @@ -163,7 +164,7 @@ public class Teller extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(endDateParamName); - this.endDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String statusParamName = "status"; 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 d5e505099..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 @@ -22,13 +22,13 @@ 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; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.exception.UnrecognizedQueryParamException; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; @@ -599,8 +599,8 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement final String endTime = rs.getString("end_time"); return CashierData.instance(id, null, null, staffId, staffName, tellerId, tellerName, description, - Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), fullDay, startTime, endTime); + Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), fullDay, startTime, endTime); } } @@ -750,11 +750,11 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement Date txnDate = null; if (txnLocalDate != null) { - txnDate = Date.from(txnLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + txnDate = Date.from(txnLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } Date createdDate = null; if (createdLocalDate != null) { - createdDate = Date.from(createdLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/portfolio/account/domain/AccountTransferStandingInstruction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java index 8f6a9a4de..4a96ebb67 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 @@ -34,6 +34,7 @@ import static org.apache.fineract.portfolio.account.api.StandingInstructionApiCo 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; @@ -135,12 +136,12 @@ public class AccountTransferStandingInstruction extends AbstractPersistableCusto this.status = status; this.amount = amount; if (validFrom != null) { - this.validFrom = Date.from(validFrom.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.validFrom = Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (validTill == null) { this.validTill = null; } else { - this.validTill = Date.from(validTill.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.validTill = Date.from(validTill.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.recurrenceType = recurrenceType; this.recurrenceFrequency = recurrenceFrequency; @@ -171,13 +172,13 @@ public class AccountTransferStandingInstruction extends AbstractPersistableCusto if (command.isChangeInDateParameterNamed(validFromParamName, this.validFrom)) { final LocalDate newValue = command.localDateValueOfParameterNamed(validFromParamName); actualChanges.put(validFromParamName, newValue); - this.validFrom = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.validTill = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInBigDecimalParameterNamed(amountParamName, this.amount)) { 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 a21afe18a..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 @@ -20,6 +20,7 @@ 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; @@ -30,7 +31,6 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; -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.loanaccount.domain.LoanTransaction; @@ -111,7 +111,7 @@ public class AccountTransferTransaction extends AbstractPersistableCustom { this.fromSavingsTransaction = withdrawal; this.toSavingsTransaction = deposit; this.toLoanTransaction = loanRepaymentTransaction; - this.date = Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/service/StandingInstructionWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/service/StandingInstructionWritePlatformServiceImpl.java index 38b4b9118..137c654c0 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 @@ -25,6 +25,7 @@ import static org.apache.fineract.portfolio.account.api.StandingInstructionApiCo import java.math.BigDecimal; import java.time.LocalDate; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -245,8 +246,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, - Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), 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/address/domain/Address.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java index deec19de8..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 @@ -21,6 +21,7 @@ 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; @@ -35,7 +36,6 @@ import javax.persistence.Table; 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.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.client.domain.ClientAddress; @Entity @@ -122,12 +122,12 @@ public class Address extends AbstractPersistableCustom { // this.updatedOn = updatedOn; if (createdOn != null) { - this.createdOn = Date.from(createdOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.createdOn = Date.from(createdOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (updatedOn != null) { - this.updatedOn = Date.from(updatedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.updatedOn = Date.from(updatedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -363,7 +363,7 @@ public class Address extends AbstractPersistableCustom { } public void setCreatedOn(LocalDate createdOn) { - this.createdOn = Date.from(createdOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(updatedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.updatedOn = Date.from(updatedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } 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 81595eaa9..855fe8727 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 @@ -22,6 +22,7 @@ import static org.apache.fineract.portfolio.calendar.CalendarConstants.CALENDAR_ 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; @@ -126,13 +127,13 @@ public class Calendar extends AbstractAuditableCustom { this.location = StringUtils.defaultIfEmpty(location, null); if (null != startDate) { - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.startDate = null; } if (null != endDate) { - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.endDate = null; } @@ -216,7 +217,7 @@ public class Calendar extends AbstractAuditableCustom { } else { actualChanges.put(CalendarSupportedParameters.START_DATE.getValue(), newMeetingStartDate.toString()); - this.startDate = Date.from(newMeetingStartDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 @@ -292,7 +293,7 @@ public class Calendar extends AbstractAuditableCustom { actualChanges.put(startDateParamName, valueAsInput); actualChanges.put("dateFormat", dateFormatAsInput); actualChanges.put("locale", localeAsInput); - this.startDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -304,7 +305,7 @@ public class Calendar extends AbstractAuditableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(endDateParamName); - this.endDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String durationParamName = CalendarSupportedParameters.DURATION.getValue(); @@ -425,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 = Date.from(calendarStartDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(calendarStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -663,8 +664,8 @@ public class Calendar extends AbstractAuditableCustom { final String newRecurrence = Calendar.constructRecurrence(frequencyType, interval, startDate.get(ChronoField.DAY_OF_WEEK), null); this.recurrence = newRecurrence; - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/service/CalendarReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarReadPlatformServiceImpl.java index 34080bc44..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 @@ -22,6 +22,7 @@ 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; @@ -434,7 +435,7 @@ 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, Date.from(compareDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()) }); + 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 465c0a19a..0c5c0fc06 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 @@ -23,6 +23,7 @@ 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; @@ -110,8 +111,7 @@ public final class CalendarUtils { } private static LocalDate getNextRecurringDate(final Recur recur, final LocalDate seedDate, final LocalDate startDate) { - final DateTime periodStart = new DateTime( - java.util.Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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 @@ -122,7 +122,7 @@ public final class CalendarUtils { // Date format in iCal4J is hard coded Date formattedDate = null; final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - final String seedDateStr = df.format(java.util.Date.from(inputDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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) { @@ -169,10 +169,8 @@ public final class CalendarUtils { return null; } final Date seed = convertToiCal4JCompatibleDate(seedDate); - final DateTime periodStart = new DateTime( - java.util.Date.from(periodStartDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); - final DateTime periodEnd = new DateTime( - java.util.Date.from(periodEndDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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); 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 dd9de38d0..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 @@ -19,6 +19,7 @@ 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; @@ -34,7 +35,6 @@ import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.calendar.CalendarConstants.CalendarSupportedParameters; import org.apache.fineract.portfolio.calendar.domain.Calendar; import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; @@ -281,8 +281,7 @@ public class CalendarWritePlatformServiceJpaRepositoryImpl implements CalendarWr presentMeetingDate = command.localDateValueOfParameterNamed(CalendarSupportedParameters.START_DATE.getValue()); } if (null != newMeetingDate) { - final Date endDate = Date - .from(presentMeetingDate.minusDays(1).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/client/domain/Client.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java index d0e6c8abe..c8c32fb63 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 @@ -19,6 +19,7 @@ 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; @@ -303,7 +304,7 @@ public final class Client extends AbstractPersistableCustom { this.accountNumber = accountNo; } - this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = currentUser; this.status = status.getValue(); @@ -327,11 +328,11 @@ public final class Client extends AbstractPersistableCustom { } if (activationDate != null) { - this.activationDate = Date.from(activationDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.activationDate = Date.from(activationDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.activatedBy = currentUser; } if (officeJoiningDate != null) { - this.officeJoiningDate = Date.from(officeJoiningDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.officeJoiningDate = Date.from(officeJoiningDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (StringUtils.isNotBlank(firstname)) { this.firstname = firstname.trim(); @@ -370,7 +371,7 @@ public final class Client extends AbstractPersistableCustom { this.gender = gender; } if (dateOfBirth != null) { - this.dateOfBirth = Date.from(dateOfBirth.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dateOfBirth = Date.from(dateOfBirth.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.clientType = clientType; this.clientClassification = clientClassification; @@ -439,7 +440,7 @@ public final class Client extends AbstractPersistableCustom { throw new PlatformApiDataValidationException(dataValidationErrors); } - this.activationDate = Date.from(activationLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.activationDate = Date.from(activationLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.activatedBy = currentUser; this.officeJoiningDate = this.activationDate; this.status = ClientStatus.ACTIVE.getValue(); @@ -618,7 +619,7 @@ public final class Client extends AbstractPersistableCustom { actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.activationDateParamName); - this.activationDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.activationDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.officeJoiningDate = this.activationDate; } @@ -629,7 +630,7 @@ public final class Client extends AbstractPersistableCustom { actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.dateOfBirthParamName); - this.dateOfBirth = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dateOfBirth = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInLocalDateParameterNamed(ClientApiConstants.submittedOnDateParamName, getSubmittedOnDate())) { @@ -639,7 +640,7 @@ public final class Client extends AbstractPersistableCustom { actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.submittedOnDateParamName); - this.submittedOnDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } validateUpdate(); 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 678f37bf6..203e1ccd5 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 @@ -20,6 +20,7 @@ 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; @@ -115,7 +116,7 @@ public class ClientCharge extends AbstractPersistableCustom { this.charge = charge; this.penaltyCharge = charge.isPenalty(); this.chargeTime = charge.getChargeTimeType(); - this.dueDate = (dueDate == null) ? null : Date.from(dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = (dueDate == null) ? null : Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.chargeCalculation = charge.getChargeCalculation(); BigDecimal chargeAmount = charge.getAmount(); 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 836cf9299..5c6772f3e 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 @@ -19,6 +19,7 @@ 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; @@ -98,7 +99,7 @@ public class ClientNonPerson extends AbstractPersistableCustom { } if (incorpValidityTill != null) { - this.incorpValidityTill = Date.from(incorpValidityTill.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.incorpValidityTill = Date.from(incorpValidityTill.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (StringUtils.isNotBlank(remarks)) { @@ -195,7 +196,7 @@ public class ClientNonPerson extends AbstractPersistableCustom { actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.incorpValidityTillParamName); - this.incorpValidityTill = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 94f1497d2..ea343223b 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 @@ -20,6 +20,7 @@ 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; @@ -125,7 +126,7 @@ public class ClientTransaction extends AbstractPersistableCustom { this.office = office; this.paymentDetail = paymentDetail; this.typeOf = typeOf; - this.dateOf = Date.from(transactionLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dateOf = Date.from(transactionLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.amount = amount.getAmount(); this.reversed = reversed; this.externalId = externalId; 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 00f6d098f..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 @@ -20,6 +20,7 @@ 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; @@ -45,7 +46,6 @@ import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.dataqueries.data.EntityTables; import org.apache.fineract.infrastructure.dataqueries.data.StatusEnum; import org.apache.fineract.infrastructure.dataqueries.service.EntityDatatableChecksWritePlatformService; @@ -735,8 +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(Date.from(closureDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()))) { + } 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()); @@ -754,7 +754,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP } } - client.close(currentUser, closureReason, Date.from(closureDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + client.close(currentUser, closureReason, Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -848,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, Date.from(rejectionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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)); @@ -880,8 +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, - Date.from(withdrawalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + client.withdraw(currentUser, withdrawalReason, Date.from(withdrawalDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -906,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, Date.from(reactivateDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + client.reActivate(currentUser, Date.from(reactivateDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -932,7 +931,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP undoRejectDate, client.getRejectedDate()); } - client.reOpened(currentUser, Date.from(undoRejectDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + client.reOpened(currentUser, Date.from(undoRejectDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); this.clientRepository.saveAndFlush(client); return new CommandProcessingResultBuilder() // @@ -958,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, Date.from(undoWithdrawalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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/service/CollectionSheetReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java index f10d04b88..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 @@ -29,6 +29,7 @@ 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; @@ -40,7 +41,6 @@ import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDoma import org.apache.fineract.infrastructure.core.api.JsonQuery; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.organisation.monetary.data.CurrencyData; @@ -319,8 +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(Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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 @@ -456,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(Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + final String dueDateStr = df.format(Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); final JLGCollectionSheetFaltDataMapper mapper = new JLGCollectionSheetFaltDataMapper(); @@ -669,8 +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(Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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/floatingrates/domain/FloatingRate.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java index 13f9c55cd..7f98dd3c5 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 @@ -23,6 +23,7 @@ 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; @@ -111,8 +112,8 @@ public class FloatingRate extends AbstractPersistableCustom { final LocalDate currentDate = DateUtils.getLocalDateOfTenant(); return new FloatingRate(name, isBaseLendingRate, isActive, floatingRatePeriods, currentUser, currentUser, - Date.from(currentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - Date.from(currentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } private static List getRatePeriods(final AppUser currentUser, final JsonCommand command) { @@ -125,7 +126,7 @@ public class FloatingRate extends AbstractPersistableCustom { final JsonObject ratePeriodObject = ratePeriod.getAsJsonObject(); final JsonParserHelper helper = new JsonParserHelper(); final Date fromDate = Date.from(helper.extractLocalDateNamed("fromDate", ratePeriod, new HashSet()) - .atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + .atStartOfDay(ZoneId.systemDefault()).toInstant()); final BigDecimal interestRate = ratePeriodObject.get("interestRate").getAsBigDecimal(); final boolean isDifferentialToBaseLendingRate = helper.parameterExists("isDifferentialToBaseLendingRate", ratePeriod) ? ratePeriodObject.get("isDifferentialToBaseLendingRate").getAsBoolean() @@ -210,7 +211,7 @@ public class FloatingRate extends AbstractPersistableCustom { if (fromDate.isAfter(today)) { ratePeriod.setActive(false); ratePeriod.setModifiedBy(appUser); - ratePeriod.setModifiedOn(Date.from(today.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + ratePeriod.setModifiedOn(Date.from(today.atStartOfDay(ZoneId.systemDefault()).toInstant())); } } } 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 2186d1257..4188f7ddd 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 @@ -19,6 +19,7 @@ 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; @@ -208,7 +209,7 @@ public final class Group extends AbstractPersistableCustom { this.groupMembers.addAll(groupMembers); } - this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = currentUser; this.staffHistory = null; @@ -240,7 +241,7 @@ public final class Group extends AbstractPersistableCustom { validateStatusNotEqualToActiveAndLogError(dataValidationErrors); if (dataValidationErrors.isEmpty()) { this.status = GroupingTypeStatus.ACTIVE.getValue(); - setActivationDate(Date.from(activationLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), currentUser, + setActivationDate(Date.from(activationLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), currentUser, dataValidationErrors); } @@ -335,7 +336,7 @@ public final class Group extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.activationDateParamName); if (newValue != null) { - this.activationDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.activationDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -353,7 +354,7 @@ public final class Group extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.submittedOnDateParamName); if (newValue != null) { - this.submittedOnDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -539,7 +540,7 @@ public final class Group extends AbstractPersistableCustom { } this.closureReason = closureReason; - this.closureDate = Date.from(closureDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/StaffAssignmentHistory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/StaffAssignmentHistory.java index 39ec070ea..bf0c92ab4 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 @@ -19,6 +19,7 @@ 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; @@ -52,8 +53,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, Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - null); + return new StaffAssignmentHistory(center, staff, Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), null); } protected StaffAssignmentHistory() { @@ -72,11 +72,11 @@ public class StaffAssignmentHistory extends AbstractAuditableCustom { } public void updateStartDate(final LocalDate startDate) { - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateEndDate(final LocalDate endDate) { - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public boolean matchesStartDateOf(final LocalDate matchingDate) { 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 9f98dc070..4b4a1ae87 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 @@ -19,6 +19,7 @@ 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; @@ -654,7 +655,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group throw new InvalidGroupStateTransitionException(groupOrCenter.getGroupLevel().getLevelName(), "close", "loan.not.closed", errorMessage); } else if (loanStatus.isClosed() - && loan.getClosedOnDate().after(Date.from(closureDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()))) { + && 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/domain/InterestRateChartFields.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartFields.java index 9a0986063..4bc9e51ea 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 @@ -27,6 +27,7 @@ import static org.apache.fineract.portfolio.interestratechart.InterestRateChartA 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; @@ -71,8 +72,8 @@ public class InterestRateChartFields { boolean isPrimaryGroupingByAmount) { this.name = name; this.description = description; - this.fromDate = Date.from(fromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.endDate = (toDate == null) ? null : Date.from(toDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInBooleanParameterNamed(isPrimaryGroupingByAmountParamName, this.isPrimaryGroupingByAmount)) { 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 2a0cef599..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 @@ -20,9 +20,9 @@ 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.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; @@ -89,7 +89,7 @@ public class LoanScheduleAccrualData { } public Date getDueDate() { - return Date.from(this.dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index 6d679ba8d..60c9afa1f 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 @@ -28,6 +28,7 @@ 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; @@ -1308,9 +1309,8 @@ public class Loan extends AbstractPersistableCustom { } public void updateLoanScheduleDependentDerivedFields() { - this.expectedMaturityDate = Date - .from(determineExpectedMaturityDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.actualMaturityDate = Date.from(determineExpectedMaturityDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.expectedMaturityDate = Date.from(determineExpectedMaturityDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); + this.actualMaturityDate = Date.from(determineExpectedMaturityDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); } private void updateLoanSummaryDerivedFields() { @@ -1459,7 +1459,7 @@ public class Loan extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(submittedOnDateParamName); - this.submittedOnDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String expectedDisbursementDateParamName = "expectedDisbursementDate"; @@ -1471,7 +1471,7 @@ public class Loan extends AbstractPersistableCustom { actualChanges.put("recalculateLoanSchedule", true); final LocalDate newValue = command.localDateValueOfParameterNamed(expectedDisbursementDateParamName); - this.expectedDisbursementDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.expectedDisbursementDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); removeFirstDisbursementTransaction(); } @@ -1485,7 +1485,7 @@ public class Loan extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(repaymentsStartingFromDateParamName); if (newValue != null) { - this.expectedFirstRepaymentOnDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.expectedFirstRepaymentOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.expectedFirstRepaymentOnDate = null; } @@ -1508,7 +1508,7 @@ public class Loan extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(interestChargedFromDateParamName); if (newValue != null) { - this.interestChargedFromDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.interestChargedFromDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.interestChargedFromDate = null; } @@ -1747,7 +1747,7 @@ public class Loan extends AbstractPersistableCustom { locale); if (date != null) { returnObject.put(LoanApiConstants.disbursementDateParameterName, - Date.from(date.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant())); } } } @@ -1990,10 +1990,10 @@ public class Loan extends AbstractPersistableCustom { this.externalId = externalId; this.termFrequency = loanApplicationTerms.getLoanTermFrequency(); this.termPeriodFrequencyType = loanApplicationTerms.getLoanTermPeriodFrequencyType().getValue(); - this.submittedOnDate = Date.from(submittedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(submittedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = currentUser; this.expectedDisbursementDate = Date - .from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + .from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); this.expectedFirstRepaymentOnDate = loanApplicationTerms.getRepaymentStartFromDate(); this.interestChargedFromDate = loanApplicationTerms.getInterestChargedFromDate(); @@ -2080,9 +2080,9 @@ public class Loan extends AbstractPersistableCustom { final Locale locale = new Locale(command.locale()); final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); - this.rejectedOnDate = Date.from(rejectedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.rejectedOnDate = Date.from(rejectedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.rejectedBy = currentUser; - this.closedOnDate = Date.from(rejectedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(rejectedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; actualChanges.put("locale", command.locale()); @@ -2129,9 +2129,9 @@ public class Loan extends AbstractPersistableCustom { final Locale locale = new Locale(command.locale()); final DateTimeFormatter fmt = DateTimeFormatter.ofPattern(command.dateFormat()).withLocale(locale); - this.withdrawnOnDate = Date.from(withdrawnOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.withdrawnOnDate = Date.from(withdrawnOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.withdrawnBy = currentUser; - this.closedOnDate = Date.from(withdrawnOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(withdrawnOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; actualChanges.put("locale", command.locale()); @@ -2241,7 +2241,7 @@ public class Loan extends AbstractPersistableCustom { loanProduct.maxTrancheCount(), disbursementDetails.size()); } } - this.approvedOnDate = Date.from(approvedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.approvedOnDate = Date.from(approvedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.approvedBy = currentUser; actualChanges.put("locale", command.locale()); actualChanges.put("dateFormat", command.dateFormat()); @@ -2256,8 +2256,7 @@ public class Loan extends AbstractPersistableCustom { } if (expecteddisbursementDate != null) { - this.expectedDisbursementDate = Date - .from(expecteddisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.expectedDisbursementDate = Date.from(expecteddisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); actualChanges.put("expectedDisbursementDate", expectedDisbursementDate); if (expecteddisbursementDate.isBefore(approvedOn)) { @@ -2415,10 +2414,9 @@ public class Loan extends AbstractPersistableCustom { final boolean isSpecificToInstallment = false; final Boolean isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled = scheduleGeneratorDTO .isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled(); - Date effectiveDateFrom = Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + Date effectiveDateFrom = Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (!isChangeEmiIfRepaymentDateSameAsDisbursementDateEnabled && actualDisbursementDate.equals(nextPossibleRepaymentDate)) { - effectiveDateFrom = Date - .from(nextPossibleRepaymentDate.plusDays(1).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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()); @@ -2431,7 +2429,7 @@ public class Loan extends AbstractPersistableCustom { if (rescheduledRepaymentDate != null && this.loanProduct.isMultiDisburseLoan()) { final boolean isSpecificToInstallment = false; LoanTermVariations loanVariationTerms = new LoanTermVariations(LoanTermVariationType.DUE_DATE.getValue(), - Date.from(nextPossibleRepaymentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), emiAmount, + Date.from(nextPossibleRepaymentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), emiAmount, rescheduledRepaymentDate, isSpecificToInstallment, this, LoanStatus.ACTIVE.getValue()); this.loanTermVariations.add(loanVariationTerms); } @@ -2458,10 +2456,10 @@ public class Loan extends AbstractPersistableCustom { if (details != null) { lastDusburseDate = details.actualDisbursementDate(); } - if (Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()).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, - Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } isMultiTrancheDisburse = true; } @@ -2472,7 +2470,7 @@ public class Loan extends AbstractPersistableCustom { Money disburseAmount = this.loanRepaymentScheduleDetail.getPrincipal().zero(); BigDecimal principalDisbursed = command.bigDecimalValueOfParameterNamed(LoanApiConstants.principalDisbursedParameterName); if (this.actualDisbursementDate == null) { - this.actualDisbursementDate = Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.actualDisbursementDate = Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } BigDecimal diff = BigDecimal.ZERO; Collection details = fetchUndisbursedDetail(); @@ -2482,7 +2480,7 @@ public class Loan extends AbstractPersistableCustom { disburseAmount = disburseAmount.zero(); for (LoanDisbursementDetails disbursementDetails : details) { disbursementDetails.updateActualDisbursementDate( - Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); disburseAmount = disburseAmount.plus(disbursementDetails.principal()); } } @@ -2498,7 +2496,7 @@ public class Loan extends AbstractPersistableCustom { } else { for (LoanDisbursementDetails disbursementDetails : details) { disbursementDetails.updateActualDisbursementDate( - Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); disbursementDetails.updatePrincipal(principalDisbursed); } } @@ -2780,8 +2778,9 @@ public class Loan extends AbstractPersistableCustom { if (getExpectedFirstRepaymentOnDate() != null && (disbursedOn.isAfter(this.fetchRepaymentScheduleInstallment(1).getDueDate()) || disbursedOn.isAfter(getExpectedFirstRepaymentOnDate())) - && Date.from(disbursedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()) - .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, @@ -3281,8 +3280,8 @@ public class Loan extends AbstractPersistableCustom { LoanStatus.fromInt(this.loanStatus)); this.loanStatus = statusEnum.getValue(); - this.closedOnDate = Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.actualMaturityDate = Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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)); @@ -3633,8 +3632,8 @@ public class Loan extends AbstractPersistableCustom { final LocalDate writtenOffOnLocalDate = command.localDateValueOfParameterNamed("transactionDate"); final String txnExternalId = command.stringValueOfParameterNamedAllowingNull("externalId"); - this.closedOnDate = Date.from(writtenOffOnLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.writtenOffOnDate = Date.from(writtenOffOnLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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")); @@ -3721,7 +3720,7 @@ public class Loan extends AbstractPersistableCustom { final LocalDate closureDate = command.localDateValueOfParameterNamed("transactionDate"); final String txnExternalId = command.stringValueOfParameterNamedAllowingNull("externalId"); - this.closedOnDate = Date.from(closureDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(closureDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); changes.put("closedOnDate", command.stringValueOfParameterNamed("transactionDate")); validateActivityNotBeforeClientOrGroupTransferDate(LoanEvent.REPAID_IN_FULL, closureDate); @@ -3752,7 +3751,7 @@ public class Loan extends AbstractPersistableCustom { this.loanStatus = statusEnum.getValue(); changes.put("status", LoanEnumerations.status(this.loanStatus)); } - this.closedOnDate = Date.from(closureDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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()); @@ -3786,7 +3785,7 @@ public class Loan extends AbstractPersistableCustom { this.loanStatus = statusEnum.getValue(); changes.put("status", LoanEnumerations.status(this.loanStatus)); } - this.closedOnDate = Date.from(closureDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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()); @@ -3815,8 +3814,8 @@ public class Loan extends AbstractPersistableCustom { changes.put("status", LoanEnumerations.status(this.loanStatus)); } - this.closedOnDate = Date.from(rescheduledOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.rescheduledOnDate = Date.from(rescheduledOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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")); @@ -4441,7 +4440,7 @@ public class Loan extends AbstractPersistableCustom { } } if (latestRepaymentDate != null) { - this.expectedMaturityDate = Date.from(latestRepaymentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.expectedMaturityDate = Date.from(latestRepaymentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -4495,7 +4494,7 @@ public class Loan extends AbstractPersistableCustom { } } if (latestRepaymentDate != null) { - this.expectedMaturityDate = Date.from(latestRepaymentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.expectedMaturityDate = Date.from(latestRepaymentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -5041,7 +5040,7 @@ public class Loan extends AbstractPersistableCustom { final LocalDate expectedDisbursementDate = command .localDateValueOfParameterNamed(LoanApiConstants.updatedDisbursementDateParameterName); disbursementDetails.updateExpectedDisbursementDateAndAmount( - Date.from(expectedDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), principal); + Date.from(expectedDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), principal); actualChanges.put(LoanApiConstants.disbursementDateParameterName, command.stringValueOfParameterNamed(LoanApiConstants.disbursementDateParameterName)); actualChanges.put(LoanApiConstants.disbursementIdParameterName, @@ -5080,7 +5079,7 @@ public class Loan extends AbstractPersistableCustom { public BigDecimal retriveLastEmiAmount() { BigDecimal emiAmount = this.fixedEmiAmount; - Date startDate = Date.from(this.getDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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(); @@ -5306,13 +5305,13 @@ public class Loan extends AbstractPersistableCustom { if (existingIncomeTransaction == null) { LoanTransaction transaction = LoanTransaction.incomePosting(this, this.getOffice(), - Date.from(compoundingDetail.getEffectiveDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + 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(), - Date.from(compoundingDetail.getEffectiveDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + Date.from(compoundingDetail.getEffectiveDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), compoundingDetail.getAmount(), interest, fee, penalties, currentUser); addLoanTransaction(transaction); } @@ -5833,7 +5832,7 @@ public class Loan extends AbstractPersistableCustom { public void updateRescheduledOnDate(LocalDate rescheduledOnDate) { if (rescheduledOnDate != null) { - this.rescheduledOnDate = Date.from(rescheduledOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.rescheduledOnDate = Date.from(rescheduledOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -6066,11 +6065,11 @@ public class Loan extends AbstractPersistableCustom { if ((loanTermVariations.getTermType().isDueDateVariation() && loanTermVariations.fetchDateValue().isAfter(actualDisbursementDate)) || (loanTermVariations.getTermType().isEMIAmountVariation() && loanTermVariations.getTermApplicableFrom() - .compareTo(Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())) == 0 + .compareTo(Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())) == 0 ? Boolean.TRUE : Boolean.FALSE) || loanTermVariations.getTermApplicableFrom() - .after(Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()))) { + .after(Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()))) { iterator.remove(); } } 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 cfa1039c3..dec83bcc5 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 @@ -21,6 +21,7 @@ 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; @@ -338,8 +339,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { } else { final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), - Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - 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(); @@ -419,8 +419,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { txnExternalId, DateUtils.getLocalDateTimeOfTenant(), currentUser); final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), - Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - 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(); @@ -614,8 +613,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { transactionDate, txnExternalId, DateUtils.getLocalDateTimeOfTenant(), currentUser); final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), - Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - 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(); 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 88a622f00..947e552e7 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 @@ -21,6 +21,7 @@ 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; @@ -197,7 +198,7 @@ public class LoanCharge extends AbstractPersistableCustom { amountPercentageAppliedTo = BigDecimal.ZERO; for (final LoanDisbursementDetails loanDisbursementDetails : loan.getDisbursementDetails()) { if (!loanDisbursementDetails.expectedDisbursementDate() - .after(Date.from(dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()))) { + .after(Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()))) { amountPercentageAppliedTo = amountPercentageAppliedTo.add(loanDisbursementDetails.principal()); } } @@ -244,7 +245,7 @@ public class LoanCharge extends AbstractPersistableCustom { chargeDefinition.getName()); } - this.dueDate = Date.from(dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.dueDate = null; } @@ -391,7 +392,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 = Date.from(dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (amount != null) { @@ -479,7 +480,7 @@ public class LoanCharge extends AbstractPersistableCustom { actualChanges.put("locale", localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(dueDateParamName); - this.dueDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } final String amountParamName = "amount"; 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 26b23a2f9..7786463bb 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 @@ -20,6 +20,7 @@ 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; @@ -46,7 +47,7 @@ public class LoanInterestRecalcualtionAdditionalDetails extends AbstractPersista public LoanInterestRecalcualtionAdditionalDetails(final LocalDate effectiveDate, final BigDecimal amount) { if (effectiveDate != null) { - this.effectiveDate = Date.from(effectiveDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.effectiveDate = Date.from(effectiveDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.amount = amount; } 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 bfec7fbe7..fe038f834 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 @@ -19,6 +19,7 @@ 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; @@ -53,8 +54,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, - Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), null); + return new LoanOfficerAssignmentHistory(loan, loanOfficer, Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), + null); } protected LoanOfficerAssignmentHistory() { @@ -73,11 +74,11 @@ public class LoanOfficerAssignmentHistory extends AbstractAuditableCustom { } public void updateStartDate(final LocalDate startDate) { - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateEndDate(final LocalDate endDate) { - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public boolean matchesStartDateOf(final LocalDate matchingDate) { 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 8219bd480..f276cdd43 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 @@ -20,6 +20,7 @@ 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; @@ -149,8 +150,8 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus final Set compoundingDetails, final BigDecimal rescheduleInterestPortion) { this.loan = loan; this.installmentNumber = installmentNumber; - this.fromDate = Date.from(fromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.dueDate = Date.from(dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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); @@ -167,8 +168,8 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus final Set compoundingDetails) { this.loan = loan; this.installmentNumber = installmentNumber; - this.fromDate = Date.from(fromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.dueDate = Date.from(dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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); @@ -592,7 +593,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 = Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.obligationsMetOnDate = Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -620,7 +621,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 = Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.obligationsMetOnDate = Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.obligationsMetOnDate = null; } @@ -628,13 +629,13 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus public void updateDueDate(final LocalDate newDueDate) { if (newDueDate != null) { - this.dueDate = Date.from(newDueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(newDueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } public void updateFromDate(final LocalDate newFromDate) { if (newFromDate != null) { - this.fromDate = Date.from(newFromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.fromDate = Date.from(newFromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -670,7 +671,7 @@ public final class LoanRepaymentScheduleInstallment extends AbstractAuditableCus public void updateObligationMetOnDate(final LocalDate obligationsMetOnDate) { this.obligationsMetOnDate = (obligationsMetOnDate != null) - ? Date.from(obligationsMetOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()) + ? Date.from(obligationsMetOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()) : null; } 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 b7ded8ca1..d7022cdfa 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 @@ -21,6 +21,7 @@ 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; @@ -219,9 +220,9 @@ public class LoanTransaction extends AbstractPersistableCustom { PaymentDetail paymentDetail = null; String externalId = null; return new LoanTransaction(loan, office, LoanTransactionType.ACCRUAL.getValue(), - Date.from(interestAppliedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), interestPortion, - principalPortion, interestPortion, feesPortion, penaltiesPortion, overPaymentPortion, reversed, paymentDetail, externalId, - createdDate, appUser); + 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, @@ -241,35 +242,35 @@ public class LoanTransaction extends AbstractPersistableCustom { String externalId = null; LocalDateTime createdDate = DateUtils.getLocalDateTimeOfTenant(); return new LoanTransaction(loan, office, LoanTransactionType.ACCRUAL.getValue(), - Date.from(dateOf.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), amount, principalPortion, interestPortion, + 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(), - Date.from(transferDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - loan.getSummary().getTotalOutstanding(), loan.getSummary().getTotalPrincipalOutstanding(), - loan.getSummary().getTotalInterestOutstanding(), loan.getSummary().getTotalFeeChargesOutstanding(), - loan.getSummary().getTotalPenaltyChargesOutstanding(), null, false, null, null, createdDate, appUser); + 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); } 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(), - Date.from(transferDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - loan.getSummary().getTotalOutstanding(), loan.getSummary().getTotalPrincipalOutstanding(), - loan.getSummary().getTotalInterestOutstanding(), loan.getSummary().getTotalFeeChargesOutstanding(), - loan.getSummary().getTotalPenaltyChargesOutstanding(), null, false, null, null, createdDate, appUser); + 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); } 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(), - Date.from(transferDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - loan.getSummary().getTotalOutstanding(), loan.getSummary().getTotalPrincipalOutstanding(), - loan.getSummary().getTotalInterestOutstanding(), loan.getSummary().getTotalFeeChargesOutstanding(), - loan.getSummary().getTotalPenaltyChargesOutstanding(), null, false, null, null, createdDate, appUser); + 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); } public static LoanTransaction refund(final Office office, final Money amount, final PaymentDetail paymentDetail, @@ -359,7 +360,7 @@ public class LoanTransaction extends AbstractPersistableCustom { this.loan = loan; this.typeOf = type.getValue(); this.amount = amount; - this.dateOf = Date.from(date.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dateOf = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.externalId = externalId; this.office = office; this.submittedOnDate = DateUtils.getDateOfTenant(); @@ -374,7 +375,7 @@ public class LoanTransaction extends AbstractPersistableCustom { this.typeOf = type.getValue(); this.paymentDetail = paymentDetail; this.amount = amount; - this.dateOf = Date.from(date.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dateOf = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.externalId = externalId; this.office = office; this.submittedOnDate = DateUtils.getDateOfTenant(); 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 8d73a2e79..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 @@ -20,13 +20,13 @@ 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; 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.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants.GuarantorJSONinputParams; import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorType; @@ -91,7 +91,7 @@ public class GuarantorCommand { } public Date getDobAsDate() { - return Date.from(this.dob.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/loanschedule/domain/LoanApplicationTerms.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java index 80d8ffa20..cd30c1edc 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 @@ -21,12 +21,12 @@ 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; import java.util.Set; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.domain.ApplicationCurrency; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -1369,7 +1369,7 @@ public final class LoanApplicationTerms { public Date getRepaymentStartFromDate() { Date dateValue = null; if (this.repaymentsStartingFromDate != null) { - dateValue = Date.from(this.repaymentsStartingFromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + dateValue = Date.from(this.repaymentsStartingFromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } return dateValue; } @@ -1377,7 +1377,7 @@ public final class LoanApplicationTerms { public Date getInterestChargedFromDate() { Date dateValue = null; if (this.interestChargedFromDate != null) { - dateValue = Date.from(this.interestChargedFromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + dateValue = Date.from(this.interestChargedFromDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } return dateValue; } 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 8eab9f423..ff012d517 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 @@ -25,6 +25,7 @@ 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; @@ -441,8 +442,7 @@ public class LoanScheduleAssembler { } final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, - Date.from(expectedDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - HolidayStatusType.ACTIVE.getValue()); + Date.from(expectedDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); HolidayDetailDTO detailDTO = new HolidayDetailDTO(isHolidayEnabled, holidays, workingDays); @@ -609,8 +609,7 @@ public class LoanScheduleAssembler { final LocalDate expectedDisbursementDate = this.fromApiJsonHelper.extractLocalDateNamed("expectedDisbursementDate", element); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, - Date.from(expectedDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - HolidayStatusType.ACTIVE.getValue()); + Date.from(expectedDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); validateDisbursementDateIsOnNonWorkingDay(loanApplicationTerms.getExpectedDisbursementDate(), workingDays); @@ -658,7 +657,7 @@ public class LoanScheduleAssembler { final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, - Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); @@ -677,7 +676,7 @@ public class LoanScheduleAssembler { final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(officeId, - Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); HolidayDetailDTO holidayDetailDTO = new HolidayDetailDTO(isHolidayEnabled, holidays, workingDays); @@ -859,8 +858,8 @@ public class LoanScheduleAssembler { throw new PlatformApiDataValidationException(dataValidationErrors); } if (loan.getExpectedFirstRepaymentOnDate() == null) { - loan.setExpectedFirstRepaymentOnDate(Date.from( - loan.fetchRepaymentScheduleInstallment(1).getDueDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + loan.setExpectedFirstRepaymentOnDate( + Date.from(loan.fetchRepaymentScheduleInstallment(1).getDueDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); } final LocalDate recalculateFrom = null; ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); @@ -997,13 +996,13 @@ public class LoanScheduleAssembler { LocalDate duedateLocalDate = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.dueDateParamName, arrayElement, dateFormat, locale); - Date dueDate = Date.from(duedateLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(modifiedDuedateLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/LoanScheduleHistoryWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java index 5da16220c..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,10 +19,10 @@ 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; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; @@ -60,13 +60,11 @@ public class LoanScheduleHistoryWritePlatformServiceImpl implements LoanSchedule Date dueDate = null; if (repaymentScheduleInstallment.getFromDate() != null) { - fromDate = Date - .from(repaymentScheduleInstallment.getFromDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + fromDate = Date.from(repaymentScheduleInstallment.getFromDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (repaymentScheduleInstallment.getDueDate() != null) { - dueDate = Date - .from(repaymentScheduleInstallment.getDueDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/rescheduleloan/domain/LoanRescheduleRequest.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java index c1a6407da..ad27b786d 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 @@ -19,6 +19,7 @@ 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; @@ -274,7 +275,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom { if (approvedOnDate != null) { this.approvedByUser = approvedByUser; - this.approvedOnDate = Date.from(approvedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.approvedOnDate = Date.from(approvedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.statusEnum = LoanStatus.APPROVED.getValue(); } } @@ -293,7 +294,7 @@ public class LoanRescheduleRequest extends AbstractPersistableCustom { if (approvedOnDate != null) { this.rejectedByUser = approvedByUser; - this.rejectedOnDate = Date.from(approvedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 367b46f3e..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 @@ -21,11 +21,11 @@ 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.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData; import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO; @@ -109,8 +109,8 @@ public class LoanReschedulePreviewPlatformServiceImpl implements LoanRescheduleP if (loanRescheduleRequestToTermVariationMapping.getLoanTermVariations().getTermType().isDueDateVariation() && rescheduleFromDate != null) { adjustedApplicableDate = loanRescheduleRequestToTermVariationMapping.getLoanTermVariations().fetchDateValue(); - loanRescheduleRequestToTermVariationMapping.getLoanTermVariations().setTermApplicableFrom( - Date.from(rescheduleFromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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/LoanRescheduleRequestWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/service/LoanRescheduleRequestWritePlatformServiceImpl.java index c5ddaa803..1103cbbc9 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 @@ -22,6 +22,7 @@ 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; @@ -226,7 +227,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche if (localDate != null) { // update the value of the "submittedOnDate" variable - submittedOnDate = Date.from(localDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + submittedOnDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -251,7 +252,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche rescheduleFromInstallment = installment.getInstallmentNumber(); // update the value of the "rescheduleFromDate" variable - rescheduleFromDate = Date.from(localDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + rescheduleFromDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -262,7 +263,7 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche if (localDate != null) { // update the value of the "adjustedDueDate"variable - adjustedDueDate = Date.from(localDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + adjustedDueDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -316,8 +317,8 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche if (installment.getDueDate().isEqual(rescheduleFromLocDate) || installment.getDueDate().isEqual(endDateLocDate) || (installment.getDueDate().isAfter(rescheduleFromLocDate) && installment.getDueDate().isBefore(endDateLocDate))) { createLoanTermVariations(termType, loan, - Date.from(installment.getDueDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - Date.from(installment.getDueDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + 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)) { @@ -429,8 +430,8 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche && activeLoanTermVariation.fetchDateValue().equals(dueDateVariationInCurrentRequest.fetchTermApplicaDate())) { activeLoanTermVariation.markAsInactive(); rescheduleFromDate = activeLoanTermVariation.fetchTermApplicaDate(); - dueDateVariationInCurrentRequest.setTermApplicableFrom( - Date.from(rescheduleFromDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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, @@ -440,9 +441,8 @@ public class LoanRescheduleRequestWritePlatformServiceImpl implements LoanResche changeMap.put(currentScheduleDate, modifiedScheduleDate); } if (changeMap.containsKey(activeLoanTermVariation.fetchTermApplicaDate())) { - activeLoanTermVariation - .setTermApplicableFrom(Date.from(changeMap.get(activeLoanTermVariation.fetchTermApplicaDate()) - .atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + activeLoanTermVariation.setTermApplicableFrom(Date.from(changeMap + .get(activeLoanTermVariation.fetchTermApplicaDate()).atStartOfDay(ZoneId.systemDefault()).toInstant())); } } } 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 7e66e9161..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 @@ -20,6 +20,7 @@ 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; @@ -270,9 +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(), - Date.from(accruedTill.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), 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); @@ -293,7 +293,7 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat scheduleAccrualData.getRepaymentScheduleId()); String updateLoan = "UPDATE m_loan SET accrued_till=? WHERE id=?"; - this.jdbcTemplate.update(updateLoan, Date.from(accruedTill.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + 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/LoanAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java index e2e8ff439..805bf3434 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 @@ -21,6 +21,7 @@ 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; @@ -35,7 +36,6 @@ import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDoma import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.holiday.domain.Holiday; import org.apache.fineract.organisation.holiday.domain.HolidayRepository; import org.apache.fineract.organisation.holiday.domain.HolidayStatusType; @@ -333,7 +333,7 @@ public class LoanAssembler { final LoanApplicationTerms loanApplicationTerms = this.loanScheduleAssembler.assembleLoanTerms(element); final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loanApplication.getOfficeId(), - Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + Date.from(loanApplicationTerms.getExpectedDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); @@ -391,7 +391,7 @@ public class LoanAssembler { final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loanApplication.getOfficeId(), - Date.from(loanApplication.getExpectedDisbursedOnLocalDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + 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/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index e77f93dfa..d99113c61 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 @@ -24,6 +24,7 @@ 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; @@ -2078,13 +2079,13 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final Collection intRates = this.floatingRatesReadPlatformService .retrieveInterestRatePeriods(loanData.loanProductId()); for (final InterestRatePeriodData rate : intRates) { - if (rate.getFromDate().compareTo( - Date.from(loanData.getDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())) > 0 + 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( - Date.from(loanData.getDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())) <= 0) { + } else if (rate.getFromDate() + .compareTo(Date.from(loanData.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant())) <= 0) { updateInterestRatePeriodData(rate, loanData); intRatePeriodData.add(rate); break; @@ -2110,9 +2111,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { } rate.setEffectiveInterestRate(effectiveInterestRate); - if (rate.getFromDate() - .compareTo(Date.from(loan.getDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())) < 0) { - rate.setFromDate(Date.from(loan.getDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + if (rate.getFromDate().compareTo(Date.from(loan.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant())) < 0) { + rate.setFromDate(Date.from(loan.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); } } 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 c341e76da..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 @@ -22,6 +22,7 @@ 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; @@ -30,7 +31,6 @@ import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.holiday.domain.Holiday; import org.apache.fineract.organisation.holiday.domain.HolidayRepository; import org.apache.fineract.organisation.holiday.domain.HolidayStatusType; @@ -190,7 +190,7 @@ public class LoanUtilService { private HolidayDetailDTO constructHolidayDTO(final Loan loan) { final boolean isHolidayEnabled = this.configurationDomainService.isRescheduleRepaymentsOnHolidaysEnabled(); final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), - Date.from(loan.getDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + Date.from(loan.getDisbursementDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), HolidayStatusType.ACTIVE.getValue()); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnHoliday = this.configurationDomainService.allowTransactionsOnHolidayEnabled(); @@ -323,7 +323,7 @@ public class LoanUtilService { LocalDate date = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName, jsonObject, dateFormat, locale); if (date != null) { - expectedDisbursementDate = Date.from(date.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index 2fe9fb58c..cbdce9892 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 @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; @@ -399,7 +400,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf LocalDate recalculateFrom = null; if (!loan.isMultiDisburmentLoan()) { - loan.setActualDisbursementDate(Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + loan.setActualDisbursementDate(Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } ScheduleGeneratorDTO scheduleGeneratorDTO = this.loanUtilService.buildScheduleGeneratorDTO(loan, recalculateFrom); @@ -972,8 +973,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf for (final SingleRepaymentCommand singleLoanRepaymentCommand : repaymentCommand) { if (singleLoanRepaymentCommand != null) { Loan loan = this.loanRepositoryWrapper.findOneWithNotFoundDetection(singleLoanRepaymentCommand.getLoanId()); - final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), Date.from( - singleLoanRepaymentCommand.getTransactionDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + final List holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), + Date.from(singleLoanRepaymentCommand.getTransactionDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); final WorkingDays workingDays = this.workingDaysRepository.findOne(); final boolean allowTransactionsOnNonWorkingDay = this.configurationDomainService.allowTransactionsOnNonWorkingDayEnabled(); boolean isHolidayEnabled = false; @@ -2409,7 +2410,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf } holidays = this.holidayRepository.findByOfficeIdAndGreaterThanDate(loan.getOfficeId(), - Date.from(loan.getDisbursementDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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); @@ -2463,14 +2464,14 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf if (loan.isGroupLoan()) { final List loansToUpdateForLoanCounter = this.loanRepositoryWrapper.getGroupLoansDisbursedAfter( - Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), loan.getGroupId(), + 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( - Date.from(actualDisbursementDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), loan.getClientId()); + Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), loan.getClientId()); final Integer newLoanCounter = getNewClientOrJLGLoanCounter(loan); final Integer newLoanProductCounter = getNewClientOrJLGLoanProductCounter(loan); updateLoanCounter(loan, loansToUpdateForLoanCounter, newLoanCounter, newLoanProductCounter); @@ -3325,8 +3326,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf private void validateTransactionsForTransfer(final Loan loan, final LocalDate transferDate) { for (LoanTransaction transaction : loan.getLoanTransactions()) { - if ((transaction.getTransactionDate().isEqual(transferDate) && transaction.getCreatedDateTime() - .isEqual(transferDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toLocalDateTime())) + if ((transaction.getTransactionDate().isEqual(transferDate) + && 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/domain/LoanProduct.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java index 37ac51698..949a2f3e0 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 @@ -22,6 +22,7 @@ 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; @@ -642,11 +643,11 @@ public class LoanProduct extends AbstractPersistableCustom { this.useBorrowerCycle = useBorrowerCycle; if (startDate != null) { - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (closeDate != null) { - this.closeDate = Date.from(closeDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closeDate = Date.from(closeDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } this.externalId = externalId; @@ -878,7 +879,7 @@ public class LoanProduct extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(startDateParamName); if (newValue != null) { - this.startDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.startDate = null; } @@ -893,7 +894,7 @@ public class LoanProduct extends AbstractPersistableCustom { final LocalDate newValue = command.localDateValueOfParameterNamed(closeDateParamName); if (newValue != null) { - this.closeDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closeDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.closeDate = null; } 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 a70663785..09ea4efba 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 @@ -24,6 +24,7 @@ import static org.apache.fineract.portfolio.meeting.MeetingApiConstants.clientsA 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; @@ -106,7 +107,7 @@ public class Meeting extends AbstractPersistableCustom { actualChanges.put(meetingDateParamName, valueAsInput); actualChanges.put("dateFormat", dateFormatAsInput); actualChanges.put("locale", localeAsInput); - this.meetingDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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); 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 9d9db2240..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 @@ -25,6 +25,7 @@ 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; @@ -308,8 +309,7 @@ public class DepositAccountDomainServiceJpa implements DepositAccountDomainServi account.updateOnAccountClosureStatus(onClosureType); } changes.put("reinvestedDepositId", reinvestedDeposit.getId()); - reinvestedDeposit.approveAndActivateApplication( - Date.from(closedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), user); + reinvestedDeposit.approveAndActivateApplication(Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), user); this.savingsAccountRepository.save(reinvestedDeposit); } else if (onClosureType.isTransferToSavings()) { 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 d48a04deb..0a0eea2e5 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 @@ -20,6 +20,7 @@ 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; @@ -72,7 +73,7 @@ public class DepositAccountOnHoldTransaction extends AbstractPersistableCustom { this.savingsAccount = savingsAccount; this.amount = amount; this.transactionType = transactionType.getValue(); - this.transactionDate = Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.transactionDate = Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.createdDate = new Date(); this.reversed = reversed; } 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 0ecbb161a..cad363de9 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 @@ -30,6 +30,7 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.transfe 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; @@ -113,15 +114,14 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { final DepositAccountOnClosureType accountOnClosureType, Boolean transferInterest, Long transferToSavingsId) { this.depositAmount = depositAmount; this.maturityAmount = maturityAmount; - this.maturityDate = (maturityDate == null) ? null - : Date.from(maturityDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 - : Date.from(expectedFirstDepositOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + : Date.from(expectedFirstDepositOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.onAccountClosureType = (accountOnClosureType == null) ? null : accountOnClosureType.getValue(); this.transferInterestToLinkedAccount = transferInterest; this.transferToSavingsAccountId = transferToSavingsId; @@ -156,7 +156,7 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { actualChanges.put(expectedFirstDepositOnDateParamName, newValueAsString); actualChanges.put(localeParamName, localeAsInput); actualChanges.put(dateFormatParamName, dateFormat); - this.expectedFirstDepositOnDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.expectedFirstDepositOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInBooleanParameterNamed(transferInterestToSavingsParamName, this.transferInterestToLinkedAccount)) { @@ -219,13 +219,13 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { public void updateMaturityDetails(final BigDecimal maturityAmount, final LocalDate maturityDate) { this.maturityAmount = maturityAmount; - this.maturityDate = Date.from(maturityDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 = Date.from(maturityDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.maturityDate = Date.from(maturityDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateDepositAmount(final BigDecimal depositAmount) { @@ -325,8 +325,7 @@ public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom { } public void updateExpectedFirstDepositDate(final LocalDate expectedFirstDepositOnDate) { - this.expectedFirstDepositOnDate = Date - .from(expectedFirstDepositOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/FixedDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/FixedDepositAccount.java index e516e8c27..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 @@ -26,6 +26,7 @@ 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; @@ -419,7 +420,7 @@ public class FixedDepositAccount extends SavingsAccount { this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = Date.from(closedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; this.summary.updateSummary(this.currency, this.savingsAccountTransactionSummaryWrapper, this.transactions); } @@ -507,7 +508,7 @@ public class FixedDepositAccount extends SavingsAccount { this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = Date.from(closedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/RecurringDepositAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositAccount.java index 16541c0e2..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 @@ -26,6 +26,7 @@ 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; @@ -388,7 +389,7 @@ public class RecurringDepositAccount extends SavingsAccount { } final SavingsAccountTransaction transaction = SavingsAccountTransaction.deposit(null, office(), null, dueDate, installment.getDepositAmountOutstanding(getCurrency()), - Date.from(installment.dueDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), null); + Date.from(installment.dueDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), null); allTransactions.add(transaction); } } @@ -525,7 +526,7 @@ public class RecurringDepositAccount extends SavingsAccount { this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = Date.from(closedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; this.summary.updateSummary(this.currency, this.savingsAccountTransactionSummaryWrapper, this.transactions); @@ -624,7 +625,7 @@ public class RecurringDepositAccount extends SavingsAccount { this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = Date.from(closedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; this.summary.updateSummary(this.currency, this.savingsAccountTransactionSummaryWrapper, this.transactions); } @@ -1156,11 +1157,11 @@ public class RecurringDepositAccount extends SavingsAccount { this.activatedBy = null; this.lockedInUntilDate = null; - this.activatedOnDate = Date.from(now.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.activatedOnDate = Date.from(now.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void setClosedOnDate(final LocalDate closedOnDate) { - this.closedOnDate = Date.from(closedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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, - Date.from(installmentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), 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 bc6ae4873..d5f1e3e7b 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 @@ -20,6 +20,7 @@ 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; @@ -198,7 +199,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 = Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 f70528fae..86359dd31 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 @@ -36,6 +36,7 @@ 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; @@ -398,7 +399,7 @@ public class SavingsAccount extends AbstractPersistableCustom { this.externalId = externalId; this.status = status.getValue(); this.accountType = accountType.getValue(); - this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(submittedOnDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.submittedBy = submittedBy; this.nominalAnnualInterestRate = nominalAnnualInterestRate; this.interestCompoundingPeriodType = interestCompoundingPeriodType.getValue(); @@ -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 = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.submittedOnDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (command.isChangeInStringParameterNamed(SavingsApiConstants.accountNoParamName, this.accountNumber)) { @@ -1875,7 +1876,7 @@ public class SavingsAccount extends AbstractPersistableCustom { final LocalDate approvedOn = command.localDateValueOfParameterNamed(SavingsApiConstants.approvedOnDateParamName); final String approvedOnDateChange = command.stringValueOfParameterNamed(SavingsApiConstants.approvedOnDateParamName); - this.approvedOnDate = Date.from(approvedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.approvedOnDate = Date.from(approvedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.approvedBy = currentUser; actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); actualChanges.put(SavingsApiConstants.dateFormatParamName, command.dateFormat()); @@ -1997,12 +1998,12 @@ public class SavingsAccount extends AbstractPersistableCustom { if (transaction.isAnnualFeeAndNotReversed()) { if (lastAnnualFeeTransactionDate == null) { lastAnnualFeeTransactionDate = transaction.transactionLocalDate(); - nextDueDate = Date.from(lastAnnualFeeTransactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + nextDueDate = Date.from(lastAnnualFeeTransactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (transaction.transactionLocalDate().isAfter(lastAnnualFeeTransactionDate)) { lastAnnualFeeTransactionDate = transaction.transactionLocalDate(); - nextDueDate = Date.from(lastAnnualFeeTransactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + nextDueDate = Date.from(lastAnnualFeeTransactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } } @@ -2035,11 +2036,11 @@ public class SavingsAccount extends AbstractPersistableCustom { final LocalDate rejectedOn = command.localDateValueOfParameterNamed(SavingsApiConstants.rejectedOnDateParamName); final String rejectedOnAsString = command.stringValueOfParameterNamed(SavingsApiConstants.rejectedOnDateParamName); - this.rejectedOnDate = Date.from(rejectedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.rejectedOnDate = Date.from(rejectedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.rejectedBy = currentUser; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = Date.from(rejectedOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(rejectedOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); @@ -2103,9 +2104,9 @@ public class SavingsAccount extends AbstractPersistableCustom { this.rejectedOnDate = null; this.rejectedBy = null; - this.withdrawnOnDate = Date.from(withdrawnOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.withdrawnOnDate = Date.from(withdrawnOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.withdrawnBy = currentUser; - this.closedOnDate = Date.from(withdrawnOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(withdrawnOn.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; actualChanges.put(SavingsApiConstants.localeParamName, command.locale()); @@ -2176,7 +2177,7 @@ public class SavingsAccount extends AbstractPersistableCustom { this.withdrawnBy = null; this.closedOnDate = null; this.closedBy = null; - this.activatedOnDate = Date.from(activationDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.activatedOnDate = Date.from(activationDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.activatedBy = currentUser; this.lockedInUntilDate = calculateDateAccountIsLockedUntil(getActivationLocalDate()); @@ -2351,7 +2352,7 @@ public class SavingsAccount extends AbstractPersistableCustom { this.rejectedBy = null; this.withdrawnOnDate = null; this.withdrawnBy = null; - this.closedOnDate = Date.from(closedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.closedOnDate = Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.closedBy = currentUser; return actualChanges; @@ -2380,20 +2381,20 @@ public class SavingsAccount extends AbstractPersistableCustom { case INVALID: break; case DAYS: - lockedInUntilLocalDate = Date.from(activationLocalDate.plusDays(this.lockinPeriodFrequency) - .atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + lockedInUntilLocalDate = Date + .from(activationLocalDate.plusDays(this.lockinPeriodFrequency).atStartOfDay(ZoneId.systemDefault()).toInstant()); break; case WEEKS: - lockedInUntilLocalDate = Date.from(activationLocalDate.plusWeeks(this.lockinPeriodFrequency) - .atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + lockedInUntilLocalDate = Date + .from(activationLocalDate.plusWeeks(this.lockinPeriodFrequency).atStartOfDay(ZoneId.systemDefault()).toInstant()); break; case MONTHS: - lockedInUntilLocalDate = Date.from(activationLocalDate.plusMonths(this.lockinPeriodFrequency) - .atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + lockedInUntilLocalDate = Date + .from(activationLocalDate.plusMonths(this.lockinPeriodFrequency).atStartOfDay(ZoneId.systemDefault()).toInstant()); break; case YEARS: - lockedInUntilLocalDate = Date.from(activationLocalDate.plusYears(this.lockinPeriodFrequency) - .atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + lockedInUntilLocalDate = Date + .from(activationLocalDate.plusYears(this.lockinPeriodFrequency).atStartOfDay(ZoneId.systemDefault()).toInstant()); break; case WHOLE_TERM: LOG.error("TODO Implement calculateDateAccountIsLockedUntil for WHOLE_TERM"); 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 134a649b4..1b57114d9 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 @@ -31,6 +31,7 @@ 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; @@ -212,7 +213,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { this.feeInterval = (feeInterval == null) ? chargeDefinition.feeInterval() : feeInterval; } - this.dueDate = (dueDate == null) ? null : Date.from(dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = (dueDate == null) ? null : Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.chargeCalculation = chargeDefinition.getChargeCalculation(); if (chargeCalculation != null) { @@ -393,7 +394,7 @@ 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 = Date.from(dueDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(dueDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (isWeeklyFee()) { this.feeOnDay = dueDate.get(ChronoField.DAY_OF_WEEK); } @@ -455,7 +456,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { actualChanges.put(localeParamName, localeAsInput); final LocalDate newValue = command.localDateValueOfParameterNamed(dueAsOfDateParamName); - this.dueDate = Date.from(newValue.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(newValue.atStartOfDay(ZoneId.systemDefault()).toInstant()); if (this.isWeeklyFee()) { this.feeOnDay = newValue.get(ChronoField.DAY_OF_WEEK); } @@ -759,7 +760,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { public void updateToNextDueDateFrom(final LocalDate startingDate) { if (isAnnualFee() || isMonthlyFee() || isWeeklyFee()) { - this.dueDate = Date.from(getNextDueDateFrom(startingDate).atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(getNextDueDateFrom(startingDate).atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -815,7 +816,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { if (isAnnualFee() || isMonthlyFee() || isWeeklyFee()) { LocalDate nextDueLocalDate = LocalDate.ofInstant(dueDate.toInstant(), DateUtils.getDateTimeZoneOfTenant()); nextDueLocalDate = calculateNextDueDate(nextDueLocalDate); - this.dueDate = Date.from(nextDueLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(nextDueLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -833,7 +834,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { nextDueLocalDate = setDayOfWeek(nextDueLocalDate); } - this.dueDate = Date.from(nextDueLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dueDate = Date.from(nextDueLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } @@ -863,7 +864,7 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { } public void inactiavateCharge(final LocalDate inactivationOnDate) { - this.inactivationDate = Date.from(inactivationOnDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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/SavingsAccountSummary.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountSummary.java index 556aac4b4..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 @@ -20,6 +20,7 @@ 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; @@ -115,7 +116,7 @@ public final class SavingsAccountSummary { interestEarned = interestEarned == null ? Money.zero(currency) : interestEarned; totalEarned = totalEarned.plus(interestEarned); } - this.lastInterestCalculationDate = Date.from(interestCalculationDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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 79e09747e..edb99fabb 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 @@ -20,6 +20,7 @@ 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; @@ -291,7 +292,7 @@ public final class SavingsAccountTransaction extends AbstractPersistableCustom { this.savingsAccount = savingsAccount; this.office = office; this.typeOf = typeOf; - this.dateOf = Date.from(transactionLocalDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.dateOf = Date.from(transactionLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); this.amount = amount; this.reversed = isReversed; this.paymentDetail = paymentDetail; @@ -430,9 +431,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 = Date.from(this.transactionLocalDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.balanceEndDate = Date.from(this.transactionLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant()); } else if (endOfBalanceDate != null) { - this.balanceEndDate = Date.from(endOfBalanceDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.balanceEndDate = Date.from(endOfBalanceDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } else { this.balanceEndDate = null; } 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 6d7b13a13..8bbdc6c92 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 @@ -19,6 +19,7 @@ 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; @@ -55,7 +56,7 @@ public class SavingsOfficerAssignmentHistory extends AbstractAuditableCustom { public static SavingsOfficerAssignmentHistory createNew(final SavingsAccount account, final Staff savingsOfficer, final LocalDate assignmentDate) { return new SavingsOfficerAssignmentHistory(account, savingsOfficer, - Date.from(assignmentDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), null); + Date.from(assignmentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), null); } protected SavingsOfficerAssignmentHistory() { @@ -79,11 +80,11 @@ public class SavingsOfficerAssignmentHistory extends AbstractAuditableCustom { } public void updateStartDate(final LocalDate startDate) { - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public void updateEndDate(final LocalDate endDate) { - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public boolean matchesStartDateOf(final LocalDate matchingDate) { 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 5a8ecd878..b3f0b1f9c 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 @@ -31,6 +31,7 @@ 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; @@ -514,8 +515,7 @@ public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi } List savingTransactions = account.getTransactions(); for (SavingsAccountTransaction savingTransaction : savingTransactions) { - if (Date.from(transactionDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()) - .before(savingTransaction.getDateOf())) { + if (Date.from(transactionDate.atStartOfDay(ZoneId.systemDefault()).toInstant()).before(savingTransaction.getDateOf())) { throw new PostInterestAsOnDateException(PostInterestAsOnExceptionType.LAST_TRANSACTION_DATE); } } 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 74e03aa9f..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,6 +23,7 @@ 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; @@ -735,7 +736,7 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl savingsAccountDataDTO.getGroup(), savingsAccountDataDTO.getSavingsProduct(), savingsAccountDataDTO.getApplicationDate(), savingsAccountDataDTO.getAppliedBy()); account.approveAndActivateApplication( - Date.from(savingsAccountDataDTO.getApplicationDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), + Date.from(savingsAccountDataDTO.getApplicationDate().atStartOfDay(ZoneId.systemDefault()).toInstant()), savingsAccountDataDTO.getAppliedBy()); Money amountForDeposit = account.activateWithBalance(); 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 939e1f45b..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,12 +22,12 @@ 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; -import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.organisation.office.data.OfficeData; @@ -246,23 +246,23 @@ public class SearchReadPlatformServiceImpl implements SearchReadPlatformService if (searchConditions.getLoanDateOption().equals(SearchConstants.SearchLoanDate.APPROVAL_DATE.getValue())) { checkAndUpdateWhereClause(sql); params.addValue("loanFromDate", - Date.from(searchConditions.getLoanFromDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(searchConditions.getLoanFromDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); params.addValue("loanToDate", - Date.from(searchConditions.getLoanToDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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", - Date.from(searchConditions.getLoanFromDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(searchConditions.getLoanFromDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); params.addValue("loanToDate", - Date.from(searchConditions.getLoanToDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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", - Date.from(searchConditions.getLoanFromDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(searchConditions.getLoanFromDate().atStartOfDay(ZoneId.systemDefault()).toInstant())); params.addValue("loanToDate", - Date.from(searchConditions.getLoanToDate().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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/shareaccounts/serialization/ShareAccountDataSerializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/serialization/ShareAccountDataSerializer.java index e2291da92..578d26f57 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 @@ -25,6 +25,7 @@ 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; @@ -210,18 +211,17 @@ public class ShareAccountDataSerializer { String accountNo = null; Long approvedShares = null; Long pendingShares = requestedShares; - BigDecimal unitPrice = shareProduct - .deriveMarketPrice(Date.from(applicationDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + BigDecimal unitPrice = shareProduct.deriveMarketPrice(Date.from(applicationDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); ShareAccountTransaction transaction = new ShareAccountTransaction( - Date.from(applicationDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), requestedShares, unitPrice); + 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, - Date.from(submittedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), 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); @@ -239,7 +239,7 @@ public class ShareAccountDataSerializer { private void createChargeTransaction(ShareAccount account) { BigDecimal totalChargeAmount = BigDecimal.ZERO; Set charges = account.getCharges(); - Date currentDate = Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + Date currentDate = Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant()); for (ShareAccountCharge charge : charges) { if (charge.isActive() && charge.isShareAccountActivation()) { charge.deriveChargeAmount(totalChargeAmount, account.getCurrency()); @@ -288,7 +288,7 @@ public class ShareAccountDataSerializer { if (this.fromApiJsonHelper.parameterExists(ShareAccountApiConstants.submitteddate_paramname, element)) { final Date submittedDate = Date .from(this.fromApiJsonHelper.extractLocalDateNamed(ShareAccountApiConstants.submitteddate_paramname, element) - .atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + .atStartOfDay(ZoneId.systemDefault()).toInstant()); baseDataValidator.reset().parameter(ShareAccountApiConstants.submitteddate_paramname).value(submittedDate).notNull(); if (account.setSubmittedDate(submittedDate)) { actualChanges.put(ShareAccountApiConstants.submitteddate_paramname, submittedDate); @@ -363,7 +363,7 @@ public class ShareAccountDataSerializer { if (this.fromApiJsonHelper.parameterExists(ShareAccountApiConstants.applicationdate_param, element)) { applicationDate = Date .from(this.fromApiJsonHelper.extractLocalDateNamed(ShareAccountApiConstants.applicationdate_param, element) - .atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + .atStartOfDay(ZoneId.systemDefault()).toInstant()); baseDataValidator.reset().parameter(ShareAccountApiConstants.applicationdate_param).value(applicationDate).notNull(); } else { applicationDate = existingApplicationDate; @@ -495,7 +495,7 @@ public class ShareAccountDataSerializer { } AppUser approvedUser = this.platformSecurityContext.authenticatedUser(); - account.approve(Date.from(approvedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), approvedUser); + account.approve(Date.from(approvedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), approvedUser); actualChanges.put(ShareAccountApiConstants.id_paramname, account.getId()); updateTotalChargeDerived(account); return actualChanges; @@ -627,10 +627,10 @@ public class ShareAccountDataSerializer { throw new PlatformApiDataValidationException(dataValidationErrors); } AppUser approvedUser = this.platformSecurityContext.authenticatedUser(); - account.activate(Date.from(activatedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), approvedUser); + account.activate(Date.from(activatedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), approvedUser); handlechargesOnActivation(account); actualChanges.put(ShareAccountApiConstants.charges_paramname, - Date.from(activatedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + Date.from(activatedDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); return actualChanges; } @@ -733,9 +733,9 @@ public class ShareAccountDataSerializer { throw new PlatformApiDataValidationException(dataValidationErrors); } final BigDecimal unitPrice = shareProduct - .deriveMarketPrice(Date.from(requestedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + .deriveMarketPrice(Date.from(requestedDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); ShareAccountTransaction purchaseTransaction = new ShareAccountTransaction( - Date.from(requestedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), sharesRequested, unitPrice); + Date.from(requestedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), sharesRequested, unitPrice); account.addAdditionalPurchasedShares(purchaseTransaction); handleAdditionalSharesChargeTransactions(account, purchaseTransaction); actualChanges.put(ShareAccountApiConstants.additionalshares_paramname, purchaseTransaction); @@ -892,9 +892,9 @@ public class ShareAccountDataSerializer { throw new PlatformApiDataValidationException(dataValidationErrors); } BigDecimal unitPrice = account.getShareProduct() - .deriveMarketPrice(Date.from(requestedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + .deriveMarketPrice(Date.from(requestedDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); ShareAccountTransaction transaction = ShareAccountTransaction.createRedeemTransaction( - Date.from(requestedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), sharesRequested, unitPrice); + Date.from(requestedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), sharesRequested, unitPrice); validateRedeemRequest(account, transaction, baseDataValidator, dataValidationErrors); account.addAdditionalPurchasedShares(transaction); actualChanges.put(ShareAccountApiConstants.requestedshares_paramname, transaction); @@ -1055,10 +1055,9 @@ public class ShareAccountDataSerializer { AppUser approvedUser = this.platformSecurityContext.authenticatedUser(); final BigDecimal unitPrice = account.getShareProduct().deriveMarketPrice(DateUtils.getDateOfTenant()); ShareAccountTransaction transaction = ShareAccountTransaction.createRedeemTransaction( - Date.from(closedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), account.getTotalApprovedShares(), - unitPrice); + Date.from(closedDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), account.getTotalApprovedShares(), unitPrice); account.addAdditionalPurchasedShares(transaction); - account.close(Date.from(closedDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), 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/ShareAccountReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/service/ShareAccountReadPlatformServiceImpl.java index a45780741..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 @@ -22,6 +22,7 @@ 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; @@ -491,7 +492,7 @@ public class ShareAccountReadPlatformServiceImpl implements ShareAccountReadPlat public ShareAccountDividendData mapRow(ResultSet rs, int rowNum) throws SQLException { final Long id = rs.getLong("id"); final Date postedDate = Date - .from(JdbcSupport.getLocalDate(rs, "created_date").atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + .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/shareproducts/serialization/ShareProductDataSerializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/serialization/ShareProductDataSerializer.java index bae46e037..dd4e40c04 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 @@ -25,6 +25,7 @@ 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; @@ -222,7 +223,7 @@ public class ShareProductDataSerializer { final BigDecimal shareValue = this.fromApiJsonHelper .extractBigDecimalWithLocaleNamed(ShareProductApiConstants.sharevalue_paramname, arrayElement); ShareProductMarketPriceData obj = new ShareProductMarketPriceData(id, - Date.from(localDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), shareValue); + Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()), shareValue); set.add(obj); } } @@ -240,7 +241,7 @@ public class ShareProductDataSerializer { final BigDecimal shareValue = this.fromApiJsonHelper .extractBigDecimalWithLocaleNamed(ShareProductApiConstants.sharevalue_paramname, arrayElement); ShareProductMarketPrice obj = new ShareProductMarketPrice( - Date.from(localDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), shareValue); + 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 b1e2b86d8..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 @@ -20,12 +20,12 @@ 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.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.products.service.ProductReadPlatformService; @@ -78,8 +78,8 @@ public class ShareProductDividendAssembler { if (numberOfShareDays > 0) { double amountPerShareDay = amount.doubleValue() / numberOfShareDays; productDividendPayOutDetails = new ShareProductDividendPayOutDetails(productId, Money.of(currency, amount).getAmount(), - Date.from(dividendPeriodStartDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()), - Date.from(dividendPeriodEndDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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; 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 ad07770fb..02948a5ae 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 @@ -20,6 +20,7 @@ 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; @@ -97,7 +98,7 @@ public class TaxComponent extends AbstractAuditableCustom { this.creditAccountType = creditAccountType.getValue(); } this.creditAcount = creditAcount; - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } public static TaxComponent createTaxComponent(final String name, final BigDecimal percentage, final GLAccountType debitAccountType, @@ -138,11 +139,11 @@ public class TaxComponent extends AbstractAuditableCustom { if (startDateFromUI != null) { startDate = startDateFromUI; } - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); changes.put(TaxApiConstants.startDateParamName, startDate); } else if (setAsCurrentDate) { changes.put(TaxApiConstants.startDateParamName, startDate); - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } 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 753d67845..87514f157 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 @@ -20,6 +20,7 @@ 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; @@ -50,8 +51,8 @@ public class TaxComponentHistory extends AbstractAuditableCustom { private TaxComponentHistory(final BigDecimal percentage, final LocalDate startDate, final LocalDate endDate) { this.percentage = percentage; - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + 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, 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 37f6578d3..84c008085 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 @@ -19,6 +19,7 @@ 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; @@ -56,10 +57,10 @@ public class TaxGroupMappings extends AbstractAuditableCustom { this.taxComponent = taxComponent; if (startDate != null) { - this.startDate = Date.from(startDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.startDate = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } if (endDate != null) { - this.endDate = Date.from(endDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()); + this.endDate = Date.from(endDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } } 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 e98234e5b..5a6f2520c 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 @@ -22,6 +22,7 @@ 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; @@ -475,7 +476,7 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr case PROPOSAL: client.setStatus(ClientStatus.TRANSFER_IN_PROGRESS.getValue()); client.updateTransferToOffice(destinationOffice); - client.updateProposedTransferDate(Date.from(transferDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + client.updateProposedTransferDate(Date.from(transferDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); break; case REJECTION: client.setStatus(ClientStatus.TRANSFER_ON_HOLD.getValue()); @@ -489,9 +490,7 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr } this.noteWritePlatformService.createAndPersistClientNote(client, jsonCommand); - Date proposedTransferDate = transferDate != null - ? Date.from(transferDate.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant()) - : 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(), Date.from(DateUtils.getLocalDateTimeOfTenant().atZone(DateUtils.getDateTimeZoneOfTenant()).toInstant()), 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 dba9da859..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 @@ -21,11 +21,11 @@ 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.DateUtils; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.spm.data.ScorecardData; @@ -96,7 +96,7 @@ public class ScorecardReadPlatformServiceImpl implements ScorecardReadPlatformSe final Integer value = rs.getInt("value"); return ScorecardValue.instance(questionId, responseId, value, - Date.from(createdOn.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + 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 dac281945..f789d6eb9 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 @@ -19,6 +19,7 @@ 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; @@ -84,9 +85,9 @@ public class SpmService { LocalDate validFrom = DateUtils.getLocalDateOfTenant(); // set valid to for 100 years Calendar cal = Calendar.getInstance(); - cal.setTime(Date.from(validFrom.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + cal.setTime(Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant())); cal.add(Calendar.YEAR, 100); - survey.setValidFrom(Date.from(validFrom.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + survey.setValidFrom(Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant())); survey.setValidTo(cal.getTime()); try { this.surveyRepository.saveAndFlush(survey); @@ -134,9 +135,9 @@ public class SpmService { final Survey survey = findById(id); LocalDate validFrom = DateUtils.getLocalDateOfTenant(); Calendar cal = Calendar.getInstance(); - cal.setTime(Date.from(validFrom.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + cal.setTime(Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant())); cal.add(Calendar.YEAR, 100); - survey.setValidFrom(Date.from(validFrom.atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + survey.setValidFrom(Date.from(validFrom.atStartOfDay(ZoneId.systemDefault()).toInstant())); survey.setValidTo(cal.getTime()); this.surveyRepository.save(survey); 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 16f1b28d5..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,6 +18,7 @@ */ package org.apache.fineract.spm.util; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -51,8 +52,7 @@ public final class ScorecardMapper { ScorecardMapper.setQuestionAndResponse(scorecardValue, scorecard, survey); scorecard.setAppUser(appUser); scorecard.setClient(client); - scorecard.setCreatedOn( - Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(DateUtils.getDateTimeZoneOfTenant()).toInstant())); + scorecard.setCreatedOn(Date.from(DateUtils.getLocalDateOfTenant().atStartOfDay(ZoneId.systemDefault()).toInstant())); scorecard.setValue(scorecardValue.getValue()); } } else {